<?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>125879</bug_id>
          
          <creation_ts>2013-12-17 15:52:39 -0800</creation_ts>
          <short_desc>[iOS] Upstream WebCore/loader changes</short_desc>
          <delta_ts>2023-04-04 05:19:02 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=250814</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960695</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-17 15:52:39 -0800</bug_when>
    <thetext>Upstream the iOS related changes to WebCore/loader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960697</commentid>
    <comment_count>1</comment_count>
      <attachid>219459</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-17 15:57:41 -0800</bug_when>
    <thetext>Created attachment 219459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960706</commentid>
    <comment_count>2</comment_count>
      <attachid>219459</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-17 16:12:42 -0800</bug_when>
    <thetext>Comment on attachment 219459
Patch

Attachment 219459 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/49628249</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960738</commentid>
    <comment_count>3</comment_count>
      <attachid>219475</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-17 16:51:37 -0800</bug_when>
    <thetext>Created attachment 219475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960752</commentid>
    <comment_count>4</comment_count>
      <attachid>219475</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-17 17:12:05 -0800</bug_when>
    <thetext>Comment on attachment 219475
Patch

Attachment 219475 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/45748145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960754</commentid>
    <comment_count>5</comment_count>
      <attachid>219478</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-17 17:19:20 -0800</bug_when>
    <thetext>Created attachment 219478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960954</commentid>
    <comment_count>6</comment_count>
      <attachid>219478</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-12-18 09:28:49 -0800</bug_when>
    <thetext>Comment on attachment 219478
Patch

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

We really need to work to reduce these PLATFORM(IOS) once we land them. There are way too many and many look questionable.

&gt; Source/WebCore/ChangeLog:9
&gt; +        * WebCore.exp.in: Added symbols __ZN7WebCore11MemoryCache15addImageToCacheEP7CGImageRKNS_3URLERKN3WTF6StringE
&gt; +        and __ZN7WebCore11MemoryCache20removeImageFromCacheERKNS_3URLERKN3WTF6StringE.

I don’t think listing the mangled symbols here is helpful.

&gt; Source/WebCore/loader/DocumentLoader.cpp:106
&gt; +    Vector&lt;RefPtr&lt;ResourceLoader&gt;&gt; loadersCopy;
&gt; +    copyToVector(loaders, loadersCopy);
&gt; +    size_t size = loadersCopy.size();
&gt; +    for (size_t i = 0; i &lt; size; ++i) {
&gt; +        ResourceHandle* handle = loadersCopy[i]-&gt;handle();

I would write this like this:

    for (auto&amp; loader : loadersCopy) {
        ResourceHandle* handle = loader-&gt;handle();

&gt; Source/WebCore/loader/DocumentWriter.cpp:42
&gt;  #include &quot;FrameView.h&quot;
&gt; +#if PLATFORM(IOS)
&gt; +#include &quot;PDFDocument.h&quot;
&gt; +#endif
&gt;  #include &quot;PlaceholderDocument.h&quot;

If the include is going to be conditional like this, please put it in a separate paragraph rather than trying to sort it in the middle of the main includes paragraph.

&gt; Source/WebCore/loader/FrameLoader.cpp:156
&gt;  static const char defaultAcceptHeader[] = &quot;text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&quot;;
&gt;  static double storedTimeOfLastCompletedLoad;
&gt; +#if PLATFORM(IOS)
&gt; +static const int memoryLevelThresholdToPrunePageCache = 20;
&gt; +#endif

Should add a blank line so the iOS-specific constant is in a separate paragraph. Also, static is not needed here.

&gt; Source/WebCore/loader/FrameLoader.cpp:199
&gt;          ASSERT(!m_inProgress || m_frame.page());
&gt; -        if (m_inProgress)
&gt; +        if (m_inProgress &amp;&amp; m_frame.page())

Why? This contradicts the assertion on the line above?

&gt; Source/WebCore/loader/FrameLoader.cpp:288
&gt; +    // FIXME: &lt;rdar://problem/9716897&gt; Verify OpenSource r89312 was merged correctly

I don’t understand this comment at all.

&gt; Source/WebCore/loader/FrameLoader.cpp:289
&gt; +    UNUSED_PARAM(url);

Huh?

&gt; Source/WebCore/loader/FrameLoader.cpp:833
&gt; +        // FIXME: &lt;rdar://problem/9716897&gt; Verify OpenSource r89312 was merged correctly

Mysterious comment again. Also, two line if body means we should have braces here.

&gt; Source/WebCore/loader/FrameLoader.cpp:3586
&gt;      FloatRect windowRect = page-&gt;chrome().windowRect();
&gt; -    FloatSize viewportSize = page-&gt;chrome().pageRect().size();
&gt; -
&gt;      if (features.xSet)
&gt;          windowRect.setX(features.x);
&gt;      if (features.ySet)
&gt;          windowRect.setY(features.y);
&gt; +
&gt;      // Zero width and height mean using default size, not minumum one.
&gt; +    FloatSize viewportSize = page-&gt;chrome().pageRect().size();

Seems strange to change the !IOS code in this patch.

&gt; Source/WebCore/loader/ResourceBuffer.h:76
&gt; +    void shouldUsePurgeableMemory(bool);

A setter should not be named “should”. This could be named setShouldUsePurgeableMemory. Also not clear what is iOS-specific here.

&gt; Source/WebCore/loader/SubresourceLoader.cpp:93
&gt; +        // &lt;rdar://problem/9121719&gt; - https://bugs.webkit.org/show_bug.cgi?id=56647.

This is not a very good comment.

&gt; Source/WebCore/loader/SubresourceLoader.h:57
&gt; +    virtual const ResourceRequest&amp; iOSOriginalRequest() const OVERRIDE { return m_iOSOriginalRequest; }

What the heck is an “iOS” original request? Seems completely wrong to have this.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:109
&gt; +#if PLATFORM(IOS)
&gt; +    SQLiteTransactionInProgressAutoCounter transactionCounter;
&gt; +#endif

The conditionals should be in the class rather than at every call site.

&gt; Source/WebCore/loader/cache/MemoryCache.cpp:68
&gt; +#if PLATFORM(IOS)
&gt; +    ASSERT(WebThreadIsLockedOrDisabled());
&gt; +#else
&gt;      ASSERT(WTF::isMainThread());
&gt; +#endif

Can we make an assertion that deals with this conditional so we don’t have to have an #if at every call site?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961188</commentid>
    <comment_count>7</comment_count>
      <attachid>219478</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-18 17:16:34 -0800</bug_when>
    <thetext>Comment on attachment 219478
Patch

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

&gt;&gt; Source/WebCore/loader/SubresourceLoader.cpp:93
&gt;&gt; +        // &lt;rdar://problem/9121719&gt; - https://bugs.webkit.org/show_bug.cgi?id=56647.
&gt; 
&gt; This is not a very good comment.

What about this:

&quot;On iOS, do not invoke synchronous resource load delegates while resource load scheduling is disabled to avoid re-entering style selection
from a different thread (see &lt;rdar://problem/9121719&gt;). FIXME: This should be fixed for all ports in https://bugs.webkit.org/show_bug.cgi?id=56647.&quot;

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961229</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-12-18 18:45:21 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &quot;On iOS, do not invoke synchronous resource load delegates while resource load scheduling is disabled to avoid re-entering style selection
&gt; from a different thread (see &lt;rdar://problem/9121719&gt;). FIXME: This should be fixed for all ports in https://bugs.webkit.org/show_bug.cgi?id=56647.&quot;

While it’s a bit wordy, it seems really clear and answers the comment question: “Why?”

Great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961416</commentid>
    <comment_count>9</comment_count>
      <attachid>219478</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-19 09:56:33 -0800</bug_when>
    <thetext>Comment on attachment 219478
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        and __ZN7WebCore11MemoryCache20removeImageFromCacheERKNS_3URLERKN3WTF6StringE.
&gt; 
&gt; I don’t think listing the mangled symbols here is helpful.

Will update this line to read:

* WebCore.exp.in: Added symbols for MemoryCache::{addImageToCache, removeImageFromCache}().

&gt;&gt; Source/WebCore/loader/DocumentLoader.cpp:106
&gt;&gt; +        ResourceHandle* handle = loadersCopy[i]-&gt;handle();
&gt; 
&gt; I would write this like this:
&gt; 
&gt;     for (auto&amp; loader : loadersCopy) {
&gt;         ResourceHandle* handle = loader-&gt;handle();

Will write using C++11 range-based for loop.

&gt;&gt; Source/WebCore/loader/DocumentWriter.cpp:42
&gt;&gt;  #include &quot;PlaceholderDocument.h&quot;
&gt; 
&gt; If the include is going to be conditional like this, please put it in a separate paragraph rather than trying to sort it in the middle of the main includes paragraph.

Will move conditional include to a separate paragraph.

&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:156
&gt;&gt; +#endif
&gt; 
&gt; Should add a blank line so the iOS-specific constant is in a separate paragraph. Also, static is not needed here.

Will remove keyword static and add a blank line above PLATFORM(IOS).

&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:199
&gt;&gt; +        if (m_inProgress &amp;&amp; m_frame.page())
&gt; 
&gt; Why? This contradicts the assertion on the line above?

Will revert this change. This changed was originally a speculative fix for &lt;rdar://problem/12798052&gt;. As of the time of writing, we can assume Frame::page() is never null (as Frame takes a Page object as reference on construction, stores it in a pointer, and never nullifies it). On an aside, we should look to change the return type of Frame::Page() from a pointer to a reference and consider changing Frame::m_page to be a reference.

&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:288
&gt;&gt; +    // FIXME: &lt;rdar://problem/9716897&gt; Verify OpenSource r89312 was merged correctly
&gt; 
&gt; I don’t understand this comment at all.

From reading &lt;rdar://problem/9716897&gt; and looking at related radars, I&apos;ll update this comment to read:

FIXME: We need to initialize the document URL to the specified URL. Currently the URL is empty and hence
FrameLoader::checkCompleted() will overwrite the URL of the document to be activeDocumentLoader()-&gt;documentURL().

&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:289
&gt;&gt; +    UNUSED_PARAM(url);
&gt; 
&gt; Huh?

Will remove this line. Instead, will remove the name of the parameter since the argument is unused. See my above remark for the reasoning behind the unused argument.

&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:833
&gt;&gt; +#if PLATFORM(IOS)
&gt;&gt; +    URL url = m_frame.document()-&gt;url();
&gt;&gt; +    if (url.isEmpty())
&gt;&gt; +        // FIXME: &lt;rdar://problem/9716897&gt; Verify OpenSource r89312 was merged correctly
&gt; 
&gt; Mysterious comment again. Also, two line if body means we should have braces here.

Will update the comment to read:

We need to update the document URL of a PDF document to be non-empty so that both back/forward history navigation
between PDF pages and fragment navigation works. See &lt;rdar://problem/9544769&gt; for more details.
FIXME: Is there a better place for this code, say DocumentLoader? Also, we should explicitly only update the URL
of the document when it&apos;s a PDFDocument object instead of assuming that a Document object with an empty URL is a PDFDocument.
FIXME: This code is incorrect for a synthesized document (which also has an empty URL). The URL for a synthesized
document should be the URL specified to FrameLoader::initForSynthesizedDocument().

&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:3586
&gt;&gt; +    FloatSize viewportSize = page-&gt;chrome().pageRect().size();
&gt; 
&gt; Seems strange to change the !IOS code in this patch.

Will revert this change.

&gt;&gt; Source/WebCore/loader/ResourceBuffer.h:76
&gt;&gt; +    void shouldUsePurgeableMemory(bool);
&gt; 
&gt; A setter should not be named “should”. This could be named setShouldUsePurgeableMemory. Also not clear what is iOS-specific here.

Will rename to setShouldUsePurgeableMemory(). I will also add a FIXME comment to remove the PLATFORM(IOS)-guard once we upstream the iOS changes to SharedBuffer.{cpp, h} and SharedBufferCF.cpp.

&gt;&gt;&gt; Source/WebCore/loader/SubresourceLoader.cpp:93
&gt;&gt;&gt; +        // &lt;rdar://problem/9121719&gt; - https://bugs.webkit.org/show_bug.cgi?id=56647.
&gt;&gt; 
&gt;&gt; This is not a very good comment.
&gt; 
&gt; What about this:
&gt; 
&gt; &quot;On iOS, do not invoke synchronous resource load delegates while resource load scheduling is disabled to avoid re-entering style selection
&gt; from a different thread (see &lt;rdar://problem/9121719&gt;). FIXME: This should be fixed for all ports in https://bugs.webkit.org/show_bug.cgi?id=56647.&quot;
&gt; 
&gt; ?

I&apos;ll use Benjamin Poulain&apos;s suggested comment (see comment #7).

&gt;&gt; Source/WebCore/loader/SubresourceLoader.h:57
&gt;&gt; +    virtual const ResourceRequest&amp; iOSOriginalRequest() const OVERRIDE { return m_iOSOriginalRequest; }
&gt; 
&gt; What the heck is an “iOS” original request? Seems completely wrong to have this.

I&apos;m not sure. When I have a moment I&apos;ll look to understand its purpose. I&apos;ll add a FIXME comment for now that reads: What is an &quot;iOS&quot; original request? Why is it necessary?

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:109
&gt;&gt; +#endif
&gt; 
&gt; The conditionals should be in the class rather than at every call site.

I agree. I hope you don&apos;t mind that I defer fixing this up until after we upstream the file SQLiteDatabaseTracker.h. For now, I&apos;ll add a FIXME comment.

&gt;&gt; Source/WebCore/loader/cache/MemoryCache.cpp:68
&gt;&gt; +#endif
&gt; 
&gt; Can we make an assertion that deals with this conditional so we don’t have to have an #if at every call site?

Will revert this code and all similar code as it&apos;s sufficient to use ASSERT(WTF::isMainThread()) because WTF::isMainThread() is defined in terms of WebThreadIsLockedOrDisabled() when building WebKit for iOS. See bug #119644 for more details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961423</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-19 10:06:54 -0800</bug_when>
    <thetext>Committed r160841: &lt;http://trac.webkit.org/changeset/160841&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961442</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-12-19 10:55:31 -0800</bug_when>
    <thetext>Committed Windows build fix in &lt;http://trac.webkit.org/changeset/160845&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961449</commentid>
    <comment_count>12</comment_count>
      <attachid>219478</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-12-19 11:08:11 -0800</bug_when>
    <thetext>Comment on attachment 219478
Patch

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

&gt;&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:199
&gt;&gt;&gt; +        if (m_inProgress &amp;&amp; m_frame.page())
&gt;&gt; 
&gt;&gt; Why? This contradicts the assertion on the line above?
&gt; 
&gt; Will revert this change. This changed was originally a speculative fix for &lt;rdar://problem/12798052&gt;. As of the time of writing, we can assume Frame::page() is never null (as Frame takes a Page object as reference on construction, stores it in a pointer, and never nullifies it). On an aside, we should look to change the return type of Frame::Page() from a pointer to a reference and consider changing Frame::m_page to be a reference.

I’m worried about reverting this if it was a speculative fix; it might be helping us!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219459</attachid>
            <date>2013-12-17 15:57:41 -0800</date>
            <delta_ts>2013-12-17 16:51:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125879-20131217155740.patch</filename>
            <type>text/plain</type>
            <size>103340</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhjZTUyMTQ4ZDM0MDQx
MjhjODQzZTBjOGE4MWZlNTJkYTNhODA0Yy4uY2VkZjg5MTVkNGExM2E3ZWNiMDIwOTRhYWEzN2Y3
NTA1M2NiMzgxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAxMy0xMi0xNyAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVXBzdHJlYW0g
V2ViQ29yZS9sb2FkZXIgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI1ODc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YXJlQWxsTG9hZGVyc1BhZ2VDYWNoZUFjY2VwdGFibGUpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcik6IEluaXRpYWxpemUgbV9z
dWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxlLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI6OnN0b3BMb2FkaW5nKTogTW9kaWZpZWQgdG8gY29uZGl0aW9uYWxs
eSBjYWxsIGFyZUFsbExvYWRlcnNQYWdlQ2FjaGVBY2NlcHRhYmxlKCkuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudExvYWRlcjo6aGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkU29vbik6IE1vZGlm
aWVkIHRvIHF1ZXJ5IEZyYW1lTG9hZGVyOjpsb2Fkc1N5bmNocm9ub3VzbHkoKQorICAgICAgICB3
aGV0aGVyIHRvIGxvYWQgc3Vic3RpdHV0ZSBkYXRhIGltbWVkaWF0ZWx5IG9yIHRvIHNjaGVkdWxl
IGEgbG9hZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpyZXNwb25zZVJlY2Vp
dmVkKTogTW9kaWZpZWQgdG8gY3JlYXRlIGEgY29udGVudCBmaWxlciB3aGVuIHRoZSByZXNwb25z
ZSBwcm90b2NvbAorICAgICAgICBpcyBlaXRoZXIgSFRUUCBvciBIVFRQUywgYXNzdW1pbmcgY29u
dGVudCBmaWx0ZXJpbmcgaXMgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyOjpkYXRhUmVjZWl2ZWQpOiBNb2RpZmllZCB0byBjYWxsIERvY3VtZW50TG9hZGVyOjpzZXRD
b250ZW50RmlsdGVyRm9yQmxvY2tlZExvYWQoKQorICAgICAgICBhcyBhcHByb3ByaWF0ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpjbGVhck1haW5SZXNvdXJjZUxvYWRlcik6
IEFkZGVkIFBMQVRGT1JNKElPUyktZ3VhcmRlZCBjb2RlLiBBbHNvIGFkZGVkIGEKKyAgICAgICAg
RklYTUUgY29tbWVudCB0byByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQgb25jZSB3ZSB1
cHN0cmVhbSB0aGUgaU9TIGNoYW5nZXMgdG8gUmVzb3VyY2VSZXF1ZXN0LmguCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0UmVzcG9uc2VNSU1FVHlwZSk6IEFkZGVkOyBndWFy
ZCBieSBQTEFURk9STShJT1MpLiBBbHNvIGFkZGVkIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291cmNlKTogQWRkZWQg
UExBVEZPUk0oSU9TKS1ndWFyZGVkIGNvZGUuIEFsc28gYWRkZWQgYQorICAgICAgICBGSVhNRSBj
b21tZW50IHRvIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZCBvbmNlIHdlIHVwc3RyZWFt
IHRoZSBpT1MgY2hhbmdlcyB0byBSZXNvdXJjZVJlcXVlc3QuaC4KKyAgICAgICAgSSBhbHNvIHN1
YnN0aXR1dGVkIHN0YXRpYyBOZXZlckRlc3Ryb3llZDw+IGZvciBERUZJTkVfU1RBVElDX0xPQ0FM
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldENvbnRlbnRGaWx0ZXJGb3JC
bG9ja2VkTG9hZCk6IEFkZGVkOyBndWFyZGVkIGJ5IFVTRShDT05URU5UX0ZJTFRFUklORykuCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6aGFuZGxlQ29udGVudEZpbHRlclJlcXVl
c3QpOiBBZGRlZDsgZ3VhcmRlZCBieSBVU0UoQ09OVEVOVF9GSUxURVJJTkcpIGFuZCBQTEFURk9S
TShJT1MpLgorICAgICAgICBBbHNvIGFkZGVkIGEgRklYTUUgY29tbWVudCB0byByZW1vdmUgdGhl
IFBMQVRGT1JNKElPUykgZ3VhcmQgaW5zaWRlIGl0cyBmdW5jdGlvbiBib2R5IG9uY2Ugd2UgdXBz
dHJlYW0KKyAgICAgICAgZmlsZSBDb250ZW50RmlsdGVySU9TLm1tIGFuZCBpbXBsZW1lbnQgQ29u
dGVudEZpbHRlcjo6cmVxdWVzdFVuYmxvY2tBbmREaXNwYXRjaElmU3VjY2Vzc2Z1bCgpIGZvciBN
YWMuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudExvYWRlcjo6c2V0UmVzcG9uc2UpOiBBZGRlZDsgZ3VhcmQgYnkgUExBVEZPUk0o
SU9TKS4gQWxzbyBhZGRlZCBhIEZJWE1FIGNvbW1lbnQgYXMKKyAgICAgICAgdGhpcyBtZXRob2Qg
c2VlbXMgdG8gdmlvbGF0ZSB0aGUgZW5jYXBzdWxhdGlvbiBvZiBEb2N1bWVudExvYWRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzdWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdl
Q2FjaGVBY2NlcHRhYmxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRl
cjo6ZG9jdW1lbnRVUkwpOiBBZGRlZDsgcmV0dXJucyB0aGUgVVJMIG9mIHRoZSBkb2N1bWVudCBy
ZXN1bHRpbmcgZnJvbSB0aGUgRG9jdW1lbnRMb2FkZXIuCisgICAgICAgICogbG9hZGVyL0RvY3Vt
ZW50V3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50V3JpdGVyOjpjcmVhdGVE
b2N1bWVudCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlIHRvIGNyZWF0ZSBhIFBERiBkb2N1bWVu
dC4KKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5Q2hyb21lQ2xpZW50OjpvcGVuRGF0ZVRpbWVDaG9vc2VyKTogT3B0IG91dCBvZiBjb21w
aWxpbmcgdGhpcyBjb2RlIGZvciBpT1MuIEFsc28gc3Vic3RpdHV0ZWQKKyAgICAgICAgbnVsbHB0
ciBmb3IgMC4KKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFt
ZVByb2dyZXNzVHJhY2tlcjo6fkZyYW1lUHJvZ3Jlc3NUcmFja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6IEluaXRpYWxpemUgbV9sb2Fkc1N5bmNocm9u
b3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aW5pdEZvclN5bnRoZXNpemVk
RG9jdW1lbnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFURk9STShJT1MpLiBBbHNvIGFkZGVkIEZJ
WE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tDb21wbGV0
ZWQpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZSB3aXRoIEZJWE1FIGNvbW1lbnQuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwpOiBBZGRlZCBp
T1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9wRm9y
VXNlckNhbmNlbCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlIGFuZCBGSVhNRSBjb21tZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6IEFk
ZGVkIGlPUy1zcGVjaWZpYyBjb2RlIGFuZCBGSVhNRSBjb21tZW50LgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6IE9wdCBvdXQgb2YgRU5BQkxF
KFRPVUNIX0VWRU5UUykgbG9naWMgd2hlbiBidWlsZGluZyBmb3IgaU9TLgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmRpZEZpcnN0TGF5b3V0KTogQWRkZWQgaU9TLXNwZWNpZmljIGNv
ZGUuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29ubmVjdGlvblByb3BlcnRpZXMp
OiBBZGRlZDsgZ3VhcmRlZCBieSBQTEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlV2luZG93KTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUgYW5kIEZJWE1FIGNvbW1lbnQuCisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6c2V0TG9hZHNTeW5jaHJvbm91c2x5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6bG9hZHNTeW5jaHJvbm91c2x5KTogQWRkZWQuCisgICAgICAgICogbG9hZGVy
L0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3JlU2Nyb2xs
UG9zaXRpb25BbmRWaWV3U3RhdGUpOiBPcHQgb3V0IG9mIHNjcm9sbCBwb3NpdGlvbiBsb2dpYyB3
aGVuIGJ1aWxkaW5nIGZvciBpT1MuCisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxl
cjo6cmVwbGFjZUN1cnJlbnRJdGVtKTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmg6CisgICAgICAgICogbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuaDogQ2hh
bmdlZCBhY2Nlc3MgY29udHJvbCBvZiBjb25zdHJ1Y3RvciBmcm9tIHByaXZhdGUgdG8gcHJvdGVj
dGVkIGFuZCByZW1vdmVkIHRoZSBGSU5BTAorICAgICAgICBrZXl3b3JkIGZyb20gdGhlIGNsYXNz
IHNvIHRoYXQgd2UgY2FuIHN1YmNsYXNzIFBsYWNlaG9sZGVyRG9jdW1lbnQgb24gaU9TLgorICAg
ICAgICAqIGxvYWRlci9Qb2xpY3lDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvbGlj
eUNoZWNrZXI6OmNoZWNrTmF2aWdhdGlvblBvbGljeSk6IEFkZGVkIFVTRShRVUlDS19MT09LKS0g
YW5kIFVTRShDT05URU5UX0ZJTFRFUklORyktZ3VhcmRlZCBjb2RlLgorICAgICAgICAqIGxvYWRl
ci9SZXNvdXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUJ1ZmZlcjo6
c2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9T
KS4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VCdWZmZXIuaDoKKyAgICAgICAgKiBsb2FkZXIv
UmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
Tm90aWZpZXI6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KTogQWRkZWQgVVNFKFFVSUNLX0xPT0sp
LWd1YXJkZWQgY29kZS4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJy
ZXNvdXJjZUxvYWQpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZSk6IEFkZGVkIGlPUy1zcGVjaWZp
YyBjb2RlIHdpdGggRklYTUUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKTogQWRkZWQgbnVsbC1jaGVj
ayBmb3IgdmFyaWFibGUgb2xkSG9zdC4gQWxzbyBhZGRlZAorICAgICAgICBpT1Mtc3BlY2lmaWMg
Y29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5k
aW5nUmVxdWVzdHMpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKiBsb2FkZXIv
UmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6Omlu
aXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpjb25uZWN0
aW9uUHJvcGVydGllcyk6IEFkZGVkOyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAg
ICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRlcjo6c3RhcnRMb2FkaW5nKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjppT1NPcmlnaW5hbFJlcXVlc3QpOiBBZGRl
ZDsgaU9TLXNwZWNpZmljLgorICAgICAgICAqIGxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6bG9hZFBsdWdpbik6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlLgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKTogQWRkZWQ7IGd1
YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9h
ZGVyOjpkaWRGaW5pc2hMb2FkaW5nKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6d2lsbENhbmNlbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI6Om5vdGlmeURvbmUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKTogRGl0dG8u
CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6IEFkZGVkIGlPUy1zcGVj
aWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Omxv
YWRNYW5pZmVzdEhvc3RIYXNoZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3Vs
YXRlUXVvdGFGb3JPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2FnZUZvck9yaWdpbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVG
b3JPcmlnaW5FeGNsdWRpbmdDYWNoZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVNRTENvbW1h
bmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2
ZXJpZnlTY2hlbWFWZXJzaW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVN0YXRlbWVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVuc3Vy
ZU9yaWdpblJlY29yZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmxvYWRDYWNoZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnJlbW92ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBTaXpl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVs
ZXRlQ2FjaGVHcm91cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnZhY3V1bURhdGFiYXNlRmlsZSk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Q2Fj
aGVkSW1hZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVNp
emVGb3JSZW5kZXJlcik6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkSW1hZ2VNYW51YWw6OkNhY2hlZEltYWdlTWFudWFsKTogQWRkZWQuIEFsc28gYWRk
ZWQgRklYTUUgY29tbWVudCB0byBpbmNvcnBvcmF0ZSB0aGUgZnVuY3Rpb25hbGl0eQorICAgICAg
ICBvZiB0aGlzIGNsYXNzIGludG8gQ2FjaGVkSW1hZ2UuCisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRJbWFnZU1hbnVhbDo6bXVzdFJldmFsaWRhdGVEdWVUb0NhY2hlSGVhZGVycyk6IEFkZGVkLgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOiBSZW1vdmVkIEZJTkFMIGtleXdv
cmQgZnJvbSBjbGFzcyBzbyB0aGF0IHdlIGNhbiBkZWZpbmUgZGVyaXZlZCBjbGFzcyBDYWNoZWRJ
bWFnZU1hbnVhbC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppc01hbnVhbCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VNYW51YWw6OmFkZEZha2VDbGllbnQp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlTWFudWFsOjpyZW1vdmVGYWtl
Q2xpZW50KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpsb2FkKTogQWRkZWQgaU9TLXNw
ZWNpZmljIGNvZGUuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6Cisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkRG9uZSk6IEFkZGVkIGFyZ3VtZW50
IHNob3VsZFBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMsIGRlZmF1bHRzIHRvIHRydWUuIE1vZGlmaWVk
CisgICAgICAgIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBwZXJmb3JtUG9zdExvYWRBY3Rpb25zKCkg
d2l0aCByZXNwZWN0IHRvIHRoZSBhcmd1bWVudCBzaG91bGRQZXJmb3JtUG9zdExvYWRBY3Rpb25z
LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByZWxvYWQpOiBBZGRl
ZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpjaGVja0ZvclBlbmRpbmdQcmVsb2Fkcyk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1v
cnlDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZW1vcnlDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZW1vcnlDYWNoZTo6YWRkKTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAg
ICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmV2YWxpZGF0aW9uRmFpbGVkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlSW1hZ2VGcm9tQ2FjaGUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXMp
OiBNb2RpZmllZCB0byB0YWtlIGFyZ3VtZW50IHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFs
bExpdmVSZXNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cHJ1bmVMaXZl
UmVzb3VyY2VzVG9TaXplKTogTW9kaWZpZWQgdG8gdGFrZSBhcmd1bWVudCBzaG91bGREZXN0cm95
RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzLAorICAgICAgICBkZWZhdWx0cyB0byBmYWxz
ZS4gV2hlbiB0aGlzIGFyZ3VtZW50IGlzIHRydWUgd2UgZGVzdHJveSB0aGUgZGVjb2RlZCBkYXRh
IGZvciBhbGwgbGl2ZSByZXNvdXJjZXMgZnJvbSB0aGUgbWVtb3J5IGNhY2hlLgorICAgICAgICBT
dWNoIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZnVsIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIGxv
dyBvbiBtZW1vcnkuCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6ZXZpY3QpOiBBZGRl
ZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
aDoKKyAgICAgICAgKiBsb2FkZXIvY2YvU3VicmVzb3VyY2VMb2FkZXJDRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6IEFjdHVh
bGx5IG1ha2UgdGhpcyBjb2RlIGNvbXBpbGUuIEluIHBhcnRpY3VsYXIsIHRoZXJlIGlzIG5vCisg
ICAgICAgIG1ldGhvZCBjYWxsZWQgc2VuZERhdGFUb1Jlc291cmNlIG9uIFN1YnJlc291cmNlTG9h
ZGVyIG9yIGluIGl0cyBjbGFzcyBoaWVyYXJjaHkuCisgICAgICAgICogbG9hZGVyL21hYy9Eb2N1
bWVudExvYWRlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2No
ZWR1bGUpOiBUaGlzIG1ldGhvZCBoYXMgYW4gZW1wdHkgaW1wbGVtZW50YXRpb24gd2hlbiBidWls
ZGluZyBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnVuc2NoZWR1
bGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOiBF
eHBvc2VkIGRlY29kZWRTaXplKCkgdG8gYWNjZXNzIHRoZSBkZWNvZGVkIHNpemUgb2YgdGhlIGJp
dG1hcCBpbWFnZS4KKyAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgaW4gTWVtb3J5
Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSgpLgorCiAyMDEzLTEyLTE2ICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBVcHN0cmVhbSBXZWJDb3JlL2h0bWwg
Y2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggMzJi
ZDgxNTgyYTY3Y2Y5OWI1YzcxNWJiODU3ZWJjYmIwM2JjNzc2Zi4uNzNmZTNhN2FkNWRjNTM4YzVh
OGU3M2NjNjYzYzIwZjZmYzQxNTYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCkBAIC01NiwxMiArNTYsMTQgQEAKICNpbmNsdWRlICJQb2xpY3lDaGVja2VyLmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VCdWZmZXIu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTk1LDYgKzk3LDI3
IEBAIHN0YXRpYyB2b2lkIHNldEFsbERlZmVyc0xvYWRpbmcoY29uc3QgUmVzb3VyY2VMb2FkZXJT
ZXQmIGxvYWRlcnMsIGJvb2wgZGVmZXJzKQogICAgICAgICBsb2FkZXJzQ29weVtpXS0+c2V0RGVm
ZXJzTG9hZGluZyhkZWZlcnMpOwogfQogCitzdGF0aWMgYm9vbCBhcmVBbGxMb2FkZXJzUGFnZUNh
Y2hlQWNjZXB0YWJsZShjb25zdCBSZXNvdXJjZUxvYWRlclNldCYgbG9hZGVycykKK3sKKyAgICBW
ZWN0b3I8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gbG9hZGVyc0NvcHk7CisgICAgY29weVRvVmVj
dG9yKGxvYWRlcnMsIGxvYWRlcnNDb3B5KTsKKyAgICBzaXplX3Qgc2l6ZSA9IGxvYWRlcnNDb3B5
LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gbG9hZGVyc0NvcHlbaV0tPmhhbmRsZSgpOworICAg
ICAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBD
YWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBtZW1vcnlDYWNoZSgpLT5yZXNvdXJjZUZv
clVSTChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAgaWYgKCFjYWNoZWRS
ZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBBbGwgbm9u
LWltYWdlIGxvYWRzIHdpbGwgcHJldmVudCB0aGUgcGFnZSBmcm9tIGVudGVyaW5nIHRoZSBQYWdl
Q2FjaGUuCisgICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2UtPmlzSW1hZ2UoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIERvY3VtZW50
TG9hZGVyOjpEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcSwgY29uc3Qg
U3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQogICAgIDogbV9kZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkKHRydWUpCiAgICAgLCBtX2ZyYW1lKDApCkBAIC0xMTksNiArMTQyLDcgQEAgRG9j
dW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxLCBj
b25zdCBTdWJzdGl0dXRlRGF0YSYKICAgICAsIG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVz
b3VyY2VMb2FkZXIoMCkKICAgICAsIG1fZGF0YUxvYWRUaW1lcih0aGlzLCAmRG9jdW1lbnRMb2Fk
ZXI6OmhhbmRsZVN1YnN0aXR1dGVEYXRhTG9hZE5vdykKICAgICAsIG1fd2FpdGluZ0ZvckNvbnRl
bnRQb2xpY3koZmFsc2UpCisgICAgLCBtX3N1YnJlc291cmNlTG9hZGVyc0FyZVBhZ2VDYWNoZUFj
Y2VwdGFibGUoZmFsc2UpCiAgICAgLCBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0KGFkb3B0UHRyKG5l
dyBBcHBsaWNhdGlvbkNhY2hlSG9zdCh0aGlzKSkpCiB7CiB9CkBAIC0yNTYsNyArMjgwLDE0IEBA
IHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN0b3BMb2FkaW5nKCkKICAgICAvLyAoVGhpcyBjYW4gaGFw
cGVuIHdoZW4gdGhlcmUncyBhIHNpbmdsZSBYTUxIdHRwUmVxdWVzdCBjdXJyZW50bHkgbG9hZGlu
ZyBhbmQgc3RvcExvYWRpbmcgY2F1c2VzIGl0CiAgICAgLy8gdG8gc3RvcCBsb2FkaW5nLiBCZWNh
dXNlIG9mIHRoaXMsIHdlIG5lZWQgdG8gc2F2ZSBpdCBzbyB3ZSBkb24ndCByZXR1cm4gZWFybHku
CiAgICAgYm9vbCBsb2FkaW5nID0gaXNMb2FkaW5nKCk7Ci0gICAgCisKKyAgICAvLyBXZSBtYXkg
d2FudCB0byBhdWRpdCB0aGUgZXhpc3Rpbmcgc3VicmVzb3VyY2UgbG9hZGVycyB3aGVuIHdlIGFy
ZSBvbiBhIHBhZ2Ugd2hpY2ggaGFzIGNvbXBsZXRlZAorICAgIC8vIGxvYWRpbmcgYnV0IHRoZXJl
IGFyZSBzdWJyZXNvdXJjZSBsb2FkcyBkdXJpbmcgY2FuY2VsbGF0aW9uLiBUaGlzIG11c3QgYmUg
ZG9uZSBiZWZvcmUgdGhlCisgICAgLy8gZnJhbWUtPnN0b3BMb2FkaW5nKCkgY2FsbCwgd2hpY2gg
bWF5IGV2aWN0IHRoZSBDYWNoZWRSZXNvdXJjZXMsIHdoaWNoIHdlIHJlbHkgb24gdG8gY2hlY2sK
KyAgICAvLyB0aGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UgbG9hZHMuCisgICAgaWYgKGxvYWRpbmcg
JiYgbV9jb21taXR0ZWQgJiYgIW1haW5SZXNvdXJjZUxvYWRlcigpICYmICFtX3N1YnJlc291cmNl
TG9hZGVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3VicmVzb3VyY2VMb2FkZXJzQXJlUGFnZUNh
Y2hlQWNjZXB0YWJsZSA9IGFyZUFsbExvYWRlcnNQYWdlQ2FjaGVBY2NlcHRhYmxlKG1fc3VicmVz
b3VyY2VMb2FkZXJzKTsKKwogICAgIGlmIChtX2NvbW1pdHRlZCkgewogICAgICAgICAvLyBBdHRl
bXB0IHRvIHN0b3AgdGhlIGZyYW1lIGlmIHRoZSBkb2N1bWVudCBsb2FkZXIgaXMgbG9hZGluZywg
b3IgaWYgaXQgaXMgZG9uZSBsb2FkaW5nIGJ1dAogICAgICAgICAvLyBzdGlsbCAgcGFyc2luZy4g
RmFpbHVyZSB0byBkbyBzbyBjYW4gY2F1c2UgYSB3b3JsZCBsZWFrLgpAQCAtMzgxLDYgKzQxMiw5
IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGluZyhkb3VibGUgZmluaXNoVGlt
ZSkKICAgICAgICAgY29uc3QgY2hhciogZGF0YSA9IG1fY29udGVudEZpbHRlci0+Z2V0UmVwbGFj
ZW1lbnREYXRhKGxlbmd0aCk7CiAgICAgICAgIGlmIChkYXRhKQogICAgICAgICAgICAgZGF0YVJl
Y2VpdmVkKG1fbWFpblJlc291cmNlLmdldCgpLCBkYXRhLCBsZW5ndGgpOworCisgICAgICAgIGlm
IChtX2NvbnRlbnRGaWx0ZXItPmRpZEJsb2NrRGF0YSgpKQorICAgICAgICAgICAgc2V0Q29udGVu
dEZpbHRlckZvckJsb2NrZWRMb2FkKG1fY29udGVudEZpbHRlcik7CiAgICAgfQogI2VuZGlmCiAK
QEAgLTQ1NSwxMCArNDg5LDEwIEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN0YXJ0RGF0YUxvYWRU
aW1lcigpCiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmhhbmRsZVN1YnN0aXR1dGVEYXRhTG9hZFNv
b24oKQogewotICAgIGlmIChtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQpCi0gICAgICAgIHN0
YXJ0RGF0YUxvYWRUaW1lcigpOwotICAgIGVsc2UKKyAgICBpZiAoIW1fZGVmZXJNYWluUmVzb3Vy
Y2VEYXRhTG9hZCB8fCBmcmFtZUxvYWRlcigpLT5sb2Fkc1N5bmNocm9ub3VzbHkoKSkKICAgICAg
ICAgaGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkTm93KDApOworICAgIGVsc2UKKyAgICAgICAgc3Rh
cnREYXRhTG9hZFRpbWVyKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnJlZGlyZWN0UmVj
ZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC02MzMsNyArNjY3
LDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmUKICNlbmRpZgogCiAjaWYgVVNFKENPTlRFTlRf
RklMVEVSSU5HKQotICAgIGlmIChyZXNwb25zZS51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYm
IENvbnRlbnRGaWx0ZXI6OmlzRW5hYmxlZCgpKQorICAgIGlmIChyZXNwb25zZS51cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkgJiYgQ29udGVudEZpbHRlcjo6aXNFbmFibGVkKCkpCiAgICAg
ICAgIG1fY29udGVudEZpbHRlciA9IENvbnRlbnRGaWx0ZXI6OmNyZWF0ZShyZXNwb25zZSk7CiAj
ZW5kaWYKIApAQCAtODQ0LDYgKzg3OCw5IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmRhdGFSZWNl
aXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRhdGEsIGluCiAKICAg
ICAgICAgZGF0YSA9IG1fY29udGVudEZpbHRlci0+Z2V0UmVwbGFjZW1lbnREYXRhKGxlbmd0aCk7
CiAgICAgICAgIGxvYWRXYXNCbG9ja2VkQmVmb3JlRmluaXNoaW5nID0gbV9jb250ZW50RmlsdGVy
LT5kaWRCbG9ja0RhdGEoKTsKKworICAgICAgICBpZiAobG9hZFdhc0Jsb2NrZWRCZWZvcmVGaW5p
c2hpbmcpCisgICAgICAgICAgICBzZXRDb250ZW50RmlsdGVyRm9yQmxvY2tlZExvYWQobV9jb250
ZW50RmlsdGVyKTsKICAgICB9CiAjZW5kaWYKIApAQCAtOTI3LDYgKzk2NCwxMiBAQCB2b2lkIERv
Y3VtZW50TG9hZGVyOjpkZXRhY2hGcm9tRnJhbWUoKQogdm9pZCBEb2N1bWVudExvYWRlcjo6Y2xl
YXJNYWluUmVzb3VyY2VMb2FkZXIoKQogewogICAgIG1fbG9hZGluZ01haW5SZXNvdXJjZSA9IGZh
bHNlOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBSZW1vdmUgUExBVEZPUk0o
SU9TKS1ndWFyZCBvbmNlIHdlIHVwc3RyZWFtIHRoZSBpT1MgY2hhbmdlcyB0byBSZXNvdXJjZVJl
cXVlc3QuaC4KKyAgICBtX3JlcXVlc3Quc2V0TWFpblJlc291cmNlUmVxdWVzdChmYWxzZSk7Cisj
ZW5kaWYKKwogICAgIGlmICh0aGlzID09IGZyYW1lTG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9h
ZGVyKCkpCiAgICAgICAgIGNoZWNrTG9hZENvbXBsZXRlKCk7CiB9CkBAIC0xMjU2LDYgKzEyOTks
MTQgQEAgY29uc3QgU3RyaW5nJiBEb2N1bWVudExvYWRlcjo6cmVzcG9uc2VNSU1FVHlwZSgpIGNv
bnN0CiAgICAgcmV0dXJuIG1fcmVzcG9uc2UubWltZVR5cGUoKTsKIH0KIAorI2lmIFBMQVRGT1JN
KElPUykKKy8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzZWVtcyB0byB2aW9sYXRlIHRoZSBlbmNhcHN1
bGF0aW9uIG9mIHRoaXMgY2xhc3MuCit2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRSZXNwb25zZU1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgcmVzcG9uc2VNaW1lVHlwZSkKK3sKKyAgICBtX3Jlc3BvbnNl
LnNldE1pbWVUeXBlKHJlc3BvbnNlTWltZVR5cGUpOworfQorI2VuZGlmCisKIGNvbnN0IFVSTCYg
RG9jdW1lbnRMb2FkZXI6OnVucmVhY2hhYmxlVVJMKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9z
dWJzdGl0dXRlRGF0YS5mYWlsaW5nVVJMKCk7CkBAIC0xMzgwLDkgKzE0MzEsMTMgQEAgdm9pZCBE
b2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291cmNlKCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogUmVtb3ZlIFBMQVRG
T1JNKElPUyktZ3VhcmQgb25jZSB3ZSB1cHN0cmVhbSB0aGUgaU9TIGNoYW5nZXMgdG8gUmVzb3Vy
Y2VSZXF1ZXN0LmguCisgICAgbV9yZXF1ZXN0LnNldE1haW5SZXNvdXJjZVJlcXVlc3QodHJ1ZSk7
CisjZW5kaWYKKwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fcmVxdWVzdCk7Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChSZXNvdXJjZUxvYWRlck9wdGlvbnMsIG1haW5SZXNvdXJjZUxv
YWRPcHRpb25zLAotICAgICAgICAoU2VuZENhbGxiYWNrcywgU25pZmZDb250ZW50LCBCdWZmZXJE
YXRhLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRGb3JBbGxDcmVkZW50aWFscywg
U2tpcFNlY3VyaXR5Q2hlY2ssIFVzZURlZmF1bHRPcmlnaW5SZXN0cmljdGlvbnNGb3JUeXBlKSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlc291cmNlTG9hZGVyT3B0aW9ucz4gbWFpblJl
c291cmNlTG9hZE9wdGlvbnMoU2VuZENhbGxiYWNrcywgU25pZmZDb250ZW50LCBCdWZmZXJEYXRh
LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRGb3JBbGxDcmVkZW50aWFscywgU2tp
cFNlY3VyaXR5Q2hlY2ssIFVzZURlZmF1bHRPcmlnaW5SZXN0cmljdGlvbnNGb3JUeXBlKTsKICAg
ICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVkUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QsIG1h
aW5SZXNvdXJjZUxvYWRPcHRpb25zKTsKICAgICBtX21haW5SZXNvdXJjZSA9IG1fY2FjaGVkUmVz
b3VyY2VMb2FkZXItPnJlcXVlc3RNYWluUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0KTsK
ICAgICBpZiAoIW1fbWFpblJlc291cmNlKSB7CkBAIC0xNTA2LDQgKzE1NjEsMzggQEAgdm9pZCBE
b2N1bWVudExvYWRlcjo6aGFuZGxlZE9ubG9hZEV2ZW50cygpCiAgICAgYXBwbGljYXRpb25DYWNo
ZUhvc3QoKS0+c3RvcERlZmVycmluZ0V2ZW50cygpOwogfQogCisjaWYgVVNFKENPTlRFTlRfRklM
VEVSSU5HKQordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0Q29udGVudEZpbHRlckZvckJsb2NrZWRM
b2FkKFBhc3NSZWZQdHI8Q29udGVudEZpbHRlcj4gY29udGVudEZpbHRlcikKK3sKKyAgICBBU1NF
UlQoIW1fY29udGVudEZpbHRlckZvckJsb2NrZWRMb2FkKTsKKyAgICBBU1NFUlQoY29udGVudEZp
bHRlcik7CisgICAgQVNTRVJUKGNvbnRlbnRGaWx0ZXItPmRpZEJsb2NrRGF0YSgpKTsKKyAgICBt
X2NvbnRlbnRGaWx0ZXJGb3JCbG9ja2VkTG9hZCA9IGNvbnRlbnRGaWx0ZXI7Cit9CisKK2Jvb2wg
RG9jdW1lbnRMb2FkZXI6OmhhbmRsZUNvbnRlbnRGaWx0ZXJSZXF1ZXN0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIFBMQVRGT1JNKElPUykt
Z3VhcmQgb25jZSB3ZSB1cHN0cmVhbSBDb250ZW50RmlsdGVySU9TLm1tIGFuZAorICAgIC8vIGlt
cGxlbWVudCBDb250ZW50RmlsdGVyOjpyZXF1ZXN0VW5ibG9ja0FuZERpc3BhdGNoSWZTdWNjZXNz
ZnVsKCkgZm9yIE1hYy4KKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFtX2NvbnRlbnRGaWx0
ZXJGb3JCbG9ja2VkTG9hZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFyZXF1
ZXN0LnVybCgpLnByb3RvY29sSXMoQ29udGVudEZpbHRlcjo6c2NoZW1lKCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVxdWVzdC51cmwoKS5o
b3N0KCksICJ1bmJsb2NrIikpIHsKKyAgICAgICAgLy8gVGVsbCB0aGUgRnJhbWVMb2FkZXIgdG8g
cmVsb2FkIGlmIHRoZSB1bmJsb2NrIGlzIHN1Y2Nlc3NmdWwuCisgICAgICAgIG1fY29udGVudEZp
bHRlckZvckJsb2NrZWRMb2FkLT5yZXF1ZXN0VW5ibG9ja0FuZERpc3BhdGNoSWZTdWNjZXNzZnVs
KGJpbmQoJkZyYW1lTG9hZGVyOjpyZWxvYWQsICYobV9mcmFtZS0+bG9hZGVyKCkpLCBmYWxzZSkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
K30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9E
b2N1bWVudExvYWRlci5oCmluZGV4IDMzMzg2ZTZlODBlMzZjMzMzZGM4MzQwOTQxMzQyNWNkMzUz
YmIzZDUuLjE1MWQzNjk0ZDRkNTJmYWYwNzU5N2JkYzBhYmJmOWViNzkyNjU5YjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCkBAIC0xMTYsNiArMTE2LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgVVJMJiByZXF1ZXN0VVJMKCkgY29uc3Q7CiAg
ICAgICAgIGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwoKSBjb25zdDsKICAgICAgICAgY29uc3QgU3Ry
aW5nJiByZXNwb25zZU1JTUVUeXBlKCkgY29uc3Q7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2VlbXMgdG8gdmlvbGF0ZSB0aGUgZW5jYXBzdWxhdGlv
biBvZiB0aGlzIGNsYXNzLgorICAgICAgICB2b2lkIHNldFJlc3BvbnNlTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJik7CisjZW5kaWYKIAogICAgICAgICB2b2lkIHJlcGxhY2VSZXF1ZXN0VVJMRm9yU2Ft
ZURvY3VtZW50TmF2aWdhdGlvbihjb25zdCBVUkwmKTsKICAgICAgICAgYm9vbCBpc1N0b3BwaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9pc1N0b3BwaW5nOyB9CkBAIC0xMjMsOCArMTI3LDE1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRDb21taXR0ZWQoYm9vbCBjb21taXR0
ZWQpIHsgbV9jb21taXR0ZWQgPSBjb21taXR0ZWQ7IH0KICAgICAgICAgYm9vbCBpc0NvbW1pdHRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkOyB9CiAgICAgICAgIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29u
c3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQorCiAgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3Im
IG1haW5Eb2N1bWVudEVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9tYWluRG9jdW1lbnRFcnJvcjsg
fQorCisgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNwb25zZTsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgbWV0aG9kIHNlZW1zIHRvIHZpb2xhdGUgdGhlIGVuY2Fwc3VsYXRpb24gb2YgdGhpcyBj
bGFzcy4KKyAgICAgICAgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkgeyBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7IH0KKyNlbmRpZgorCiAgICAgICAgIGJv
b2wgaXNDbGllbnRSZWRpcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDbGllbnRSZWRpcmVjdDsg
fQogICAgICAgICB2b2lkIHNldElzQ2xpZW50UmVkaXJlY3QoYm9vbCBpc0NsaWVudFJlZGlyZWN0
KSB7IG1faXNDbGllbnRSZWRpcmVjdCA9IGlzQ2xpZW50UmVkaXJlY3Q7IH0KICAgICAgICAgdm9p
ZCBoYW5kbGVkT25sb2FkRXZlbnRzKCk7CkBAIC0xOTMsNyArMjA0LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIGJvb2wgZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgY29u
c3QgeyByZXR1cm4gbV9kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnk7IH0KICAgICAgICAgdm9p
ZCBzZXREaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkoYm9vbCBkaWRDcmVhdGVHbG9iYWxIaXN0
b3J5RW50cnkpIHsgbV9kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkgPSBkaWRDcmVhdGVHbG9i
YWxIaXN0b3J5RW50cnk7IH0KLSAgICAgICAgCisKKyAgICAgICAgYm9vbCBzdWJyZXNvdXJjZUxv
YWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJyZXNvdXJj
ZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxlOyB9CisKICAgICAgICAgdm9pZCBzZXREZWZl
cnNMb2FkaW5nKGJvb2wpOwogICAgICAgICB2b2lkIHNldE1haW5SZXNvdXJjZURhdGFCdWZmZXJp
bmdQb2xpY3koRGF0YUJ1ZmZlcmluZ1BvbGljeSk7CiAKQEAgLTI0OSwxNSArMjYyLDIwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGNoZWNrTG9hZENvbXBsZXRlKCk7CiAK
KyNpZiBVU0UoQ09OVEVOVF9GSUxURVJJTkcpCisgICAgICAgIHZvaWQgc2V0Q29udGVudEZpbHRl
ckZvckJsb2NrZWRMb2FkKFBhc3NSZWZQdHI8Q29udGVudEZpbHRlcj4pOworICAgICAgICBib29s
IGhhbmRsZUNvbnRlbnRGaWx0ZXJSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworI2Vu
ZGlmCisKKyAgICAgICAgLy8gVGhlIFVSTCBvZiB0aGUgZG9jdW1lbnQgcmVzdWx0aW5nIGZyb20g
dGhpcyBEb2N1bWVudExvYWRlci4KKyAgICAgICAgVVJMIGRvY3VtZW50VVJMKCkgY29uc3Q7CisK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIERvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJik7CiAKICAgICAgICAgYm9vbCBtX2RlZmVyTWFp
blJlc291cmNlRGF0YUxvYWQ7CiAKICAgICBwcml2YXRlOgotCi0gICAgICAgIC8vIFRoZSBVUkwg
b2YgdGhlIGRvY3VtZW50IHJlc3VsdGluZyBmcm9tIHRoaXMgRG9jdW1lbnRMb2FkZXIuCi0gICAg
ICAgIFVSTCBkb2N1bWVudFVSTCgpIGNvbnN0OwogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQo
KSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
Jik7CkBAIC0zOTcsMTEgKzQxNSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJl
ZlB0cjxJY29uTG9hZERlY2lzaW9uQ2FsbGJhY2s+IG1faWNvbkxvYWREZWNpc2lvbkNhbGxiYWNr
OwogICAgICAgICBSZWZQdHI8SWNvbkRhdGFDYWxsYmFjaz4gbV9pY29uRGF0YUNhbGxiYWNrOwog
CisgICAgICAgIGJvb2wgbV9zdWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxl
OworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsgIC8vIGZvciBz
dWJzdGl0dXRlIHJlc291cmNlIGRlbGl2ZXJ5CiAgICAgICAgIE93blB0cjxBcHBsaWNhdGlvbkNh
Y2hlSG9zdD4gbV9hcHBsaWNhdGlvbkNhY2hlSG9zdDsKIAogI2lmIFVTRShDT05URU5UX0ZJTFRF
UklORykKICAgICAgICAgUmVmUHRyPENvbnRlbnRGaWx0ZXI+IG1fY29udGVudEZpbHRlcjsKKyAg
ICAgICAgUmVmUHRyPENvbnRlbnRGaWx0ZXI+IG1fY29udGVudEZpbHRlckZvckJsb2NrZWRMb2Fk
OwogI2VuZGlmCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50V3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5j
cHAKaW5kZXggNmE2ZDNiMGIzMDVhMWQ5M2I5NWEzNjJkOGE1NzY2YWE1NTcyZDUzMy4uNWNhYjg2
NGFmN2Y5ODY2Y2QyNTNhYTQxODllMGY0MDk4Y2MyZTk0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRXcml0ZXIuY3BwCkBAIC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJQREZEb2N1
bWVudC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiUGxhY2Vob2xkZXJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmF3RGF0YURvY3VtZW50UGFyc2VyLmgi
CkBAIC0xMDcsNiArMTEwLDEwIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERvY3VtZW50V3JpdGVy
OjpjcmVhdGVEb2N1bWVudChjb25zdCBVUkwmIHVybCkKIHsKICAgICBpZiAoIW1fZnJhbWUtPmxv
YWRlcigpLnN0YXRlTWFjaGluZSgpLT5pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgp
ICYmIG1fZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLnNob3VsZEFsd2F5c1VzZVBsdWdpbkRvY3Vt
ZW50KG1fbWltZVR5cGUpKQogICAgICAgICByZXR1cm4gUGx1Z2luRG9jdW1lbnQ6OmNyZWF0ZSht
X2ZyYW1lLCB1cmwpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobV9taW1lVHlwZSwgImFwcGxpY2F0aW9uL3BkZiIpKQorICAgICAgICByZXR1cm4gUERGRG9j
dW1lbnQ6OmNyZWF0ZShtX2ZyYW1lLCB1cmwpOworI2VuZGlmCiAgICAgaWYgKCFtX2ZyYW1lLT5s
b2FkZXIoKS5jbGllbnQoKS5oYXNIVE1MVmlldygpKQogICAgICAgICByZXR1cm4gUGxhY2Vob2xk
ZXJEb2N1bWVudDo6Y3JlYXRlKG1fZnJhbWUsIHVybCk7CiAgICAgcmV0dXJuIERPTUltcGxlbWVu
dGF0aW9uOjpjcmVhdGVEb2N1bWVudChtX21pbWVUeXBlLCBtX2ZyYW1lLCB1cmwsIG1fZnJhbWUt
PmluVmlld1NvdXJjZU1vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3Bw
CmluZGV4IGZjMjRhY2I5ZGViMmI0MTAwNGI3NmYwMTRkODI2NDhmZGEwMGMyYzguLmI2MzhkMWMy
YThmNjhmOTg2NjllMGQzNmIzYTk1YTFmZDQ0OGQ1ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuY3BwCkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBQYXNzT3duUHRyPENvbG9yQ2hv
b3Nlcj4gRW1wdHlDaHJvbWVDbGllbnQ6OmNyZWF0ZUNvbG9yQ2hvb3NlcihDb2xvckNob29zZXJD
bGllbgogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykK
KyNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykgJiYgIVBMQVRGT1JNKElPUykK
IFBhc3NSZWZQdHI8RGF0ZVRpbWVDaG9vc2VyPiBFbXB0eUNocm9tZUNsaWVudDo6b3BlbkRhdGVU
aW1lQ2hvb3NlcihEYXRlVGltZUNob29zZXJDbGllbnQqLCBjb25zdCBEYXRlVGltZUNob29zZXJQ
YXJhbWV0ZXJzJikKIHsKLSAgICByZXR1cm4gUGFzc1JlZlB0cjxEYXRlVGltZUNob29zZXI+KCk7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCmluZGV4IGIwMTViMDJmOTI5NDc2OWVkMjViODA1MmU0MTc0YjI3YWFiNGViOWYu
LjI5NmY0MWUxNGU5MmM3MTU0OGI2MGU3ZTk0MDdjZmM0ZjQ5NjYzYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTE2Miw3ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBQYXNzT3duUHRyPENvbG9yQ2hvb3Nlcj4gY3JlYXRlQ29sb3JDaG9vc2VyKENvbG9yQ2hv
b3NlckNsaWVudCosIGNvbnN0IENvbG9yJikgT1ZFUlJJREU7CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKQorI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lO
UFVUX1RZUEVTKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRl
VGltZUNob29zZXI+IG9wZW5EYXRlVGltZUNob29zZXIoRGF0ZVRpbWVDaG9vc2VyQ2xpZW50Kiwg
Y29uc3QgRGF0ZVRpbWVDaG9vc2VyUGFyYW1ldGVycyYpIE9WRVJSSURFOwogI2VuZGlmCiAKQEAg
LTE3NCw4ICsxNzQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBlbGVtZW50RGlkRm9j
dXMoY29uc3QgTm9kZSopIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgdm9pZCBlbGVtZW50RGlk
Qmx1cihjb25zdCBOb2RlKikgT1ZFUlJJREUgeyB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgT1ZFUlJJREUgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBPVkVSUklE
RSB7IH0KKyNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25z
dCBJbnRSZWN0JikgY29uc3QgT1ZFUlJJREUgeyB9CiAKQEAgLTE5Miw2ICsxOTQsMjggQEAgcHVi
bGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJldmVudERlZmF1bHRGb3JFdmVudCgpIE9WRVJSSURF
IHsgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNb2JpbGVEb2NUeXBlKCkg
T1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU2Nyb2xsTm90aWZpY2F0aW9u
cyhGcmFtZSosIGJvb2wpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZlZENv
bnRlbnRDaGFuZ2UoRnJhbWUqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJD
b250ZW50Q2hhbmdlT2JzZXJ2ZXJzKEZyYW1lKikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZShGcmFtZSopIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRMYXlvdXQoTGF5b3V0VHlwZSkgT1ZFUlJJREUg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKSBPVkVSUklERSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKSBPVkVSUklERSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBzdXBwcmVzc0Zvcm1Ob3RpZmljYXRpb25zKCkgT1ZFUlJJREUg
eyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVGb3JtTm90aWZpY2F0aW9ucygpIE9WRVJSSURF
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoTm9kZSos
IFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wsIGJv
b2wpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihO
b2RlKiwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCB3ZWJBcHBPcmllbnRhdGlvbnNVcGRhdGVkKCkgT1ZFUlJJREUgeyB9Owor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKElPUykKICAgICB2aXJ0dWFs
IGJvb2wgaXNTdG9wcGluZygpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIApA
QCAtMjIwLDYgKzI0NCw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVz
ZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
Zm9yY2VMYXlvdXQoKSBPVkVSUklERSB7IH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVh
bCB2b2lkIGZvcmNlTGF5b3V0V2l0aG91dFJlY2FsY3VsYXRpbmdTdHlsZXMoKSBPVkVSUklERSB7
IH0KKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dEZvck5vbkhUTUwoKSBPVkVS
UklERSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb3BpZXNPblNjcm9sbCgpIE9WRVJSSURF
IHsgfQpAQCAtMjM3LDYgKzI2NCwxMSBAQCBwdWJsaWM6CiAjaWYgVVNFKFBST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSykKICAgICB2aXJ0dWFsIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKKworI2lm
IFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNv
bm5lY3Rpb25Qcm9wZXJ0aWVzKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykgT1ZFUlJJ
REUgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJikgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
LCBpbnQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExv
YWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSBPVkVSUklERSB7IH0KQEAgLTMy
NSw2ICszNTcsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVBsYXRmb3JtRGF0
YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikgT1ZF
UlJJREUgeyB9CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZXN0b3Jl
RnJhbWVIaWVyYXJjaHlGb3JDYWNoZWRGcmFtZSgpIE9WRVJSSURFIHsgfQorI2VuZGlmCiAgICAg
dmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKSBPVkVSUklERSB7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKSBPVkVSUklERSB7IH0K
QEAgLTQ0OSw2ICs0ODQsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0ZXh0V2lsbEJl
RGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgdGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopIE9WRVJSSURFIHsgfQogCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBzdXBwcmVzc1NlbGVjdGlvbk5vdGlmaWNh
dGlvbnMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVNlbGVjdGlvbk5v
dGlmaWNhdGlvbnMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREZWxheWlu
Z0FuZENvYWxlc2NpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0aW9ucygpIE9WRVJSSURFIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzdG9wRGVsYXlpbmdBbmRDb2FsZXNjaW5nQ29udGVudENoYW5nZU5v
dGlmaWNhdGlvbnMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEYXRhVG9Q
YXN0ZWJvYXJkKE5TRGljdGlvbmFyeSopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgTlNBcnJh
eSogc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzRm9yQ3VycmVudFNlbGVjdGlvbigpIE9WRVJSSURF
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIE5TQXJyYXkqIHJlYWREYXRhRnJvbVBh
c3RlYm9hcmQoTlNTdHJpbmcqLCBpbnQpIE9WRVJSSURFIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24oKSBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgaW50IGdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkg
T1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgRG9jdW1lbnRGcmFnbWVudCogZG9j
dW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpbnQpIE9WRVJSSURFIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybXNUd29TdGVwUGFzdGUoRG9jdW1lbnRGcmFnbWVu
dCopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBpbnQgcGFzdGVib2Fy
ZENoYW5nZUNvdW50KCkgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgdmlydHVhbCBOU1N0cmluZyogdXNlclZpc2libGVTdHJpbmcoTlNVUkwq
KSBPVkVSUklERSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBEb2N1bWVudEZyYWdtZW50KiBk
b2N1bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nKiwg
VmVjdG9yPFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+PiYpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBhYjFhZjNlMTQwNjdhZjNi
NDZiMTMzNmQ5MGU1YTI4YWM0M2UyZWFkLi4wNzI5Y2U2OWU0ZThmZTg0NTlmY2NhNjJhODUwZTll
OGJmMTNjNjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTEzMiw2
ICsxMzIsMTQgQEAKICNpbmNsdWRlICJBcmNoaXZlLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJ1bnRp
bWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIgorI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5oIgorI2lu
Y2x1ZGUgIldLQ29udGVudE9ic2VydmF0aW9uLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0xNDMsNiArMTUxLDkgQEAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwogCiBz
dGF0aWMgY29uc3QgY2hhciBkZWZhdWx0QWNjZXB0SGVhZGVyW10gPSAidGV4dC9odG1sLGFwcGxp
Y2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44IjsKIHN0YXRp
YyBkb3VibGUgc3RvcmVkVGltZU9mTGFzdENvbXBsZXRlZExvYWQ7CisjaWYgUExBVEZPUk0oSU9T
KQorc3RhdGljIGNvbnN0IGludCBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUg
PSAyMDsKKyNlbmRpZgogCiBib29sIGlzQmFja0ZvcndhcmRMb2FkVHlwZShGcmFtZUxvYWRUeXBl
IHR5cGUpCiB7CkBAIC0xODUsNyArMTk2LDcgQEAgcHVibGljOgogICAgIH5GcmFtZVByb2dyZXNz
VHJhY2tlcigpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1faW5Qcm9ncmVzcyB8fCBtX2ZyYW1l
LnBhZ2UoKSk7Ci0gICAgICAgIGlmIChtX2luUHJvZ3Jlc3MpCisgICAgICAgIGlmIChtX2luUHJv
Z3Jlc3MgJiYgbV9mcmFtZS5wYWdlKCkpCiAgICAgICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+cHJv
Z3Jlc3MoKS5wcm9ncmVzc0NvbXBsZXRlZCgmbV9mcmFtZSk7CiAgICAgfQogCkBAIC0yMzksNiAr
MjUwLDcgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lJiBmcmFtZSwgRnJhbWVMb2Fk
ZXJDbGllbnQmIGNsaWVudCkKICAgICAsIG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlKGZhbHNlKQog
ICAgICwgbV9zdXBwcmVzc09wZW5lckluTmV3RnJhbWUoZmFsc2UpCiAgICAgLCBtX2N1cnJlbnRO
YXZpZ2F0aW9uSGFzU2hvd25CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoZmFsc2UpCisgICAgLCBt
X2xvYWRzU3luY2hyb25vdXNseShmYWxzZSkKICAgICAsIG1fZm9yY2VkU2FuZGJveEZsYWdzKFNh
bmRib3hOb25lKQogewogfQpAQCAtMjcwLDYgKzI4MiwzMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpp
bml0KCkKICAgICBtX3Byb2dyZXNzVHJhY2tlciA9IHN0ZDo6bWFrZV91bmlxdWU8RnJhbWVQcm9n
cmVzc1RyYWNrZXI+KG1fZnJhbWUpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBGcmFt
ZUxvYWRlcjo6aW5pdEZvclN5bnRoZXNpemVkRG9jdW1lbnQoY29uc3QgVVJMJiB1cmwpCit7Cisg
ICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS85NzE2ODk3PiBWZXJpZnkgT3BlblNvdXJjZSBy
ODkzMTIgd2FzIG1lcmdlZCBjb3JyZWN0bHkKKyAgICBVTlVTRURfUEFSQU0odXJsKTsKKworICAg
IFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyID0gbV9jbGllbnQuY3JlYXRlRG9jdW1lbnRM
b2FkZXIoUmVzb3VyY2VSZXF1ZXN0KFVSTChQYXJzZWRVUkxTdHJpbmcsIGVtcHR5U3RyaW5nKCkp
KSwgU3Vic3RpdHV0ZURhdGEoKSk7CisgICAgbG9hZGVyLT5zZXRGcmFtZSgmbV9mcmFtZSk7Cisg
ICAgbG9hZGVyLT5zZXRSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlKFVSTCgpLCBBU0NJSUxpdGVy
YWwoInRleHQvaHRtbCIpLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkpKTsKKyAgICBsb2FkZXItPnNl
dENvbW1pdHRlZCh0cnVlKTsKKyAgICBzZXREb2N1bWVudExvYWRlcihsb2FkZXIuZ2V0KCkpOwor
CisgICAgbV9zdGF0ZU1hY2hpbmUuYWR2YW5jZVRvKEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lOjpE
aXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQpOworICAgIG1fc3RhdGVNYWNoaW5lLmFkdmFu
Y2VUbyhGcmFtZUxvYWRlclN0YXRlTWFjaGluZTo6RGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3Vt
ZW50UG9zdENvbW1pdCk7CisgICAgbV9zdGF0ZU1hY2hpbmUuYWR2YW5jZVRvKEZyYW1lTG9hZGVy
U3RhdGVNYWNoaW5lOjpDb21taXR0ZWRGaXJzdFJlYWxMb2FkKTsKKyAgICBtX2NsaWVudC50cmFu
c2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCk7CisKKyAgICBtX2RpZENhbGxJbXBsaWNpdENs
b3NlID0gdHJ1ZTsKKyAgICBtX2lzQ29tcGxldGUgPSB0cnVlOworICAgIG1fc3RhdGUgPSBGcmFt
ZVN0YXRlQ29tcGxldGU7CisgICAgbV9uZWVkc0NsZWFyID0gdHJ1ZTsKKworICAgIG1fbmV0d29y
a2luZ0NvbnRleHQgPSBtX2NsaWVudC5jcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpOworfQorI2Vu
ZGlmCisKIHZvaWQgRnJhbWVMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7
CiAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIpCkBAIC03ODksNiArODI3LDEzIEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmNoZWNrQ29tcGxldGVkKCkKICAgICBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtID0g
MDsKICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnNldFJlYWR5U3RhdGUoRG9jdW1lbnQ6OkNvbXBs
ZXRlKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBVUkwgdXJsID0gbV9mcmFtZS5kb2N1bWVu
dCgpLT51cmwoKTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS85NzE2ODk3PiBWZXJpZnkgT3BlblNvdXJjZSByODkzMTIgd2FzIG1lcmdl
ZCBjb3JyZWN0bHkKKyAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5zZXRVUkwoYWN0aXZlRG9j
dW1lbnRMb2FkZXIoKS0+ZG9jdW1lbnRVUkwoKSk7CisjZW5kaWYKKwogICAgIGNoZWNrQ2FsbElt
cGxpY2l0Q2xvc2UoKTsgLy8gaWYgd2UgZGlkbid0IGRvIGl0IGJlZm9yZQogCiAgICAgbV9mcmFt
ZS5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuc3RhcnRUaW1lcigpOwpAQCAtMTQ1MSw2ICsxNDk2LDEz
IEBAIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgRnJhbWVMb2FkZXI6OmluaXRpYWxSZXF1ZXN0KCkg
Y29uc3QKIAogYm9vbCBGcmFtZUxvYWRlcjo6d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwoVVJMJiB1
cmwpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIE1vYmlsZVN0b3JlIGRlcGVuZHMgb24g
dGhlIGlPUyA0LjAgZXJhIGNsaWVudCBkZWxlZ2F0ZSBtZXRob2QgYmVjYXVzZSB3ZWJWaWV3OnJl
c291cmNlOndpbGxTZW5kUmVxdWVzdDpyZWRpcmVjdFJlc3BvbnNlOmZyb21EYXRhU291cmNlCisg
ICAgLy8gZG9lc24ndCBsZXQgdGhlbSB0ZWxsIHdoZW4gYSBsb2FkIHJlcXVlc3QgaXMgY29taW5n
IGZyb20gYSBtZWRpYSBlbGVtZW50LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzgyNjY5MTY+IGZvciBt
b3JlIGRldGFpbHMuCisgICAgaWYgKGFwcGxpY2F0aW9uSXNNb2JpbGVTdG9yZSgpKQorICAgICAg
ICByZXR1cm4gbV9jbGllbnQuc2hvdWxkTG9hZE1lZGlhRWxlbWVudFVSTCh1cmwpOworI2VuZGlm
CisKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwogCiAgICAgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyOwpAQCAtMTYwMyw3ICsxNjU1LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0
b3BBbGxMb2FkZXJzKENsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5IGNsZWFyUHJvdmlzaW9uYWxJ
dGVtCiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wRm9yVXNlckNhbmNlbChib29sIGRlZmVyQ2hlY2tM
b2FkQ29tcGxldGUpCiB7CiAgICAgc3RvcEFsbExvYWRlcnMoKTsKLSAgICAKKworI2lmIFBMQVRG
T1JNKElPUykKKyAgICAvLyBMYXkgb3V0IGltbWVkaWF0ZWx5IHdoZW4gc3RvcHBpbmcgdG8gaW1t
ZWRpYXRlbHkgY2xlYXIgdGhlIG9sZCBwYWdlIGlmIHdlIGp1c3QgY29tbWl0dGVkIHRoaXMgb25l
CisgICAgLy8gYnV0IGhhdmVuJ3QgbGFpZCBvdXQvcGFpbnRlZCB5ZXQuCisgICAgLy8gRklYTUU6
IElzIHRoaXMgYmVoYXZpb3Igc3BlY2lmaWMgdG8gaU9TPyBPciBzaG91bGQgd2UgZXhwb3NlIGEg
c2V0dGluZyB0byB0b2dnbGUgdGhpcyBiZWhhdmlvcj8KKyAgICBpZiAobV9mcmFtZS52aWV3KCkg
JiYgIW1fZnJhbWUudmlldygpLT5kaWRGaXJzdExheW91dCgpKQorICAgICAgICBtX2ZyYW1lLnZp
ZXcoKS0+bGF5b3V0KCk7CisjZW5kaWYKKwogICAgIGlmIChkZWZlckNoZWNrTG9hZENvbXBsZXRl
KQogICAgICAgICBzY2hlZHVsZUNoZWNrTG9hZENvbXBsZXRlKCk7CiAgICAgZWxzZSBpZiAobV9m
cmFtZS5wYWdlKCkpCkBAIC0xNzIyLDYgKzE3ODIsMjYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29t
bWl0UHJvdmlzaW9uYWxMb2FkKCkKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpID8gbV9mcmFt
ZS5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKS51dGY4
KCkuZGF0YSgpIDogIiIsCiAgICAgICAgIHBkbCA/IHBkbC0+dXJsKCkuc3RyaW5nQ2VudGVyRWxs
aXBzaXplZFRvTGVuZ3RoKCkudXRmOCgpLmRhdGEoKSA6ICI8bm8gcHJvdmlzaW9uYWwgRG9jdW1l
bnRMb2FkZXI+Iik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gSW4gdGhlIGNhc2Ugd2hl
cmUgd2UgYXJlIG5vdCBuYXZpZ2F0aW5nIHRvIGEgY2FjaGVkIHBhZ2UsIGFuZCB0aGUgc3lzdGVt
IGlzIHVuZGVyIChzcGVjdWxhdGl2ZSkgbWVtb3J5IHByZXNzdXJlLAorICAgIC8vIHdlIGNhbiB0
cnkgdG8gcHJlZW1wdGl2ZWx5IHJlbGVhc2Ugc29tZSBvZiB0aGUgcGFnZXMgaW4gdGhlIGNhY2hl
LgorICAgIC8vIEZJWE1FOiBSaWdodCBub3cgdGhlIGNhcGFjaXR5IGlzIDEgb24gaU9TIGRldmlj
ZXMgd2l0aCAyNTYgTUIgb2YgUkFNLCBzbyB0aGlzIHdpbGwgYWx3YXlzIGJsb3cgYXdheSB0aGUg
d2hvbGUKKyAgICAvLyBwYWdlIGNhY2hlLiBXZSBjb3VsZCBzdGlsbCBwcmVlbXB0aXZlbHkgcHJ1
bmUgdGhlIHBhZ2UgY2FjaGUgd2hpbGUgbmF2aWdhdGluZyB0byBhIGNhY2hlZCBwYWdlIGlmIGNh
cGFjaXR5ID4gMS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzExNzc5ODQ2PiBmb3IgbW9y
ZSBkZXRhaWxzLgorICAgIGlmICghY2FjaGVkUGFnZSkgeworICAgICAgICBpZiAobWVtb3J5UHJl
c3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpKSB7CisgICAgICAgICAg
ICBMT0coTWVtb3J5UHJlc3N1cmUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSB1bmRlciBt
ZW1vcnkgcHJlc3N1cmUgYXQ6ICVzIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICAgICAgICAg
ICBMT0coUGFnZUNhY2hlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIHRvIDAgZHVlIHRvIG1lbW9yeSBw
cmVzc3VyZSIpOworICAgICAgICAgICAgLy8gRG9uJ3QgY2FjaGUgYW55IHBhZ2UgaWYgd2UgYXJl
IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAgICAgICAgICAgIHBhZ2VDYWNoZSgpLT5wcnVuZVRv
Q2FwYWNpdHlOb3coMCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3lzdGVtTWVtb3J5TGV2ZWwoKSA8
PSBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUpIHsKKyAgICAgICAgICAgIExP
RyhNZW1vcnlQcmVzc3VyZSwgIlBydW5pbmcgcGFnZSBjYWNoZSBiZWNhdXNlIHN5c3RlbSBtZW1v
cnkgbGV2ZWwgaXMgJWQgYXQ6ICVzIiwgc3lzdGVtTWVtb3J5TGV2ZWwoKSwgX19QUkVUVFlfRlVO
Q1RJT05fXyk7CisgICAgICAgICAgICBMT0coUGFnZUNhY2hlLCAiUHJ1bmluZyBwYWdlIGNhY2hl
IHRvICVkIGR1ZSB0byBsb3cgbWVtb3J5IChsZXZlbCAlZCBsZXNzIG9yIGVxdWFsIHRvICVkIHRo
cmVzaG9sZCkiLCBwYWdlQ2FjaGUoKS0+Y2FwYWNpdHkoKSAvIDIsIHN5c3RlbU1lbW9yeUxldmVs
KCksIG1lbW9yeUxldmVsVGhyZXNob2xkVG9QcnVuZVBhZ2VDYWNoZSk7CisgICAgICAgICAgICBw
YWdlQ2FjaGUoKS0+cHJ1bmVUb0NhcGFjaXR5Tm93KHBhZ2VDYWNoZSgpLT5jYXBhY2l0eSgpIC8g
Mik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIHdpbGxUcmFuc2l0aW9uVG9Db21t
aXR0ZWQoKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNhY2hlIHRoZSBw
YWdlIHdlIGFyZSBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBpbnRvIHRoZSBiYWNrL2ZvcndhcmQgY2Fj
aGUuCkBAIC0xNzUyLDEzICsxODMyLDIxIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zp
c2lvbmFsTG9hZCgpCiAgICAgICAgIGNsaWVudFJlZGlyZWN0Q2FuY2VsbGVkT3JGaW5pc2hlZChm
YWxzZSk7CiAgICAgCiAgICAgaWYgKGNhY2hlZFBhZ2UgJiYgY2FjaGVkUGFnZS0+ZG9jdW1lbnQo
KSkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gRklYTUU6IENhY2hlZFBhZ2U6OnJl
c3RvcmUoKSB3b3VsZCBkaXNwYXRjaCB2aWV3cG9ydCBjaGFuZ2Ugbm90aWZpY2F0aW9uLiBIb3dl
dmVyIFVJS2l0IGV4cGVjdHMgbG9hZAorICAgICAgICAvLyBjb21taXQgdG8gaGFwcGVuIGJlZm9y
ZSBhbnkgY2hhbmdlcyB0byB2aWV3cG9ydCBhcmd1bWVudHMgYW5kIGRlYWxpbmcgd2l0aCB0aGlz
IHRoZXJlIGlzIGRpZmZpY3VsdC4KKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPmNocm9tZSgpLnNl
dERpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCh0cnVlKTsKKyNlbmRpZgog
ICAgICAgICBwcmVwYXJlRm9yQ2FjaGVkUGFnZVJlc3RvcmUoKTsKIAogICAgICAgICAvLyBGSVhN
RTogVGhpcyBBUEkgc2hvdWxkIGJlIHR1cm5lZCBhcm91bmQgc28gdGhhdCB3ZSBncm91bmQgQ2Fj
aGVkUGFnZSBpbnRvIHRoZSBQYWdlLgogICAgICAgICBjYWNoZWRQYWdlLT5yZXN0b3JlKCptX2Zy
YW1lLnBhZ2UoKSk7CiAKICAgICAgICAgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCk7Ci0KKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5jaHJvbWUoKS5zZXREaXNwYXRj
aFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNzZWQoZmFsc2UpOworICAgICAgICBtX2ZyYW1l
LnBhZ2UoKS0+Y2hyb21lKCkuZGlzcGF0Y2hWaWV3cG9ydFByb3BlcnRpZXNEaWRDaGFuZ2UobV9m
cmFtZS5wYWdlKCktPnZpZXdwb3J0QXJndW1lbnRzKCkpOworI2VuZGlmCiAgICAgICAgIC8vIElm
IHdlIGhhdmUgYSB0aXRsZSBsZXQgdGhlIFdlYlZpZXcga25vdyBhYm91dCBpdC4gCiAgICAgICAg
IFN0cmluZ1dpdGhEaXJlY3Rpb24gdGl0bGUgPSBtX2RvY3VtZW50TG9hZGVyLT50aXRsZSgpOwog
ICAgICAgICBpZiAoIXRpdGxlLmlzTnVsbCgpKQpAQCAtMTc3NSwxMCArMTg2MywxOSBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogICAgICAgICBoaXN0b3J5KCku
dXBkYXRlRm9yQ2xpZW50UmVkaXJlY3QoKTsKIAogICAgIGlmIChtX2xvYWRpbmdGcm9tQ2FjaGVk
UGFnZSkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gTm90ZSwgZGlkUmVjZWl2ZURv
Y1R5cGUgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGZvciBjYWNoZWQgcGFnZXMuIFNlZSA8cmRh
cjovL3Byb2JsZW0vNTkwNjc1OD4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgaWYgKG1fZnJh
bWUuZG9jdW1lbnQoKS0+ZG9jdHlwZSgpICYmIG1fZnJhbWUucGFnZSgpKQorICAgICAgICAgICAg
bV9mcmFtZS5wYWdlKCktPmNocm9tZSgpLmRpZFJlY2VpdmVEb2NUeXBlKCZtX2ZyYW1lKTsKKyNl
bmRpZgogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPmRvY3VtZW50RGlkUmVzdW1lRnJvbVBh
Z2VDYWNoZSgpOwotICAgICAgICAKKwogICAgICAgICAvLyBGb3JjZSBhIGxheW91dCB0byB1cGRh
dGUgdmlldyBzaXplIGFuZCB0aGVyZWJ5IHVwZGF0ZSBzY3JvbGxiYXJzLgorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgbV9jbGllbnQuZm9yY2VMYXlvdXRXaXRob3V0UmVjYWxjdWxhdGluZ1N0
eWxlcygpOworI2Vsc2UKICAgICAgICAgbV9mcmFtZS52aWV3KCktPmZvcmNlTGF5b3V0KCk7Cisj
ZW5kaWYKIAogICAgICAgICBjb25zdCBSZXNwb25zZVZlY3RvciYgcmVzcG9uc2VzID0gbV9kb2N1
bWVudExvYWRlci0+cmVzcG9uc2VzKCk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9IHJlc3BvbnNl
cy5zaXplKCk7CkBAIC0xODQxLDcgKzE5MzgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp0cmFuc2l0
aW9uVG9Db21taXR0ZWQoQ2FjaGVkUGFnZSogY2FjaGVkUGFnZSkKIAogICAgIHNldFN0YXRlKEZy
YW1lU3RhdGVDb21taXR0ZWRQYWdlKTsKIAotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9mcmFtZS5p
c01haW5GcmFtZSgpKQogICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCku
bmVlZFRvdWNoRXZlbnRzKGZhbHNlKTsKICNlbmRpZgpAQCAtMjI5OSw2ICsyMzk2LDEzIEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmRpZExheW91dChMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCiAK
IHZvaWQgRnJhbWVMb2FkZXI6OmRpZEZpcnN0TGF5b3V0KCkKIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLy8gT25seSBzZW5kIGxheW91dC1yZWxhdGVkIGRlbGVnYXRlIGNhbGxiYWNrcyBzeW5j
aHJvbm91c2x5IGZvciB0aGUgbWFpbiBmcmFtZSB0bworICAgIC8vIGF2b2lkIHJlZW50ZXJpbmcg
bGF5b3V0IGZvciB0aGUgbWFpbiBmcmFtZSB3aGlsZSBkZWxpdmVyaW5nIGEgbGF5b3V0LXJlbGF0
ZWQgZGVsZWdhdGUKKyAgICAvLyBjYWxsYmFjayBmb3IgYSBzdWJmcmFtZS4KKyAgICBpZiAoJm1f
ZnJhbWUgIT0gJm1fZnJhbWUucGFnZSgpLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOwor
I2VuZGlmCiAgICAgaWYgKG1fZnJhbWUucGFnZSgpICYmIGlzQmFja0ZvcndhcmRMb2FkVHlwZSht
X2xvYWRUeXBlKSkKICAgICAgICAgaGlzdG9yeSgpLnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZp
ZXdTdGF0ZSgpOwogCkBAIC0zMjUyLDYgKzMzNTYsMTMgQEAgUmVzb3VyY2VFcnJvciBGcmFtZUxv
YWRlcjo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBjb25z
dAogICAgIHJldHVybiBlcnJvcjsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1JldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IEZyYW1lTG9hZGVyOjpjb25uZWN0aW9uUHJvcGVydGllcyhSZXNvdXJj
ZUxvYWRlciogbG9hZGVyKQoreworICAgIHJldHVybiBtX2NsaWVudC5jb25uZWN0aW9uUHJvcGVy
dGllcyhsb2FkZXItPmRvY3VtZW50TG9hZGVyKCksIGxvYWRlci0+aWRlbnRpZmllcigpKTsKK30K
KyNlbmRpZgorCiBTdHJpbmcgRnJhbWVMb2FkZXI6OnJlZmVycmVyKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9kb2N1bWVudExvYWRlciA/IG1fZG9jdW1lbnRMb2FkZXItPnJlcXVlc3QoKS5odHRw
UmVmZXJyZXIoKSA6ICIiOwpAQCAtMzQ2MywxNCArMzU3NCwxNiBAQCBQYXNzUmVmUHRyPEZyYW1l
PiBjcmVhdGVXaW5kb3coRnJhbWUqIG9wZW5lckZyYW1lLCBGcmFtZSogbG9va3VwRnJhbWUsIGNv
bnN0IEZyYQogICAgIC8vIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIHZpZXdwb3J0LiBXZSBjYW4g
b25seSByZXNpemUgdGhlIHdpbmRvdywgc28gYWRqdXN0CiAgICAgLy8gZm9yIHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gdGhlIHdpbmRvdyBzaXplIGFuZCB0aGUgdmlld3BvcnQgc2l6ZS4KIAorLy8g
RklYTUU6IFdlIHNob3VsZCByZWNvbmNpbGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHZpZXdwb3J0
IGFyZ3VtZW50cyBiZXR3ZWVuIGlPUyBhbmQgT3BlblNvdXJjZS4KKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0ID0gcGFnZS0+Y2hyb21lKCkud2luZG93UmVjdCgp
OwotICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUgPSBwYWdlLT5jaHJvbWUoKS5wYWdlUmVjdCgp
LnNpemUoKTsKLQogICAgIGlmIChmZWF0dXJlcy54U2V0KQogICAgICAgICB3aW5kb3dSZWN0LnNl
dFgoZmVhdHVyZXMueCk7CiAgICAgaWYgKGZlYXR1cmVzLnlTZXQpCiAgICAgICAgIHdpbmRvd1Jl
Y3Quc2V0WShmZWF0dXJlcy55KTsKKwogICAgIC8vIFplcm8gd2lkdGggYW5kIGhlaWdodCBtZWFu
IHVzaW5nIGRlZmF1bHQgc2l6ZSwgbm90IG1pbnVtdW0gb25lLgorICAgIEZsb2F0U2l6ZSB2aWV3
cG9ydFNpemUgPSBwYWdlLT5jaHJvbWUoKS5wYWdlUmVjdCgpLnNpemUoKTsKICAgICBpZiAoZmVh
dHVyZXMud2lkdGhTZXQgJiYgZmVhdHVyZXMud2lkdGgpCiAgICAgICAgIHdpbmRvd1JlY3Quc2V0
V2lkdGgoZmVhdHVyZXMud2lkdGggKyAod2luZG93UmVjdC53aWR0aCgpIC0gdmlld3BvcnRTaXpl
LndpZHRoKCkpKTsKICAgICBpZiAoZmVhdHVyZXMuaGVpZ2h0U2V0ICYmIGZlYXR1cmVzLmhlaWdo
dCkKQEAgLTM0ODAsNiArMzU5MywxNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGVXaW5kb3co
RnJhbWUqIG9wZW5lckZyYW1lLCBGcmFtZSogbG9va3VwRnJhbWUsIGNvbnN0IEZyYQogICAgIEZs
b2F0UmVjdCBuZXdXaW5kb3dSZWN0ID0gRE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0KHBhZ2Us
IHdpbmRvd1JlY3QpOwogCiAgICAgcGFnZS0+Y2hyb21lKCkuc2V0V2luZG93UmVjdChuZXdXaW5k
b3dSZWN0KTsKKyNlbHNlCisgICAgLy8gT24gaU9TLCB3aWR0aCBhbmQgaGVpZ2h0IHJlZmVyIHRv
IHRoZSB2aWV3cG9ydCBkaW1lbnNpb25zLgorICAgIFZpZXdwb3J0QXJndW1lbnRzIGFyZ3VtZW50
czsKKyAgICAvLyBaZXJvIHdpZHRoIGFuZCBoZWlnaHQgbWVhbiB1c2luZyBkZWZhdWx0IHNpemUs
IG5vdCBtaW5pbXVtIG9uZS4KKyAgICBpZiAoZmVhdHVyZXMud2lkdGhTZXQgJiYgZmVhdHVyZXMu
d2lkdGgpCisgICAgICAgIGFyZ3VtZW50cy53aWR0aCA9IGZlYXR1cmVzLndpZHRoOworICAgIGlm
IChmZWF0dXJlcy5oZWlnaHRTZXQgJiYgZmVhdHVyZXMuaGVpZ2h0KQorICAgICAgICBhcmd1bWVu
dHMuaGVpZ2h0ID0gZmVhdHVyZXMuaGVpZ2h0OworICAgIHBhZ2UtPm1haW5GcmFtZSgpLnNldFZp
ZXdwb3J0QXJndW1lbnRzKGFyZ3VtZW50cyk7CisjZW5kaWYKKwogICAgIHBhZ2UtPmNocm9tZSgp
LnNob3coKTsKIAogICAgIGNyZWF0ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuaAppbmRleCA0NjMyOGQ0OTFiZTA3ZmUwYTFkMzY5Y2RlZjQwMTk5NWJmMGUyOWYxLi5iNDUz
ZmNlNzMxMjY4MjM4OTI2OWM5MDZkNDIzOGU0Y2E4NTJhNWVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuaApAQCAtODksNiArODksOSBAQCBwdWJsaWM6CiAgICAgfkZyYW1lTG9hZGVy
KCk7CiAKICAgICB2b2lkIGluaXQoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBpbml0
Rm9yU3ludGhlc2l6ZWREb2N1bWVudChjb25zdCBVUkwmKTsKKyNlbmRpZgogCiAgICAgRnJhbWUm
IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCkBAIC0xNTUsNiArMTU4LDkgQEAg
cHVibGljOgogICAgIEZyYW1lU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9
CiAgICAgc3RhdGljIGRvdWJsZSB0aW1lT2ZMYXN0Q29tcGxldGVkTG9hZCgpOwogCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNvbm5lY3Rpb25Qcm9w
ZXJ0aWVzKFJlc291cmNlTG9hZGVyKik7CisjZW5kaWYKICAgICBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIG9yaWdpbmFsUmVxdWVzdCgpIGNvbnN0OwogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
aW5pdGlhbFJlcXVlc3QoKSBjb25zdDsKICAgICB2b2lkIHJlY2VpdmVkTWFpblJlc291cmNlRXJy
b3IoY29uc3QgUmVzb3VyY2VFcnJvciYpOwpAQCAtMjQxLDYgKzI0Nyw5IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY29tbWl0UHJvdmlzaW9uYWxMb2FkKCk7CiAKKyAgICB2b2lkIHNldExvYWRzU3lu
Y2hyb25vdXNseShib29sIGxvYWRzU3luY2hyb25vdXNseSkgeyBtX2xvYWRzU3luY2hyb25vdXNs
eSA9IGxvYWRzU3luY2hyb25vdXNseTsgfQorICAgIGJvb2wgbG9hZHNTeW5jaHJvbm91c2x5KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2Fkc1N5bmNocm9ub3VzbHk7IH0KKwogICAgIEZyYW1lTG9hZGVy
U3RhdGVNYWNoaW5lKiBzdGF0ZU1hY2hpbmUoKSBjb25zdCB7IHJldHVybiAmbV9zdGF0ZU1hY2hp
bmU7IH0KIAogICAgIEZyYW1lKiBmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgRG9jdW1lbnQqIGFjdGl2ZURvY3VtZW50ID0gMCk7CkBAIC00MzUsOSArNDQ0
LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb247CiAg
ICAgYm9vbCBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZTsKICAgICBib29sIG1fc3VwcHJlc3NPcGVu
ZXJJbk5ld0ZyYW1lOwotICAgIAorCiAgICAgYm9vbCBtX2N1cnJlbnROYXZpZ2F0aW9uSGFzU2hv
d25CZWZvcmVVbmxvYWRDb25maXJtUGFuZWw7CiAKKyAgICBib29sIG1fbG9hZHNTeW5jaHJvbm91
c2x5OworCiAgICAgU2FuZGJveEZsYWdzIG1fZm9yY2VkU2FuZGJveEZsYWdzOwogCiAgICAgUmVm
UHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDVkY2VmN2RkNjVkYjg0ZTBk
MDhjYmI5OTk5ZmJhZTc5N2NiN2VkZDIuLmZjYmJjYjc3MTU2NTE1OGVhMDU0NTE3YjhlZDUyNjdm
N2U1YmNiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBA
IC0xMTYsNiArMTE2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKSA9IDA7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBmb3JjZUxheW91dCgpID0gMDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
IHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dFdpdGhvdXRSZWNhbGN1bGF0aW5nU3R5bGVzKCkgPSAw
OworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dEZvck5vbkhUTUwoKSA9
IDA7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldENvcGllc09uU2Nyb2xsKCkgPSAwOwpAQCAt
MTMyLDYgKzEzNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgVVNFKFBST1RFQ1RJT05f
U1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICAgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpID0gMDsKICNlbmRpZgorCisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNv
bm5lY3Rpb25Qcm9wZXJ0aWVzKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKSA9IDA7CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNl
aXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBpbnQgZGF0YUxlbmd0aCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyKSA9IDA7CkBAIC0yNDksNiArMjU3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1l
KENhY2hlZEZyYW1lKikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29t
bWl0dGVkRnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikgPSAwOworI2lmIFBMQVRGT1JNKElP
UykKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlc3RvcmVGcmFtZUhpZXJhcmNoeUZvckNhY2hl
ZEZyYW1lKCkgPSAwOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9D
b21taXR0ZWRGb3JOZXdQYWdlKCkgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTYXZl
VG9QYWdlQ2FjaGUoKSA9IDA7CkBAIC0yODEsNyArMjkyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0
ID0gMDsgLy8gIk5hdmlnYXRpb24iIGhlcmUgbWVhbnMgYSB0cmFuc2l0aW9uIGZyb20gb25lIHBh
Z2UgdG8gYW5vdGhlciB0aGF0IGVuZHMgdXAgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0LgogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0
ZW4gPSB0cnVlKSA9IDA7Ci0gICAgICAgIAorCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICAv
LyBBbGxvdyBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byByZXRyaWV2ZSBhIEZyYW1lIHBhcmVu
dCBpZiB0aGVyZSdzIG5vIFBsYXRmb3JtV2lkZ2V0LgogICAgICAgICB2aXJ0dWFsIFJlbW90ZUFY
T2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAppbmRleCBkNTY1OThmNDk0MmFkZGM4MTAw
YmZlMDk1NzExMzU2ZWI1NzdiNDExLi5lYmMxMTgyY2Y4YTBhMmI3NDE2ZWE4NGJmY2U5YjUyYTE5
YzI3MjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAK
QEAgLTEyNyw2ICsxMjcsOCBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3JlU2Nyb2xs
UG9zaXRpb25BbmRWaWV3U3RhdGUoKQogICAgIC8vIHRocm91Z2ggdG8gdGhlIGNsaWVudC4gSXQn
cyBjdXJyZW50bHkgdXNlZCBvbmx5IGZvciB0aGUgUERGIHZpZXcgb24gTWFjLgogICAgIG1fZnJh
bWUubG9hZGVyKCkuY2xpZW50KCkucmVzdG9yZVZpZXdTdGF0ZSgpOwogCisgICAgLy8gRG9uJ3Qg
cmVzdG9yZSBzY3JvbGwgcG9pbnQgb24gaU9TIGFzIEZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3Jl
Vmlld1N0YXRlKCkgZG9lcyB0aGF0LgorI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6
IFRoZXJlIGlzIHNvbWUgc2Nyb2xsaW5nIHJlbGF0ZWQgd29yayB0aGF0IG5lZWRzIHRvIGhhcHBl
biB3aGVuZXZlciBhIHBhZ2UgZ29lcyBpbnRvIHRoZQogICAgIC8vIHBhZ2UgY2FjaGUgYW5kIHNp
bWlsYXIgd29yayB0aGF0IG5lZWRzIHRvIG9jY3VyIHdoZW4gaXQgY29tZXMgb3V0LiBUaGlzIGlz
IHdoZXJlIHdlIGRvIHRoZSB3b3JrCiAgICAgLy8gdGhhdCBuZWVkcyB0byBoYXBwZW4gd2hlbiB3
ZSBleGl0LCBhbmQgdGhlIHdvcmsgdGhhdCBuZWVkcyB0byBoYXBwZW4gd2hlbiB3ZSBlbnRlciBp
cyBpbgpAQCAtMTQ2LDYgKzE0OCw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpCiAgICAgICAgICAgICAgICAgdmlldy0+c2V0U2Ny
b2xsUG9zaXRpb24obV9jdXJyZW50SXRlbS0+c2Nyb2xsUG9pbnQoKSk7CiAgICAgICAgIH0KICAg
ICB9CisjZW5kaWYKIH0KIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlQmFja0Zvcndh
cmRMaXN0Rm9yRnJhZ21lbnRTY3JvbGwoKQpAQCAtODc1LDQgKzg3OCwxNiBAQCB2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjpyZXBsYWNlU3RhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHN0YXRlT2JqZQogICAgIG1fZnJhbWUubG9hZGVyKCkuY2xpZW50KCkudXBkYXRlR2xvYmFs
SGlzdG9yeSgpOwogfQogCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXBsYWNlQ3VycmVudEl0
ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3ByZXZpb3VzSXRlbSA9IG51bGxwdHI7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxJ
dGVtKQorICAgICAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9IGl0ZW07CisgICAgZWxzZQorICAgICAg
ICBtX2N1cnJlbnRJdGVtID0gaXRlbTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAppbmRleCA0YTE1MDYyYTAyYWJi
MWQzYTEyNGQ4NTU0ZDMzMTg2YjQ2OTU2NDE4Li41ZDZjMDFjYjYxMWJkOWJiZDVkNGU1N2E0NTZm
YmE5NjdiYWNiNzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIu
aApAQCAtNzYsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJyZW50SXRlbShIaXN0
b3J5SXRlbSopOwogICAgIHZvaWQgc2V0Q3VycmVudEl0ZW1UaXRsZShjb25zdCBTdHJpbmdXaXRo
RGlyZWN0aW9uJik7CiAgICAgYm9vbCBjdXJyZW50SXRlbVNob3VsZEJlUmVwbGFjZWQoKSBjb25z
dDsKKyAgICB2b2lkIHJlcGxhY2VDdXJyZW50SXRlbShIaXN0b3J5SXRlbSopOwogCiAgICAgSGlz
dG9yeUl0ZW0qIHByZXZpb3VzSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXNJdGVtLmdl
dCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9QbGFjZWhvbGRlckRv
Y3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5oCmlu
ZGV4IGNlMjMyNzgyN2E2YTgwYmQ1NDlmNjViMDg5ZWVjM2YwNjdhZDA1YTMuLjdkODVmMzlhYzA4
ZGE3Y2M5M2RiODU1NTMwMmVhMzFkZjkwODE1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1BsYWNlaG9sZGVyRG9jdW1lbnQuaApAQCAtMzAsMjAgKzMwLDIxIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgUGxhY2Vob2xkZXJEb2N1bWVudCBGSU5BTCA6IHB1YmxpYyBEb2N1
bWVudCB7CitjbGFzcyBQbGFjZWhvbGRlckRvY3VtZW50IDogcHVibGljIERvY3VtZW50IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGFjZWhvbGRlckRvY3VtZW50PiBjcmVhdGUo
RnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUGxhY2Vob2xkZXJEb2N1bWVudChmcmFtZSwgdXJsKSk7CiAgICAgfQogCi1wcml2
YXRlOgotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVSZW5kZXJUcmVlKCkgT1ZFUlJJREU7Ci0KK3By
b3RlY3RlZDoKICAgICBQbGFjZWhvbGRlckRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJM
JiB1cmwpCiAgICAgICAgIDogRG9jdW1lbnQoZnJhbWUsIHVybCkKICAgICB7CiAgICAgfQorCitw
cml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVSZW5kZXJUcmVlKCkgT1ZFUlJJREU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUG9saWN5Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUG9saWN5Q2hl
Y2tlci5jcHAKaW5kZXggMWVlODMwMjA4ODhiNmJiY2Q1Y2QwNDk0ZGNmOWNhMjJkYjQ4YTk5OC4u
OGVhZDQxM2NjZTdjMGFlZDk0MTE4YWJiMDBiZmRjMmJiMzE2MzBmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Qb2xpY3lDaGVja2VyLmNwcApAQCAtNDIsNiArNDIsMTQgQEAKICNpbmNsdWRlICJI
VE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCisj
aWYgVVNFKFFVSUNLX0xPT0spCisjaW5jbHVkZSAiUXVpY2tMb29rLmgiCisjZW5kaWYKKworI2lm
IFVTRShDT05URU5UX0ZJTFRFUklORykKKyNpbmNsdWRlICJDb250ZW50RmlsdGVyLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQb2xpY3lDaGVja2VyOjpQb2xpY3lDaGVja2Vy
KEZyYW1lJiBmcmFtZSkKQEAgLTkzLDYgKzEwMSwyMyBAQCB2b2lkIFBvbGljeUNoZWNrZXI6OmNo
ZWNrTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIERvY3Vt
ZQogCiAgICAgbV9jYWxsYmFjay5zZXQocmVxdWVzdCwgZm9ybVN0YXRlLmdldCgpLCBzdGQ6Om1v
dmUoZnVuY3Rpb24pKTsKIAorI2lmIFVTRShRVUlDS19MT09LKQorICAgIC8vIEFsd2F5cyBhbGxv
dyBRdWlja0xvb2stZ2VuZXJhdGVkIFVSTHMgYmFzZWQgb24gdGhlIHByb3RvY29sIHNjaGVtZS4K
KyAgICBpZiAoIXJlcXVlc3QuaXNOdWxsKCkgJiYgcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKFFM
UHJldmlld1Byb3RvY29sKCkpKSB7CisgICAgICAgIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9s
aWN5KFBvbGljeVVzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworI2lmIFVT
RShDT05URU5UX0ZJTFRFUklORykKKyAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9h
ZGVyID0gbV9mcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKSB7CisgICAgICAgIGlmIChk
b2N1bWVudExvYWRlci0+aGFuZGxlQ29udGVudEZpbHRlclJlcXVlc3QocmVxdWVzdCkpIHsKKyAg
ICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KFBvbGljeUlnbm9yZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIG1fZGVs
ZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlvblBvbGljeSA9IHRydWU7CiAgICAgbV9mcmFtZS5sb2Fk
ZXIoKS5jbGllbnQoKS5kaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oYWN0
aW9uLCByZXF1ZXN0LCBmb3JtU3RhdGUsIFt0aGlzXShQb2xpY3lBY3Rpb24gYWN0aW9uKSB7CiAg
ICAgICAgIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGFjdGlvbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmNwcAppbmRleCBkYWUxYzJkZTU1YWNjNmQ4MTcwMWUz
ZmFjNmJhMDcyNjg5NmY0NWUzLi45YWRkZjEzNTE5YmI2ODM3NTc5MGQ4OWJjZjVhZmY0NDliNWYx
MjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHAKQEAgLTExMiw2
ICsxMTIsMTQgQEAgYm9vbCBSZXNvdXJjZUJ1ZmZlcjo6aGFzUHVyZ2VhYmxlQnVmZmVyKCkgY29u
c3QKICAgICByZXR1cm4gbV9zaGFyZWRCdWZmZXItPmhhc1B1cmdlYWJsZUJ1ZmZlcigpOwogfQog
CisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBSZXNvdXJjZUJ1ZmZlcjo6c2hvdWxkVXNlUHVyZ2Vh
YmxlTWVtb3J5KGJvb2wgdXNlKQoreworICAgIEFTU0VSVChtX3NoYXJlZEJ1ZmZlcik7CisgICAg
c2hhcmVkQnVmZmVyKCktPnNob3VsZFVzZVB1cmdlYWJsZU1lbW9yeSh1c2UpOworfQorI2VuZGlm
CisKIHZvaWQgUmVzb3VyY2VCdWZmZXI6OmNyZWF0ZVB1cmdlYWJsZUJ1ZmZlcigpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKG1fc2hhcmVkQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
QnVmZmVyLmgKaW5kZXggNWRjMmQ5NTcxYjM1M2JmNDkwNWM3YzJmMTQ5NDEzNjFhMjczZTZlMC4u
MDFjYzQ2NDJhMWNiMDczM2ViMzA0MTRlYjcxMjAwNWZkMjM2NWY1OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKQEAgLTcxLDcgKzcxLDExIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaGFzUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3Q7CiAgICAgdm9pZCBjcmVhdGVQdXJnZWFi
bGVCdWZmZXIoKSBjb25zdDsKLSAgICAKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIHNo
b3VsZFVzZVB1cmdlYWJsZU1lbW9yeShib29sKTsKKyNlbmRpZgorCiAgICAgLy8gRW5zdXJlIHRo
aXMgYnVmZmVyIGhhcyBubyBvdGhlciBjbGllbnRzIGJlZm9yZSBjYWxsaW5nIHRoaXMuCiAgICAg
UGFzc093blB0cjxQdXJnZWFibGVCdWZmZXI+IHJlbGVhc2VQdXJnZWFibGVCdWZmZXIoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5jcHAKaW5kZXgg
ODM2OGJlMDE2MzljNDFmYzAyMTM3NmRlZjA5Yzg4MTgyOTUyM2JkMi4uMWY4ZTAxNWQxZTRiOTJi
MmM1OWE0OTJlNTQyMTRlYzkxZWVkMTk2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgIlBy
b2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAKKyNpZiBVU0Uo
UVVJQ0tfTE9PSykKKyNpbmNsdWRlICJRdWlja0xvb2suaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFJlc291cmNlTG9hZE5vdGlmaWVyOjpSZXNvdXJjZUxvYWROb3RpZmllcihG
cmFtZSYgZnJhbWUpCkBAIC0xMDcsNiArMTExLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkTm90aWZp
ZXI6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRp
CiAKIHZvaWQgUmVzb3VyY2VMb2FkTm90aWZpZXI6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KQogeworI2lmIFVTRShRVUlDS19MT09LKQorICAgIC8vIEFsd2F5cyBhbGxvdyBRdWlja0xvb2st
Z2VuZXJhdGVkIFVSTHMgYmFzZWQgb24gdGhlIHByb3RvY29sIHNjaGVtZS4KKyAgICBpZiAoIXJl
cXVlc3QuaXNOdWxsKCkgJiYgcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKFFMUHJldmlld1Byb3Rv
Y29sKCkpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIFN0cmluZyBvbGRSZXF1ZXN0
VVJMID0gcmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKICAgICBtX2ZyYW1lLmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCktPmRpZFRlbGxDbGllbnRBYm91dExvYWQocmVxdWVzdC51cmwoKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKaW5kZXgg
YThkMjE4ZGNiYTk0Y2RkNmUyMTkxY2JmYTM2ZmJjMWQ4YWYxYzA0ZC4uZjU5ZDMxMTQ3YTA1YThj
ZjkzN2IxOWE5M2Q1MjcyNmMzNGM2ZGExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKQEAgLTQyLDExICs0MiwyMCBAQAogI2luY2x1ZGUg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9T
Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2NvbHMgPSAyMDsKIC8vIE1hdGNo
IHRoZSBwYXJhbGxlbCBjb25uZWN0aW9uIGNvdW50IHVzZWQgYnkgdGhlIG5ldHdvcmtpbmcgbGF5
ZXIuCiBzdGF0aWMgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3Q7CisjaWYgIVBM
QVRGT1JNKElPUykKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9y
Tm9uSFRUUFByb3RvY29scyA9IDIwOworI2Vsc2UKKy8vIExpbWl0aW5nIHRoaXMgc2VlbXMgdG8g
cmVncmVzcyBwZXJmb3JtYW5jZSBpbiBzb21lIGxvY2FsIGNhc2VzIHNvIGxldCdzIGp1c3QgbWFr
ZSBpdCBsYXJnZS4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9y
Tm9uSFRUUFByb3RvY29scyA9IDEwMDAwOworI2VuZGlmCiAKIFJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RGb3JVUkwoY29u
c3QgVVJMJiB1cmwsIENyZWF0ZUhvc3RQb2xpY3kgY3JlYXRlSG9zdFBvbGljeSkKIHsKQEAgLTEw
NCw2ICsxMTMsMTUgQEAgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmEKICAgICBSZWZQdHI8U3VicmVz
b3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZnJhbWUsIHJl
c291cmNlLCByZXF1ZXN0LCBvcHRpb25zKTsKICAgICBpZiAobG9hZGVyKQogICAgICAgICBzY2hl
ZHVsZUxvYWQobG9hZGVyLmdldCgpLCBwcmlvcml0eSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IC8vIFNpbmNlIHdlIGRlZmVyIGxvYWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5n
IG9uIGlPUywgdGhlIGZyYW1lCisgICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNh
bGxlZCBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKCkgb24KKyAgICAvLyBvdGhlciBwb3J0
cyBtaWdodCBiZSBjYWxsZWQgaW4gc2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0
IHRvCisgICAgLy8gY2FsbGVycyBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIg
aXMgcmV0dXJuZWQgaWYgdGhlIGxvYWQgd2FzCisgICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUg
bG9hZCBkZWxlZ2F0ZS4KKyAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5h
bFN0YXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCiAgICAgcmV0dXJuIGxv
YWRlci5yZWxlYXNlKCk7CiB9CiAKQEAgLTEyMiwyMSArMTQwLDQ5IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVy
LCBSZXNvdXJjCiAKICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpsb2FkIHJlc291cmNlICVwICclcyciLCByZXNvdXJjZUxvYWRlciwgcmVzb3VyY2VMb2Fk
ZXItPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKKyNpZiBQTEFURk9STShJT1Mp
CiAgICAgLy8gSWYgdGhlcmUncyBhIHdlYiBhcmNoaXZlIHJlc291cmNlIGZvciB0aGlzIFVSTCwg
d2UgZG9uJ3QgbmVlZCB0byBzY2hlZHVsZSB0aGUgbG9hZCBzaW5jZSBpdCB3aWxsIG5ldmVyIHRv
dWNoIHRoZSBuZXR3b3JrLgorICAgIGlmICghaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkg
JiYgcmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNvdXJjZUZvclVS
TChyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkudXJsKCkpKSB7CisgICAgICAg
IHJlc291cmNlTG9hZGVyLT5zdGFydExvYWRpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbHNlCiAgICAgaWYgKHJlc291cmNlTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5hcmNoaXZl
UmVzb3VyY2VGb3JVUkwocmVzb3VyY2VMb2FkZXItPnJlcXVlc3QoKS51cmwoKSkpIHsKICAgICAg
ICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3QgPSBob3N0
Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSwgQ3JlYXRl
SWZOb3RGb3VuZCk7CisjZWxzZQorICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IGhvc3RGb3JV
UkwocmVzb3VyY2VMb2FkZXItPnVybCgpLCBDcmVhdGVJZk5vdEZvdW5kKTsKKyNlbmRpZgogCi0g
ICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJs
KCksIENyZWF0ZUlmTm90Rm91bmQpOyAgICAKICAgICBib29sIGhhZFJlcXVlc3RzID0gaG9zdC0+
aGFzUmVxdWVzdHMoKTsKICAgICBob3N0LT5zY2hlZHVsZShyZXNvdXJjZUxvYWRlciwgcHJpb3Jp
dHkpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChSZXNvdXJjZVJlcXVlc3Q6Omh0dHBQ
aXBlbGluaW5nRW5hYmxlZCgpICYmICFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkgewor
ICAgICAgICAvLyBTZXJ2ZSBhbGwgcmVxdWVzdHMgYXQgb25jZSB0byBrZWVwIHRoZSBwaXBlbGlu
ZSBmdWxsIGF0IHRoZSBuZXR3b3JrIGxheWVyLgorICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3cpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKChwcmlvcml0eSA+IFJl
c291cmNlTG9hZFByaW9yaXR5TG93IHx8ICFyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1
ZXN0KCkudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IChwcmlvcml0eSA9PSBSZXNv
dXJjZUxvYWRQcmlvcml0eUxvdyAmJiAhaGFkUmVxdWVzdHMpKSAmJiAhaXNTdXNwZW5kaW5nUGVu
ZGluZ1JlcXVlc3RzKCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50IHJl
c291cmNlcyBpbW1lZGlhdGVseS4KKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwg
cHJpb3JpdHkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKICAgICBpZiAocHJpb3Jp
dHkgPiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPnVybCgpLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3cgJiYgIWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBpbXBv
cnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5LgogICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhob3N0LCBwcmlvcml0eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisjZW5kaWYKIAogICAg
IG5vdGlmeURpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlTG9hZGVyKTsKIApAQCAt
MTU3LDYgKzIwMywxNSBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlKFJlc291
cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKICAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3QgPSBo
b3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7CiAgICAgaWYgKGhvc3QpCiAgICAgICAg
IGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJldHVybmluZyB0aGUgY29ycmVj
dCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdldCBjYW5jZWxlZCBiZWZvcmUg
dGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVlc3QgdXJsIGluc3RlYWQuCisg
ICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91bGQgYmUgbWFkZSB0byByZXR1
cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCisgICAgaWYgKCFyZXNvdXJjZUxvYWRl
ci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKKyAgICAgICAgSG9zdEluZm9ybWF0
aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5h
bFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIGlmIChvcmlnaW5hbEhvc3QgJiYgb3JpZ2luYWxI
b3N0ICE9IGhvc3QpCisgICAgICAgICAgICBvcmlnaW5hbEhvc3QtPnJlbW92ZShyZXNvdXJjZUxv
YWRlcik7CisgICAgfQorI2VuZGlmCiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OwogfQogCkBAIC0xNjQsMTEgKzIxOSwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6
Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZQogewog
ICAgIEhvc3RJbmZvcm1hdGlvbiogb2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXIt
PnVybCgpKTsKICAgICBBU1NFUlQob2xkSG9zdCk7CisgICAgaWYgKCFvbGRIb3N0KQorICAgICAg
ICByZXR1cm47CisKICAgICBIb3N0SW5mb3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJl
ZGlyZWN0VVJMLCBDcmVhdGVJZk5vdEZvdW5kKTsKIAogICAgIGlmIChvbGRIb3N0LT5uYW1lKCkg
PT0gbmV3SG9zdC0+bmFtZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBuZXdIb3N0
LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlcik7CiAgICAgb2xkSG9zdC0+cmVtb3Zl
KHJlc291cmNlTG9hZGVyKTsKIH0KQEAgLTIxOSw2ICsyNzcsMTIgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlvbiogaG9zdCwg
UmVzb3VyY2UKIAogICAgICAgICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92ZUZpcnN0KCk7CiAg
ICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlci5nZXQoKSk7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbklzV2ViUHJv
Y2VzcygpKSB7CisgICAgICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAg
ICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCBmNjI4ZDQ5NzY0N2FiMjNkYzM1
MGI2MGI4ODJlMDMxODkyZDYxZDZjLi5kZGQyNWI3Mjg3NmZhMmRmMDlhOGUyMjhkNTEyYjRhNDQz
MDMwOTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTEx
MCw2ICsxMTAsMTUgQEAgYm9vbCBSZXNvdXJjZUxvYWRlcjo6aW5pdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHIpCiAgICAgQVNTRVJUKCFtX2RvY3VtZW50TG9hZGVyLT5pc1N1YnN0aXR1dGVMb2Fk
UGVuZGluZyh0aGlzKSk7CiAgICAgCiAgICAgUmVzb3VyY2VSZXF1ZXN0IGNsaWVudFJlcXVlc3Qo
cik7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gSWYgdGhlIGRvY3VtZW50TG9hZGVyIHdh
cyBkZXRhY2hlZCB3aGlsZSB0aGlzIFJlc291cmNlTG9hZGVyIHdhcyB3YWl0aW5nIGl0cyB0dXJu
CisgICAgLy8gaW4gUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHF1ZXVlLCBkb24ndCBjb250aW51ZS4K
KyAgICBpZiAoIW1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpIHsKKyAgICAgICAgY2FuY2VsKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKICAgICAKICAgICBtX2RlZmVy
c0xvYWRpbmcgPSBtX2ZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKTsKICAgICBpZiAobV9v
cHRpb25zLnNlY3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNrICYmICFtX2ZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KGNsaWVudFJlcXVlc3QudXJsKCkp
KSB7CkBAIC0xMjksNiArMTM4LDEzIEBAIGJvb2wgUmVzb3VyY2VMb2FkZXI6OmluaXQoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByKQogICAgIH0KIAogICAgIHdpbGxTZW5kUmVxdWVzdChjbGllbnRS
ZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlKCkpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IElmIHRoaXMgUmVzb3VyY2VMb2FkZXIgd2FzIHN0b3BwZWQgYXMgYSByZXN1bHQgb2Ygd2lsbFNl
bmRSZXF1ZXN0LCBiYWlsIG91dC4KKyAgICBpZiAobV9yZWFjaGVkVGVybWluYWxTdGF0ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKICAgICBpZiAoY2xpZW50UmVxdWVzdC5pc051
bGwoKSkgewogICAgICAgICBjYW5jZWwoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI4
LDYgKzI0NCwyMCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlcwogICAgIFJlZjxSZXNvdXJjZUxv
YWRlcj4gcHJvdGVjdCgqdGhpcyk7CiAKICAgICBBU1NFUlQoIW1fcmVhY2hlZFRlcm1pbmFsU3Rh
dGUpOworICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBFbnN1cmUgYW4gaWRlbnRpZmll
ciBpcyBhbHdheXMgc2V0LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlzIGFzc2V0aW9uIGlzIG5vdCBo
aXQ6CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzExMDU5Nzk0PiBBU1NFUlRJT04gRkFJTEVEOiAh
SGFzaFRyYW5zbGF0b3I6OmVxdWFsKEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpLCBrZXkpIGluIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
IGxvYWRpbmcgdGhlIGF0dGFjaGVkIHdlYiBhcmNoaXZlCisgICAgLy8gVGhpcyBpcyBub3QgbmVl
ZGVkIGluIFdlYktpdDIsIGFzIGl0IGRvZXNuJ3QgdXNlIG1faWRlbnRpZmllciBpbiBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQorICAg
IGlmICghbV9pZGVudGlmaWVyKSB7CisgICAgICAgIG1faWRlbnRpZmllciA9IG1fZnJhbWUtPnBh
Z2UoKS0+cHJvZ3Jlc3MoKS5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7CisgICAgICAgIGZyYW1l
TG9hZGVyKCktPm5vdGlmaWVyKCkuYXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QobV9p
ZGVudGlmaWVyLCBkb2N1bWVudExvYWRlcigpLCByZXF1ZXN0KTsKKworICAgICAgICAvLyBJZiB0
aGlzIFJlc291cmNlTG9hZGVyIHdhcyBzdG9wcGVkIGFzIGEgcmVzdWx0IG9mIGFzc2lnbklkZW50
aWZpZXJUb0luaXRpYWxSZXF1ZXN0LCBiYWlsIG91dAorICAgICAgICBpZiAobV9yZWFjaGVkVGVy
bWluYWxTdGF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKIAogICAgIC8v
IFdlIG5lZWQgYSByZXNvdXJjZSBpZGVudGlmaWVyIGZvciBhbGwgcmVxdWVzdHMsIGV2ZW4gaWYg
RnJhbWVMb2FkZXIgaXMgbmV2ZXIgZ29pbmcgdG8gc2VlIGl0IChzdWNoIGFzIHdpdGggQ09SUyBw
cmVmbGlnaHQgcmVxdWVzdHMpLgogICAgIGJvb2wgY3JlYXRlZFJlc291cmNlSWRlbnRpZmllciA9
IGZhbHNlOwpAQCAtNTUyLDYgKzU4MiwxMyBAQCBib29sIFJlc291cmNlTG9hZGVyOjpjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvbnN0IFByb3RlY3Rpb25TcGFjZQogICAg
IHJldHVybiBmcmFtZUxvYWRlcigpLT5jbGllbnQoKS5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSwgcHJvdGVjdGlvblNw
YWNlKTsKIH0KICNlbmRpZgorICAgIAorI2lmIFBMQVRGT1JNKElPUykKK1JldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IFJlc291cmNlTG9hZGVyOjpjb25uZWN0aW9uUHJvcGVydGllcyhSZXNvdXJj
ZUhhbmRsZSopCit7CisgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCktPmNvbm5lY3Rpb25Qcm9wZXJ0
aWVzKHRoaXMpOworfQorI2VuZGlmCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKaW5kZXggYTUyM2E3YzUwZmFlNjZmNWE2ZWFkYmUwYjU1
NWU3ZWM2N2ZhZGFhMy4uNmRkOWViNjQyYzY5ODc2ZWFkMzVhZjQ4NGIxYWQ0NmMwZWQzZmI1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKQEAgLTU2LDYgKzU2LDE3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpbml0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgYm9vbCBzdGFydExvYWRpbmcoKQor
ICAgIHsKKyAgICAgICAgc3RhcnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgdmlydHVhbCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGlPU09yaWdpbmFsUmVxdWVzdCgpIGNv
bnN0IHsgcmV0dXJuIHJlcXVlc3QoKTsgfQorICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gY29ubmVjdGlvblByb3BlcnRpZXMoUmVzb3VyY2VIYW5kbGUqKSBPVkVSUklERTsK
KyNlbmRpZgorCiAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyKCkgY29uc3Q7CiAgICAgRG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudExv
YWRlci5nZXQoKTsgfQogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0
KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFJlcXVlc3Q7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvU3ViZnJhbWVMb2FkZXIuY3BwCmluZGV4IDNlY2ZjOGU2NGYzMzczM2RiMjE1NjBmNGIwYTE5
NTBjMWVkMzI1OWMuLmIwNmY3MGQ1OGFkNzU3Njc0ZjA4MDg1ZWJmYTI3YzA0ZTcxNmMwMTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcApAQCAtNDMyLDYgKzQzMiwx
MyBAQCBib29sIFN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQmIHBsdWdpbkVsZW1lbnQsIGNvbnN0IFVSTAogCiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSA9
IHJvdW5kZWRJbnRTaXplKExheW91dFNpemUocmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpLCByZW5k
ZXJlci0+Y29udGVudEhlaWdodCgpKSk7CiAgICAgYm9vbCBsb2FkTWFudWFsbHkgPSBkb2N1bWVu
dCgpLT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgIW1fY29udGFpbnNQbHVnaW5zICYmIHRvUGx1Z2lu
RG9jdW1lbnQoZG9jdW1lbnQoKSktPnNob3VsZExvYWRQbHVnaW5NYW51YWxseSgpOworCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIC8vIE9uIGlPUywgd2Ugb25seSB0ZWxsIHRoZSBwbHVnaW4gdG8g
YmUgaW4gZnVsbCBwYWdlIG1vZGUgaWYgdGhlIGNvbnRhaW5pbmcgcGx1Z2luIGRvY3VtZW50IGlz
IHRoZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCisgICAgaWYgKGRvY3VtZW50KCktPm93bmVyRWxlbWVu
dCgpKQorICAgICAgICBsb2FkTWFudWFsbHkgPSBmYWxzZTsKKyNlbmRpZgorCiAgICAgUmVmUHRy
PFdpZGdldD4gd2lkZ2V0ID0gbV9mcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5jcmVhdGVQbHVnaW4o
Y29udGVudFNpemUsICZwbHVnaW5FbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVz
LCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKIAogICAgIGlmICghd2lkZ2V0KSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAppbmRleCAxODViODllOTBlNTk4
ZjExMzdjMzgyNmVjNmM3NTg5OWY2NmI2M2RlLi40MzJhZDg1ZTNkNjQ1Yjk3MzJmMTdjMzRiY2Ri
ODg0OThjYjVhYzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5jcHAKQEAgLTQ0LDYgKzQ0LDEwIEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNs
dWRlIDxSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIERFRklORV9ERUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFr
Q291bnRlciwgc3VicmVzb3VyY2VMb2FkZXJDb3VudGVyLCAoIlN1YnJlc291cmNlTG9hZGVyIikp
OwpAQCAtODQsMTAgKzg4LDI5IEBAIFN1YnJlc291cmNlTG9hZGVyOjp+U3VicmVzb3VyY2VMb2Fk
ZXIoKQogUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNy
ZWF0ZShGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMp
CiB7CiAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzdWJsb2FkZXIoYWRvcHRSZWYobmV3
IFN1YnJlc291cmNlTG9hZGVyKGZyYW1lLCByZXNvdXJjZSwgb3B0aW9ucykpKTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgaWYgKCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7CisgICAgICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS85MTIxNzE5PiAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NjY0Ny4KKyAgICAgICAgc3VibG9hZGVyLT5tX2lPU09yaWdpbmFsUmVx
dWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIHJldHVybiBzdWJsb2FkZXIucmVsZWFzZSgpOworICAg
IH0KKyNlbmRpZgogICAgIGlmICghc3VibG9hZGVyLT5pbml0KHJlcXVlc3QpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHN1YmxvYWRlci5y
ZWxlYXNlKCk7CiB9CisgICAgCisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBTdWJyZXNvdXJjZUxv
YWRlcjo6c3RhcnRMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQoIWFwcGxpY2F0aW9uSXNXZWJQcm9j
ZXNzKCkpOworICAgIGlmICghaW5pdChtX2lPU09yaWdpbmFsUmVxdWVzdCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBtX2lPU09yaWdpbmFsUmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdCgp
OworICAgIHN0YXJ0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKIAogQ2FjaGVkUmVz
b3VyY2UqIFN1YnJlc291cmNlTG9hZGVyOjpjYWNoZWRSZXNvdXJjZSgpCiB7CkBAIC0yNzMsNiAr
Mjk2LDExIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoZG91Ymxl
IGZpbmlzaFRpbWUpCiAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlY2VpdmVkICclcycuIiwg
bV9yZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKIAogICAgIFJlZjxT
dWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgaWYgKHJlc291cmNlRGF0YSgpKQorICAgICAgICByZXNvdXJjZURhdGEoKS0+c2hvdWxkVXNl
UHVyZ2VhYmxlTWVtb3J5KHRydWUpOworI2VuZGlmCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkUmVzb3VyY2U+IHByb3RlY3RSZXNvdXJjZShtX3Jlc291cmNlKTsKICAgICBtX3N0YXRl
ID0gRmluaXNoaW5nOwogICAgIG1fcmVzb3VyY2UtPnNldExvYWRGaW5pc2hUaW1lKGZpbmlzaFRp
bWUpOwpAQCAtMzE0LDEzICszNDIsMjQgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIAogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6
d2lsbENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gU2luY2Ugd2UgZGVmZXIgaW5pdGlhbGl6YXRpb24gdG8gc2NoZWR1bGluZyB0
aW1lIG9uIGlPUyBidXQKKyAgICAvLyBDYWNoZWRSZXNvdXJjZUxvYWRlciBzdG9yZXMgcmVzb3Vy
Y2VzIGluIHRoZSBtZW1vcnkgY2FjaGUgaW1tZWRpYXRlbHksCisgICAgLy8gbV9yZXNvdXJjZSBt
aWdodCBiZSBjYWNoZWQgZGVzcGl0ZSBpdHMgbG9hZGVyIG5vdCBiZWluZyBpbml0aWFsaXplZC4K
KyAgICBpZiAobV9zdGF0ZSAhPSBJbml0aWFsaXplZCAmJiBtX3N0YXRlICE9IFVuaW5pdGlhbGl6
ZWQpCisjZWxzZQogICAgIGlmIChtX3N0YXRlICE9IEluaXRpYWxpemVkKQorI2VuZGlmCiAgICAg
ICAgIHJldHVybjsKICAgICBBU1NFUlQoIXJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpOwogICAgIExP
RyhSZXNvdXJjZUxvYWRpbmcsICJDYW5jZWxsZWQgbG9hZCBvZiAnJXMnLlxuIiwgbV9yZXNvdXJj
ZS0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKIAogICAgIFJlZjxTdWJyZXNvdXJj
ZUxvYWRlcj4gcHJvdGVjdCgqdGhpcyk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fc3RhdGUg
PSBtX3N0YXRlID09IFVuaW5pdGlhbGl6ZWQgPyBDYW5jZWxsZWRXaGlsZUluaXRpYWxpemluZyA6
IEZpbmlzaGluZzsKKyNlbHNlCiAgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKKyNlbmRpZgogICAg
IGlmIChtX3Jlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKQogICAgICAgICBtZW1vcnlD
YWNoZSgpLT5yZXZhbGlkYXRpb25GYWlsZWQobV9yZXNvdXJjZSk7CiAgICAgbV9yZXNvdXJjZS0+
c2V0UmVzb3VyY2VFcnJvcihlcnJvcik7CkBAIC0zNDIsNyArMzgxLDExIEBAIHZvaWQgU3VicmVz
b3VyY2VMb2FkZXI6Om5vdGlmeURvbmUoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3JlcXVl
c3RDb3VudFRyYWNrZXIuY2xlYXIoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9kb2N1bWVu
dExvYWRlci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9uZShtX3Jlc291cmNlLCBtX3N0
YXRlICE9IENhbmNlbGxlZFdoaWxlSW5pdGlhbGl6aW5nKTsKKyNlbHNlCiAgICAgbV9kb2N1bWVu
dExvYWRlci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9uZShtX3Jlc291cmNlKTsKKyNl
bmRpZgogICAgIGlmIChyZWFjaGVkVGVybWluYWxTdGF0ZSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9kb2N1bWVudExvYWRlci0+cmVtb3ZlU3VicmVzb3VyY2VMb2FkZXIodGhpcyk7CkBAIC0z
NTEsNyArMzk0LDExIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6Om5vdGlmeURvbmUoKQogdm9p
ZCBTdWJyZXNvdXJjZUxvYWRlcjo6cmVsZWFzZVJlc291cmNlcygpCiB7CiAgICAgQVNTRVJUKCFy
ZWFjaGVkVGVybWluYWxTdGF0ZSgpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKG1fc3Rh
dGUgIT0gVW5pbml0aWFsaXplZCAmJiBtX3N0YXRlICE9IENhbmNlbGxlZFdoaWxlSW5pdGlhbGl6
aW5nKQorI2Vsc2UKICAgICBpZiAobV9zdGF0ZSAhPSBVbmluaXRpYWxpemVkKQorI2VuZGlmCiAg
ICAgICAgIG1fcmVzb3VyY2UtPmNsZWFyTG9hZGVyKCk7CiAgICAgbV9yZXNvdXJjZSA9IDA7CiAg
ICAgUmVzb3VyY2VMb2FkZXI6OnJlbGVhc2VSZXNvdXJjZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKaW5kZXggMDBhYjk4MDFjZDZlMDMxZGJiOGY4NDZlMGM1
NDhjNmE1MGVjNWI0NC4uZDJmNDRkNWMwM2M4MGVjZTk2NTMyZDdiNjZlMjQ0NDc1OTMzOTgzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKQEAgLTUyLDYgKzUy
LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTdWJyZXNvdXJjZUxvYWRlcigpIE9W
RVJSSURFOwogICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSgpOwogCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIHZpcnR1YWwgYm9vbCBzdGFydExvYWRpbmcoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgaU9TT3JpZ2luYWxSZXF1ZXN0KCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pT1NPcmlnaW5hbFJlcXVlc3Q7IH0KKyNlbmRpZgorCiBw
cml2YXRlOgogICAgIFN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiwgQ2FjaGVkUmVzb3VyY2UqLCBj
b25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKIApAQCAtODYsNyArOTEsMTAgQEAgcHJpdmF0
ZToKICAgICBlbnVtIFN1YnJlc291cmNlTG9hZGVyU3RhdGUgewogICAgICAgICBVbmluaXRpYWxp
emVkLAogICAgICAgICBJbml0aWFsaXplZCwKLSAgICAgICAgRmluaXNoaW5nCisgICAgICAgIEZp
bmlzaGluZywKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIENhbmNlbGxlZFdoaWxlSW5pdGlh
bGl6aW5nCisjZW5kaWYKICAgICB9OwogCiAgICAgY2xhc3MgUmVxdWVzdENvdW50VHJhY2tlciB7
CkBAIC05OCw2ICsxMDYsOSBAQCBwcml2YXRlOgogICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9y
ZXNvdXJjZTsKICAgICB9OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFJlc291cmNlUmVxdWVz
dCBtX2lPU09yaWdpbmFsUmVxdWVzdDsKKyNlbmRpZgogICAgIENhY2hlZFJlc291cmNlKiBtX3Jl
c291cmNlOwogICAgIGJvb2wgbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVudDsKICAgICBTdWJyZXNv
dXJjZUxvYWRlclN0YXRlIG1fc3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAppbmRleCBhNzRiZjJk
YTRiYWJmN2YzYjI0NzFhMGQ0OTBkMjdmZjQ0ODY1OTQxLi4xOWVkNzFkZjVmZWYwNGQ5NjcwOTJi
NjU4YTk4NDBiNWE1NmY0YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTQyLDYgKzQyLDEw
IEBACiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTUUxpdGVEYXRh
YmFzZVRyYWNrZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBj
b25zdCBjaGFyIGZsYXRGaWxlU3ViZGlyZWN0b3J5W10gPSAiQXBwbGljYXRpb25DYWNoZSI7CkBA
IC0xMDAsNiArMTA0LDkgQEAgc3RhdGljIHVuc2lnbmVkIHVybEhvc3RIYXNoKGNvbnN0IFVSTCYg
dXJsKQogCiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjps
b2FkQ2FjaGVHcm91cChjb25zdCBVUkwmIG1hbmlmZXN0VVJMKQogeworI2lmIFBMQVRGT1JNKElP
UykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CisjZW5kaWYKICAgICBvcGVuRGF0YWJhc2UoZmFsc2UpOwogICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzQsNiArMTgxLDkgQEAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlmZXN0SG9zdEhhc2hlcygpCiAg
ICAgLy8gdG8gYXZvaWQgdHJ5aW5nIHRvIG9wZW4gdGhlIGRhdGFiYXNlIG92ZXIgYW5kIG92ZXIg
aWYgaXQgZG9lc24ndCBleGlzdC4KICAgICBoYXNMb2FkZWRIYXNoZXMgPSB0cnVlOwogICAgIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291
bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBvcGVuRGF0YWJhc2UoZmFsc2Up
OwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIw
LDYgKzIzMCwxMCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAorI2lmIFBMQVRGT1JNKElP
UykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlv
bkNvdW50ZXI7CisjZW5kaWYKKwogICAgIC8vIENoZWNrIHRoZSBkYXRhYmFzZS4gTG9vayBmb3Ig
YWxsIGNhY2hlIGdyb3VwcyB3aXRoIGEgbmV3ZXN0IGNhY2hlLgogICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpZCwgbWFuaWZlc3RVUkwsIG5ld2VzdENh
Y2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUgSVMgTk9UIE5VTEwiKTsKICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKQEAgLTI2Niw2ICsyODAs
OSBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgVVJM
JiB1cmwpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9n
cmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAgIEFTU0VSVCgh
dXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKTsKIAogICAgIC8vIENoZWNrIGlmIGFuIGFwcHJv
cHJpYXRlIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4KQEAgLTQzNyw2ICs0NTQsOSBA
QCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzZXREZWZhdWx0T3JpZ2luUXVvdGEoaW50
NjRfdCBxdW90YSkKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVv
dGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgaW50NjRfdCYgcXVvdGEp
CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1
dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAgIC8vIElmIGFuIE9yaWdp
biByZWNvcmQgZG9lc24ndCBleGlzdCwgdGhlbiB0aGUgQ09VTlQgd2lsbCBiZSAwIGFuZCBxdW90
YSB3aWxsIGJlIDAuCiAgICAgLy8gVXNpbmcgdGhlIGNvdW50IHRvIGRldGVybWluZSBpZiBhIHJl
Y29yZCBleGlzdGVkIG9yIG5vdCBpcyBhIHNhZmUgd2F5IHRvIGRldGVybWluZQogICAgIC8vIGlm
IGEgcXVvdGEgb2YgMCBpcyByZWFsLCBmcm9tIHRoZSByZWNvcmQsIG9yIGZyb20gbnVsbC4KQEAg
LTQ2MCw2ICs0ODAsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVR
dW90YUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZwogCiBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2FnZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBpbnQ2NF90JiB1c2FnZSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVy
OworI2VuZGlmCiAgICAgLy8gSWYgYW4gT3JpZ2lucyByZWNvcmQgZG9lc24ndCBleGlzdCwgdGhl
biB0aGUgU1VNIHdpbGwgYmUgbnVsbCwKICAgICAvLyB3aGljaCB3aWxsIGJlY29tZSAwLCBhcyBl
eHBlY3RlZCwgd2hlbiBjb252ZXJ0aW5nIHRvIGEgbnVtYmVyLgogICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBTVU0oQ2FjaGVzLnNpemUpIgpAQCAtNDg0
LDYgKzUwNyw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVVzYWdl
Rm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnCiAKIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNo
ZShjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwg
aW50NjRfdCYgcmVtYWluaW5nU2l6ZSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRl
VHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2Vu
ZGlmCiAgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUzMyw2ICs1NTksOSBAQCBib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVSZW1haW5pbmdTaXplRm9yT3JpZ2luRXhjbHVk
aW5nQ2FjaGUoY29ucwogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0
ZWRRdW90YUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBpbnQ2NF90IHF1
b3RhKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jl
c3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBvcGVuRGF0YWJh
c2UodHJ1ZSk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC01NTIsNiArNTgxLDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG8KIAogYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVNRTENvbW1hbmQoY29uc3QgU3RyaW5n
JiBzcWwpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRy
YWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyNlbmRpZgogICAgIEFTU0VSVCht
X2RhdGFiYXNlLmlzT3BlbigpKTsKICAgICAKICAgICBib29sIHJlc3VsdCA9IG1fZGF0YWJhc2Uu
ZXhlY3V0ZUNvbW1hbmQoc3FsKTsKQEAgLTU2OSw2ICs2MDEsOSBAQCBzdGF0aWMgY29uc3QgaW50
IHNjaGVtYVZlcnNpb24gPSA3OwogICAgIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChT
UUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyNlbmRp
ZgogICAgIGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJQUkFHTUEg
dXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOwogICAgIGlmICh2ZXJzaW9uID09IHNjaGVt
YVZlcnNpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTU5Myw2ICs2MjgsOSBAQCB2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICAKIHZvaWQgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jl
c3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBpZiAobV9kYXRh
YmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02NjAsNiArNjk4LDkgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2Vz
Tm90RXhpc3QpCiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1l
bnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
KTsKKyNlbmRpZgogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIExPR19FUlJPUigiQXBwbGljYXRpb24gQ2FjaGUg
U3RvcmFnZTogZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIi
LCAKQEAgLTY3MCw2ICs3MTEsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50KQogCiBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91
cFN0b3JhZ2VJREpvdXJuYWwqIGpvdXJuYWwpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFT
U0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsK
KyNlbmRpZgogICAgIEFTU0VSVChncm91cC0+c3RvcmFnZUlEKCkgPT0gMCk7CiAgICAgQVNTRVJU
KGpvdXJuYWwpOwogCkBAIC02OTYsNiArNzQwLDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCwgR3JvdXBTdG9yYWdlSUQK
IAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSog
Y2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm91cm5hbCogc3RvcmFnZUlESm91cm5hbCkKIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJh
bnNhY3Rpb25JblByb2dyZXNzKCkpOworI2VuZGlmCiAgICAgQVNTRVJUKGNhY2hlLT5zdG9yYWdl
SUQoKSA9PSAwKTsKICAgICBBU1NFUlQoY2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJRCgpICE9IDAp
OwogICAgIEFTU0VSVChzdG9yYWdlSURKb3VybmFsKTsKQEAgLTc3Nyw2ICs4MjQsOSBAQCBib29s
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwg
UmVzb3VyY2VTdG9yYWdlSURKbwogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9y
ZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZCBjYWNoZVN0b3Jh
Z2VJRCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJh
Y2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworI2VuZGlmCiAgICAgQVNTRVJUKGNh
Y2hlU3RvcmFnZUlEKTsKICAgICBBU1NFUlQoIXJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAgICAg
CkBAIC04OTQsNiArOTQ0LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUo
QXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKIAogYm9vbCBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZShBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UqIHJlc291cmNlLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKIHsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNh
Y3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgQVNTRVJUX1VOVVNFRChjYWNoZSwgY2FjaGUtPnN0
b3JhZ2VJRCgpKTsKICAgICBBU1NFUlQocmVzb3VyY2UtPnN0b3JhZ2VJRCgpKTsKIApAQCAtOTEw
LDYgKzk2Myw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFR5
cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAKIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5k
aWYKICAgICBBU1NFUlQoY2FjaGUtPnN0b3JhZ2VJRCgpKTsKICAgICAKICAgICBvcGVuRGF0YWJh
c2UodHJ1ZSk7CkBAIC05NDUsNiArMTAwMSw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiAK
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVuc3VyZU9yaWdpblJlY29yZChjb25zdCBT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NFUlQo
U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisjZW5k
aWYKICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3JpZ2luU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJJTlNFUlQgSU5UTyBPcmlnaW5zIChvcmlnaW4sIHF1b3RhKSBWQUxVRVMgKD8sID8pIik7CiAg
ICAgaWYgKGluc2VydE9yaWdpblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwOTIsNiArMTE1MSw5IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zCiAgICAgCiBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKQogeworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlv
bkluUHJvZ3Jlc3MoKSk7CisjZW5kaWYKICAgICBTUUxpdGVTdGF0ZW1lbnQgY2FjaGVTdGF0ZW1l
bnQobV9kYXRhYmFzZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxF
Q1QgdXJsLCBzdGF0dXNDb2RlLCB0eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVh
ZGVycywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSwgQ2FjaGVSZXNvdXJjZURhdGEucGF0aCBGUk9N
IENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5y
ZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VEYXRhIE9OIENhY2hlUmVzb3VyY2VEYXRh
LmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2FjaGVFbnRyaWVzLmNhY2hlPT8iKTsKQEAg
LTEyMDAsNiArMTI2Miw5IEBAIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlCiAgICAgCiB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpyZW1vdmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCiB7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9D
b3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAgIGlmICghY2FjaGUtPnN0b3Jh
Z2VJRCgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0xMjM3LDYgKzEzMDIsOSBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpyZW1vdmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUp
CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KCkKIHsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNh
Y3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKICAgICAKICAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCkBAIC0xMzAxLDYgKzEzNjksOSBAQCBib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFUb1VuaXF1ZUZpbGVJbkRpcmVjdG9yeShT
aGFyZWRCdWZmZXIqIGRhdAogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNv
cHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0KiBjYWNoZUhvc3QpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAg
IEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gY2FjaGVIb3N0LT5hcHBsaWNhdGlvbkNhY2hlKCk7
CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzM3LDYgKzE0MDgs
OSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0
IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjptYW5pZmVzdFVSTHMoVmVjdG9yPFVSTD4qIHVybHMpCiB7CisjaWYgUExBVEZPUk0oSU9T
KQorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9u
Q291bnRlcjsKKyNlbmRpZgogICAgIEFTU0VSVCh1cmxzKTsKICAgICBvcGVuRGF0YWJhc2UoZmFs
c2UpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKQEAgLTEzNTUsNiArMTQyOSw5IEBA
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcyhWZWN0b3I8VVJMPiog
dXJscykKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cFNpemUoY29u
c3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50NjRfdCogc2l6ZSkKIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rp
b25Db3VudGVyOworI2VuZGlmCiAgICAgQVNTRVJUKHNpemUpOwogICAgIG9wZW5EYXRhYmFzZShm
YWxzZSk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQpAQCAtMTM4MSw2ICsxNDU4LDkg
QEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cFNpemUoY29uc3QgU3Ry
aW5nJiBtYW5pZmVzdFVSTCwgaW50NjRfdCoKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogeworI2lmIFBM
QVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBkZWxldGVU
cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGdyb3Vw
IGlzIGluIG1lbW9yeS4KICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gbV9jYWNo
ZXNJbk1lbW9yeS5nZXQobWFuaWZlc3RVUkwpOwpAQCAtMTQzMiw2ICsxNTEyLDkgQEAgYm9vbCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1h
bmlmZXN0VVJMKQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2YWN1dW1EYXRhYmFz
ZUZpbGUoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBvcGVuRGF0
YWJhc2UoZmFsc2UpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKaW5kZXgg
N2ViMWNlN2NmZGE2M2YxOGY3N2M3YWZhMTA3ZDk0ZjE4NjBjMzEzMC4uYjY1OGZjYWYwODZlNDBh
NzhlNDMyMDk0N2ExNWZkNDkzN2YyMzA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuY3BwCkBAIC00NSw2ICs0NSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaW5jbHVkZSAiU3lzdGVtTWVtb3J5LmgiCisjZW5kaWYKKwogI2lmIFVTRShDRykKICNpbmNs
dWRlICJQREZEb2N1bWVudEltYWdlLmgiCiAjZW5kaWYKQEAgLTc2LDYgKzgwLDE1IEBAIENhY2hl
ZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgc2V0TG9hZGluZyhmYWxzZSk7
CiB9CiAKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBVUkwmIHVybCwgSW1hZ2UqIGlt
YWdlKQorICAgIDogQ2FjaGVkUmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0KHVybCksIEltYWdlUmVz
b3VyY2UpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9zaG91bGRQYWludEJyb2tlbklt
YWdlKHRydWUpCit7CisgICAgc2V0U3RhdHVzKENhY2hlZCk7CisgICAgc2V0TG9hZGluZyhmYWxz
ZSk7Cit9CisKIENhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQogewogICAgIGNsZWFySW1hZ2Uo
KTsKQEAgLTI2Nyw4ICsyODAsMTcgQEAgTGF5b3V0U2l6ZSBDYWNoZWRJbWFnZTo6aW1hZ2VTaXpl
Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxvYXQKICAgICB9CiAj
ZWxzZQogICAgIGlmIChtX2ltYWdlLT5pc0JpdG1hcEltYWdlKCkgJiYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKSkKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpbWFnZVNpemUgPSB0b0Jp
dG1hcEltYWdlKG1faW1hZ2UuZ2V0KCkpLT5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7Ci0j
ZW5kaWYKKyNlbHNlCisgICAgeworICAgICAgICAvLyBPbiBpT1MsIHRoZSBpbWFnZSBtYXkgaGF2
ZSBiZWVuIHN1YnNhbXBsZWQgdG8gYWNjb21tb2RhdGUgb3VyIHNpemUgcmVzdHJpY3Rpb25zLiBI
b3dldmVyCisgICAgICAgIC8vIHdlIHNob3VsZCB0ZWxsIHRoZSByZW5kZXJlciB3aGF0IHRoZSBv
cmlnaW5hbCBzaXplIHdhcy4KKyAgICAgICAgaW1hZ2VTaXplID0gdG9CaXRtYXBJbWFnZShtX2lt
YWdlLmdldCgpKS0+b3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7CisgICAgfSBl
bHNlIGlmIChtX2ltYWdlLT5pc0JpdG1hcEltYWdlKCkpCisgICAgICAgIGltYWdlU2l6ZSA9IHRv
Qml0bWFwSW1hZ2UobV9pbWFnZS5nZXQoKSktPm9yaWdpbmFsU2l6ZSgpOworI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCisjZW5kaWYgLy8gRU5BQkxFKENTU19JTUFHRV9PUklFTlRBVElPTikKIAog
I2lmIEVOQUJMRShTVkcpCiAgICAgZWxzZSBpZiAobV9pbWFnZS0+aXNTVkdJbWFnZSgpICYmIHNp
emVUeXBlID09IFVzZWRTaXplKSB7CkBAIC01OTAsNCArNjEyLDI2IEBAIGJvb2wgQ2FjaGVkSW1h
Z2U6OmlzT3JpZ2luQ2xlYW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogICAgIHJl
dHVybiAhc2VjdXJpdHlPcmlnaW4tPnRhaW50c0NhbnZhcyhyZXNwb25zZSgpLnVybCgpKTsKIH0K
IAorLy8gRklYTUU6IFdlIHNob3VsZCBsb29rIHRvIGluY29ycG9yYXRlIHRoZSBmdW5jdGlvbmFs
aXR5IG9mIENhY2hlZEltYWdlTWFudWFsCisvLyBpbnRvIENhY2hlZEltYWdlIG9yIGZpbmQgYSBi
ZXR0ZXIgcGxhY2UgZm9yIHRoaXMgY2xhc3MuCitDYWNoZWRJbWFnZU1hbnVhbDo6Q2FjaGVkSW1h
Z2VNYW51YWwoY29uc3QgVVJMJiB1cmwsIEltYWdlKiBpbWFnZSkKKyAgICA6IENhY2hlZEltYWdl
KHVybCwgaW1hZ2UpCisgICAgLCBtX2Zha2VDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxDYWNoZWRJ
bWFnZUNsaWVudD4oKSkKK3sKKyAgICAvLyBVc2UgdGhlIGluY29taW5nIFVSTCBpbiB0aGUgcmVz
cG9uc2UgZmllbGQuIFRoaXMgZW5zdXJlcyB0aGF0IGNvZGUKKyAgICAvLyB1c2luZyB0aGUgcmVz
cG9uc2UgZGlyZWN0bHksIHN1Y2ggYXMgb3JpZ2luIGNoZWNrcyBmb3Igc2VjdXJpdHksCisgICAg
Ly8gYWN0dWFsbHkgc2VlIHNvbWV0aGluZy4KKyAgICBtX3Jlc3BvbnNlLnNldFVSTCh1cmwpOwor
fQorCitib29sIENhY2hlZEltYWdlTWFudWFsOjptdXN0UmV2YWxpZGF0ZUR1ZVRvQ2FjaGVIZWFk
ZXJzKENhY2hlUG9saWN5KSBjb25zdAoreworICAgIC8vIERvIG5vdCByZXZhbGlkYXRlIG1hbnVh
bGx5IGNhY2hlZCBpbWFnZXMuIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgYXMgYQorICAgIC8vIHdh
eSB0byBlZmZpY2llbnRseSBzaGFyZSBhbiBpbWFnZSBmcm9tIHRoZSBjbGllbnQgdG8gY29udGVu
dCBhbmQKKyAgICAvLyB0aGUgVVJMIGZvciB0aGF0IGltYWdlIG1heSBub3QgcmVwcmVzZW50IGEg
cmVzb3VyY2UgdGhhdCBjYW4gYmUKKyAgICAvLyByZXRyaWV2ZWQgYnkgc3RhbmRhcmQgbWVhbnMu
IElmIHRoZSBtYW51YWwgY2FjaGluZyBTUEkgaXMgdXNlZCwgaXQgaXMKKyAgICAvLyBpbmN1bWJl
bnQgb24gdGhlIGNsaWVudCB0byBvbmx5IHVzZSB2YWxpZCByZXNvdXJjZXMuCisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRJbWFnZS5oCmluZGV4IDQ2NDBkNjliYjI3MDNmY2JiMmViMmM1NzAwNWIx
MThkYWUwNTIwNjMuLjE5NTgwY2JlOWQyNjczNzUwMDdkOTBkNmZkMmVkNDVjM2U1MzQ0YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCkBAIC00NSwxMiArNDUs
MTMgQEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIHN0cnVjdCBMZW5ndGg7CiAKLWNsYXNzIENh
Y2hlZEltYWdlIEZJTkFMIDogcHVibGljIENhY2hlZFJlc291cmNlLCBwdWJsaWMgSW1hZ2VPYnNl
cnZlciB7CitjbGFzcyBDYWNoZWRJbWFnZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSwgcHVibGlj
IEltYWdlT2JzZXJ2ZXIgewogICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKIAogcHVibGlj
OgogICAgIENhY2hlZEltYWdlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgIENhY2hlZElt
YWdlKEltYWdlKik7CisgICAgQ2FjaGVkSW1hZ2UoY29uc3QgVVJMJiwgSW1hZ2UqKTsKICAgICB2
aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOwogCiAgICAgSW1hZ2UqIGltYWdlKCk7IC8vIFJldHVybnMg
dGhlIG51bGxJbWFnZSgpIGlmIHRoZSBpbWFnZSBpcyBub3QgYXZhaWxhYmxlIHlldC4KQEAgLTc5
LDYgKzgwLDggQEAgcHVibGljOgogICAgIExheW91dFNpemUgaW1hZ2VTaXplRm9yUmVuZGVyZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgPSBVc2VkU2l6
ZSk7IC8vIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGltYWdlLgogICAgIHZvaWQg
Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3Ro
JiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pOwogCisgICAgdmly
dHVhbCBib29sIGlzTWFudWFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHN0YXRp
YyB2b2lkIHJlc3VtZUFuaW1hdGluZ0ltYWdlc0ZvckxvYWRlcihDYWNoZWRSZXNvdXJjZUxvYWRl
ciopOwogCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCkBAIC0xNDMsNiArMTQ2LDE5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7CiB9OwogCisvLyBG
SVhNRTogV2Ugc2hvdWxkIGxvb2sgdG8gaW5jb3Jwb3JhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yg
Q2FjaGVkSW1hZ2VNYW51YWwKKy8vIGludG8gQ2FjaGVkSW1hZ2Ugb3IgZmluZCBhIGJldHRlciBw
bGFjZSBmb3IgdGhpcyBjbGFzcy4KK2NsYXNzIENhY2hlZEltYWdlTWFudWFsIDogcHVibGljIENh
Y2hlZEltYWdlIHsKK3B1YmxpYzoKKyAgICBDYWNoZWRJbWFnZU1hbnVhbChjb25zdCBVUkwmLCBJ
bWFnZSopOworICAgIHZvaWQgYWRkRmFrZUNsaWVudCgpIHsgYWRkQ2xpZW50KG1fZmFrZUNsaWVu
dC5nZXQoKSk7IH0KKyAgICB2b2lkIHJlbW92ZUZha2VDbGllbnQoKSB7IHJlbW92ZUNsaWVudCht
X2Zha2VDbGllbnQuZ2V0KCkpOyB9CisgICAgdmlydHVhbCBib29sIGlzTWFudWFsKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBtdXN0UmV2YWxpZGF0
ZUR1ZVRvQ2FjaGVIZWFkZXJzKENhY2hlUG9saWN5KSBjb25zdDsKK3ByaXZhdGU6CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhY2hlZFJlc291cmNlQ2xpZW50PiBtX2Zha2VDbGllbnQ7Cit9OworCiB9
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHAKaW5kZXggZTUzYmFjNWY2ZmU0YWU1ODA3NjhjMmFkOWZkMGFjMGQwZDVkMGRiMi4uMDk0
ZTczMjczZDAzZWY0ZWFmMWQ0YWQzZTIyMzZiM2NjZDYzYjQzMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCkBAIC01NCw2ICs1NCwxMCBAQAog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
KyNpZiBVU0UoUVVJQ0tfTE9PSykKKyNpbmNsdWRlICJRdWlja0xvb2suaCIKKyNlbmRpZgorCiB1
c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMDYsNiArMzEw
LDE2IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBSZXNvCiAgICAgbV9vcHRpb25zID0gb3B0aW9uczsK
ICAgICBtX2xvYWRpbmcgPSB0cnVlOwogCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgaWYgKCFt
X3Jlc291cmNlUmVxdWVzdC5pc051bGwoKSAmJiBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5wcm90
b2NvbElzKFFMUHJldmlld1Byb3RvY29sKCkpKSB7CisgICAgICAgIC8vIFdoZW4gUXVpY2tMb29r
IGlzIGludm9rZWQgdG8gY29udmVydCBhIGRvY3VtZW50LCBpdCByZXR1cm5zIGEgdW5pcXVlIFVS
TCBpbiB0aGUKKyAgICAgICAgLy8gTlNVUkxSZXBvbnNlIGZvciB0aGUgbWFpbiBkb2N1bWVudC4g
VG8gbWFrZSBzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFuZFJlc291cmNlVVJMKCkKKyAgICAgICAg
Ly8gd29yaywgd2UgbmVlZCB0byB1c2UgdGhlIFFMIFVSTCBub3QgdGhlIG9yaWdpbmFsIFVSTC4K
KyAgICAgICAgY29uc3QgVVJMJiBkb2N1bWVudFVSTCA9IGNhY2hlZFJlc291cmNlTG9hZGVyLT5m
cmFtZSgpID8gY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCktPnJlc3BvbnNlKCkudXJsKCkgOiBjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1l
bnQoKS0+dXJsKCk7CisgICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldFVSTChzYWZlUUxVUkxG
b3JEb2N1bWVudFVSTEFuZFJlc291cmNlVVJMKGRvY3VtZW50VVJMLCB1cmwoKSkpOworICAgIH0K
KyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBpZiAobV9yZXNvdXJjZVJl
cXVlc3QudGFyZ2V0VHlwZSgpID09IFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNVbnNwZWNpZmll
ZCkKICAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0VGFyZ2V0VHlwZShjYWNoZWRSZXNvdXJj
ZVR5cGVUb1RhcmdldFR5cGUodHlwZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5oCmluZGV4IDQwNzE5YmEyMWM2ZTc3NjdmNGQ1ZTZmNDJjNWFmZjRm
ZjIxNDhhMzguLmZiNGY1YjI0ODE4ZWU0ODQ3YjEzMmU4ZDdkMjdhYzc1ZTg3NDIyYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCkBAIC0yMjgsNyAr
MjI4LDkgQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJj
ZUhhbmRsZUJhc2UqIGgpOwogICAgIAogICAgIGJvb2wgY2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBj
b25zdDsKLSAgICBib29sIG11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhlYWRlcnMoQ2FjaGVQb2xp
Y3kpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIG11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhl
YWRlcnMoQ2FjaGVQb2xpY3kpIGNvbnN0OworCiAgICAgYm9vbCBpc0NhY2hlVmFsaWRhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQogICAgIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZVRvUmV2YWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1Jl
dmFsaWRhdGU7IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDlmOWU0NTdmNGY3OWQ0MjJmMzQ4M2JiZThj
MzRkNGI2YWI0Yjc3MTIuLjIwODlmM2Y2MzY3NDUyMDBhZTgzNzdiZDgxOWFhYTEwMzY0MDZhNTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcApAQCAtNzQxLDcgKzc0MSw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgY29uc3QKICAg
ICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS0+dXJsKCkpOwogfQogCi12b2lk
IENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkRG9uZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Up
Cit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkRG9uZShDYWNoZWRSZXNvdXJjZSogcmVz
b3VyY2UsIGJvb2wgc2hvdWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucykKIHsKICAgICBSZWZQdHI8
RG9jdW1lbnRMb2FkZXI+IHByb3RlY3REb2N1bWVudExvYWRlcihtX2RvY3VtZW50TG9hZGVyKTsK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3REb2N1bWVudChtX2RvY3VtZW50KTsKQEAgLTc2
Niw3ICs3NjYsOSBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkRG9uZShDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UpCiAKICAgICBpZiAoZnJhbWUoKSkKICAgICAgICAgZnJhbWUoKS0+
bG9hZGVyKCkubG9hZERvbmUoKTsKLSAgICBwZXJmb3JtUG9zdExvYWRBY3Rpb25zKCk7CisKKyAg
ICBpZiAoc2hvdWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucykKKyAgICAgICAgcGVyZm9ybVBvc3RM
b2FkQWN0aW9ucygpOwogCiAgICAgaWYgKCFtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJj
ZXNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNv
dXJjZXNUaW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC04MjYsMjEgKzgyOCwyMCBAQCB2b2lkIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpkZWNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVz
b3VyY2UqIHJlcykKIAogdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZChDYWNoZWRS
ZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCkKIHsKLSAgICBib29sIGRlbGF5U3VicmVzb3VyY2VMb2FkID0gdHJ1
ZTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgZGVsYXlTdWJyZXNvdXJjZUxvYWQgPSBmYWxzZTsK
LSNlbmRpZgotICAgIGlmIChkZWxheVN1YnJlc291cmNlTG9hZCkgewotICAgICAgICBib29sIGhh
c1JlbmRlcmluZyA9IG1fZG9jdW1lbnQtPmJvZHkoKSAmJiBtX2RvY3VtZW50LT5ib2R5KCktPnJl
bmRlcmVyKCk7Ci0gICAgICAgIGJvb2wgY2FuQmxvY2tQYXJzZXIgPSB0eXBlID09IENhY2hlZFJl
c291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDsK
LSAgICAgICAgaWYgKCFoYXNSZW5kZXJpbmcgJiYgIWNhbkJsb2NrUGFyc2VyKSB7Ci0gICAgICAg
ICAgICAvLyBEb24ndCBwcmVsb2FkIHN1YnJlc291cmNlcyB0aGF0IGNhbid0IGJsb2NrIHRoZSBw
YXJzZXIgYmVmb3JlIHdlIGhhdmUgc29tZXRoaW5nIHRvIGRyYXcuCi0gICAgICAgICAgICAvLyBU
aGlzIGhlbHBzIHByZXZlbnQgcHJlbG9hZHMgZnJvbSBkZWxheWluZyBmaXJzdCBkaXNwbGF5IHdo
ZW4gYmFuZHdpZHRoIGlzIGxpbWl0ZWQuCi0gICAgICAgICAgICBQZW5kaW5nUHJlbG9hZCBwZW5k
aW5nUHJlbG9hZCA9IHsgdHlwZSwgcmVxdWVzdCwgY2hhcnNldCB9OwotICAgICAgICAgICAgbV9w
ZW5kaW5nUHJlbG9hZHMuYXBwZW5kKHBlbmRpbmdQcmVsb2FkKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgIC8vIFdlIGFsd2F5cyBwcmVsb2FkIHJlc291cmNlcyBvbiBpT1Mu
IFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjc2Pi4KKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBhIHNldHRpbmcgdG8gdG9nZ2xl
IGFnZ3Jlc3NpdmUgcHJlbG9hZGluZyBiZWhhdmlvciBhcyBvcHBvc2VkCisgICAgLy8gdG8gbWFr
aW5nIHRoaXMgYmVoYXZpb3Igc3BlY2lmaWMgdG8gaU9TLgorI2lmICFQTEFURk9STShJT1MpCisg
ICAgYm9vbCBoYXNSZW5kZXJpbmcgPSBtX2RvY3VtZW50LT5ib2R5KCkgJiYgbV9kb2N1bWVudC0+
Ym9keSgpLT5yZW5kZXJlcigpOworICAgIGJvb2wgY2FuQmxvY2tQYXJzZXIgPSB0eXBlID09IENh
Y2hlZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldDsKKyAgICBpZiAoIWhhc1JlbmRlcmluZyAmJiAhY2FuQmxvY2tQYXJzZXIpIHsKKyAgICAg
ICAgLy8gRG9uJ3QgcHJlbG9hZCBzdWJyZXNvdXJjZXMgdGhhdCBjYW4ndCBibG9jayB0aGUgcGFy
c2VyIGJlZm9yZSB3ZSBoYXZlIHNvbWV0aGluZyB0byBkcmF3LgorICAgICAgICAvLyBUaGlzIGhl
bHBzIHByZXZlbnQgcHJlbG9hZHMgZnJvbSBkZWxheWluZyBmaXJzdCBkaXNwbGF5IHdoZW4gYmFu
ZHdpZHRoIGlzIGxpbWl0ZWQuCisgICAgICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVsb2Fk
ID0geyB0eXBlLCByZXF1ZXN0LCBjaGFyc2V0IH07CisgICAgICAgIG1fcGVuZGluZ1ByZWxvYWRz
LmFwcGVuZChwZW5kaW5nUHJlbG9hZCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisjZW5kaWYK
ICAgICByZXF1ZXN0UHJlbG9hZCh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0KTsKIH0KIApAQCAtODQ4
LDYgKzg0OSwxMiBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0ZvclBlbmRpbmdQ
cmVsb2FkcygpCiB7CiAgICAgaWYgKG1fcGVuZGluZ1ByZWxvYWRzLmlzRW1wdHkoKSB8fCAhbV9k
b2N1bWVudC0+Ym9keSgpIHx8ICFtX2RvY3VtZW50LT5ib2R5KCktPnJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybjsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gV2UgYWx3YXlzIHByZWxvYWQg
cmVzb3VyY2VzIG9uIGlPUy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTEyNzY+LgorICAgIC8vIFNvLCB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbnkgcGVuZGlu
ZyBwcmVsb2Fkcy4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgdG8gYXZvaWQgY29tcGls
aW5nIHRoaXMgY29kZSBlbnRpcmVseSB3aGVuIGJ1aWxkaW5nIGZvciBpT1MuCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisjZW5kaWYKICAgICB3aGlsZSAoIW1fcGVuZGluZ1ByZWxvYWRzLmlz
RW1wdHkoKSkgewogICAgICAgICBQZW5kaW5nUHJlbG9hZCBwcmVsb2FkID0gbV9wZW5kaW5nUHJl
bG9hZHMudGFrZUZpcnN0KCk7CiAgICAgICAgIC8vIERvbid0IHJlcXVlc3QgcHJlbG9hZCBpZiB0
aGUgcmVzb3VyY2UgYWxyZWFkeSBsb2FkZWQgbm9ybWFsbHkgKHRoaXMgd2lsbCByZXN1bHQgaW4g
ZG91YmxlIGxvYWQgaWYgdGhlIHBhZ2UgaXMgYmVpbmcgcmVsb2FkZWQgd2l0aCBjYWNoZWQgcmVz
dWx0cyBpZ25vcmVkKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmgKaW5kZXggMTljOTcwYThkZmM4ZWYwNmY3NjYzZTQ2NTYzMmFlNDEx
ZTJmMWQ3ZC4uMzlhMGEyNTFlNDA3Mjg1ZjNmMDQ0NzEwM2VhZDQ5Yjk0OGVjMTE0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgK
QEAgLTEyMCw3ICsxMjAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckRvY3VtZW50TG9hZGVy
KCkgeyBtX2RvY3VtZW50TG9hZGVyID0gMDsgfQogCiAgICAgdm9pZCByZW1vdmVDYWNoZWRSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZSopIGNvbnN0OwotICAgIHZvaWQgbG9hZERvbmUoQ2FjaGVkUmVz
b3VyY2UqKTsKKworICAgIHZvaWQgbG9hZERvbmUoQ2FjaGVkUmVzb3VyY2UqLCBib29sIHNob3Vs
ZFBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMgPSB0cnVlKTsKKwogICAgIHZvaWQgZ2FyYmFnZUNvbGxl
Y3REb2N1bWVudFJlc291cmNlcygpOwogICAgIAogICAgIHZvaWQgaW5jcmVtZW50UmVxdWVzdENv
dW50KGNvbnN0IENhY2hlZFJlc291cmNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L01lbW9yeUNhY2hlLmNwcAppbmRleCA1MDZmNjQxNGViODRlM2FmNDcyOTRmMTkyNGUyZDE4ZTVm
NDg2NGRkLi45MmMyNThmYmE1M2I2MjViZGMzZDE5MzQ0NDEwN2Q2YzczNjE3NzM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKQEAgLTIzLDYgKzIzLDgg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogCisjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKQEAgLTU5LDcgKzYxLDExIEBAIHN0YXRpYyBjb25z
dCBkb3VibGUgY0RlZmF1bHREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSAwOwogTWVtb3J5
Q2FjaGUqIG1lbW9yeUNhY2hlKCkKIHsKICAgICBzdGF0aWMgTWVtb3J5Q2FjaGUqIHN0YXRpY0Nh
Y2hlID0gbmV3IE1lbW9yeUNhY2hlOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NFUlQoV2Vi
VGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworI2Vsc2UKICAgICBBU1NFUlQoV1RGOjppc01h
aW5UaHJlYWQoKSk7CisjZW5kaWYKIAogICAgIHJldHVybiBzdGF0aWNDYWNoZTsKIH0KQEAgLTk2
LDcgKzEwMiwxMSBAQCBib29sIE1lbW9yeUNhY2hlOjphZGQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlKQogICAgIGlmIChkaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsK
KyNlbHNlCiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworI2VuZGlmCiAKICNpZiBF
TkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIENhY2hlZFJlc291cmNlSXRlbSogb3JpZ2lu
TWFwID0gbV9yZXNvdXJjZXMuZ2V0KHJlc291cmNlLT51cmwoKSk7CkBAIC0xNjAsNyArMTcwLDEx
IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWRSZXNvdXJj
ZSogcmV2YWxpZGF0aW5nUmVzb3VyY2UsIGNvCiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRh
dGlvbkZhaWxlZChDYWNoZWRSZXNvdXJjZSogcmV2YWxpZGF0aW5nUmVzb3VyY2UpCiB7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7
CisjZWxzZQogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyNlbmRpZgogICAgIExP
RyhSZXNvdXJjZUxvYWRpbmcsICJSZXZhbGlkYXRpb24gZmFpbGVkIGZvciAlcCIsIHJldmFsaWRh
dGluZ1Jlc291cmNlKTsKICAgICBBU1NFUlQocmV2YWxpZGF0aW5nUmVzb3VyY2UtPnJlc291cmNl
VG9SZXZhbGlkYXRlKCkpOwogICAgIHJldmFsaWRhdGluZ1Jlc291cmNlLT5jbGVhclJlc291cmNl
VG9SZXZhbGlkYXRlKCk7CkBAIC0xNzMsNyArMTg3LDExIEBAIENhY2hlZFJlc291cmNlKiBNZW1v
cnlDYWNoZTo6cmVzb3VyY2VGb3JVUkwoY29uc3QgVVJMJiByZXNvdXJjZVVSTCkKIAogQ2FjaGVk
UmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NFUlQoV2ViVGhy
ZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworI2Vsc2UKICAgICBBU1NFUlQoV1RGOjppc01haW5U
aHJlYWQoKSk7CisjZW5kaWYKICAgICBVUkwgdXJsID0gcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVy
SWZOZWVkZWQocmVxdWVzdC51cmwoKSk7CiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykK
ICAgICBDYWNoZWRSZXNvdXJjZUl0ZW0qIGl0ZW0gPSBtX3Jlc291cmNlcy5nZXQodXJsKTsKQEAg
LTIxMCwxOCArMjI4LDY4IEBAIHVuc2lnbmVkIE1lbW9yeUNhY2hlOjpsaXZlQ2FwYWNpdHkoKSBj
b25zdAogICAgIHJldHVybiBtX2NhcGFjaXR5IC0gZGVhZENhcGFjaXR5KCk7CiB9CiAKLXZvaWQg
TWVtb3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlcygpCitib29sIE1lbW9yeUNhY2hlOjphZGRJ
bWFnZVRvQ2FjaGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNhY2hlUGFydGl0aW9uKQoreworICAgIEFTU0VSVChpbWFnZSk7CisgICAgcmVtb3Zl
SW1hZ2VGcm9tQ2FjaGUodXJsLCBjYWNoZVBhcnRpdGlvbik7IC8vIFJlbW92ZSBjYWNoZSBlbnRy
eSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4KKworICAgIFJlZlB0cjxCaXRtYXBJbWFnZT4gYml0bWFw
SW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGltYWdlLCBudWxscHRyKTsKKyAgICBpZiAoIWJp
dG1hcEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDYWNoZWRJbWFnZU1hbnVh
bCogY2FjaGVkSW1hZ2UgPSBuZXcgQ2FjaGVkSW1hZ2VNYW51YWwodXJsLCBiaXRtYXBJbWFnZS5n
ZXQoKSk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gQWN0dWFsIHJlbGVhc2Ugb2YgdGhlIENHSW1hZ2VSZWYgaXMgZG9uZSBpbiBCaXRtYXBJ
bWFnZS4KKyAgICBDRlJldGFpbihpbWFnZSk7CisgICAgY2FjaGVkSW1hZ2UtPmFkZEZha2VDbGll
bnQoKTsKKyAgICBjYWNoZWRJbWFnZS0+c2V0RGVjb2RlZFNpemUoYml0bWFwSW1hZ2UtPmRlY29k
ZWRTaXplKCkpOworICAgIGNhY2hlZEltYWdlLT5yZXNvdXJjZVJlcXVlc3QoKS5zZXRDYWNoZVBh
cnRpdGlvbihjYWNoZVBhcnRpdGlvbik7CisgICAgYWRkKGNhY2hlZEltYWdlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlSW1hZ2VGcm9tQ2FjaGUoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24pCit7CisjaWYgRU5BQkxF
KENBQ0hFX1BBUlRJVElPTklORykKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2U7CisgICAg
aWYgKENhY2hlZFJlc291cmNlSXRlbSogaXRlbSA9IG1fcmVzb3VyY2VzLmdldCh1cmwpKQorICAg
ICAgICByZXNvdXJjZSA9IGl0ZW0tPmdldChSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUo
Y2FjaGVQYXJ0aXRpb24pKTsKKyAgICBlbHNlCisgICAgICAgIHJlc291cmNlID0gbnVsbHB0cjsK
KyNlbHNlCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KHVy
bCk7CisjZW5kaWYKKyAgICBpZiAoIXJlc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBBIHJlc291cmNlIGV4aXN0cyBhbmQgaXMgbm90IGEgbWFudWFsbHkgY2FjaGVkIGltYWdlLCBz
byBqdXN0IHJlbW92ZSBpdC4KKyAgICBpZiAoIXJlc291cmNlLT5pc0ltYWdlKCkgfHwgIXN0YXRp
Y19jYXN0PENhY2hlZEltYWdlKj4ocmVzb3VyY2UpLT5pc01hbnVhbCgpKSB7CisgICAgICAgIGV2
aWN0KHJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlbW92aW5n
IHRoZSBsYXN0IGNsaWVudCBvZiBhIENhY2hlZEltYWdlIHR1cm5zIHRoZSByZXNvdXJjZQorICAg
IC8vIGludG8gYSBkZWFkIHJlc291cmNlIHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSBldmljdGVk
IHdoZW4KKyAgICAvLyBkZWFkIHJlc291cmNlcyBhcmUgcHJ1bmVkLiBUaGF0IG1pZ2h0IGJlIGlt
bWVkaWF0ZWx5IHNpbmNlCisgICAgLy8gcmVtb3ZpbmcgdGhlIGxhc3QgY2xpZW50IHRyaWdnZXJz
IGEgTWVtb3J5Q2FjaGU6OnBydW5lLCBzbyB0aGUKKyAgICAvLyByZXNvdXJjZSBtYXkgYmUgZGVs
ZXRlZCBhZnRlciB0aGlzIGNhbGwuCisgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2VNYW51YWwq
PihyZXNvdXJjZSktPnJlbW92ZUZha2VDbGllbnQoKTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6
cHJ1bmVMaXZlUmVzb3VyY2VzKGJvb2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2
ZVJlc291cmNlcykKIHsKICAgICBpZiAoIW1fcHJ1bmVFbmFibGVkKQogICAgICAgICByZXR1cm47
CiAKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IGxpdmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVk
IGNhcGFjaXR5ID0gc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyA/
IDAgOiBsaXZlQ2FwYWNpdHkoKTsKICAgICBpZiAoY2FwYWNpdHkgJiYgbV9saXZlU2l6ZSA8PSBj
YXBhY2l0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNUYXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAv
LyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4u
CiAKLSAgICBwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUodGFyZ2V0U2l6ZSk7CisgICAgcHJ1bmVM
aXZlUmVzb3VyY2VzVG9TaXplKHRhcmdldFNpemUsIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZv
ckFsbExpdmVSZXNvdXJjZXMpOwogfQogCiB2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNv
dXJjZXNUb1BlcmNlbnRhZ2UoZmxvYXQgcHJ1bmVQZXJjZW50YWdlKQpAQCAtMjM4LDcgKzMwNiw3
IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlc1RvUGVyY2VudGFnZShmbG9h
dCBwcnVuZVBlcmNlbnRhZ2UpCiAgICAgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHRhcmdldFNp
emUpOwogfQogCi12b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUodW5z
aWduZWQgdGFyZ2V0U2l6ZSkKK3ZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlc1Rv
U2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplLCBib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZv
ckFsbExpdmVSZXNvdXJjZXMpCiB7CiAgICAgaWYgKG1faW5QcnVuZVJlc291cmNlcykKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjYzLDcgKzMzMSw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lTGl2
ZVJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKQogICAgICAgICBpZiAoY3VycmVu
dC0+aXNMb2FkZWQoKSAmJiBjdXJyZW50LT5kZWNvZGVkU2l6ZSgpKSB7CiAgICAgICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhlIHJlbWFpbmluZyByZXNvdXJjZXMgYXJlIHRvbyBuZXcgdG8g
cHJ1bmUuCiAgICAgICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSAtIGN1
cnJlbnQtPm1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOwotICAgICAgICAgICAgaWYgKGVsYXBzZWRU
aW1lIDwgY01pbkRlbGF5QmVmb3JlTGl2ZURlY29kZWRQcnVuZSkKKyAgICAgICAgICAgIGlmICgh
c2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyAmJiBlbGFwc2VkVGlt
ZSA8IGNNaW5EZWxheUJlZm9yZUxpdmVEZWNvZGVkUHJ1bmUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgICAgICBpZiAoY3VycmVudC0+ZGVjb2RlZERhdGFJc1B1cmdlYWJsZSgp
KSB7CkBAIC00NTksNyArNTI3LDExIEBAIGJvb2wgTWVtb3J5Q2FjaGU6Om1ha2VSZXNvdXJjZVB1
cmdlYWJsZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiAKIHZvaWQgTWVtb3J5Q2FjaGU6OmV2
aWN0KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
QVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKyNlbHNlCiAgICAgQVNTRVJU
KFdURjo6aXNNYWluVGhyZWFkKCkpOworI2VuZGlmCiAgICAgTE9HKFJlc291cmNlTG9hZGluZywg
IkV2aWN0aW5nIHJlc291cmNlICVwIGZvciAnJXMnIGZyb20gY2FjaGUiLCByZXNvdXJjZSwgcmVz
b3VyY2UtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAgICAgLy8gVGhlIHJlc291
cmNlIG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGJ5IHNvbWVvbmUgb3RoZXIgdGhhbiBv
dXIgY2FsbGVyLAogICAgIC8vIHdobyBuZWVkZWQgYSBmcmVzaCBjb3B5IGZvciBhIHJlbG9hZC4g
U2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ3OSNjNj4uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCmluZGV4IDNmOGI2MTZiMTlm
MmYwY2YyNmVkYTVjMDNlNmJhYmU1NGM2NjgwNGEuLjM3MDdiZjg0ZWRhNGRmY2M2NzRjM2QwMDAy
OTQzODBmNzEzNGEyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9N
ZW1vcnlDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIENhY2hlX2gKICNkZWZpbmUgQ2FjaGVfaAog
CisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhh
c2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0xODcsMTAgKzE4OCwyMyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGl2ZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2xpdmVTaXplOyB9CiAgICAgdW5zaWduZWQgZGVhZFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2RlYWRTaXplOyB9CiAKKyAgICBib29sIGFkZEltYWdlVG9DYWNoZShOYXRp
dmVJbWFnZVB0ciwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBjYWNoZVBhcnRpdGlvbik7Cisg
ICAgdm9pZCByZW1vdmVJbWFnZUZyb21DYWNoZShjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIGNh
Y2hlUGFydGl0aW9uKTsKKworICAgIC8vIHBydW5lRGVhZCooKSAtIEZsdXNoIGRlY29kZWQgYW5k
IGVuY29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBub3QgcmVmZXJlbmNlZCBieSBXZWIgcGFnZXMu
CisgICAgLy8gcHJ1bmVMaXZlKigpIC0gRmx1c2ggZGVjb2RlZCBkYXRhIGZyb20gcmVzb3VyY2Vz
IHN0aWxsIHJlZmVyZW5jZWQgYnkgV2ViIHBhZ2VzLgorICAgIHZvaWQgcHJ1bmVEZWFkUmVzb3Vy
Y2VzKCk7IC8vIEF1dG9tYXRpY2FsbHkgZGVjaWRlIGhvdyBtdWNoIHRvIHBydW5lLgorICAgIHZv
aWQgcHJ1bmVMaXZlUmVzb3VyY2VzKGJvb2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxs
TGl2ZVJlc291cmNlcyA9IGZhbHNlKTsKKwogcHJpdmF0ZToKKyAgICB2b2lkIHBydW5lRGVhZFJl
c291cmNlc1RvUGVyY2VudGFnZShmbG9hdCBwcnVuZVBlcmNlbnRhZ2UpOyAvLyBQcnVuZSB0byAl
IGN1cnJlbnQgc2l6ZQorICAgIHZvaWQgcHJ1bmVMaXZlUmVzb3VyY2VzVG9QZXJjZW50YWdlKGZs
b2F0IHBydW5lUGVyY2VudGFnZSk7CisgICAgdm9pZCBwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUo
dW5zaWduZWQgdGFyZ2V0U2l6ZSk7CisgICAgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUo
dW5zaWduZWQgdGFyZ2V0U2l6ZSwgYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxM
aXZlUmVzb3VyY2VzID0gZmFsc2UpOworCiAgICAgTWVtb3J5Q2FjaGUoKTsKICAgICB+TWVtb3J5
Q2FjaGUoKTsgLy8gTm90IGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRh
bGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgot
ICAgICAgIAorCiAgICAgTFJVTGlzdCogbHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSopOwogI2lm
bmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXBTdGF0cygpOwpAQCAtMjAwLDE1ICsyMTQsNiBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIGxpdmVDYXBhY2l0eSgpIGNvbnN0OwogICAgIHVuc2lnbmVk
IGRlYWRDYXBhY2l0eSgpIGNvbnN0OwogCi0gICAgLy8gcHJ1bmVEZWFkKigpIC0gRmx1c2ggZGVj
b2RlZCBhbmQgZW5jb2RlZCBkYXRhIGZyb20gcmVzb3VyY2VzIG5vdCByZWZlcmVuY2VkIGJ5IFdl
YiBwYWdlcy4KLSAgICAvLyBwcnVuZUxpdmUqKCkgLSBGbHVzaCBkZWNvZGVkIGRhdGEgZnJvbSBy
ZXNvdXJjZXMgc3RpbGwgcmVmZXJlbmNlZCBieSBXZWIgcGFnZXMuCi0gICAgdm9pZCBwcnVuZURl
YWRSZXNvdXJjZXMoKTsgLy8gQXV0b21hdGljYWxseSBkZWNpZGUgaG93IG11Y2ggdG8gcHJ1bmUu
Ci0gICAgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHBydW5lRGVhZFJlc291
cmNlc1RvUGVyY2VudGFnZShmbG9hdCBwcnVuZVBlcmNlbnRhZ2UpOyAvLyBQcnVuZSB0byAlIGN1
cnJlbnQgc2l6ZQotICAgIHZvaWQgcHJ1bmVMaXZlUmVzb3VyY2VzVG9QZXJjZW50YWdlKGZsb2F0
IHBydW5lUGVyY2VudGFnZSk7Ci0gICAgdm9pZCBwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUodW5z
aWduZWQgdGFyZ2V0U2l6ZSk7Ci0gICAgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUodW5z
aWduZWQgdGFyZ2V0U2l6ZSk7Ci0KICAgICBib29sIG1ha2VSZXNvdXJjZVB1cmdlYWJsZShDYWNo
ZWRSZXNvdXJjZSopOwogICAgIHZvaWQgZXZpY3QoQ2FjaGVkUmVzb3VyY2UqKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NmL1N1YnJlc291cmNlTG9hZGVyQ0YuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NmL1N1YnJlc291cmNlTG9hZGVyQ0YuY3BwCmluZGV4IDI5
ZmQ5ZjJkOWIxYTg1NmYwYmJhY2EyODc0YjdkZDljYmU0ZDRjZDEuLjU3Njc2MDRhZWQ1MzllYzk5
ZTE4MGQ1OTdkZTllOTg3Y2QzZWY4OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jZi9TdWJyZXNvdXJjZUxvYWRlckNGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2YvU3VicmVzb3VyY2VMb2FkZXJDRi5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgogCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTMyLDggKzMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVTRShORVRXT1JL
X0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpCiB7Ci0gICAgLy8gUmVmZXJlbmNlIHRo
ZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBj
YW4gZG8KLSAgICAvLyBhbnl0aGluZyBpbmNsdWRpbmcgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJl
bmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCisgICAg
Ly8gUmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9u
YWwgcHJvY2Vzc2luZyBjYW4gZG8gYW55dGhpbmcgaW5jbHVkaW5nCisgICAgLy8gcmVtb3Zpbmcg
dGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlz
IDxyZGFyOi8vcHJvYmxlbS8zMjY2MjE2Pi4KICAgICBSZWY8U3VicmVzb3VyY2VMb2FkZXI+IHBy
b3RlY3QoKnRoaXMpOwogCiAgICAgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXko
ZGF0YUFycmF5KTsKQEAgLTQ2LDggKzQ3LDE5IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRp
ZFJlY2VpdmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpCiAgICAgaWYgKCFtX2xvYWRp
bmdNdWx0aXBhcnRDb250ZW50KSB7CiAgICAgICAgIENGSW5kZXggYXJyYXlDb3VudCA9IENGQXJy
YXlHZXRDb3VudChkYXRhQXJyYXkpOwogICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBh
cnJheUNvdW50OyArK2kpICB7Ci0gICAgICAgICAgICBDRkRhdGFSZWYgZGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZEYXRhUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGRhdGFBcnJheSwgaSkp
OwotICAgICAgICAgICAgc2VuZERhdGFUb1Jlc291cmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhciAqPihDRkRhdGFHZXRCeXRlUHRyKGRhdGEpKSwgc3RhdGljX2Nhc3Q8aW50PihDRkRhdGFH
ZXRMZW5ndGgoZGF0YSkpKTsKKyAgICAgICAgICAgIC8vIEEgcHJldmlvdXMgaXRlcmF0aW9uIG9m
IHRoaXMgbG9vcCBtaWdodCBoYXZlIHJlc3VsdGVkIGluIHRoZSBsb2FkCisgICAgICAgICAgICAv
LyBiZWluZyBjYW5jZWxsZWQuIEJhaWwgb3V0IGlmIHdlIG5vIGxvbmdlciBoYXZlIGEgY2FjaGVk
IHJlc291cmNlLgorICAgICAgICAgICAgaWYgKCFtX3Jlc291cmNlKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChSZXNvdXJjZUJ1ZmZlciogcmVzb3VyY2VEYXRhID0g
dGhpcy0+cmVzb3VyY2VEYXRhKCkpCisgICAgICAgICAgICAgICAgbV9yZXNvdXJjZS0+YWRkRGF0
YUJ1ZmZlcihyZXNvdXJjZURhdGEpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGRhdGFBcnJheSwgaSkpOworICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4oQ0ZEYXRhR2V0Qnl0ZVB0
cihjZkRhdGEpKTsKKyAgICAgICAgICAgICAgICBDRkluZGV4IGxlbmd0aCA9IENGRGF0YUdldExl
bmd0aChjZkRhdGEpOworICAgICAgICAgICAgICAgIEFTU0VSVChsZW5ndGggPD0gc3RkOjpudW1l
cmljX2xpbWl0czxDRkluZGV4Pjo6bWF4KCkpOworICAgICAgICAgICAgICAgIG1fcmVzb3VyY2Ut
PmFkZERhdGEoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL21hYy9Eb2N1bWVudExvYWRlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFj
L0RvY3VtZW50TG9hZGVyTWFjLmNwcAppbmRleCA5MWRkYTZlZjhjYjIyODAyOWZkMzQyNzVlMzli
YTRkMjFmNTJlZjg2Li45NWFmNzkwNjc0MmQ4N2RkYzYwZWRmZWU5YjMxNjcxZDA4MTNmOTZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL0RvY3VtZW50TG9hZGVyTWFjLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL0RvY3VtZW50TG9hZGVyTWFjLmNwcApA
QCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRl
IDx3dGYvU2NoZWR1bGVQYWlyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFU
Rk9STShJT1MpCiBzdGF0aWMgdm9pZCBzY2hlZHVsZUFsbChjb25zdCBSZXNvdXJjZUxvYWRlclNl
dCYgbG9hZGVycywgU2NoZWR1bGVQYWlyKiBwYWlyKQogewogICAgIGNvbnN0IFJlc291cmNlTG9h
ZGVyU2V0IGNvcHkgPSBsb2FkZXJzOwpAQCAtNTAsMjMgKzUyLDMyIEBAIHN0YXRpYyB2b2lkIHVu
c2NoZWR1bGVBbGwoY29uc3QgUmVzb3VyY2VMb2FkZXJTZXQmIGxvYWRlcnMsIFNjaGVkdWxlUGFp
ciogcGFpcikKICAgICAgICAgaWYgKFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSAoKml0KS0+aGFu
ZGxlKCkpCiAgICAgICAgICAgICBoYW5kbGUtPnVuc2NoZWR1bGUocGFpcik7CiB9CisjZW5kaWYK
IAogdm9pZCBEb2N1bWVudExvYWRlcjo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQogewor
I2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1haW5SZXNvdXJjZUxvYWRlcigpICYmIG1haW5S
ZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUoKSkKICAgICAgICAgbWFpblJlc291cmNlTG9hZGVyKCkt
PmhhbmRsZSgpLT5zY2hlZHVsZShwYWlyKTsKICAgICBzY2hlZHVsZUFsbChtX3N1YnJlc291cmNl
TG9hZGVycywgcGFpcik7CiAgICAgc2NoZWR1bGVBbGwobV9wbHVnSW5TdHJlYW1Mb2FkZXJzLCBw
YWlyKTsKICAgICBzY2hlZHVsZUFsbChtX211bHRpcGFydFN1YnJlc291cmNlTG9hZGVycywgcGFp
cik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWlyKTsKKyNlbmRpZgogfQogCiB2b2lkIERv
Y3VtZW50TG9hZGVyOjp1bnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikKIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIGlmIChtYWluUmVzb3VyY2VMb2FkZXIoKSAmJiBtYWluUmVzb3VyY2VM
b2FkZXIoKS0+aGFuZGxlKCkpCiAgICAgICAgIG1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUo
KS0+dW5zY2hlZHVsZShwYWlyKTsKICAgICB1bnNjaGVkdWxlQWxsKG1fc3VicmVzb3VyY2VMb2Fk
ZXJzLCBwYWlyKTsKICAgICB1bnNjaGVkdWxlQWxsKG1fcGx1Z0luU3RyZWFtTG9hZGVycywgcGFp
cik7CiAgICAgdW5zY2hlZHVsZUFsbChtX211bHRpcGFydFN1YnJlc291cmNlTG9hZGVycywgcGFp
cik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWlyKTsKKyNlbmRpZgogfQogCiB9IC8vIG5h
bWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmgKaW5kZXggZjk2MjNlYzAwNmI3YWMxM2JmNzgwNWIxMzZlYzMyMTE4OWI4OGUyOC4uZTM3Zjc5
NTY2NDAwZDhkZjJhNDMxMmNhYWEyNjZiMTI4YWIyMDlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0xMjUsNiArMTI1LDggQEAgcHVi
bGljOgogICAgIEludFNpemUgY3VycmVudEZyYW1lU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBnZXRIb3RTcG90KEludFBvaW50JikgY29uc3QgT1ZFUlJJREU7CiAKKyAgICB1bnNpZ25l
ZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KKwogICAgIHZp
cnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBPVkVSUklERTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219475</attachid>
            <date>2013-12-17 16:51:37 -0800</date>
            <delta_ts>2013-12-17 17:19:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125879-20131217165136.patch</filename>
            <type>text/plain</type>
            <size>105694</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY3NzBmN2U0MzgyMjFh
MDMzMmRlYmJhZTYwMjU1NTFiNDZjNzRiZC4uYWU0ZjlhODY5ZjkzMGFhYjMzZjRjZDQxZTA4YTM1
MjY5YjY1OWU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAxMy0xMi0xNyAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVXBzdHJlYW0g
V2ViQ29yZS9sb2FkZXIgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI1ODc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgc3ltYm9scyBfX1pON1dlYkNv
cmUxMU1lbW9yeUNhY2hlMTVhZGRJbWFnZVRvQ2FjaGVFUDdDR0ltYWdlUktOU18zVVJMRVJLTjNX
VEY2U3RyaW5nRQorICAgICAgICBhbmQgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTIwcmVtb3Zl
SW1hZ2VGcm9tQ2FjaGVFUktOU18zVVJMRVJLTjNXVEY2U3RyaW5nRS4KKyAgICAgICAgKiBsb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlQWxsTG9hZGVyc1Bh
Z2VDYWNoZUFjY2VwdGFibGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyOjpEb2N1bWVudExvYWRlcik6IEluaXRpYWxpemUgbV9zdWJyZXNvdXJjZUxvYWRlcnNBcmVQ
YWdlQ2FjaGVBY2NlcHRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnN0
b3BMb2FkaW5nKTogTW9kaWZpZWQgdG8gY29uZGl0aW9uYWxseSBjYWxsIGFyZUFsbExvYWRlcnNQ
YWdlQ2FjaGVBY2NlcHRhYmxlKCkuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
aGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkU29vbik6IE1vZGlmaWVkIHRvIHF1ZXJ5IEZyYW1lTG9h
ZGVyOjpsb2Fkc1N5bmNocm9ub3VzbHkoKQorICAgICAgICB3aGV0aGVyIHRvIGxvYWQgc3Vic3Rp
dHV0ZSBkYXRhIGltbWVkaWF0ZWx5IG9yIHRvIHNjaGVkdWxlIGEgbG9hZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjpyZXNwb25zZVJlY2VpdmVkKTogTW9kaWZpZWQgdG8gY3Jl
YXRlIGEgY29udGVudCBmaWxlciB3aGVuIHRoZSByZXNwb25zZSBwcm90b2NvbAorICAgICAgICBp
cyBlaXRoZXIgSFRUUCBvciBIVFRQUywgYXNzdW1pbmcgY29udGVudCBmaWx0ZXJpbmcgaXMgZW5h
YmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpkYXRhUmVjZWl2ZWQpOiBN
b2RpZmllZCB0byBjYWxsIERvY3VtZW50TG9hZGVyOjpzZXRDb250ZW50RmlsdGVyRm9yQmxvY2tl
ZExvYWQoKQorICAgICAgICBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjpjbGVhck1haW5SZXNvdXJjZUxvYWRlcik6IEFkZGVkIFBMQVRGT1JNKElPUykt
Z3VhcmRlZCBjb2RlLiBBbHNvIGFkZGVkIGEKKyAgICAgICAgRklYTUUgY29tbWVudCB0byByZW1v
dmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQgb25jZSB3ZSB1cHN0cmVhbSB0aGUgaU9TIGNoYW5n
ZXMgdG8gUmVzb3VyY2VSZXF1ZXN0LmguCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRl
cjo6c2V0UmVzcG9uc2VNSU1FVHlwZSk6IEFkZGVkOyBndWFyZCBieSBQTEFURk9STShJT1MpLiBB
bHNvIGFkZGVkIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRl
cjo6c3RhcnRMb2FkaW5nTWFpblJlc291cmNlKTogQWRkZWQgUExBVEZPUk0oSU9TKS1ndWFyZGVk
IGNvZGUuIEFsc28gYWRkZWQgYQorICAgICAgICBGSVhNRSBjb21tZW50IHRvIHJlbW92ZSB0aGUg
UExBVEZPUk0oSU9TKS1ndWFyZCBvbmNlIHdlIHVwc3RyZWFtIHRoZSBpT1MgY2hhbmdlcyB0byBS
ZXNvdXJjZVJlcXVlc3QuaC4KKyAgICAgICAgSSBhbHNvIHN1YnN0aXR1dGVkIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDw+IGZvciBERUZJTkVfU1RBVElDX0xPQ0FMLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXI6OnNldENvbnRlbnRGaWx0ZXJGb3JCbG9ja2VkTG9hZCk6IEFkZGVkOyBn
dWFyZGVkIGJ5IFVTRShDT05URU5UX0ZJTFRFUklORykuCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudExvYWRlcjo6aGFuZGxlQ29udGVudEZpbHRlclJlcXVlc3QpOiBBZGRlZDsgZ3VhcmRlZCBi
eSBVU0UoQ09OVEVOVF9GSUxURVJJTkcpIGFuZCBQTEFURk9STShJT1MpLgorICAgICAgICBBbHNv
IGFkZGVkIGEgRklYTUUgY29tbWVudCB0byByZW1vdmUgdGhlIFBMQVRGT1JNKElPUykgZ3VhcmQg
aW5zaWRlIGl0cyBmdW5jdGlvbiBib2R5IG9uY2Ugd2UgdXBzdHJlYW0KKyAgICAgICAgZmlsZSBD
b250ZW50RmlsdGVySU9TLm1tIGFuZCBpbXBsZW1lbnQgQ29udGVudEZpbHRlcjo6cmVxdWVzdFVu
YmxvY2tBbmREaXNwYXRjaElmU3VjY2Vzc2Z1bCgpIGZvciBNYWMuCisgICAgICAgICogbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0
UmVzcG9uc2UpOiBBZGRlZDsgZ3VhcmQgYnkgUExBVEZPUk0oSU9TKS4gQWxzbyBhZGRlZCBhIEZJ
WE1FIGNvbW1lbnQgYXMKKyAgICAgICAgdGhpcyBtZXRob2Qgc2VlbXMgdG8gdmlvbGF0ZSB0aGUg
ZW5jYXBzdWxhdGlvbiBvZiBEb2N1bWVudExvYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjpzdWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6ZG9jdW1lbnRVUkwpOiBBZGRl
ZDsgcmV0dXJucyB0aGUgVVJMIG9mIHRoZSBkb2N1bWVudCByZXN1bHRpbmcgZnJvbSB0aGUgRG9j
dW1lbnRMb2FkZXIuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50V3JpdGVyOjpjcmVhdGVEb2N1bWVudCk6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlIHRvIGNyZWF0ZSBhIFBERiBkb2N1bWVudC4KKyAgICAgICAgKiBsb2FkZXIv
RW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50Ojpv
cGVuRGF0ZVRpbWVDaG9vc2VyKTogT3B0IG91dCBvZiBjb21waWxpbmcgdGhpcyBjb2RlIGZvciBp
T1MuIEFsc28gc3Vic3RpdHV0ZWQKKyAgICAgICAgbnVsbHB0ciBmb3IgMC4KKyAgICAgICAgKiBs
b2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZVByb2dyZXNzVHJhY2tlcjo6fkZy
YW1lUHJvZ3Jlc3NUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFt
ZUxvYWRlcik6IEluaXRpYWxpemUgbV9sb2Fkc1N5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6aW5pdEZvclN5bnRoZXNpemVkRG9jdW1lbnQpOiBBZGRlZDsgZ3Vh
cmRlZCBieSBQTEFURk9STShJT1MpLiBBbHNvIGFkZGVkIEZJWE1FIGNvbW1lbnQuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tDb21wbGV0ZWQpOiBBZGRlZCBpT1Mtc3BlY2lm
aWMgY29kZSB3aXRoIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9wRm9yVXNlckNhbmNlbCk6IEFkZGVkIGlP
Uy1zcGVjaWZpYyBjb2RlIGFuZCBGSVhNRSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2Rl
IGFuZCBGSVhNRSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnRyYW5z
aXRpb25Ub0NvbW1pdHRlZCk6IE9wdCBvdXQgb2YgRU5BQkxFKFRPVUNIX0VWRU5UUykgbG9naWMg
d2hlbiBidWlsZGluZyBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRp
ZEZpcnN0TGF5b3V0KTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6Y29ubmVjdGlvblByb3BlcnRpZXMpOiBBZGRlZDsgZ3VhcmRlZCBieSBQ
TEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV2luZG93KTogQWRkZWQgaU9T
LXNwZWNpZmljIGNvZGUgYW5kIEZJWE1FIGNvbW1lbnQuCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0TG9hZHNTeW5jaHJv
bm91c2x5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZHNTeW5j
aHJvbm91c2x5KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6
CisgICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUp
OiBPcHQgb3V0IG9mIHNjcm9sbCBwb3NpdGlvbiBsb2dpYyB3aGVuIGJ1aWxkaW5nIGZvciBpT1Mu
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6cmVwbGFjZUN1cnJlbnRJdGVt
KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuaDogQ2hhbmdlZCBhY2Nlc3MgY29udHJvbCBv
ZiBjb25zdHJ1Y3RvciBmcm9tIHByaXZhdGUgdG8gcHJvdGVjdGVkIGFuZCByZW1vdmVkIHRoZSBG
SU5BTAorICAgICAgICBrZXl3b3JkIGZyb20gdGhlIGNsYXNzIHNvIHRoYXQgd2UgY2FuIHN1YmNs
YXNzIFBsYWNlaG9sZGVyRG9jdW1lbnQgb24gaU9TLgorICAgICAgICAqIGxvYWRlci9Qb2xpY3lD
aGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvbGljeUNoZWNrZXI6OmNoZWNrTmF2aWdh
dGlvblBvbGljeSk6IEFkZGVkIFVTRShRVUlDS19MT09LKS0gYW5kIFVTRShDT05URU5UX0ZJTFRF
UklORyktZ3VhcmRlZCBjb2RlLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUJ1ZmZlcjo6c2hvdWxkVXNlUHVyZ2VhYmxlTWVt
b3J5KTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKiBsb2FkZXIv
UmVzb3VyY2VCdWZmZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkTm90aWZpZXI6OmRpc3BhdGNoV2ls
bFNlbmRSZXF1ZXN0KTogQWRkZWQgVVNFKFFVSUNLX0xPT0spLWd1YXJkZWQgY29kZS4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQpOiBBZGRlZCBp
T1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2NoZWR1bGVMb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnJlbW92ZSk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlIHdpdGggRklYTUUgY29t
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmln
aW5SZWRpcmVjdFJlY2VpdmVkKTogQWRkZWQgbnVsbC1jaGVjayBmb3IgdmFyaWFibGUgb2xkSG9z
dC4gQWxzbyBhZGRlZAorICAgICAgICBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOiBBZGRlZCBp
T1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmluaXQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpjb25uZWN0aW9uUHJvcGVydGllcyk6IEFkZGVk
OyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9h
ZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKTog
QWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjppT1NPcmlnaW5hbFJlcXVlc3QpOiBBZGRlZDsgaU9TLXNwZWNpZmljLgorICAg
ICAgICAqIGxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJm
cmFtZUxvYWRlcjo6bG9hZFBsdWdpbik6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAg
ICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJy
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNv
dXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9T
KS4KKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5n
KTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJj
ZUxvYWRlcjo6d2lsbENhbmNlbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3Vy
Y2VMb2FkZXI6Om5vdGlmeURvbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291
cmNlTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpsb2FkQ2FjaGVHcm91cCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxh
dGVVc2FnZUZvck9yaWdpbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNo
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVNRTENvbW1hbmQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRh
dGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZXhlY3V0ZVN0YXRlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVuc3VyZU9yaWdpblJlY29yZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJlbW92
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVt
cHR5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVDb3B5T2ZDYWNoZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBTaXplKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZhY3V1bURhdGFi
YXNlRmlsZSk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcik6IEFkZGVk
IGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VNYW51YWw6
OkNhY2hlZEltYWdlTWFudWFsKTogQWRkZWQ7IGd1YXJkZWQgYnkgVVNFKENGKS4gQWxzbyBhZGRl
ZCBGSVhNRSBjb21tZW50IHRvIGluY29ycG9yYXRlCisgICAgICAgIHRoZSBmdW5jdGlvbmFsaXR5
IG9mIHRoaXMgY2xhc3MgaW50byBDYWNoZWRJbWFnZSBhbmQgdG8gcmVtb3ZlIHRoZSBVU0UoQ0Yp
LWd1YXJkIG9uY2Ugd2UgbWFrZSBNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKCkKKyAgICAg
ICAgcGxhdGZvcm0taW5kZXBlbmRlbnQuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZU1h
bnVhbDo6bXVzdFJldmFsaWRhdGVEdWVUb0NhY2hlSGVhZGVycyk6IEFkZGVkOyBndWFyZGVkIGJ5
IFVTRShDRikuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6IFJlbW92ZWQg
RklOQUwga2V5d29yZCBmcm9tIGNsYXNzIHNvIHRoYXQgd2UgY2FuIGRlZmluZSBkZXJpdmVkIGNs
YXNzIENhY2hlZEltYWdlTWFudWFsLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6Omlz
TWFudWFsKTogQWRkZWQ7IGd1YXJkZWQgYnkgVVNFKENGKS4gQWxzbyBhZGRlZCBGSVhNRSBjb21t
ZW50LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VNYW51YWw6OmFkZEZha2VDbGllbnQp
OiBBZGRlZDsgZ3VhcmRlZCBieSBVU0UoQ0YpLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1h
Z2VNYW51YWw6OnJlbW92ZUZha2VDbGllbnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBVU0UoQ0YpLgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZTo6bG9hZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6bG9hZERvbmUpOiBBZGRlZCBhcmd1bWVudCBzaG91bGRQZXJmb3JtUG9z
dExvYWRBY3Rpb25zLCBkZWZhdWx0cyB0byB0cnVlLiBNb2RpZmllZAorICAgICAgICB0byBjb25k
aXRpb25hbGx5IGNhbGwgcGVyZm9ybVBvc3RMb2FkQWN0aW9ucygpIHdpdGggcmVzcGVjdCB0byB0
aGUgYXJndW1lbnQgc2hvdWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpwcmVsb2FkKTogQWRkZWQgaU9TLXNwZWNpZmljIGNv
ZGUuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tGb3JQZW5k
aW5nUHJlbG9hZHMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bWVtb3J5Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OmFkZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5Q2FjaGU6OnJldmFsaWRhdGlvbkZhaWxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OnJlc291cmNlRm9yUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSk6IEFkZGVkOyBndWFyZGVkIGJ5IFVTRShD
RikuIEFsc28gYWRkZWQgRklYTUUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNh
Y2hlOjpyZW1vdmVJbWFnZUZyb21DYWNoZSk6IEFkZGVkOyBndWFyZGVkIGJ5IFVTRShDRikuIEFs
c28gYWRkZWQgRklYTUUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpw
cnVuZUxpdmVSZXNvdXJjZXMpOiBNb2RpZmllZCB0byB0YWtlIGFyZ3VtZW50IHNob3VsZERlc3Ry
b3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpNZW1v
cnlDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKTogTW9kaWZpZWQgdG8gdGFrZSBhcmd1
bWVudCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzLAorICAgICAg
ICBkZWZhdWx0cyB0byBmYWxzZS4gV2hlbiB0aGlzIGFyZ3VtZW50IGlzIHRydWUgd2UgZGVzdHJv
eSB0aGUgZGVjb2RlZCBkYXRhIGZvciBhbGwgbGl2ZSByZXNvdXJjZXMgZnJvbSB0aGUgbWVtb3J5
IGNhY2hlLgorICAgICAgICBTdWNoIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZnVsIHdoZW4gdGhlIHN5
c3RlbSBpcyBydW5uaW5nIGxvdyBvbiBtZW1vcnkuCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlD
YWNoZTo6ZXZpY3QpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvTWVtb3J5Q2FjaGUuaDoKKyAgICAgICAgKiBsb2FkZXIvY2YvU3VicmVzb3VyY2VMb2Fk
ZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZURhdGFBcnJheSk6IEFjdHVhbGx5IG1ha2UgdGhpcyBjb2RlIGNvbXBpbGUuIEluIHBhcnRpY3Vs
YXIsIHRoZXJlIGlzIG5vCisgICAgICAgIG1ldGhvZCBjYWxsZWQgc2VuZERhdGFUb1Jlc291cmNl
IG9uIFN1YnJlc291cmNlTG9hZGVyIG9yIGluIGl0cyBjbGFzcyBoaWVyYXJjaHkuCisgICAgICAg
ICogbG9hZGVyL21hYy9Eb2N1bWVudExvYWRlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6c2NoZWR1bGUpOiBUaGlzIG1ldGhvZCBoYXMgYW4gZW1wdHkgaW1wbGVt
ZW50YXRpb24gd2hlbiBidWlsZGluZyBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXI6OnVuc2NoZWR1bGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oOiBFeHBvc2VkIGRlY29kZWRTaXplKCkgdG8gYWNjZXNzIHRoZSBkZWNv
ZGVkIHNpemUgb2YgdGhlIGJpdG1hcCBpbWFnZS4KKyAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5
IGlzIHVzZWQgaW4gTWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSgpLgorCiAyMDEzLTEyLTE3
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFZpZGVvIGVsZW1l
bnQncyB3aWR0aCBhbmQgaGVpZ2h0IGNvbnRlbnQgYXR0cmlidXRlcyBzaG91bGQgbm90IGluZmx1
ZW5jZSBpbnRyaW5zaWMgd2lkdGggYW5kIGhlaWdodApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA2
MjUwMTk0MDNmZDYxNjM2OWVjNmVlYWNmNmIzOWUwZTE3MWIwZTU3Li43ZTY2MzQ5MmRiZWM1MmEz
ZDIwMjM4ZDRiOTBkZTE5NWFmNGI4MDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMTc0LDgg
KzE3NCwxMCBAQCBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTNnZXRTdGF0aXN0aWNzRXYKIF9f
Wk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxM3NldENhcGFjaXRpZXNFampqCiBfX1pON1dlYkNvcmUx
MU1lbW9yeUNhY2hlMTRldmljdFJlc291cmNlc0V2CiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hl
MTRyZXNvdXJjZUZvclVSTEVSS05TXzNVUkxFCitfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTVh
ZGRJbWFnZVRvQ2FjaGVFUDdDR0ltYWdlUktOU18zVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdX
ZWJDb3JlMTFNZW1vcnlDYWNoZTE4cmVzb3VyY2VGb3JSZXF1ZXN0RVJLTlNfMTVSZXNvdXJjZVJl
cXVlc3RFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTlnZXRPcmlnaW5zV2l0aENhY2hlRVJO
M1dURjdIYXNoU2V0SU5TMV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVOU18xOFNlY3Vy
aXR5T3JpZ2luSGFzaEVOUzFfMTBIYXNoVHJhaXRzSVM1X0VFRUUKK19fWk43V2ViQ29yZTExTWVt
b3J5Q2FjaGUyMHJlbW92ZUltYWdlRnJvbUNhY2hlRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUyNXJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5FUE5T
XzE0U2VjdXJpdHlPcmlnaW5FCiBfX1pON1dlYkNvcmUxMVBhZ2VDb25zb2xlMjFzaG91bGRQcmlu
dEV4Y2VwdGlvbnNFdgogX19aTjdXZWJDb3JlMTFQYWdlQ29uc29sZTI0c2V0U2hvdWxkUHJpbnRF
eGNlcHRpb25zRWIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4
IDMyYmQ4MTU4MmE2N2NmOTliNWM3MTViYjg1N2ViY2JiMDNiYzc3NmYuLjczZmUzYTdhZDVkYzUz
OGM1YThlNzNjYzY2M2MyMGY2ZmM0MTU2MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcApAQCAtNTYsMTIgKzU2LDE0IEBACiAjaW5jbHVkZSAiUG9saWN5Q2hlY2tl
ci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC05NSw2ICs5
NywyNyBAQCBzdGF0aWMgdm9pZCBzZXRBbGxEZWZlcnNMb2FkaW5nKGNvbnN0IFJlc291cmNlTG9h
ZGVyU2V0JiBsb2FkZXJzLCBib29sIGRlZmVycykKICAgICAgICAgbG9hZGVyc0NvcHlbaV0tPnNl
dERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKIH0KIAorc3RhdGljIGJvb2wgYXJlQWxsTG9hZGVyc1Bh
Z2VDYWNoZUFjY2VwdGFibGUoY29uc3QgUmVzb3VyY2VMb2FkZXJTZXQmIGxvYWRlcnMpCit7Cisg
ICAgVmVjdG9yPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IGxvYWRlcnNDb3B5OworICAgIGNvcHlU
b1ZlY3Rvcihsb2FkZXJzLCBsb2FkZXJzQ29weSk7CisgICAgc2l6ZV90IHNpemUgPSBsb2FkZXJz
Q29weS5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAg
ICAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IGxvYWRlcnNDb3B5W2ldLT5oYW5kbGUoKTsK
KyAgICAgICAgaWYgKCFoYW5kbGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gbWVtb3J5Q2FjaGUoKS0+cmVzb3Vy
Y2VGb3JVUkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIGlmICghY2Fj
aGVkUmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gQWxs
IG5vbi1pbWFnZSBsb2FkcyB3aWxsIHByZXZlbnQgdGhlIHBhZ2UgZnJvbSBlbnRlcmluZyB0aGUg
UGFnZUNhY2hlLgorICAgICAgICBpZiAoIWNhY2hlZFJlc291cmNlLT5pc0ltYWdlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiBEb2N1
bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNv
bnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKICAgICA6IG1fZGVmZXJNYWluUmVz
b3VyY2VEYXRhTG9hZCh0cnVlKQogICAgICwgbV9mcmFtZSgwKQpAQCAtMTE5LDYgKzE0Miw3IEBA
IERvY3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cSwgY29uc3QgU3Vic3RpdHV0ZURhdGEmCiAgICAgLCBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91
dFJlc291cmNlTG9hZGVyKDApCiAgICAgLCBtX2RhdGFMb2FkVGltZXIodGhpcywgJkRvY3VtZW50
TG9hZGVyOjpoYW5kbGVTdWJzdGl0dXRlRGF0YUxvYWROb3cpCiAgICAgLCBtX3dhaXRpbmdGb3JD
b250ZW50UG9saWN5KGZhbHNlKQorICAgICwgbV9zdWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdlQ2Fj
aGVBY2NlcHRhYmxlKGZhbHNlKQogICAgICwgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdChhZG9wdFB0
cihuZXcgQXBwbGljYXRpb25DYWNoZUhvc3QodGhpcykpKQogewogfQpAQCAtMjU2LDcgKzI4MCwx
NCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdG9wTG9hZGluZygpCiAgICAgLy8gKFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIHRoZXJlJ3MgYSBzaW5nbGUgWE1MSHR0cFJlcXVlc3QgY3VycmVudGx5IGxv
YWRpbmcgYW5kIHN0b3BMb2FkaW5nIGNhdXNlcyBpdAogICAgIC8vIHRvIHN0b3AgbG9hZGluZy4g
QmVjYXVzZSBvZiB0aGlzLCB3ZSBuZWVkIHRvIHNhdmUgaXQgc28gd2UgZG9uJ3QgcmV0dXJuIGVh
cmx5LgogICAgIGJvb2wgbG9hZGluZyA9IGlzTG9hZGluZygpOwotICAgIAorCisgICAgLy8gV2Ug
bWF5IHdhbnQgdG8gYXVkaXQgdGhlIGV4aXN0aW5nIHN1YnJlc291cmNlIGxvYWRlcnMgd2hlbiB3
ZSBhcmUgb24gYSBwYWdlIHdoaWNoIGhhcyBjb21wbGV0ZWQKKyAgICAvLyBsb2FkaW5nIGJ1dCB0
aGVyZSBhcmUgc3VicmVzb3VyY2UgbG9hZHMgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBtdXN0
IGJlIGRvbmUgYmVmb3JlIHRoZQorICAgIC8vIGZyYW1lLT5zdG9wTG9hZGluZygpIGNhbGwsIHdo
aWNoIG1heSBldmljdCB0aGUgQ2FjaGVkUmVzb3VyY2VzLCB3aGljaCB3ZSByZWx5IG9uIHRvIGNo
ZWNrCisgICAgLy8gdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlIGxvYWRzLgorICAgIGlmIChsb2Fk
aW5nICYmIG1fY29tbWl0dGVkICYmICFtYWluUmVzb3VyY2VMb2FkZXIoKSAmJiAhbV9zdWJyZXNv
dXJjZUxvYWRlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX3N1YnJlc291cmNlTG9hZGVyc0FyZVBh
Z2VDYWNoZUFjY2VwdGFibGUgPSBhcmVBbGxMb2FkZXJzUGFnZUNhY2hlQWNjZXB0YWJsZShtX3N1
YnJlc291cmNlTG9hZGVycyk7CisKICAgICBpZiAobV9jb21taXR0ZWQpIHsKICAgICAgICAgLy8g
QXR0ZW1wdCB0byBzdG9wIHRoZSBmcmFtZSBpZiB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIGxvYWRp
bmcsIG9yIGlmIGl0IGlzIGRvbmUgbG9hZGluZyBidXQKICAgICAgICAgLy8gc3RpbGwgIHBhcnNp
bmcuIEZhaWx1cmUgdG8gZG8gc28gY2FuIGNhdXNlIGEgd29ybGQgbGVhay4KQEAgLTM4MSw2ICs0
MTIsOSBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpmaW5pc2hlZExvYWRpbmcoZG91YmxlIGZpbmlz
aFRpbWUpCiAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBtX2NvbnRlbnRGaWx0ZXItPmdldFJl
cGxhY2VtZW50RGF0YShsZW5ndGgpOwogICAgICAgICBpZiAoZGF0YSkKICAgICAgICAgICAgIGRh
dGFSZWNlaXZlZChtX21haW5SZXNvdXJjZS5nZXQoKSwgZGF0YSwgbGVuZ3RoKTsKKworICAgICAg
ICBpZiAobV9jb250ZW50RmlsdGVyLT5kaWRCbG9ja0RhdGEoKSkKKyAgICAgICAgICAgIHNldENv
bnRlbnRGaWx0ZXJGb3JCbG9ja2VkTG9hZChtX2NvbnRlbnRGaWx0ZXIpOwogICAgIH0KICNlbmRp
ZgogCkBAIC00NTUsMTAgKzQ4OSwxMCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdGFydERhdGFM
b2FkVGltZXIoKQogCiB2b2lkIERvY3VtZW50TG9hZGVyOjpoYW5kbGVTdWJzdGl0dXRlRGF0YUxv
YWRTb29uKCkKIHsKLSAgICBpZiAobV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKQotICAgICAg
ICBzdGFydERhdGFMb2FkVGltZXIoKTsKLSAgICBlbHNlCisgICAgaWYgKCFtX2RlZmVyTWFpblJl
c291cmNlRGF0YUxvYWQgfHwgZnJhbWVMb2FkZXIoKS0+bG9hZHNTeW5jaHJvbm91c2x5KCkpCiAg
ICAgICAgIGhhbmRsZVN1YnN0aXR1dGVEYXRhTG9hZE5vdygwKTsKKyAgICBlbHNlCisgICAgICAg
IHN0YXJ0RGF0YUxvYWRUaW1lcigpOwogfQogCiB2b2lkIERvY3VtZW50TG9hZGVyOjpyZWRpcmVj
dFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpAQCAtNjMzLDcg
KzY2Nyw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlCiAjZW5kaWYKIAogI2lmIFVTRShDT05U
RU5UX0ZJTFRFUklORykKLSAgICBpZiAocmVzcG9uc2UudXJsKCkucHJvdG9jb2xJcygiaHR0cHMi
KSAmJiBDb250ZW50RmlsdGVyOjppc0VuYWJsZWQoKSkKKyAgICBpZiAocmVzcG9uc2UudXJsKCku
cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpICYmIENvbnRlbnRGaWx0ZXI6OmlzRW5hYmxlZCgpKQog
ICAgICAgICBtX2NvbnRlbnRGaWx0ZXIgPSBDb250ZW50RmlsdGVyOjpjcmVhdGUocmVzcG9uc2Up
OwogI2VuZGlmCiAKQEAgLTg0NCw2ICs4NzgsOSBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpkYXRh
UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpbgog
CiAgICAgICAgIGRhdGEgPSBtX2NvbnRlbnRGaWx0ZXItPmdldFJlcGxhY2VtZW50RGF0YShsZW5n
dGgpOwogICAgICAgICBsb2FkV2FzQmxvY2tlZEJlZm9yZUZpbmlzaGluZyA9IG1fY29udGVudEZp
bHRlci0+ZGlkQmxvY2tEYXRhKCk7CisKKyAgICAgICAgaWYgKGxvYWRXYXNCbG9ja2VkQmVmb3Jl
RmluaXNoaW5nKQorICAgICAgICAgICAgc2V0Q29udGVudEZpbHRlckZvckJsb2NrZWRMb2FkKG1f
Y29udGVudEZpbHRlcik7CiAgICAgfQogI2VuZGlmCiAKQEAgLTkyNyw2ICs5NjQsMTIgQEAgdm9p
ZCBEb2N1bWVudExvYWRlcjo6ZGV0YWNoRnJvbUZyYW1lKCkKIHZvaWQgRG9jdW1lbnRMb2FkZXI6
OmNsZWFyTWFpblJlc291cmNlTG9hZGVyKCkKIHsKICAgICBtX2xvYWRpbmdNYWluUmVzb3VyY2Ug
PSBmYWxzZTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogUmVtb3ZlIFBMQVRG
T1JNKElPUyktZ3VhcmQgb25jZSB3ZSB1cHN0cmVhbSB0aGUgaU9TIGNoYW5nZXMgdG8gUmVzb3Vy
Y2VSZXF1ZXN0LmguCisgICAgbV9yZXF1ZXN0LnNldE1haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2Up
OworI2VuZGlmCisKICAgICBpZiAodGhpcyA9PSBmcmFtZUxvYWRlcigpLT5hY3RpdmVEb2N1bWVu
dExvYWRlcigpKQogICAgICAgICBjaGVja0xvYWRDb21wbGV0ZSgpOwogfQpAQCAtMTI1Niw2ICsx
Mjk5LDE0IEBAIGNvbnN0IFN0cmluZyYgRG9jdW1lbnRMb2FkZXI6OnJlc3BvbnNlTUlNRVR5cGUo
KSBjb25zdAogICAgIHJldHVybiBtX3Jlc3BvbnNlLm1pbWVUeXBlKCk7CiB9CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2VlbXMgdG8gdmlvbGF0ZSB0aGUgZW5j
YXBzdWxhdGlvbiBvZiB0aGlzIGNsYXNzLgordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0UmVzcG9u
c2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIHJlc3BvbnNlTWltZVR5cGUpCit7CisgICAgbV9yZXNw
b25zZS5zZXRNaW1lVHlwZShyZXNwb25zZU1pbWVUeXBlKTsKK30KKyNlbmRpZgorCiBjb25zdCBV
UkwmIERvY3VtZW50TG9hZGVyOjp1bnJlYWNoYWJsZVVSTCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fc3Vic3RpdHV0ZURhdGEuZmFpbGluZ1VSTCgpOwpAQCAtMTM4MCw5ICsxNDMxLDEzIEBAIHZv
aWQgRG9jdW1lbnRMb2FkZXI6OnN0YXJ0TG9hZGluZ01haW5SZXNvdXJjZSgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFJlbW92ZSBQ
TEFURk9STShJT1MpLWd1YXJkIG9uY2Ugd2UgdXBzdHJlYW0gdGhlIGlPUyBjaGFuZ2VzIHRvIFJl
c291cmNlUmVxdWVzdC5oLgorICAgIG1fcmVxdWVzdC5zZXRNYWluUmVzb3VyY2VSZXF1ZXN0KHRy
dWUpOworI2VuZGlmCisKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX3JlcXVlc3QpOwot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVzb3VyY2VMb2FkZXJPcHRpb25zLCBtYWluUmVzb3Vy
Y2VMb2FkT3B0aW9ucywKLSAgICAgICAgKFNlbmRDYWxsYmFja3MsIFNuaWZmQ29udGVudCwgQnVm
ZmVyRGF0YSwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgQXNrQ2xpZW50Rm9yQWxsQ3JlZGVudGlh
bHMsIFNraXBTZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlw
ZSkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXNvdXJjZUxvYWRlck9wdGlvbnM+IG1h
aW5SZXNvdXJjZUxvYWRPcHRpb25zKFNlbmRDYWxsYmFja3MsIFNuaWZmQ29udGVudCwgQnVmZmVy
RGF0YSwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgQXNrQ2xpZW50Rm9yQWxsQ3JlZGVudGlhbHMs
IFNraXBTZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSk7
CiAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IGNhY2hlZFJlc291cmNlUmVxdWVzdChyZXF1ZXN0
LCBtYWluUmVzb3VyY2VMb2FkT3B0aW9ucyk7CiAgICAgbV9tYWluUmVzb3VyY2UgPSBtX2NhY2hl
ZFJlc291cmNlTG9hZGVyLT5yZXF1ZXN0TWFpblJlc291cmNlKGNhY2hlZFJlc291cmNlUmVxdWVz
dCk7CiAgICAgaWYgKCFtX21haW5SZXNvdXJjZSkgewpAQCAtMTUwNiw0ICsxNTYxLDM4IEBAIHZv
aWQgRG9jdW1lbnRMb2FkZXI6OmhhbmRsZWRPbmxvYWRFdmVudHMoKQogICAgIGFwcGxpY2F0aW9u
Q2FjaGVIb3N0KCktPnN0b3BEZWZlcnJpbmdFdmVudHMoKTsKIH0KIAorI2lmIFVTRShDT05URU5U
X0ZJTFRFUklORykKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldENvbnRlbnRGaWx0ZXJGb3JCbG9j
a2VkTG9hZChQYXNzUmVmUHRyPENvbnRlbnRGaWx0ZXI+IGNvbnRlbnRGaWx0ZXIpCit7CisgICAg
QVNTRVJUKCFtX2NvbnRlbnRGaWx0ZXJGb3JCbG9ja2VkTG9hZCk7CisgICAgQVNTRVJUKGNvbnRl
bnRGaWx0ZXIpOworICAgIEFTU0VSVChjb250ZW50RmlsdGVyLT5kaWRCbG9ja0RhdGEoKSk7Cisg
ICAgbV9jb250ZW50RmlsdGVyRm9yQmxvY2tlZExvYWQgPSBjb250ZW50RmlsdGVyOworfQorCiti
b29sIERvY3VtZW50TG9hZGVyOjpoYW5kbGVDb250ZW50RmlsdGVyUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSBQTEFURk9STShJ
T1MpLWd1YXJkIG9uY2Ugd2UgdXBzdHJlYW0gQ29udGVudEZpbHRlcklPUy5tbSBhbmQKKyAgICAv
LyBpbXBsZW1lbnQgQ29udGVudEZpbHRlcjo6cmVxdWVzdFVuYmxvY2tBbmREaXNwYXRjaElmU3Vj
Y2Vzc2Z1bCgpIGZvciBNYWMuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghbV9jb250ZW50
RmlsdGVyRm9yQmxvY2tlZExvYWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
cmVxdWVzdC51cmwoKS5wcm90b2NvbElzKENvbnRlbnRGaWx0ZXI6OnNjaGVtZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlcXVlc3QudXJs
KCkuaG9zdCgpLCAidW5ibG9jayIpKSB7CisgICAgICAgIC8vIFRlbGwgdGhlIEZyYW1lTG9hZGVy
IHRvIHJlbG9hZCBpZiB0aGUgdW5ibG9jayBpcyBzdWNjZXNzZnVsLgorICAgICAgICBtX2NvbnRl
bnRGaWx0ZXJGb3JCbG9ja2VkTG9hZC0+cmVxdWVzdFVuYmxvY2tBbmREaXNwYXRjaElmU3VjY2Vz
c2Z1bChiaW5kKCZGcmFtZUxvYWRlcjo6cmVsb2FkLCAmKG1fZnJhbWUtPmxvYWRlcigpKSwgZmFs
c2UpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuaAppbmRleCAzMzM4NmU2ZTgwZTM2YzMzM2RjODM0MDk0MTM0MjVj
ZDM1M2JiM2Q1Li4xNTFkMzY5NGQ0ZDUyZmFmMDc1OTdiZGMwYWJiZjllYjc5MjY1OWIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaApAQCAtMTE2LDYgKzExNiwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFVSTCYgcmVxdWVzdFVSTCgpIGNvbnN0
OwogICAgICAgICBjb25zdCBVUkwmIHJlc3BvbnNlVVJMKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0
IFN0cmluZyYgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNlZW1zIHRvIHZpb2xhdGUgdGhlIGVuY2Fwc3Vs
YXRpb24gb2YgdGhpcyBjbGFzcy4KKyAgICAgICAgdm9pZCBzZXRSZXNwb25zZU1JTUVUeXBlKGNv
bnN0IFN0cmluZyYpOworI2VuZGlmCiAKICAgICAgICAgdm9pZCByZXBsYWNlUmVxdWVzdFVSTEZv
clNhbWVEb2N1bWVudE5hdmlnYXRpb24oY29uc3QgVVJMJik7CiAgICAgICAgIGJvb2wgaXNTdG9w
cGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNTdG9wcGluZzsgfQpAQCAtMTIzLDggKzEyNywxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0Q29tbWl0dGVkKGJvb2wgY29t
bWl0dGVkKSB7IG1fY29tbWl0dGVkID0gY29tbWl0dGVkOyB9CiAgICAgICAgIGJvb2wgaXNDb21t
aXR0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbW1pdHRlZDsgfQogICAgICAgICBib29sIGlzTG9h
ZGluZygpIGNvbnN0OwotICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KKwogICAgICAgICBjb25zdCBSZXNvdXJjZUVy
cm9yJiBtYWluRG9jdW1lbnRFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkRvY3VtZW50RXJy
b3I7IH0KKworICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCBzZWVtcyB0byB2aW9sYXRlIHRoZSBlbmNhcHN1bGF0aW9uIG9mIHRo
aXMgY2xhc3MuCisgICAgICAgIHZvaWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpIHsgbV9yZXNwb25zZSA9IHJlc3BvbnNlOyB9CisjZW5kaWYKKwogICAgICAg
ICBib29sIGlzQ2xpZW50UmVkaXJlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzQ2xpZW50UmVkaXJl
Y3Q7IH0KICAgICAgICAgdm9pZCBzZXRJc0NsaWVudFJlZGlyZWN0KGJvb2wgaXNDbGllbnRSZWRp
cmVjdCkgeyBtX2lzQ2xpZW50UmVkaXJlY3QgPSBpc0NsaWVudFJlZGlyZWN0OyB9CiAgICAgICAg
IHZvaWQgaGFuZGxlZE9ubG9hZEV2ZW50cygpOwpAQCAtMTkzLDcgKzIwNCw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5OyB9CiAgICAgICAg
IHZvaWQgc2V0RGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KGJvb2wgZGlkQ3JlYXRlR2xvYmFs
SGlzdG9yeUVudHJ5KSB7IG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5ID0gZGlkQ3JlYXRl
R2xvYmFsSGlzdG9yeUVudHJ5OyB9Ci0gICAgICAgIAorCisgICAgICAgIGJvb2wgc3VicmVzb3Vy
Y2VMb2FkZXJzQXJlUGFnZUNhY2hlQWNjZXB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VicmVz
b3VyY2VMb2FkZXJzQXJlUGFnZUNhY2hlQWNjZXB0YWJsZTsgfQorCiAgICAgICAgIHZvaWQgc2V0
RGVmZXJzTG9hZGluZyhib29sKTsKICAgICAgICAgdm9pZCBzZXRNYWluUmVzb3VyY2VEYXRhQnVm
ZmVyaW5nUG9saWN5KERhdGFCdWZmZXJpbmdQb2xpY3kpOwogCkBAIC0yNDksMTUgKzI2MiwyMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBjaGVja0xvYWRDb21wbGV0ZSgp
OwogCisjaWYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQorICAgICAgICB2b2lkIHNldENvbnRlbnRG
aWx0ZXJGb3JCbG9ja2VkTG9hZChQYXNzUmVmUHRyPENvbnRlbnRGaWx0ZXI+KTsKKyAgICAgICAg
Ym9vbCBoYW5kbGVDb250ZW50RmlsdGVyUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
KyNlbmRpZgorCisgICAgICAgIC8vIFRoZSBVUkwgb2YgdGhlIGRvY3VtZW50IHJlc3VsdGluZyBm
cm9tIHRoaXMgRG9jdW1lbnRMb2FkZXIuCisgICAgICAgIFVSTCBkb2N1bWVudFVSTCgpIGNvbnN0
OworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYpOwogCiAgICAgICAgIGJvb2wgbV9kZWZl
ck1haW5SZXNvdXJjZURhdGFMb2FkOwogCiAgICAgcHJpdmF0ZToKLQotICAgICAgICAvLyBUaGUg
VVJMIG9mIHRoZSBkb2N1bWVudCByZXN1bHRpbmcgZnJvbSB0aGlzIERvY3VtZW50TG9hZGVyLgot
ICAgICAgICBVUkwgZG9jdW1lbnRVUkwoKSBjb25zdDsKICAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50KCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzZXRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpOwpAQCAtMzk3LDExICs0MTUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBSZWZQdHI8SWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrPiBtX2ljb25Mb2FkRGVjaXNpb25DYWxs
YmFjazsKICAgICAgICAgUmVmUHRyPEljb25EYXRhQ2FsbGJhY2s+IG1faWNvbkRhdGFDYWxsYmFj
azsKIAorICAgICAgICBib29sIG1fc3VicmVzb3VyY2VMb2FkZXJzQXJlUGFnZUNhY2hlQWNjZXB0
YWJsZTsKKwogICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhvc3Q7ICAvLyBm
b3Igc3Vic3RpdHV0ZSByZXNvdXJjZSBkZWxpdmVyeQogICAgICAgICBPd25QdHI8QXBwbGljYXRp
b25DYWNoZUhvc3Q+IG1fYXBwbGljYXRpb25DYWNoZUhvc3Q7CiAKICNpZiBVU0UoQ09OVEVOVF9G
SUxURVJJTkcpCiAgICAgICAgIFJlZlB0cjxDb250ZW50RmlsdGVyPiBtX2NvbnRlbnRGaWx0ZXI7
CisgICAgICAgIFJlZlB0cjxDb250ZW50RmlsdGVyPiBtX2NvbnRlbnRGaWx0ZXJGb3JCbG9ja2Vk
TG9hZDsKICNlbmRpZgogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFdyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0
ZXIuY3BwCmluZGV4IDZhNmQzYjBiMzA1YTFkOTNiOTVhMzYyZDhhNTc2NmFhNTU3MmQ1MzMuLjVj
YWI4NjRhZjdmOTg2NmNkMjUzYWE0MTg5ZTBmNDA5OGNjMmU5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiUERG
RG9jdW1lbnQuaCIKKyNlbmRpZgogI2luY2x1ZGUgIlBsYWNlaG9sZGVyRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2luY2x1ZGUgIlJhd0RhdGFEb2N1bWVudFBhcnNl
ci5oIgpAQCAtMTA3LDYgKzExMCwxMCBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBEb2N1bWVudFdy
aXRlcjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgaWYgKCFtX2ZyYW1l
LT5sb2FkZXIoKS5zdGF0ZU1hY2hpbmUoKS0+aXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1l
bnQoKSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5zaG91bGRBbHdheXNVc2VQbHVnaW5E
b2N1bWVudChtX21pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIFBsdWdpbkRvY3VtZW50OjpjcmVh
dGUobV9mcmFtZSwgdXJsKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG1fbWltZVR5cGUsICJhcHBsaWNhdGlvbi9wZGYiKSkKKyAgICAgICAgcmV0dXJuIFBE
RkRvY3VtZW50OjpjcmVhdGUobV9mcmFtZSwgdXJsKTsKKyNlbmRpZgogICAgIGlmICghbV9mcmFt
ZS0+bG9hZGVyKCkuY2xpZW50KCkuaGFzSFRNTFZpZXcoKSkKICAgICAgICAgcmV0dXJuIFBsYWNl
aG9sZGVyRG9jdW1lbnQ6OmNyZWF0ZShtX2ZyYW1lLCB1cmwpOwogICAgIHJldHVybiBET01JbXBs
ZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQobV9taW1lVHlwZSwgbV9mcmFtZSwgdXJsLCBtX2Zy
YW1lLT5pblZpZXdTb3VyY2VNb2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0VtcHR5Q2xpZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmNwcAppbmRleCBmYzI0YWNiOWRlYjJiNDEwMDRiNzZmMDE0ZDgyNjQ4ZmRhMDBjMmM4Li5iNjM4
ZDFjMmE4ZjY4Zjk4NjY5ZTBkMzZiM2E5NWExZmQ0NDhkNWRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtMTA0LDEwICsxMDQsMTAgQEAgUGFzc093blB0cjxDb2xv
ckNob29zZXI+IEVtcHR5Q2hyb21lQ2xpZW50OjpjcmVhdGVDb2xvckNob29zZXIoQ29sb3JDaG9v
c2VyQ2xpZW4KIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQ
RVMpCisjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpICYmICFQTEFURk9STShJ
T1MpCiBQYXNzUmVmUHRyPERhdGVUaW1lQ2hvb3Nlcj4gRW1wdHlDaHJvbWVDbGllbnQ6Om9wZW5E
YXRlVGltZUNob29zZXIoRGF0ZVRpbWVDaG9vc2VyQ2xpZW50KiwgY29uc3QgRGF0ZVRpbWVDaG9v
c2VyUGFyYW1ldGVycyYpCiB7Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8RGF0ZVRpbWVDaG9vc2Vy
PigpOworICAgIHJldHVybiBudWxscHRyOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaAppbmRleCBiMDE1YjAyZjkyOTQ3NjllZDI1YjgwNTJlNDE3NGIyN2FhYjRl
YjlmLi4yOTZmNDFlMTRlOTJjNzE1NDhiNjBlN2U5NDA3Y2ZjNGY0OTY2M2E1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0xNjIsNyArMTYyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgUGFzc093blB0cjxDb2xvckNob29zZXI+IGNyZWF0ZUNvbG9yQ2hvb3NlcihDb2xv
ckNob29zZXJDbGllbnQqLCBjb25zdCBDb2xvciYpIE9WRVJSSURFOwogI2VuZGlmCiAKLSNpZiBF
TkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKKyNpZiBFTkFCTEUoREFURV9BTkRfVElN
RV9JTlBVVF9UWVBFUykgJiYgIVBMQVRGT1JNKElPUykKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RGF0ZVRpbWVDaG9vc2VyPiBvcGVuRGF0ZVRpbWVDaG9vc2VyKERhdGVUaW1lQ2hvb3NlckNsaWVu
dCosIGNvbnN0IERhdGVUaW1lQ2hvb3NlclBhcmFtZXRlcnMmKSBPVkVSUklERTsKICNlbmRpZgog
CkBAIC0xNzQsOCArMTc0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZWxlbWVudERp
ZEZvY3VzKGNvbnN0IE5vZGUqKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZWxlbWVu
dERpZEJsdXIoY29uc3QgTm9kZSopIE9WRVJSSURFIHsgfQogCisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpIE9WRVJSSURFIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgT1ZF
UlJJREUgeyB9CisjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXco
Y29uc3QgSW50UmVjdCYpIGNvbnN0IE9WRVJSSURFIHsgfQogCkBAIC0xOTIsNiArMTk0LDI4IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQorI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGRpZFByZXZlbnREZWZhdWx0Rm9yRXZlbnQoKSBPVkVS
UklERSB7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTW9iaWxlRG9jVHlw
ZSgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Njcm9sbE5vdGlmaWNh
dGlvbnMoRnJhbWUqLCBib29sKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb2JzZXJ2
ZWRDb250ZW50Q2hhbmdlKEZyYW1lKikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyQ29udGVudENoYW5nZU9ic2VydmVycyhGcmFtZSopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoRnJhbWUqKSBP
VkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkTGF5b3V0KExheW91dFR5cGUpIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydE92ZXJmbG93U2Nyb2xsKCkgT1ZFUlJJ
REUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZE92ZXJmbG93U2Nyb2xsKCkgT1ZFUlJJREUg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3VwcHJlc3NGb3JtTm90aWZpY2F0aW9ucygpIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlRm9ybU5vdGlmaWNhdGlvbnMoKSBPVkVS
UklERSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKE5v
ZGUqLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1MYXllciosIGNvbnN0IEludFNpemUmLCBib29s
LCBib29sKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5
ZXIoTm9kZSosIFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREUgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgd2ViQXBwT3JpZW50YXRpb25zVXBkYXRlZCgpIE9WRVJSSURFIHsg
fTsKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyNpZiBQTEFURk9STShJT1MpCiAgICAgdmly
dHVhbCBib29sIGlzU3RvcHBpbmcoKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlm
CiAKQEAgLTIyMCw2ICsyNDQsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFrZVJl
cHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVyKikgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGZvcmNlTGF5b3V0KCkgT1ZFUlJJREUgeyB9CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZp
cnR1YWwgdm9pZCBmb3JjZUxheW91dFdpdGhvdXRSZWNhbGN1bGF0aW5nU3R5bGVzKCkgT1ZFUlJJ
REUgeyB9CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXRGb3JOb25IVE1MKCkg
T1ZFUlJJREUgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29waWVzT25TY3JvbGwoKSBPVkVS
UklERSB7IH0KQEAgLTIzNyw2ICsyNjQsMTEgQEAgcHVibGljOgogI2lmIFVTRShQUk9URUNUSU9O
X1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiAgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25z
dCBQcm90ZWN0aW9uU3BhY2UmKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCisK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBjb25uZWN0aW9uUHJvcGVydGllcyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpIE9W
RVJSSURFIHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZywgaW50KSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5p
c2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykgT1ZFUlJJREUgeyB9CkBA
IC0zMjUsNiArMzU3LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9y
bURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSop
IE9WRVJSSURFIHsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVz
dG9yZUZyYW1lSGllcmFyY2h5Rm9yQ2FjaGVkRnJhbWUoKSBPVkVSUklERSB7IH0KKyNlbmRpZgog
ICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkgT1ZFUlJJ
REUgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2F2ZVRvUGFnZUNhY2hlKCkgT1ZFUlJJREUg
eyB9CkBAIC00NDksNiArNDg0LDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFdp
bGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KikgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKSBPVkVSUklERSB7IH0KIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIHZvaWQgc3VwcHJlc3NTZWxlY3Rpb25Ob3Rp
ZmljYXRpb25zKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVTZWxlY3Rp
b25Ob3RpZmljYXRpb25zKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0RGVs
YXlpbmdBbmRDb2FsZXNjaW5nQ29udGVudENoYW5nZU5vdGlmaWNhdGlvbnMoKSBPVkVSUklERSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcERlbGF5aW5nQW5kQ29hbGVzY2luZ0NvbnRlbnRDaGFu
Z2VOb3RpZmljYXRpb25zKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHdyaXRlRGF0
YVRvUGFzdGVib2FyZChOU0RpY3Rpb25hcnkqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIE5T
QXJyYXkqIHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rpb24oKSBPVkVS
UklERSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOU0FycmF5KiByZWFkRGF0YUZy
b21QYXN0ZWJvYXJkKE5TU3RyaW5nKiwgaW50KSBPVkVSUklERSB7IHJldHVybiBudWxscHRyOyB9
CisgICAgdmlydHVhbCBib29sIGhhc1JpY2hseUVkaXRhYmxlU2VsZWN0aW9uKCkgT1ZFUlJJREUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGludCBnZXRQYXN0ZWJvYXJkSXRlbXNDb3Vu
dCgpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIERvY3VtZW50RnJhZ21lbnQq
IGRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaW50KSBPVkVSUklERSB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1zVHdvU3RlcFBhc3RlKERvY3VtZW50RnJh
Z21lbnQqKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgaW50IHBhc3Rl
Ym9hcmRDaGFuZ2VDb3VudCgpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5nKE5T
VVJMKikgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgRG9jdW1lbnRGcmFnbWVu
dCogZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmlu
ZyosIFZlY3RvcjxSZWZQdHI8QXJjaGl2ZVJlc291cmNlPj4mKSBPVkVSUklERSB7IHJldHVybiAw
OyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYWIxYWYzZTE0MDY3
YWYzYjQ2YjEzMzZkOTBlNWEyOGFjNDNlMmVhZC4uMDcyOWNlNjllNGU4ZmU4NDU5ZmNjYTYyYTg1
MGU5ZThiZjEzYzY5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0x
MzIsNiArMTMyLDE0IEBACiAjaW5jbHVkZSAiQXJjaGl2ZS5oIgogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShJT1MpCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiTWVtb3J5UHJl
c3N1cmVIYW5kbGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJS
dW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIK
KyNpbmNsdWRlICJXS0NvbnRlbnRPYnNlcnZhdGlvbi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMTQzLDYgKzE1MSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsK
IAogc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdEFjY2VwdEhlYWRlcltdID0gInRleHQvaHRtbCxh
cHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOCI7CiBz
dGF0aWMgZG91YmxlIHN0b3JlZFRpbWVPZkxhc3RDb21wbGV0ZWRMb2FkOworI2lmIFBMQVRGT1JN
KElPUykKK3N0YXRpYyBjb25zdCBpbnQgbWVtb3J5TGV2ZWxUaHJlc2hvbGRUb1BydW5lUGFnZUNh
Y2hlID0gMjA7CisjZW5kaWYKIAogYm9vbCBpc0JhY2tGb3J3YXJkTG9hZFR5cGUoRnJhbWVMb2Fk
VHlwZSB0eXBlKQogewpAQCAtMTg1LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICB+RnJhbWVQcm9n
cmVzc1RyYWNrZXIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2luUHJvZ3Jlc3MgfHwgbV9m
cmFtZS5wYWdlKCkpOwotICAgICAgICBpZiAobV9pblByb2dyZXNzKQorICAgICAgICBpZiAobV9p
blByb2dyZXNzICYmIG1fZnJhbWUucGFnZSgpKQogICAgICAgICAgICAgbV9mcmFtZS5wYWdlKCkt
PnByb2dyZXNzKCkucHJvZ3Jlc3NDb21wbGV0ZWQoJm1fZnJhbWUpOwogICAgIH0KIApAQCAtMjM5
LDYgKzI1MCw3IEBAIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSYgZnJhbWUsIEZyYW1l
TG9hZGVyQ2xpZW50JiBjbGllbnQpCiAgICAgLCBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZShmYWxz
ZSkKICAgICAsIG1fc3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lKGZhbHNlKQogICAgICwgbV9jdXJy
ZW50TmF2aWdhdGlvbkhhc1Nob3duQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGZhbHNlKQorICAg
ICwgbV9sb2Fkc1N5bmNocm9ub3VzbHkoZmFsc2UpCiAgICAgLCBtX2ZvcmNlZFNhbmRib3hGbGFn
cyhTYW5kYm94Tm9uZSkKIHsKIH0KQEAgLTI3MCw2ICsyODIsMzIgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6aW5pdCgpCiAgICAgbV9wcm9ncmVzc1RyYWNrZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZyYW1l
UHJvZ3Jlc3NUcmFja2VyPihtX2ZyYW1lKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQg
RnJhbWVMb2FkZXI6OmluaXRGb3JTeW50aGVzaXplZERvY3VtZW50KGNvbnN0IFVSTCYgdXJsKQor
eworICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vOTcxNjg5Nz4gVmVyaWZ5IE9wZW5Tb3Vy
Y2Ugcjg5MzEyIHdhcyBtZXJnZWQgY29ycmVjdGx5CisgICAgVU5VU0VEX1BBUkFNKHVybCk7CisK
KyAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciA9IG1fY2xpZW50LmNyZWF0ZURvY3Vt
ZW50TG9hZGVyKFJlc291cmNlUmVxdWVzdChVUkwoUGFyc2VkVVJMU3RyaW5nLCBlbXB0eVN0cmlu
ZygpKSksIFN1YnN0aXR1dGVEYXRhKCkpOworICAgIGxvYWRlci0+c2V0RnJhbWUoJm1fZnJhbWUp
OworICAgIGxvYWRlci0+c2V0UmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShVUkwoKSwgQVNDSUlM
aXRlcmFsKCJ0ZXh0L2h0bWwiKSwgMCwgU3RyaW5nKCksIFN0cmluZygpKSk7CisgICAgbG9hZGVy
LT5zZXRDb21taXR0ZWQodHJ1ZSk7CisgICAgc2V0RG9jdW1lbnRMb2FkZXIobG9hZGVyLmdldCgp
KTsKKworICAgIG1fc3RhdGVNYWNoaW5lLmFkdmFuY2VUbyhGcmFtZUxvYWRlclN0YXRlTWFjaGlu
ZTo6RGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50KTsKKyAgICBtX3N0YXRlTWFjaGluZS5h
ZHZhbmNlVG8oRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmU6OkRpc3BsYXlpbmdJbml0aWFsRW1wdHlE
b2N1bWVudFBvc3RDb21taXQpOworICAgIG1fc3RhdGVNYWNoaW5lLmFkdmFuY2VUbyhGcmFtZUxv
YWRlclN0YXRlTWFjaGluZTo6Q29tbWl0dGVkRmlyc3RSZWFsTG9hZCk7CisgICAgbV9jbGllbnQu
dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpOworCisgICAgbV9kaWRDYWxsSW1wbGlj
aXRDbG9zZSA9IHRydWU7CisgICAgbV9pc0NvbXBsZXRlID0gdHJ1ZTsKKyAgICBtX3N0YXRlID0g
RnJhbWVTdGF0ZUNvbXBsZXRlOworICAgIG1fbmVlZHNDbGVhciA9IHRydWU7CisKKyAgICBtX25l
dHdvcmtpbmdDb250ZXh0ID0gbV9jbGllbnQuY3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKTsKK30K
KyNlbmRpZgorCiB2b2lkIEZyYW1lTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJz
KQogewogICAgIGlmIChtX2RvY3VtZW50TG9hZGVyKQpAQCAtNzg5LDYgKzgyNywxMyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjaGVja0NvbXBsZXRlZCgpCiAgICAgbV9yZXF1ZXN0ZWRIaXN0b3J5SXRl
bSA9IDA7CiAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5zZXRSZWFkeVN0YXRlKERvY3VtZW50OjpD
b21wbGV0ZSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgVVJMIHVybCA9IG1fZnJhbWUuZG9j
dW1lbnQoKS0+dXJsKCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIC8vIEZJWE1F
OiA8cmRhcjovL3Byb2JsZW0vOTcxNjg5Nz4gVmVyaWZ5IE9wZW5Tb3VyY2Ugcjg5MzEyIHdhcyBt
ZXJnZWQgY29ycmVjdGx5CisgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+c2V0VVJMKGFjdGl2
ZURvY3VtZW50TG9hZGVyKCktPmRvY3VtZW50VVJMKCkpOworI2VuZGlmCisKICAgICBjaGVja0Nh
bGxJbXBsaWNpdENsb3NlKCk7IC8vIGlmIHdlIGRpZG4ndCBkbyBpdCBiZWZvcmUKIAogICAgIG1f
ZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLnN0YXJ0VGltZXIoKTsKQEAgLTE0NTEsNiArMTQ5
NiwxMyBAQCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIEZyYW1lTG9hZGVyOjppbml0aWFsUmVxdWVz
dCgpIGNvbnN0CiAKIGJvb2wgRnJhbWVMb2FkZXI6OndpbGxMb2FkTWVkaWFFbGVtZW50VVJMKFVS
TCYgdXJsKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBNb2JpbGVTdG9yZSBkZXBlbmRz
IG9uIHRoZSBpT1MgNC4wIGVyYSBjbGllbnQgZGVsZWdhdGUgbWV0aG9kIGJlY2F1c2Ugd2ViVmll
dzpyZXNvdXJjZTp3aWxsU2VuZFJlcXVlc3Q6cmVkaXJlY3RSZXNwb25zZTpmcm9tRGF0YVNvdXJj
ZQorICAgIC8vIGRvZXNuJ3QgbGV0IHRoZW0gdGVsbCB3aGVuIGEgbG9hZCByZXF1ZXN0IGlzIGNv
bWluZyBmcm9tIGEgbWVkaWEgZWxlbWVudC4gU2VlIDxyZGFyOi8vcHJvYmxlbS84MjY2OTE2PiBm
b3IgbW9yZSBkZXRhaWxzLgorICAgIGlmIChhcHBsaWNhdGlvbklzTW9iaWxlU3RvcmUoKSkKKyAg
ICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZExvYWRNZWRpYUVsZW1lbnRVUkwodXJsKTsKKyNl
bmRpZgorCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKIAogICAgIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcjsKQEAgLTE2MDMsNyArMTY1NSwxNSBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpzdG9wQWxsTG9hZGVycyhDbGVhclByb3Zpc2lvbmFsSXRlbVBvbGljeSBjbGVhclByb3Zpc2lv
bmFsSXRlbQogdm9pZCBGcmFtZUxvYWRlcjo6c3RvcEZvclVzZXJDYW5jZWwoYm9vbCBkZWZlckNo
ZWNrTG9hZENvbXBsZXRlKQogewogICAgIHN0b3BBbGxMb2FkZXJzKCk7Ci0gICAgCisKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gTGF5IG91dCBpbW1lZGlhdGVseSB3aGVuIHN0b3BwaW5nIHRv
IGltbWVkaWF0ZWx5IGNsZWFyIHRoZSBvbGQgcGFnZSBpZiB3ZSBqdXN0IGNvbW1pdHRlZCB0aGlz
IG9uZQorICAgIC8vIGJ1dCBoYXZlbid0IGxhaWQgb3V0L3BhaW50ZWQgeWV0LgorICAgIC8vIEZJ
WE1FOiBJcyB0aGlzIGJlaGF2aW9yIHNwZWNpZmljIHRvIGlPUz8gT3Igc2hvdWxkIHdlIGV4cG9z
ZSBhIHNldHRpbmcgdG8gdG9nZ2xlIHRoaXMgYmVoYXZpb3I/CisgICAgaWYgKG1fZnJhbWUudmll
dygpICYmICFtX2ZyYW1lLnZpZXcoKS0+ZGlkRmlyc3RMYXlvdXQoKSkKKyAgICAgICAgbV9mcmFt
ZS52aWV3KCktPmxheW91dCgpOworI2VuZGlmCisKICAgICBpZiAoZGVmZXJDaGVja0xvYWRDb21w
bGV0ZSkKICAgICAgICAgc2NoZWR1bGVDaGVja0xvYWRDb21wbGV0ZSgpOwogICAgIGVsc2UgaWYg
KG1fZnJhbWUucGFnZSgpKQpAQCAtMTcyMiw2ICsxNzgyLDI2IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKSA/IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCku
dXRmOCgpLmRhdGEoKSA6ICIiLAogICAgICAgICBwZGwgPyBwZGwtPnVybCgpLnN0cmluZ0NlbnRl
ckVsbGlwc2l6ZWRUb0xlbmd0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiPG5vIHByb3Zpc2lvbmFsIERv
Y3VtZW50TG9hZGVyPiIpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEluIHRoZSBjYXNl
IHdoZXJlIHdlIGFyZSBub3QgbmF2aWdhdGluZyB0byBhIGNhY2hlZCBwYWdlLCBhbmQgdGhlIHN5
c3RlbSBpcyB1bmRlciAoc3BlY3VsYXRpdmUpIG1lbW9yeSBwcmVzc3VyZSwKKyAgICAvLyB3ZSBj
YW4gdHJ5IHRvIHByZWVtcHRpdmVseSByZWxlYXNlIHNvbWUgb2YgdGhlIHBhZ2VzIGluIHRoZSBj
YWNoZS4KKyAgICAvLyBGSVhNRTogUmlnaHQgbm93IHRoZSBjYXBhY2l0eSBpcyAxIG9uIGlPUyBk
ZXZpY2VzIHdpdGggMjU2IE1CIG9mIFJBTSwgc28gdGhpcyB3aWxsIGFsd2F5cyBibG93IGF3YXkg
dGhlIHdob2xlCisgICAgLy8gcGFnZSBjYWNoZS4gV2UgY291bGQgc3RpbGwgcHJlZW1wdGl2ZWx5
IHBydW5lIHRoZSBwYWdlIGNhY2hlIHdoaWxlIG5hdmlnYXRpbmcgdG8gYSBjYWNoZWQgcGFnZSBp
ZiBjYXBhY2l0eSA+IDEuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS8xMTc3OTg0Nj4gZm9y
IG1vcmUgZGV0YWlscy4KKyAgICBpZiAoIWNhY2hlZFBhZ2UpIHsKKyAgICAgICAgaWYgKG1lbW9y
eVByZXNzdXJlSGFuZGxlcigpLmhhc1JlY2VpdmVkTWVtb3J5UHJlc3N1cmUoKSkgeworICAgICAg
ICAgICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIGJlY2F1c2UgdW5k
ZXIgbWVtb3J5IHByZXNzdXJlIGF0OiAlcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgICAg
ICAgICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBjYWNoZSB0byAwIGR1ZSB0byBtZW1v
cnkgcHJlc3N1cmUiKTsKKyAgICAgICAgICAgIC8vIERvbid0IGNhY2hlIGFueSBwYWdlIGlmIHdl
IGFyZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCisgICAgICAgICAgICBwYWdlQ2FjaGUoKS0+cHJ1
bmVUb0NhcGFjaXR5Tm93KDApOworICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbU1lbW9yeUxldmVs
KCkgPD0gbWVtb3J5TGV2ZWxUaHJlc2hvbGRUb1BydW5lUGFnZUNhY2hlKSB7CisgICAgICAgICAg
ICBMT0coTWVtb3J5UHJlc3N1cmUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSBzeXN0ZW0g
bWVtb3J5IGxldmVsIGlzICVkIGF0OiAlcyIsIHN5c3RlbU1lbW9yeUxldmVsKCksIF9fUFJFVFRZ
X0ZVTkNUSU9OX18pOworICAgICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBj
YWNoZSB0byAlZCBkdWUgdG8gbG93IG1lbW9yeSAobGV2ZWwgJWQgbGVzcyBvciBlcXVhbCB0byAl
ZCB0aHJlc2hvbGQpIiwgcGFnZUNhY2hlKCktPmNhcGFjaXR5KCkgLyAyLCBzeXN0ZW1NZW1vcnlM
ZXZlbCgpLCBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUpOworICAgICAgICAg
ICAgcGFnZUNhY2hlKCktPnBydW5lVG9DYXBhY2l0eU5vdyhwYWdlQ2FjaGUoKS0+Y2FwYWNpdHko
KSAvIDIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICB3aWxsVHJhbnNpdGlvblRv
Q29tbWl0dGVkKCk7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjYWNoZSB0
aGUgcGFnZSB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gaW50byB0aGUgYmFjay9mb3J3YXJk
IGNhY2hlLgpAQCAtMTc1MiwxMyArMTgzMiwyMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQ
cm92aXNpb25hbExvYWQoKQogICAgICAgICBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNo
ZWQoZmFsc2UpOwogICAgIAogICAgIGlmIChjYWNoZWRQYWdlICYmIGNhY2hlZFBhZ2UtPmRvY3Vt
ZW50KCkpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIC8vIEZJWE1FOiBDYWNoZWRQYWdl
OjpyZXN0b3JlKCkgd291bGQgZGlzcGF0Y2ggdmlld3BvcnQgY2hhbmdlIG5vdGlmaWNhdGlvbi4g
SG93ZXZlciBVSUtpdCBleHBlY3RzIGxvYWQKKyAgICAgICAgLy8gY29tbWl0IHRvIGhhcHBlbiBi
ZWZvcmUgYW55IGNoYW5nZXMgdG8gdmlld3BvcnQgYXJndW1lbnRzIGFuZCBkZWFsaW5nIHdpdGgg
dGhpcyB0aGVyZSBpcyBkaWZmaWN1bHQuCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5jaHJvbWUo
KS5zZXREaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNzZWQodHJ1ZSk7CisjZW5k
aWYKICAgICAgICAgcHJlcGFyZUZvckNhY2hlZFBhZ2VSZXN0b3JlKCk7CiAKICAgICAgICAgLy8g
RklYTUU6IFRoaXMgQVBJIHNob3VsZCBiZSB0dXJuZWQgYXJvdW5kIHNvIHRoYXQgd2UgZ3JvdW5k
IENhY2hlZFBhZ2UgaW50byB0aGUgUGFnZS4KICAgICAgICAgY2FjaGVkUGFnZS0+cmVzdG9yZSgq
bV9mcmFtZS5wYWdlKCkpOwogCiAgICAgICAgIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpOwotCisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+Y2hyb21lKCkuc2V0RGlz
cGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2VTdXBwcmVzc2VkKGZhbHNlKTsKKyAgICAgICAgbV9m
cmFtZS5wYWdlKCktPmNocm9tZSgpLmRpc3BhdGNoVmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdl
KG1fZnJhbWUucGFnZSgpLT52aWV3cG9ydEFyZ3VtZW50cygpKTsKKyNlbmRpZgogICAgICAgICAv
LyBJZiB3ZSBoYXZlIGEgdGl0bGUgbGV0IHRoZSBXZWJWaWV3IGtub3cgYWJvdXQgaXQuIAogICAg
ICAgICBTdHJpbmdXaXRoRGlyZWN0aW9uIHRpdGxlID0gbV9kb2N1bWVudExvYWRlci0+dGl0bGUo
KTsKICAgICAgICAgaWYgKCF0aXRsZS5pc051bGwoKSkKQEAgLTE3NzUsMTAgKzE4NjMsMTkgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKICAgICAgICAgaGlzdG9y
eSgpLnVwZGF0ZUZvckNsaWVudFJlZGlyZWN0KCk7CiAKICAgICBpZiAobV9sb2FkaW5nRnJvbUNh
Y2hlZFBhZ2UpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIC8vIE5vdGUsIGRpZFJlY2Vp
dmVEb2NUeXBlIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBmb3IgY2FjaGVkIHBhZ2VzLiBTZWUg
PHJkYXI6Ly9wcm9ibGVtLzU5MDY3NTg+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIGlmICht
X2ZyYW1lLmRvY3VtZW50KCktPmRvY3R5cGUoKSAmJiBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAg
ICAgIG1fZnJhbWUucGFnZSgpLT5jaHJvbWUoKS5kaWRSZWNlaXZlRG9jVHlwZSgmbV9mcmFtZSk7
CisjZW5kaWYKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudERpZFJlc3VtZUZy
b21QYWdlQ2FjaGUoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gRm9yY2UgYSBsYXlvdXQgdG8g
dXBkYXRlIHZpZXcgc2l6ZSBhbmQgdGhlcmVieSB1cGRhdGUgc2Nyb2xsYmFycy4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIG1fY2xpZW50LmZvcmNlTGF5b3V0V2l0aG91dFJlY2FsY3VsYXRp
bmdTdHlsZXMoKTsKKyNlbHNlCiAgICAgICAgIG1fZnJhbWUudmlldygpLT5mb3JjZUxheW91dCgp
OworI2VuZGlmCiAKICAgICAgICAgY29uc3QgUmVzcG9uc2VWZWN0b3ImIHJlc3BvbnNlcyA9IG1f
ZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlcygpOwogICAgICAgICBzaXplX3QgY291bnQgPSByZXNw
b25zZXMuc2l6ZSgpOwpAQCAtMTg0MSw3ICsxOTM4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJh
bnNpdGlvblRvQ29tbWl0dGVkKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UpCiAKICAgICBzZXRTdGF0
ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSk7CiAKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1fZnJh
bWUuaXNNYWluRnJhbWUoKSkKICAgICAgICAgbV9mcmFtZS5wYWdlKCktPmNocm9tZSgpLmNsaWVu
dCgpLm5lZWRUb3VjaEV2ZW50cyhmYWxzZSk7CiAjZW5kaWYKQEAgLTIyOTksNiArMjM5NiwxMyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpkaWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVz
KQogCiB2b2lkIEZyYW1lTG9hZGVyOjpkaWRGaXJzdExheW91dCgpCiB7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIC8vIE9ubHkgc2VuZCBsYXlvdXQtcmVsYXRlZCBkZWxlZ2F0ZSBjYWxsYmFja3Mg
c3luY2hyb25vdXNseSBmb3IgdGhlIG1haW4gZnJhbWUgdG8KKyAgICAvLyBhdm9pZCByZWVudGVy
aW5nIGxheW91dCBmb3IgdGhlIG1haW4gZnJhbWUgd2hpbGUgZGVsaXZlcmluZyBhIGxheW91dC1y
ZWxhdGVkIGRlbGVnYXRlCisgICAgLy8gY2FsbGJhY2sgZm9yIGEgc3ViZnJhbWUuCisgICAgaWYg
KCZtX2ZyYW1lICE9ICZtX2ZyYW1lLnBhZ2UoKS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVy
bjsKKyNlbmRpZgogICAgIGlmIChtX2ZyYW1lLnBhZ2UoKSAmJiBpc0JhY2tGb3J3YXJkTG9hZFR5
cGUobV9sb2FkVHlwZSkpCiAgICAgICAgIGhpc3RvcnkoKS5yZXN0b3JlU2Nyb2xsUG9zaXRpb25B
bmRWaWV3U3RhdGUoKTsKIApAQCAtMzI1Miw2ICszMzU2LDEzIEBAIFJlc291cmNlRXJyb3IgRnJh
bWVMb2FkZXI6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkg
Y29uc3QKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBGcmFtZUxvYWRlcjo6Y29ubmVjdGlvblByb3BlcnRpZXMoUmVz
b3VyY2VMb2FkZXIqIGxvYWRlcikKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29ubmVjdGlvblBy
b3BlcnRpZXMobG9hZGVyLT5kb2N1bWVudExvYWRlcigpLCBsb2FkZXItPmlkZW50aWZpZXIoKSk7
Cit9CisjZW5kaWYKKwogU3RyaW5nIEZyYW1lTG9hZGVyOjpyZWZlcnJlcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXIgPyBtX2RvY3VtZW50TG9hZGVyLT5yZXF1ZXN0KCku
aHR0cFJlZmVycmVyKCkgOiAiIjsKQEAgLTM0NjMsMTQgKzM1NzQsMTYgQEAgUGFzc1JlZlB0cjxG
cmFtZT4gY3JlYXRlV2luZG93KEZyYW1lKiBvcGVuZXJGcmFtZSwgRnJhbWUqIGxvb2t1cEZyYW1l
LCBjb25zdCBGcmEKICAgICAvLyBzcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSB2aWV3cG9ydC4gV2Ug
Y2FuIG9ubHkgcmVzaXplIHRoZSB3aW5kb3csIHNvIGFkanVzdAogICAgIC8vIGZvciB0aGUgZGlm
ZmVyZW5jZSBiZXR3ZWVuIHRoZSB3aW5kb3cgc2l6ZSBhbmQgdGhlIHZpZXdwb3J0IHNpemUuCiAK
Ky8vIEZJWE1FOiBXZSBzaG91bGQgcmVjb25jaWxlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB2aWV3
cG9ydCBhcmd1bWVudHMgYmV0d2VlbiBpT1MgYW5kIE9wZW5Tb3VyY2UuCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCA9IHBhZ2UtPmNocm9tZSgpLndpbmRvd1Jl
Y3QoKTsKLSAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplID0gcGFnZS0+Y2hyb21lKCkucGFnZVJl
Y3QoKS5zaXplKCk7Ci0KICAgICBpZiAoZmVhdHVyZXMueFNldCkKICAgICAgICAgd2luZG93UmVj
dC5zZXRYKGZlYXR1cmVzLngpOwogICAgIGlmIChmZWF0dXJlcy55U2V0KQogICAgICAgICB3aW5k
b3dSZWN0LnNldFkoZmVhdHVyZXMueSk7CisKICAgICAvLyBaZXJvIHdpZHRoIGFuZCBoZWlnaHQg
bWVhbiB1c2luZyBkZWZhdWx0IHNpemUsIG5vdCBtaW51bXVtIG9uZS4KKyAgICBGbG9hdFNpemUg
dmlld3BvcnRTaXplID0gcGFnZS0+Y2hyb21lKCkucGFnZVJlY3QoKS5zaXplKCk7CiAgICAgaWYg
KGZlYXR1cmVzLndpZHRoU2V0ICYmIGZlYXR1cmVzLndpZHRoKQogICAgICAgICB3aW5kb3dSZWN0
LnNldFdpZHRoKGZlYXR1cmVzLndpZHRoICsgKHdpbmRvd1JlY3Qud2lkdGgoKSAtIHZpZXdwb3J0
U2l6ZS53aWR0aCgpKSk7CiAgICAgaWYgKGZlYXR1cmVzLmhlaWdodFNldCAmJiBmZWF0dXJlcy5o
ZWlnaHQpCkBAIC0zNDgwLDYgKzM1OTMsMTcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gY3JlYXRlV2lu
ZG93KEZyYW1lKiBvcGVuZXJGcmFtZSwgRnJhbWUqIGxvb2t1cEZyYW1lLCBjb25zdCBGcmEKICAg
ICBGbG9hdFJlY3QgbmV3V2luZG93UmVjdCA9IERPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChw
YWdlLCB3aW5kb3dSZWN0KTsKIAogICAgIHBhZ2UtPmNocm9tZSgpLnNldFdpbmRvd1JlY3QobmV3
V2luZG93UmVjdCk7CisjZWxzZQorICAgIC8vIE9uIGlPUywgd2lkdGggYW5kIGhlaWdodCByZWZl
ciB0byB0aGUgdmlld3BvcnQgZGltZW5zaW9ucy4KKyAgICBWaWV3cG9ydEFyZ3VtZW50cyBhcmd1
bWVudHM7CisgICAgLy8gWmVybyB3aWR0aCBhbmQgaGVpZ2h0IG1lYW4gdXNpbmcgZGVmYXVsdCBz
aXplLCBub3QgbWluaW11bSBvbmUuCisgICAgaWYgKGZlYXR1cmVzLndpZHRoU2V0ICYmIGZlYXR1
cmVzLndpZHRoKQorICAgICAgICBhcmd1bWVudHMud2lkdGggPSBmZWF0dXJlcy53aWR0aDsKKyAg
ICBpZiAoZmVhdHVyZXMuaGVpZ2h0U2V0ICYmIGZlYXR1cmVzLmhlaWdodCkKKyAgICAgICAgYXJn
dW1lbnRzLmhlaWdodCA9IGZlYXR1cmVzLmhlaWdodDsKKyAgICBwYWdlLT5tYWluRnJhbWUoKS5z
ZXRWaWV3cG9ydEFyZ3VtZW50cyhhcmd1bWVudHMpOworI2VuZGlmCisKICAgICBwYWdlLT5jaHJv
bWUoKS5zaG93KCk7CiAKICAgICBjcmVhdGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmgKaW5kZXggNDYzMjhkNDkxYmUwN2ZlMGExZDM2OWNkZWY0MDE5OTViZjBlMjlmMS4u
YjQ1M2ZjZTczMTI2ODIzODkyNjljOTA2ZDQyMzhlNGNhODUyYTVlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTg5LDYgKzg5LDkgQEAgcHVibGljOgogICAgIH5GcmFtZUxv
YWRlcigpOwogCiAgICAgdm9pZCBpbml0KCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQg
aW5pdEZvclN5bnRoZXNpemVkRG9jdW1lbnQoY29uc3QgVVJMJik7CisjZW5kaWYKIAogICAgIEZy
YW1lJiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIApAQCAtMTU1LDYgKzE1OCw5
IEBAIHB1YmxpYzoKICAgICBGcmFtZVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZTsgfQogICAgIHN0YXRpYyBkb3VibGUgdGltZU9mTGFzdENvbXBsZXRlZExvYWQoKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjb25uZWN0aW9u
UHJvcGVydGllcyhSZXNvdXJjZUxvYWRlciopOworI2VuZGlmCiAgICAgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QoKSBjb25zdDsKICAgICBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIGluaXRpYWxSZXF1ZXN0KCkgY29uc3Q7CiAgICAgdm9pZCByZWNlaXZlZE1haW5SZXNvdXJj
ZUVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKQEAgLTI0MSw2ICsyNDcsOSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogCisgICAgdm9pZCBzZXRMb2Fk
c1N5bmNocm9ub3VzbHkoYm9vbCBsb2Fkc1N5bmNocm9ub3VzbHkpIHsgbV9sb2Fkc1N5bmNocm9u
b3VzbHkgPSBsb2Fkc1N5bmNocm9ub3VzbHk7IH0KKyAgICBib29sIGxvYWRzU3luY2hyb25vdXNs
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNTeW5jaHJvbm91c2x5OyB9CisKICAgICBGcmFtZUxv
YWRlclN0YXRlTWFjaGluZSogc3RhdGVNYWNoaW5lKCkgY29uc3QgeyByZXR1cm4gJm1fc3RhdGVN
YWNoaW5lOyB9CiAKICAgICBGcmFtZSogZmluZEZyYW1lRm9yTmF2aWdhdGlvbihjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIERvY3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IDApOwpAQCAtNDM1LDkg
KzQ0NCwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9u
OwogICAgIGJvb2wgbV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2U7CiAgICAgYm9vbCBtX3N1cHByZXNz
T3BlbmVySW5OZXdGcmFtZTsKLSAgICAKKwogICAgIGJvb2wgbV9jdXJyZW50TmF2aWdhdGlvbkhh
c1Nob3duQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsOwogCisgICAgYm9vbCBtX2xvYWRzU3luY2hy
b25vdXNseTsKKwogICAgIFNhbmRib3hGbGFncyBtX2ZvcmNlZFNhbmRib3hGbGFnczsKIAogICAg
IFJlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCA1ZGNlZjdkZDY1ZGI4
NGUwZDA4Y2JiOTk5OWZiYWU3OTdjYjdlZGQyLi5mY2JiY2I3NzE1NjUxNThlYTA1NDUxN2I4ZWQ1
MjY3ZjdlNWJjYjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQu
aApAQCAtMTE2LDYgKzExNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFrZVJlcHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVyKikgPSAwOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKSA9IDA7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXRXaXRob3V0UmVjYWxjdWxhdGluZ1N0eWxlcygp
ID0gMDsKKyNlbmRpZgogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXRGb3JOb25IVE1M
KCkgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDb3BpZXNPblNjcm9sbCgpID0gMDsK
QEAgLTEzMiw2ICsxMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVTRShQUk9URUNU
SU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50
aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKSA9IDA7CiAjZW5kaWYKKworI2lm
IFBMQVRGT1JNKElPUykKKyAgICAgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBjb25uZWN0aW9uUHJvcGVydGllcyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllcikgPSAwOworI2VuZGlmCisKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
UmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgaW50IGRhdGFMZW5ndGgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcikgPSAwOwpAQCAtMjQ5LDYgKzI1Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRG
cmFtZShDYWNoZWRGcmFtZSopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25U
b0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopID0gMDsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZXN0b3JlRnJhbWVIaWVyYXJjaHlGb3JD
YWNoZWRGcmFtZSgpID0gMDsKKyNlbmRpZgogICAgICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlv
blRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpID0gMDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2F2ZVRvUGFnZUNhY2hlKCkgPSAwOwpAQCAtMjgxLDcgKzI5Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBj
b25zdCA9IDA7IC8vICJOYXZpZ2F0aW9uIiBoZXJlIG1lYW5zIGEgdHJhbnNpdGlvbiBmcm9tIG9u
ZSBwYWdlIHRvIGFub3RoZXIgdGhhdCBlbmRzIHVwIGluIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4K
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wg
bGlzdGVuID0gdHJ1ZSkgPSAwOwotICAgICAgICAKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAg
ICAgLy8gQWxsb3cgYW4gYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8gcmV0cmlldmUgYSBGcmFtZSBw
YXJlbnQgaWYgdGhlcmUncyBubyBQbGF0Zm9ybVdpZGdldC4KICAgICAgICAgdmlydHVhbCBSZW1v
dGVBWE9iamVjdFJlZiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkgPSAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKaW5kZXggZDU2NTk4ZjQ5NDJhZGRj
ODEwMGJmZTA5NTcxMTM1NmViNTc3YjQxMS4uZWJjMTE4MmNmOGEwYTJiNzQxNmVhODRiZmNlOWI1
MmExOWMyNzIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIu
Y3BwCkBAIC0xMjcsNiArMTI3LDggQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCkKICAgICAvLyB0aHJvdWdoIHRvIHRoZSBjbGllbnQu
IEl0J3MgY3VycmVudGx5IHVzZWQgb25seSBmb3IgdGhlIFBERiB2aWV3IG9uIE1hYy4KICAgICBt
X2ZyYW1lLmxvYWRlcigpLmNsaWVudCgpLnJlc3RvcmVWaWV3U3RhdGUoKTsKIAorICAgIC8vIERv
bid0IHJlc3RvcmUgc2Nyb2xsIHBvaW50IG9uIGlPUyBhcyBGcmFtZUxvYWRlckNsaWVudDo6cmVz
dG9yZVZpZXdTdGF0ZSgpIGRvZXMgdGhhdC4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEZJ
WE1FOiBUaGVyZSBpcyBzb21lIHNjcm9sbGluZyByZWxhdGVkIHdvcmsgdGhhdCBuZWVkcyB0byBo
YXBwZW4gd2hlbmV2ZXIgYSBwYWdlIGdvZXMgaW50byB0aGUKICAgICAvLyBwYWdlIGNhY2hlIGFu
ZCBzaW1pbGFyIHdvcmsgdGhhdCBuZWVkcyB0byBvY2N1ciB3aGVuIGl0IGNvbWVzIG91dC4gVGhp
cyBpcyB3aGVyZSB3ZSBkbyB0aGUgd29yawogICAgIC8vIHRoYXQgbmVlZHMgdG8gaGFwcGVuIHdo
ZW4gd2UgZXhpdCwgYW5kIHRoZSB3b3JrIHRoYXQgbmVlZHMgdG8gaGFwcGVuIHdoZW4gd2UgZW50
ZXIgaXMgaW4KQEAgLTE0Niw2ICsxNDgsNyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0
b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKQogICAgICAgICAgICAgICAgIHZpZXctPnNl
dFNjcm9sbFBvc2l0aW9uKG1fY3VycmVudEl0ZW0tPnNjcm9sbFBvaW50KCkpOwogICAgICAgICB9
CiAgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUJhY2tG
b3J3YXJkTGlzdEZvckZyYWdtZW50U2Nyb2xsKCkKQEAgLTg3NSw0ICs4NzgsMTYgQEAgdm9pZCBI
aXN0b3J5Q29udHJvbGxlcjo6cmVwbGFjZVN0YXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBzdGF0ZU9iamUKICAgICBtX2ZyYW1lLmxvYWRlcigpLmNsaWVudCgpLnVwZGF0ZUds
b2JhbEhpc3RvcnkoKTsKIH0KIAordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVwbGFjZUN1cnJl
bnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQoreworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9wcmV2aW91c0l0ZW0gPSBudWxscHRyOworICAgIGlmIChtX3Byb3Zpc2lv
bmFsSXRlbSkKKyAgICAgICAgbV9wcm92aXNpb25hbEl0ZW0gPSBpdGVtOworICAgIGVsc2UKKyAg
ICAgICAgbV9jdXJyZW50SXRlbSA9IGl0ZW07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKaW5kZXggNGExNTA2MmEw
MmFiYjFkM2ExMjRkODU1NGQzMzE4NmI0Njk1NjQxOC4uNWQ2YzAxY2I2MTFiZDliYmQ1ZDRlNTdh
NDU2ZmJhOTY3YmFjYjc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3Rv
cnlDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9s
bGVyLmgKQEAgLTc2LDYgKzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3VycmVudEl0ZW0o
SGlzdG9yeUl0ZW0qKTsKICAgICB2b2lkIHNldEN1cnJlbnRJdGVtVGl0bGUoY29uc3QgU3RyaW5n
V2l0aERpcmVjdGlvbiYpOwogICAgIGJvb2wgY3VycmVudEl0ZW1TaG91bGRCZVJlcGxhY2VkKCkg
Y29uc3Q7CisgICAgdm9pZCByZXBsYWNlQ3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0qKTsKIAogICAg
IEhpc3RvcnlJdGVtKiBwcmV2aW91c0l0ZW0oKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzSXRl
bS5nZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGxhY2Vob2xk
ZXJEb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQu
aAppbmRleCBjZTIzMjc4MjdhNmE4MGJkNTQ5ZjY1YjA4OWVlYzNmMDY3YWQwNWEzLi43ZDg1ZjM5
YWMwOGRhN2NjOTNkYjg1NTUzMDJlYTMxZGY5MDgxNWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmgKQEAgLTMwLDIwICszMCwyMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBsYWNlaG9sZGVyRG9jdW1lbnQgRklOQUwgOiBwdWJsaWMg
RG9jdW1lbnQgeworY2xhc3MgUGxhY2Vob2xkZXJEb2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhY2Vob2xkZXJEb2N1bWVudD4gY3Jl
YXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBsYWNlaG9sZGVyRG9jdW1lbnQoZnJhbWUsIHVybCkpOwogICAgIH0KIAot
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUmVuZGVyVHJlZSgpIE9WRVJSSURFOwot
Citwcm90ZWN0ZWQ6CiAgICAgUGxhY2Vob2xkZXJEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0
IFVSTCYgdXJsKQogICAgICAgICA6IERvY3VtZW50KGZyYW1lLCB1cmwpCiAgICAgewogICAgIH0K
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUmVuZGVyVHJlZSgpIE9WRVJSSURF
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1BvbGlj
eUNoZWNrZXIuY3BwCmluZGV4IDFlZTgzMDIwODg4YjZiYmNkNWNkMDQ5NGRjZjljYTIyZGI0OGE5
OTguLjhlYWQ0MTNjY2U3YzBhZWQ5NDExOGFiYjAwYmZkYzJiYjMxNjMwZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Qb2xpY3lDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUG9saWN5Q2hlY2tlci5jcHAKQEAgLTQyLDYgKzQyLDE0IEBACiAjaW5jbHVk
ZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
IAorI2lmIFVTRShRVUlDS19MT09LKQorI2luY2x1ZGUgIlF1aWNrTG9vay5oIgorI2VuZGlmCisK
KyNpZiBVU0UoQ09OVEVOVF9GSUxURVJJTkcpCisjaW5jbHVkZSAiQ29udGVudEZpbHRlci5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUG9saWN5Q2hlY2tlcjo6UG9saWN5Q2hl
Y2tlcihGcmFtZSYgZnJhbWUpCkBAIC05Myw2ICsxMDEsMjMgQEAgdm9pZCBQb2xpY3lDaGVja2Vy
OjpjaGVja05hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBE
b2N1bWUKIAogICAgIG1fY2FsbGJhY2suc2V0KHJlcXVlc3QsIGZvcm1TdGF0ZS5nZXQoKSwgc3Rk
Ojptb3ZlKGZ1bmN0aW9uKSk7CiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICAvLyBBbHdheXMg
YWxsb3cgUXVpY2tMb29rLWdlbmVyYXRlZCBVUkxzIGJhc2VkIG9uIHRoZSBwcm90b2NvbCBzY2hl
bWUuCisgICAgaWYgKCFyZXF1ZXN0LmlzTnVsbCgpICYmIHJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
cyhRTFByZXZpZXdQcm90b2NvbCgpKSkgeworICAgICAgICBjb250aW51ZUFmdGVyTmF2aWdhdGlv
blBvbGljeShQb2xpY3lVc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyNp
ZiBVU0UoQ09OVEVOVF9GSUxURVJJTkcpCisgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVu
dExvYWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkgeworICAgICAgICBp
ZiAoZG9jdW1lbnRMb2FkZXItPmhhbmRsZUNvbnRlbnRGaWx0ZXJSZXF1ZXN0KHJlcXVlc3QpKSB7
CisgICAgICAgICAgICBjb250aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeShQb2xpY3lJZ25vcmUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBt
X2RlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xpY3kgPSB0cnVlOwogICAgIG1fZnJhbWUu
bG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KGFjdGlvbiwgcmVxdWVzdCwgZm9ybVN0YXRlLCBbdGhpc10oUG9saWN5QWN0aW9uIGFjdGlvbikg
ewogICAgICAgICBjb250aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeShhY3Rpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHAKaW5kZXggZGFlMWMyZGU1NWFjYzZkODE3
MDFlM2ZhYzZiYTA3MjY4OTZmNDVlMy4uOWFkZGYxMzUxOWJiNjgzNzU3OTBkODliY2Y1YWZmNDQ5
YjVmMTI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3BwCkBAIC0x
MTIsNiArMTEyLDE0IEBAIGJvb2wgUmVzb3VyY2VCdWZmZXI6Omhhc1B1cmdlYWJsZUJ1ZmZlcigp
IGNvbnN0CiAgICAgcmV0dXJuIG1fc2hhcmVkQnVmZmVyLT5oYXNQdXJnZWFibGVCdWZmZXIoKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgUmVzb3VyY2VCdWZmZXI6OnNob3VsZFVzZVB1
cmdlYWJsZU1lbW9yeShib29sIHVzZSkKK3sKKyAgICBBU1NFUlQobV9zaGFyZWRCdWZmZXIpOwor
ICAgIHNoYXJlZEJ1ZmZlcigpLT5zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkodXNlKTsKK30KKyNl
bmRpZgorCiB2b2lkIFJlc291cmNlQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZmZXIoKSBjb25z
dAogewogICAgIEFTU0VSVChtX3NoYXJlZEJ1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUJ1ZmZlci5oCmluZGV4IDVkYzJkOTU3MWIzNTNiZjQ5MDVjN2MyZjE0OTQxMzYxYTI3M2U2
ZTAuLjAxY2M0NjQyYTFjYjA3MzNlYjMwNDE0ZWI3MTIwMDVmZDIzNjVmNTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oCkBAIC03MSw3ICs3MSwxMSBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGhhc1B1cmdlYWJsZUJ1ZmZlcigpIGNvbnN0OwogICAgIHZvaWQgY3JlYXRlUHVy
Z2VhYmxlQnVmZmVyKCkgY29uc3Q7Ci0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9p
ZCBzaG91bGRVc2VQdXJnZWFibGVNZW1vcnkoYm9vbCk7CisjZW5kaWYKKwogICAgIC8vIEVuc3Vy
ZSB0aGlzIGJ1ZmZlciBoYXMgbm8gb3RoZXIgY2xpZW50cyBiZWZvcmUgY2FsbGluZyB0aGlzLgog
ICAgIFBhc3NPd25QdHI8UHVyZ2VhYmxlQnVmZmVyPiByZWxlYXNlUHVyZ2VhYmxlQnVmZmVyKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCmlu
ZGV4IDgzNjhiZTAxNjM5YzQxZmMwMjEzNzZkZWYwOWM4ODE4Mjk1MjNiZDIuLjFmOGUwMTVkMWU0
YjkyYjJjNTlhNDkyZTU0MjE0ZWM5MWVlZDE5NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNwcApAQCAtNDAsNiArNDAsMTAgQEAKICNpbmNsdWRl
ICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogCisjaWYg
VVNFKFFVSUNLX0xPT0spCisjaW5jbHVkZSAiUXVpY2tMb29rLmgiCisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBSZXNvdXJjZUxvYWROb3RpZmllcjo6UmVzb3VyY2VMb2FkTm90aWZp
ZXIoRnJhbWUmIGZyYW1lKQpAQCAtMTA3LDYgKzExMSwxMiBAQCB2b2lkIFJlc291cmNlTG9hZE5v
dGlmaWVyOjphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aQogCiB2b2lkIFJlc291cmNlTG9hZE5vdGlmaWVyOjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVz
dChEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKIHsKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICAvLyBBbHdheXMgYWxsb3cgUXVpY2tM
b29rLWdlbmVyYXRlZCBVUkxzIGJhc2VkIG9uIHRoZSBwcm90b2NvbCBzY2hlbWUuCisgICAgaWYg
KCFyZXF1ZXN0LmlzTnVsbCgpICYmIHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcyhRTFByZXZpZXdQ
cm90b2NvbCgpKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBTdHJpbmcgb2xkUmVx
dWVzdFVSTCA9IHJlcXVlc3QudXJsKCkuc3RyaW5nKCk7CiAgICAgbV9mcmFtZS5sb2FkZXIoKS5k
b2N1bWVudExvYWRlcigpLT5kaWRUZWxsQ2xpZW50QWJvdXRMb2FkKHJlcXVlc3QudXJsKCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmlu
ZGV4IGE4ZDIxOGRjYmE5NGNkZDZlMjE5MWNiZmEzNmZiYzFkOGFmMWMwNGQuLmY1OWQzMTE0N2Ew
NWE4Y2Y5MzdiMTlhOTNkNTI3MjZjMzRjNmRhMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC00MiwxMSArNDIsMjAgQEAKICNpbmNs
dWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
c0lPUy5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7CiAvLyBN
YXRjaCB0aGUgcGFyYWxsZWwgY29ubmVjdGlvbiBjb3VudCB1c2VkIGJ5IHRoZSBuZXR3b3JraW5n
IGxheWVyLgogc3RhdGljIHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0OworI2lm
ICFQTEFURk9STShJT1MpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdo
dEZvck5vbkhUVFBQcm90b2NvbHMgPSAyMDsKKyNlbHNlCisvLyBMaW1pdGluZyB0aGlzIHNlZW1z
IHRvIHJlZ3Jlc3MgcGVyZm9ybWFuY2UgaW4gc29tZSBsb2NhbCBjYXNlcyBzbyBsZXQncyBqdXN0
IG1ha2UgaXQgbGFyZ2UuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdo
dEZvck5vbkhUVFBQcm90b2NvbHMgPSAxMDAwMDsKKyNlbmRpZgogCiBSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6Okhvc3RJbmZvcm1hdGlvbiogUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJM
KGNvbnN0IFVSTCYgdXJsLCBDcmVhdGVIb3N0UG9saWN5IGNyZWF0ZUhvc3RQb2xpY3kpCiB7CkBA
IC0xMDQsNiArMTEzLDE1IEBAIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhCiAgICAgUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1l
LCByZXNvdXJjZSwgcmVxdWVzdCwgb3B0aW9ucyk7CiAgICAgaWYgKGxvYWRlcikKICAgICAgICAg
c2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSwgcHJpb3JpdHkpOworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAvLyBTaW5jZSB3ZSBkZWZlciBsb2FkZXIgaW5pdGlhbGl6YXRpb24gdW50aWwgc2NoZWR1
bGluZyBvbiBpT1MsIHRoZSBmcmFtZQorICAgIC8vIGxvYWQgZGVsZWdhdGUgdGhhdCB3b3VsZCBi
ZSBjYWxsZWQgaW4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSgpIG9uCisgICAgLy8gb3RoZXIg
cG9ydHMgbWlnaHQgYmUgY2FsbGVkIGluIHNjaGVkdWxlTG9hZCgpIGluc3RlYWQuIE91ciBjb250
cmFjdCB0bworICAgIC8vIGNhbGxlcnMgb2YgdGhpcyBtZXRob2QgaXMgdGhhdCBhIG51bGwgbG9h
ZGVyIGlzIHJldHVybmVkIGlmIHRoZSBsb2FkIHdhcworICAgIC8vIGNhbmNlbGxlZCBieSBhIGZy
YW1lIGxvYWQgZGVsZWdhdGUuCisgICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5yZWFjaGVkVGVy
bWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgogICAgIHJldHVy
biBsb2FkZXIucmVsZWFzZSgpOwogfQogCkBAIC0xMjIsMjEgKzE0MCw0OSBAQCB2b2lkIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxv
YWRlciwgUmVzb3VyYwogCiAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6bG9hZCByZXNvdXJjZSAlcCAnJXMnIiwgcmVzb3VyY2VMb2FkZXIsIHJlc291cmNl
TG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwogCisjaWYgUExBVEZPUk0o
SU9TKQogICAgIC8vIElmIHRoZXJlJ3MgYSB3ZWIgYXJjaGl2ZSByZXNvdXJjZSBmb3IgdGhpcyBV
UkwsIHdlIGRvbid0IG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvYWQgc2luY2UgaXQgd2lsbCBuZXZl
ciB0b3VjaCB0aGUgbmV0d29yay4KKyAgICBpZiAoIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0
cygpICYmIHJlc291cmNlTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5hcmNoaXZlUmVzb3VyY2VG
b3JVUkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpKSkgeworICAg
ICAgICByZXNvdXJjZUxvYWRlci0+c3RhcnRMb2FkaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZWxzZQogICAgIGlmIChyZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJj
aGl2ZVJlc291cmNlRm9yVVJMKHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkpKSB7CiAg
ICAgICAgIHJlc291cmNlTG9hZGVyLT5zdGFydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQor
I2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0g
aG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkudXJsKCksIENy
ZWF0ZUlmTm90Rm91bmQpOworI2Vsc2UKKyAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3QgPSBob3N0
Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSwgQ3JlYXRlSWZOb3RGb3VuZCk7CisjZW5kaWYK
IAotICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXIt
PnVybCgpLCBDcmVhdGVJZk5vdEZvdW5kKTsgICAgCiAgICAgYm9vbCBoYWRSZXF1ZXN0cyA9IGhv
c3QtPmhhc1JlcXVlc3RzKCk7CiAgICAgaG9zdC0+c2NoZWR1bGUocmVzb3VyY2VMb2FkZXIsIHBy
aW9yaXR5KTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0Ojpo
dHRwUGlwZWxpbmluZ0VuYWJsZWQoKSAmJiAhaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkp
IHsKKyAgICAgICAgLy8gU2VydmUgYWxsIHJlcXVlc3RzIGF0IG9uY2UgdG8ga2VlcCB0aGUgcGlw
ZWxpbmUgZnVsbCBhdCB0aGUgbmV0d29yayBsYXllci4KKyAgICAgICAgc2VydmVQZW5kaW5nUmVx
dWVzdHMoaG9zdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICgocHJpb3JpdHkg
PiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFs
UmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0g
UmVzb3VyY2VMb2FkUHJpb3JpdHlMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3VzcGVuZGlu
Z1BlbmRpbmdSZXF1ZXN0cygpKSB7CisgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFu
dCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhv
c3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCiAgICAgaWYgKHBy
aW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3cgfHwgIXJlc291cmNlTG9hZGVyLT51cmwo
KS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFBy
aW9yaXR5TG93ICYmICFoYWRSZXF1ZXN0cykpIHsKICAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3Qg
aW1wb3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseS4KICAgICAgICAgc2VydmVQZW5kaW5nUmVx
dWVzdHMoaG9zdCwgcHJpb3JpdHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2VuZGlmCiAK
ICAgICBub3RpZnlEaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdChyZXNvdXJjZUxvYWRlcik7CiAK
QEAgLTE1Nyw2ICsyMDMsMTUgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiAgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0
ID0gaG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJsKCkpOwogICAgIGlmIChob3N0KQogICAg
ICAgICBob3N0LT5yZW1vdmUocmVzb3VyY2VMb2FkZXIpOworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAvLyBSZXNvdXJjZUxvYWRlcjo6dXJsKCkgZG9lc24ndCBzdGFydCByZXR1cm5pbmcgdGhlIGNv
cnJlY3QgdmFsdWUgdW50aWwgdGhlIGxvYWQgc3RhcnRzLiBJZiB3ZSBnZXQgY2FuY2VsZWQgYmVm
b3JlIHRoYXQsIHdlIG5lZWQgdG8gbG9vayBmb3Igb3JpZ2luYWxSZXF1ZXN0IHVybCBpbnN0ZWFk
LgorICAgIC8vIEZJWE1FOiBSZXNvdXJjZUxvYWRlcjo6dXJsKCkgc2hvdWxkIGJlIG1hZGUgdG8g
cmV0dXJuIGEgc2Vuc2libGUgdmFsdWUgYXQgYWxsIHRpbWVzLgorICAgIGlmICghcmVzb3VyY2VM
b2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLmlzTnVsbCgpKSB7CisgICAgICAgIEhvc3RJbmZv
cm1hdGlvbiogb3JpZ2luYWxIb3N0ID0gaG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+aU9TT3Jp
Z2luYWxSZXF1ZXN0KCkudXJsKCkpOworICAgICAgICBpZiAob3JpZ2luYWxIb3N0ICYmIG9yaWdp
bmFsSG9zdCAhPSBob3N0KQorICAgICAgICAgICAgb3JpZ2luYWxIb3N0LT5yZW1vdmUocmVzb3Vy
Y2VMb2FkZXIpOworICAgIH0KKyNlbmRpZgogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVz
dHMoKTsKIH0KIApAQCAtMTY0LDExICsyMTksMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2UK
IHsKICAgICBIb3N0SW5mb3JtYXRpb24qIG9sZEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9h
ZGVyLT51cmwoKSk7CiAgICAgQVNTRVJUKG9sZEhvc3QpOworICAgIGlmICghb2xkSG9zdCkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgSG9zdEluZm9ybWF0aW9uKiBuZXdIb3N0ID0gaG9zdEZvclVS
TChyZWRpcmVjdFVSTCwgQ3JlYXRlSWZOb3RGb3VuZCk7CiAKICAgICBpZiAob2xkSG9zdC0+bmFt
ZSgpID09IG5ld0hvc3QtPm5hbWUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgbmV3
SG9zdC0+YWRkTG9hZEluUHJvZ3Jlc3MocmVzb3VyY2VMb2FkZXIpOwogICAgIG9sZEhvc3QtPnJl
bW92ZShyZXNvdXJjZUxvYWRlcik7CiB9CkBAIC0yMTksNiArMjc3LDEyIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhIb3N0SW5mb3JtYXRpb24qIGhv
c3QsIFJlc291cmNlCiAKICAgICAgICAgICAgIHJlcXVlc3RzUGVuZGluZy5yZW1vdmVGaXJzdCgp
OwogICAgICAgICAgICAgaG9zdC0+YWRkTG9hZEluUHJvZ3Jlc3MocmVzb3VyY2VMb2FkZXIuZ2V0
KCkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIGlmICghYXBwbGljYXRpb25Jc1dl
YlByb2Nlc3MoKSkgeworICAgICAgICAgICAgICAgIHJlc291cmNlTG9hZGVyLT5zdGFydExvYWRp
bmcoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisjZW5kaWYKICAg
ICAgICAgICAgIHJlc291cmNlTG9hZGVyLT5zdGFydCgpOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggZjYyOGQ0OTc2NDdhYjIz
ZGMzNTBiNjBiODgyZTAzMTg5MmQ2MWQ2Yy4uZGRkMjViNzI4NzZmYTJkZjA5YThlMjI4ZDUxMmI0
YTQ0MzAzMDk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCkBA
IC0xMTAsNiArMTEwLDE1IEBAIGJvb2wgUmVzb3VyY2VMb2FkZXI6OmluaXQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByKQogICAgIEFTU0VSVCghbV9kb2N1bWVudExvYWRlci0+aXNTdWJzdGl0dXRl
TG9hZFBlbmRpbmcodGhpcykpOwogICAgIAogICAgIFJlc291cmNlUmVxdWVzdCBjbGllbnRSZXF1
ZXN0KHIpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIElmIHRoZSBkb2N1bWVudExvYWRl
ciB3YXMgZGV0YWNoZWQgd2hpbGUgdGhpcyBSZXNvdXJjZUxvYWRlciB3YXMgd2FpdGluZyBpdHMg
dHVybgorICAgIC8vIGluIFJlc291cmNlTG9hZFNjaGVkdWxlciBxdWV1ZSwgZG9uJ3QgY29udGlu
dWUuCisgICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpKSB7CisgICAgICAgIGNhbmNl
bCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCiAgICAgCiAgICAgbV9k
ZWZlcnNMb2FkaW5nID0gbV9mcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCk7CiAgICAgaWYg
KG1fb3B0aW9ucy5zZWN1cml0eUNoZWNrID09IERvU2VjdXJpdHlDaGVjayAmJiAhbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuRGlzcGxheShjbGllbnRSZXF1ZXN0LnVy
bCgpKSkgewpAQCAtMTI5LDYgKzEzOCwxMyBAQCBib29sIFJlc291cmNlTG9hZGVyOjppbml0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcikKICAgICB9CiAKICAgICB3aWxsU2VuZFJlcXVlc3QoY2xp
ZW50UmVxdWVzdCwgUmVzb3VyY2VSZXNwb25zZSgpKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAvLyBJZiB0aGlzIFJlc291cmNlTG9hZGVyIHdhcyBzdG9wcGVkIGFzIGEgcmVzdWx0IG9mIHdp
bGxTZW5kUmVxdWVzdCwgYmFpbCBvdXQuCisgICAgaWYgKG1fcmVhY2hlZFRlcm1pbmFsU3RhdGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCiAgICAgaWYgKGNsaWVudFJlcXVlc3Qu
aXNOdWxsKCkpIHsKICAgICAgICAgY2FuY2VsKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTIyOCw2ICsyNDQsMjAgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXMKICAgICBSZWY8UmVzb3Vy
Y2VMb2FkZXI+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgQVNTRVJUKCFtX3JlYWNoZWRUZXJtaW5h
bFN0YXRlKTsKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRW5zdXJlIGFuIGlkZW50
aWZpZXIgaXMgYWx3YXlzIHNldC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhpcyBhc3NldGlvbiBpcyBu
b3QgaGl0OgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMTA1OTc5ND4gQVNTRVJUSU9OIEZBSUxF
RDogIUhhc2hUcmFuc2xhdG9yOjplcXVhbChLZXlUcmFpdHM6OmVtcHR5VmFsdWUoKSwga2V5KSBp
biBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZSBsb2FkaW5nIHRoZSBhdHRhY2hlZCB3ZWIgYXJjaGl2ZQorICAgIC8vIFRoaXMgaXMgbm90
IG5lZWRlZCBpbiBXZWJLaXQyLCBhcyBpdCBkb2Vzbid0IHVzZSBtX2lkZW50aWZpZXIgaW4gV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UK
KyAgICBpZiAoIW1faWRlbnRpZmllcikgeworICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2ZyYW1l
LT5wYWdlKCktPnByb2dyZXNzKCkuY3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOworICAgICAgICBm
cmFtZUxvYWRlcigpLT5ub3RpZmllcigpLmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0
KG1faWRlbnRpZmllciwgZG9jdW1lbnRMb2FkZXIoKSwgcmVxdWVzdCk7CisKKyAgICAgICAgLy8g
SWYgdGhpcyBSZXNvdXJjZUxvYWRlciB3YXMgc3RvcHBlZCBhcyBhIHJlc3VsdCBvZiBhc3NpZ25J
ZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCwgYmFpbCBvdXQKKyAgICAgICAgaWYgKG1fcmVhY2hl
ZFRlcm1pbmFsU3RhdGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAKICAg
ICAvLyBXZSBuZWVkIGEgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgYWxsIHJlcXVlc3RzLCBldmVu
IGlmIEZyYW1lTG9hZGVyIGlzIG5ldmVyIGdvaW5nIHRvIHNlZSBpdCAoc3VjaCBhcyB3aXRoIENP
UlMgcHJlZmxpZ2h0IHJlcXVlc3RzKS4KICAgICBib29sIGNyZWF0ZWRSZXNvdXJjZUlkZW50aWZp
ZXIgPSBmYWxzZTsKQEAgLTU1Miw2ICs1ODIsMTMgQEAgYm9vbCBSZXNvdXJjZUxvYWRlcjo6Y2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb25zdCBQcm90ZWN0aW9uU3BhY2UK
ICAgICByZXR1cm4gZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCkuY2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZShkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyKCksIHByb3RlY3Rp
b25TcGFjZSk7CiB9CiAjZW5kaWYKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCitSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBSZXNvdXJjZUxvYWRlcjo6Y29ubmVjdGlvblByb3BlcnRpZXMoUmVz
b3VyY2VIYW5kbGUqKQoreworICAgIHJldHVybiBmcmFtZUxvYWRlcigpLT5jb25uZWN0aW9uUHJv
cGVydGllcyh0aGlzKTsKK30KKyNlbmRpZgogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpyZWNlaXZl
ZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCmluZGV4IGE1MjNhN2M1MGZhZTY2ZjVhNmVhZGJl
MGI1NTVlN2VjNjdmYWRhYTMuLjZkZDllYjY0MmM2OTg3NmVhZDM1YWY0ODRiMWFkNDZjMGVkM2Zi
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCkBAIC01Niw2ICs1Niwx
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaW5pdChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRMb2FkaW5n
KCkKKyAgICB7CisgICAgICAgIHN0YXJ0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHZpcnR1YWwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpT1NPcmlnaW5hbFJlcXVlc3Qo
KSBjb25zdCB7IHJldHVybiByZXF1ZXN0KCk7IH0KKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzKFJlc291cmNlSGFuZGxlKikgT1ZFUlJJ
REU7CisjZW5kaWYKKwogICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcigpIGNvbnN0OwogICAg
IERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1l
bnRMb2FkZXIuZ2V0KCk7IH0KICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVx
dWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxSZXF1ZXN0OyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAppbmRleCAzZWNmYzhlNjRmMzM3MzNkYjIxNTYwZjRi
MGExOTUwYzFlZDMyNTljLi5iMDZmNzBkNThhZDc1NzY3NGYwODA4NWViZmEyN2MwNGU3MTZjMDEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTQzMiw2ICs0
MzIsMTMgQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6bG9hZFBsdWdpbihIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50JiBwbHVnaW5FbGVtZW50LCBjb25zdCBVUkwKIAogICAgIEludFNpemUgY29udGVudFNp
emUgPSByb3VuZGVkSW50U2l6ZShMYXlvdXRTaXplKHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKSwg
cmVuZGVyZXItPmNvbnRlbnRIZWlnaHQoKSkpOwogICAgIGJvb2wgbG9hZE1hbnVhbGx5ID0gZG9j
dW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpICYmICFtX2NvbnRhaW5zUGx1Z2lucyAmJiB0b1Bs
dWdpbkRvY3VtZW50KGRvY3VtZW50KCkpLT5zaG91bGRMb2FkUGx1Z2luTWFudWFsbHkoKTsKKwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBPbiBpT1MsIHdlIG9ubHkgdGVsbCB0aGUgcGx1Z2lu
IHRvIGJlIGluIGZ1bGwgcGFnZSBtb2RlIGlmIHRoZSBjb250YWluaW5nIHBsdWdpbiBkb2N1bWVu
dCBpcyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgorICAgIGlmIChkb2N1bWVudCgpLT5vd25lckVs
ZW1lbnQoKSkKKyAgICAgICAgbG9hZE1hbnVhbGx5ID0gZmFsc2U7CisjZW5kaWYKKwogICAgIFJl
ZlB0cjxXaWRnZXQ+IHdpZGdldCA9IG1fZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuY3JlYXRlUGx1
Z2luKGNvbnRlbnRTaXplLCAmcGx1Z2luRWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZh
bHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CiAKICAgICBpZiAoIXdpZGdldCkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggMTg1Yjg5ZTkw
ZTU5OGYxMTM3YzM4MjZlYzZjNzU4OTlmNjZiNjNkZS4uNDMyYWQ4NWUzZDY0NWI5NzMyZjE3YzM0
YmNkYjg4NDk4Y2I1YWM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VM
b2FkZXIuY3BwCkBAIC00NCw2ICs0NCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+CisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBERUZJTkVfREVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVk
TGVha0NvdW50ZXIsIHN1YnJlc291cmNlTG9hZGVyQ291bnRlciwgKCJTdWJyZXNvdXJjZUxvYWRl
ciIpKTsKQEAgLTg0LDEwICs4OCwyOSBAQCBTdWJyZXNvdXJjZUxvYWRlcjo6flN1YnJlc291cmNl
TG9hZGVyKCkKIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVy
OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRp
b25zKQogewogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc3VibG9hZGVyKGFkb3B0UmVm
KG5ldyBTdWJyZXNvdXJjZUxvYWRlcihmcmFtZSwgcmVzb3VyY2UsIG9wdGlvbnMpKSk7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIGlmICghYXBwbGljYXRpb25Jc1dlYlByb2Nlc3MoKSkgeworICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vOTEyMTcxOT4gLSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTY2NDcuCisgICAgICAgIHN1YmxvYWRlci0+bV9pT1NPcmlnaW5h
bFJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICByZXR1cm4gc3VibG9hZGVyLnJlbGVhc2UoKTsK
KyAgICB9CisjZW5kaWYKICAgICBpZiAoIXN1YmxvYWRlci0+aW5pdChyZXF1ZXN0KSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBzdWJsb2Fk
ZXIucmVsZWFzZSgpOwogfQorICAgIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgU3VicmVzb3Vy
Y2VMb2FkZXI6OnN0YXJ0TG9hZGluZygpCit7CisgICAgQVNTRVJUKCFhcHBsaWNhdGlvbklzV2Vi
UHJvY2VzcygpKTsKKyAgICBpZiAoIWluaXQobV9pT1NPcmlnaW5hbFJlcXVlc3QpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgbV9pT1NPcmlnaW5hbFJlcXVlc3QgPSBSZXNvdXJjZVJlcXVl
c3QoKTsKKyAgICBzdGFydCgpOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCiAKIENhY2hl
ZFJlc291cmNlKiBTdWJyZXNvdXJjZUxvYWRlcjo6Y2FjaGVkUmVzb3VyY2UoKQogewpAQCAtMjcz
LDYgKzI5NiwxMSBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKGRv
dWJsZSBmaW5pc2hUaW1lKQogICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZWNlaXZlZCAnJXMn
LiIsIG1fcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKICAgICBS
ZWY8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QoKnRoaXMpOworCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIGlmIChyZXNvdXJjZURhdGEoKSkKKyAgICAgICAgcmVzb3VyY2VEYXRhKCktPnNob3Vs
ZFVzZVB1cmdlYWJsZU1lbW9yeSh0cnVlKTsKKyNlbmRpZgogICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJlc291cmNlPiBwcm90ZWN0UmVzb3VyY2UobV9yZXNvdXJjZSk7CiAgICAgbV9z
dGF0ZSA9IEZpbmlzaGluZzsKICAgICBtX3Jlc291cmNlLT5zZXRMb2FkRmluaXNoVGltZShmaW5p
c2hUaW1lKTsKQEAgLTMxNCwxMyArMzQyLDI0IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAKIHZvaWQgU3VicmVzb3VyY2VMb2Fk
ZXI6OndpbGxDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIFNpbmNlIHdlIGRlZmVyIGluaXRpYWxpemF0aW9uIHRvIHNjaGVkdWxp
bmcgdGltZSBvbiBpT1MgYnV0CisgICAgLy8gQ2FjaGVkUmVzb3VyY2VMb2FkZXIgc3RvcmVzIHJl
c291cmNlcyBpbiB0aGUgbWVtb3J5IGNhY2hlIGltbWVkaWF0ZWx5LAorICAgIC8vIG1fcmVzb3Vy
Y2UgbWlnaHQgYmUgY2FjaGVkIGRlc3BpdGUgaXRzIGxvYWRlciBub3QgYmVpbmcgaW5pdGlhbGl6
ZWQuCisgICAgaWYgKG1fc3RhdGUgIT0gSW5pdGlhbGl6ZWQgJiYgbV9zdGF0ZSAhPSBVbmluaXRp
YWxpemVkKQorI2Vsc2UKICAgICBpZiAobV9zdGF0ZSAhPSBJbml0aWFsaXplZCkKKyNlbmRpZgog
ICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFyZWFjaGVkVGVybWluYWxTdGF0ZSgpKTsKICAg
ICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FuY2VsbGVkIGxvYWQgb2YgJyVzJy5cbiIsIG1fcmVz
b3VyY2UtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKICAgICBSZWY8U3VicmVz
b3VyY2VMb2FkZXI+IHByb3RlY3QoKnRoaXMpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX3N0
YXRlID0gbV9zdGF0ZSA9PSBVbmluaXRpYWxpemVkID8gQ2FuY2VsbGVkV2hpbGVJbml0aWFsaXpp
bmcgOiBGaW5pc2hpbmc7CisjZWxzZQogICAgIG1fc3RhdGUgPSBGaW5pc2hpbmc7CisjZW5kaWYK
ICAgICBpZiAobV9yZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKSkKICAgICAgICAgbWVt
b3J5Q2FjaGUoKS0+cmV2YWxpZGF0aW9uRmFpbGVkKG1fcmVzb3VyY2UpOwogICAgIG1fcmVzb3Vy
Y2UtPnNldFJlc291cmNlRXJyb3IoZXJyb3IpOwpAQCAtMzQyLDcgKzM4MSwxMSBAQCB2b2lkIFN1
YnJlc291cmNlTG9hZGVyOjpub3RpZnlEb25lKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9y
ZXF1ZXN0Q291bnRUcmFja2VyLmNsZWFyKCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fZG9j
dW1lbnRMb2FkZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCkubG9hZERvbmUobV9yZXNvdXJjZSwg
bV9zdGF0ZSAhPSBDYW5jZWxsZWRXaGlsZUluaXRpYWxpemluZyk7CisjZWxzZQogICAgIG1fZG9j
dW1lbnRMb2FkZXItPmNhY2hlZFJlc291cmNlTG9hZGVyKCkubG9hZERvbmUobV9yZXNvdXJjZSk7
CisjZW5kaWYKICAgICBpZiAocmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVN1YnJlc291cmNlTG9hZGVyKHRoaXMpOwpA
QCAtMzUxLDcgKzM5NCwxMSBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpub3RpZnlEb25lKCkK
IHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OnJlbGVhc2VSZXNvdXJjZXMoKQogewogICAgIEFTU0VS
VCghcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICht
X3N0YXRlICE9IFVuaW5pdGlhbGl6ZWQgJiYgbV9zdGF0ZSAhPSBDYW5jZWxsZWRXaGlsZUluaXRp
YWxpemluZykKKyNlbHNlCiAgICAgaWYgKG1fc3RhdGUgIT0gVW5pbml0aWFsaXplZCkKKyNlbmRp
ZgogICAgICAgICBtX3Jlc291cmNlLT5jbGVhckxvYWRlcigpOwogICAgIG1fcmVzb3VyY2UgPSAw
OwogICAgIFJlc291cmNlTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCmluZGV4IDAwYWI5ODAxY2Q2ZTAzMWRiYjhmODQ2
ZTBjNTQ4YzZhNTBlYzViNDQuLmQyZjQ0ZDVjMDNjODBlY2U5NjUzMmQ3YjY2ZTI0NDQ3NTkzMzk4
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCkBAIC01Miw2
ICs1MiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU3VicmVzb3VyY2VMb2FkZXIo
KSBPVkVSUklERTsKICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRMb2FkaW5nKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGlPU09yaWdpbmFsUmVxdWVzdCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faU9TT3JpZ2luYWxSZXF1ZXN0OyB9CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBTdWJyZXNvdXJjZUxvYWRlcihGcmFtZSosIENhY2hlZFJlc291cmNl
KiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CiAKQEAgLTg2LDcgKzkxLDEwIEBAIHBy
aXZhdGU6CiAgICAgZW51bSBTdWJyZXNvdXJjZUxvYWRlclN0YXRlIHsKICAgICAgICAgVW5pbml0
aWFsaXplZCwKICAgICAgICAgSW5pdGlhbGl6ZWQsCi0gICAgICAgIEZpbmlzaGluZworICAgICAg
ICBGaW5pc2hpbmcsCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBDYW5jZWxsZWRXaGlsZUlu
aXRpYWxpemluZworI2VuZGlmCiAgICAgfTsKIAogICAgIGNsYXNzIFJlcXVlc3RDb3VudFRyYWNr
ZXIgewpAQCAtOTgsNiArMTA2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IG1fcmVzb3VyY2U7CiAgICAgfTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBSZXNvdXJjZVJl
cXVlc3QgbV9pT1NPcmlnaW5hbFJlcXVlc3Q7CisjZW5kaWYKICAgICBDYWNoZWRSZXNvdXJjZSog
bV9yZXNvdXJjZTsKICAgICBib29sIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQ7CiAgICAgU3Vi
cmVzb3VyY2VMb2FkZXJTdGF0ZSBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggYTc0
YmYyZGE0YmFiZjdmM2IyNDcxYTBkNDkwZDI3ZmY0NDg2NTk0MS4uMTllZDcxZGY1ZmVmMDRkOTY3
MDkyYjY1OGE5ODQwYjVhNTZmNGFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC00Miw2ICs0
MiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0
aWMgY29uc3QgY2hhciBmbGF0RmlsZVN1YmRpcmVjdG9yeVtdID0gIkFwcGxpY2F0aW9uQ2FjaGUi
OwpAQCAtMTAwLDYgKzEwNCw5IEBAIHN0YXRpYyB1bnNpZ25lZCB1cmxIb3N0SGFzaChjb25zdCBV
UkwmIHVybCkKIAogQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6bG9hZENhY2hlR3JvdXAoY29uc3QgVVJMJiBtYW5pZmVzdFVSTCkKIHsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNh
Y3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKICAgICBpZiAo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTc0LDYgKzE4MSw5
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMo
KQogICAgIC8vIHRvIGF2b2lkIHRyeWluZyB0byBvcGVuIHRoZSBkYXRhYmFzZSBvdmVyIGFuZCBv
dmVyIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCiAgICAgaGFzTG9hZGVkSGFzaGVzID0gdHJ1ZTsKICAg
ICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0
b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgb3BlbkRhdGFiYXNlKGZh
bHNlKTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTIyMCw2ICsyMzAsMTAgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVybCkKICAgICBpZiAoIW1fZGF0
YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNh
Y3Rpb25Db3VudGVyOworI2VuZGlmCisKICAgICAvLyBDaGVjayB0aGUgZGF0YWJhc2UuIExvb2sg
Zm9yIGFsbCBjYWNoZSBncm91cHMgd2l0aCBhIG5ld2VzdCBjYWNoZS4KICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIG1hbmlmZXN0VVJMLCBuZXdl
c3RDYWNoZSBGUk9NIENhY2hlR3JvdXBzIFdIRVJFIG5ld2VzdENhY2hlIElTIE5PVCBOVUxMIik7
CiAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCkBAIC0yNjYsNiAr
MjgwLDkgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
Y2FjaGVHcm91cEZvclVSTChjb25zdCBVUkwmIHVybCkKIAogQXBwbGljYXRpb25DYWNoZUdyb3Vw
KiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0
IFVSTCYgdXJsKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbklu
UHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBBU1NF
UlQoIXVybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSk7CiAKICAgICAvLyBDaGVjayBpZiBhbiBh
cHByb3ByaWF0ZSBjYWNoZSBhbHJlYWR5IGV4aXN0cyBpbiBtZW1vcnkuCkBAIC00MzcsNiArNDU0
LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2V0RGVmYXVsdE9yaWdpblF1b3Rh
KGludDY0X3QgcXVvdGEpCiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0
ZVF1b3RhRm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGludDY0X3QmIHF1
b3RhKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jl
c3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICAvLyBJZiBhbiBP
cmlnaW4gcmVjb3JkIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIENPVU5UIHdpbGwgYmUgMCBhbmQg
cXVvdGEgd2lsbCBiZSAwLgogICAgIC8vIFVzaW5nIHRoZSBjb3VudCB0byBkZXRlcm1pbmUgaWYg
YSByZWNvcmQgZXhpc3RlZCBvciBub3QgaXMgYSBzYWZlIHdheSB0byBkZXRlcm1pbmUKICAgICAv
LyBpZiBhIHF1b3RhIG9mIDAgaXMgcmVhbCwgZnJvbSB0aGUgcmVjb3JkLCBvciBmcm9tIG51bGwu
CkBAIC00NjAsNiArNDgwLDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3Vs
YXRlUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWcKIAogYm9vbCBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlVXNhZ2VGb3JPcmlnaW4oY29uc3QgU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiwgaW50NjRfdCYgdXNhZ2UpCiB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291
bnRlcjsKKyNlbmRpZgogICAgIC8vIElmIGFuIE9yaWdpbnMgcmVjb3JkIGRvZXNuJ3QgZXhpc3Qs
IHRoZW4gdGhlIFNVTSB3aWxsIGJlIG51bGwsCiAgICAgLy8gd2hpY2ggd2lsbCBiZWNvbWUgMCwg
YXMgZXhwZWN0ZWQsIHdoZW4gY29udmVydGluZyB0byBhIG51bWJlci4KICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgU1VNKENhY2hlcy5zaXplKSIKQEAg
LTQ4NCw2ICs1MDcsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVV
c2FnZUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZwogCiBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVSZW1haW5pbmdTaXplRm9yT3JpZ2luRXhjbHVkaW5n
Q2FjaGUoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgQXBwbGljYXRpb25DYWNoZSogY2Fj
aGUsIGludDY0X3QmIHJlbWFpbmluZ1NpemUpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNR
TGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsK
KyNlbmRpZgogICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzMsNiArNTU5LDkgQEAgYm9vbCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUmVtYWluaW5nU2l6ZUZvck9yaWdpbkV4
Y2x1ZGluZ0NhY2hlKGNvbnMKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVV
cGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgaW50NjRf
dCBxdW90YSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblBy
b2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgb3BlbkRh
dGFiYXNlKHRydWUpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNTUyLDYgKzU4MSw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvCiAK
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUxDb21tYW5kKGNvbnN0IFN0
cmluZyYgc3FsKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NFUlQoU1FMaXRlRGF0YWJh
c2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisjZW5kaWYKICAgICBBU1NF
UlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CiAgICAgCiAgICAgYm9vbCByZXN1bHQgPSBtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKHNxbCk7CkBAIC01NjksNiArNjAxLDkgQEAgc3RhdGljIGNvbnN0
IGludCBzY2hlbWFWZXJzaW9uID0gNzsKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NF
UlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Cisj
ZW5kaWYKICAgICBpbnQgdmVyc2lvbiA9IFNRTGl0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiUFJB
R01BIHVzZXJfdmVyc2lvbiIpLmdldENvbHVtbkludCgwKTsKICAgICBpZiAodmVyc2lvbiA9PSBz
Y2hlbWFWZXJzaW9uKQogICAgICAgICByZXR1cm47CkBAIC01OTMsNiArNjI4LDkgQEAgdm9pZCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiAgICAgCiB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNO
b3RFeGlzdCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblBy
b2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgaWYgKG1f
ZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjYwLDYgKzY5OCw5IEBA
IHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlm
RG9lc05vdEV4aXN0KQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3Rh
dGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50KQogeworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jl
c3MoKSk7CisjZW5kaWYKICAgICBib29sIHJlc3VsdCA9IHN0YXRlbWVudC5leGVjdXRlQ29tbWFu
ZCgpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBMT0dfRVJST1IoIkFwcGxpY2F0aW9uIENh
Y2hlIFN0b3JhZ2U6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIl
c1wiIiwgCkBAIC02NzAsNiArNzExLDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkKIAogYm9vbCBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCwg
R3JvdXBTdG9yYWdlSURKb3VybmFsKiBqb3VybmFsKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7CisjZW5kaWYKICAgICBBU1NFUlQoZ3JvdXAtPnN0b3JhZ2VJRCgpID09IDApOwogICAgIEFT
U0VSVChqb3VybmFsKTsKIApAQCAtNjk2LDYgKzc0MCw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAsIEdyb3VwU3RvcmFn
ZUlECiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2Fj
aGUqIGNhY2hlLCBSZXNvdXJjZVN0b3JhZ2VJREpvdXJuYWwqIHN0b3JhZ2VJREpvdXJuYWwpCiB7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhh
c1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyNlbmRpZgogICAgIEFTU0VSVChjYWNoZS0+c3Rv
cmFnZUlEKCkgPT0gMCk7CiAgICAgQVNTRVJUKGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAh
PSAwKTsKICAgICBBU1NFUlQoc3RvcmFnZUlESm91cm5hbCk7CkBAIC03NzcsNiArODI0LDkgQEAg
Ym9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZSogY2Fj
aGUsIFJlc291cmNlU3RvcmFnZUlESm8KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQgY2FjaGVT
dG9yYWdlSUQpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChTUUxpdGVEYXRhYmFz
ZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyNlbmRpZgogICAgIEFTU0VS
VChjYWNoZVN0b3JhZ2VJRCk7CiAgICAgQVNTRVJUKCFyZXNvdXJjZS0+c3RvcmFnZUlEKCkpOwog
ICAgIApAQCAtODk0LDYgKzk0NCw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAKIGJvb2wg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCiB7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRy
YW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAgIEFTU0VSVF9VTlVTRUQoY2FjaGUsIGNhY2hl
LT5zdG9yYWdlSUQoKSk7CiAgICAgQVNTRVJUKHJlc291cmNlLT5zdG9yYWdlSUQoKSk7CiAKQEAg
LTkxMCw2ICs5NjMsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0
ZWRUeXBlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyYwogCiBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNl
LCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FM
aXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwor
I2VuZGlmCiAgICAgQVNTRVJUKGNhY2hlLT5zdG9yYWdlSUQoKSk7CiAgICAgCiAgICAgb3BlbkRh
dGFiYXNlKHRydWUpOwpAQCAtOTQ1LDYgKzEwMDEsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNh
dAogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbnN1cmVPcmlnaW5SZWNvcmQoY29u
c3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNT
RVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwor
I2VuZGlmCiAgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydE9yaWdpblN0YXRlbWVudChtX2RhdGFi
YXNlLCAiSU5TRVJUIElOVE8gT3JpZ2lucyAob3JpZ2luLCBxdW90YSkgVkFMVUVTICg/LCA/KSIp
OwogICAgIGlmIChpbnNlcnRPcmlnaW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDkyLDYgKzExNTEsOSBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgcGFyc2VIZWFkZXJzKGNvbnN0IFN0cmluZyYgaGVhZGVycywgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9ucwogICAgIAogUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKIHsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgQVNTRVJUKFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNh
Y3Rpb25JblByb2dyZXNzKCkpOworI2VuZGlmCiAgICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3Rh
dGVtZW50KG1fZGF0YWJhc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
U0VMRUNUIHVybCwgc3RhdHVzQ29kZSwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUs
IGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGgg
RlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJp
ZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNl
RGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Iik7
CkBAIC0xMjAwLDYgKzEyNjIsOSBAQCBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZQogICAgIAogdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hl
KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NB
dXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBpZiAoIWNhY2hlLT5z
dG9yYWdlSUQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtMTIzNyw2ICsxMzAyLDkgQEAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNh
Y2hlKQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCiB7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRy
YW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CiAgICAg
CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQpAQCAtMTMwMSw2ICsxMzY5LDkgQEAgYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6d3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3Rv
cnkoU2hhcmVkQnVmZmVyKiBkYXQKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNh
Y2hlSG9zdCogY2FjaGVIb3N0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFu
c2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYK
ICAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGNhY2hlSG9zdC0+YXBwbGljYXRpb25DYWNo
ZSgpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTMzNyw2ICsx
NDA4LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShj
b25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHAKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6bWFuaWZlc3RVUkxzKFZlY3RvcjxVUkw+KiB1cmxzKQogeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2Fj
dGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBBU1NFUlQodXJscyk7CiAgICAgb3BlbkRhdGFiYXNl
KGZhbHNlKTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCkBAIC0xMzU1LDYgKzE0Mjks
OSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMoVmVjdG9yPFVS
TD4qIHVybHMpCiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBTaXpl
KGNvbnN0IFN0cmluZyYgbWFuaWZlc3RVUkwsIGludDY0X3QqIHNpemUpCiB7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5z
YWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAgIEFTU0VSVChzaXplKTsKICAgICBvcGVuRGF0YWJh
c2UoZmFsc2UpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKQEAgLTEzODEsNiArMTQ1
OCw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBTaXplKGNvbnN0
IFN0cmluZyYgbWFuaWZlc3RVUkwsIGludDY0X3QqCiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXAoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50
ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gZGVs
ZXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBn
cm91cCBpcyBpbiBtZW1vcnkuCiAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IG1f
Y2FjaGVzSW5NZW1vcnkuZ2V0KG1hbmlmZXN0VVJMKTsKQEAgLTE0MzIsNiArMTUxMiw5IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXAoY29uc3QgU3RyaW5n
JiBtYW5pZmVzdFVSTCkKIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmFjdXVtRGF0
YWJhc2VGaWxlKCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25J
blByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgb3Bl
bkRhdGFiYXNlKGZhbHNlKTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmlu
ZGV4IDdlYjFjZTdjZmRhNjNmMThmNzdjN2FmYTEwN2Q5NGYxODYwYzMxMzAuLmI2NThmY2FmMDg2
ZTQwYTc4ZTQzMjA5NDdhMTVmZDQ5MzdmMjMwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmNwcApAQCAtNDUsNiArNDUsMTAgQEAKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaWYgUExBVEZPUk0o
SU9TKQorI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5oIgorI2VuZGlmCisKICNpZiBVU0UoQ0cpCiAj
aW5jbHVkZSAiUERGRG9jdW1lbnRJbWFnZS5oIgogI2VuZGlmCkBAIC03Niw2ICs4MCwxNSBAQCBD
YWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgIHNldExvYWRpbmcoZmFs
c2UpOwogfQogCitDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgVVJMJiB1cmwsIEltYWdl
KiBpbWFnZSkKKyAgICA6IENhY2hlZFJlc291cmNlKFJlc291cmNlUmVxdWVzdCh1cmwpLCBJbWFn
ZVJlc291cmNlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fc2hvdWxkUGFpbnRCcm9r
ZW5JbWFnZSh0cnVlKQoreworICAgIHNldFN0YXR1cyhDYWNoZWQpOworICAgIHNldExvYWRpbmco
ZmFsc2UpOworfQorCiBDYWNoZWRJbWFnZTo6fkNhY2hlZEltYWdlKCkKIHsKICAgICBjbGVhcklt
YWdlKCk7CkBAIC0yNjcsOCArMjgwLDE3IEBAIExheW91dFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdl
U2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0CiAgICAg
fQogI2Vsc2UKICAgICBpZiAobV9pbWFnZS0+aXNCaXRtYXBJbWFnZSgpICYmIChyZW5kZXJlciAm
JiByZW5kZXJlci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbikpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgaW1hZ2VTaXplID0g
dG9CaXRtYXBJbWFnZShtX2ltYWdlLmdldCgpKS0+c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigp
OwotI2VuZGlmCisjZWxzZQorICAgIHsKKyAgICAgICAgLy8gT24gaU9TLCB0aGUgaW1hZ2UgbWF5
IGhhdmUgYmVlbiBzdWJzYW1wbGVkIHRvIGFjY29tbW9kYXRlIG91ciBzaXplIHJlc3RyaWN0aW9u
cy4gSG93ZXZlcgorICAgICAgICAvLyB3ZSBzaG91bGQgdGVsbCB0aGUgcmVuZGVyZXIgd2hhdCB0
aGUgb3JpZ2luYWwgc2l6ZSB3YXMuCisgICAgICAgIGltYWdlU2l6ZSA9IHRvQml0bWFwSW1hZ2Uo
bV9pbWFnZS5nZXQoKSktPm9yaWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOworICAg
IH0gZWxzZSBpZiAobV9pbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQorICAgICAgICBpbWFnZVNpemUg
PSB0b0JpdG1hcEltYWdlKG1faW1hZ2UuZ2V0KCkpLT5vcmlnaW5hbFNpemUoKTsKKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIEVOQUJMRShDU1NfSU1BR0VfT1JJRU5UQVRJT04p
CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIGVsc2UgaWYgKG1faW1hZ2UtPmlzU1ZHSW1hZ2UoKSAm
JiBzaXplVHlwZSA9PSBVc2VkU2l6ZSkgewpAQCAtNTkwLDQgKzYxMiwyNiBAQCBib29sIENhY2hl
ZEltYWdlOjppc09yaWdpbkNsZWFuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKICAg
ICByZXR1cm4gIXNlY3VyaXR5T3JpZ2luLT50YWludHNDYW52YXMocmVzcG9uc2UoKS51cmwoKSk7
CiB9CiAKKy8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayB0byBpbmNvcnBvcmF0ZSB0aGUgZnVuY3Rp
b25hbGl0eSBvZiBDYWNoZWRJbWFnZU1hbnVhbAorLy8gaW50byBDYWNoZWRJbWFnZSBvciBmaW5k
IGEgYmV0dGVyIHBsYWNlIGZvciB0aGlzIGNsYXNzLgorQ2FjaGVkSW1hZ2VNYW51YWw6OkNhY2hl
ZEltYWdlTWFudWFsKGNvbnN0IFVSTCYgdXJsLCBJbWFnZSogaW1hZ2UpCisgICAgOiBDYWNoZWRJ
bWFnZSh1cmwsIGltYWdlKQorICAgICwgbV9mYWtlQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8Q2Fj
aGVkSW1hZ2VDbGllbnQ+KCkpCit7CisgICAgLy8gVXNlIHRoZSBpbmNvbWluZyBVUkwgaW4gdGhl
IHJlc3BvbnNlIGZpZWxkLiBUaGlzIGVuc3VyZXMgdGhhdCBjb2RlCisgICAgLy8gdXNpbmcgdGhl
IHJlc3BvbnNlIGRpcmVjdGx5LCBzdWNoIGFzIG9yaWdpbiBjaGVja3MgZm9yIHNlY3VyaXR5LAor
ICAgIC8vIGFjdHVhbGx5IHNlZSBzb21ldGhpbmcuCisgICAgbV9yZXNwb25zZS5zZXRVUkwodXJs
KTsKK30KKworYm9vbCBDYWNoZWRJbWFnZU1hbnVhbDo6bXVzdFJldmFsaWRhdGVEdWVUb0NhY2hl
SGVhZGVycyhDYWNoZVBvbGljeSkgY29uc3QKK3sKKyAgICAvLyBEbyBub3QgcmV2YWxpZGF0ZSBt
YW51YWxseSBjYWNoZWQgaW1hZ2VzLiBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGFzIGEKKyAgICAv
LyB3YXkgdG8gZWZmaWNpZW50bHkgc2hhcmUgYW4gaW1hZ2UgZnJvbSB0aGUgY2xpZW50IHRvIGNv
bnRlbnQgYW5kCisgICAgLy8gdGhlIFVSTCBmb3IgdGhhdCBpbWFnZSBtYXkgbm90IHJlcHJlc2Vu
dCBhIHJlc291cmNlIHRoYXQgY2FuIGJlCisgICAgLy8gcmV0cmlldmVkIGJ5IHN0YW5kYXJkIG1l
YW5zLiBJZiB0aGUgbWFudWFsIGNhY2hpbmcgU1BJIGlzIHVzZWQsIGl0IGlzCisgICAgLy8gaW5j
dW1iZW50IG9uIHRoZSBjbGllbnQgdG8gb25seSB1c2UgdmFsaWQgcmVzb3VyY2VzLgorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAppbmRleCA0NjQwZDY5YmIyNzAzZmNiYjJlYjJjNTcw
MDViMTE4ZGFlMDUyMDYzLi44YmI2NWRlZGFiYjIwYzhjYTNjZTA2NmE0N2FmYzQyMTIzNDQ2MGRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaApAQCAtNDUsMTIg
KzQ1LDEzIEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBzdHJ1Y3QgTGVuZ3RoOwogCi1jbGFz
cyBDYWNoZWRJbWFnZSBGSU5BTCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSwgcHVibGljIEltYWdl
T2JzZXJ2ZXIgeworY2xhc3MgQ2FjaGVkSW1hZ2UgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UsIHB1
YmxpYyBJbWFnZU9ic2VydmVyIHsKICAgICBmcmllbmQgY2xhc3MgTWVtb3J5Q2FjaGU7CiAKIHB1
YmxpYzoKICAgICBDYWNoZWRJbWFnZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBDYWNo
ZWRJbWFnZShJbWFnZSopOworICAgIENhY2hlZEltYWdlKGNvbnN0IFVSTCYsIEltYWdlKik7CiAg
ICAgdmlydHVhbCB+Q2FjaGVkSW1hZ2UoKTsKIAogICAgIEltYWdlKiBpbWFnZSgpOyAvLyBSZXR1
cm5zIHRoZSBudWxsSW1hZ2UoKSBpZiB0aGUgaW1hZ2UgaXMgbm90IGF2YWlsYWJsZSB5ZXQuCkBA
IC03OSw2ICs4MCwxMSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemVGb3JSZW5k
ZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBmbG9hdCBtdWx0aXBsaWVyLCBTaXplVHlwZSA9IFVz
ZWRTaXplKTsgLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUgaW1hZ2UuCiAgICAg
dm9pZCBjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBM
ZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbyk7CiAKKyNp
ZiBVU0UoQ0YpCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgVVNFKENGKSBvbmNlIHdlIG1ha2Ug
TWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSgpIHBsYXRmb3JtLWluZGVwZW5kZW50LgorICAg
IHZpcnR1YWwgYm9vbCBpc01hbnVhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYK
KwogICAgIHN0YXRpYyB2b2lkIHJlc3VtZUFuaW1hdGluZ0ltYWdlc0ZvckxvYWRlcihDYWNoZWRS
ZXNvdXJjZUxvYWRlciopOwogCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCkBAIC0xNDMs
NiArMTQ5LDIyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7
CiB9OwogCisjaWYgVVNFKENGKQorLy8gRklYTUU6IFdlIHNob3VsZCBsb29rIHRvIGluY29ycG9y
YXRlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIENhY2hlZEltYWdlTWFudWFsCisvLyBpbnRvIENhY2hl
ZEltYWdlIG9yIGZpbmQgYSBiZXR0ZXIgcGxhY2UgZm9yIHRoaXMgY2xhc3MuCisvLyBGSVhNRTog
UmVtb3ZlIHRoZSBVU0UoQ0YpIG9uY2Ugd2UgbWFrZSBNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0Nh
Y2hlKCkgcGxhdGZvcm0taW5kZXBlbmRlbnQuCitjbGFzcyBDYWNoZWRJbWFnZU1hbnVhbCA6IHB1
YmxpYyBDYWNoZWRJbWFnZSB7CitwdWJsaWM6CisgICAgQ2FjaGVkSW1hZ2VNYW51YWwoY29uc3Qg
VVJMJiwgSW1hZ2UqKTsKKyAgICB2b2lkIGFkZEZha2VDbGllbnQoKSB7IGFkZENsaWVudChtX2Zh
a2VDbGllbnQuZ2V0KCkpOyB9CisgICAgdm9pZCByZW1vdmVGYWtlQ2xpZW50KCkgeyByZW1vdmVD
bGllbnQobV9mYWtlQ2xpZW50LmdldCgpKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc01hbnVhbCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbXVzdFJl
dmFsaWRhdGVEdWVUb0NhY2hlSGVhZGVycyhDYWNoZVBvbGljeSkgY29uc3Q7Citwcml2YXRlOgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRSZXNvdXJjZUNsaWVudD4gbV9mYWtlQ2xpZW50Owor
fTsKKyNlbmRpZgorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5jcHAKaW5kZXggZTUzYmFjNWY2ZmU0YWU1ODA3NjhjMmFkOWZkMGFj
MGQwZDVkMGRiMi4uMDk0ZTczMjczZDAzZWY0ZWFmMWQ0YWQzZTIyMzZiM2NjZDYzYjQzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCkBAIC01
NCw2ICs1NCwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyNpbmNsdWRlICJRdWlja0xvb2su
aCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zMDYsNiArMzEwLDE2IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBSZXNvCiAgICAgbV9vcHRp
b25zID0gb3B0aW9uczsKICAgICBtX2xvYWRpbmcgPSB0cnVlOwogCisjaWYgVVNFKFFVSUNLX0xP
T0spCisgICAgaWYgKCFtX3Jlc291cmNlUmVxdWVzdC5pc051bGwoKSAmJiBtX3Jlc291cmNlUmVx
dWVzdC51cmwoKS5wcm90b2NvbElzKFFMUHJldmlld1Byb3RvY29sKCkpKSB7CisgICAgICAgIC8v
IFdoZW4gUXVpY2tMb29rIGlzIGludm9rZWQgdG8gY29udmVydCBhIGRvY3VtZW50LCBpdCByZXR1
cm5zIGEgdW5pcXVlIFVSTCBpbiB0aGUKKyAgICAgICAgLy8gTlNVUkxSZXBvbnNlIGZvciB0aGUg
bWFpbiBkb2N1bWVudC4gVG8gbWFrZSBzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFuZFJlc291cmNl
VVJMKCkKKyAgICAgICAgLy8gd29yaywgd2UgbmVlZCB0byB1c2UgdGhlIFFMIFVSTCBub3QgdGhl
IG9yaWdpbmFsIFVSTC4KKyAgICAgICAgY29uc3QgVVJMJiBkb2N1bWVudFVSTCA9IGNhY2hlZFJl
c291cmNlTG9hZGVyLT5mcmFtZSgpID8gY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCktPmxv
YWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCkudXJsKCkgOiBjYWNoZWRSZXNvdXJj
ZUxvYWRlci0+ZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNl
dFVSTChzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFuZFJlc291cmNlVVJMKGRvY3VtZW50VVJMLCB1
cmwoKSkpOworICAgIH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBp
ZiAobV9yZXNvdXJjZVJlcXVlc3QudGFyZ2V0VHlwZSgpID09IFJlc291cmNlUmVxdWVzdDo6VGFy
Z2V0SXNVbnNwZWNpZmllZCkKICAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0VGFyZ2V0VHlw
ZShjYWNoZWRSZXNvdXJjZVR5cGVUb1RhcmdldFR5cGUodHlwZSgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCmluZGV4IDQwNzE5YmEyMWM2ZTc3Njdm
NGQ1ZTZmNDJjNWFmZjRmZjIxNDhhMzguLmZiNGY1YjI0ODE4ZWU0ODQ3YjEzMmU4ZDdkMjdhYzc1
ZTg3NDIyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5oCkBAIC0yMjgsNyArMjI4LDkgQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlckhhbmRs
ZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOwogICAgIAogICAgIGJvb2wgY2FuVXNlQ2Fj
aGVWYWxpZGF0b3IoKSBjb25zdDsKLSAgICBib29sIG11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhl
YWRlcnMoQ2FjaGVQb2xpY3kpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIG11c3RSZXZhbGlk
YXRlRHVlVG9DYWNoZUhlYWRlcnMoQ2FjaGVQb2xpY3kpIGNvbnN0OworCiAgICAgYm9vbCBpc0Nh
Y2hlVmFsaWRhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQog
ICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZVRvUmV2YWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDlmOWU0NTdmNGY3
OWQ0MjJmMzQ4M2JiZThjMzRkNGI2YWI0Yjc3MTIuLjIwODlmM2Y2MzY3NDUyMDBhZTgzNzdiZDgx
OWFhYTEwMzY0MDZhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAtNzQxLDcgKzc0MSw3IEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSkgY29uc3QKICAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS0+dXJs
KCkpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkRG9uZShDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2UpCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkRG9uZShDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgc2hvdWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucykK
IHsKICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IHByb3RlY3REb2N1bWVudExvYWRlcihtX2Rv
Y3VtZW50TG9hZGVyKTsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3REb2N1bWVudChtX2Rv
Y3VtZW50KTsKQEAgLTc2Niw3ICs3NjYsOSBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjps
b2FkRG9uZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiAKICAgICBpZiAoZnJhbWUoKSkKICAg
ICAgICAgZnJhbWUoKS0+bG9hZGVyKCkubG9hZERvbmUoKTsKLSAgICBwZXJmb3JtUG9zdExvYWRB
Y3Rpb25zKCk7CisKKyAgICBpZiAoc2hvdWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucykKKyAgICAg
ICAgcGVyZm9ybVBvc3RMb2FkQWN0aW9ucygpOwogCiAgICAgaWYgKCFtX2dhcmJhZ2VDb2xsZWN0
RG9jdW1lbnRSZXNvdXJjZXNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2dhcmJhZ2VDb2xs
ZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC04MjYsMjEgKzgy
OCwyMCBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWNyZW1lbnRSZXF1ZXN0Q291bnQo
Y29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlcykKIAogdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKIHsKLSAgICBib29sIGRlbGF5U3VicmVz
b3VyY2VMb2FkID0gdHJ1ZTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgZGVsYXlTdWJyZXNvdXJj
ZUxvYWQgPSBmYWxzZTsKLSNlbmRpZgotICAgIGlmIChkZWxheVN1YnJlc291cmNlTG9hZCkgewot
ICAgICAgICBib29sIGhhc1JlbmRlcmluZyA9IG1fZG9jdW1lbnQtPmJvZHkoKSAmJiBtX2RvY3Vt
ZW50LT5ib2R5KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIGJvb2wgY2FuQmxvY2tQYXJzZXIgPSB0
eXBlID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6
Q1NTU3R5bGVTaGVldDsKLSAgICAgICAgaWYgKCFoYXNSZW5kZXJpbmcgJiYgIWNhbkJsb2NrUGFy
c2VyKSB7Ci0gICAgICAgICAgICAvLyBEb24ndCBwcmVsb2FkIHN1YnJlc291cmNlcyB0aGF0IGNh
bid0IGJsb2NrIHRoZSBwYXJzZXIgYmVmb3JlIHdlIGhhdmUgc29tZXRoaW5nIHRvIGRyYXcuCi0g
ICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHByZXZlbnQgcHJlbG9hZHMgZnJvbSBkZWxheWluZyBm
aXJzdCBkaXNwbGF5IHdoZW4gYmFuZHdpZHRoIGlzIGxpbWl0ZWQuCi0gICAgICAgICAgICBQZW5k
aW5nUHJlbG9hZCBwZW5kaW5nUHJlbG9hZCA9IHsgdHlwZSwgcmVxdWVzdCwgY2hhcnNldCB9Owot
ICAgICAgICAgICAgbV9wZW5kaW5nUHJlbG9hZHMuYXBwZW5kKHBlbmRpbmdQcmVsb2FkKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIC8vIFdlIGFsd2F5cyBwcmVsb2FkIHJl
c291cmNlcyBvbiBpT1MuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkxMjc2Pi4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBhIHNl
dHRpbmcgdG8gdG9nZ2xlIGFnZ3Jlc3NpdmUgcHJlbG9hZGluZyBiZWhhdmlvciBhcyBvcHBvc2Vk
CisgICAgLy8gdG8gbWFraW5nIHRoaXMgYmVoYXZpb3Igc3BlY2lmaWMgdG8gaU9TLgorI2lmICFQ
TEFURk9STShJT1MpCisgICAgYm9vbCBoYXNSZW5kZXJpbmcgPSBtX2RvY3VtZW50LT5ib2R5KCkg
JiYgbV9kb2N1bWVudC0+Ym9keSgpLT5yZW5kZXJlcigpOworICAgIGJvb2wgY2FuQmxvY2tQYXJz
ZXIgPSB0eXBlID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNv
dXJjZTo6Q1NTU3R5bGVTaGVldDsKKyAgICBpZiAoIWhhc1JlbmRlcmluZyAmJiAhY2FuQmxvY2tQ
YXJzZXIpIHsKKyAgICAgICAgLy8gRG9uJ3QgcHJlbG9hZCBzdWJyZXNvdXJjZXMgdGhhdCBjYW4n
dCBibG9jayB0aGUgcGFyc2VyIGJlZm9yZSB3ZSBoYXZlIHNvbWV0aGluZyB0byBkcmF3LgorICAg
ICAgICAvLyBUaGlzIGhlbHBzIHByZXZlbnQgcHJlbG9hZHMgZnJvbSBkZWxheWluZyBmaXJzdCBk
aXNwbGF5IHdoZW4gYmFuZHdpZHRoIGlzIGxpbWl0ZWQuCisgICAgICAgIFBlbmRpbmdQcmVsb2Fk
IHBlbmRpbmdQcmVsb2FkID0geyB0eXBlLCByZXF1ZXN0LCBjaGFyc2V0IH07CisgICAgICAgIG1f
cGVuZGluZ1ByZWxvYWRzLmFwcGVuZChwZW5kaW5nUHJlbG9hZCk7CisgICAgICAgIHJldHVybjsK
ICAgICB9CisjZW5kaWYKICAgICByZXF1ZXN0UHJlbG9hZCh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0
KTsKIH0KIApAQCAtODQ4LDYgKzg0OSwxMiBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpj
aGVja0ZvclBlbmRpbmdQcmVsb2FkcygpCiB7CiAgICAgaWYgKG1fcGVuZGluZ1ByZWxvYWRzLmlz
RW1wdHkoKSB8fCAhbV9kb2N1bWVudC0+Ym9keSgpIHx8ICFtX2RvY3VtZW50LT5ib2R5KCktPnJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gV2Ug
YWx3YXlzIHByZWxvYWQgcmVzb3VyY2VzIG9uIGlPUy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNzY+LgorICAgIC8vIFNvLCB3ZSBzaG91bGQgbmV2ZXIg
aGF2ZSBhbnkgcGVuZGluZyBwcmVsb2Fkcy4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sg
dG8gYXZvaWQgY29tcGlsaW5nIHRoaXMgY29kZSBlbnRpcmVseSB3aGVuIGJ1aWxkaW5nIGZvciBp
T1MuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKICAgICB3aGlsZSAoIW1fcGVu
ZGluZ1ByZWxvYWRzLmlzRW1wdHkoKSkgewogICAgICAgICBQZW5kaW5nUHJlbG9hZCBwcmVsb2Fk
ID0gbV9wZW5kaW5nUHJlbG9hZHMudGFrZUZpcnN0KCk7CiAgICAgICAgIC8vIERvbid0IHJlcXVl
c3QgcHJlbG9hZCBpZiB0aGUgcmVzb3VyY2UgYWxyZWFkeSBsb2FkZWQgbm9ybWFsbHkgKHRoaXMg
d2lsbCByZXN1bHQgaW4gZG91YmxlIGxvYWQgaWYgdGhlIHBhZ2UgaXMgYmVpbmcgcmVsb2FkZWQg
d2l0aCBjYWNoZWQgcmVzdWx0cyBpZ25vcmVkKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgKaW5kZXggMTljOTcwYThkZmM4ZWYwNmY3
NjYzZTQ2NTYzMmFlNDExZTJmMWQ3ZC4uMzlhMGEyNTFlNDA3Mjg1ZjNmMDQ0NzEwM2VhZDQ5Yjk0
OGVjMTE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmgKQEAgLTEyMCw3ICsxMjAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVh
ckRvY3VtZW50TG9hZGVyKCkgeyBtX2RvY3VtZW50TG9hZGVyID0gMDsgfQogCiAgICAgdm9pZCBy
ZW1vdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopIGNvbnN0OwotICAgIHZvaWQgbG9h
ZERvbmUoQ2FjaGVkUmVzb3VyY2UqKTsKKworICAgIHZvaWQgbG9hZERvbmUoQ2FjaGVkUmVzb3Vy
Y2UqLCBib29sIHNob3VsZFBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMgPSB0cnVlKTsKKwogICAgIHZv
aWQgZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcygpOwogICAgIAogICAgIHZvaWQgaW5j
cmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAppbmRleCA1MDZmNjQxNGViODRlM2FmNDcy
OTRmMTkyNGUyZDE4ZTVmNDg2NGRkLi44NzZlN2E5MzIyYzE3OGZhOGQyNDMzOGZkYWIyZmMwZTQ1
NWUxY2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAK
QEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNZW1vcnlD
YWNoZS5oIgogCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKQEAgLTU5LDcgKzYxLDEx
IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgY0RlZmF1bHREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2
YWwgPSAwOwogTWVtb3J5Q2FjaGUqIG1lbW9yeUNhY2hlKCkKIHsKICAgICBzdGF0aWMgTWVtb3J5
Q2FjaGUqIHN0YXRpY0NhY2hlID0gbmV3IE1lbW9yeUNhY2hlOworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworI2Vsc2UKICAgICBB
U1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisjZW5kaWYKIAogICAgIHJldHVybiBzdGF0aWND
YWNoZTsKIH0KQEAgLTk2LDcgKzEwMiwxMSBAQCBib29sIE1lbW9yeUNhY2hlOjphZGQoQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlKQogICAgIGlmIChkaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2Vk
T3JEaXNhYmxlZCgpKTsKKyNlbHNlCiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwor
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIENhY2hlZFJlc291
cmNlSXRlbSogb3JpZ2luTWFwID0gbV9yZXNvdXJjZXMuZ2V0KHJlc291cmNlLT51cmwoKSk7CkBA
IC0xNjAsNyArMTcwLDExIEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRl
ZChDYWNoZWRSZXNvdXJjZSogcmV2YWxpZGF0aW5nUmVzb3VyY2UsIGNvCiAKIHZvaWQgTWVtb3J5
Q2FjaGU6OnJldmFsaWRhdGlvbkZhaWxlZChDYWNoZWRSZXNvdXJjZSogcmV2YWxpZGF0aW5nUmVz
b3VyY2UpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tl
ZE9yRGlzYWJsZWQoKSk7CisjZWxzZQogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsK
KyNlbmRpZgogICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXZhbGlkYXRpb24gZmFpbGVkIGZv
ciAlcCIsIHJldmFsaWRhdGluZ1Jlc291cmNlKTsKICAgICBBU1NFUlQocmV2YWxpZGF0aW5nUmVz
b3VyY2UtPnJlc291cmNlVG9SZXZhbGlkYXRlKCkpOwogICAgIHJldmFsaWRhdGluZ1Jlc291cmNl
LT5jbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7CkBAIC0xNzMsNyArMTg3LDExIEBAIENhY2hl
ZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JVUkwoY29uc3QgVVJMJiByZXNvdXJj
ZVVSTCkKIAogQ2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3Qo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworI2Vsc2UKICAgICBBU1NF
UlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisjZW5kaWYKICAgICBVUkwgdXJsID0gcmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVxdWVzdC51cmwoKSk7CiAjaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKICAgICBDYWNoZWRSZXNvdXJjZUl0ZW0qIGl0ZW0gPSBtX3Jlc291cmNl
cy5nZXQodXJsKTsKQEAgLTIxMCwxOCArMjI4LDczIEBAIHVuc2lnbmVkIE1lbW9yeUNhY2hlOjps
aXZlQ2FwYWNpdHkoKSBjb25zdAogICAgIHJldHVybiBtX2NhcGFjaXR5IC0gZGVhZENhcGFjaXR5
KCk7CiB9CiAKLXZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlcygpCisjaWYgVVNF
KENGKQorLy8gRklYTUU6IFJlbW92ZSB0aGUgVVNFKENGKSBvbmNlIHdlIGVpdGhlciBtYWtlIE5h
dGl2ZUltYWdlUHRyIGEgc21hcnQgcG9pbnRlciBvbiBhbGwgcGxhdGZvcm1zIG9yCisvLyByZW1v
dmUgdGhlIHVzYWdlIG9mIENGUmV0YWluKCkgaW4gTWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNo
ZSgpIHNvIGFzIHRvIG1ha2UgdGhlIGNvZGUgcGxhdGZvcm0taW5kZXBlbmRlbnQuCitib29sIE1l
bW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGNvbnN0IFVS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKQoreworICAgIEFTU0VSVChpbWFn
ZSk7CisgICAgcmVtb3ZlSW1hZ2VGcm9tQ2FjaGUodXJsLCBjYWNoZVBhcnRpdGlvbik7IC8vIFJl
bW92ZSBjYWNoZSBlbnRyeSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4KKworICAgIFJlZlB0cjxCaXRt
YXBJbWFnZT4gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGltYWdlLCBudWxscHRy
KTsKKyAgICBpZiAoIWJpdG1hcEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBD
YWNoZWRJbWFnZU1hbnVhbCogY2FjaGVkSW1hZ2UgPSBuZXcgQ2FjaGVkSW1hZ2VNYW51YWwodXJs
LCBiaXRtYXBJbWFnZS5nZXQoKSk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gQWN0dWFsIHJlbGVhc2Ugb2YgdGhlIENHSW1hZ2VSZWYgaXMg
ZG9uZSBpbiBCaXRtYXBJbWFnZS4KKyAgICBDRlJldGFpbihpbWFnZSk7CisgICAgY2FjaGVkSW1h
Z2UtPmFkZEZha2VDbGllbnQoKTsKKyAgICBjYWNoZWRJbWFnZS0+c2V0RGVjb2RlZFNpemUoYml0
bWFwSW1hZ2UtPmRlY29kZWRTaXplKCkpOworICAgIGNhY2hlZEltYWdlLT5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRDYWNoZVBhcnRpdGlvbihjYWNoZVBhcnRpdGlvbik7CisgICAgYWRkKGNhY2hlZElt
YWdlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlSW1h
Z2VGcm9tQ2FjaGUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24p
Cit7CisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2U7CisgICAgaWYgKENhY2hlZFJlc291cmNlSXRlbSogaXRlbSA9IG1fcmVzb3VyY2Vz
LmdldCh1cmwpKQorICAgICAgICByZXNvdXJjZSA9IGl0ZW0tPmdldChSZXNvdXJjZVJlcXVlc3Q6
OnBhcnRpdGlvbk5hbWUoY2FjaGVQYXJ0aXRpb24pKTsKKyAgICBlbHNlCisgICAgICAgIHJlc291
cmNlID0gbnVsbHB0cjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNhY2hlUGFydGl0aW9uKTsK
KyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQodXJsKTsKKyNl
bmRpZgorICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEEgcmVz
b3VyY2UgZXhpc3RzIGFuZCBpcyBub3QgYSBtYW51YWxseSBjYWNoZWQgaW1hZ2UsIHNvIGp1c3Qg
cmVtb3ZlIGl0LgorICAgIGlmICghcmVzb3VyY2UtPmlzSW1hZ2UoKSB8fCAhc3RhdGljX2Nhc3Q8
Q2FjaGVkSW1hZ2UqPihyZXNvdXJjZSktPmlzTWFudWFsKCkpIHsKKyAgICAgICAgZXZpY3QocmVz
b3VyY2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVtb3ZpbmcgdGhlIGxh
c3QgY2xpZW50IG9mIGEgQ2FjaGVkSW1hZ2UgdHVybnMgdGhlIHJlc291cmNlCisgICAgLy8gaW50
byBhIGRlYWQgcmVzb3VyY2Ugd2hpY2ggd2lsbCBldmVudHVhbGx5IGJlIGV2aWN0ZWQgd2hlbgor
ICAgIC8vIGRlYWQgcmVzb3VyY2VzIGFyZSBwcnVuZWQuIFRoYXQgbWlnaHQgYmUgaW1tZWRpYXRl
bHkgc2luY2UKKyAgICAvLyByZW1vdmluZyB0aGUgbGFzdCBjbGllbnQgdHJpZ2dlcnMgYSBNZW1v
cnlDYWNoZTo6cHJ1bmUsIHNvIHRoZQorICAgIC8vIHJlc291cmNlIG1heSBiZSBkZWxldGVkIGFm
dGVyIHRoaXMgY2FsbC4KKyAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZU1hbnVhbCo+KHJlc291
cmNlKS0+cmVtb3ZlRmFrZUNsaWVudCgpOworfQorI2VuZGlmCisKK3ZvaWQgTWVtb3J5Q2FjaGU6
OnBydW5lTGl2ZVJlc291cmNlcyhib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExp
dmVSZXNvdXJjZXMpCiB7CiAgICAgaWYgKCFtX3BydW5lRW5hYmxlZCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBsaXZlQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25l
ZCBjYXBhY2l0eSA9IHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMg
PyAwIDogbGl2ZUNhcGFjaXR5KCk7CiAgICAgaWYgKGNhcGFjaXR5ICYmIG1fbGl2ZVNpemUgPD0g
Y2FwYWNpdHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FwYWNpdHkgKiBjVGFyZ2V0UHJ1bmVQZXJjZW50YWdlKTsg
Ly8gQ3V0IGJ5IGEgcGVyY2VudGFnZSB0byBhdm9pZCBpbW1lZGlhdGVseSBwcnVuaW5nIGFnYWlu
LgogCi0gICAgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHRhcmdldFNpemUpOworICAgIHBydW5l
TGl2ZVJlc291cmNlc1RvU2l6ZSh0YXJnZXRTaXplLCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFG
b3JBbGxMaXZlUmVzb3VyY2VzKTsKIH0KIAogdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZlUmVz
b3VyY2VzVG9QZXJjZW50YWdlKGZsb2F0IHBydW5lUGVyY2VudGFnZSkKQEAgLTIzOCw3ICszMTEs
NyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXNUb1BlcmNlbnRhZ2UoZmxv
YXQgcHJ1bmVQZXJjZW50YWdlKQogICAgIHBydW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh0YXJnZXRT
aXplKTsKIH0KIAotdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHVu
c2lnbmVkIHRhcmdldFNpemUpCit2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXNU
b1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSwgYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFG
b3JBbGxMaXZlUmVzb3VyY2VzKQogewogICAgIGlmIChtX2luUHJ1bmVSZXNvdXJjZXMpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI2Myw3ICszMzYsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxp
dmVSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSkKICAgICAgICAgaWYgKGN1cnJl
bnQtPmlzTG9hZGVkKCkgJiYgY3VycmVudC0+ZGVjb2RlZFNpemUoKSkgewogICAgICAgICAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHRoZSByZW1haW5pbmcgcmVzb3VyY2VzIGFyZSB0b28gbmV3IHRv
IHBydW5lLgogICAgICAgICAgICAgZG91YmxlIGVsYXBzZWRUaW1lID0gY3VycmVudFRpbWUgLSBj
dXJyZW50LT5tX2xhc3REZWNvZGVkQWNjZXNzVGltZTsKLSAgICAgICAgICAgIGlmIChlbGFwc2Vk
VGltZSA8IGNNaW5EZWxheUJlZm9yZUxpdmVEZWNvZGVkUHJ1bmUpCisgICAgICAgICAgICBpZiAo
IXNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgJiYgZWxhcHNlZFRp
bWUgPCBjTWluRGVsYXlCZWZvcmVMaXZlRGVjb2RlZFBydW5lKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmRlY29kZWREYXRhSXNQdXJnZWFibGUo
KSkgewpAQCAtNDU5LDcgKzUzMiwxMSBAQCBib29sIE1lbW9yeUNhY2hlOjptYWtlUmVzb3VyY2VQ
dXJnZWFibGUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogCiB2b2lkIE1lbW9yeUNhY2hlOjpl
dmljdChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7CisjZWxzZQogICAgIEFTU0VS
VChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyNlbmRpZgogICAgIExPRyhSZXNvdXJjZUxvYWRpbmcs
ICJFdmljdGluZyByZXNvdXJjZSAlcCBmb3IgJyVzJyBmcm9tIGNhY2hlIiwgcmVzb3VyY2UsIHJl
c291cmNlLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwogICAgIC8vIFRoZSByZXNv
dXJjZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBieSBzb21lb25lIG90aGVyIHRoYW4g
b3VyIGNhbGxlciwKICAgICAvLyB3aG8gbmVlZGVkIGEgZnJlc2ggY29weSBmb3IgYSByZWxvYWQu
IFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NzkjYzY+Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAppbmRleCAzZjhiNjE2YjE5
ZjJmMGNmMjZlZGE1YzAzZTZiYWJlNTRjNjY4MDRhLi42NWY5MmY5MjMwYzQ5NDRkMDcwNjlhY2Fk
ZTU1MGE4ZjYwNTY3Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
TWVtb3J5Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2Fj
aGUuaApAQCAtMjUsNiArMjUsNyBAQAogI2lmbmRlZiBDYWNoZV9oCiAjZGVmaW5lIENhY2hlX2gK
IAorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5I
YXNoLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgpAQCAtMTg3LDEwICsxODgsMjcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxpdmVTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9saXZlU2l6ZTsgfQogICAgIHVuc2lnbmVkIGRlYWRTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9kZWFkU2l6ZTsgfQogCisjaWYgVVNFKENGKQorICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIFVTRShDRikgb25jZSB3ZSBlaXRoZXIgbWFrZSBOYXRpdmVJbWFnZVB0ciBhIHNt
YXJ0IHBvaW50ZXIgb24gYWxsIHBsYXRmb3JtcyBvcgorICAgIC8vIHJlbW92ZSB0aGUgdXNhZ2Ug
b2YgQ0ZSZXRhaW4oKSBpbiBNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKCkgc28gYXMgdG8g
bWFrZSB0aGUgY29kZSBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyAgICBib29sIGFkZEltYWdlVG9D
YWNoZShOYXRpdmVJbWFnZVB0ciwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBjYWNoZVBhcnRp
dGlvbik7CisgICAgdm9pZCByZW1vdmVJbWFnZUZyb21DYWNoZShjb25zdCBVUkwmLCBjb25zdCBT
dHJpbmcmIGNhY2hlUGFydGl0aW9uKTsKKyNlbmRpZgorCisgICAgLy8gcHJ1bmVEZWFkKigpIC0g
Rmx1c2ggZGVjb2RlZCBhbmQgZW5jb2RlZCBkYXRhIGZyb20gcmVzb3VyY2VzIG5vdCByZWZlcmVu
Y2VkIGJ5IFdlYiBwYWdlcy4KKyAgICAvLyBwcnVuZUxpdmUqKCkgLSBGbHVzaCBkZWNvZGVkIGRh
dGEgZnJvbSByZXNvdXJjZXMgc3RpbGwgcmVmZXJlbmNlZCBieSBXZWIgcGFnZXMuCisgICAgdm9p
ZCBwcnVuZURlYWRSZXNvdXJjZXMoKTsgLy8gQXV0b21hdGljYWxseSBkZWNpZGUgaG93IG11Y2gg
dG8gcHJ1bmUuCisgICAgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXMoYm9vbCBzaG91bGREZXN0cm95
RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzID0gZmFsc2UpOworCiBwcml2YXRlOgorICAg
IHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2VzVG9QZXJjZW50YWdlKGZsb2F0IHBydW5lUGVyY2VudGFn
ZSk7IC8vIFBydW5lIHRvICUgY3VycmVudCBzaXplCisgICAgdm9pZCBwcnVuZUxpdmVSZXNvdXJj
ZXNUb1BlcmNlbnRhZ2UoZmxvYXQgcHJ1bmVQZXJjZW50YWdlKTsKKyAgICB2b2lkIHBydW5lRGVh
ZFJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKTsKKyAgICB2b2lkIHBydW5lTGl2
ZVJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplLCBib29sIHNob3VsZERlc3Ryb3lE
ZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgPSBmYWxzZSk7CisKICAgICBNZW1vcnlDYWNo
ZSgpOwogICAgIH5NZW1vcnlDYWNoZSgpOyAvLyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFrZSBzdXJl
IG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVs
ZXRlIHNpbmdsZXRvbnMuCi0gICAgICAgCisKICAgICBMUlVMaXN0KiBscnVMaXN0Rm9yKENhY2hl
ZFJlc291cmNlKik7CiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcFN0YXRzKCk7CkBAIC0y
MDAsMTUgKzIxOCw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbGl2ZUNhcGFjaXR5KCkgY29u
c3Q7CiAgICAgdW5zaWduZWQgZGVhZENhcGFjaXR5KCkgY29uc3Q7CiAKLSAgICAvLyBwcnVuZURl
YWQqKCkgLSBGbHVzaCBkZWNvZGVkIGFuZCBlbmNvZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgbm90
IHJlZmVyZW5jZWQgYnkgV2ViIHBhZ2VzLgotICAgIC8vIHBydW5lTGl2ZSooKSAtIEZsdXNoIGRl
Y29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBzdGlsbCByZWZlcmVuY2VkIGJ5IFdlYiBwYWdlcy4K
LSAgICB2b2lkIHBydW5lRGVhZFJlc291cmNlcygpOyAvLyBBdXRvbWF0aWNhbGx5IGRlY2lkZSBo
b3cgbXVjaCB0byBwcnVuZS4KLSAgICB2b2lkIHBydW5lTGl2ZVJlc291cmNlcygpOwotICAgIHZv
aWQgcHJ1bmVEZWFkUmVzb3VyY2VzVG9QZXJjZW50YWdlKGZsb2F0IHBydW5lUGVyY2VudGFnZSk7
IC8vIFBydW5lIHRvICUgY3VycmVudCBzaXplCi0gICAgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXNU
b1BlcmNlbnRhZ2UoZmxvYXQgcHJ1bmVQZXJjZW50YWdlKTsKLSAgICB2b2lkIHBydW5lRGVhZFJl
c291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKTsKLSAgICB2b2lkIHBydW5lTGl2ZVJl
c291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKTsKLQogICAgIGJvb2wgbWFrZVJlc291
cmNlUHVyZ2VhYmxlKENhY2hlZFJlc291cmNlKik7CiAgICAgdm9pZCBldmljdChDYWNoZWRSZXNv
dXJjZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2YvU3VicmVzb3Vy
Y2VMb2FkZXJDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2YvU3VicmVzb3VyY2VMb2Fk
ZXJDRi5jcHAKaW5kZXggMjlmZDlmMmQ5YjFhODU2ZjBiYmFjYTI4NzRiN2RkOWNiZTRkNGNkMS4u
NTc2NzYwNGFlZDUzOWVjOTllMTgwZDU5N2RlOWU5ODdjZDNlZjg4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NmL1N1YnJlc291cmNlTG9hZGVyQ0YuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jZi9TdWJyZXNvdXJjZUxvYWRlckNGLmNwcApAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgi
CiAKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIsOCArMzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogdm9pZCBTdWJyZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKIHsKLSAg
ICAvLyBSZWZlcmVuY2UgdGhlIG9iamVjdCBpbiB0aGlzIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRp
b25hbCBwcm9jZXNzaW5nIGNhbiBkbwotICAgIC8vIGFueXRoaW5nIGluY2x1ZGluZyByZW1vdmlu
ZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3Q7IG9uZSBleGFtcGxlIG9mIHRoaXMg
aXMgMzI2NjIxNi4KKyAgICAvLyBSZWZlcmVuY2UgdGhlIG9iamVjdCBpbiB0aGlzIG1ldGhvZCBz
aW5jZSB0aGUgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbyBhbnl0aGluZyBpbmNsdWRpbmcK
KyAgICAvLyByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3Q7IG9uZSBl
eGFtcGxlIG9mIHRoaXMgaXMgPHJkYXI6Ly9wcm9ibGVtLzMyNjYyMTY+LgogICAgIFJlZjxTdWJy
ZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCgqdGhpcyk7CiAKICAgICBSZXNvdXJjZUxvYWRlcjo6ZGlk
UmVjZWl2ZURhdGFBcnJheShkYXRhQXJyYXkpOwpAQCAtNDYsOCArNDcsMTkgQEAgdm9pZCBTdWJy
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkK
ICAgICBpZiAoIW1fbG9hZGluZ011bHRpcGFydENvbnRlbnQpIHsKICAgICAgICAgQ0ZJbmRleCBh
cnJheUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGRhdGFBcnJheSk7CiAgICAgICAgIGZvciAoQ0ZJ
bmRleCBpID0gMDsgaSA8IGFycmF5Q291bnQ7ICsraSkgIHsKLSAgICAgICAgICAgIENGRGF0YVJl
ZiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoZGF0YUFycmF5LCBpKSk7Ci0gICAgICAgICAgICBzZW5kRGF0YVRvUmVzb3VyY2UocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyICo+KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KENGRGF0YUdldExlbmd0aChkYXRhKSkpOworICAgICAgICAgICAgLy8gQSBwcmV2
aW91cyBpdGVyYXRpb24gb2YgdGhpcyBsb29wIG1pZ2h0IGhhdmUgcmVzdWx0ZWQgaW4gdGhlIGxv
YWQKKyAgICAgICAgICAgIC8vIGJlaW5nIGNhbmNlbGxlZC4gQmFpbCBvdXQgaWYgd2Ugbm8gbG9u
Z2VyIGhhdmUgYSBjYWNoZWQgcmVzb3VyY2UuCisgICAgICAgICAgICBpZiAoIW1fcmVzb3VyY2Up
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKFJlc291cmNlQnVmZmVy
KiByZXNvdXJjZURhdGEgPSB0aGlzLT5yZXNvdXJjZURhdGEoKSkKKyAgICAgICAgICAgICAgICBt
X3Jlc291cmNlLT5hZGREYXRhQnVmZmVyKHJlc291cmNlRGF0YSk7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBDRkRhdGFSZWYgY2ZEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxD
RkRhdGFSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZGF0YUFycmF5LCBpKSk7CisgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAq
PihDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSkpOworICAgICAgICAgICAgICAgIENGSW5kZXggbGVu
Z3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGxl
bmd0aCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPENGSW5kZXg+OjptYXgoKSk7CisgICAgICAgICAg
ICAgICAgbV9yZXNvdXJjZS0+YWRkRGF0YShkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVu
Z3RoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL0RvY3VtZW50TG9hZGVyTWFjLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9tYWMvRG9jdW1lbnRMb2FkZXJNYWMuY3BwCmluZGV4IDkxZGRhNmVmOGNi
MjI4MDI5ZmQzNDI3NWUzOWJhNGQyMWY1MmVmODYuLjk1YWY3OTA2NzQyZDg3ZGRjNjBlZGZlZTli
MzE2NzFkMDgxM2Y5NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9tYWMvRG9j
dW1lbnRMb2FkZXJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9tYWMvRG9jdW1l
bnRMb2FkZXJNYWMuY3BwCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxv
YWRlci5oIgorI2luY2x1ZGUgPHd0Zi9TY2hlZHVsZVBhaXIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyB2b2lkIHNjaGVkdWxlQWxsKGNvbnN0
IFJlc291cmNlTG9hZGVyU2V0JiBsb2FkZXJzLCBTY2hlZHVsZVBhaXIqIHBhaXIpCiB7CiAgICAg
Y29uc3QgUmVzb3VyY2VMb2FkZXJTZXQgY29weSA9IGxvYWRlcnM7CkBAIC01MCwyMyArNTIsMzIg
QEAgc3RhdGljIHZvaWQgdW5zY2hlZHVsZUFsbChjb25zdCBSZXNvdXJjZUxvYWRlclNldCYgbG9h
ZGVycywgU2NoZWR1bGVQYWlyKiBwYWlyKQogICAgICAgICBpZiAoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSA9ICgqaXQpLT5oYW5kbGUoKSkKICAgICAgICAgICAgIGhhbmRsZS0+dW5zY2hlZHVsZShw
YWlyKTsKIH0KKyNlbmRpZgogCiB2b2lkIERvY3VtZW50TG9hZGVyOjpzY2hlZHVsZShTY2hlZHVs
ZVBhaXIqIHBhaXIpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobWFpblJlc291cmNl
TG9hZGVyKCkgJiYgbWFpblJlc291cmNlTG9hZGVyKCktPmhhbmRsZSgpKQogICAgICAgICBtYWlu
UmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCktPnNjaGVkdWxlKHBhaXIpOwogICAgIHNjaGVkdWxl
QWxsKG1fc3VicmVzb3VyY2VMb2FkZXJzLCBwYWlyKTsKICAgICBzY2hlZHVsZUFsbChtX3BsdWdJ
blN0cmVhbUxvYWRlcnMsIHBhaXIpOwogICAgIHNjaGVkdWxlQWxsKG1fbXVsdGlwYXJ0U3VicmVz
b3VyY2VMb2FkZXJzLCBwYWlyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhaXIpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnVuc2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBw
YWlyKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1haW5SZXNvdXJjZUxvYWRlcigp
ICYmIG1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUoKSkKICAgICAgICAgbWFpblJlc291cmNl
TG9hZGVyKCktPmhhbmRsZSgpLT51bnNjaGVkdWxlKHBhaXIpOwogICAgIHVuc2NoZWR1bGVBbGwo
bV9zdWJyZXNvdXJjZUxvYWRlcnMsIHBhaXIpOwogICAgIHVuc2NoZWR1bGVBbGwobV9wbHVnSW5T
dHJlYW1Mb2FkZXJzLCBwYWlyKTsKICAgICB1bnNjaGVkdWxlQWxsKG1fbXVsdGlwYXJ0U3VicmVz
b3VyY2VMb2FkZXJzLCBwYWlyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhaXIpOworI2Vu
ZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaAppbmRleCBmOTYyM2VjMDA2YjdhYzEzYmY3ODA1YjEzNmVjMzIx
MTg5Yjg4ZTI4Li5lMzdmNzk1NjY0MDBkOGRmMmE0MzEyY2FhYTI2NmIxMjhhYjIwOWEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKQEAgLTEy
NSw2ICsxMjUsOCBAQCBwdWJsaWM6CiAgICAgSW50U2l6ZSBjdXJyZW50RnJhbWVTaXplKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdCBPVkVSUklE
RTsKIAorICAgIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVk
U2l6ZTsgfQorCiAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNv
bnN0IE9WRVJSSURFOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219478</attachid>
            <date>2013-12-17 17:19:20 -0800</date>
            <delta_ts>2013-12-19 11:08:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125879-20131217171919.patch</filename>
            <type>text/plain</type>
            <size>105768</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY5NDAxYTcwZTRkY2U3
OTAzN2U3MzVkNzI0YTg1ODQyOTEyOTcwOS4uZTEzZjhkY2NjNWVkNzYzM2QwNWFjN2NmOTg0OTdi
Mzc1ZDRiYjFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAxMy0xMi0xNyAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gVXBzdHJlYW0g
V2ViQ29yZS9sb2FkZXIgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI1ODc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgc3ltYm9scyBfX1pON1dlYkNv
cmUxMU1lbW9yeUNhY2hlMTVhZGRJbWFnZVRvQ2FjaGVFUDdDR0ltYWdlUktOU18zVVJMRVJLTjNX
VEY2U3RyaW5nRQorICAgICAgICBhbmQgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTIwcmVtb3Zl
SW1hZ2VGcm9tQ2FjaGVFUktOU18zVVJMRVJLTjNXVEY2U3RyaW5nRS4KKyAgICAgICAgKiBsb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlQWxsTG9hZGVyc1Bh
Z2VDYWNoZUFjY2VwdGFibGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyOjpEb2N1bWVudExvYWRlcik6IEluaXRpYWxpemUgbV9zdWJyZXNvdXJjZUxvYWRlcnNBcmVQ
YWdlQ2FjaGVBY2NlcHRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnN0
b3BMb2FkaW5nKTogTW9kaWZpZWQgdG8gY29uZGl0aW9uYWxseSBjYWxsIGFyZUFsbExvYWRlcnNQ
YWdlQ2FjaGVBY2NlcHRhYmxlKCkuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
aGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkU29vbik6IE1vZGlmaWVkIHRvIHF1ZXJ5IEZyYW1lTG9h
ZGVyOjpsb2Fkc1N5bmNocm9ub3VzbHkoKQorICAgICAgICB3aGV0aGVyIHRvIGxvYWQgc3Vic3Rp
dHV0ZSBkYXRhIGltbWVkaWF0ZWx5IG9yIHRvIHNjaGVkdWxlIGEgbG9hZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjpyZXNwb25zZVJlY2VpdmVkKTogTW9kaWZpZWQgdG8gY3Jl
YXRlIGEgY29udGVudCBmaWxlciB3aGVuIHRoZSByZXNwb25zZSBwcm90b2NvbAorICAgICAgICBp
cyBlaXRoZXIgSFRUUCBvciBIVFRQUywgYXNzdW1pbmcgY29udGVudCBmaWx0ZXJpbmcgaXMgZW5h
YmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpkYXRhUmVjZWl2ZWQpOiBN
b2RpZmllZCB0byBjYWxsIERvY3VtZW50TG9hZGVyOjpzZXRDb250ZW50RmlsdGVyRm9yQmxvY2tl
ZExvYWQoKQorICAgICAgICBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjpjbGVhck1haW5SZXNvdXJjZUxvYWRlcik6IEFkZGVkIFBMQVRGT1JNKElPUykt
Z3VhcmRlZCBjb2RlLiBBbHNvIGFkZGVkIGEKKyAgICAgICAgRklYTUUgY29tbWVudCB0byByZW1v
dmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQgb25jZSB3ZSB1cHN0cmVhbSB0aGUgaU9TIGNoYW5n
ZXMgdG8gUmVzb3VyY2VSZXF1ZXN0LmguCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRl
cjo6c2V0UmVzcG9uc2VNSU1FVHlwZSk6IEFkZGVkOyBndWFyZCBieSBQTEFURk9STShJT1MpLiBB
bHNvIGFkZGVkIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRl
cjo6c3RhcnRMb2FkaW5nTWFpblJlc291cmNlKTogQWRkZWQgUExBVEZPUk0oSU9TKS1ndWFyZGVk
IGNvZGUuIEFsc28gYWRkZWQgYQorICAgICAgICBGSVhNRSBjb21tZW50IHRvIHJlbW92ZSB0aGUg
UExBVEZPUk0oSU9TKS1ndWFyZCBvbmNlIHdlIHVwc3RyZWFtIHRoZSBpT1MgY2hhbmdlcyB0byBS
ZXNvdXJjZVJlcXVlc3QuaC4KKyAgICAgICAgSSBhbHNvIHN1YnN0aXR1dGVkIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDw+IGZvciBERUZJTkVfU1RBVElDX0xPQ0FMLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXI6OnNldENvbnRlbnRGaWx0ZXJGb3JCbG9ja2VkTG9hZCk6IEFkZGVkOyBn
dWFyZGVkIGJ5IFVTRShDT05URU5UX0ZJTFRFUklORykuCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudExvYWRlcjo6aGFuZGxlQ29udGVudEZpbHRlclJlcXVlc3QpOiBBZGRlZDsgZ3VhcmRlZCBi
eSBVU0UoQ09OVEVOVF9GSUxURVJJTkcpIGFuZCBQTEFURk9STShJT1MpLgorICAgICAgICBBbHNv
IGFkZGVkIGEgRklYTUUgY29tbWVudCB0byByZW1vdmUgdGhlIFBMQVRGT1JNKElPUykgZ3VhcmQg
aW5zaWRlIGl0cyBmdW5jdGlvbiBib2R5IG9uY2Ugd2UgdXBzdHJlYW0KKyAgICAgICAgZmlsZSBD
b250ZW50RmlsdGVySU9TLm1tIGFuZCBpbXBsZW1lbnQgQ29udGVudEZpbHRlcjo6cmVxdWVzdFVu
YmxvY2tBbmREaXNwYXRjaElmU3VjY2Vzc2Z1bCgpIGZvciBNYWMuCisgICAgICAgICogbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0
UmVzcG9uc2UpOiBBZGRlZDsgZ3VhcmQgYnkgUExBVEZPUk0oSU9TKS4gQWxzbyBhZGRlZCBhIEZJ
WE1FIGNvbW1lbnQgYXMKKyAgICAgICAgdGhpcyBtZXRob2Qgc2VlbXMgdG8gdmlvbGF0ZSB0aGUg
ZW5jYXBzdWxhdGlvbiBvZiBEb2N1bWVudExvYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjpzdWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6ZG9jdW1lbnRVUkwpOiBBZGRl
ZDsgcmV0dXJucyB0aGUgVVJMIG9mIHRoZSBkb2N1bWVudCByZXN1bHRpbmcgZnJvbSB0aGUgRG9j
dW1lbnRMb2FkZXIuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50V3JpdGVyOjpjcmVhdGVEb2N1bWVudCk6IEFkZGVkIGlPUy1z
cGVjaWZpYyBjb2RlIHRvIGNyZWF0ZSBhIFBERiBkb2N1bWVudC4KKyAgICAgICAgKiBsb2FkZXIv
RW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50Ojpv
cGVuRGF0ZVRpbWVDaG9vc2VyKTogT3B0IG91dCBvZiBjb21waWxpbmcgdGhpcyBjb2RlIGZvciBp
T1MuIEFsc28gc3Vic3RpdHV0ZWQKKyAgICAgICAgbnVsbHB0ciBmb3IgMC4KKyAgICAgICAgKiBs
b2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZVByb2dyZXNzVHJhY2tlcjo6fkZy
YW1lUHJvZ3Jlc3NUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFt
ZUxvYWRlcik6IEluaXRpYWxpemUgbV9sb2Fkc1N5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6aW5pdEZvclN5bnRoZXNpemVkRG9jdW1lbnQpOiBBZGRlZDsgZ3Vh
cmRlZCBieSBQTEFURk9STShJT1MpLiBBbHNvIGFkZGVkIEZJWE1FIGNvbW1lbnQuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tDb21wbGV0ZWQpOiBBZGRlZCBpT1Mtc3BlY2lm
aWMgY29kZSB3aXRoIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9wRm9yVXNlckNhbmNlbCk6IEFkZGVkIGlP
Uy1zcGVjaWZpYyBjb2RlIGFuZCBGSVhNRSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2Rl
IGFuZCBGSVhNRSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnRyYW5z
aXRpb25Ub0NvbW1pdHRlZCk6IE9wdCBvdXQgb2YgRU5BQkxFKFRPVUNIX0VWRU5UUykgbG9naWMg
d2hlbiBidWlsZGluZyBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRp
ZEZpcnN0TGF5b3V0KTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6Y29ubmVjdGlvblByb3BlcnRpZXMpOiBBZGRlZDsgZ3VhcmRlZCBieSBQ
TEFURk9STShJT1MpLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV2luZG93KTogQWRkZWQgaU9T
LXNwZWNpZmljIGNvZGUgYW5kIEZJWE1FIGNvbW1lbnQuCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0TG9hZHNTeW5jaHJv
bm91c2x5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZHNTeW5j
aHJvbm91c2x5KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6
CisgICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUp
OiBPcHQgb3V0IG9mIHNjcm9sbCBwb3NpdGlvbiBsb2dpYyB3aGVuIGJ1aWxkaW5nIGZvciBpT1Mu
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6cmVwbGFjZUN1cnJlbnRJdGVt
KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuaDogQ2hhbmdlZCBhY2Nlc3MgY29udHJvbCBv
ZiBjb25zdHJ1Y3RvciBmcm9tIHByaXZhdGUgdG8gcHJvdGVjdGVkIGFuZCByZW1vdmVkIHRoZSBG
SU5BTAorICAgICAgICBrZXl3b3JkIGZyb20gdGhlIGNsYXNzIHNvIHRoYXQgd2UgY2FuIHN1YmNs
YXNzIFBsYWNlaG9sZGVyRG9jdW1lbnQgb24gaU9TLgorICAgICAgICAqIGxvYWRlci9Qb2xpY3lD
aGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvbGljeUNoZWNrZXI6OmNoZWNrTmF2aWdh
dGlvblBvbGljeSk6IEFkZGVkIFVTRShRVUlDS19MT09LKS0gYW5kIFVTRShDT05URU5UX0ZJTFRF
UklORyktZ3VhcmRlZCBjb2RlLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUJ1ZmZlcjo6c2hvdWxkVXNlUHVyZ2VhYmxlTWVt
b3J5KTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKiBsb2FkZXIv
UmVzb3VyY2VCdWZmZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkTm90aWZpZXI6OmRpc3BhdGNoV2ls
bFNlbmRSZXF1ZXN0KTogQWRkZWQgVVNFKFFVSUNLX0xPT0spLWd1YXJkZWQgY29kZS4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQpOiBBZGRlZCBp
T1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2NoZWR1bGVMb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnJlbW92ZSk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlIHdpdGggRklYTUUgY29t
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmln
aW5SZWRpcmVjdFJlY2VpdmVkKTogQWRkZWQgbnVsbC1jaGVjayBmb3IgdmFyaWFibGUgb2xkSG9z
dC4gQWxzbyBhZGRlZAorICAgICAgICBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOiBBZGRlZCBp
T1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmluaXQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpjb25uZWN0aW9uUHJvcGVydGllcyk6IEFkZGVk
OyBndWFyZGVkIGJ5IFBMQVRGT1JNKElPUykuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9h
ZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKTog
QWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9TKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjppT1NPcmlnaW5hbFJlcXVlc3QpOiBBZGRlZDsgaU9TLXNwZWNpZmljLgorICAg
ICAgICAqIGxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJm
cmFtZUxvYWRlcjo6bG9hZFBsdWdpbik6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAg
ICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJy
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNv
dXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKTogQWRkZWQ7IGd1YXJkZWQgYnkgUExBVEZPUk0oSU9T
KS4KKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5n
KTogQWRkZWQgaU9TLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJj
ZUxvYWRlcjo6d2lsbENhbmNlbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3Vy
Y2VMb2FkZXI6Om5vdGlmeURvbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291
cmNlTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpsb2FkQ2FjaGVHcm91cCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmVzdEhvc3RIYXNoZXMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNo
ZUdyb3VwRm9yVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxh
dGVVc2FnZUZvck9yaWdpbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JPcmlnaW5FeGNsdWRpbmdDYWNo
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVNRTENvbW1hbmQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRh
dGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZXhlY3V0ZVN0YXRlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVuc3VyZU9yaWdpblJlY29yZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJlbW92
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVt
cHR5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVDb3B5T2ZDYWNoZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBTaXplKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZhY3V1bURhdGFi
YXNlRmlsZSk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcik6IEFkZGVk
IGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VNYW51YWw6
OkNhY2hlZEltYWdlTWFudWFsKTogQWRkZWQ7IGd1YXJkZWQgYnkgVVNFKENGKS4gQWxzbyBhZGRl
ZCBGSVhNRSBjb21tZW50IHRvIGluY29ycG9yYXRlCisgICAgICAgIHRoZSBmdW5jdGlvbmFsaXR5
IG9mIHRoaXMgY2xhc3MgaW50byBDYWNoZWRJbWFnZSBhbmQgdG8gcmVtb3ZlIHRoZSBVU0UoQ0Yp
LWd1YXJkIG9uY2Ugd2UgbWFrZSBNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKCkKKyAgICAg
ICAgcGxhdGZvcm0taW5kZXBlbmRlbnQuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZU1h
bnVhbDo6bXVzdFJldmFsaWRhdGVEdWVUb0NhY2hlSGVhZGVycyk6IEFkZGVkOyBndWFyZGVkIGJ5
IFVTRShDRikuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6IFJlbW92ZWQg
RklOQUwga2V5d29yZCBmcm9tIGNsYXNzIHNvIHRoYXQgd2UgY2FuIGRlZmluZSBkZXJpdmVkIGNs
YXNzIENhY2hlZEltYWdlTWFudWFsLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6Omlz
TWFudWFsKTogQWRkZWQ7IGd1YXJkZWQgYnkgVVNFKENGKS4gQWxzbyBhZGRlZCBGSVhNRSBjb21t
ZW50LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VNYW51YWw6OmFkZEZha2VDbGllbnQp
OiBBZGRlZDsgZ3VhcmRlZCBieSBVU0UoQ0YpLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1h
Z2VNYW51YWw6OnJlbW92ZUZha2VDbGllbnQpOiBBZGRlZDsgZ3VhcmRlZCBieSBVU0UoQ0YpLgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZTo6bG9hZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6bG9hZERvbmUpOiBBZGRlZCBhcmd1bWVudCBzaG91bGRQZXJmb3JtUG9z
dExvYWRBY3Rpb25zLCBkZWZhdWx0cyB0byB0cnVlLiBNb2RpZmllZAorICAgICAgICB0byBjb25k
aXRpb25hbGx5IGNhbGwgcGVyZm9ybVBvc3RMb2FkQWN0aW9ucygpIHdpdGggcmVzcGVjdCB0byB0
aGUgYXJndW1lbnQgc2hvdWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpwcmVsb2FkKTogQWRkZWQgaU9TLXNwZWNpZmljIGNv
ZGUuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tGb3JQZW5k
aW5nUHJlbG9hZHMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bWVtb3J5Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2Fj
aGU6OmFkZCk6IEFkZGVkIGlPUy1zcGVjaWZpYyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5Q2FjaGU6OnJldmFsaWRhdGlvbkZhaWxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OnJlc291cmNlRm9yUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSk6IEFkZGVkOyBndWFyZGVkIGJ5IFVTRShD
RikuIEFsc28gYWRkZWQgRklYTUUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNh
Y2hlOjpyZW1vdmVJbWFnZUZyb21DYWNoZSk6IEFkZGVkOyBndWFyZGVkIGJ5IFVTRShDRikuIEFs
c28gYWRkZWQgRklYTUUgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpw
cnVuZUxpdmVSZXNvdXJjZXMpOiBNb2RpZmllZCB0byB0YWtlIGFyZ3VtZW50IHNob3VsZERlc3Ry
b3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpNZW1v
cnlDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKTogTW9kaWZpZWQgdG8gdGFrZSBhcmd1
bWVudCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzLAorICAgICAg
ICBkZWZhdWx0cyB0byBmYWxzZS4gV2hlbiB0aGlzIGFyZ3VtZW50IGlzIHRydWUgd2UgZGVzdHJv
eSB0aGUgZGVjb2RlZCBkYXRhIGZvciBhbGwgbGl2ZSByZXNvdXJjZXMgZnJvbSB0aGUgbWVtb3J5
IGNhY2hlLgorICAgICAgICBTdWNoIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZnVsIHdoZW4gdGhlIHN5
c3RlbSBpcyBydW5uaW5nIGxvdyBvbiBtZW1vcnkuCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlD
YWNoZTo6ZXZpY3QpOiBBZGRlZCBpT1Mtc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvTWVtb3J5Q2FjaGUuaDoKKyAgICAgICAgKiBsb2FkZXIvY2YvU3VicmVzb3VyY2VMb2Fk
ZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZURhdGFBcnJheSk6IEFjdHVhbGx5IG1ha2UgdGhpcyBjb2RlIGNvbXBpbGUuIEluIHBhcnRpY3Vs
YXIsIHRoZXJlIGlzIG5vCisgICAgICAgIG1ldGhvZCBjYWxsZWQgc2VuZERhdGFUb1Jlc291cmNl
IG9uIFN1YnJlc291cmNlTG9hZGVyIG9yIGluIGl0cyBjbGFzcyBoaWVyYXJjaHkuCisgICAgICAg
ICogbG9hZGVyL21hYy9Eb2N1bWVudExvYWRlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6c2NoZWR1bGUpOiBUaGlzIG1ldGhvZCBoYXMgYW4gZW1wdHkgaW1wbGVt
ZW50YXRpb24gd2hlbiBidWlsZGluZyBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXI6OnVuc2NoZWR1bGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oOiBFeHBvc2VkIGRlY29kZWRTaXplKCkgdG8gYWNjZXNzIHRoZSBkZWNv
ZGVkIHNpemUgb2YgdGhlIGJpdG1hcCBpbWFnZS4KKyAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5
IGlzIHVzZWQgaW4gTWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSgpLgorCiAyMDEzLTEyLTE3
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNU0VdIFVwZGF0
ZSBkdXJhdGlvbiBhZnRlciBhcHBlbmRpbmcgc2FtcGxlcywgcGVyIHNwZWMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCmluZGV4IDYyNTAxOTQwM2ZkNjE2MzY5ZWM2ZWVhY2Y2YjM5ZTBlMTcxYjBlNTcuLjdl
NjYzNDkyZGJlYzUyYTNkMjAyMzhkNGI5MGRlMTk1YWY0YjgwM2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCkBAIC0xNzQsOCArMTc0LDEwIEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxM2dldFN0
YXRpc3RpY3NFdgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTEzc2V0Q2FwYWNpdGllc0VqamoK
IF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxNGV2aWN0UmVzb3VyY2VzRXYKIF9fWk43V2ViQ29y
ZTExTWVtb3J5Q2FjaGUxNHJlc291cmNlRm9yVVJMRVJLTlNfM1VSTEUKK19fWk43V2ViQ29yZTEx
TWVtb3J5Q2FjaGUxNWFkZEltYWdlVG9DYWNoZUVQN0NHSW1hZ2VSS05TXzNVUkxFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktO
U18xNVJlc291cmNlUmVxdWVzdEUKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdp
bnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJTlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdp
bkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQorX19a
TjdXZWJDb3JlMTFNZW1vcnlDYWNoZTIwcmVtb3ZlSW1hZ2VGcm9tQ2FjaGVFUktOU18zVVJMRVJL
TjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2Vz
V2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29yZTExUGFnZUNvbnNv
bGUyMXNob3VsZFByaW50RXhjZXB0aW9uc0V2CiBfX1pON1dlYkNvcmUxMVBhZ2VDb25zb2xlMjRz
ZXRTaG91bGRQcmludEV4Y2VwdGlvbnNFYgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKaW5kZXggMzJiZDgxNTgyYTY3Y2Y5OWI1YzcxNWJiODU3ZWJjYmIwM2JjNzc2Zi4u
NzNmZTNhN2FkNWRjNTM4YzVhOGU3M2NjNjYzYzIwZjZmYzQxNTYzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC01NiwxMiArNTYsMTQgQEAKICNpbmNsdWRl
ICJQb2xpY3lDaGVja2VyLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1
ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTk1LDYgKzk3LDI3IEBAIHN0YXRpYyB2b2lkIHNldEFsbERlZmVyc0xvYWRpbmcoY29u
c3QgUmVzb3VyY2VMb2FkZXJTZXQmIGxvYWRlcnMsIGJvb2wgZGVmZXJzKQogICAgICAgICBsb2Fk
ZXJzQ29weVtpXS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOwogfQogCitzdGF0aWMgYm9vbCBh
cmVBbGxMb2FkZXJzUGFnZUNhY2hlQWNjZXB0YWJsZShjb25zdCBSZXNvdXJjZUxvYWRlclNldCYg
bG9hZGVycykKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gbG9hZGVyc0Nv
cHk7CisgICAgY29weVRvVmVjdG9yKGxvYWRlcnMsIGxvYWRlcnNDb3B5KTsKKyAgICBzaXplX3Qg
c2l6ZSA9IGxvYWRlcnNDb3B5LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gbG9hZGVyc0NvcHlb
aV0tPmhhbmRsZSgpOworICAgICAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBtZW1vcnlD
YWNoZSgpLT5yZXNvdXJjZUZvclVSTChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAg
ICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAvLyBBbGwgbm9uLWltYWdlIGxvYWRzIHdpbGwgcHJldmVudCB0aGUgcGFnZSBmcm9t
IGVudGVyaW5nIHRoZSBQYWdlQ2FjaGUuCisgICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2UtPmlz
SW1hZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIERvY3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcSwgY29uc3QgU3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQogICAgIDog
bV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKHRydWUpCiAgICAgLCBtX2ZyYW1lKDApCkBAIC0x
MTksNiArMTQyLDcgQEAgRG9jdW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYKICAgICAsIG1faWRlbnRpZmll
ckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIoMCkKICAgICAsIG1fZGF0YUxvYWRUaW1lcih0
aGlzLCAmRG9jdW1lbnRMb2FkZXI6OmhhbmRsZVN1YnN0aXR1dGVEYXRhTG9hZE5vdykKICAgICAs
IG1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3koZmFsc2UpCisgICAgLCBtX3N1YnJlc291cmNlTG9h
ZGVyc0FyZVBhZ2VDYWNoZUFjY2VwdGFibGUoZmFsc2UpCiAgICAgLCBtX2FwcGxpY2F0aW9uQ2Fj
aGVIb3N0KGFkb3B0UHRyKG5ldyBBcHBsaWNhdGlvbkNhY2hlSG9zdCh0aGlzKSkpCiB7CiB9CkBA
IC0yNTYsNyArMjgwLDE0IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN0b3BMb2FkaW5nKCkKICAg
ICAvLyAoVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlcmUncyBhIHNpbmdsZSBYTUxIdHRwUmVxdWVz
dCBjdXJyZW50bHkgbG9hZGluZyBhbmQgc3RvcExvYWRpbmcgY2F1c2VzIGl0CiAgICAgLy8gdG8g
c3RvcCBsb2FkaW5nLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG5lZWQgdG8gc2F2ZSBpdCBzbyB3ZSBk
b24ndCByZXR1cm4gZWFybHkuCiAgICAgYm9vbCBsb2FkaW5nID0gaXNMb2FkaW5nKCk7Ci0gICAg
CisKKyAgICAvLyBXZSBtYXkgd2FudCB0byBhdWRpdCB0aGUgZXhpc3Rpbmcgc3VicmVzb3VyY2Ug
bG9hZGVycyB3aGVuIHdlIGFyZSBvbiBhIHBhZ2Ugd2hpY2ggaGFzIGNvbXBsZXRlZAorICAgIC8v
IGxvYWRpbmcgYnV0IHRoZXJlIGFyZSBzdWJyZXNvdXJjZSBsb2FkcyBkdXJpbmcgY2FuY2VsbGF0
aW9uLiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlCisgICAgLy8gZnJhbWUtPnN0b3BMb2Fk
aW5nKCkgY2FsbCwgd2hpY2ggbWF5IGV2aWN0IHRoZSBDYWNoZWRSZXNvdXJjZXMsIHdoaWNoIHdl
IHJlbHkgb24gdG8gY2hlY2sKKyAgICAvLyB0aGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UgbG9hZHMu
CisgICAgaWYgKGxvYWRpbmcgJiYgbV9jb21taXR0ZWQgJiYgIW1haW5SZXNvdXJjZUxvYWRlcigp
ICYmICFtX3N1YnJlc291cmNlTG9hZGVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3VicmVzb3Vy
Y2VMb2FkZXJzQXJlUGFnZUNhY2hlQWNjZXB0YWJsZSA9IGFyZUFsbExvYWRlcnNQYWdlQ2FjaGVB
Y2NlcHRhYmxlKG1fc3VicmVzb3VyY2VMb2FkZXJzKTsKKwogICAgIGlmIChtX2NvbW1pdHRlZCkg
ewogICAgICAgICAvLyBBdHRlbXB0IHRvIHN0b3AgdGhlIGZyYW1lIGlmIHRoZSBkb2N1bWVudCBs
b2FkZXIgaXMgbG9hZGluZywgb3IgaWYgaXQgaXMgZG9uZSBsb2FkaW5nIGJ1dAogICAgICAgICAv
LyBzdGlsbCAgcGFyc2luZy4gRmFpbHVyZSB0byBkbyBzbyBjYW4gY2F1c2UgYSB3b3JsZCBsZWFr
LgpAQCAtMzgxLDYgKzQxMiw5IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGlu
Zyhkb3VibGUgZmluaXNoVGltZSkKICAgICAgICAgY29uc3QgY2hhciogZGF0YSA9IG1fY29udGVu
dEZpbHRlci0+Z2V0UmVwbGFjZW1lbnREYXRhKGxlbmd0aCk7CiAgICAgICAgIGlmIChkYXRhKQog
ICAgICAgICAgICAgZGF0YVJlY2VpdmVkKG1fbWFpblJlc291cmNlLmdldCgpLCBkYXRhLCBsZW5n
dGgpOworCisgICAgICAgIGlmIChtX2NvbnRlbnRGaWx0ZXItPmRpZEJsb2NrRGF0YSgpKQorICAg
ICAgICAgICAgc2V0Q29udGVudEZpbHRlckZvckJsb2NrZWRMb2FkKG1fY29udGVudEZpbHRlcik7
CiAgICAgfQogI2VuZGlmCiAKQEAgLTQ1NSwxMCArNDg5LDEwIEBAIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6OnN0YXJ0RGF0YUxvYWRUaW1lcigpCiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmhhbmRsZVN1
YnN0aXR1dGVEYXRhTG9hZFNvb24oKQogewotICAgIGlmIChtX2RlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQpCi0gICAgICAgIHN0YXJ0RGF0YUxvYWRUaW1lcigpOwotICAgIGVsc2UKKyAgICBpZiAo
IW1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCB8fCBmcmFtZUxvYWRlcigpLT5sb2Fkc1N5bmNo
cm9ub3VzbHkoKSkKICAgICAgICAgaGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkTm93KDApOworICAg
IGVsc2UKKyAgICAgICAgc3RhcnREYXRhTG9hZFRpbWVyKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnRM
b2FkZXI6OnJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpCkBAIC02MzMsNyArNjY3LDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6cmVzcG9uc2VSZWNl
aXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmUKICNlbmRpZgog
CiAjaWYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQotICAgIGlmIChyZXNwb25zZS51cmwoKS5wcm90
b2NvbElzKCJodHRwcyIpICYmIENvbnRlbnRGaWx0ZXI6OmlzRW5hYmxlZCgpKQorICAgIGlmIChy
ZXNwb25zZS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgJiYgQ29udGVudEZpbHRlcjo6
aXNFbmFibGVkKCkpCiAgICAgICAgIG1fY29udGVudEZpbHRlciA9IENvbnRlbnRGaWx0ZXI6OmNy
ZWF0ZShyZXNwb25zZSk7CiAjZW5kaWYKIApAQCAtODQ0LDYgKzg3OCw5IEBAIHZvaWQgRG9jdW1l
bnRMb2FkZXI6OmRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNo
YXIqIGRhdGEsIGluCiAKICAgICAgICAgZGF0YSA9IG1fY29udGVudEZpbHRlci0+Z2V0UmVwbGFj
ZW1lbnREYXRhKGxlbmd0aCk7CiAgICAgICAgIGxvYWRXYXNCbG9ja2VkQmVmb3JlRmluaXNoaW5n
ID0gbV9jb250ZW50RmlsdGVyLT5kaWRCbG9ja0RhdGEoKTsKKworICAgICAgICBpZiAobG9hZFdh
c0Jsb2NrZWRCZWZvcmVGaW5pc2hpbmcpCisgICAgICAgICAgICBzZXRDb250ZW50RmlsdGVyRm9y
QmxvY2tlZExvYWQobV9jb250ZW50RmlsdGVyKTsKICAgICB9CiAjZW5kaWYKIApAQCAtOTI3LDYg
Kzk2NCwxMiBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpkZXRhY2hGcm9tRnJhbWUoKQogdm9pZCBE
b2N1bWVudExvYWRlcjo6Y2xlYXJNYWluUmVzb3VyY2VMb2FkZXIoKQogewogICAgIG1fbG9hZGlu
Z01haW5SZXNvdXJjZSA9IGZhbHNlOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1F
OiBSZW1vdmUgUExBVEZPUk0oSU9TKS1ndWFyZCBvbmNlIHdlIHVwc3RyZWFtIHRoZSBpT1MgY2hh
bmdlcyB0byBSZXNvdXJjZVJlcXVlc3QuaC4KKyAgICBtX3JlcXVlc3Quc2V0TWFpblJlc291cmNl
UmVxdWVzdChmYWxzZSk7CisjZW5kaWYKKwogICAgIGlmICh0aGlzID09IGZyYW1lTG9hZGVyKCkt
PmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgIGNoZWNrTG9hZENvbXBsZXRlKCk7CiB9
CkBAIC0xMjU2LDYgKzEyOTksMTQgQEAgY29uc3QgU3RyaW5nJiBEb2N1bWVudExvYWRlcjo6cmVz
cG9uc2VNSU1FVHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVzcG9uc2UubWltZVR5cGUoKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzZWVtcyB0byB2
aW9sYXRlIHRoZSBlbmNhcHN1bGF0aW9uIG9mIHRoaXMgY2xhc3MuCit2b2lkIERvY3VtZW50TG9h
ZGVyOjpzZXRSZXNwb25zZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgcmVzcG9uc2VNaW1lVHlwZSkK
K3sKKyAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKHJlc3BvbnNlTWltZVR5cGUpOworfQorI2Vu
ZGlmCisKIGNvbnN0IFVSTCYgRG9jdW1lbnRMb2FkZXI6OnVucmVhY2hhYmxlVVJMKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9zdWJzdGl0dXRlRGF0YS5mYWlsaW5nVVJMKCk7CkBAIC0xMzgwLDkg
KzE0MzEsMTMgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291cmNl
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBG
SVhNRTogUmVtb3ZlIFBMQVRGT1JNKElPUyktZ3VhcmQgb25jZSB3ZSB1cHN0cmVhbSB0aGUgaU9T
IGNoYW5nZXMgdG8gUmVzb3VyY2VSZXF1ZXN0LmguCisgICAgbV9yZXF1ZXN0LnNldE1haW5SZXNv
dXJjZVJlcXVlc3QodHJ1ZSk7CisjZW5kaWYKKwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KG1fcmVxdWVzdCk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXNvdXJjZUxvYWRlck9wdGlv
bnMsIG1haW5SZXNvdXJjZUxvYWRPcHRpb25zLAotICAgICAgICAoU2VuZENhbGxiYWNrcywgU25p
ZmZDb250ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRG
b3JBbGxDcmVkZW50aWFscywgU2tpcFNlY3VyaXR5Q2hlY2ssIFVzZURlZmF1bHRPcmlnaW5SZXN0
cmljdGlvbnNGb3JUeXBlKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlc291cmNlTG9h
ZGVyT3B0aW9ucz4gbWFpblJlc291cmNlTG9hZE9wdGlvbnMoU2VuZENhbGxiYWNrcywgU25pZmZD
b250ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRGb3JB
bGxDcmVkZW50aWFscywgU2tpcFNlY3VyaXR5Q2hlY2ssIFVzZURlZmF1bHRPcmlnaW5SZXN0cmlj
dGlvbnNGb3JUeXBlKTsKICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0KHJlcXVlc3QsIG1haW5SZXNvdXJjZUxvYWRPcHRpb25zKTsKICAgICBtX21haW5SZXNv
dXJjZSA9IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlcXVlc3RNYWluUmVzb3VyY2UoY2FjaGVk
UmVzb3VyY2VSZXF1ZXN0KTsKICAgICBpZiAoIW1fbWFpblJlc291cmNlKSB7CkBAIC0xNTA2LDQg
KzE1NjEsMzggQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6aGFuZGxlZE9ubG9hZEV2ZW50cygpCiAg
ICAgYXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c3RvcERlZmVycmluZ0V2ZW50cygpOwogfQogCisj
aWYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0Q29udGVu
dEZpbHRlckZvckJsb2NrZWRMb2FkKFBhc3NSZWZQdHI8Q29udGVudEZpbHRlcj4gY29udGVudEZp
bHRlcikKK3sKKyAgICBBU1NFUlQoIW1fY29udGVudEZpbHRlckZvckJsb2NrZWRMb2FkKTsKKyAg
ICBBU1NFUlQoY29udGVudEZpbHRlcik7CisgICAgQVNTRVJUKGNvbnRlbnRGaWx0ZXItPmRpZEJs
b2NrRGF0YSgpKTsKKyAgICBtX2NvbnRlbnRGaWx0ZXJGb3JCbG9ja2VkTG9hZCA9IGNvbnRlbnRG
aWx0ZXI7Cit9CisKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmhhbmRsZUNvbnRlbnRGaWx0ZXJSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBGSVhNRTogUmVt
b3ZlIFBMQVRGT1JNKElPUyktZ3VhcmQgb25jZSB3ZSB1cHN0cmVhbSBDb250ZW50RmlsdGVySU9T
Lm1tIGFuZAorICAgIC8vIGltcGxlbWVudCBDb250ZW50RmlsdGVyOjpyZXF1ZXN0VW5ibG9ja0Fu
ZERpc3BhdGNoSWZTdWNjZXNzZnVsKCkgZm9yIE1hYy4KKyNpZiBQTEFURk9STShJT1MpCisgICAg
aWYgKCFtX2NvbnRlbnRGaWx0ZXJGb3JCbG9ja2VkTG9hZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoQ29udGVudEZpbHRlcjo6c2No
ZW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UocmVxdWVzdC51cmwoKS5ob3N0KCksICJ1bmJsb2NrIikpIHsKKyAgICAgICAgLy8gVGVsbCB0
aGUgRnJhbWVMb2FkZXIgdG8gcmVsb2FkIGlmIHRoZSB1bmJsb2NrIGlzIHN1Y2Nlc3NmdWwuCisg
ICAgICAgIG1fY29udGVudEZpbHRlckZvckJsb2NrZWRMb2FkLT5yZXF1ZXN0VW5ibG9ja0FuZERp
c3BhdGNoSWZTdWNjZXNzZnVsKGJpbmQoJkZyYW1lTG9hZGVyOjpyZWxvYWQsICYobV9mcmFtZS0+
bG9hZGVyKCkpLCBmYWxzZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCmluZGV4IDMzMzg2ZTZlODBlMzZjMzMz
ZGM4MzQwOTQxMzQyNWNkMzUzYmIzZDUuLjE1MWQzNjk0ZDRkNTJmYWYwNzU5N2JkYzBhYmJmOWVi
NzkyNjU5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCkBAIC0xMTYs
NiArMTE2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgVVJMJiByZXF1
ZXN0VVJMKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwoKSBjb25zdDsK
ICAgICAgICAgY29uc3QgU3RyaW5nJiByZXNwb25zZU1JTUVUeXBlKCkgY29uc3Q7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2VlbXMgdG8gdmlvbGF0
ZSB0aGUgZW5jYXBzdWxhdGlvbiBvZiB0aGlzIGNsYXNzLgorICAgICAgICB2b2lkIHNldFJlc3Bv
bnNlTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CisjZW5kaWYKIAogICAgICAgICB2b2lkIHJlcGxh
Y2VSZXF1ZXN0VVJMRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbihjb25zdCBVUkwmKTsKICAgICAg
ICAgYm9vbCBpc1N0b3BwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0b3BwaW5nOyB9CkBAIC0x
MjMsOCArMTI3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRDb21t
aXR0ZWQoYm9vbCBjb21taXR0ZWQpIHsgbV9jb21taXR0ZWQgPSBjb21taXR0ZWQ7IH0KICAgICAg
ICAgYm9vbCBpc0NvbW1pdHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkOyB9CiAgICAg
ICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQorCiAgICAgICAgIGNv
bnN0IFJlc291cmNlRXJyb3ImIG1haW5Eb2N1bWVudEVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9t
YWluRG9jdW1lbnRFcnJvcjsgfQorCisgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQorI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNlZW1zIHRvIHZpb2xhdGUgdGhlIGVuY2Fw
c3VsYXRpb24gb2YgdGhpcyBjbGFzcy4KKyAgICAgICAgdm9pZCBzZXRSZXNwb25zZShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgeyBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7IH0KKyNl
bmRpZgorCiAgICAgICAgIGJvb2wgaXNDbGllbnRSZWRpcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNDbGllbnRSZWRpcmVjdDsgfQogICAgICAgICB2b2lkIHNldElzQ2xpZW50UmVkaXJlY3QoYm9v
bCBpc0NsaWVudFJlZGlyZWN0KSB7IG1faXNDbGllbnRSZWRpcmVjdCA9IGlzQ2xpZW50UmVkaXJl
Y3Q7IH0KICAgICAgICAgdm9pZCBoYW5kbGVkT25sb2FkRXZlbnRzKCk7CkBAIC0xOTMsNyArMjA0
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgZGlkQ3JlYXRlR2xvYmFs
SGlzdG9yeUVudHJ5KCkgY29uc3QgeyByZXR1cm4gbV9kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50
cnk7IH0KICAgICAgICAgdm9pZCBzZXREaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkoYm9vbCBk
aWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkpIHsgbV9kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50
cnkgPSBkaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnk7IH0KLSAgICAgICAgCisKKyAgICAgICAg
Ym9vbCBzdWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWJyZXNvdXJjZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxlOyB9CisKICAg
ICAgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogICAgICAgICB2b2lkIHNldE1haW5S
ZXNvdXJjZURhdGFCdWZmZXJpbmdQb2xpY3koRGF0YUJ1ZmZlcmluZ1BvbGljeSk7CiAKQEAgLTI0
OSwxNSArMjYyLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGNoZWNr
TG9hZENvbXBsZXRlKCk7CiAKKyNpZiBVU0UoQ09OVEVOVF9GSUxURVJJTkcpCisgICAgICAgIHZv
aWQgc2V0Q29udGVudEZpbHRlckZvckJsb2NrZWRMb2FkKFBhc3NSZWZQdHI8Q29udGVudEZpbHRl
cj4pOworICAgICAgICBib29sIGhhbmRsZUNvbnRlbnRGaWx0ZXJSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpOworI2VuZGlmCisKKyAgICAgICAgLy8gVGhlIFVSTCBvZiB0aGUgZG9jdW1l
bnQgcmVzdWx0aW5nIGZyb20gdGhpcyBEb2N1bWVudExvYWRlci4KKyAgICAgICAgVVJMIGRvY3Vt
ZW50VVJMKCkgY29uc3Q7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIERvY3VtZW50TG9hZGVy
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJik7CiAKICAgICAg
ICAgYm9vbCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7CiAKICAgICBwcml2YXRlOgotCi0g
ICAgICAgIC8vIFRoZSBVUkwgb2YgdGhlIGRvY3VtZW50IHJlc3VsdGluZyBmcm9tIHRoaXMgRG9j
dW1lbnRMb2FkZXIuCi0gICAgICAgIFVSTCBkb2N1bWVudFVSTCgpIGNvbnN0OwogICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldFJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0Jik7CkBAIC0zOTcsMTEgKzQxNSwxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFJlZlB0cjxJY29uTG9hZERlY2lzaW9uQ2FsbGJhY2s+IG1faWNvbkxv
YWREZWNpc2lvbkNhbGxiYWNrOwogICAgICAgICBSZWZQdHI8SWNvbkRhdGFDYWxsYmFjaz4gbV9p
Y29uRGF0YUNhbGxiYWNrOwogCisgICAgICAgIGJvb2wgbV9zdWJyZXNvdXJjZUxvYWRlcnNBcmVQ
YWdlQ2FjaGVBY2NlcHRhYmxlOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNh
Y2hlSG9zdDsgIC8vIGZvciBzdWJzdGl0dXRlIHJlc291cmNlIGRlbGl2ZXJ5CiAgICAgICAgIE93
blB0cjxBcHBsaWNhdGlvbkNhY2hlSG9zdD4gbV9hcHBsaWNhdGlvbkNhY2hlSG9zdDsKIAogI2lm
IFVTRShDT05URU5UX0ZJTFRFUklORykKICAgICAgICAgUmVmUHRyPENvbnRlbnRGaWx0ZXI+IG1f
Y29udGVudEZpbHRlcjsKKyAgICAgICAgUmVmUHRyPENvbnRlbnRGaWx0ZXI+IG1fY29udGVudEZp
bHRlckZvckJsb2NrZWRMb2FkOwogI2VuZGlmCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFdyaXRlci5jcHAKaW5kZXggNmE2ZDNiMGIzMDVhMWQ5M2I5NWEzNjJkOGE1NzY2
YWE1NTcyZDUzMy4uNWNhYjg2NGFmN2Y5ODY2Y2QyNTNhYTQxODllMGY0MDk4Y2MyZTk0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCkBAIC0zNiw2ICszNiw5IEBA
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0
YXRlTWFjaGluZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJQREZEb2N1bWVudC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiUGxhY2Vob2xkZXJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmF3RGF0
YURvY3VtZW50UGFyc2VyLmgiCkBAIC0xMDcsNiArMTEwLDEwIEBAIFBhc3NSZWZQdHI8RG9jdW1l
bnQ+IERvY3VtZW50V3JpdGVyOjpjcmVhdGVEb2N1bWVudChjb25zdCBVUkwmIHVybCkKIHsKICAg
ICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLnN0YXRlTWFjaGluZSgpLT5pc0Rpc3BsYXlpbmdJbml0
aWFsRW1wdHlEb2N1bWVudCgpICYmIG1fZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLnNob3VsZEFs
d2F5c1VzZVBsdWdpbkRvY3VtZW50KG1fbWltZVR5cGUpKQogICAgICAgICByZXR1cm4gUGx1Z2lu
RG9jdW1lbnQ6OmNyZWF0ZShtX2ZyYW1lLCB1cmwpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobV9taW1lVHlwZSwgImFwcGxpY2F0aW9uL3BkZiIpKQorICAg
ICAgICByZXR1cm4gUERGRG9jdW1lbnQ6OmNyZWF0ZShtX2ZyYW1lLCB1cmwpOworI2VuZGlmCiAg
ICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5oYXNIVE1MVmlldygpKQogICAgICAg
ICByZXR1cm4gUGxhY2Vob2xkZXJEb2N1bWVudDo6Y3JlYXRlKG1fZnJhbWUsIHVybCk7CiAgICAg
cmV0dXJuIERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChtX21pbWVUeXBlLCBtX2Zy
YW1lLCB1cmwsIG1fZnJhbWUtPmluVmlld1NvdXJjZU1vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuY3BwCmluZGV4IGZjMjRhY2I5ZGViMmI0MTAwNGI3NmYwMTRkODI2NDhm
ZGEwMGMyYzguLmI2MzhkMWMyYThmNjhmOTg2NjllMGQzNmIzYTk1YTFmZDQ0OGQ1ZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBQ
YXNzT3duUHRyPENvbG9yQ2hvb3Nlcj4gRW1wdHlDaHJvbWVDbGllbnQ6OmNyZWF0ZUNvbG9yQ2hv
b3NlcihDb2xvckNob29zZXJDbGllbgogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoREFURV9BTkRf
VElNRV9JTlBVVF9UWVBFUykKKyNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykg
JiYgIVBMQVRGT1JNKElPUykKIFBhc3NSZWZQdHI8RGF0ZVRpbWVDaG9vc2VyPiBFbXB0eUNocm9t
ZUNsaWVudDo6b3BlbkRhdGVUaW1lQ2hvb3NlcihEYXRlVGltZUNob29zZXJDbGllbnQqLCBjb25z
dCBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzJikKIHsKLSAgICByZXR1cm4gUGFzc1JlZlB0cjxE
YXRlVGltZUNob29zZXI+KCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IGIwMTViMDJmOTI5NDc2OWVkMjViODA1
MmU0MTc0YjI3YWFiNGViOWYuLjI5NmY0MWUxNGU5MmM3MTU0OGI2MGU3ZTk0MDdjZmM0ZjQ5NjYz
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTE2Miw3ICsxNjIsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENvbG9yQ2hvb3Nlcj4gY3JlYXRlQ29s
b3JDaG9vc2VyKENvbG9yQ2hvb3NlckNsaWVudCosIGNvbnN0IENvbG9yJikgT1ZFUlJJREU7CiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKQorI2lmIEVOQUJM
RShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxEYXRlVGltZUNob29zZXI+IG9wZW5EYXRlVGltZUNob29zZXIoRGF0ZVRp
bWVDaG9vc2VyQ2xpZW50KiwgY29uc3QgRGF0ZVRpbWVDaG9vc2VyUGFyYW1ldGVycyYpIE9WRVJS
SURFOwogI2VuZGlmCiAKQEAgLTE3NCw4ICsxNzQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBlbGVtZW50RGlkRm9jdXMoY29uc3QgTm9kZSopIE9WRVJSSURFIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBlbGVtZW50RGlkQmx1cihjb25zdCBOb2RlKikgT1ZFUlJJREUgeyB9CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikg
T1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VN
b3Zlcyhib29sKSBPVkVSUklERSB7IH0KKyNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9s
bFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JikgY29uc3QgT1ZFUlJJREUgeyB9CiAKQEAgLTE5
Miw2ICsxOTQsMjggQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCisjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJldmVudERlZmF1bHRG
b3JFdmVudCgpIE9WRVJSSURFIHsgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVNb2JpbGVEb2NUeXBlKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
U2Nyb2xsTm90aWZpY2F0aW9ucyhGcmFtZSosIGJvb2wpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBvYnNlcnZlZENvbnRlbnRDaGFuZ2UoRnJhbWUqKSBPVkVSUklERSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJDb250ZW50Q2hhbmdlT2JzZXJ2ZXJzKEZyYW1lKikgT1ZFUlJJREUg
eyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdG
cmFtZShGcmFtZSopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRMYXlvdXQoTGF5
b3V0VHlwZSkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0T3ZlcmZsb3dT
Y3JvbGwoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kT3ZlcmZsb3dTY3Jv
bGwoKSBPVkVSUklERSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdXBwcmVzc0Zvcm1Ob3RpZmlj
YXRpb25zKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVGb3JtTm90aWZp
Y2F0aW9ucygpIE9WRVJSSURFIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Ny
b2xsaW5nTGF5ZXIoTm9kZSosIFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKiwgY29uc3Qg
SW50U2l6ZSYsIGJvb2wsIGJvb2wpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVTY3JvbGxpbmdMYXllcihOb2RlKiwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtTGF5ZXIqKSBP
VkVSUklERSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3ZWJBcHBPcmllbnRhdGlvbnNVcGRhdGVk
KCkgT1ZFUlJJREUgeyB9OworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JN
KElPUykKICAgICB2aXJ0dWFsIGJvb2wgaXNTdG9wcGluZygpIE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKIApAQCAtMjIwLDYgKzI0NCw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKSBPVkVSUklERSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKSBPVkVSUklERSB7IH0KKyNpZiBQTEFURk9S
TShJT1MpCisgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0V2l0aG91dFJlY2FsY3VsYXRpbmdT
dHlsZXMoKSBPVkVSUklERSB7IH0KKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91
dEZvck5vbkhUTUwoKSBPVkVSUklERSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb3BpZXNP
blNjcm9sbCgpIE9WRVJSSURFIHsgfQpAQCAtMjM3LDYgKzI2NCwxMSBAQCBwdWJsaWM6CiAjaWYg
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNl
OyB9CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzKERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZykgT1ZFUlJJREUgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCisKICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgT1ZFUlJJREUgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nLCBpbnQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSBP
VkVSUklERSB7IH0KQEAgLTMyNSw2ICszNTcsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKSBPVkVSUklERSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1l
KENhY2hlZEZyYW1lKikgT1ZFUlJJREUgeyB9CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1
YWwgdm9pZCBkaWRSZXN0b3JlRnJhbWVIaWVyYXJjaHlGb3JDYWNoZWRGcmFtZSgpIE9WRVJSSURF
IHsgfQorI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5l
d1BhZ2UoKSBPVkVSUklERSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRTYXZlVG9QYWdlQ2Fj
aGUoKSBPVkVSUklERSB7IH0KQEAgLTQ0OSw2ICs0ODQsMjEgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCB0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqKSBPVkVSUklERSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopIE9W
RVJSSURFIHsgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBzdXBwcmVz
c1NlbGVjdGlvbk5vdGlmaWNhdGlvbnMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVzdG9yZVNlbGVjdGlvbk5vdGlmaWNhdGlvbnMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc3RhcnREZWxheWluZ0FuZENvYWxlc2NpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0aW9u
cygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzdG9wRGVsYXlpbmdBbmRDb2FsZXNj
aW5nQ29udGVudENoYW5nZU5vdGlmaWNhdGlvbnMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgd3JpdGVEYXRhVG9QYXN0ZWJvYXJkKE5TRGljdGlvbmFyeSopIE9WRVJSSURFIHsgfQor
ICAgIHZpcnR1YWwgTlNBcnJheSogc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzRm9yQ3VycmVudFNl
bGVjdGlvbigpIE9WRVJSSURFIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIE5TQXJy
YXkqIHJlYWREYXRhRnJvbVBhc3RlYm9hcmQoTlNTdHJpbmcqLCBpbnQpIE9WRVJSSURFIHsgcmV0
dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmljaGx5RWRpdGFibGVTZWxlY3Rp
b24oKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgaW50IGdldFBhc3Rl
Ym9hcmRJdGVtc0NvdW50KCkgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgRG9j
dW1lbnRGcmFnbWVudCogZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpbnQpIE9WRVJSSURF
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybXNUd29TdGVwUGFz
dGUoRG9jdW1lbnRGcmFnbWVudCopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBpbnQgcGFzdGVib2FyZENoYW5nZUNvdW50KCkgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQor
I2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCBOU1N0cmluZyogdXNlclZp
c2libGVTdHJpbmcoTlNVUkwqKSBPVkVSUklERSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBE
b2N1bWVudEZyYWdtZW50KiBkb2N1bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoTlNB
dHRyaWJ1dGVkU3RyaW5nKiwgVmVjdG9yPFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+PiYpIE9WRVJS
SURFIHsgcmV0dXJuIDA7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRl
eCBhYjFhZjNlMTQwNjdhZjNiNDZiMTMzNmQ5MGU1YTI4YWM0M2UyZWFkLi4wNzI5Y2U2OWU0ZThm
ZTg0NTlmY2NhNjJhODUwZTllOGJmMTNjNjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKQEAgLTEzMiw2ICsxMzIsMTQgQEAKICNpbmNsdWRlICJBcmNoaXZlLmgiCiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNs
dWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5o
IgorI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIgorI2luY2x1ZGUgIlN5
c3RlbU1lbW9yeS5oIgorI2luY2x1ZGUgIldLQ29udGVudE9ic2VydmF0aW9uLmgiCisjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDMsNiArMTUxLDkgQEAgdXNpbmcgbmFtZXNw
YWNlIFNWR05hbWVzOwogCiBzdGF0aWMgY29uc3QgY2hhciBkZWZhdWx0QWNjZXB0SGVhZGVyW10g
PSAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjks
Ki8qO3E9MC44IjsKIHN0YXRpYyBkb3VibGUgc3RvcmVkVGltZU9mTGFzdENvbXBsZXRlZExvYWQ7
CisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGNvbnN0IGludCBtZW1vcnlMZXZlbFRocmVzaG9s
ZFRvUHJ1bmVQYWdlQ2FjaGUgPSAyMDsKKyNlbmRpZgogCiBib29sIGlzQmFja0ZvcndhcmRMb2Fk
VHlwZShGcmFtZUxvYWRUeXBlIHR5cGUpCiB7CkBAIC0xODUsNyArMTk2LDcgQEAgcHVibGljOgog
ICAgIH5GcmFtZVByb2dyZXNzVHJhY2tlcigpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1faW5Q
cm9ncmVzcyB8fCBtX2ZyYW1lLnBhZ2UoKSk7Ci0gICAgICAgIGlmIChtX2luUHJvZ3Jlc3MpCisg
ICAgICAgIGlmIChtX2luUHJvZ3Jlc3MgJiYgbV9mcmFtZS5wYWdlKCkpCiAgICAgICAgICAgICBt
X2ZyYW1lLnBhZ2UoKS0+cHJvZ3Jlc3MoKS5wcm9ncmVzc0NvbXBsZXRlZCgmbV9mcmFtZSk7CiAg
ICAgfQogCkBAIC0yMzksNiArMjUwLDcgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1l
JiBmcmFtZSwgRnJhbWVMb2FkZXJDbGllbnQmIGNsaWVudCkKICAgICAsIG1fbG9hZGluZ0Zyb21D
YWNoZWRQYWdlKGZhbHNlKQogICAgICwgbV9zdXBwcmVzc09wZW5lckluTmV3RnJhbWUoZmFsc2Up
CiAgICAgLCBtX2N1cnJlbnROYXZpZ2F0aW9uSGFzU2hvd25CZWZvcmVVbmxvYWRDb25maXJtUGFu
ZWwoZmFsc2UpCisgICAgLCBtX2xvYWRzU3luY2hyb25vdXNseShmYWxzZSkKICAgICAsIG1fZm9y
Y2VkU2FuZGJveEZsYWdzKFNhbmRib3hOb25lKQogewogfQpAQCAtMjcwLDYgKzI4MiwzMiBAQCB2
b2lkIEZyYW1lTG9hZGVyOjppbml0KCkKICAgICBtX3Byb2dyZXNzVHJhY2tlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8RnJhbWVQcm9ncmVzc1RyYWNrZXI+KG1fZnJhbWUpOwogfQogCisjaWYgUExBVEZP
Uk0oSU9TKQordm9pZCBGcmFtZUxvYWRlcjo6aW5pdEZvclN5bnRoZXNpemVkRG9jdW1lbnQoY29u
c3QgVVJMJiB1cmwpCit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS85NzE2ODk3PiBW
ZXJpZnkgT3BlblNvdXJjZSByODkzMTIgd2FzIG1lcmdlZCBjb3JyZWN0bHkKKyAgICBVTlVTRURf
UEFSQU0odXJsKTsKKworICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyID0gbV9jbGll
bnQuY3JlYXRlRG9jdW1lbnRMb2FkZXIoUmVzb3VyY2VSZXF1ZXN0KFVSTChQYXJzZWRVUkxTdHJp
bmcsIGVtcHR5U3RyaW5nKCkpKSwgU3Vic3RpdHV0ZURhdGEoKSk7CisgICAgbG9hZGVyLT5zZXRG
cmFtZSgmbV9mcmFtZSk7CisgICAgbG9hZGVyLT5zZXRSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNl
KFVSTCgpLCBBU0NJSUxpdGVyYWwoInRleHQvaHRtbCIpLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkp
KTsKKyAgICBsb2FkZXItPnNldENvbW1pdHRlZCh0cnVlKTsKKyAgICBzZXREb2N1bWVudExvYWRl
cihsb2FkZXIuZ2V0KCkpOworCisgICAgbV9zdGF0ZU1hY2hpbmUuYWR2YW5jZVRvKEZyYW1lTG9h
ZGVyU3RhdGVNYWNoaW5lOjpEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQpOworICAgIG1f
c3RhdGVNYWNoaW5lLmFkdmFuY2VUbyhGcmFtZUxvYWRlclN0YXRlTWFjaGluZTo6RGlzcGxheWlu
Z0luaXRpYWxFbXB0eURvY3VtZW50UG9zdENvbW1pdCk7CisgICAgbV9zdGF0ZU1hY2hpbmUuYWR2
YW5jZVRvKEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lOjpDb21taXR0ZWRGaXJzdFJlYWxMb2FkKTsK
KyAgICBtX2NsaWVudC50cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCk7CisKKyAgICBt
X2RpZENhbGxJbXBsaWNpdENsb3NlID0gdHJ1ZTsKKyAgICBtX2lzQ29tcGxldGUgPSB0cnVlOwor
ICAgIG1fc3RhdGUgPSBGcmFtZVN0YXRlQ29tcGxldGU7CisgICAgbV9uZWVkc0NsZWFyID0gdHJ1
ZTsKKworICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBtX2NsaWVudC5jcmVhdGVOZXR3b3JraW5n
Q29udGV4dCgpOworfQorI2VuZGlmCisKIHZvaWQgRnJhbWVMb2FkZXI6OnNldERlZmVyc0xvYWRp
bmcoYm9vbCBkZWZlcnMpCiB7CiAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIpCkBAIC03ODksNiAr
ODI3LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxldGVkKCkKICAgICBtX3JlcXVl
c3RlZEhpc3RvcnlJdGVtID0gMDsKICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnNldFJlYWR5U3Rh
dGUoRG9jdW1lbnQ6OkNvbXBsZXRlKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBVUkwgdXJs
ID0gbV9mcmFtZS5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAg
ICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS85NzE2ODk3PiBWZXJpZnkgT3BlblNvdXJj
ZSByODkzMTIgd2FzIG1lcmdlZCBjb3JyZWN0bHkKKyAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT5zZXRVUkwoYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+ZG9jdW1lbnRVUkwoKSk7CisjZW5kaWYK
KwogICAgIGNoZWNrQ2FsbEltcGxpY2l0Q2xvc2UoKTsgLy8gaWYgd2UgZGlkbid0IGRvIGl0IGJl
Zm9yZQogCiAgICAgbV9mcmFtZS5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuc3RhcnRUaW1lcigpOwpA
QCAtMTQ1MSw2ICsxNDk2LDEzIEBAIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgRnJhbWVMb2FkZXI6
OmluaXRpYWxSZXF1ZXN0KCkgY29uc3QKIAogYm9vbCBGcmFtZUxvYWRlcjo6d2lsbExvYWRNZWRp
YUVsZW1lbnRVUkwoVVJMJiB1cmwpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIE1vYmls
ZVN0b3JlIGRlcGVuZHMgb24gdGhlIGlPUyA0LjAgZXJhIGNsaWVudCBkZWxlZ2F0ZSBtZXRob2Qg
YmVjYXVzZSB3ZWJWaWV3OnJlc291cmNlOndpbGxTZW5kUmVxdWVzdDpyZWRpcmVjdFJlc3BvbnNl
OmZyb21EYXRhU291cmNlCisgICAgLy8gZG9lc24ndCBsZXQgdGhlbSB0ZWxsIHdoZW4gYSBsb2Fk
IHJlcXVlc3QgaXMgY29taW5nIGZyb20gYSBtZWRpYSBlbGVtZW50LiBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzgyNjY5MTY+IGZvciBtb3JlIGRldGFpbHMuCisgICAgaWYgKGFwcGxpY2F0aW9uSXNNb2Jp
bGVTdG9yZSgpKQorICAgICAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxkTG9hZE1lZGlhRWxlbWVu
dFVSTCh1cmwpOworI2VuZGlmCisKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwog
CiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyOwpAQCAtMTYwMyw3ICsxNjU1LDE1IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OnN0b3BBbGxMb2FkZXJzKENsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5
IGNsZWFyUHJvdmlzaW9uYWxJdGVtCiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wRm9yVXNlckNhbmNl
bChib29sIGRlZmVyQ2hlY2tMb2FkQ29tcGxldGUpCiB7CiAgICAgc3RvcEFsbExvYWRlcnMoKTsK
LSAgICAKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBMYXkgb3V0IGltbWVkaWF0ZWx5IHdo
ZW4gc3RvcHBpbmcgdG8gaW1tZWRpYXRlbHkgY2xlYXIgdGhlIG9sZCBwYWdlIGlmIHdlIGp1c3Qg
Y29tbWl0dGVkIHRoaXMgb25lCisgICAgLy8gYnV0IGhhdmVuJ3QgbGFpZCBvdXQvcGFpbnRlZCB5
ZXQuCisgICAgLy8gRklYTUU6IElzIHRoaXMgYmVoYXZpb3Igc3BlY2lmaWMgdG8gaU9TPyBPciBz
aG91bGQgd2UgZXhwb3NlIGEgc2V0dGluZyB0byB0b2dnbGUgdGhpcyBiZWhhdmlvcj8KKyAgICBp
ZiAobV9mcmFtZS52aWV3KCkgJiYgIW1fZnJhbWUudmlldygpLT5kaWRGaXJzdExheW91dCgpKQor
ICAgICAgICBtX2ZyYW1lLnZpZXcoKS0+bGF5b3V0KCk7CisjZW5kaWYKKwogICAgIGlmIChkZWZl
ckNoZWNrTG9hZENvbXBsZXRlKQogICAgICAgICBzY2hlZHVsZUNoZWNrTG9hZENvbXBsZXRlKCk7
CiAgICAgZWxzZSBpZiAobV9mcmFtZS5wYWdlKCkpCkBAIC0xNzIyLDYgKzE3ODIsMjYgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKICAgICAgICAgbV9mcmFtZS5k
b2N1bWVudCgpID8gbV9mcmFtZS5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNp
emVkVG9MZW5ndGgoKS51dGY4KCkuZGF0YSgpIDogIiIsCiAgICAgICAgIHBkbCA/IHBkbC0+dXJs
KCkuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkudXRmOCgpLmRhdGEoKSA6ICI8bm8g
cHJvdmlzaW9uYWwgRG9jdW1lbnRMb2FkZXI+Iik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gSW4gdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIG5vdCBuYXZpZ2F0aW5nIHRvIGEgY2FjaGVkIHBh
Z2UsIGFuZCB0aGUgc3lzdGVtIGlzIHVuZGVyIChzcGVjdWxhdGl2ZSkgbWVtb3J5IHByZXNzdXJl
LAorICAgIC8vIHdlIGNhbiB0cnkgdG8gcHJlZW1wdGl2ZWx5IHJlbGVhc2Ugc29tZSBvZiB0aGUg
cGFnZXMgaW4gdGhlIGNhY2hlLgorICAgIC8vIEZJWE1FOiBSaWdodCBub3cgdGhlIGNhcGFjaXR5
IGlzIDEgb24gaU9TIGRldmljZXMgd2l0aCAyNTYgTUIgb2YgUkFNLCBzbyB0aGlzIHdpbGwgYWx3
YXlzIGJsb3cgYXdheSB0aGUgd2hvbGUKKyAgICAvLyBwYWdlIGNhY2hlLiBXZSBjb3VsZCBzdGls
bCBwcmVlbXB0aXZlbHkgcHJ1bmUgdGhlIHBhZ2UgY2FjaGUgd2hpbGUgbmF2aWdhdGluZyB0byBh
IGNhY2hlZCBwYWdlIGlmIGNhcGFjaXR5ID4gMS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVt
LzExNzc5ODQ2PiBmb3IgbW9yZSBkZXRhaWxzLgorICAgIGlmICghY2FjaGVkUGFnZSkgeworICAg
ICAgICBpZiAobWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3Vy
ZSgpKSB7CisgICAgICAgICAgICBMT0coTWVtb3J5UHJlc3N1cmUsICJQcnVuaW5nIHBhZ2UgY2Fj
aGUgYmVjYXVzZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUgYXQ6ICVzIiwgX19QUkVUVFlfRlVOQ1RJ
T05fXyk7CisgICAgICAgICAgICBMT0coUGFnZUNhY2hlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIHRv
IDAgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZSIpOworICAgICAgICAgICAgLy8gRG9uJ3QgY2FjaGUg
YW55IHBhZ2UgaWYgd2UgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAgICAgICAgICAgIHBh
Z2VDYWNoZSgpLT5wcnVuZVRvQ2FwYWNpdHlOb3coMCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3lz
dGVtTWVtb3J5TGV2ZWwoKSA8PSBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUp
IHsKKyAgICAgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlBydW5pbmcgcGFnZSBjYWNoZSBi
ZWNhdXNlIHN5c3RlbSBtZW1vcnkgbGV2ZWwgaXMgJWQgYXQ6ICVzIiwgc3lzdGVtTWVtb3J5TGV2
ZWwoKSwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBMT0coUGFnZUNhY2hlLCAi
UHJ1bmluZyBwYWdlIGNhY2hlIHRvICVkIGR1ZSB0byBsb3cgbWVtb3J5IChsZXZlbCAlZCBsZXNz
IG9yIGVxdWFsIHRvICVkIHRocmVzaG9sZCkiLCBwYWdlQ2FjaGUoKS0+Y2FwYWNpdHkoKSAvIDIs
IHN5c3RlbU1lbW9yeUxldmVsKCksIG1lbW9yeUxldmVsVGhyZXNob2xkVG9QcnVuZVBhZ2VDYWNo
ZSk7CisgICAgICAgICAgICBwYWdlQ2FjaGUoKS0+cHJ1bmVUb0NhcGFjaXR5Tm93KHBhZ2VDYWNo
ZSgpLT5jYXBhY2l0eSgpIC8gMik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIHdp
bGxUcmFuc2l0aW9uVG9Db21taXR0ZWQoKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBu
ZWVkIHRvIGNhY2hlIHRoZSBwYWdlIHdlIGFyZSBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBpbnRvIHRo
ZSBiYWNrL2ZvcndhcmQgY2FjaGUuCkBAIC0xNzUyLDEzICsxODMyLDIxIEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgICAgIGNsaWVudFJlZGlyZWN0Q2Fu
Y2VsbGVkT3JGaW5pc2hlZChmYWxzZSk7CiAgICAgCiAgICAgaWYgKGNhY2hlZFBhZ2UgJiYgY2Fj
aGVkUGFnZS0+ZG9jdW1lbnQoKSkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gRklY
TUU6IENhY2hlZFBhZ2U6OnJlc3RvcmUoKSB3b3VsZCBkaXNwYXRjaCB2aWV3cG9ydCBjaGFuZ2Ug
bm90aWZpY2F0aW9uLiBIb3dldmVyIFVJS2l0IGV4cGVjdHMgbG9hZAorICAgICAgICAvLyBjb21t
aXQgdG8gaGFwcGVuIGJlZm9yZSBhbnkgY2hhbmdlcyB0byB2aWV3cG9ydCBhcmd1bWVudHMgYW5k
IGRlYWxpbmcgd2l0aCB0aGlzIHRoZXJlIGlzIGRpZmZpY3VsdC4KKyAgICAgICAgbV9mcmFtZS5w
YWdlKCktPmNocm9tZSgpLnNldERpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3Nl
ZCh0cnVlKTsKKyNlbmRpZgogICAgICAgICBwcmVwYXJlRm9yQ2FjaGVkUGFnZVJlc3RvcmUoKTsK
IAogICAgICAgICAvLyBGSVhNRTogVGhpcyBBUEkgc2hvdWxkIGJlIHR1cm5lZCBhcm91bmQgc28g
dGhhdCB3ZSBncm91bmQgQ2FjaGVkUGFnZSBpbnRvIHRoZSBQYWdlLgogICAgICAgICBjYWNoZWRQ
YWdlLT5yZXN0b3JlKCptX2ZyYW1lLnBhZ2UoKSk7CiAKICAgICAgICAgZGlzcGF0Y2hEaWRDb21t
aXRMb2FkKCk7Ci0KKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5j
aHJvbWUoKS5zZXREaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNzZWQoZmFsc2Up
OworICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+Y2hyb21lKCkuZGlzcGF0Y2hWaWV3cG9ydFByb3Bl
cnRpZXNEaWRDaGFuZ2UobV9mcmFtZS5wYWdlKCktPnZpZXdwb3J0QXJndW1lbnRzKCkpOworI2Vu
ZGlmCiAgICAgICAgIC8vIElmIHdlIGhhdmUgYSB0aXRsZSBsZXQgdGhlIFdlYlZpZXcga25vdyBh
Ym91dCBpdC4gCiAgICAgICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24gdGl0bGUgPSBtX2RvY3VtZW50
TG9hZGVyLT50aXRsZSgpOwogICAgICAgICBpZiAoIXRpdGxlLmlzTnVsbCgpKQpAQCAtMTc3NSwx
MCArMTg2MywxOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQog
ICAgICAgICBoaXN0b3J5KCkudXBkYXRlRm9yQ2xpZW50UmVkaXJlY3QoKTsKIAogICAgIGlmICht
X2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8g
Tm90ZSwgZGlkUmVjZWl2ZURvY1R5cGUgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGZvciBjYWNo
ZWQgcGFnZXMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNTkwNjc1OD4gZm9yIG1vcmUgZGV0YWlscy4K
KyAgICAgICAgaWYgKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdHlwZSgpICYmIG1fZnJhbWUucGFn
ZSgpKQorICAgICAgICAgICAgbV9mcmFtZS5wYWdlKCktPmNocm9tZSgpLmRpZFJlY2VpdmVEb2NU
eXBlKCZtX2ZyYW1lKTsKKyNlbmRpZgogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPmRvY3Vt
ZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpOwotICAgICAgICAKKwogICAgICAgICAvLyBGb3Jj
ZSBhIGxheW91dCB0byB1cGRhdGUgdmlldyBzaXplIGFuZCB0aGVyZWJ5IHVwZGF0ZSBzY3JvbGxi
YXJzLgorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgbV9jbGllbnQuZm9yY2VMYXlvdXRXaXRo
b3V0UmVjYWxjdWxhdGluZ1N0eWxlcygpOworI2Vsc2UKICAgICAgICAgbV9mcmFtZS52aWV3KCkt
PmZvcmNlTGF5b3V0KCk7CisjZW5kaWYKIAogICAgICAgICBjb25zdCBSZXNwb25zZVZlY3RvciYg
cmVzcG9uc2VzID0gbV9kb2N1bWVudExvYWRlci0+cmVzcG9uc2VzKCk7CiAgICAgICAgIHNpemVf
dCBjb3VudCA9IHJlc3BvbnNlcy5zaXplKCk7CkBAIC0xODQxLDcgKzE5MzgsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjp0cmFuc2l0aW9uVG9Db21taXR0ZWQoQ2FjaGVkUGFnZSogY2FjaGVkUGFnZSkK
IAogICAgIHNldFN0YXRlKEZyYW1lU3RhdGVDb21taXR0ZWRQYWdlKTsKIAotI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAobV9mcmFtZS5pc01haW5GcmFtZSgpKQogICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkubmVlZFRvdWNoRXZlbnRzKGZhbHNlKTsKICNlbmRpZgpAQCAtMjI5
OSw2ICsyMzk2LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpZExheW91dChMYXlvdXRNaWxlc3Rv
bmVzIG1pbGVzdG9uZXMpCiAKIHZvaWQgRnJhbWVMb2FkZXI6OmRpZEZpcnN0TGF5b3V0KCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gT25seSBzZW5kIGxheW91dC1yZWxhdGVkIGRlbGVn
YXRlIGNhbGxiYWNrcyBzeW5jaHJvbm91c2x5IGZvciB0aGUgbWFpbiBmcmFtZSB0bworICAgIC8v
IGF2b2lkIHJlZW50ZXJpbmcgbGF5b3V0IGZvciB0aGUgbWFpbiBmcmFtZSB3aGlsZSBkZWxpdmVy
aW5nIGEgbGF5b3V0LXJlbGF0ZWQgZGVsZWdhdGUKKyAgICAvLyBjYWxsYmFjayBmb3IgYSBzdWJm
cmFtZS4KKyAgICBpZiAoJm1fZnJhbWUgIT0gJm1fZnJhbWUucGFnZSgpLT5tYWluRnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuOworI2VuZGlmCiAgICAgaWYgKG1fZnJhbWUucGFnZSgpICYmIGlzQmFj
a0ZvcndhcmRMb2FkVHlwZShtX2xvYWRUeXBlKSkKICAgICAgICAgaGlzdG9yeSgpLnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOwogCkBAIC0zMjUyLDYgKzMzNTYsMTMgQEAgUmVz
b3VyY2VFcnJvciBGcmFtZUxvYWRlcjo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVybiBlcnJvcjsKIH0KIAorI2lmIFBMQVRGT1JN
KElPUykKK1JldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IEZyYW1lTG9hZGVyOjpjb25uZWN0aW9u
UHJvcGVydGllcyhSZXNvdXJjZUxvYWRlciogbG9hZGVyKQoreworICAgIHJldHVybiBtX2NsaWVu
dC5jb25uZWN0aW9uUHJvcGVydGllcyhsb2FkZXItPmRvY3VtZW50TG9hZGVyKCksIGxvYWRlci0+
aWRlbnRpZmllcigpKTsKK30KKyNlbmRpZgorCiBTdHJpbmcgRnJhbWVMb2FkZXI6OnJlZmVycmVy
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kb2N1bWVudExvYWRlciA/IG1fZG9jdW1lbnRMb2Fk
ZXItPnJlcXVlc3QoKS5odHRwUmVmZXJyZXIoKSA6ICIiOwpAQCAtMzQ2MywxNCArMzU3NCwxNiBA
QCBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGVXaW5kb3coRnJhbWUqIG9wZW5lckZyYW1lLCBGcmFt
ZSogbG9va3VwRnJhbWUsIGNvbnN0IEZyYQogICAgIC8vIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhl
IHZpZXdwb3J0LiBXZSBjYW4gb25seSByZXNpemUgdGhlIHdpbmRvdywgc28gYWRqdXN0CiAgICAg
Ly8gZm9yIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdpbmRvdyBzaXplIGFuZCB0aGUgdmll
d3BvcnQgc2l6ZS4KIAorLy8gRklYTUU6IFdlIHNob3VsZCByZWNvbmNpbGUgdGhlIGluaXRpYWxp
emF0aW9uIG9mIHZpZXdwb3J0IGFyZ3VtZW50cyBiZXR3ZWVuIGlPUyBhbmQgT3BlblNvdXJjZS4K
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0ID0gcGFnZS0+Y2hy
b21lKCkud2luZG93UmVjdCgpOwotICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUgPSBwYWdlLT5j
aHJvbWUoKS5wYWdlUmVjdCgpLnNpemUoKTsKLQogICAgIGlmIChmZWF0dXJlcy54U2V0KQogICAg
ICAgICB3aW5kb3dSZWN0LnNldFgoZmVhdHVyZXMueCk7CiAgICAgaWYgKGZlYXR1cmVzLnlTZXQp
CiAgICAgICAgIHdpbmRvd1JlY3Quc2V0WShmZWF0dXJlcy55KTsKKwogICAgIC8vIFplcm8gd2lk
dGggYW5kIGhlaWdodCBtZWFuIHVzaW5nIGRlZmF1bHQgc2l6ZSwgbm90IG1pbnVtdW0gb25lLgor
ICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUgPSBwYWdlLT5jaHJvbWUoKS5wYWdlUmVjdCgpLnNp
emUoKTsKICAgICBpZiAoZmVhdHVyZXMud2lkdGhTZXQgJiYgZmVhdHVyZXMud2lkdGgpCiAgICAg
ICAgIHdpbmRvd1JlY3Quc2V0V2lkdGgoZmVhdHVyZXMud2lkdGggKyAod2luZG93UmVjdC53aWR0
aCgpIC0gdmlld3BvcnRTaXplLndpZHRoKCkpKTsKICAgICBpZiAoZmVhdHVyZXMuaGVpZ2h0U2V0
ICYmIGZlYXR1cmVzLmhlaWdodCkKQEAgLTM0ODAsNiArMzU5MywxNyBAQCBQYXNzUmVmUHRyPEZy
YW1lPiBjcmVhdGVXaW5kb3coRnJhbWUqIG9wZW5lckZyYW1lLCBGcmFtZSogbG9va3VwRnJhbWUs
IGNvbnN0IEZyYQogICAgIEZsb2F0UmVjdCBuZXdXaW5kb3dSZWN0ID0gRE9NV2luZG93OjphZGp1
c3RXaW5kb3dSZWN0KHBhZ2UsIHdpbmRvd1JlY3QpOwogCiAgICAgcGFnZS0+Y2hyb21lKCkuc2V0
V2luZG93UmVjdChuZXdXaW5kb3dSZWN0KTsKKyNlbHNlCisgICAgLy8gT24gaU9TLCB3aWR0aCBh
bmQgaGVpZ2h0IHJlZmVyIHRvIHRoZSB2aWV3cG9ydCBkaW1lbnNpb25zLgorICAgIFZpZXdwb3J0
QXJndW1lbnRzIGFyZ3VtZW50czsKKyAgICAvLyBaZXJvIHdpZHRoIGFuZCBoZWlnaHQgbWVhbiB1
c2luZyBkZWZhdWx0IHNpemUsIG5vdCBtaW5pbXVtIG9uZS4KKyAgICBpZiAoZmVhdHVyZXMud2lk
dGhTZXQgJiYgZmVhdHVyZXMud2lkdGgpCisgICAgICAgIGFyZ3VtZW50cy53aWR0aCA9IGZlYXR1
cmVzLndpZHRoOworICAgIGlmIChmZWF0dXJlcy5oZWlnaHRTZXQgJiYgZmVhdHVyZXMuaGVpZ2h0
KQorICAgICAgICBhcmd1bWVudHMuaGVpZ2h0ID0gZmVhdHVyZXMuaGVpZ2h0OworICAgIHBhZ2Ut
Pm1haW5GcmFtZSgpLnNldFZpZXdwb3J0QXJndW1lbnRzKGFyZ3VtZW50cyk7CisjZW5kaWYKKwog
ICAgIHBhZ2UtPmNocm9tZSgpLnNob3coKTsKIAogICAgIGNyZWF0ZWQgPSB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAppbmRleCA0NjMyOGQ0OTFiZTA3ZmUwYTFkMzY5Y2RlZjQw
MTk5NWJmMGUyOWYxLi5iNDUzZmNlNzMxMjY4MjM4OTI2OWM5MDZkNDIzOGU0Y2E4NTJhNWVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaApAQCAtODksNiArODksOSBAQCBwdWJsaWM6
CiAgICAgfkZyYW1lTG9hZGVyKCk7CiAKICAgICB2b2lkIGluaXQoKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgdm9pZCBpbml0Rm9yU3ludGhlc2l6ZWREb2N1bWVudChjb25zdCBVUkwmKTsKKyNl
bmRpZgogCiAgICAgRnJhbWUmIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCkBA
IC0xNTUsNiArMTU4LDkgQEAgcHVibGljOgogICAgIEZyYW1lU3RhdGUgc3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlOyB9CiAgICAgc3RhdGljIGRvdWJsZSB0aW1lT2ZMYXN0Q29tcGxldGVk
TG9hZCgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzKFJlc291cmNlTG9hZGVyKik7CisjZW5kaWYKICAgICBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCgpIGNvbnN0OwogICAgIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgaW5pdGlhbFJlcXVlc3QoKSBjb25zdDsKICAgICB2b2lkIHJlY2Vp
dmVkTWFpblJlc291cmNlRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYpOwpAQCAtMjQxLDYgKzI0
Nyw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29tbWl0UHJvdmlzaW9uYWxMb2FkKCk7CiAKKyAg
ICB2b2lkIHNldExvYWRzU3luY2hyb25vdXNseShib29sIGxvYWRzU3luY2hyb25vdXNseSkgeyBt
X2xvYWRzU3luY2hyb25vdXNseSA9IGxvYWRzU3luY2hyb25vdXNseTsgfQorICAgIGJvb2wgbG9h
ZHNTeW5jaHJvbm91c2x5KCkgY29uc3QgeyByZXR1cm4gbV9sb2Fkc1N5bmNocm9ub3VzbHk7IH0K
KwogICAgIEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lKiBzdGF0ZU1hY2hpbmUoKSBjb25zdCB7IHJl
dHVybiAmbV9zdGF0ZU1hY2hpbmU7IH0KIAogICAgIEZyYW1lKiBmaW5kRnJhbWVGb3JOYXZpZ2F0
aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRG9jdW1lbnQqIGFjdGl2ZURvY3VtZW50ID0g
MCk7CkBAIC00MzUsOSArNDQ0LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZFBlcmZvcm1G
aXJzdE5hdmlnYXRpb247CiAgICAgYm9vbCBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZTsKICAgICBi
b29sIG1fc3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lOwotICAgIAorCiAgICAgYm9vbCBtX2N1cnJl
bnROYXZpZ2F0aW9uSGFzU2hvd25CZWZvcmVVbmxvYWRDb25maXJtUGFuZWw7CiAKKyAgICBib29s
IG1fbG9hZHNTeW5jaHJvbm91c2x5OworCiAgICAgU2FuZGJveEZsYWdzIG1fZm9yY2VkU2FuZGJv
eEZsYWdzOwogCiAgICAgUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2lu
Z0NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJD
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCmluZGV4
IDVkY2VmN2RkNjVkYjg0ZTBkMDhjYmI5OTk5ZmJhZTc5N2NiN2VkZDIuLmZjYmJjYjc3MTU2NTE1
OGVhMDU0NTE3YjhlZDUyNjdmN2U1YmNiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlckNsaWVudC5oCkBAIC0xMTYsNiArMTE2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIq
KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dCgpID0gMDsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dFdpdGhvdXRSZWNhbGN1
bGF0aW5nU3R5bGVzKCkgPSAwOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxh
eW91dEZvck5vbkhUTUwoKSA9IDA7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldENvcGllc09u
U2Nyb2xsKCkgPSAwOwpAQCAtMTMyLDYgKzEzNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICAgICAgdmlydHVhbCBi
b29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpID0gMDsK
ICNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzKERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyKSA9IDA7CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgZGF0YUxlbmd0aCkgPSAwOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKSA9IDA7CkBAIC0yNDksNiArMjU3LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9y
bURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikgPSAw
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlc3RvcmVGcmFt
ZUhpZXJhcmNoeUZvckNhY2hlZEZyYW1lKCkgPSAwOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwg
dm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkgPSAwOwogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKSA9IDA7CkBAIC0yODEsNyArMjkyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0
TmF2aWdhdGlvbigpIGNvbnN0ID0gMDsgLy8gIk5hdmlnYXRpb24iIGhlcmUgbWVhbnMgYSB0cmFu
c2l0aW9uIGZyb20gb25lIHBhZ2UgdG8gYW5vdGhlciB0aGF0IGVuZHMgdXAgaW4gdGhlIGJhY2sv
Zm9yd2FyZCBsaXN0LgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3Rp
ZmljYXRpb24oYm9vbCBsaXN0ZW4gPSB0cnVlKSA9IDA7Ci0gICAgICAgIAorCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgICAgICAvLyBBbGxvdyBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byByZXRy
aWV2ZSBhIEZyYW1lIHBhcmVudCBpZiB0aGVyZSdzIG5vIFBsYXRmb3JtV2lkZ2V0LgogICAgICAg
ICB2aXJ0dWFsIFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAppbmRleCBk
NTY1OThmNDk0MmFkZGM4MTAwYmZlMDk1NzExMzU2ZWI1NzdiNDExLi5lYmMxMTgyY2Y4YTBhMmI3
NDE2ZWE4NGJmY2U5YjUyYTE5YzI3MjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0
b3J5Q29udHJvbGxlci5jcHAKQEAgLTEyNyw2ICsxMjcsOCBAQCB2b2lkIEhpc3RvcnlDb250cm9s
bGVyOjpyZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKQogICAgIC8vIHRocm91Z2gg
dG8gdGhlIGNsaWVudC4gSXQncyBjdXJyZW50bHkgdXNlZCBvbmx5IGZvciB0aGUgUERGIHZpZXcg
b24gTWFjLgogICAgIG1fZnJhbWUubG9hZGVyKCkuY2xpZW50KCkucmVzdG9yZVZpZXdTdGF0ZSgp
OwogCisgICAgLy8gRG9uJ3QgcmVzdG9yZSBzY3JvbGwgcG9pbnQgb24gaU9TIGFzIEZyYW1lTG9h
ZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKCkgZG9lcyB0aGF0LgorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgLy8gRklYTUU6IFRoZXJlIGlzIHNvbWUgc2Nyb2xsaW5nIHJlbGF0ZWQgd29yayB0
aGF0IG5lZWRzIHRvIGhhcHBlbiB3aGVuZXZlciBhIHBhZ2UgZ29lcyBpbnRvIHRoZQogICAgIC8v
IHBhZ2UgY2FjaGUgYW5kIHNpbWlsYXIgd29yayB0aGF0IG5lZWRzIHRvIG9jY3VyIHdoZW4gaXQg
Y29tZXMgb3V0LiBUaGlzIGlzIHdoZXJlIHdlIGRvIHRoZSB3b3JrCiAgICAgLy8gdGhhdCBuZWVk
cyB0byBoYXBwZW4gd2hlbiB3ZSBleGl0LCBhbmQgdGhlIHdvcmsgdGhhdCBuZWVkcyB0byBoYXBw
ZW4gd2hlbiB3ZSBlbnRlciBpcyBpbgpAQCAtMTQ2LDYgKzE0OCw3IEBAIHZvaWQgSGlzdG9yeUNv
bnRyb2xsZXI6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpCiAgICAgICAgICAg
ICAgICAgdmlldy0+c2V0U2Nyb2xsUG9zaXRpb24obV9jdXJyZW50SXRlbS0+c2Nyb2xsUG9pbnQo
KSk7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBIaXN0b3J5Q29udHJvbGxl
cjo6dXBkYXRlQmFja0ZvcndhcmRMaXN0Rm9yRnJhZ21lbnRTY3JvbGwoKQpAQCAtODc1LDQgKzg3
OCwxNiBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXBsYWNlU3RhdGUoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZQogICAgIG1fZnJhbWUubG9hZGVyKCkuY2xp
ZW50KCkudXBkYXRlR2xvYmFsSGlzdG9yeSgpOwogfQogCit2b2lkIEhpc3RvcnlDb250cm9sbGVy
OjpyZXBsYWNlQ3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit7CisgICAgaWYgKCFpdGVt
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZXZpb3VzSXRlbSA9IG51bGxwdHI7CisgICAg
aWYgKG1fcHJvdmlzaW9uYWxJdGVtKQorICAgICAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9IGl0ZW07
CisgICAgZWxzZQorICAgICAgICBtX2N1cnJlbnRJdGVtID0gaXRlbTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaApp
bmRleCA0YTE1MDYyYTAyYWJiMWQzYTEyNGQ4NTU0ZDMzMTg2YjQ2OTU2NDE4Li41ZDZjMDFjYjYx
MWJkOWJiZDVkNGU1N2E0NTZmYmE5NjdiYWNiNzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
SGlzdG9yeUNvbnRyb2xsZXIuaApAQCAtNzYsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRDdXJyZW50SXRlbShIaXN0b3J5SXRlbSopOwogICAgIHZvaWQgc2V0Q3VycmVudEl0ZW1UaXRs
ZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJik7CiAgICAgYm9vbCBjdXJyZW50SXRlbVNob3Vs
ZEJlUmVwbGFjZWQoKSBjb25zdDsKKyAgICB2b2lkIHJlcGxhY2VDdXJyZW50SXRlbShIaXN0b3J5
SXRlbSopOwogCiAgICAgSGlzdG9yeUl0ZW0qIHByZXZpb3VzSXRlbSgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJldmlvdXNJdGVtLmdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGxhY2Vo
b2xkZXJEb2N1bWVudC5oCmluZGV4IGNlMjMyNzgyN2E2YTgwYmQ1NDlmNjViMDg5ZWVjM2YwNjdh
ZDA1YTMuLjdkODVmMzlhYzA4ZGE3Y2M5M2RiODU1NTMwMmVhMzFkZjkwODE1YzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuaApAQCAtMzAsMjAgKzMwLDIx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUGxhY2Vob2xkZXJEb2N1bWVudCBG
SU5BTCA6IHB1YmxpYyBEb2N1bWVudCB7CitjbGFzcyBQbGFjZWhvbGRlckRvY3VtZW50IDogcHVi
bGljIERvY3VtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGFjZWhvbGRl
ckRvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhY2Vob2xkZXJEb2N1bWVudChmcmFtZSwgdXJs
KSk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVSZW5kZXJUcmVl
KCkgT1ZFUlJJREU7Ci0KK3Byb3RlY3RlZDoKICAgICBQbGFjZWhvbGRlckRvY3VtZW50KEZyYW1l
KiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCiAgICAgICAgIDogRG9jdW1lbnQoZnJhbWUsIHVybCkK
ICAgICB7CiAgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVSZW5kZXJU
cmVlKCkgT1ZFUlJJREU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUG9saWN5Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUG9saWN5Q2hlY2tlci5jcHAKaW5kZXggMWVlODMwMjA4ODhiNmJiY2Q1Y2QwNDk0
ZGNmOWNhMjJkYjQ4YTk5OC4uOGVhZDQxM2NjZTdjMGFlZDk0MTE4YWJiMDBiZmRjMmJiMzE2MzBm
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Qb2xpY3lDaGVja2VyLmNwcApAQCAtNDIsNiArNDIs
MTQgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgogCisjaWYgVVNFKFFVSUNLX0xPT0spCisjaW5jbHVkZSAiUXVpY2tMb29r
LmgiCisjZW5kaWYKKworI2lmIFVTRShDT05URU5UX0ZJTFRFUklORykKKyNpbmNsdWRlICJDb250
ZW50RmlsdGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQb2xpY3lDaGVj
a2VyOjpQb2xpY3lDaGVja2VyKEZyYW1lJiBmcmFtZSkKQEAgLTkzLDYgKzEwMSwyMyBAQCB2b2lk
IFBvbGljeUNoZWNrZXI6OmNoZWNrTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIERvY3VtZQogCiAgICAgbV9jYWxsYmFjay5zZXQocmVxdWVzdCwgZm9ybVN0
YXRlLmdldCgpLCBzdGQ6Om1vdmUoZnVuY3Rpb24pKTsKIAorI2lmIFVTRShRVUlDS19MT09LKQor
ICAgIC8vIEFsd2F5cyBhbGxvdyBRdWlja0xvb2stZ2VuZXJhdGVkIFVSTHMgYmFzZWQgb24gdGhl
IHByb3RvY29sIHNjaGVtZS4KKyAgICBpZiAoIXJlcXVlc3QuaXNOdWxsKCkgJiYgcmVxdWVzdC51
cmwoKS5wcm90b2NvbElzKFFMUHJldmlld1Byb3RvY29sKCkpKSB7CisgICAgICAgIGNvbnRpbnVl
QWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KFBvbGljeVVzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKKworI2lmIFVTRShDT05URU5UX0ZJTFRFUklORykKKyAgICBpZiAoRG9jdW1lbnRM
b2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigp
KSB7CisgICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aGFuZGxlQ29udGVudEZpbHRlclJlcXVl
c3QocmVxdWVzdCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5
KFBvbGljeUlnbm9yZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKwogICAgIG1fZGVsZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlvblBvbGljeSA9IHRydWU7
CiAgICAgbV9mcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5kaXNwYXRjaERlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oYWN0aW9uLCByZXF1ZXN0LCBmb3JtU3RhdGUsIFt0aGlzXShQb2xpY3lB
Y3Rpb24gYWN0aW9uKSB7CiAgICAgICAgIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGFj
dGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmNwcAppbmRleCBkYWUx
YzJkZTU1YWNjNmQ4MTcwMWUzZmFjNmJhMDcyNjg5NmY0NWUzLi45YWRkZjEzNTE5YmI2ODM3NTc5
MGQ4OWJjZjVhZmY0NDliNWYxMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1
ZmZlci5jcHAKQEAgLTExMiw2ICsxMTIsMTQgQEAgYm9vbCBSZXNvdXJjZUJ1ZmZlcjo6aGFzUHVy
Z2VhYmxlQnVmZmVyKCkgY29uc3QKICAgICByZXR1cm4gbV9zaGFyZWRCdWZmZXItPmhhc1B1cmdl
YWJsZUJ1ZmZlcigpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBSZXNvdXJjZUJ1ZmZl
cjo6c2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGJvb2wgdXNlKQoreworICAgIEFTU0VSVChtX3No
YXJlZEJ1ZmZlcik7CisgICAgc2hhcmVkQnVmZmVyKCktPnNob3VsZFVzZVB1cmdlYWJsZU1lbW9y
eSh1c2UpOworfQorI2VuZGlmCisKIHZvaWQgUmVzb3VyY2VCdWZmZXI6OmNyZWF0ZVB1cmdlYWJs
ZUJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fc2hhcmVkQnVmZmVyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKaW5kZXggNWRjMmQ5NTcxYjM1M2JmNDkwNWM3YzJm
MTQ5NDEzNjFhMjczZTZlMC4uMDFjYzQ2NDJhMWNiMDczM2ViMzA0MTRlYjcxMjAwNWZkMjM2NWY1
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKQEAgLTcxLDcgKzcxLDEx
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3Q7CiAgICAg
dm9pZCBjcmVhdGVQdXJnZWFibGVCdWZmZXIoKSBjb25zdDsKLSAgICAKKworI2lmIFBMQVRGT1JN
KElPUykKKyAgICB2b2lkIHNob3VsZFVzZVB1cmdlYWJsZU1lbW9yeShib29sKTsKKyNlbmRpZgor
CiAgICAgLy8gRW5zdXJlIHRoaXMgYnVmZmVyIGhhcyBubyBvdGhlciBjbGllbnRzIGJlZm9yZSBj
YWxsaW5nIHRoaXMuCiAgICAgUGFzc093blB0cjxQdXJnZWFibGVCdWZmZXI+IHJlbGVhc2VQdXJn
ZWFibGVCdWZmZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE5vdGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRO
b3RpZmllci5jcHAKaW5kZXggODM2OGJlMDE2MzljNDFmYzAyMTM3NmRlZjA5Yzg4MTgyOTUyM2Jk
Mi4uMWY4ZTAxNWQxZTRiOTJiMmM1OWE0OTJlNTQyMTRlYzkxZWVkMTk2OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCkBAIC00MCw2ICs0MCwx
MCBAQAogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9h
ZGVyLmgiCiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyNpbmNsdWRlICJRdWlja0xvb2suaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlc291cmNlTG9hZE5vdGlmaWVyOjpSZXNv
dXJjZUxvYWROb3RpZmllcihGcmFtZSYgZnJhbWUpCkBAIC0xMDcsNiArMTExLDEyIEBAIHZvaWQg
UmVzb3VyY2VMb2FkTm90aWZpZXI6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVu
c2lnbmVkIGxvbmcgaWRlbnRpCiAKIHZvaWQgUmVzb3VyY2VMb2FkTm90aWZpZXI6OmRpc3BhdGNo
V2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZWRpcmVjdFJlc3BvbnNlKQogeworI2lmIFVTRShRVUlDS19MT09LKQorICAgIC8vIEFsd2F5
cyBhbGxvdyBRdWlja0xvb2stZ2VuZXJhdGVkIFVSTHMgYmFzZWQgb24gdGhlIHByb3RvY29sIHNj
aGVtZS4KKyAgICBpZiAoIXJlcXVlc3QuaXNOdWxsKCkgJiYgcmVxdWVzdC51cmwoKS5wcm90b2Nv
bElzKFFMUHJldmlld1Byb3RvY29sKCkpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAg
IFN0cmluZyBvbGRSZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKICAgICBtX2Zy
YW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPmRpZFRlbGxDbGllbnRBYm91dExvYWQocmVx
dWVzdC51cmwoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNj
aGVkdWxlci5jcHAKaW5kZXggYThkMjE4ZGNiYTk0Y2RkNmUyMTkxY2JmYTM2ZmJjMWQ4YWYxYzA0
ZC4uZjU5ZDMxMTQ3YTA1YThjZjkzN2IxOWE5M2Q1MjcyNmMzNGM2ZGExOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKQEAgLTQyLDExICs0
MiwyMCBAQAogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8UnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzSU9TLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2Nv
bHMgPSAyMDsKIC8vIE1hdGNoIHRoZSBwYXJhbGxlbCBjb25uZWN0aW9uIGNvdW50IHVzZWQgYnkg
dGhlIG5ldHdvcmtpbmcgbGF5ZXIuCiBzdGF0aWMgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdo
dFBlckhvc3Q7CisjaWYgIVBMQVRGT1JNKElPUykKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhS
ZXF1ZXN0c0luRmxpZ2h0Rm9yTm9uSFRUUFByb3RvY29scyA9IDIwOworI2Vsc2UKKy8vIExpbWl0
aW5nIHRoaXMgc2VlbXMgdG8gcmVncmVzcyBwZXJmb3JtYW5jZSBpbiBzb21lIGxvY2FsIGNhc2Vz
IHNvIGxldCdzIGp1c3QgbWFrZSBpdCBsYXJnZS4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhS
ZXF1ZXN0c0luRmxpZ2h0Rm9yTm9uSFRUUFByb3RvY29scyA9IDEwMDAwOworI2VuZGlmCiAKIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uKiBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Omhvc3RGb3JVUkwoY29uc3QgVVJMJiB1cmwsIENyZWF0ZUhvc3RQb2xpY3kgY3JlYXRlSG9z
dFBvbGljeSkKIHsKQEAgLTEwNCw2ICsxMTMsMTUgQEAgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxv
YWRlcj4gUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmEK
ICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVy
OjpjcmVhdGUoZnJhbWUsIHJlc291cmNlLCByZXF1ZXN0LCBvcHRpb25zKTsKICAgICBpZiAobG9h
ZGVyKQogICAgICAgICBzY2hlZHVsZUxvYWQobG9hZGVyLmdldCgpLCBwcmlvcml0eSk7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIC8vIFNpbmNlIHdlIGRlZmVyIGxvYWRlciBpbml0aWFsaXphdGlv
biB1bnRpbCBzY2hlZHVsaW5nIG9uIGlPUywgdGhlIGZyYW1lCisgICAgLy8gbG9hZCBkZWxlZ2F0
ZSB0aGF0IHdvdWxkIGJlIGNhbGxlZCBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKCkgb24K
KyAgICAvLyBvdGhlciBwb3J0cyBtaWdodCBiZSBjYWxsZWQgaW4gc2NoZWR1bGVMb2FkKCkgaW5z
dGVhZC4gT3VyIGNvbnRyYWN0IHRvCisgICAgLy8gY2FsbGVycyBvZiB0aGlzIG1ldGhvZCBpcyB0
aGF0IGEgbnVsbCBsb2FkZXIgaXMgcmV0dXJuZWQgaWYgdGhlIGxvYWQgd2FzCisgICAgLy8gY2Fu
Y2VsbGVkIGJ5IGEgZnJhbWUgbG9hZCBkZWxlZ2F0ZS4KKyAgICBpZiAoIWxvYWRlciB8fCBsb2Fk
ZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworI2Vu
ZGlmCiAgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CiB9CiAKQEAgLTEyMiwyMSArMTQwLDQ5
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2Fk
ZXIqIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjCiAKICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkIHJlc291cmNlICVwICclcyciLCByZXNvdXJjZUxv
YWRlciwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAK
KyNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gSWYgdGhlcmUncyBhIHdlYiBhcmNoaXZlIHJlc291
cmNlIGZvciB0aGlzIFVSTCwgd2UgZG9uJ3QgbmVlZCB0byBzY2hlZHVsZSB0aGUgbG9hZCBzaW5j
ZSBpdCB3aWxsIG5ldmVyIHRvdWNoIHRoZSBuZXR3b3JrLgorICAgIGlmICghaXNTdXNwZW5kaW5n
UGVuZGluZ1JlcXVlc3RzKCkgJiYgcmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFy
Y2hpdmVSZXNvdXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCku
dXJsKCkpKSB7CisgICAgICAgIHJlc291cmNlTG9hZGVyLT5zdGFydExvYWRpbmcoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbHNlCiAgICAgaWYgKHJlc291cmNlTG9hZGVyLT5kb2N1bWVu
dExvYWRlcigpLT5hcmNoaXZlUmVzb3VyY2VGb3JVUkwocmVzb3VyY2VMb2FkZXItPnJlcXVlc3Qo
KS51cmwoKSkpIHsKICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBIb3N0SW5mb3Jt
YXRpb24qIGhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVl
c3QoKS51cmwoKSwgQ3JlYXRlSWZOb3RGb3VuZCk7CisjZWxzZQorICAgIEhvc3RJbmZvcm1hdGlv
biogaG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpLCBDcmVhdGVJZk5vdEZv
dW5kKTsKKyNlbmRpZgogCi0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChy
ZXNvdXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOyAgICAKICAgICBib29sIGhh
ZFJlcXVlc3RzID0gaG9zdC0+aGFzUmVxdWVzdHMoKTsKICAgICBob3N0LT5zY2hlZHVsZShyZXNv
dXJjZUxvYWRlciwgcHJpb3JpdHkpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChSZXNv
dXJjZVJlcXVlc3Q6Omh0dHBQaXBlbGluaW5nRW5hYmxlZCgpICYmICFpc1N1c3BlbmRpbmdQZW5k
aW5nUmVxdWVzdHMoKSkgeworICAgICAgICAvLyBTZXJ2ZSBhbGwgcmVxdWVzdHMgYXQgb25jZSB0
byBrZWVwIHRoZSBwaXBlbGluZSBmdWxsIGF0IHRoZSBuZXR3b3JrIGxheWVyLgorICAgICAgICBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3cpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAg
aWYgKChwcmlvcml0eSA+IFJlc291cmNlTG9hZFByaW9yaXR5TG93IHx8ICFyZXNvdXJjZUxvYWRl
ci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8
IChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyAmJiAhaGFkUmVxdWVzdHMpKSAm
JiAhaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHJl
cXVlc3QgaW1wb3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseS4KKyAgICAgICAgc2VydmVQZW5k
aW5nUmVxdWVzdHMoaG9zdCwgcHJpb3JpdHkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vs
c2UKICAgICBpZiAocHJpb3JpdHkgPiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyB8fCAhcmVzb3Vy
Y2VMb2FkZXItPnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0g
UmVzb3VyY2VMb2FkUHJpb3JpdHlMb3cgJiYgIWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBU
cnkgdG8gcmVxdWVzdCBpbXBvcnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5LgogICAgICAgICBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBwcmlvcml0eSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CisjZW5kaWYKIAogICAgIG5vdGlmeURpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KHJlc291
cmNlTG9hZGVyKTsKIApAQCAtMTU3LDYgKzIwMywxNSBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKICAgICBIb3N0SW5m
b3JtYXRpb24qIGhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7CiAgICAg
aWYgKGhvc3QpCiAgICAgICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJl
dHVybmluZyB0aGUgY29ycmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdl
dCBjYW5jZWxlZCBiZWZvcmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVl
c3QgdXJsIGluc3RlYWQuCisgICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91
bGQgYmUgbWFkZSB0byByZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCisgICAg
aWYgKCFyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKKyAg
ICAgICAgSG9zdEluZm9ybWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNl
TG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIGlmIChvcmlnaW5h
bEhvc3QgJiYgb3JpZ2luYWxIb3N0ICE9IGhvc3QpCisgICAgICAgICAgICBvcmlnaW5hbEhvc3Qt
PnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisgICAgfQorI2VuZGlmCiAgICAgc2NoZWR1bGVTZXJ2
ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCkBAIC0xNjQsMTEgKzIxOSwxNCBAQCB2b2lkIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9h
ZGVyKiByZXNvdXJjZQogewogICAgIEhvc3RJbmZvcm1hdGlvbiogb2xkSG9zdCA9IGhvc3RGb3JV
UkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKICAgICBBU1NFUlQob2xkSG9zdCk7CisgICAgaWYg
KCFvbGRIb3N0KQorICAgICAgICByZXR1cm47CisKICAgICBIb3N0SW5mb3JtYXRpb24qIG5ld0hv
c3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5vdEZvdW5kKTsKIAogICAgIGlm
IChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+bmFtZSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgCisKICAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlcik7CiAg
ICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKIH0KQEAgLTIxOSw2ICsyNzcsMTIg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJ
bmZvcm1hdGlvbiogaG9zdCwgUmVzb3VyY2UKIAogICAgICAgICAgICAgcmVxdWVzdHNQZW5kaW5n
LnJlbW92ZUZpcnN0KCk7CiAgICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNv
dXJjZUxvYWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKCFh
cHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7CisgICAgICAgICAgICAgICAgcmVzb3VyY2VMb2Fk
ZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyNlbmRpZgogICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCBm
NjI4ZDQ5NzY0N2FiMjNkYzM1MGI2MGI4ODJlMDMxODkyZDYxZDZjLi5kZGQyNWI3Mjg3NmZhMmRm
MDlhOGUyMjhkNTEyYjRhNDQzMDMwOTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAKQEAgLTExMCw2ICsxMTAsMTUgQEAgYm9vbCBSZXNvdXJjZUxvYWRlcjo6aW5p
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHIpCiAgICAgQVNTRVJUKCFtX2RvY3VtZW50TG9hZGVy
LT5pc1N1YnN0aXR1dGVMb2FkUGVuZGluZyh0aGlzKSk7CiAgICAgCiAgICAgUmVzb3VyY2VSZXF1
ZXN0IGNsaWVudFJlcXVlc3Qocik7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gSWYgdGhl
IGRvY3VtZW50TG9hZGVyIHdhcyBkZXRhY2hlZCB3aGlsZSB0aGlzIFJlc291cmNlTG9hZGVyIHdh
cyB3YWl0aW5nIGl0cyB0dXJuCisgICAgLy8gaW4gUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHF1ZXVl
LCBkb24ndCBjb250aW51ZS4KKyAgICBpZiAoIW1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpIHsK
KyAgICAgICAgY2FuY2VsKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYK
ICAgICAKICAgICBtX2RlZmVyc0xvYWRpbmcgPSBtX2ZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRp
bmcoKTsKICAgICBpZiAobV9vcHRpb25zLnNlY3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNr
ICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KGNs
aWVudFJlcXVlc3QudXJsKCkpKSB7CkBAIC0xMjksNiArMTM4LDEzIEBAIGJvb2wgUmVzb3VyY2VM
b2FkZXI6OmluaXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByKQogICAgIH0KIAogICAgIHdpbGxT
ZW5kUmVxdWVzdChjbGllbnRSZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlKCkpOworCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIElmIHRoaXMgUmVzb3VyY2VMb2FkZXIgd2FzIHN0b3BwZWQgYXMg
YSByZXN1bHQgb2Ygd2lsbFNlbmRSZXF1ZXN0LCBiYWlsIG91dC4KKyAgICBpZiAobV9yZWFjaGVk
VGVybWluYWxTdGF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKICAgICBpZiAo
Y2xpZW50UmVxdWVzdC5pc051bGwoKSkgewogICAgICAgICBjYW5jZWwoKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMjI4LDYgKzI0NCwyMCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxs
U2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlcwog
ICAgIFJlZjxSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCgqdGhpcyk7CiAKICAgICBBU1NFUlQoIW1f
cmVhY2hlZFRlcm1pbmFsU3RhdGUpOworICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBF
bnN1cmUgYW4gaWRlbnRpZmllciBpcyBhbHdheXMgc2V0LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlz
IGFzc2V0aW9uIGlzIG5vdCBoaXQ6CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzExMDU5Nzk0PiBB
U1NFUlRJT04gRkFJTEVEOiAhSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEtleVRyYWl0czo6ZW1wdHlW
YWx1ZSgpLCBrZXkpIGluIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlIGxvYWRpbmcgdGhlIGF0dGFjaGVkIHdlYiBhcmNoaXZlCisgICAg
Ly8gVGhpcyBpcyBub3QgbmVlZGVkIGluIFdlYktpdDIsIGFzIGl0IGRvZXNuJ3QgdXNlIG1faWRl
bnRpZmllciBpbiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZQorICAgIGlmICghbV9pZGVudGlmaWVyKSB7CisgICAgICAgIG1faWRlbnRp
ZmllciA9IG1fZnJhbWUtPnBhZ2UoKS0+cHJvZ3Jlc3MoKS5jcmVhdGVVbmlxdWVJZGVudGlmaWVy
KCk7CisgICAgICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCkuYXNzaWduSWRlbnRpZmllclRv
SW5pdGlhbFJlcXVlc3QobV9pZGVudGlmaWVyLCBkb2N1bWVudExvYWRlcigpLCByZXF1ZXN0KTsK
KworICAgICAgICAvLyBJZiB0aGlzIFJlc291cmNlTG9hZGVyIHdhcyBzdG9wcGVkIGFzIGEgcmVz
dWx0IG9mIGFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0LCBiYWlsIG91dAorICAgICAg
ICBpZiAobV9yZWFjaGVkVGVybWluYWxTdGF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKIAogICAgIC8vIFdlIG5lZWQgYSByZXNvdXJjZSBpZGVudGlmaWVyIGZvciBhbGwg
cmVxdWVzdHMsIGV2ZW4gaWYgRnJhbWVMb2FkZXIgaXMgbmV2ZXIgZ29pbmcgdG8gc2VlIGl0IChz
dWNoIGFzIHdpdGggQ09SUyBwcmVmbGlnaHQgcmVxdWVzdHMpLgogICAgIGJvb2wgY3JlYXRlZFJl
c291cmNlSWRlbnRpZmllciA9IGZhbHNlOwpAQCAtNTUyLDYgKzU4MiwxMyBAQCBib29sIFJlc291
cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvbnN0IFBy
b3RlY3Rpb25TcGFjZQogICAgIHJldHVybiBmcmFtZUxvYWRlcigpLT5jbGllbnQoKS5jYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZp
ZXIoKSwgcHJvdGVjdGlvblNwYWNlKTsKIH0KICNlbmRpZgorICAgIAorI2lmIFBMQVRGT1JNKElP
UykKK1JldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IFJlc291cmNlTG9hZGVyOjpjb25uZWN0aW9u
UHJvcGVydGllcyhSZXNvdXJjZUhhbmRsZSopCit7CisgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCkt
PmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKHRoaXMpOworfQorI2VuZGlmCiAKIHZvaWQgUmVzb3VyY2VM
b2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKaW5kZXggYTUyM2E3YzUw
ZmFlNjZmNWE2ZWFkYmUwYjU1NWU3ZWM2N2ZhZGFhMy4uNmRkOWViNjQyYzY5ODc2ZWFkMzVhZjQ4
NGIxYWQ0NmMwZWQzZmI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgK
QEAgLTU2LDYgKzU2LDE3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpbml0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgYm9v
bCBzdGFydExvYWRpbmcoKQorICAgIHsKKyAgICAgICAgc3RhcnQoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGlPU09y
aWdpbmFsUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIHJlcXVlc3QoKTsgfQorICAgIHZpcnR1YWwg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdGlvblByb3BlcnRpZXMoUmVzb3VyY2VI
YW5kbGUqKSBPVkVSUklERTsKKyNlbmRpZgorCiAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVy
KCkgY29uc3Q7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9kb2N1bWVudExvYWRlci5nZXQoKTsgfQogICAgIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFJlcXVlc3Q7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCmluZGV4IDNlY2ZjOGU2NGYz
MzczM2RiMjE1NjBmNGIwYTE5NTBjMWVkMzI1OWMuLmIwNmY3MGQ1OGFkNzU3Njc0ZjA4MDg1ZWJm
YTI3YzA0ZTcxNmMwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFt
ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cApAQCAtNDMyLDYgKzQzMiwxMyBAQCBib29sIFN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdpbkVsZW1lbnQsIGNvbnN0IFVSTAogCiAgICAgSW50
U2l6ZSBjb250ZW50U2l6ZSA9IHJvdW5kZWRJbnRTaXplKExheW91dFNpemUocmVuZGVyZXItPmNv
bnRlbnRXaWR0aCgpLCByZW5kZXJlci0+Y29udGVudEhlaWdodCgpKSk7CiAgICAgYm9vbCBsb2Fk
TWFudWFsbHkgPSBkb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgIW1fY29udGFpbnNQ
bHVnaW5zICYmIHRvUGx1Z2luRG9jdW1lbnQoZG9jdW1lbnQoKSktPnNob3VsZExvYWRQbHVnaW5N
YW51YWxseSgpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIE9uIGlPUywgd2Ugb25seSB0
ZWxsIHRoZSBwbHVnaW4gdG8gYmUgaW4gZnVsbCBwYWdlIG1vZGUgaWYgdGhlIGNvbnRhaW5pbmcg
cGx1Z2luIGRvY3VtZW50IGlzIHRoZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCisgICAgaWYgKGRvY3Vt
ZW50KCktPm93bmVyRWxlbWVudCgpKQorICAgICAgICBsb2FkTWFudWFsbHkgPSBmYWxzZTsKKyNl
bmRpZgorCiAgICAgUmVmUHRyPFdpZGdldD4gd2lkZ2V0ID0gbV9mcmFtZS5sb2FkZXIoKS5jbGll
bnQoKS5jcmVhdGVQbHVnaW4oY29udGVudFNpemUsICZwbHVnaW5FbGVtZW50LCB1cmwsIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKIAogICAgIGlmICgh
d2lkZ2V0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcApp
bmRleCAxODViODllOTBlNTk4ZjExMzdjMzgyNmVjNmM3NTg5OWY2NmI2M2RlLi40MzJhZDg1ZTNk
NjQ1Yjk3MzJmMTdjMzRiY2RiODg0OThjYjVhYzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKQEAgLTQ0LDYgKzQ0LDEwIEBACiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBM
QVRGT1JNKElPUykKKyNpbmNsdWRlIDxSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaD4KKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERFRklORV9ERUJVR19PTkxZX0dMT0JBTChX
VEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciwgc3VicmVzb3VyY2VMb2FkZXJDb3VudGVyLCAoIlN1
YnJlc291cmNlTG9hZGVyIikpOwpAQCAtODQsMTAgKzg4LDI5IEBAIFN1YnJlc291cmNlTG9hZGVy
Ojp+U3VicmVzb3VyY2VMb2FkZXIoKQogUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3Vi
cmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRl
ck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzdWJs
b2FkZXIoYWRvcHRSZWYobmV3IFN1YnJlc291cmNlTG9hZGVyKGZyYW1lLCByZXNvdXJjZSwgb3B0
aW9ucykpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFhcHBsaWNhdGlvbklzV2ViUHJv
Y2VzcygpKSB7CisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS85MTIxNzE5PiAtIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjY0Ny4KKyAgICAgICAgc3VibG9hZGVy
LT5tX2lPU09yaWdpbmFsUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIHJldHVybiBzdWJsb2Fk
ZXIucmVsZWFzZSgpOworICAgIH0KKyNlbmRpZgogICAgIGlmICghc3VibG9hZGVyLT5pbml0KHJl
cXVlc3QpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIHN1YmxvYWRlci5yZWxlYXNlKCk7CiB9CisgICAgCisjaWYgUExBVEZPUk0oSU9TKQor
Ym9vbCBTdWJyZXNvdXJjZUxvYWRlcjo6c3RhcnRMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQoIWFw
cGxpY2F0aW9uSXNXZWJQcm9jZXNzKCkpOworICAgIGlmICghaW5pdChtX2lPU09yaWdpbmFsUmVx
dWVzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2lPU09yaWdpbmFsUmVxdWVzdCA9
IFJlc291cmNlUmVxdWVzdCgpOworICAgIHN0YXJ0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9Cisj
ZW5kaWYKIAogQ2FjaGVkUmVzb3VyY2UqIFN1YnJlc291cmNlTG9hZGVyOjpjYWNoZWRSZXNvdXJj
ZSgpCiB7CkBAIC0yNzMsNiArMjk2LDExIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpCiAgICAgTE9HKFJlc291cmNlTG9hZGluZywg
IlJlY2VpdmVkICclcycuIiwgbV9yZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0
YSgpKTsKIAogICAgIFJlZjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgaWYgKHJlc291cmNlRGF0YSgpKQorICAgICAgICByZXNvdXJj
ZURhdGEoKS0+c2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KHRydWUpOworI2VuZGlmCiAgICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHByb3RlY3RSZXNvdXJjZShtX3Jlc291
cmNlKTsKICAgICBtX3N0YXRlID0gRmluaXNoaW5nOwogICAgIG1fcmVzb3VyY2UtPnNldExvYWRG
aW5pc2hUaW1lKGZpbmlzaFRpbWUpOwpAQCAtMzE0LDEzICszNDIsMjQgQEAgdm9pZCBTdWJyZXNv
dXJjZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIAogdm9pZCBT
dWJyZXNvdXJjZUxvYWRlcjo6d2lsbENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gU2luY2Ugd2UgZGVmZXIgaW5pdGlhbGl6YXRp
b24gdG8gc2NoZWR1bGluZyB0aW1lIG9uIGlPUyBidXQKKyAgICAvLyBDYWNoZWRSZXNvdXJjZUxv
YWRlciBzdG9yZXMgcmVzb3VyY2VzIGluIHRoZSBtZW1vcnkgY2FjaGUgaW1tZWRpYXRlbHksCisg
ICAgLy8gbV9yZXNvdXJjZSBtaWdodCBiZSBjYWNoZWQgZGVzcGl0ZSBpdHMgbG9hZGVyIG5vdCBi
ZWluZyBpbml0aWFsaXplZC4KKyAgICBpZiAobV9zdGF0ZSAhPSBJbml0aWFsaXplZCAmJiBtX3N0
YXRlICE9IFVuaW5pdGlhbGl6ZWQpCisjZWxzZQogICAgIGlmIChtX3N0YXRlICE9IEluaXRpYWxp
emVkKQorI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIXJlYWNoZWRUZXJtaW5h
bFN0YXRlKCkpOwogICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYW5jZWxsZWQgbG9hZCBvZiAn
JXMnLlxuIiwgbV9yZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKIAog
ICAgIFJlZjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCgqdGhpcyk7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIG1fc3RhdGUgPSBtX3N0YXRlID09IFVuaW5pdGlhbGl6ZWQgPyBDYW5jZWxsZWRX
aGlsZUluaXRpYWxpemluZyA6IEZpbmlzaGluZzsKKyNlbHNlCiAgICAgbV9zdGF0ZSA9IEZpbmlz
aGluZzsKKyNlbmRpZgogICAgIGlmIChtX3Jlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgp
KQogICAgICAgICBtZW1vcnlDYWNoZSgpLT5yZXZhbGlkYXRpb25GYWlsZWQobV9yZXNvdXJjZSk7
CiAgICAgbV9yZXNvdXJjZS0+c2V0UmVzb3VyY2VFcnJvcihlcnJvcik7CkBAIC0zNDIsNyArMzgx
LDExIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6Om5vdGlmeURvbmUoKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX3JlcXVlc3RDb3VudFRyYWNrZXIuY2xlYXIoKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgbV9kb2N1bWVudExvYWRlci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9u
ZShtX3Jlc291cmNlLCBtX3N0YXRlICE9IENhbmNlbGxlZFdoaWxlSW5pdGlhbGl6aW5nKTsKKyNl
bHNlCiAgICAgbV9kb2N1bWVudExvYWRlci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9u
ZShtX3Jlc291cmNlKTsKKyNlbmRpZgogICAgIGlmIChyZWFjaGVkVGVybWluYWxTdGF0ZSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9kb2N1bWVudExvYWRlci0+cmVtb3ZlU3VicmVzb3VyY2VM
b2FkZXIodGhpcyk7CkBAIC0zNTEsNyArMzk0LDExIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6
Om5vdGlmeURvbmUoKQogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6cmVsZWFzZVJlc291cmNlcygp
CiB7CiAgICAgQVNTRVJUKCFyZWFjaGVkVGVybWluYWxTdGF0ZSgpKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgaWYgKG1fc3RhdGUgIT0gVW5pbml0aWFsaXplZCAmJiBtX3N0YXRlICE9IENhbmNl
bGxlZFdoaWxlSW5pdGlhbGl6aW5nKQorI2Vsc2UKICAgICBpZiAobV9zdGF0ZSAhPSBVbmluaXRp
YWxpemVkKQorI2VuZGlmCiAgICAgICAgIG1fcmVzb3VyY2UtPmNsZWFyTG9hZGVyKCk7CiAgICAg
bV9yZXNvdXJjZSA9IDA7CiAgICAgUmVzb3VyY2VMb2FkZXI6OnJlbGVhc2VSZXNvdXJjZXMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKaW5kZXggMDBhYjk4MDFj
ZDZlMDMxZGJiOGY4NDZlMGM1NDhjNmE1MGVjNWI0NC4uZDJmNDRkNWMwM2M4MGVjZTk2NTMyZDdi
NjZlMjQ0NDc1OTMzOTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmgKQEAgLTUyLDYgKzUyLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTdWJy
ZXNvdXJjZUxvYWRlcigpIE9WRVJSSURFOwogICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNv
dXJjZSgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgYm9vbCBzdGFydExvYWRp
bmcoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgaU9TT3Jp
Z2luYWxSZXF1ZXN0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pT1NPcmlnaW5hbFJlcXVl
c3Q7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFN1YnJlc291cmNlTG9hZGVyKEZyYW1lKiwg
Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKIApAQCAtODYs
NyArOTEsMTAgQEAgcHJpdmF0ZToKICAgICBlbnVtIFN1YnJlc291cmNlTG9hZGVyU3RhdGUgewog
ICAgICAgICBVbmluaXRpYWxpemVkLAogICAgICAgICBJbml0aWFsaXplZCwKLSAgICAgICAgRmlu
aXNoaW5nCisgICAgICAgIEZpbmlzaGluZywKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIENh
bmNlbGxlZFdoaWxlSW5pdGlhbGl6aW5nCisjZW5kaWYKICAgICB9OwogCiAgICAgY2xhc3MgUmVx
dWVzdENvdW50VHJhY2tlciB7CkBAIC05OCw2ICsxMDYsOSBAQCBwcml2YXRlOgogICAgICAgICBD
YWNoZWRSZXNvdXJjZSogbV9yZXNvdXJjZTsKICAgICB9OwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFJlc291cmNlUmVxdWVzdCBtX2lPU09yaWdpbmFsUmVxdWVzdDsKKyNlbmRpZgogICAgIENh
Y2hlZFJlc291cmNlKiBtX3Jlc291cmNlOwogICAgIGJvb2wgbV9sb2FkaW5nTXVsdGlwYXJ0Q29u
dGVudDsKICAgICBTdWJyZXNvdXJjZUxvYWRlclN0YXRlIG1fc3RhdGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
LmNwcAppbmRleCBhNzRiZjJkYTRiYWJmN2YzYjI0NzFhMGQ0OTBkMjdmZjQ0ODY1OTQxLi4xOWVk
NzFkZjVmZWYwNGQ5NjcwOTJiNjU4YTk4NDBiNWE1NmY0YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5j
cHAKQEAgLTQyLDYgKzQyLDEwIEBACiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNp
bmNsdWRlICJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGZsYXRGaWxlU3ViZGlyZWN0b3J5W10gPSAiQXBw
bGljYXRpb25DYWNoZSI7CkBAIC0xMDAsNiArMTA0LDkgQEAgc3RhdGljIHVuc2lnbmVkIHVybEhv
c3RIYXNoKGNvbnN0IFVSTCYgdXJsKQogCiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25zdCBVUkwmIG1hbmlmZXN0VVJMKQog
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRv
Q291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBvcGVuRGF0YWJhc2UoZmFs
c2UpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xNzQsNiArMTgxLDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZE1hbmlm
ZXN0SG9zdEhhc2hlcygpCiAgICAgLy8gdG8gYXZvaWQgdHJ5aW5nIHRvIG9wZW4gdGhlIGRhdGFi
YXNlIG92ZXIgYW5kIG92ZXIgaWYgaXQgZG9lc24ndCBleGlzdC4KICAgICBoYXNMb2FkZWRIYXNo
ZXMgPSB0cnVlOwogICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlv
bkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBv
cGVuRGF0YWJhc2UoZmFsc2UpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjIwLDYgKzIzMCwxMCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQog
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRv
Q291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKKwogICAgIC8vIENoZWNrIHRoZSBk
YXRhYmFzZS4gTG9vayBmb3IgYWxsIGNhY2hlIGdyb3VwcyB3aXRoIGEgbmV3ZXN0IGNhY2hlLgog
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBpZCwgbWFu
aWZlc3RVUkwsIG5ld2VzdENhY2hlIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGUg
SVMgTk9UIE5VTEwiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRP
aykKQEAgLTI2Niw2ICsyODAsOSBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjYWNoZUdyb3VwRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3Jv
dXBGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNRTGl0
ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyNl
bmRpZgogICAgIEFTU0VSVCghdXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKTsKIAogICAgIC8v
IENoZWNrIGlmIGFuIGFwcHJvcHJpYXRlIGNhY2hlIGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4K
QEAgLTQzNyw2ICs0NTQsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzZXREZWZh
dWx0T3JpZ2luUXVvdGEoaW50NjRfdCBxdW90YSkKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2FsY3VsYXRlUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdp
biwgaW50NjRfdCYgcXVvdGEpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5z
YWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgog
ICAgIC8vIElmIGFuIE9yaWdpbiByZWNvcmQgZG9lc24ndCBleGlzdCwgdGhlbiB0aGUgQ09VTlQg
d2lsbCBiZSAwIGFuZCBxdW90YSB3aWxsIGJlIDAuCiAgICAgLy8gVXNpbmcgdGhlIGNvdW50IHRv
IGRldGVybWluZSBpZiBhIHJlY29yZCBleGlzdGVkIG9yIG5vdCBpcyBhIHNhZmUgd2F5IHRvIGRl
dGVybWluZQogICAgIC8vIGlmIGEgcXVvdGEgb2YgMCBpcyByZWFsLCBmcm9tIHRoZSByZWNvcmQs
IG9yIGZyb20gbnVsbC4KQEAgLTQ2MCw2ICs0ODAsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpjYWxjdWxhdGVRdW90YUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiogb3Jp
ZwogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVVc2FnZUZvck9yaWdp
bihjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBpbnQ2NF90JiB1c2FnZSkKIHsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgLy8gSWYgYW4gT3JpZ2lucyByZWNvcmQg
ZG9lc24ndCBleGlzdCwgdGhlbiB0aGUgU1VNIHdpbGwgYmUgbnVsbCwKICAgICAvLyB3aGljaCB3
aWxsIGJlY29tZSAwLCBhcyBleHBlY3RlZCwgd2hlbiBjb252ZXJ0aW5nIHRvIGEgbnVtYmVyLgog
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBTVU0oQ2Fj
aGVzLnNpemUpIgpAQCAtNDg0LDYgKzUwNyw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmNhbGN1bGF0ZVVzYWdlRm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnCiAK
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNhbGN1bGF0ZVJlbWFpbmluZ1NpemVGb3JP
cmlnaW5FeGNsdWRpbmdDYWNoZShjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBBcHBsaWNh
dGlvbkNhY2hlKiBjYWNoZSwgaW50NjRfdCYgcmVtYWluaW5nU2l6ZSkKIHsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNh
Y3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKICAgICBpZiAo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUzMyw2ICs1
NTksOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWxjdWxhdGVSZW1haW5pbmdT
aXplRm9yT3JpZ2luRXhjbHVkaW5nQ2FjaGUoY29ucwogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZVVwZGF0ZWRRdW90YUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBpbnQ2NF90IHF1b3RhKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5k
aWYKICAgICBvcGVuRGF0YWJhc2UodHJ1ZSk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTIsNiArNTgxLDkgQEAgYm9vbCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oY29uc3QgU2VjdXJp
dHlPcmlnaW4qIG8KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVNRTENv
bW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VS
VChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyNl
bmRpZgogICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3BlbigpKTsKICAgICAKICAgICBib29sIHJl
c3VsdCA9IG1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoc3FsKTsKQEAgLTU2OSw2ICs2MDEsOSBA
QCBzdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSA3OwogICAgIAogdm9pZCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiB7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Q
cm9ncmVzcygpKTsKKyNlbmRpZgogICAgIGludCB2ZXJzaW9uID0gU1FMaXRlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJQUkFHTUEgdXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOwogICAgIGlm
ICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTU5Myw2ICs2
MjgsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9u
KCkKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29s
IGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5k
aWYKICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02
NjAsNiArNjk4LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNl
KGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiB7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5z
YWN0aW9uSW5Qcm9ncmVzcygpKTsKKyNlbmRpZgogICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50
LmV4ZWN1dGVDb21tYW5kKCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIExPR19FUlJPUigi
QXBwbGljYXRpb24gQ2FjaGUgU3RvcmFnZTogZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwi
JXNcIiBlcnJvciBcIiVzXCIiLCAKQEAgLTY3MCw2ICs3MTEsOSBAQCBib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50
KQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hl
R3JvdXAqIGdyb3VwLCBHcm91cFN0b3JhZ2VJREpvdXJuYWwqIGpvdXJuYWwpCiB7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIEFTU0VSVChTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpKTsKKyNlbmRpZgogICAgIEFTU0VSVChncm91cC0+c3RvcmFnZUlEKCkg
PT0gMCk7CiAgICAgQVNTRVJUKGpvdXJuYWwpOwogCkBAIC02OTYsNiArNzQwLDkgQEAgYm9vbCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91
cCwgR3JvdXBTdG9yYWdlSUQKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUo
QXBwbGljYXRpb25DYWNoZSogY2FjaGUsIFJlc291cmNlU3RvcmFnZUlESm91cm5hbCogc3RvcmFn
ZUlESm91cm5hbCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJUKFNRTGl0ZURhdGFi
YXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworI2VuZGlmCiAgICAgQVNT
RVJUKGNhY2hlLT5zdG9yYWdlSUQoKSA9PSAwKTsKICAgICBBU1NFUlQoY2FjaGUtPmdyb3VwKCkt
PnN0b3JhZ2VJRCgpICE9IDApOwogICAgIEFTU0VSVChzdG9yYWdlSURKb3VybmFsKTsKQEAgLTc3
Nyw2ICs4MjQsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNh
dGlvbkNhY2hlKiBjYWNoZSwgUmVzb3VyY2VTdG9yYWdlSURKbwogCiBib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1
bnNpZ25lZCBjYWNoZVN0b3JhZ2VJRCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJU
KFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworI2Vu
ZGlmCiAgICAgQVNTRVJUKGNhY2hlU3RvcmFnZUlEKTsKICAgICBBU1NFUlQoIXJlc291cmNlLT5z
dG9yYWdlSUQoKSk7CiAgICAgCkBAIC04OTQsNiArOTQ0LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5z
aWduZWQKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdGVkVHlwZShB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNo
ZSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNz
QXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgQVNTRVJUX1VOVVNF
RChjYWNoZSwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKICAgICBBU1NFUlQocmVzb3VyY2UtPnN0b3Jh
Z2VJRCgpKTsKIApAQCAtOTEwLDYgKzk2Myw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnN0b3JlVXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjCiAK
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2Fj
dGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBBU1NFUlQoY2FjaGUtPnN0b3JhZ2VJRCgpKTsKICAg
ICAKICAgICBvcGVuRGF0YWJhc2UodHJ1ZSk7CkBAIC05NDUsNiArMTAwMSw5IEBAIGJvb2wgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVz
b3VyY2UsIEFwcGxpY2F0CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVuc3VyZU9y
aWdpblJlY29yZChjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7CisjZW5kaWYKICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0T3JpZ2luU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIChvcmlnaW4sIHF1b3RhKSBW
QUxVRVMgKD8sID8pIik7CiAgICAgaWYgKGluc2VydE9yaWdpblN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwOTIsNiArMTE1MSw5
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJz
LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiAgICAgCiBQYXNzUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFn
ZUlEKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NFUlQoU1FMaXRlRGF0YWJhc2VUcmFj
a2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisjZW5kaWYKICAgICBTUUxpdGVTdGF0
ZW1lbnQgY2FjaGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJTRUxFQ1QgdXJsLCBzdGF0dXNDb2RlLCB0eXBlLCBtaW1lVHlwZSwgdGV4
dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSwgQ2FjaGVSZXNv
dXJjZURhdGEucGF0aCBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2Vz
IE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VEYXRhIE9O
IENhY2hlUmVzb3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2FjaGVFbnRy
aWVzLmNhY2hlPT8iKTsKQEAgLTEyMDAsNiArMTI2Miw5IEBAIFBhc3NSZWZQdHI8QXBwbGljYXRp
b25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9y
YWdlCiAgICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpyZW1vdmUoQXBwbGljYXRp
b25DYWNoZSogY2FjaGUpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAg
IGlmICghY2FjaGUtPnN0b3JhZ2VJRCgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0xMjM3
LDYgKzEzMDIsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpyZW1vdmUoQXBwbGlj
YXRpb25DYWNoZSogY2FjaGUpCiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5
KCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNz
QXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgb3BlbkRhdGFiYXNl
KGZhbHNlKTsKICAgICAKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCkBAIC0xMzAxLDYg
KzEzNjksOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFUb1VuaXF1
ZUZpbGVJbkRpcmVjdG9yeShTaGFyZWRCdWZmZXIqIGRhdAogCiBib29sIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3Rvcnks
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCiB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291
bnRlcjsKKyNlbmRpZgogICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gY2FjaGVIb3N0LT5h
cHBsaWNhdGlvbkNhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMzM3LDYgKzE0MDgsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9y
ZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogCiBib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMoVmVjdG9yPFVSTD4qIHVybHMpCiB7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9D
b3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyNlbmRpZgogICAgIEFTU0VSVCh1cmxzKTsKICAg
ICBvcGVuRGF0YWJhc2UoZmFsc2UpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKQEAg
LTEzNTUsNiArMTQyOSw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0
VVJMcyhWZWN0b3I8VVJMPiogdXJscykKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
Y2FjaGVHcm91cFNpemUoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50NjRfdCogc2l6ZSkK
IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0
b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworI2VuZGlmCiAgICAgQVNTRVJUKHNpemUpOwog
ICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQpA
QCAtMTM4MSw2ICsxNDU4LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVH
cm91cFNpemUoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50NjRfdCoKIAogYm9vbCBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlm
ZXN0VVJMKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisjZW5kaWYKICAgICBTUUxpdGVU
cmFuc2FjdGlvbiBkZWxldGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAvLyBDaGVjayB0
byBzZWUgaWYgdGhlIGdyb3VwIGlzIGluIG1lbW9yeS4KICAgICBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXAqIGdyb3VwID0gbV9jYWNoZXNJbk1lbW9yeS5nZXQobWFuaWZlc3RVUkwpOwpAQCAtMTQzMiw2
ICsxNTEyLDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91
cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjp2YWN1dW1EYXRhYmFzZUZpbGUoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTUUxp
dGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Cisj
ZW5kaWYKICAgICBvcGVuRGF0YWJhc2UoZmFsc2UpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAKaW5kZXggN2ViMWNlN2NmZGE2M2YxOGY3N2M3YWZhMTA3ZDk0ZjE4NjBjMzEz
MC4uZDA4MGIxZjhjZjg1MTZlZWE5YjNjZjE3ZGNmMDFiMDUzNTNjOWE1ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCkBAIC00NSw2ICs0NSwxMCBAQAog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiU3lzdGVtTWVtb3J5LmgiCisjZW5kaWYKKwog
I2lmIFVTRShDRykKICNpbmNsdWRlICJQREZEb2N1bWVudEltYWdlLmgiCiAjZW5kaWYKQEAgLTc2
LDYgKzgwLDE1IEBAIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCiAgICAg
c2V0TG9hZGluZyhmYWxzZSk7CiB9CiAKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBV
UkwmIHVybCwgSW1hZ2UqIGltYWdlKQorICAgIDogQ2FjaGVkUmVzb3VyY2UoUmVzb3VyY2VSZXF1
ZXN0KHVybCksIEltYWdlUmVzb3VyY2UpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9z
aG91bGRQYWludEJyb2tlbkltYWdlKHRydWUpCit7CisgICAgc2V0U3RhdHVzKENhY2hlZCk7Cisg
ICAgc2V0TG9hZGluZyhmYWxzZSk7Cit9CisKIENhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQog
ewogICAgIGNsZWFySW1hZ2UoKTsKQEAgLTI2Nyw4ICsyODAsMTcgQEAgTGF5b3V0U2l6ZSBDYWNo
ZWRJbWFnZTo6aW1hZ2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgZmxvYXQKICAgICB9CiAjZWxzZQogICAgIGlmIChtX2ltYWdlLT5pc0JpdG1hcEltYWdlKCkg
JiYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigp
ID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSkKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAg
ICBpbWFnZVNpemUgPSB0b0JpdG1hcEltYWdlKG1faW1hZ2UuZ2V0KCkpLT5zaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uKCk7Ci0jZW5kaWYKKyNlbHNlCisgICAgeworICAgICAgICAvLyBPbiBpT1Ms
IHRoZSBpbWFnZSBtYXkgaGF2ZSBiZWVuIHN1YnNhbXBsZWQgdG8gYWNjb21tb2RhdGUgb3VyIHNp
emUgcmVzdHJpY3Rpb25zLiBIb3dldmVyCisgICAgICAgIC8vIHdlIHNob3VsZCB0ZWxsIHRoZSBy
ZW5kZXJlciB3aGF0IHRoZSBvcmlnaW5hbCBzaXplIHdhcy4KKyAgICAgICAgaW1hZ2VTaXplID0g
dG9CaXRtYXBJbWFnZShtX2ltYWdlLmdldCgpKS0+b3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uKCk7CisgICAgfSBlbHNlIGlmIChtX2ltYWdlLT5pc0JpdG1hcEltYWdlKCkpCisgICAg
ICAgIGltYWdlU2l6ZSA9IHRvQml0bWFwSW1hZ2UobV9pbWFnZS5nZXQoKSktPm9yaWdpbmFsU2l6
ZSgpOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisjZW5kaWYgLy8gRU5BQkxFKENTU19JTUFH
RV9PUklFTlRBVElPTikKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgZWxzZSBpZiAobV9pbWFnZS0+
aXNTVkdJbWFnZSgpICYmIHNpemVUeXBlID09IFVzZWRTaXplKSB7CkBAIC01OTAsNCArNjEyLDI5
IEBAIGJvb2wgQ2FjaGVkSW1hZ2U6OmlzT3JpZ2luQ2xlYW4oU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luKQogICAgIHJldHVybiAhc2VjdXJpdHlPcmlnaW4tPnRhaW50c0NhbnZhcyhyZXNw
b25zZSgpLnVybCgpKTsKIH0KIAorI2lmIFVTRShDRikKKy8vIEZJWE1FOiBXZSBzaG91bGQgbG9v
ayB0byBpbmNvcnBvcmF0ZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBDYWNoZWRJbWFnZU1hbnVhbAor
Ly8gaW50byBDYWNoZWRJbWFnZSBvciBmaW5kIGEgYmV0dGVyIHBsYWNlIGZvciB0aGlzIGNsYXNz
LgorLy8gRklYTUU6IFJlbW92ZSB0aGUgVVNFKENGKSBvbmNlIHdlIG1ha2UgTWVtb3J5Q2FjaGU6
OmFkZEltYWdlVG9DYWNoZSgpIHBsYXRmb3JtLWluZGVwZW5kZW50LgorQ2FjaGVkSW1hZ2VNYW51
YWw6OkNhY2hlZEltYWdlTWFudWFsKGNvbnN0IFVSTCYgdXJsLCBJbWFnZSogaW1hZ2UpCisgICAg
OiBDYWNoZWRJbWFnZSh1cmwsIGltYWdlKQorICAgICwgbV9mYWtlQ2xpZW50KHN0ZDo6bWFrZV91
bmlxdWU8Q2FjaGVkSW1hZ2VDbGllbnQ+KCkpCit7CisgICAgLy8gVXNlIHRoZSBpbmNvbWluZyBV
UkwgaW4gdGhlIHJlc3BvbnNlIGZpZWxkLiBUaGlzIGVuc3VyZXMgdGhhdCBjb2RlCisgICAgLy8g
dXNpbmcgdGhlIHJlc3BvbnNlIGRpcmVjdGx5LCBzdWNoIGFzIG9yaWdpbiBjaGVja3MgZm9yIHNl
Y3VyaXR5LAorICAgIC8vIGFjdHVhbGx5IHNlZSBzb21ldGhpbmcuCisgICAgbV9yZXNwb25zZS5z
ZXRVUkwodXJsKTsKK30KKworYm9vbCBDYWNoZWRJbWFnZU1hbnVhbDo6bXVzdFJldmFsaWRhdGVE
dWVUb0NhY2hlSGVhZGVycyhDYWNoZVBvbGljeSkgY29uc3QKK3sKKyAgICAvLyBEbyBub3QgcmV2
YWxpZGF0ZSBtYW51YWxseSBjYWNoZWQgaW1hZ2VzLiBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGFz
IGEKKyAgICAvLyB3YXkgdG8gZWZmaWNpZW50bHkgc2hhcmUgYW4gaW1hZ2UgZnJvbSB0aGUgY2xp
ZW50IHRvIGNvbnRlbnQgYW5kCisgICAgLy8gdGhlIFVSTCBmb3IgdGhhdCBpbWFnZSBtYXkgbm90
IHJlcHJlc2VudCBhIHJlc291cmNlIHRoYXQgY2FuIGJlCisgICAgLy8gcmV0cmlldmVkIGJ5IHN0
YW5kYXJkIG1lYW5zLiBJZiB0aGUgbWFudWFsIGNhY2hpbmcgU1BJIGlzIHVzZWQsIGl0IGlzCisg
ICAgLy8gaW5jdW1iZW50IG9uIHRoZSBjbGllbnQgdG8gb25seSB1c2UgdmFsaWQgcmVzb3VyY2Vz
LgorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCmluZGV4IDQ2NDBkNjli
YjI3MDNmY2JiMmViMmM1NzAwNWIxMThkYWUwNTIwNjMuLjhiYjY1ZGVkYWJiMjBjOGNhM2NlMDY2
YTQ3YWZjNDIxMjM0NDYwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5oCkBAIC00NSwxMiArNDUsMTMgQEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIHN0cnVj
dCBMZW5ndGg7CiAKLWNsYXNzIENhY2hlZEltYWdlIEZJTkFMIDogcHVibGljIENhY2hlZFJlc291
cmNlLCBwdWJsaWMgSW1hZ2VPYnNlcnZlciB7CitjbGFzcyBDYWNoZWRJbWFnZSA6IHB1YmxpYyBD
YWNoZWRSZXNvdXJjZSwgcHVibGljIEltYWdlT2JzZXJ2ZXIgewogICAgIGZyaWVuZCBjbGFzcyBN
ZW1vcnlDYWNoZTsKIAogcHVibGljOgogICAgIENhY2hlZEltYWdlKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpOwogICAgIENhY2hlZEltYWdlKEltYWdlKik7CisgICAgQ2FjaGVkSW1hZ2UoY29uc3Qg
VVJMJiwgSW1hZ2UqKTsKICAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOwogCiAgICAgSW1hZ2Uq
IGltYWdlKCk7IC8vIFJldHVybnMgdGhlIG51bGxJbWFnZSgpIGlmIHRoZSBpbWFnZSBpcyBub3Qg
YXZhaWxhYmxlIHlldC4KQEAgLTc5LDYgKzgwLDExIEBAIHB1YmxpYzoKICAgICBMYXlvdXRTaXpl
IGltYWdlU2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGZsb2F0IG11bHRpcGxp
ZXIsIFNpemVUeXBlID0gVXNlZFNpemUpOyAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21w
bGV0ZSBpbWFnZS4KICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKExlbmd0aCYg
aW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJp
bnNpY1JhdGlvKTsKIAorI2lmIFVTRShDRikKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBVU0Uo
Q0YpIG9uY2Ugd2UgbWFrZSBNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKCkgcGxhdGZvcm0t
aW5kZXBlbmRlbnQuCisgICAgdmlydHVhbCBib29sIGlzTWFudWFsKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyNlbmRpZgorCiAgICAgc3RhdGljIHZvaWQgcmVzdW1lQW5pbWF0aW5nSW1hZ2Vz
Rm9yTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKik7CiAKICNpZiBFTkFCTEUoRElTS19JTUFH
RV9DQUNIRSkKQEAgLTE0Myw2ICsxNDksMjIgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxk
UGFpbnRCcm9rZW5JbWFnZTsKIH07CiAKKyNpZiBVU0UoQ0YpCisvLyBGSVhNRTogV2Ugc2hvdWxk
IGxvb2sgdG8gaW5jb3Jwb3JhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgQ2FjaGVkSW1hZ2VNYW51
YWwKKy8vIGludG8gQ2FjaGVkSW1hZ2Ugb3IgZmluZCBhIGJldHRlciBwbGFjZSBmb3IgdGhpcyBj
bGFzcy4KKy8vIEZJWE1FOiBSZW1vdmUgdGhlIFVTRShDRikgb25jZSB3ZSBtYWtlIE1lbW9yeUNh
Y2hlOjphZGRJbWFnZVRvQ2FjaGUoKSBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KK2NsYXNzIENhY2hl
ZEltYWdlTWFudWFsIDogcHVibGljIENhY2hlZEltYWdlIHsKK3B1YmxpYzoKKyAgICBDYWNoZWRJ
bWFnZU1hbnVhbChjb25zdCBVUkwmLCBJbWFnZSopOworICAgIHZvaWQgYWRkRmFrZUNsaWVudCgp
IHsgYWRkQ2xpZW50KG1fZmFrZUNsaWVudC5nZXQoKSk7IH0KKyAgICB2b2lkIHJlbW92ZUZha2VD
bGllbnQoKSB7IHJlbW92ZUNsaWVudChtX2Zha2VDbGllbnQuZ2V0KCkpOyB9CisgICAgdmlydHVh
bCBib29sIGlzTWFudWFsKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBtdXN0UmV2YWxpZGF0ZUR1ZVRvQ2FjaGVIZWFkZXJzKENhY2hlUG9saWN5KSBj
b25zdDsKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFJlc291cmNlQ2xpZW50
PiBtX2Zha2VDbGllbnQ7Cit9OworI2VuZGlmCisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCBlNTNiYWM1ZjZmZTRh
ZTU4MDc2OGMyYWQ5ZmQwYWMwZDBkNWQwZGIyLi4wOTRlNzMyNzNkMDNlZjRlYWYxZDRhZDNlMjIz
NmIzY2NkNjNiNDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAKQEAgLTU0LDYgKzU0LDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFVTRShRVUlDS19MT09LKQorI2lu
Y2x1ZGUgIlF1aWNrTG9vay5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMwNiw2ICszMTAsMTYgQEAgdm9pZCBDYWNoZWRSZXNvdXJj
ZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0
IFJlc28KICAgICBtX29wdGlvbnMgPSBvcHRpb25zOwogICAgIG1fbG9hZGluZyA9IHRydWU7CiAK
KyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAoIW1fcmVzb3VyY2VSZXF1ZXN0LmlzTnVsbCgp
ICYmIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoUUxQcmV2aWV3UHJvdG9jb2wo
KSkpIHsKKyAgICAgICAgLy8gV2hlbiBRdWlja0xvb2sgaXMgaW52b2tlZCB0byBjb252ZXJ0IGEg
ZG9jdW1lbnQsIGl0IHJldHVybnMgYSB1bmlxdWUgVVJMIGluIHRoZQorICAgICAgICAvLyBOU1VS
TFJlcG9uc2UgZm9yIHRoZSBtYWluIGRvY3VtZW50LiBUbyBtYWtlIHNhZmVRTFVSTEZvckRvY3Vt
ZW50VVJMQW5kUmVzb3VyY2VVUkwoKQorICAgICAgICAvLyB3b3JrLCB3ZSBuZWVkIHRvIHVzZSB0
aGUgUUwgVVJMIG5vdCB0aGUgb3JpZ2luYWwgVVJMLgorICAgICAgICBjb25zdCBVUkwmIGRvY3Vt
ZW50VVJMID0gY2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCkgPyBjYWNoZWRSZXNvdXJjZUxv
YWRlci0+ZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKS51cmwo
KSA6IGNhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICAgICAgbV9y
ZXNvdXJjZVJlcXVlc3Quc2V0VVJMKHNhZmVRTFVSTEZvckRvY3VtZW50VVJMQW5kUmVzb3VyY2VV
UkwoZG9jdW1lbnRVUkwsIHVybCgpKSk7CisgICAgfQorI2VuZGlmCisKICNpZiBQTEFURk9STShC
TEFDS0JFUlJZKQogICAgIGlmIChtX3Jlc291cmNlUmVxdWVzdC50YXJnZXRUeXBlKCkgPT0gUmVz
b3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1Vuc3BlY2lmaWVkKQogICAgICAgICBtX3Jlc291cmNlUmVx
dWVzdC5zZXRUYXJnZXRUeXBlKGNhY2hlZFJlc291cmNlVHlwZVRvVGFyZ2V0VHlwZSh0eXBlKCkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKaW5kZXgg
NDA3MTliYTIxYzZlNzc2N2Y0ZDVlNmY0MmM1YWZmNGZmMjE0OGEzOC4uZmI0ZjViMjQ4MThlZTQ4
NDdiMTMyZThkN2QyN2FjNzVlODc0MjJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmgKQEAgLTIyOCw3ICsyMjgsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB1bnJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCk7CiAgICAgCiAg
ICAgYm9vbCBjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0OwotICAgIGJvb2wgbXVzdFJldmFs
aWRhdGVEdWVUb0NhY2hlSGVhZGVycyhDYWNoZVBvbGljeSkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGJvb2wgbXVzdFJldmFsaWRhdGVEdWVUb0NhY2hlSGVhZGVycyhDYWNoZVBvbGljeSkgY29uc3Q7
CisKICAgICBib29sIGlzQ2FjaGVWYWxpZGF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNl
VG9SZXZhbGlkYXRlOyB9CiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlVG9SZXZhbGlkYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAK
aW5kZXggOWY5ZTQ1N2Y0Zjc5ZDQyMmYzNDgzYmJlOGMzNGQ0YjZhYjRiNzcxMi4uMjA4OWYzZjYz
Njc0NTIwMGFlODM3N2JkODE5YWFhMTAzNjQwNmE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC03NDEsNyArNzQx
LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAogICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVt
b3ZlKHJlc291cmNlLT51cmwoKSk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6Omxv
YWREb25lKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmxvYWREb25lKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9vbCBzaG91bGRQZXJmb3Jt
UG9zdExvYWRBY3Rpb25zKQogewogICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gcHJvdGVjdERv
Y3VtZW50TG9hZGVyKG1fZG9jdW1lbnRMb2FkZXIpOwogICAgIFJlZlB0cjxEb2N1bWVudD4gcHJv
dGVjdERvY3VtZW50KG1fZG9jdW1lbnQpOwpAQCAtNzY2LDcgKzc2Niw5IEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmxvYWREb25lKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIAogICAg
IGlmIChmcmFtZSgpKQogICAgICAgICBmcmFtZSgpLT5sb2FkZXIoKS5sb2FkRG9uZSgpOwotICAg
IHBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMoKTsKKworICAgIGlmIChzaG91bGRQZXJmb3JtUG9zdExv
YWRBY3Rpb25zKQorICAgICAgICBwZXJmb3JtUG9zdExvYWRBY3Rpb25zKCk7CiAKICAgICBpZiAo
IW1fZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyLmlzQWN0aXZlKCkpCiAgICAg
ICAgIG1fZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKQEAgLTgyNiwyMSArODI4LDIwIEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlY3Jl
bWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVzKQogCiB2b2lkIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpwcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hl
ZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewotICAg
IGJvb2wgZGVsYXlTdWJyZXNvdXJjZUxvYWQgPSB0cnVlOwotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICBkZWxheVN1YnJlc291cmNlTG9hZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKGRlbGF5U3Vi
cmVzb3VyY2VMb2FkKSB7Ci0gICAgICAgIGJvb2wgaGFzUmVuZGVyaW5nID0gbV9kb2N1bWVudC0+
Ym9keSgpICYmIG1fZG9jdW1lbnQtPmJvZHkoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgYm9vbCBj
YW5CbG9ja1BhcnNlciA9IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0eXBlID09
IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OwotICAgICAgICBpZiAoIWhhc1JlbmRlcmlu
ZyAmJiAhY2FuQmxvY2tQYXJzZXIpIHsKLSAgICAgICAgICAgIC8vIERvbid0IHByZWxvYWQgc3Vi
cmVzb3VyY2VzIHRoYXQgY2FuJ3QgYmxvY2sgdGhlIHBhcnNlciBiZWZvcmUgd2UgaGF2ZSBzb21l
dGhpbmcgdG8gZHJhdy4KLSAgICAgICAgICAgIC8vIFRoaXMgaGVscHMgcHJldmVudCBwcmVsb2Fk
cyBmcm9tIGRlbGF5aW5nIGZpcnN0IGRpc3BsYXkgd2hlbiBiYW5kd2lkdGggaXMgbGltaXRlZC4K
LSAgICAgICAgICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVsb2FkID0geyB0eXBlLCByZXF1
ZXN0LCBjaGFyc2V0IH07Ci0gICAgICAgICAgICBtX3BlbmRpbmdQcmVsb2Fkcy5hcHBlbmQocGVu
ZGluZ1ByZWxvYWQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgLy8gV2Ug
YWx3YXlzIHByZWxvYWQgcmVzb3VyY2VzIG9uIGlPUy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNzY+LgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29u
c2lkZXIgYWRkaW5nIGEgc2V0dGluZyB0byB0b2dnbGUgYWdncmVzc2l2ZSBwcmVsb2FkaW5nIGJl
aGF2aW9yIGFzIG9wcG9zZWQKKyAgICAvLyB0byBtYWtpbmcgdGhpcyBiZWhhdmlvciBzcGVjaWZp
YyB0byBpT1MuCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBib29sIGhhc1JlbmRlcmluZyA9IG1f
ZG9jdW1lbnQtPmJvZHkoKSAmJiBtX2RvY3VtZW50LT5ib2R5KCktPnJlbmRlcmVyKCk7CisgICAg
Ym9vbCBjYW5CbG9ja1BhcnNlciA9IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0
eXBlID09IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OworICAgIGlmICghaGFzUmVuZGVy
aW5nICYmICFjYW5CbG9ja1BhcnNlcikgeworICAgICAgICAvLyBEb24ndCBwcmVsb2FkIHN1YnJl
c291cmNlcyB0aGF0IGNhbid0IGJsb2NrIHRoZSBwYXJzZXIgYmVmb3JlIHdlIGhhdmUgc29tZXRo
aW5nIHRvIGRyYXcuCisgICAgICAgIC8vIFRoaXMgaGVscHMgcHJldmVudCBwcmVsb2FkcyBmcm9t
IGRlbGF5aW5nIGZpcnN0IGRpc3BsYXkgd2hlbiBiYW5kd2lkdGggaXMgbGltaXRlZC4KKyAgICAg
ICAgUGVuZGluZ1ByZWxvYWQgcGVuZGluZ1ByZWxvYWQgPSB7IHR5cGUsIHJlcXVlc3QsIGNoYXJz
ZXQgfTsKKyAgICAgICAgbV9wZW5kaW5nUHJlbG9hZHMuYXBwZW5kKHBlbmRpbmdQcmVsb2FkKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogICAgIHJlcXVlc3RQcmVsb2FkKHR5cGUs
IHJlcXVlc3QsIGNoYXJzZXQpOwogfQogCkBAIC04NDgsNiArODQ5LDEyIEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmNoZWNrRm9yUGVuZGluZ1ByZWxvYWRzKCkKIHsKICAgICBpZiAobV9w
ZW5kaW5nUHJlbG9hZHMuaXNFbXB0eSgpIHx8ICFtX2RvY3VtZW50LT5ib2R5KCkgfHwgIW1fZG9j
dW1lbnQtPmJvZHkoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOworI2lmIFBMQVRGT1JN
KElPUykKKyAgICAvLyBXZSBhbHdheXMgcHJlbG9hZCByZXNvdXJjZXMgb24gaU9TLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI3Nj4uCisgICAgLy8gU28s
IHdlIHNob3VsZCBuZXZlciBoYXZlIGFueSBwZW5kaW5nIHByZWxvYWRzLgorICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgbG9vayB0byBhdm9pZCBjb21waWxpbmcgdGhpcyBjb2RlIGVudGlyZWx5IHdo
ZW4gYnVpbGRpbmcgZm9yIGlPUy4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgog
ICAgIHdoaWxlICghbV9wZW5kaW5nUHJlbG9hZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIFBlbmRp
bmdQcmVsb2FkIHByZWxvYWQgPSBtX3BlbmRpbmdQcmVsb2Fkcy50YWtlRmlyc3QoKTsKICAgICAg
ICAgLy8gRG9uJ3QgcmVxdWVzdCBwcmVsb2FkIGlmIHRoZSByZXNvdXJjZSBhbHJlYWR5IGxvYWRl
ZCBub3JtYWxseSAodGhpcyB3aWxsIHJlc3VsdCBpbiBkb3VibGUgbG9hZCBpZiB0aGUgcGFnZSBp
cyBiZWluZyByZWxvYWRlZCB3aXRoIGNhY2hlZCByZXN1bHRzIGlnbm9yZWQpLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAppbmRleCAx
OWM5NzBhOGRmYzhlZjA2Zjc2NjNlNDY1NjMyYWU0MTFlMmYxZDdkLi4zOWEwYTI1MWU0MDcyODVm
M2YwNDQ3MTAzZWFkNDliOTQ4ZWMxMTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaApAQCAtMTIwLDcgKzEyMCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNsZWFyRG9jdW1lbnRMb2FkZXIoKSB7IG1fZG9jdW1lbnRMb2FkZXIgPSAw
OyB9CiAKICAgICB2b2lkIHJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKikgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkRG9uZShDYWNoZWRSZXNvdXJjZSopOworCisgICAgdm9pZCBsb2Fk
RG9uZShDYWNoZWRSZXNvdXJjZSosIGJvb2wgc2hvdWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucyA9
IHRydWUpOworCiAgICAgdm9pZCBnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzKCk7CiAg
ICAgCiAgICAgdm9pZCBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2Uq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4IDUw
NmY2NDE0ZWI4NGUzYWY0NzI5NGYxOTI0ZTJkMThlNWY0ODY0ZGQuLjg3NmU3YTkzMjJjMTc4ZmE4
ZDI0MzM4ZmRhYjJmYzBlNDU1ZTFjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L01lbW9yeUNhY2hlLmNwcApAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5o
IgpAQCAtNTksNyArNjEsMTEgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBjRGVmYXVsdERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbCA9IDA7CiBNZW1vcnlDYWNoZSogbWVtb3J5Q2FjaGUoKQogewog
ICAgIHN0YXRpYyBNZW1vcnlDYWNoZSogc3RhdGljQ2FjaGUgPSBuZXcgTWVtb3J5Q2FjaGU7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQo
KSk7CisjZWxzZQogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyNlbmRpZgogCiAg
ICAgcmV0dXJuIHN0YXRpY0NhY2hlOwogfQpAQCAtOTYsNyArMTAyLDExIEBAIGJvb2wgTWVtb3J5
Q2FjaGU6OmFkZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiAgICAgaWYgKGRpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NFUlQo
V2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworI2Vsc2UKICAgICBBU1NFUlQoV1RGOjpp
c01haW5UaHJlYWQoKSk7CisjZW5kaWYKIAogI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CiAgICAgQ2FjaGVkUmVzb3VyY2VJdGVtKiBvcmlnaW5NYXAgPSBtX3Jlc291cmNlcy5nZXQocmVz
b3VyY2UtPnVybCgpKTsKQEAgLTE2MCw3ICsxNzAsMTEgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmV2
YWxpZGF0aW9uU3VjY2VlZGVkKENhY2hlZFJlc291cmNlKiByZXZhbGlkYXRpbmdSZXNvdXJjZSwg
Y28KIAogdm9pZCBNZW1vcnlDYWNoZTo6cmV2YWxpZGF0aW9uRmFpbGVkKENhY2hlZFJlc291cmNl
KiByZXZhbGlkYXRpbmdSZXNvdXJjZSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJU
KFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKyNlbHNlCiAgICAgQVNTRVJUKFdURjo6
aXNNYWluVGhyZWFkKCkpOworI2VuZGlmCiAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJldmFs
aWRhdGlvbiBmYWlsZWQgZm9yICVwIiwgcmV2YWxpZGF0aW5nUmVzb3VyY2UpOwogICAgIEFTU0VS
VChyZXZhbGlkYXRpbmdSZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKSk7CiAgICAgcmV2
YWxpZGF0aW5nUmVzb3VyY2UtPmNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKQEAgLTE3Myw3
ICsxODcsMTEgQEAgQ2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclVSTChj
b25zdCBVUkwmIHJlc291cmNlVVJMKQogCiBDYWNoZWRSZXNvdXJjZSogTWVtb3J5Q2FjaGU6OnJl
c291cmNlRm9yUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7
CisjZWxzZQogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyNlbmRpZgogICAgIFVS
TCB1cmwgPSByZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChyZXF1ZXN0LnVybCgpKTsK
ICNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIENhY2hlZFJlc291cmNlSXRlbSog
aXRlbSA9IG1fcmVzb3VyY2VzLmdldCh1cmwpOwpAQCAtMjEwLDE4ICsyMjgsNzMgQEAgdW5zaWdu
ZWQgTWVtb3J5Q2FjaGU6OmxpdmVDYXBhY2l0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY2FwYWNp
dHkgLSBkZWFkQ2FwYWNpdHkoKTsKIH0KIAotdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZlUmVz
b3VyY2VzKCkKKyNpZiBVU0UoQ0YpCisvLyBGSVhNRTogUmVtb3ZlIHRoZSBVU0UoQ0YpIG9uY2Ug
d2UgZWl0aGVyIG1ha2UgTmF0aXZlSW1hZ2VQdHIgYSBzbWFydCBwb2ludGVyIG9uIGFsbCBwbGF0
Zm9ybXMgb3IKKy8vIHJlbW92ZSB0aGUgdXNhZ2Ugb2YgQ0ZSZXRhaW4oKSBpbiBNZW1vcnlDYWNo
ZTo6YWRkSW1hZ2VUb0NhY2hlKCkgc28gYXMgdG8gbWFrZSB0aGUgY29kZSBwbGF0Zm9ybS1pbmRl
cGVuZGVudC4KK2Jvb2wgTWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZShOYXRpdmVJbWFnZVB0
ciBpbWFnZSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24pCit7
CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICByZW1vdmVJbWFnZUZyb21DYWNoZSh1cmwsIGNhY2hl
UGFydGl0aW9uKTsgLy8gUmVtb3ZlIGNhY2hlIGVudHJ5IGlmIGl0IGFscmVhZHkgZXhpc3RzLgor
CisgICAgUmVmUHRyPEJpdG1hcEltYWdlPiBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVh
dGUoaW1hZ2UsIG51bGxwdHIpOworICAgIGlmICghYml0bWFwSW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIENhY2hlZEltYWdlTWFudWFsKiBjYWNoZWRJbWFnZSA9IG5ldyBDYWNo
ZWRJbWFnZU1hbnVhbCh1cmwsIGJpdG1hcEltYWdlLmdldCgpKTsKKyAgICBpZiAoIWNhY2hlZElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBY3R1YWwgcmVsZWFzZSBvZiB0
aGUgQ0dJbWFnZVJlZiBpcyBkb25lIGluIEJpdG1hcEltYWdlLgorICAgIENGUmV0YWluKGltYWdl
KTsKKyAgICBjYWNoZWRJbWFnZS0+YWRkRmFrZUNsaWVudCgpOworICAgIGNhY2hlZEltYWdlLT5z
ZXREZWNvZGVkU2l6ZShiaXRtYXBJbWFnZS0+ZGVjb2RlZFNpemUoKSk7CisgICAgY2FjaGVkSW1h
Z2UtPnJlc291cmNlUmVxdWVzdCgpLnNldENhY2hlUGFydGl0aW9uKGNhY2hlUGFydGl0aW9uKTsK
KyAgICBhZGQoY2FjaGVkSW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lbW9y
eUNhY2hlOjpyZW1vdmVJbWFnZUZyb21DYWNoZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBjYWNoZVBhcnRpdGlvbikKK3sKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAg
IENhY2hlZFJlc291cmNlKiByZXNvdXJjZTsKKyAgICBpZiAoQ2FjaGVkUmVzb3VyY2VJdGVtKiBp
dGVtID0gbV9yZXNvdXJjZXMuZ2V0KHVybCkpCisgICAgICAgIHJlc291cmNlID0gaXRlbS0+Z2V0
KFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShjYWNoZVBhcnRpdGlvbikpOworICAgIGVs
c2UKKyAgICAgICAgcmVzb3VyY2UgPSBudWxscHRyOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
Y2FjaGVQYXJ0aXRpb24pOworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1fcmVzb3Vy
Y2VzLmdldCh1cmwpOworI2VuZGlmCisgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQSByZXNvdXJjZSBleGlzdHMgYW5kIGlzIG5vdCBhIG1hbnVhbGx5IGNhY2hl
ZCBpbWFnZSwgc28ganVzdCByZW1vdmUgaXQuCisgICAgaWYgKCFyZXNvdXJjZS0+aXNJbWFnZSgp
IHx8ICFzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJlc291cmNlKS0+aXNNYW51YWwoKSkgewor
ICAgICAgICBldmljdChyZXNvdXJjZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBSZW1vdmluZyB0aGUgbGFzdCBjbGllbnQgb2YgYSBDYWNoZWRJbWFnZSB0dXJucyB0aGUgcmVz
b3VyY2UKKyAgICAvLyBpbnRvIGEgZGVhZCByZXNvdXJjZSB3aGljaCB3aWxsIGV2ZW50dWFsbHkg
YmUgZXZpY3RlZCB3aGVuCisgICAgLy8gZGVhZCByZXNvdXJjZXMgYXJlIHBydW5lZC4gVGhhdCBt
aWdodCBiZSBpbW1lZGlhdGVseSBzaW5jZQorICAgIC8vIHJlbW92aW5nIHRoZSBsYXN0IGNsaWVu
dCB0cmlnZ2VycyBhIE1lbW9yeUNhY2hlOjpwcnVuZSwgc28gdGhlCisgICAgLy8gcmVzb3VyY2Ug
bWF5IGJlIGRlbGV0ZWQgYWZ0ZXIgdGhpcyBjYWxsLgorICAgIHN0YXRpY19jYXN0PENhY2hlZElt
YWdlTWFudWFsKj4ocmVzb3VyY2UpLT5yZW1vdmVGYWtlQ2xpZW50KCk7Cit9CisjZW5kaWYKKwor
dm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzKGJvb2wgc2hvdWxkRGVzdHJveURl
Y29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcykKIHsKICAgICBpZiAoIW1fcHJ1bmVFbmFibGVk
KQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IGxpdmVDYXBhY2l0
eSgpOworICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9y
QWxsTGl2ZVJlc291cmNlcyA/IDAgOiBsaXZlQ2FwYWNpdHkoKTsKICAgICBpZiAoY2FwYWNpdHkg
JiYgbV9saXZlU2l6ZSA8PSBjYXBhY2l0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWdu
ZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNUYXJnZXRQ
cnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGltbWVkaWF0
ZWx5IHBydW5pbmcgYWdhaW4uCiAKLSAgICBwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUodGFyZ2V0
U2l6ZSk7CisgICAgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHRhcmdldFNpemUsIHNob3VsZERl
c3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMpOwogfQogCiB2b2lkIE1lbW9yeUNh
Y2hlOjpwcnVuZUxpdmVSZXNvdXJjZXNUb1BlcmNlbnRhZ2UoZmxvYXQgcHJ1bmVQZXJjZW50YWdl
KQpAQCAtMjM4LDcgKzMxMSw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNl
c1RvUGVyY2VudGFnZShmbG9hdCBwcnVuZVBlcmNlbnRhZ2UpCiAgICAgcHJ1bmVMaXZlUmVzb3Vy
Y2VzVG9TaXplKHRhcmdldFNpemUpOwogfQogCi12b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVS
ZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSkKK3ZvaWQgTWVtb3J5Q2FjaGU6OnBy
dW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplLCBib29sIHNob3VsZERl
c3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMpCiB7CiAgICAgaWYgKG1faW5QcnVu
ZVJlc291cmNlcykKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzLDcgKzMzNiw3IEBAIHZvaWQgTWVt
b3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKQog
ICAgICAgICBpZiAoY3VycmVudC0+aXNMb2FkZWQoKSAmJiBjdXJyZW50LT5kZWNvZGVkU2l6ZSgp
KSB7CiAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJlbWFpbmluZyByZXNvdXJj
ZXMgYXJlIHRvbyBuZXcgdG8gcHJ1bmUuCiAgICAgICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWUg
PSBjdXJyZW50VGltZSAtIGN1cnJlbnQtPm1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOwotICAgICAg
ICAgICAgaWYgKGVsYXBzZWRUaW1lIDwgY01pbkRlbGF5QmVmb3JlTGl2ZURlY29kZWRQcnVuZSkK
KyAgICAgICAgICAgIGlmICghc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291
cmNlcyAmJiBlbGFwc2VkVGltZSA8IGNNaW5EZWxheUJlZm9yZUxpdmVEZWNvZGVkUHJ1bmUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBpZiAoY3VycmVudC0+ZGVjb2Rl
ZERhdGFJc1B1cmdlYWJsZSgpKSB7CkBAIC00NTksNyArNTMyLDExIEBAIGJvb2wgTWVtb3J5Q2Fj
aGU6Om1ha2VSZXNvdXJjZVB1cmdlYWJsZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiAKIHZv
aWQgTWVtb3J5Q2FjaGU6OmV2aWN0KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsK
KyNlbHNlCiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworI2VuZGlmCiAgICAgTE9H
KFJlc291cmNlTG9hZGluZywgIkV2aWN0aW5nIHJlc291cmNlICVwIGZvciAnJXMnIGZyb20gY2Fj
aGUiLCByZXNvdXJjZSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7
CiAgICAgLy8gVGhlIHJlc291cmNlIG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGJ5IHNv
bWVvbmUgb3RoZXIgdGhhbiBvdXIgY2FsbGVyLAogICAgIC8vIHdobyBuZWVkZWQgYSBmcmVzaCBj
b3B5IGZvciBhIHJlbG9hZC4gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjQ3OSNjNj4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
TWVtb3J5Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5o
CmluZGV4IDNmOGI2MTZiMTlmMmYwY2YyNmVkYTVjMDNlNmJhYmU1NGM2NjgwNGEuLjY1ZjkyZjky
MzBjNDk0NGQwNzA2OWFjYWRlNTUwYThmNjA1NjdjYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIENhY2hlX2gK
ICNkZWZpbmUgQ2FjaGVfaAogCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbkhhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0xODcsMTAgKzE4OCwyNyBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbGl2ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpdmVTaXplOyB9CiAgICAgdW5zaWdu
ZWQgZGVhZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2RlYWRTaXplOyB9CiAKKyNpZiBVU0UoQ0Yp
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgVVNFKENGKSBvbmNlIHdlIGVpdGhlciBtYWtlIE5h
dGl2ZUltYWdlUHRyIGEgc21hcnQgcG9pbnRlciBvbiBhbGwgcGxhdGZvcm1zIG9yCisgICAgLy8g
cmVtb3ZlIHRoZSB1c2FnZSBvZiBDRlJldGFpbigpIGluIE1lbW9yeUNhY2hlOjphZGRJbWFnZVRv
Q2FjaGUoKSBzbyBhcyB0byBtYWtlIHRoZSBjb2RlIHBsYXRmb3JtLWluZGVwZW5kZW50LgorICAg
IGJvb2wgYWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBVUkwmLCBjb25zdCBT
dHJpbmcmIGNhY2hlUGFydGl0aW9uKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlRnJvbUNhY2hlKGNv
bnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24pOworI2VuZGlmCisKKyAgICAv
LyBwcnVuZURlYWQqKCkgLSBGbHVzaCBkZWNvZGVkIGFuZCBlbmNvZGVkIGRhdGEgZnJvbSByZXNv
dXJjZXMgbm90IHJlZmVyZW5jZWQgYnkgV2ViIHBhZ2VzLgorICAgIC8vIHBydW5lTGl2ZSooKSAt
IEZsdXNoIGRlY29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBzdGlsbCByZWZlcmVuY2VkIGJ5IFdl
YiBwYWdlcy4KKyAgICB2b2lkIHBydW5lRGVhZFJlc291cmNlcygpOyAvLyBBdXRvbWF0aWNhbGx5
IGRlY2lkZSBob3cgbXVjaCB0byBwcnVuZS4KKyAgICB2b2lkIHBydW5lTGl2ZVJlc291cmNlcyhi
b29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgPSBmYWxzZSk7
CisKIHByaXZhdGU6CisgICAgdm9pZCBwcnVuZURlYWRSZXNvdXJjZXNUb1BlcmNlbnRhZ2UoZmxv
YXQgcHJ1bmVQZXJjZW50YWdlKTsgLy8gUHJ1bmUgdG8gJSBjdXJyZW50IHNpemUKKyAgICB2b2lk
IHBydW5lTGl2ZVJlc291cmNlc1RvUGVyY2VudGFnZShmbG9hdCBwcnVuZVBlcmNlbnRhZ2UpOwor
ICAgIHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUpOwor
ICAgIHZvaWQgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUsIGJv
b2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyA9IGZhbHNlKTsK
KwogICAgIE1lbW9yeUNhY2hlKCk7CiAgICAgfk1lbW9yeUNhY2hlKCk7IC8vIE5vdCBpbXBsZW1l
bnRlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxscyBkZWxldGUgLS0gV2Vi
Q29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xldG9ucy4KLSAgICAgICAKKwogICAgIExSVUxpc3Qq
IGxydUxpc3RGb3IoQ2FjaGVkUmVzb3VyY2UqKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBk
dW1wU3RhdHMoKTsKQEAgLTIwMCwxNSArMjE4LDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBs
aXZlQ2FwYWNpdHkoKSBjb25zdDsKICAgICB1bnNpZ25lZCBkZWFkQ2FwYWNpdHkoKSBjb25zdDsK
IAotICAgIC8vIHBydW5lRGVhZCooKSAtIEZsdXNoIGRlY29kZWQgYW5kIGVuY29kZWQgZGF0YSBm
cm9tIHJlc291cmNlcyBub3QgcmVmZXJlbmNlZCBieSBXZWIgcGFnZXMuCi0gICAgLy8gcHJ1bmVM
aXZlKigpIC0gRmx1c2ggZGVjb2RlZCBkYXRhIGZyb20gcmVzb3VyY2VzIHN0aWxsIHJlZmVyZW5j
ZWQgYnkgV2ViIHBhZ2VzLgotICAgIHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2VzKCk7IC8vIEF1dG9t
YXRpY2FsbHkgZGVjaWRlIGhvdyBtdWNoIHRvIHBydW5lLgotICAgIHZvaWQgcHJ1bmVMaXZlUmVz
b3VyY2VzKCk7Ci0gICAgdm9pZCBwcnVuZURlYWRSZXNvdXJjZXNUb1BlcmNlbnRhZ2UoZmxvYXQg
cHJ1bmVQZXJjZW50YWdlKTsgLy8gUHJ1bmUgdG8gJSBjdXJyZW50IHNpemUKLSAgICB2b2lkIHBy
dW5lTGl2ZVJlc291cmNlc1RvUGVyY2VudGFnZShmbG9hdCBwcnVuZVBlcmNlbnRhZ2UpOwotICAg
IHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUpOwotICAg
IHZvaWQgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUpOwotCiAg
ICAgYm9vbCBtYWtlUmVzb3VyY2VQdXJnZWFibGUoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICB2b2lk
IGV2aWN0KENhY2hlZFJlc291cmNlKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jZi9TdWJyZXNvdXJjZUxvYWRlckNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
Zi9TdWJyZXNvdXJjZUxvYWRlckNGLmNwcAppbmRleCAyOWZkOWYyZDliMWE4NTZmMGJiYWNhMjg3
NGI3ZGQ5Y2JlNGQ0Y2QxLi41NzY3NjA0YWVkNTM5ZWM5OWUxODBkNTk3ZGU5ZTk4N2NkM2VmODhi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2YvU3VicmVzb3VyY2VMb2FkZXJD
Ri5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NmL1N1YnJlc291cmNlTG9hZGVyQ0Yu
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Vi
cmVzb3VyY2VMb2FkZXIuaCIKIAorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiw4ICszMyw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0sp
CiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYg
ZGF0YUFycmF5KQogewotICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGluIHRoaXMgbWV0aG9k
IHNpbmNlIHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCi0gICAgLy8gYW55dGhpbmcg
aW5jbHVkaW5nIHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdDsgb25l
IGV4YW1wbGUgb2YgdGhpcyBpcyAzMjY2MjE2LgorICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0
IGluIHRoaXMgbWV0aG9kIHNpbmNlIHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvIGFu
eXRoaW5nIGluY2x1ZGluZworICAgIC8vIHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0
aGlzIG9iamVjdDsgb25lIGV4YW1wbGUgb2YgdGhpcyBpcyA8cmRhcjovL3Byb2JsZW0vMzI2NjIx
Nj4uCiAgICAgUmVmPFN1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIFJl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUFycmF5KGRhdGFBcnJheSk7CkBAIC00Niw4ICs0
NywxOSBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJy
YXlSZWYgZGF0YUFycmF5KQogICAgIGlmICghbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVudCkgewog
ICAgICAgICBDRkluZGV4IGFycmF5Q291bnQgPSBDRkFycmF5R2V0Q291bnQoZGF0YUFycmF5KTsK
ICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgYXJyYXlDb3VudDsgKytpKSAgewotICAg
ICAgICAgICAgQ0ZEYXRhUmVmIGRhdGEgPSByZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4oQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChkYXRhQXJyYXksIGkpKTsKLSAgICAgICAgICAgIHNlbmREYXRh
VG9SZXNvdXJjZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4oQ0ZEYXRhR2V0Qnl0ZVB0
cihkYXRhKSksIHN0YXRpY19jYXN0PGludD4oQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKSk7CisgICAg
ICAgICAgICAvLyBBIHByZXZpb3VzIGl0ZXJhdGlvbiBvZiB0aGlzIGxvb3AgbWlnaHQgaGF2ZSBy
ZXN1bHRlZCBpbiB0aGUgbG9hZAorICAgICAgICAgICAgLy8gYmVpbmcgY2FuY2VsbGVkLiBCYWls
IG91dCBpZiB3ZSBubyBsb25nZXIgaGF2ZSBhIGNhY2hlZCByZXNvdXJjZS4KKyAgICAgICAgICAg
IGlmICghbV9yZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBp
ZiAoUmVzb3VyY2VCdWZmZXIqIHJlc291cmNlRGF0YSA9IHRoaXMtPnJlc291cmNlRGF0YSgpKQor
ICAgICAgICAgICAgICAgIG1fcmVzb3VyY2UtPmFkZERhdGFCdWZmZXIocmVzb3VyY2VEYXRhKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIENGRGF0YVJlZiBjZkRhdGEgPSBy
ZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChkYXRhQXJy
YXksIGkpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyICo+KENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSk7CisgICAgICAgICAg
ICAgICAgQ0ZJbmRleCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8Q0ZJbmRleD46Om1h
eCgpKTsKKyAgICAgICAgICAgICAgICBtX3Jlc291cmNlLT5hZGREYXRhKGRhdGEsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsZW5ndGgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9tYWMvRG9jdW1lbnRMb2FkZXJN
YWMuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9Eb2N1bWVudExvYWRlck1hYy5jcHAK
aW5kZXggOTFkZGE2ZWY4Y2IyMjgwMjlmZDM0Mjc1ZTM5YmE0ZDIxZjUyZWY4Ni4uOTVhZjc5MDY3
NDJkODdkZGM2MGVkZmVlOWIzMTY3MWQwODEzZjk2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL21hYy9Eb2N1bWVudExvYWRlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL21hYy9Eb2N1bWVudExvYWRlck1hYy5jcHAKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL1NjaGVkdWxlUGFpci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIHZvaWQg
c2NoZWR1bGVBbGwoY29uc3QgUmVzb3VyY2VMb2FkZXJTZXQmIGxvYWRlcnMsIFNjaGVkdWxlUGFp
ciogcGFpcikKIHsKICAgICBjb25zdCBSZXNvdXJjZUxvYWRlclNldCBjb3B5ID0gbG9hZGVyczsK
QEAgLTUwLDIzICs1MiwzMiBAQCBzdGF0aWMgdm9pZCB1bnNjaGVkdWxlQWxsKGNvbnN0IFJlc291
cmNlTG9hZGVyU2V0JiBsb2FkZXJzLCBTY2hlZHVsZVBhaXIqIHBhaXIpCiAgICAgICAgIGlmIChS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gKCppdCktPmhhbmRsZSgpKQogICAgICAgICAgICAgaGFu
ZGxlLT51bnNjaGVkdWxlKHBhaXIpOwogfQorI2VuZGlmCiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6
OnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IGlmIChtYWluUmVzb3VyY2VMb2FkZXIoKSAmJiBtYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxl
KCkpCiAgICAgICAgIG1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUoKS0+c2NoZWR1bGUocGFp
cik7CiAgICAgc2NoZWR1bGVBbGwobV9zdWJyZXNvdXJjZUxvYWRlcnMsIHBhaXIpOwogICAgIHNj
aGVkdWxlQWxsKG1fcGx1Z0luU3RyZWFtTG9hZGVycywgcGFpcik7CiAgICAgc2NoZWR1bGVBbGwo
bV9tdWx0aXBhcnRTdWJyZXNvdXJjZUxvYWRlcnMsIHBhaXIpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocGFpcik7CisjZW5kaWYKIH0KIAogdm9pZCBEb2N1bWVudExvYWRlcjo6dW5zY2hlZHVs
ZShTY2hlZHVsZVBhaXIqIHBhaXIpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobWFp
blJlc291cmNlTG9hZGVyKCkgJiYgbWFpblJlc291cmNlTG9hZGVyKCktPmhhbmRsZSgpKQogICAg
ICAgICBtYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCktPnVuc2NoZWR1bGUocGFpcik7CiAg
ICAgdW5zY2hlZHVsZUFsbChtX3N1YnJlc291cmNlTG9hZGVycywgcGFpcik7CiAgICAgdW5zY2hl
ZHVsZUFsbChtX3BsdWdJblN0cmVhbUxvYWRlcnMsIHBhaXIpOwogICAgIHVuc2NoZWR1bGVBbGwo
bV9tdWx0aXBhcnRTdWJyZXNvdXJjZUxvYWRlcnMsIHBhaXIpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocGFpcik7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IGY5NjIzZWMwMDZiN2Fj
MTNiZjc4MDViMTM2ZWMzMjExODliODhlMjguLmUzN2Y3OTU2NjQwMGQ4ZGYyYTQzMTJjYWFhMjY2
YjEyOGFiMjA5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMTI1LDYgKzEyNSw4IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIGN1cnJl
bnRGcmFtZVNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SG90U3BvdChJbnRQb2lu
dCYpIGNvbnN0IE9WRVJSSURFOwogCisgICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7
IHJldHVybiBtX2RlY29kZWRTaXplOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQo
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVu
YW1lRXh0ZW5zaW9uKCkgY29uc3QgT1ZFUlJJREU7CiAK
</data>
<flag name="review"
          id="243108"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>