<?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>110798</bug_id>
          
          <creation_ts>2013-02-25 14:14:22 -0800</creation_ts>
          <short_desc>Factor SourceBuffer methods out of MediaSourcePrivate &amp; WebMediaSource into SourceBufferPrivate &amp; WebSourceBuffer respectively.</short_desc>
          <delta_ts>2013-02-28 11:02:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>110371</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Aaron Colwell">acolwell</reporter>
          <assigned_to name="Aaron Colwell">acolwell</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841272</commentid>
    <comment_count>0</comment_count>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-25 14:14:22 -0800</bug_when>
    <thetext>SourceBuffer functionality is currently routed through the MediaSourcePrivate &amp; WebMediaSource interfaces. This functionality should be moved out into new SourceBufferPrivate and WebSourceBuffer interfaces so that it is easier to add SourceBuffer functionality without having to modify the MediaSource classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841288</commentid>
    <comment_count>1</comment_count>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-25 14:32:12 -0800</bug_when>
    <thetext>abarth@ please take a look at this patch. It is the SourceBuffer changes that you asked me to place in a seperate patch when you were reviewing Bug 109857.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841289</commentid>
    <comment_count>2</comment_count>
      <attachid>190128</attachid>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-25 14:33:27 -0800</bug_when>
    <thetext>Created attachment 190128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841786</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 01:39:00 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842335</commentid>
    <comment_count>4</comment_count>
      <attachid>190128</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-26 13:52:59 -0800</bug_when>
    <thetext>Comment on attachment 190128
Patch

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

I don&apos;t feel 100% confident in reviewing this patch, but it seems correct.  Should we get someone who knows the media code well to take a look as well?

&gt; Source/WebKit/chromium/src/SourceBufferPrivateImpl.cpp:42
&gt; +SourceBufferPrivateImpl::SourceBufferPrivateImpl(WTF::PassOwnPtr&lt;WebSourceBuffer&gt; sourceBuffer)

WTF::  &lt;-- No need for this prefix.

&gt; Source/WebKit/chromium/src/SourceBufferPrivateImpl.h:44
&gt; +    explicit SourceBufferPrivateImpl(WTF::PassOwnPtr&lt;WebSourceBuffer&gt;);

ditto

&gt; Source/WebKit/chromium/src/SourceBufferPrivateImpl.h:55
&gt; +    WTF::OwnPtr&lt;WebSourceBuffer&gt; m_sourceBuffer;

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842354</commentid>
    <comment_count>5</comment_count>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-26 14:01:40 -0800</bug_when>
    <thetext>Thanks for the review abarth@.

jer.noble@ or eric.carlson@ could one of you take a peek at this for me please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842366</commentid>
    <comment_count>6</comment_count>
      <attachid>190128</attachid>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-26 14:21:37 -0800</bug_when>
    <thetext>Comment on attachment 190128
Patch

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

&gt;&gt; Source/WebKit/chromium/src/SourceBufferPrivateImpl.cpp:42
&gt;&gt; +SourceBufferPrivateImpl::SourceBufferPrivateImpl(WTF::PassOwnPtr&lt;WebSourceBuffer&gt; sourceBuffer)
&gt; 
&gt; WTF::  &lt;-- No need for this prefix.

done.

&gt;&gt; Source/WebKit/chromium/src/SourceBufferPrivateImpl.h:44
&gt;&gt; +    explicit SourceBufferPrivateImpl(WTF::PassOwnPtr&lt;WebSourceBuffer&gt;);
&gt; 
&gt; ditto

done.

&gt;&gt; Source/WebKit/chromium/src/SourceBufferPrivateImpl.h:55
&gt;&gt; +    WTF::OwnPtr&lt;WebSourceBuffer&gt; m_sourceBuffer;
&gt; 
&gt; ditto

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842369</commentid>
    <comment_count>7</comment_count>
      <attachid>190361</attachid>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-26 14:28:26 -0800</bug_when>
    <thetext>Created attachment 190361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843200</commentid>
    <comment_count>8</comment_count>
      <attachid>190361</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-02-27 10:05:38 -0800</bug_when>
    <thetext>Comment on attachment 190361
Patch

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

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:64
&gt; -    if (!m_source) {
&gt; +    if (isClosed()) {
&gt;          ec = INVALID_STATE_ERR;
&gt;          return 0;
&gt;      }

This is incorrect, as far as  the spec goes.  This shouldn&apos;t return an error if the MediaSource is closed, but only if the buffer has been removed from the media element.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:88
&gt; -    if (!m_source) {
&gt; +    if (isClosed()) {
&gt;          ec = INVALID_STATE_ERR;
&gt;          return;
&gt;      }
&gt;  
&gt; -    if (m_source-&gt;setTimestampOffset(id(), offset, ec))
&gt; -        m_timestampOffset = offset;
&gt; +    if (m_source-&gt;readyState() == MediaSource::endedKeyword())
&gt; +        m_source-&gt;setReadyState(MediaSource::openKeyword());
&gt; +
&gt; +    if (!m_private-&gt;setTimestampOffset(offset)) {
&gt; +        ec = INVALID_STATE_ERR;
&gt; +        return;
&gt; +    }
&gt; +    m_timestampOffset = offset;

As someone who is not very familiar with the MediaSource extensions spec, this is all somewhat confusing.  But looking at the current spec for SourceBuffer &lt;https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebuffer&gt;, it appears you&apos;re not checking the &quot;updating&quot; attribute here.  If that is checked elsewhere, it would be helpful to note that here.

What I&apos;ve done in other specced areas of the code is to include the text of the spec as comments. I know the WebKit community is generally anti-comment, but I believe it would help here.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:98
&gt; +    if (!data.get()) {

The .get() should be unnecessary here.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:109
&gt; +    if (m_source-&gt;readyState() == MediaSource::endedKeyword())
&gt; +        m_source-&gt;setReadyState(MediaSource::openKeyword());
&gt; +
&gt; +    if (!m_private-&gt;append(data-&gt;data(), data-&gt;length())) {
&gt; +        ec = SYNTAX_ERR;
&gt; +        return;
&gt; +    }

Again, you don&apos;t seem to be checking the &quot;updating&quot; attribute.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:114
&gt; +    if (!m_private || !m_source || m_source-&gt;readyState() != MediaSource::openKeyword()) {

m_private should never be NULL, due to the ASSERT in MediaSource::addSourceBuffer(). You may want to add an ASSERT in the constructor to guarantee this. This would require not clearing m_private in clear().

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:124
&gt; +    if (m_private)

Ditto.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:125
&gt; +        m_private-&gt;removedFromMediaSource();

Why is this not named m_private-&gt;clear()?  Or contrariwise, why isn&apos;t the name of this method SourceBuffer::removedFromMediaSource()?

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:127
&gt; +    m_private.clear();

Why clear your private pointer here? Is it expected that the private implementation is holding onto resources?

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:132
&gt; +bool SourceBuffer::isClosed() const
&gt; +{
&gt; +    return !m_private || !m_source || m_source-&gt;readyState() == MediaSource::closedKeyword();

Again, if you don&apos;t clear your m_private, you don&apos;t need to check it here.  The !m_source check would be sufficient.

I also think you&apos;re conflating the &quot;closed&quot; state and the &quot;removed from source&quot; state.  The spec seems to make a distinction, and it may be worthwhile to add a &quot;isRemoved()&quot; method that simply checks &quot;!m_source&quot;.

If you do want to keep the concept of clearing the private implementation, you should provide inline wrappers for the various states you&apos;re checking (isClosed(), isRemoved(), isOpen()) so as to avoid repeating &quot;!m_private || !m_source ||...&quot; everywhere.

&gt; Source/WebCore/platform/graphics/MediaSourcePrivate.h:35
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Since you seem to be only passing around the String&amp; type, and forward declaration of String would suffice here. You may need to rename all the String&amp; references to WTF::String&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843511</commentid>
    <comment_count>9</comment_count>
      <attachid>190361</attachid>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-27 14:34:45 -0800</bug_when>
    <thetext>Comment on attachment 190361
Patch

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

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:64
&gt;&gt;      }
&gt; 
&gt; This is incorrect, as far as  the spec goes.  This shouldn&apos;t return an error if the MediaSource is closed, but only if the buffer has been removed from the media element.

Changed to isRemoved() to be more consistent w/ the spec text. This code was simply relying on the !m_source test in isClosed(). I also just realized that isRemoved() check overrides the &quot;closed&quot; checks in other parts of the spec so I&apos;ll be removing those from the spec.

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:88
&gt;&gt; +    m_timestampOffset = offset;
&gt; 
&gt; As someone who is not very familiar with the MediaSource extensions spec, this is all somewhat confusing.  But looking at the current spec for SourceBuffer &lt;https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebuffer&gt;, it appears you&apos;re not checking the &quot;updating&quot; attribute here.  If that is checked elsewhere, it would be helpful to note that here.
&gt; 
&gt; What I&apos;ve done in other specced areas of the code is to include the text of the spec as comments. I know the WebKit community is generally anti-comment, but I believe it would help here.

The current WebKit implementation doesn&apos;t support the updating attribute yet. The updating attribute and async append &amp; remove operations are relatively new additions to the spec. WebKit essentially implements the October 1st version of the spec  (https://dvcs.w3.org/hg/html-media/raw-file/7bab66368f2c/media-source/media-source.html) right now which doesn&apos;t have updating.

This refactor is part of the process to update the implementation to the current spec. The addition of updating &amp; related logic will be added in a followup patch soon.

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:98
&gt;&gt; +    if (!data.get()) {
&gt; 
&gt; The .get() should be unnecessary here.

Done

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:109
&gt;&gt; +    }
&gt; 
&gt; Again, you don&apos;t seem to be checking the &quot;updating&quot; attribute.

Updating is not implement yet. It will be added in a followup patch.

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:114
&gt;&gt; +    if (!m_private || !m_source || m_source-&gt;readyState() != MediaSource::openKeyword()) {
&gt; 
&gt; m_private should never be NULL, due to the ASSERT in MediaSource::addSourceBuffer(). You may want to add an ASSERT in the constructor to guarantee this. This would require not clearing m_private in clear().

Done

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:124
&gt;&gt; +    if (m_private)
&gt; 
&gt; Ditto.

Done

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:127
&gt;&gt; +    m_private.clear();
&gt; 
&gt; Why clear your private pointer here? Is it expected that the private implementation is holding onto resources?

That was the initial thinking. The private implementation likely has a handle to all the media data in the SourceBuffer. This could be purged on the removedFromMediaSource() call though so I&apos;ll just remove this clear() call.

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:132
&gt;&gt; +    return !m_private || !m_source || m_source-&gt;readyState() == MediaSource::closedKeyword();
&gt; 
&gt; Again, if you don&apos;t clear your m_private, you don&apos;t need to check it here.  The !m_source check would be sufficient.
&gt; 
&gt; I also think you&apos;re conflating the &quot;closed&quot; state and the &quot;removed from source&quot; state.  The spec seems to make a distinction, and it may be worthwhile to add a &quot;isRemoved()&quot; method that simply checks &quot;!m_source&quot;.
&gt; 
&gt; If you do want to keep the concept of clearing the private implementation, you should provide inline wrappers for the various states you&apos;re checking (isClosed(), isRemoved(), isOpen()) so as to avoid repeating &quot;!m_private || !m_source ||...&quot; everywhere.

You are right. I&apos;ve added isRemoved() and noticed that most of the &quot;closed&quot; checks in the SourceBuffer algorithms actually are redundant because isRemoved() should always be true if the source is &quot;closed&quot; because all SourceBuffers are removed when the source transtions to &quot;closed&quot;. I&apos;ll be removing these &quot;closed&quot; checks in the next spec update.

&gt;&gt; Source/WebCore/platform/graphics/MediaSourcePrivate.h:35
&gt;&gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Since you seem to be only passing around the String&amp; type, and forward declaration of String would suffice here. You may need to rename all the String&amp; references to WTF::String&amp;.

I&apos;d prefer not specifying WTF::String since similar interfaces in MediaPlayerPrivate.h don&apos;t do this. I tried using #include&lt;wtf/Forward.h&gt; like MediaPlayerPrivate.h does, but this also required that I #include &lt;wtf/Vector.h&gt; as well to make the compiler happy. It isn&apos;t clear if this was better than just including &lt;wtf/text/WTFString.h&gt; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843522</commentid>
    <comment_count>10</comment_count>
      <attachid>190606</attachid>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-27 14:43:20 -0800</bug_when>
    <thetext>Created attachment 190606
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844123</commentid>
    <comment_count>11</comment_count>
      <attachid>190606</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-02-28 08:34:53 -0800</bug_when>
    <thetext>Comment on attachment 190606
Patch

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

This is much better.  I really appreciate the link to the specific version of the spec matching the implementation. Just one nit:

&gt; Source/WebCore/platform/graphics/MediaSourcePrivate.h:36
&gt; +#include &lt;wtf/Forward.h&gt;
&gt; +#include &lt;wtf/Vector.h&gt;

Nit: it shouldn&apos;t be necessary to include &lt;wtf/Vector.h&gt; here as you&apos;re only using a const Vector&lt;String&gt;&amp; in the header. I believe you might be getting the compile error below...:

&gt; Source/WebCore/platform/graphics/MediaSourcePrivate.h:48
&gt; +    virtual AddStatus addSourceBuffer(const String&amp; type, const Vector&lt;String&gt;&amp; codecs, OwnPtr&lt;SourceBufferPrivate&gt;*) = 0;

...because Forward.h doesn&apos;t define the default value for the second template parameter for Vector.  Change this to a &quot;const Vector&lt;String, 0&gt;&amp;&quot;, and I think that will fix the compile error when you remove the #include &lt;wtf/Vector.h&gt;.

That said, this is just a nit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844188</commentid>
    <comment_count>12</comment_count>
      <attachid>190750</attachid>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-28 10:21:40 -0800</bug_when>
    <thetext>Created attachment 190750
Fix remaining nit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844193</commentid>
    <comment_count>13</comment_count>
      <attachid>190606</attachid>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2013-02-28 10:24:44 -0800</bug_when>
    <thetext>Comment on attachment 190606
Patch

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

Thanks Jer for the quick an thorough review. :)

&gt;&gt; Source/WebCore/platform/graphics/MediaSourcePrivate.h:48
&gt;&gt; +    virtual AddStatus addSourceBuffer(const String&amp; type, const Vector&lt;String&gt;&amp; codecs, OwnPtr&lt;SourceBufferPrivate&gt;*) = 0;
&gt; 
&gt; ...because Forward.h doesn&apos;t define the default value for the second template parameter for Vector.  Change this to a &quot;const Vector&lt;String, 0&gt;&amp;&quot;, and I think that will fix the compile error when you remove the #include &lt;wtf/Vector.h&gt;.
&gt; 
&gt; That said, this is just a nit.

Fixed. I removed the #include&lt;wtf/Vector.h&gt; and added a CodecsArray typedef similar to what I&apos;ve seen in other files so that I don&apos;t have to copy the default parameter everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844233</commentid>
    <comment_count>14</comment_count>
      <attachid>190750</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-28 11:02:50 -0800</bug_when>
    <thetext>Comment on attachment 190750
Fix remaining nit.

Clearing flags on attachment: 190750

Committed r144328: &lt;http://trac.webkit.org/changeset/144328&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844234</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-28 11:02:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190128</attachid>
            <date>2013-02-25 14:33:27 -0800</date>
            <delta_ts>2013-02-26 14:28:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110798-20130225142942.patch</filename>
            <type>text/plain</type>
            <size>50411</size>
            <attacher name="Aaron Colwell">acolwell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmFkNjQ2ZWI4ODU1MTgy
ZTY3ZDliMGU2ZDY5NTg0OGJlYzJkY2Y4NC4uNTYyMDE3M2Y5MDc0YmU4NWI2ZDJiM2U5ZGEyMjJi
NzkwMjZlNmY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTAyLTI1ICBBYXJv
biBDb2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZhY3RvciBTb3Vy
Y2VCdWZmZXIgbWV0aG9kcyBvdXQgb2YgTWVkaWFTb3VyY2VQcml2YXRlICYgV2ViTWVkaWFTb3Vy
Y2UgCisgICAgICAgIGludG8gU291cmNlQnVmZmVyUHJpdmF0ZSAmIFdlYlNvdXJjZUJ1ZmZlciBy
ZXNwZWN0aXZlbHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTA3OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIE5vIHVzZXIgdmlzaWJsZSBiZWhhdmlvciBoYXMgY2hhbmdlZC4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc291cmNlL01lZGlhU291cmNlLmg6CisgICAgICAgIChNZWRpYVNvdXJjZSk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
cjo6c2V0VGltZXN0YW1wT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6
YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YWJvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXI6OmlzQ2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTb3VyY2VCdWZmZXIpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJMaXN0OjpTb3VyY2VCdWZmZXJMaXN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaDoKKyAgICAgICAgKFNv
dXJjZUJ1ZmZlckxpc3QpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2
YXRlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNvdXJjZUJ1ZmZlclByaXZhdGUp
OiBDb250YWlucyBtZXRob2RzIGV4dHJhY3RlZCBmcm9tIE1lZGlhUGxheWVyUHJpdmF0ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6OlNvdXJjZUJ1ZmZlclByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZTo6flNvdXJjZUJ1ZmZlclBy
aXZhdGUpOgorCiAyMDEzLTAyLTI1ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbVjhdIEdlbmVyYXRlIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgbWV0aG9k
IGNhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1NTIxZGE5NzIyMDcyM2Yx
YThkMTZkMzdmOTRhODdhNTk4YzFiNDYzLi41MGFhZTcwZGZjYTU2YTVkMjZlNWExM2ViNDAwNDlk
OGIyZGIwZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisy
MDEzLTAyLTI1ICBBYXJvbiBDb2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIEZhY3RvciBTb3VyY2VCdWZmZXIgbWV0aG9kcyBvdXQgb2YgTWVkaWFTb3VyY2VQcml2YXRl
ICYgV2ViTWVkaWFTb3VyY2UKKyAgICAgICAgaW50byBTb3VyY2VCdWZmZXJQcml2YXRlICYgV2Vi
U291cmNlQnVmZmVyIHJlc3BlY3RpdmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViTWVk
aWFTb3VyY2VDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJNZWRpYVNv
dXJjZUNsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYlNvdXJjZUJ1ZmZlci5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNvdXJjZUJ1ZmZlcik6IENvbnRhaW5zIFNvdXJjZUJ1
ZmZlciBtZXRob2RzIGV4dHJhY3RlZCBmcm9tIFdlYk1lZGlhU291cmNlLgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb3VyY2VCdWZmZXI6On5XZWJTb3VyY2VCdWZmZXIpOgorICAgICAgICAqIHNyYy9B
c3NlcnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBzcmMvTWVkaWFTb3VyY2VQcml2YXRl
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNvdXJj
ZVByaXZhdGVJbXBsOjpNZWRpYVNvdXJjZVByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
TWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6TWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpN
ZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok1l
ZGlhU291cmNlUHJpdmF0ZUltcGw6OmVuZE9mU3RyZWFtKToKKyAgICAgICAgKiBzcmMvTWVkaWFT
b3VyY2VQcml2YXRlSW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKE1lZGlhU291
cmNlUHJpdmF0ZUltcGwpOiBBZGFwdHMgTWVkaWFTb3VyY2VQcml2YXRlIGludGVyZmFjZSB0byBX
ZWJNZWRpYVNvdXJjZUNsaWVudC4KKyAgICAgICAgKFdlYktpdDo6TWVkaWFTb3VyY2VQcml2YXRl
SW1wbDo6fk1lZGlhU291cmNlUHJpdmF0ZUltcGwpOgorICAgICAgICAqIHNyYy9Tb3VyY2VCdWZm
ZXJQcml2YXRlSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpT
b3VyY2VCdWZmZXJQcml2YXRlSW1wbDo6U291cmNlQnVmZmVyUHJpdmF0ZUltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlSW1wbDo6YnVmZmVyZWQpOgorICAgICAgICAo
V2ViS2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlSW1wbDo6YXBwZW5kKToKKyAgICAgICAgKFdlYktp
dDo6U291cmNlQnVmZmVyUHJpdmF0ZUltcGw6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6U291
cmNlQnVmZmVyUHJpdmF0ZUltcGw6OnNldFRpbWVzdGFtcE9mZnNldCk6CisgICAgICAgIChXZWJL
aXQ6OlNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKToKKyAg
ICAgICAgKiBzcmMvU291cmNlQnVmZmVyUHJpdmF0ZUltcGwuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChTb3VyY2VCdWZmZXJQcml2YXRlSW1wbCk6IEFkYXB0cyBTb3VyY2VCdWZmZXJQ
cml2YXRlIGludGVyZmFjZSB0byBXZWJTb3VyY2VCdWZmZXIuCisgICAgICAgIChXZWJLaXQ6OlNv
dXJjZUJ1ZmZlclByaXZhdGVJbXBsOjp+U291cmNlQnVmZmVyUHJpdmF0ZUltcGwpOgorICAgICAg
ICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViTWVkaWFT
b3VyY2VDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTb3VyY2VC
dWZmZXJJbXBsKTogVGVtcG9yYXJ5IGltcGxlbWVudGF0aW9uIG9mIFdlYlNvdXJjZUJ1ZmZlciB0
byBrZWVwIHRoaW5ncyB3b3JraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW50
aWwgdGhlIENocm9taXVtIHNpZGUgY2hhbmdlcyBsYW5kLgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZWRpYVNvdXJjZUNsaWVudEltcGw6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjplbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNvdXJjZUJ1ZmZlckltcGw6OldlYlNvdXJjZUJ1ZmZlckltcGwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb3VyY2VCdWZmZXJJbXBsOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNvdXJjZUJ1ZmZlckltcGw6OmFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvdXJjZUJ1
ZmZlckltcGw6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU291cmNlQnVmZmVySW1wbDo6
c2V0VGltZXN0YW1wT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU291cmNlQnVmZmVySW1w
bDo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6CisgICAgICAgICogc3JjL1dlYk1lZGlhU291cmNl
SW1wbC5jcHA6CisKIDIwMTMtMDItMjUgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBHSUZJbWFnZVJlYWRlciB0byByZWFkIGZyb20gc291cmNlIGRhdGEgZGlyZWN0
bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJj
ZS5jcHAKaW5kZXggZTZiZmUyNDJhZDJkMzI0NjczMWE3MDY0ODBhOGQ2YjEwZWM1YmQ3Yy4uODBj
ZjZjMTM5OGJhODM4MjZmNGFjODQxYzY0MGM2NmU1ZTQ3YTcwNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTM1LDYgKzM1
LDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNp
bmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgog
I2luY2x1ZGUgPHd0Zi9VaW50OEFycmF5Lmg+CiAKQEAgLTEzMSwyMSArMTMyLDE4IEBAIFNvdXJj
ZUJ1ZmZlciogTWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUs
IEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgfQogCiAgICAgLy8gNS4gQ3JlYXRlIGEgbmV3IFNvdXJj
ZUJ1ZmZlciBvYmplY3QgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgotICAgIFN0cmluZyBpZCA9
IG1fc291cmNlQnVmZmVycy0+Z2VuZXJhdGVVbmlxdWVJZCgpOwotICAgIGlmIChpZCA9PSBlbXB0
eVN0cmluZygpKSB7Ci0gICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9CisgICAgT3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJjZUJ1
ZmZlclByaXZhdGU7CisgICAgc3dpdGNoIChtX3ByaXZhdGUtPmFkZFNvdXJjZUJ1ZmZlcihjb250
ZW50VHlwZS50eXBlKCksIGNvZGVjcywgJnNvdXJjZUJ1ZmZlclByaXZhdGUpKSB7CisgICAgY2Fz
ZSBNZWRpYVNvdXJjZVByaXZhdGU6Ok9rOiB7CisgICAgICAgIEFTU0VSVChzb3VyY2VCdWZmZXJQ
cml2YXRlKTsKKyAgICAgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gYnVmZmVyID0gU291cmNlQnVm
ZmVyOjpjcmVhdGUoc291cmNlQnVmZmVyUHJpdmF0ZS5yZWxlYXNlKCksIHRoaXMpOwogCi0gICAg
UmVmUHRyPFNvdXJjZUJ1ZmZlcj4gYnVmZmVyID0gU291cmNlQnVmZmVyOjpjcmVhdGUoaWQsIHRo
aXMpOwotCi0gICAgc3dpdGNoIChtX3ByaXZhdGUtPmFkZElkKGJ1ZmZlci0+aWQoKSwgY29udGVu
dFR5cGUudHlwZSgpLCBjb2RlY3MpKSB7Ci0gICAgY2FzZSBNZWRpYVNvdXJjZVByaXZhdGU6Ok9r
OgogICAgICAgICAvLyA2LiBBZGQgdGhlIG5ldyBvYmplY3QgdG8gc291cmNlQnVmZmVycyBhbmQg
ZmlyZSBhIGFkZHNvdXJjZWJ1ZmZlciBvbiB0aGF0IG9iamVjdC4KICAgICAgICAgbV9zb3VyY2VC
dWZmZXJzLT5hZGQoYnVmZmVyKTsKICAgICAgICAgbV9hY3RpdmVTb3VyY2VCdWZmZXJzLT5hZGQo
YnVmZmVyKTsKICAgICAgICAgLy8gNy4gUmV0dXJuIHRoZSBuZXcgb2JqZWN0IHRvIHRoZSBjYWxs
ZXIuCiAgICAgICAgIHJldHVybiBidWZmZXIuZ2V0KCk7CisgICAgfQogICAgIGNhc2UgTWVkaWFT
b3VyY2VQcml2YXRlOjpOb3RTdXBwb3J0ZWQ6CiAgICAgICAgIC8vIDIgKGNvbnQpLiBJZiB0eXBl
IGNvbnRhaW5zIGEgTUlNRSB0eXBlIC4uLiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCB0aGUg
dHlwZXMgCiAgICAgICAgIC8vIHNwZWNpZmllZCBmb3IgdGhlIG90aGVyIFNvdXJjZUJ1ZmZlciBv
YmplY3RzIGluIHNvdXJjZUJ1ZmZlcnMsIHRoZW4gdGhyb3cKQEAgLTE5MSw3ICsxODksNiBAQCB2
b2lkIE1lZGlhU291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNlQnVmZmVyKiBidWZmZXIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgLy8gNy4gRGVzdHJveSBhbGwgcmVzb3VyY2VzIGZv
ciBzb3VyY2VCdWZmZXIuCiAgICAgbV9hY3RpdmVTb3VyY2VCdWZmZXJzLT5yZW1vdmUoYnVmZmVy
KTsKLSAgICBtX3ByaXZhdGUtPnJlbW92ZUlkKGJ1ZmZlci0+aWQoKSk7CiAKICAgICAvLyA0LiBS
ZW1vdmUgdHJhY2sgaW5mb3JtYXRpb24gZnJvbSBhdWRpb1RyYWNrcywgdmlkZW9UcmFja3MsIGFu
ZCB0ZXh0VHJhY2tzIGZvciBhbGwgdHJhY2tzIAogICAgIC8vIGFzc29jaWF0ZWQgd2l0aCBzb3Vy
Y2VCdWZmZXIgYW5kIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgY2hhbmdlIG9uIHRoZSBtb2Rp
ZmllZCBsaXN0cy4KQEAgLTI2Myw2MiArMjYwLDYgQEAgdm9pZCBNZWRpYVNvdXJjZTo6ZW5kT2ZT
dHJlYW0oY29uc3QgU3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbV9wcml2
YXRlLT5lbmRPZlN0cmVhbShlb3NTdGF0dXMpOwogfQogCi1QYXNzUmVmUHRyPFRpbWVSYW5nZXM+
IE1lZGlhU291cmNlOjpidWZmZXJlZChjb25zdCBTdHJpbmcmIGlkLCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSB8fCBtX3JlYWR5U3RhdGUgPT0gY2xvc2Vk
S2V5d29yZCgpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBtX3ByaXZhdGUtPmJ1ZmZlcmVkKGlkKTsKLX0K
LQotdm9pZCBNZWRpYVNvdXJjZTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8
VWludDhBcnJheT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFkYXRhLmdl
dCgpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFtX3ByaXZhdGUgfHwgbV9yZWFkeVN0YXRlID09IGNsb3NlZEtl
eXdvcmQoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBlbmRlZEtleXdvcmQoKSkKLSAg
ICAgICAgc2V0UmVhZHlTdGF0ZShvcGVuS2V5d29yZCgpKTsKLQotICAgIGlmICghbV9wcml2YXRl
LT5hcHBlbmQoaWQsIGRhdGEtPmRhdGEoKSwgZGF0YS0+bGVuZ3RoKCkpKSB7Ci0gICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVNv
dXJjZTo6YWJvcnQoY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKCFtX3ByaXZhdGUgfHwgbV9yZWFkeVN0YXRlICE9IG9wZW5LZXl3b3JkKCkpIHsKLSAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghbV9wcml2YXRlLT5hYm9ydChpZCkpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi1ib29sIE1lZGlhU291cmNlOjpzZXRUaW1lc3RhbXBPZmZzZXQoY29uc3QgU3RyaW5n
JiBpZCwgZG91YmxlIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFtX3By
aXZhdGUgfHwgbV9yZWFkeVN0YXRlID09IGNsb3NlZEtleXdvcmQoKSkgewotICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKCFtX3ByaXZhdGUtPnNldFRpbWVzdGFtcE9mZnNldChpZCwgb2Zmc2V0KSkgewotICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIE1lZGlhU291cmNlOjpzZXRQcml2YXRlQW5kT3Bl
bihQYXNzT3duUHRyPE1lZGlhU291cmNlUHJpdmF0ZT4gbWVkaWFTb3VyY2VQcml2YXRlKQogewog
ICAgIEFTU0VSVChtZWRpYVNvdXJjZVByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oCmluZGV4IDk1MzU4ZDdjYjlkMTdjNDZhYjBh
OTRlZjc1MmI3YjVjZjFkNzMyZTcuLjI2MDkwYWEzZGJiYzJmYWQ0ZTBkZTY4ZjA0NDI4ZmYyN2E0
OWZkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmgKQEAgLTY3LDExICs2Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UHJpdmF0
ZUFuZE9wZW4oUGFzc093blB0cjxNZWRpYVNvdXJjZVByaXZhdGU+KTsKIAotICAgIFBhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQ29kZSYp
IGNvbnN0OwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8VWlu
dDhBcnJheT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWJvcnQoY29uc3QgU3Ry
aW5nJiBpZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgc2V0VGltZXN0YW1wT2Zmc2V0KGNv
bnN0IFN0cmluZyYgaWQsIGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYpOwotCiAgICAgLy8gRXZlbnRU
YXJnZXQgaW50ZXJmYWNlCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCAx
ZDZlNjA2YTdhYjdkMWRjM2U3NTg0NDJhYzZmMTQ3MmE3YmI3Mzg2Li4yYzBmMzdjMmM3OWZjYWUw
ZmY0YTRhYjk1MzA5ZjNiYTI0MTNiZDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCkBAIC0zMywxMyArMzMsMjAgQEAKIAog
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKKyNpbmNsdWRlICJNZWRpYVNvdXJjZS5oIgorI2lu
Y2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAj
aW5jbHVkZSA8d3RmL1VpbnQ4QXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Tb3Vy
Y2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcihjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPE1lZGlh
U291cmNlPiBzb3VyY2UpCi0gICAgOiBtX2lkKGlkKQorUGFzc1JlZlB0cjxTb3VyY2VCdWZmZXI+
IFNvdXJjZUJ1ZmZlcjo6Y3JlYXRlKFBhc3NPd25QdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4gc291
cmNlQnVmZmVyUHJpdmF0ZSwgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4gc291cmNlKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZlclByaXZhdGUsIHNv
dXJjZSkpOworfQorCitTb3VyY2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcihQYXNzT3duUHRyPFNvdXJj
ZUJ1ZmZlclByaXZhdGU+IHNvdXJjZUJ1ZmZlclByaXZhdGUsIFBhc3NSZWZQdHI8TWVkaWFTb3Vy
Y2U+IHNvdXJjZSkKKyAgICA6IG1fcHJpdmF0ZShzb3VyY2VCdWZmZXJQcml2YXRlKQogICAgICwg
bV9zb3VyY2Uoc291cmNlKQogICAgICwgbV90aW1lc3RhbXBPZmZzZXQoMCkKIHsKQEAgLTUxLDEy
ICs1OCwxMiBAQCBTb3VyY2VCdWZmZXI6On5Tb3VyY2VCdWZmZXIoKQogCiBQYXNzUmVmUHRyPFRp
bWVSYW5nZXM+IFNvdXJjZUJ1ZmZlcjo6YnVmZmVyZWQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkgeworICAgIGlmIChpc0Nsb3NlZCgpKSB7CiAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IHJldHVybiBtX3NvdXJjZS0+YnVmZmVyZWQoaWQoKSwgZWMpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmJ1ZmZlcmVkKCk7CiB9CiAKIGRvdWJsZSBTb3VyY2VCdWZmZXI6OnRpbWVzdGFtcE9mZnNl
dCgpIGNvbnN0CkBAIC02NiwzMyArNzMsNjMgQEAgZG91YmxlIFNvdXJjZUJ1ZmZlcjo6dGltZXN0
YW1wT2Zmc2V0KCkgY29uc3QKIAogdm9pZCBTb3VyY2VCdWZmZXI6OnNldFRpbWVzdGFtcE9mZnNl
dChkb3VibGUgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIW1fc291cmNl
KSB7CisgICAgaWYgKGlzQ2xvc2VkKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3NvdXJjZS0+c2V0VGltZXN0
YW1wT2Zmc2V0KGlkKCksIG9mZnNldCwgZWMpKQotICAgICAgICBtX3RpbWVzdGFtcE9mZnNldCA9
IG9mZnNldDsKKyAgICBpZiAobV9zb3VyY2UtPnJlYWR5U3RhdGUoKSA9PSBNZWRpYVNvdXJjZTo6
ZW5kZWRLZXl3b3JkKCkpCisgICAgICAgIG1fc291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU291
cmNlOjpvcGVuS2V5d29yZCgpKTsKKworICAgIGlmICghbV9wcml2YXRlLT5zZXRUaW1lc3RhbXBP
ZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fdGltZXN0YW1wT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2
b2lkIFNvdXJjZUJ1ZmZlcjo6YXBwZW5kKFBhc3NSZWZQdHI8VWludDhBcnJheT4gZGF0YSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkgeworICAgIGlmIChpc0Nsb3Nl
ZCgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX3NvdXJjZS0+YXBwZW5kKGlkKCksIGRhdGEsIGVjKTsKKyAgICBpZiAo
IWRhdGEuZ2V0KCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zb3VyY2UtPnJlYWR5U3RhdGUoKSA9PSBNZWRp
YVNvdXJjZTo6ZW5kZWRLZXl3b3JkKCkpCisgICAgICAgIG1fc291cmNlLT5zZXRSZWFkeVN0YXRl
KE1lZGlhU291cmNlOjpvcGVuS2V5d29yZCgpKTsKKworICAgIGlmICghbV9wcml2YXRlLT5hcHBl
bmQoZGF0YS0+ZGF0YSgpLCBkYXRhLT5sZW5ndGgoKSkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6YWJv
cnQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkgeworICAgIGlmICgh
bV9wcml2YXRlIHx8ICFtX3NvdXJjZSB8fCBtX3NvdXJjZS0+cmVhZHlTdGF0ZSgpICE9IE1lZGlh
U291cmNlOjpvcGVuS2V5d29yZCgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3NvdXJjZS0+YWJvcnQoaWQoKSwgZWMp
OworICAgIG1fcHJpdmF0ZS0+YWJvcnQoKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXI6OmNsZWFy
KCkKK3sKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnJlbW92ZWRGcm9t
TWVkaWFTb3VyY2UoKTsKKyAgICBtX3NvdXJjZS5jbGVhcigpOworICAgIG1fcHJpdmF0ZS5jbGVh
cigpOworfQorCitib29sIFNvdXJjZUJ1ZmZlcjo6aXNDbG9zZWQoKSBjb25zdAoreworICAgIHJl
dHVybiAhbV9wcml2YXRlIHx8ICFtX3NvdXJjZSB8fCBtX3NvdXJjZS0+cmVhZHlTdGF0ZSgpID09
IE1lZGlhU291cmNlOjpjbG9zZWRLZXl3b3JkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNl
QnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ci5oCmluZGV4IDdkMWU1ODYxYzBmMjFkZGVlYWNkMzQ3YTc4Y2JmMjNlMDMzZTNiN2MuLmU1MmJk
Y2IzNzgzN2MwYTgwNjM0YTU4ODdmMzE4NmY3NGM3NzEwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaApAQCAtMzQsNDMgKzM0LDM4
IEBACiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKLSNpbmNsdWRlICJNZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCitjbGFzcyBNZWRpYVNvdXJjZTsKK2NsYXNz
IFNvdXJjZUJ1ZmZlclByaXZhdGU7CiBjbGFzcyBUaW1lUmFuZ2VzOwogCiBjbGFzcyBTb3VyY2VC
dWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTb3VyY2VCdWZmZXI+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTb3VyY2VCdWZmZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBQ
YXNzUmVmUHRyPE1lZGlhU291cmNlPiBzb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNvdXJjZUJ1ZmZlcihpZCwgc291cmNlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gY3JlYXRlKFBhc3NPd25QdHI8U291cmNlQnVmZmVyUHJp
dmF0ZT4sIFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+KTsKIAogICAgIHZpcnR1YWwgflNvdXJjZUJ1
ZmZlcigpOwogCisgICAgLy8gU291cmNlQnVmZmVyLmlkbCBtZXRob2RzCiAgICAgUGFzc1JlZlB0
cjxUaW1lUmFuZ2VzPiBidWZmZXJlZChFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0KICAgICBkb3Vi
bGUgdGltZXN0YW1wT2Zmc2V0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBPZmZzZXQo
ZG91YmxlLCBFeGNlcHRpb25Db2RlJik7Ci0KICAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIHZvaWQgYWJvcnQoRXhjZXB0
aW9uQ29kZSYpOwotICAgIAotICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CiAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX3NvdXJjZS5jbGVhcigpOyB9CisgICAgdm9p
ZCBjbGVhcigpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUJ1ZmZlcihjb25zdCBT
dHJpbmcmIGlkLCBQYXNzUmVmUHRyPE1lZGlhU291cmNlPik7CisgICAgU291cmNlQnVmZmVyKFBh
c3NPd25QdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4sIFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+KTsK
KworICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdDsKIAotICAgIFN0cmluZyBtX2lkOworICAgIE93
blB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiBtX3ByaXZhdGU7CiAgICAgUmVmUHRyPE1lZGlhU291
cmNlPiBtX3NvdXJjZTsKLSAgICAKKwogICAgIGRvdWJsZSBtX3RpbWVzdGFtcE9mZnNldDsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNl
QnVmZmVyTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlckxpc3QuY3BwCmluZGV4IDU4MzcyNGJhMTU1OTU4NGJlNTNmN2ZkYWM4OWQzMTUyNjBh
Yzg4NWIuLjlkYjVmYTQxMWViMmFhYmM2ZTQ0MmY0YWE5ZTI3MGY0M2Q3Njc2ZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJM
aXN0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNp
bmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVk
ZSAiU291cmNlQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDcgKzQzLDYg
QEAgU291cmNlQnVmZmVyTGlzdDo6U291cmNlQnVmZmVyTGlzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmlj
RXZlbnRRdWV1ZSogYXN5bmNFdmVudFF1ZXVlKQogICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KGNvbnRleHQpCiAgICAgLCBtX2FzeW5jRXZlbnRRdWV1ZShhc3luY0V2ZW50UXVldWUpCi0g
ICAgLCBtX2xhc3RTb3VyY2VCdWZmZXJJZCgwKQogewogfQogCkBAIC04MiwzNCArODIsNiBAQCB2
b2lkIFNvdXJjZUJ1ZmZlckxpc3Q6OmNsZWFyKCkKICAgICAgICAgcmVtb3ZlKG1fbGlzdFtpXS5n
ZXQoKSk7CiB9CiAKLVN0cmluZyBTb3VyY2VCdWZmZXJMaXN0OjpnZW5lcmF0ZVVuaXF1ZUlkKCkK
LXsKLSAgICAvLyBFbnN1cmUgYSB1bmlxdWUgaWQuIFVudGlsIG1fbGFzdFNvdXJjZUJ1ZmZlcklk
IHdyYXBzIGFyb3VuZCAodmVyeSB1bmxpa2VseSksCi0gICAgLy8gdGhpcyBsb29wIHdpbGwgZXhp
dCBhZnRlciBvbmUgY2hlY2suIElmIG1fbGFzdFNvdXJjZUJ1ZmZlcklkIGRvZXMgd3JhcCwKLSAg
ICAvLyB0aGlzIGxvb3AgbWF5IHJ1biBhcyBtYW55IHRpbWVzIGFzIHRoZSBzaXplIG9mIG1fbGlz
dCwgYnV0IGluIG1vc3QKLSAgICAvLyBjYXNlcyB0aGF0IHNob3VsZCBiZSBsZXNzIHRoYW4gMTAu
IFdlIG1heSB3YW50IHRvIGludmVzdGlnYXRlIGEgbW9yZQotICAgIC8vIGVmZmljaWVudCBhcHBy
b2FjaCBpZiBtYW55IG1vcmUgU291cmNlQnVmZmVycyBhcmUgYWxsb3dlZCBpbiB0aGUgZnV0dXJl
LgotICAgIHNpemVfdCBuZXh0U291cmNlQnVmZmVySWQgPSBtX2xhc3RTb3VyY2VCdWZmZXJJZCAr
IDE7Ci0KLSAgICB3aGlsZSAoY29udGFpbnMobmV4dFNvdXJjZUJ1ZmZlcklkKSkgewotICAgICAg
ICBpZiAobmV4dFNvdXJjZUJ1ZmZlcklkID09IG1fbGFzdFNvdXJjZUJ1ZmZlcklkKQotICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIG5leHRTb3VyY2VCdWZmZXJJZCsr
OwotICAgIH0KLSAgICBtX2xhc3RTb3VyY2VCdWZmZXJJZCA9IG5leHRTb3VyY2VCdWZmZXJJZDsK
LQotICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihuZXh0U291cmNlQnVmZmVySWQpOwotfQotCi1i
b29sIFNvdXJjZUJ1ZmZlckxpc3Q6OmNvbnRhaW5zKHNpemVfdCBpZCkgY29uc3QKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV9saXN0W2ldLT5pZCgpID09IFN0cmluZzo6bnVtYmVyKGlkKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU291cmNlQnVmZmVy
TGlzdDo6Y3JlYXRlQW5kRmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQog
ewogICAgIEFTU0VSVChtX2FzeW5jRXZlbnRRdWV1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCmluZGV4IGE5NWE4Mzc2
OGJjNjNmOGEwZDJhODc2NzIyMTU3OWM5MDM3MGRhYTkuLjBkNDc2NGUxM2QxMWExNDBlODkxOTFh
NTc5YTdmY2QwNGViMTk0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCkBAIC01NywxMCArNTcsNiBAQCBwdWJsaWM6
CiAgICAgYm9vbCByZW1vdmUoU291cmNlQnVmZmVyKik7CiAgICAgdm9pZCBjbGVhcigpOwogCi0g
ICAgLy8gR2VuZXJhdGVzIGFuIGlkIGZvciBhZGRpbmcgYSBuZXcgU291cmNlQnVmZmVyLiBSZXR1
cm5zIGFuIGVtcHR5IHN0cmluZwotICAgIC8vIGlmIHRoaXMgU291cmNlQnVmZmVyTGlzdCBpcyBm
dWxsLgotICAgIFN0cmluZyBnZW5lcmF0ZVVuaXF1ZUlkKCk7Ci0KICAgICAvLyBFdmVudFRhcmdl
dCBpbnRlcmZhY2UKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFt
ZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwpAQCAtNzUsNyArNzEsNiBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIFNvdXJjZUJ1ZmZlckxpc3QoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEdlbmVyaWNFdmVudFF1ZXVlKik7CiAKLSAgICBib29sIGNvbnRhaW5zKHNp
emVfdCBpZCkgY29uc3Q7CiAgICAgdm9pZCBjcmVhdGVBbmRGaXJlRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSB7
IHJlZigpOyB9CkBAIC04Niw3ICs4MSw2IEBAIHByaXZhdGU6CiAgICAgR2VuZXJpY0V2ZW50UXVl
dWUqIG1fYXN5bmNFdmVudFF1ZXVlOwogCiAgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+
ID4gbV9saXN0OwotICAgIHNpemVfdCBtX2xhc3RTb3VyY2VCdWZmZXJJZDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CmluZGV4IDc4NjE5MzhmNjI1OTIxNDYyOTQ4NmI5NzBjZmUxYTdjYTZkMDJkOGIuLjVlNTAyMzZm
MTVlNDgwMzgwNDY3ZGU0NmQyM2QxMWZlZWNhN2ZkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNzksNyArNzksNiBAQAogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKLSNp
bmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRl
LmgKaW5kZXggOGQ5MWRhMGNmZDAxMGU2N2ZhYjc1YzVjYWNhZDNmNmJmZjkwZDFmOS4uZGUxNzVj
ZGY3ZjYxODRmMjU3NzE1YTAzYTk4ZjhjZTk1NDE2YTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmgKQEAgLTMyLDI3
ICszMiwyMyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAotI2luY2x1ZGUgIlRpbWVS
YW5nZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlOworCiBjbGFzcyBNZWRpYVNvdXJj
ZVByaXZhdGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlhU291cmNlUHJpdmF0ZSk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE1lZGlhU291cmNlUHJpdmF0
ZSgpIHsgfQogICAgIHZpcnR1YWwgfk1lZGlhU291cmNlUHJpdmF0ZSgpIHsgfQogCi0gICAgZW51
bSBBZGRJZFN0YXR1cyB7IE9rLCBOb3RTdXBwb3J0ZWQsIFJlYWNoZWRJZExpbWl0IH07Ci0gICAg
dmlydHVhbCBBZGRJZFN0YXR1cyBhZGRJZChjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgcmVtb3ZlSWQoY29uc3QgU3RyaW5nJiBpZCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxUaW1lUmFuZ2VzPiBidWZmZXJlZChjb25zdCBTdHJpbmcmIGlkKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKKyAgICBlbnVtIEFkZFN0YXR1cyB7IE9rLCBOb3RTdXBw
b3J0ZWQsIFJlYWNoZWRJZExpbWl0IH07CisgICAgdmlydHVhbCBBZGRTdGF0dXMgYWRkU291cmNl
QnVmZmVyKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVjcywg
T3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+KikgPSAwOwogICAgIHZpcnR1YWwgZG91YmxlIGR1
cmF0aW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoY29uc3QgU3RyaW5nJiBpZCkgPSAwOwogICAgIGVudW0g
RW5kT2ZTdHJlYW1TdGF0dXMgeyBFb3NOb0Vycm9yLCBFb3NOZXR3b3JrRXJyb3IsIEVvc0RlY29k
ZUVycm9yIH07CiAgICAgdmlydHVhbCB2b2lkIGVuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVz
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNldFRpbWVzdGFtcE9mZnNldChjb25zdCBTdHJpbmcm
IGlkLCBkb3VibGUgb2Zmc2V0KSA9IDA7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWEwZWNlZDJjMGE2MjAwOTQzY2I0YzI4NmM4OWY3MTI4NjA0OTBjMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUu
aApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU291cmNlQnVmZmVyUHJpdmF0ZV9oCisjZGVmaW5lIFNv
dXJjZUJ1ZmZlclByaXZhdGVfaAorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworI2luY2x1
ZGUgIlRpbWVSYW5nZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTb3VyY2VC
dWZmZXJQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBTb3VyY2VCdWZmZXJQcml2YXRlKCkgeyB9Cisg
ICAgdmlydHVhbCB+U291cmNlQnVmZmVyUHJpdmF0ZSgpIHsgfQorCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhcHBl
bmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGFib3J0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZXRUaW1lc3RhbXBP
ZmZzZXQoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3Vy
Y2UoKSA9IDA7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKaW5kZXggN2ExODI1ZDM4ZTIxODQ2MTdkNjE3MTRmMjI5Nzk0MzhjOGUwYzQ4Yy4uNDM2
MmJkYTkyNGEzMzM5NTM0NTlhY2M1MTI4MGM0MmRhMGJhYjk5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cApAQCAtMzg3LDYgKzM4Nyw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9tYWMv
V2ViU2NyZWVuSW5mb0ZhY3RvcnkubW0nLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYlN1
YnN0cmluZ1V0aWwubW0nLAogICAgICAgICAgICAgICAgICdzcmMvTG9jYWxGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL01lZGlhU291cmNlUHJpdmF0ZUltcGwu
Y3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL01lZGlhU291cmNlUHJpdmF0ZUltcGwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvcGFpbnRpbmcvQ29udGludW91c1BhaW50ZXIuaCcsCkBAIC00MDMsNiArNDA1
LDggQEAKICAgICAgICAgICAgICAgICAnc3JjL1Njcm9sbGJhckdyb3VwLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9TY3JvbGxiYXJHcm91cC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1No
YXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1NvdXJjZUJ1
ZmZlclByaXZhdGVJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Tb3VyY2VCdWZmZXJQ
cml2YXRlSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaElucHV0Q2xpZW50SW1w
bC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoSW5wdXRDbGllbnRJbXBsLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTb3VyY2VD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU291cmNlQ2xp
ZW50LmgKaW5kZXggM2U2NTA5MDRiYjQyYmY4ZmZhMGU3NmM3MzdiOWZlZWRjMWFlOWYxMC4uNzZj
NDIxOWNkNjViYTkyOWExMGFhZjYwZWQwNGVjMzQ1YTdjOWY2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTb3VyY2VDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVNvdXJjZUNsaWVudC5oCkBAIC0zNiwx
MiArMzYsMTQgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYlNvdXJjZUJ1ZmZl
cjsKKwogY2xhc3MgV2ViTWVkaWFTb3VyY2VDbGllbnQgewogcHVibGljOgotICAgIGVudW0gQWRk
SWRTdGF0dXMgewotICAgICAgICBBZGRJZFN0YXR1c09rLAotICAgICAgICBBZGRJZFN0YXR1c05v
dFN1cHBvcnRlZCwKLSAgICAgICAgQWRkSWRTdGF0dXNSZWFjaGVkSWRMaW1pdAorICAgIGVudW0g
QWRkU3RhdHVzIHsKKyAgICAgICAgQWRkU3RhdHVzT2ssCisgICAgICAgIEFkZFN0YXR1c05vdFN1
cHBvcnRlZCwKKyAgICAgICAgQWRkU3RhdHVzUmVhY2hlZElkTGltaXQKICAgICB9OwogCiAgICAg
ZW51bSBFbmRPZlN0cmVhbVN0YXR1cyB7CkBAIC01MiwxNSArNTQsMTAgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB+V2ViTWVkaWFTb3VyY2VDbGllbnQoKSB7IH0KIAotICAgIHZpcnR1YWwgQWRk
SWRTdGF0dXMgYWRkSWQoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3QgV2ViU3RyaW5nJiB0eXBl
LCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgY29kZWNzKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIHJlbW92ZUlkKGNvbnN0IFdlYlN0cmluZyYgaWQpID0gMDsKLSAgICB2aXJ0dWFsIFdlYlRp
bWVSYW5nZXMgYnVmZmVyZWQoY29uc3QgV2ViU3RyaW5nJiBpZCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBhcHBlbmQoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGFib3J0KGNvbnN0IFdl
YlN0cmluZyYgaWQpID0gMDsKKyAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIo
Y29uc3QgV2ViU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgY29kZWNz
LCBXZWJTb3VyY2VCdWZmZXIqKikgPSAwOwogICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgc2V0VGltZXN0YW1wT2Zmc2V0KGNvbnN0IFdlYlN0cmluZyYgaWQsIGRvdWJsZSBvZmZz
ZXQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU291cmNlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTb3VyY2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDM1YzUwZDAy
ODIyYmFmYjAxY2IwM2FjZTdiYjI5MzZkMzFkZDhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU291cmNlQnVmZmVyLmgKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViU291cmNlQnVmZmVyX2gKKyNkZWZpbmUgV2ViU291cmNlQnVmZmVyX2gKKwor
I2luY2x1ZGUgIldlYlRpbWVSYW5nZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViU291cmNlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJTb3VyY2VCdWZmZXIo
KSB7IH0KKworICAgIHZpcnR1YWwgV2ViVGltZVJhbmdlcyBidWZmZXJlZCgpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgYXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhYm9ydCgpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgc2V0VGltZXN0YW1wT2Zmc2V0KGRvdWJsZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVkRnJvbU1lZGlhU291cmNlKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0
Y2hpbmdFbnVtcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGlu
Z0VudW1zLmNwcAppbmRleCBmNmIyYmJhYzdlMzgzYmM3ZWQ3ZWIwOTE3NjVkMDU1ZmE2MGVlYzIz
Li41N2MxZGY5ZmM2YjFjZGVkMDA0MWJlOTZmOWQ3NmEyNGJiMGVlYmJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcApAQCAtNDEz
LDkgKzQxMyw5IEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFQbGF5ZXI6
OlByZWxvYWRNZXRhRGF0YSwgTWVkaWFQbGF5ZXI6Ok1ldGFECiBDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpQcmVsb2FkQXV0bywgTWVkaWFQbGF5ZXI6OkF1dG8p
OwogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkFkZElkU3RhdHVzT2ssIE1lZGlhU291cmNlUHJpdmF0
ZTo6T2spOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRpYVNvdXJjZUNsaWVu
dDo6QWRkSWRTdGF0dXNOb3RTdXBwb3J0ZWQsIE1lZGlhU291cmNlUHJpdmF0ZTo6Tm90U3VwcG9y
dGVkKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6
OkFkZElkU3RhdHVzUmVhY2hlZElkTGltaXQsIE1lZGlhU291cmNlUHJpdmF0ZTo6UmVhY2hlZElk
TGltaXQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRpYVNvdXJjZUNsaWVu
dDo6QWRkU3RhdHVzT2ssIE1lZGlhU291cmNlUHJpdmF0ZTo6T2spOworQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkU3RhdHVzTm90U3VwcG9ydGVk
LCBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk1lZGlhU291cmNlQ2xpZW50OjpBZGRTdGF0dXNSZWFjaGVkSWRMaW1pdCwg
TWVkaWFTb3VyY2VQcml2YXRlOjpSZWFjaGVkSWRMaW1pdCk7CiAKIENPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkVuZE9mU3RyZWFtU3RhdHVzTm9FcnJv
ciwgTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vycm9yKTsKIENPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkVuZE9mU3RyZWFtU3RhdHVzTmV0d29ya0Vy
cm9yLCBNZWRpYVNvdXJjZVByaXZhdGU6OkVvc05ldHdvcmtFcnJvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL01lZGlhU291cmNlUHJpdmF0ZUltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjExODFmZmRjNGY3OTE3N2E1NmZjZTk2NDQ1NzQwODFiNjMyMWUzZjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJ
bXBsLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1l
ZGlhU291cmNlUHJpdmF0ZUltcGwuaCIKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNp
bmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5oIgorI2luY2x1ZGUgIldlYk1lZGlhU291
cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU291cmNlQnVmZmVyLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK01lZGlhU291cmNlUHJpdmF0
ZUltcGw6Ok1lZGlhU291cmNlUHJpdmF0ZUltcGwoUGFzc093blB0cjxXZWJLaXQ6OldlYk1lZGlh
U291cmNlQ2xpZW50PiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1dl
YkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIE1lZGlhU291cmNlUHJpdmF0ZUlt
cGw6OmFkZFNvdXJjZUJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBjb2RlY3MsCisgICAgT3duUHRyPFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU+KiBz
b3VyY2VCdWZmZXIpCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6Tm90U3VwcG9ydGVkOworCisgICAgV2ViU291cmNlQnVm
ZmVyKiB3ZWJTb3VyY2VCdWZmZXIgPSAwOworICAgIFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0
ZTo6QWRkU3RhdHVzIHJlc3VsdCA9CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlh
U291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzPihtX2NsaWVudC0+YWRkU291cmNlQnVmZmVyKHR5cGUs
IGNvZGVjcywgJndlYlNvdXJjZUJ1ZmZlcikpOworCisgICAgaWYgKHJlc3VsdCA9PSBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVByaXZhdGU6Ok9rKSB7CisgICAgICAgIEFTU0VSVCh3ZWJTb3VyY2VCdWZm
ZXIpOworICAgICAgICAqc291cmNlQnVmZmVyID0gYWRvcHRQdHIobmV3IFNvdXJjZUJ1ZmZlclBy
aXZhdGVJbXBsKGFkb3B0UHRyKHdlYlNvdXJjZUJ1ZmZlcikpKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZG91YmxlIE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmR1cmF0aW9uKCkK
K3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OnF1aWV0X05hTigpOworICAgIHJldHVybiBtX2NsaWVudC0+ZHVyYXRpb24oKTsK
K30KKwordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpzZXREdXJhdGlvbihkb3VibGUgZHVy
YXRpb24pCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2V0RHVyYXRp
b24oZHVyYXRpb24pOworfQorCit2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmVuZE9mU3Ry
ZWFtKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVz
KQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmVuZE9mU3RyZWFtKHN0
YXRpY19jYXN0PFdlYk1lZGlhU291cmNlQ2xpZW50OjpFbmRPZlN0cmVhbVN0YXR1cz4oc3RhdHVz
KSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzYzMThlMDdmMjY5YmJhYzky
YTdmYjgzZjI2MmUzYThlOTRjYTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL01lZGlhU291cmNlUHJpdmF0ZUltcGwuaApAQCAtMCwwICsxLDYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBNZWRpYVNvdXJjZVByaXZhdGVJbXBsX2gKKyNkZWZpbmUgTWVkaWFTb3VyY2VQcml2YXRl
SW1wbF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiTWVkaWFTb3Vy
Y2VQcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVNvdXJj
ZUNsaWVudDsKKworY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRlSW1wbCA6IHB1YmxpYyBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVByaXZhdGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IE1lZGlhU291cmNl
UHJpdmF0ZUltcGwoUGFzc093blB0cjxXZWJNZWRpYVNvdXJjZUNsaWVudD4pOworICAgIHZpcnR1
YWwgfk1lZGlhU291cmNlUHJpdmF0ZUltcGwoKSB7IH0KKworICAgIC8vIE1lZGlhU291cmNlUHJp
dmF0ZSBtZXRob2RzLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlOjpB
ZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGNvZGVjcywKKyAgICAgICAgT3duUHRyPFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBy
aXZhdGU+Kik7CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0RHVyYXRpb24oZG91YmxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2ZTdHJlYW0oV2Vi
Q29yZTo6TWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyk7CisKK3ByaXZhdGU6
CisgICAgT3duUHRyPFdlYktpdDo6V2ViTWVkaWFTb3VyY2VDbGllbnQ+IG1fY2xpZW50OworfTsK
KworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWJmYzc0Zjg0
ZjQ1OWQ1NTYwZjgwNDIwMWRlMDc3YjljZWY3Y2M4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvdXJjZUJ1ZmZlclByaXZhdGVJbXBsLmNwcApAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZh
dGVJbXBsLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiV2ViU291
cmNlQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTb3VyY2VCdWZmZXJQcml2YXRlSW1w
bDo6U291cmNlQnVmZmVyUHJpdmF0ZUltcGwoV1RGOjpQYXNzT3duUHRyPFdlYlNvdXJjZUJ1ZmZl
cj4gc291cmNlQnVmZmVyKQorICAgIDogbV9zb3VyY2VCdWZmZXIoc291cmNlQnVmZmVyKQorewor
fQorCitQYXNzUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5nZXM+IFNvdXJjZUJ1ZmZlclByaXZhdGVJ
bXBsOjpidWZmZXJlZCgpCit7CisgICAgaWYgKCFtX3NvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OlRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgV2ViVGltZVJhbmdlcyB3
ZWJSYW5nZXMgPSBtX3NvdXJjZUJ1ZmZlci0+YnVmZmVyZWQoKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6VGltZVJhbmdlcz4gcmFuZ2VzID0gV2ViQ29yZTo6VGltZVJhbmdlczo6Y3JlYXRlKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJSYW5nZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHJhbmdlcy0+YWRkKHdlYlJhbmdlc1tpXS5zdGFydCwgd2ViUmFuZ2VzW2ldLmVuZCk7CisgICAg
cmV0dXJuIHJhbmdlcy5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUlt
cGw6OmFwcGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgaWYgKCFtX3NvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBtX3NvdXJjZUJ1ZmZlci0+YXBwZW5kKGRhdGEsIGxlbmd0aCk7Cit9CisKK2Jvb2wgU291
cmNlQnVmZmVyUHJpdmF0ZUltcGw6OmFib3J0KCkKK3sKKyAgICBpZiAoIW1fc291cmNlQnVmZmVy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc291cmNlQnVmZmVyLT5hYm9y
dCgpOworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjpzZXRUaW1lc3RhbXBPZmZz
ZXQoZG91YmxlIG9mZnNldCkKK3sKKyAgICBpZiAoIW1fc291cmNlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9zb3VyY2VCdWZmZXItPnNldFRpbWVzdGFtcE9m
ZnNldChvZmZzZXQpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjpyZW1vdmVk
RnJvbU1lZGlhU291cmNlKCkKK3sKKyAgICBpZiAoIW1fc291cmNlQnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zb3VyY2VCdWZmZXItPnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKKyAg
ICBtX3NvdXJjZUJ1ZmZlci5jbGVhcigpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU291cmNlQnVmZmVyUHJpdmF0ZUltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvdXJjZUJ1ZmZlclByaXZhdGVJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWQ5MGYwOWJkYTI5MGZhY2ExYzBiZGYzZTNmYjY1ZDBiZGNiOGVmNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvdXJjZUJ1ZmZlclByaXZhdGVJ
bXBsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU291cmNlQnVmZmVyUHJpdmF0ZUltcGxfaAor
I2RlZmluZSBTb3VyY2VCdWZmZXJQcml2YXRlSW1wbF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU09V
UkNFKQorCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViU291cmNlQnVmZmVyOworCitjbGFzcyBTb3VyY2VCdWZmZXJQcml2
YXRlSW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBTb3VyY2VCdWZmZXJQcml2YXRlSW1wbChXVEY6OlBhc3NPd25QdHI8V2Vi
U291cmNlQnVmZmVyPik7CisgICAgdmlydHVhbCB+U291cmNlQnVmZmVyUHJpdmF0ZUltcGwoKSB7
IH0KKworICAgIC8vIFNvdXJjZUJ1ZmZlclByaXZhdGUgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGltZVJhbmdlcz4gYnVmZmVyZWQoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgYXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgdmlydHVhbCBib29sIGFib3J0KCk7CisgICAgdmlydHVhbCBib29sIHNldFRpbWVzdGFtcE9m
ZnNldChkb3VibGUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNlKCk7
CisKK3ByaXZhdGU6CisgICAgV1RGOjpPd25QdHI8V2ViU291cmNlQnVmZmVyPiBtX3NvdXJjZUJ1
ZmZlcjsKK307CisKKworfQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKaW5kZXggNGM4
ZGY4OTI3N2M1NTg1NTYyODExYzc1ZWMyN2ZiYTliNmQyZGI0OC4uMmJiNzUyMjlkNDhiYWUyOThk
YTAwY2Y5NWI4NTcxYTU1ZGE4OGE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCkBAIC0yMSw2ICsyMSw3IEBA
CiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiVVVJRC5oIgogI2luY2x1ZGUg
IldlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgog
I2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgpAQCAtMjgsNiArMjksNyBAQAogI2luY2x1ZGUgIldl
Yk1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFTb3VyY2VDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJNZWRpYVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJTb3VyY2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgog
I2luY2x1ZGUgPHB1YmxpYy9XZWJDU3RyaW5nLmg+CkBAIC02MCwyMCArNjIsMzQgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfldlYk1lZGlhU291cmNlQ2xpZW50SW1wbCgpOwogCiAgICAgLy8gV2Vi
TWVkaWFTb3VyY2VDbGllbnQgbWV0aG9kcy4KLSAgICB2aXJ0dWFsIEFkZElkU3RhdHVzIGFkZElk
KGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwgY29uc3QgV2ViVmVj
dG9yPFdlYlN0cmluZz4mIGNvZGVjcyk7Ci0gICAgdmlydHVhbCBib29sIHJlbW92ZUlkKGNvbnN0
IFdlYlN0cmluZyYgaWQpOwotICAgIHZpcnR1YWwgV2ViVGltZVJhbmdlcyBidWZmZXJlZChjb25z
dCBXZWJTdHJpbmcmIGlkKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kKGNvbnN0IFdlYlN0cmlu
ZyYgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
dmlydHVhbCBib29sIGFib3J0KGNvbnN0IFdlYlN0cmluZyYgaWQpOworICAgIHZpcnR1YWwgQWRk
U3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBXZWJTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYlZl
Y3RvcjxXZWJTdHJpbmc+JiBjb2RlY3MsIFdlYlNvdXJjZUJ1ZmZlcioqKTsKICAgICB2aXJ0dWFs
IGRvdWJsZSBkdXJhdGlvbigpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUp
OwogICAgIHZpcnR1YWwgdm9pZCBlbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyk7Ci0gICAg
dmlydHVhbCBib29sIHNldFRpbWVzdGFtcE9mZnNldChjb25zdCBXZWJTdHJpbmcmIGlkLCBkb3Vi
bGUgb2Zmc2V0KTsKIAogcHJpdmF0ZToKICAgICBXZWJNZWRpYVBsYXllciogbV93ZWJNZWRpYVBs
YXllcjsKIH07CiAKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjbGFzcyBvbmNlIHRoZSBDaHJvbWl1
bSBjb2RlIGltcGxlbWVudHMgaXRzIG93bgorLy8gdmVyc2lvbiBvZiBXZWJNZWRpYVBsYXllcjo6
bG9hZChXZWJVUkwsIFdlYk1lZGlhU291cmNlLCBDT1JTTW9kZSkuCisvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzcxCitjbGFzcyBXZWJTb3VyY2VCdWZmZXJJ
bXBsIDogcHVibGljIFdlYlNvdXJjZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgV2ViU291cmNlQnVm
ZmVySW1wbChXZWJNZWRpYVBsYXllciosIGNvbnN0IFdlYlN0cmluZyYgaWQpOworCisgICAgLy8g
V2ViU291cmNlQnVmZmVyIG1ldGhvZHMuCisgICAgdmlydHVhbCBXZWJUaW1lUmFuZ2VzIGJ1ZmZl
cmVkKCk7CisgICAgdmlydHVhbCBib29sIGFwcGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgYm9vbCBhYm9ydCgpOworICAgIHZpcnR1
YWwgYm9vbCBzZXRUaW1lc3RhbXBPZmZzZXQoZG91YmxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlZEZyb21NZWRpYVNvdXJjZSgpOworCitwcml2YXRlOgorICAgIFdlYk1lZGlhUGxheWVyKiBt
X3dlYk1lZGlhUGxheWVyOworICAgIFdlYlN0cmluZyBtX2lkOworfTsKKwogV2ViTWVkaWFTb3Vy
Y2VDbGllbnRJbXBsOjpXZWJNZWRpYVNvdXJjZUNsaWVudEltcGwoV2ViTWVkaWFQbGF5ZXIqIHdl
Yk1lZGlhUGxheWVyKQogICAgIDogbV93ZWJNZWRpYVBsYXllcih3ZWJNZWRpYVBsYXllcikKIHsK
QEAgLTgzLDQ5ICs5OSw2NSBAQCBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6On5XZWJNZWRpYVNv
dXJjZUNsaWVudEltcGwoKQogewogfQogCi1XZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkSWRTdGF0
dXMgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjphZGRJZChjb25zdCBXZWJTdHJpbmcmIGlkLCBj
b25zdCBXZWJTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBjb2RlY3Mp
CitXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkU3RhdHVzIFdlYk1lZGlhU291cmNlQ2xpZW50SW1w
bDo6YWRkU291cmNlQnVmZmVyKGNvbnN0IFdlYlN0cmluZyYgdHlwZSwgY29uc3QgV2ViVmVjdG9y
PFdlYlN0cmluZz4mIGNvZGVjcywKKyAgICBXZWJTb3VyY2VCdWZmZXIqKiBzb3VyY2VCdWZmZXIp
Cit7CisgICAgV2ViU3RyaW5nIGlkID0gV2ViQ29yZTo6Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpOworICAgIFdlYk1lZGlhU291cmNlQ2xpZW50OjpBZGRTdGF0dXMgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8V2ViTWVkaWFTb3VyY2VDbGllbnQ6OkFkZFN0YXR1cz4obV93ZWJNZWRpYVBsYXllci0+
c291cmNlQWRkSWQoaWQsIHR5cGUsIGNvZGVjcykpOworICAgIGlmIChyZXN1bHQgPT0gV2ViTWVk
aWFTb3VyY2VDbGllbnQ6OkFkZFN0YXR1c09rKQorICAgICAgICAqc291cmNlQnVmZmVyID0gbmV3
IFdlYlNvdXJjZUJ1ZmZlckltcGwobV93ZWJNZWRpYVBsYXllciwgaWQpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZG91YmxlIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6ZHVyYXRpb24o
KQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkSWRT
dGF0dXM+KG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFkZElkKGlkLCB0eXBlLCBjb2RlY3MpKTsK
KyAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZHVyYXRpb24oKTsKIH0KIAotYm9vbCBXZWJN
ZWRpYVNvdXJjZUNsaWVudEltcGw6OnJlbW92ZUlkKGNvbnN0IFdlYlN0cmluZyYgaWQpCit2b2lk
IFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQog
ewotICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VSZW1vdmVJZChpZCk7CisgICAg
cmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZVNldER1cmF0aW9uKGR1cmF0aW9uKTsKIH0K
IAotV2ViVGltZVJhbmdlcyBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OmJ1ZmZlcmVkKGNvbnN0
IFdlYlN0cmluZyYgaWQpCit2b2lkIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6ZW5kT2ZTdHJl
YW0oRW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQogewotICAgIHJldHVybiBtX3dlYk1lZGlhUGxh
eWVyLT5zb3VyY2VCdWZmZXJlZChpZCk7CisgICAgbV93ZWJNZWRpYVBsYXllci0+c291cmNlRW5k
T2ZTdHJlYW0oc3RhdGljX2Nhc3Q8V2ViTWVkaWFQbGF5ZXI6OkVuZE9mU3RyZWFtU3RhdHVzPihz
dGF0dXMpKTsKIH0KIAotYm9vbCBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OmFwcGVuZChjb25z
dCBXZWJTdHJpbmcmIGlkLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCitXZWJTb3VyY2VCdWZmZXJJbXBsOjpXZWJTb3VyY2VCdWZmZXJJbXBsKFdlYk1lZGlhUGxh
eWVyKiB3ZWJNZWRpYVBsYXllciwgY29uc3QgV2ViU3RyaW5nJiBpZCkKKyAgICA6IG1fd2ViTWVk
aWFQbGF5ZXIod2ViTWVkaWFQbGF5ZXIpCisgICAgLCBtX2lkKGlkKQogewotICAgIHJldHVybiBt
X3dlYk1lZGlhUGxheWVyLT5zb3VyY2VBcHBlbmQoaWQsIGRhdGEsIGxlbmd0aCk7CiB9CiAKLWJv
b2wgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjphYm9ydChjb25zdCBXZWJTdHJpbmcmIGlkKQor
V2ViVGltZVJhbmdlcyBXZWJTb3VyY2VCdWZmZXJJbXBsOjpidWZmZXJlZCgpCiB7Ci0gICAgcmV0
dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFib3J0KGlkKTsKKyAgICByZXR1cm4gbV93ZWJN
ZWRpYVBsYXllci0+c291cmNlQnVmZmVyZWQobV9pZCk7CiB9CiAKLWRvdWJsZSBXZWJNZWRpYVNv
dXJjZUNsaWVudEltcGw6OmR1cmF0aW9uKCkKK2Jvb2wgV2ViU291cmNlQnVmZmVySW1wbDo6YXBw
ZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBy
ZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZHVyYXRpb24oKTsKKyAgICByZXR1cm4gbV93ZWJNZWRp
YVBsYXllci0+c291cmNlQXBwZW5kKG1faWQsIGRhdGEsIGxlbmd0aCk7CiB9CiAKLXZvaWQgV2Vi
TWVkaWFTb3VyY2VDbGllbnRJbXBsOjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCitib29s
IFdlYlNvdXJjZUJ1ZmZlckltcGw6OmFib3J0KCkKIHsKLSAgICByZXR1cm4gbV93ZWJNZWRpYVBs
YXllci0+c291cmNlU2V0RHVyYXRpb24oZHVyYXRpb24pOworICAgIHJldHVybiBtX3dlYk1lZGlh
UGxheWVyLT5zb3VyY2VBYm9ydChtX2lkKTsKIH0KIAotdm9pZCBXZWJNZWRpYVNvdXJjZUNsaWVu
dEltcGw6OmVuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykKK2Jvb2wgV2ViU291
cmNlQnVmZmVySW1wbDo6c2V0VGltZXN0YW1wT2Zmc2V0KGRvdWJsZSBvZmZzZXQpCiB7Ci0gICAg
bV93ZWJNZWRpYVBsYXllci0+c291cmNlRW5kT2ZTdHJlYW0oc3RhdGljX2Nhc3Q8V2ViTWVkaWFQ
bGF5ZXI6OkVuZE9mU3RyZWFtU3RhdHVzPihzdGF0dXMpKTsKKyAgICByZXR1cm4gbV93ZWJNZWRp
YVBsYXllci0+c291cmNlU2V0VGltZXN0YW1wT2Zmc2V0KG1faWQsIG9mZnNldCk7CiB9CiAKLWJv
b2wgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjpzZXRUaW1lc3RhbXBPZmZzZXQoY29uc3QgV2Vi
U3RyaW5nJiBpZCwgZG91YmxlIG9mZnNldCkKK3ZvaWQgV2ViU291cmNlQnVmZmVySW1wbDo6cmVt
b3ZlZEZyb21NZWRpYVNvdXJjZSgpCiB7Ci0gICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNv
dXJjZVNldFRpbWVzdGFtcE9mZnNldChpZCwgb2Zmc2V0KTsKKyAgICBpZiAoIW1fd2ViTWVkaWFQ
bGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZVJl
bW92ZUlkKG1faWQpOworICAgIG1fd2ViTWVkaWFQbGF5ZXIgPSAwOwogfQogCiBzdGF0aWMgUGFz
c093blB0cjxXZWJNZWRpYVBsYXllcj4gY3JlYXRlV2ViTWVkaWFQbGF5ZXIoV2ViTWVkaWFQbGF5
ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViVVJMJiB1cmwsIEZyYW1lKiBmcmFtZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU291cmNlSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVNvdXJjZUltcGwuY3BwCmluZGV4
IGE1ZWM4OTIyY2ZmNzJiNGMxZTM4ZTJlZTE3YzMzMGViNjQxODkwYzQuLjJiYTJjMjNjMjdkMGZm
N2Y2M2ZjYjgxYTdiMTdlYTAzYTVjYWUwYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYk1lZGlhU291cmNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTWVkaWFTb3VyY2VJbXBsLmNwcApAQCAtMzEsMTA4ICszMSwxMyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYk1lZGlhU291cmNlSW1wbC5oIgogCi0jaW5j
bHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlLmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRl
SW1wbC5oIgogI2luY2x1ZGUgIldlYk1lZGlhU291cmNlQ2xpZW50LmgiCiAKICNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTWVkaWFTb3VyY2VQ
cml2YXRlSW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGUgewotcHVibGlj
OgotICAgIGV4cGxpY2l0IE1lZGlhU291cmNlUHJpdmF0ZUltcGwoUGFzc093blB0cjxXZWJNZWRp
YVNvdXJjZUNsaWVudD4pOwotICAgIHZpcnR1YWwgfk1lZGlhU291cmNlUHJpdmF0ZUltcGwoKSB7
IH0KLQotICAgIC8vIE1lZGlhU291cmNlUHJpdmF0ZSBtZXRob2RzLgotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6TWVkaWFTb3VyY2VQcml2YXRlOjpBZGRJZFN0YXR1cyBhZGRJZChjb25zdCBTdHJpbmcm
IGlkLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MpOwot
ICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZChjb25zdCBTdHJpbmcmIGlkKTsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6VGltZVJhbmdlcz4gYnVmZmVyZWQoY29uc3QgU3RyaW5nJiBp
ZCk7Ci0gICAgdmlydHVhbCBib29sIGFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBjb25zdCB1bnNp
Z25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZpcnR1YWwgYm9vbCBhYm9y
dChjb25zdCBTdHJpbmcmIGlkKTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpOwotICAg
IHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRP
ZlN0cmVhbShXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2V0VGltZXN0YW1wT2Zmc2V0KGNvbnN0IFN0cmluZyYgaWQsIGRv
dWJsZSBvZmZzZXQpOwotCi1wcml2YXRlOgotICAgIE93blB0cjxXZWJLaXQ6OldlYk1lZGlhU291
cmNlQ2xpZW50PiBtX2NsaWVudDsKLX07Ci0KLU1lZGlhU291cmNlUHJpdmF0ZUltcGw6Ok1lZGlh
U291cmNlUHJpdmF0ZUltcGwoUGFzc093blB0cjxXZWJLaXQ6OldlYk1lZGlhU291cmNlQ2xpZW50
PiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi17Ci19Ci0KLVdlYkNvcmU6Ok1lZGlh
U291cmNlUHJpdmF0ZTo6QWRkSWRTdGF0dXMgTWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6YWRkSWQo
Y29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgY29kZWNzKQotewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybiBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDsKLQotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkFkZElkU3RhdHVzPihtX2NsaWVudC0+
YWRkSWQoaWQsIHR5cGUsIGNvZGVjcykpOwotfQotCi1ib29sIE1lZGlhU291cmNlUHJpdmF0ZUlt
cGw6OnJlbW92ZUlkKGNvbnN0IFN0cmluZyYgaWQpCi17Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LT5yZW1vdmVJZChpZCk7
Ci19Ci0KLVBhc3NSZWZQdHI8V2ViQ29yZTo6VGltZVJhbmdlcz4gTWVkaWFTb3VyY2VQcml2YXRl
SW1wbDo6YnVmZmVyZWQoY29uc3QgU3RyaW5nJiBpZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50KQot
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6VGltZVJhbmdlczo6Y3JlYXRlKCk7Ci0KLSAgICBXZWJU
aW1lUmFuZ2VzIHdlYlJhbmdlcyA9IG1fY2xpZW50LT5idWZmZXJlZChpZCk7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OlRpbWVSYW5nZXM+IHJhbmdlcyA9IFdlYkNvcmU6OlRpbWVSYW5nZXM6OmNyZWF0
ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViUmFuZ2VzLnNpemUoKTsgKytpKQot
ICAgICAgICByYW5nZXMtPmFkZCh3ZWJSYW5nZXNbaV0uc3RhcnQsIHdlYlJhbmdlc1tpXS5lbmQp
OwotICAgIHJldHVybiByYW5nZXMucmVsZWFzZSgpOwotfQotCi1ib29sIE1lZGlhU291cmNlUHJp
dmF0ZUltcGw6OmFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LT5hcHBlbmQoaWQsIGRhdGEsIGxlbmd0
aCk7Ci19Ci0KLWJvb2wgTWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6YWJvcnQoY29uc3QgU3RyaW5n
JiBpZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gbV9jbGllbnQtPmFib3J0KGlkKTsKLX0KLQotZG91YmxlIE1lZGlhU291cmNlUHJp
dmF0ZUltcGw6OmR1cmF0aW9uKCkKLXsKLSAgICBpZiAoIW1fY2xpZW50KQotICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgIHJldHVybiBt
X2NsaWVudC0+ZHVyYXRpb24oKTsKLX0KLQotdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpz
ZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotfQotCi12b2lkIE1lZGlhU291cmNl
UHJpdmF0ZUltcGw6OmVuZE9mU3RyZWFtKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6RW5k
T2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9j
bGllbnQtPmVuZE9mU3RyZWFtKHN0YXRpY19jYXN0PFdlYk1lZGlhU291cmNlQ2xpZW50OjpFbmRP
ZlN0cmVhbVN0YXR1cz4oc3RhdHVzKSk7Ci19Ci0KLWJvb2wgTWVkaWFTb3VyY2VQcml2YXRlSW1w
bDo6c2V0VGltZXN0YW1wT2Zmc2V0KGNvbnN0IFN0cmluZyYgaWQsIGRvdWJsZSBvZmZzZXQpCi17
Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBt
X2NsaWVudC0+c2V0VGltZXN0YW1wT2Zmc2V0KGlkLCBvZmZzZXQpOwotfQotCiAKIFdlYk1lZGlh
U291cmNlSW1wbDo6V2ViTWVkaWFTb3VyY2VJbXBsKFBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFT
b3VyY2U+IG1lZGlhU291cmNlKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190361</attachid>
            <date>2013-02-26 14:28:26 -0800</date>
            <delta_ts>2013-02-27 14:43:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110798-20130226142440.patch</filename>
            <type>text/plain</type>
            <size>50394</size>
            <attacher name="Aaron Colwell">acolwell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGQ4M2JjYjI0NGU0YmEw
ZWNhMDA0M2VkNzA2ZDRlYjBjNDYwZmNlMC4uNGI4YmExMDBmZmZjNDc5Y2MwY2UzYmUzODFmYjVh
ZmUzNTFkMjkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTAyLTI2ICBBYXJv
biBDb2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZhY3RvciBTb3Vy
Y2VCdWZmZXIgbWV0aG9kcyBvdXQgb2YgTWVkaWFTb3VyY2VQcml2YXRlICYgV2ViTWVkaWFTb3Vy
Y2UKKyAgICAgICAgaW50byBTb3VyY2VCdWZmZXJQcml2YXRlICYgV2ViU291cmNlQnVmZmVyIHJl
c3BlY3RpdmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBObyB1c2VyIHZpc2libGUgYmVoYXZpb3IgaGFzIGNoYW5nZWQKKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmg6CisgICAgICAgIChNZWRpYVNvdXJjZSk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXI6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6c2V0
VGltZXN0YW1wT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YXBwZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YWJvcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXI6OmlzQ2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTb3VyY2VCdWZmZXIpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJMaXN0OjpTb3VyY2VCdWZmZXJMaXN0KToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaDoKKyAgICAgICAgKFNvdXJjZUJ1
ZmZlckxpc3QpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNvdXJjZUJ1ZmZlclByaXZhdGUpOiBDb250
YWlucyBtZXRob2RzIGV4dHJhY3RlZCBmcm9tIE1lZGlhUGxheWVyUHJpdmF0ZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6OlNvdXJjZUJ1ZmZlclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZTo6flNvdXJjZUJ1ZmZlclByaXZhdGUp
OgorCiAyMDEzLTAyLTI2ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgOCBiaXQgVGV4dFJ1bnMgZm9yIENocm9taXVtL0hhcmZC
dXp6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkwMmU0MTY2MjBjMzQ2ODAyYmUxNjM3
ZjU0NWM2NzRiYzRmM2FmNTguLmIxM2MzYmNhOTZjZDdmMjJlMTY0NzFiMTlhZWU4YThmZTEzNjA4
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTMtMDIt
MjYgIEFhcm9uIENvbHdlbGwgIDxhY29sd2VsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRmFj
dG9yIFNvdXJjZUJ1ZmZlciBtZXRob2RzIG91dCBvZiBNZWRpYVNvdXJjZVByaXZhdGUgJiBXZWJN
ZWRpYVNvdXJjZQorICAgICAgICBpbnRvIFNvdXJjZUJ1ZmZlclByaXZhdGUgJiBXZWJTb3VyY2VC
dWZmZXIgcmVzcGVjdGl2ZWx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwNzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKwor
ICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYk1lZGlhU291cmNlQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViTWVkaWFTb3VyY2VDbGllbnQp
OgorICAgICAgICAqIHB1YmxpYy9XZWJTb3VyY2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJTb3VyY2VCdWZmZXIpOiBDb250YWlucyBTb3VyY2VCdWZmZXIgbWV0aG9k
cyBleHRyYWN0ZWQgZnJvbSBXZWJNZWRpYVNvdXJjZS4KKyAgICAgICAgKFdlYktpdDo6V2ViU291
cmNlQnVmZmVyOjp+V2ViU291cmNlQnVmZmVyKToKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hp
bmdFbnVtcy5jcHA6CisgICAgICAgICogc3JjL01lZGlhU291cmNlUHJpdmF0ZUltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTb3VyY2VQcml2YXRlSW1w
bDo6TWVkaWFTb3VyY2VQcml2YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU291cmNl
UHJpdmF0ZUltcGw6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU291
cmNlUHJpdmF0ZUltcGw6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTb3VyY2VQ
cml2YXRlSW1wbDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNvdXJjZVBy
aXZhdGVJbXBsOjplbmRPZlN0cmVhbSk6CisgICAgICAgICogc3JjL01lZGlhU291cmNlUHJpdmF0
ZUltcGwuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChNZWRpYVNvdXJjZVByaXZhdGVJ
bXBsKTogQWRhcHRzIE1lZGlhU291cmNlUHJpdmF0ZSBpbnRlcmZhY2UgdG8gV2ViTWVkaWFTb3Vy
Y2VDbGllbnQuCisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU291cmNlUHJpdmF0ZUltcGw6On5NZWRp
YVNvdXJjZVByaXZhdGVJbXBsKToKKyAgICAgICAgKiBzcmMvU291cmNlQnVmZmVyUHJpdmF0ZUlt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVmZmVy
UHJpdmF0ZUltcGw6OlNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
U291cmNlQnVmZmVyUHJpdmF0ZUltcGw6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYktpdDo6U291
cmNlQnVmZmVyUHJpdmF0ZUltcGw6OmFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1
ZmZlclByaXZhdGVJbXBsOjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclBy
aXZhdGVJbXBsOjpzZXRUaW1lc3RhbXBPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VC
dWZmZXJQcml2YXRlSW1wbDo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6CisgICAgICAgICogc3Jj
L1NvdXJjZUJ1ZmZlclByaXZhdGVJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
U291cmNlQnVmZmVyUHJpdmF0ZUltcGwpOiBBZGFwdHMgU291cmNlQnVmZmVyUHJpdmF0ZSBpbnRl
cmZhY2UgdG8gV2ViU291cmNlQnVmZmVyLgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VCdWZmZXJQ
cml2YXRlSW1wbDo6flNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsKToKKyAgICAgICAgKiBzcmMvV2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYk1lZGlhU291cmNlQ2xpZW50
SW1wbCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU291cmNlQnVmZmVySW1wbCk6
IFRlbXBvcmFyeSBpbXBsZW1lbnRhdGlvbiBvZiBXZWJTb3VyY2VCdWZmZXIgdG8ga2VlcCB0aGlu
Z3Mgd29ya2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsIHRoZSBDaHJv
bWl1bSBzaWRlIGNoYW5nZXMgbGFuZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTb3VyY2VD
bGllbnRJbXBsOjphZGRTb3VyY2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVNv
dXJjZUNsaWVudEltcGw6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTb3Vy
Y2VDbGllbnRJbXBsOjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU291
cmNlQ2xpZW50SW1wbDo6ZW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTb3VyY2VC
dWZmZXJJbXBsOjpXZWJTb3VyY2VCdWZmZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU291
cmNlQnVmZmVySW1wbDo6YnVmZmVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb3VyY2VCdWZm
ZXJJbXBsOjphcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb3VyY2VCdWZmZXJJbXBsOjph
Ym9ydCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvdXJjZUJ1ZmZlckltcGw6OnNldFRpbWVzdGFt
cE9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvdXJjZUJ1ZmZlckltcGw6OnJlbW92ZWRG
cm9tTWVkaWFTb3VyY2UpOgorICAgICAgICAqIHNyYy9XZWJNZWRpYVNvdXJjZUltcGwuY3BwOgor
CiAyMDEzLTAyLTI2ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgOCBiaXQgVGV4dFJ1bnMgZm9yIENocm9taXVtL0hhcmZCdXp6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2Uu
Y3BwCmluZGV4IGU2YmZlMjQyYWQyZDMyNDY3MzFhNzA2NDgwYThkNmIxMGVjNWJkN2MuLjgwY2Y2
YzEzOThiYTgzODI2ZjRhYzg0MWM2NDBjNjZlNWU0N2E3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNp
bmNsdWRlIDx3dGYvVWludDhBcnJheS5oPgogCkBAIC0xMzEsMjEgKzEzMiwxOCBAQCBTb3VyY2VC
dWZmZXIqIE1lZGlhU291cmNlOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiB0eXBlLCBF
eGNlcHRpb25Db2RlJiBlYwogICAgIH0KIAogICAgIC8vIDUuIENyZWF0ZSBhIG5ldyBTb3VyY2VC
dWZmZXIgb2JqZWN0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KLSAgICBTdHJpbmcgaWQgPSBt
X3NvdXJjZUJ1ZmZlcnMtPmdlbmVyYXRlVW5pcXVlSWQoKTsKLSAgICBpZiAoaWQgPT0gZW1wdHlT
dHJpbmcoKSkgewotICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQorICAgIE93blB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiBzb3VyY2VCdWZm
ZXJQcml2YXRlOworICAgIHN3aXRjaCAobV9wcml2YXRlLT5hZGRTb3VyY2VCdWZmZXIoY29udGVu
dFR5cGUudHlwZSgpLCBjb2RlY3MsICZzb3VyY2VCdWZmZXJQcml2YXRlKSkgeworICAgIGNhc2Ug
TWVkaWFTb3VyY2VQcml2YXRlOjpPazogeworICAgICAgICBBU1NFUlQoc291cmNlQnVmZmVyUHJp
dmF0ZSk7CisgICAgICAgIFJlZlB0cjxTb3VyY2VCdWZmZXI+IGJ1ZmZlciA9IFNvdXJjZUJ1ZmZl
cjo6Y3JlYXRlKHNvdXJjZUJ1ZmZlclByaXZhdGUucmVsZWFzZSgpLCB0aGlzKTsKIAotICAgIFJl
ZlB0cjxTb3VyY2VCdWZmZXI+IGJ1ZmZlciA9IFNvdXJjZUJ1ZmZlcjo6Y3JlYXRlKGlkLCB0aGlz
KTsKLQotICAgIHN3aXRjaCAobV9wcml2YXRlLT5hZGRJZChidWZmZXItPmlkKCksIGNvbnRlbnRU
eXBlLnR5cGUoKSwgY29kZWNzKSkgewotICAgIGNhc2UgTWVkaWFTb3VyY2VQcml2YXRlOjpPazoK
ICAgICAgICAgLy8gNi4gQWRkIHRoZSBuZXcgb2JqZWN0IHRvIHNvdXJjZUJ1ZmZlcnMgYW5kIGZp
cmUgYSBhZGRzb3VyY2VidWZmZXIgb24gdGhhdCBvYmplY3QuCiAgICAgICAgIG1fc291cmNlQnVm
ZmVycy0+YWRkKGJ1ZmZlcik7CiAgICAgICAgIG1fYWN0aXZlU291cmNlQnVmZmVycy0+YWRkKGJ1
ZmZlcik7CiAgICAgICAgIC8vIDcuIFJldHVybiB0aGUgbmV3IG9iamVjdCB0byB0aGUgY2FsbGVy
LgogICAgICAgICByZXR1cm4gYnVmZmVyLmdldCgpOworICAgIH0KICAgICBjYXNlIE1lZGlhU291
cmNlUHJpdmF0ZTo6Tm90U3VwcG9ydGVkOgogICAgICAgICAvLyAyIChjb250KS4gSWYgdHlwZSBj
b250YWlucyBhIE1JTUUgdHlwZSAuLi4gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggdGhlIHR5
cGVzIAogICAgICAgICAvLyBzcGVjaWZpZWQgZm9yIHRoZSBvdGhlciBTb3VyY2VCdWZmZXIgb2Jq
ZWN0cyBpbiBzb3VyY2VCdWZmZXJzLCB0aGVuIHRocm93CkBAIC0xOTEsNyArMTg5LDYgQEAgdm9p
ZCBNZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlciogYnVmZmVyLCBF
eGNlcHRpb25Db2RlJiBlYykKIAogICAgIC8vIDcuIERlc3Ryb3kgYWxsIHJlc291cmNlcyBmb3Ig
c291cmNlQnVmZmVyLgogICAgIG1fYWN0aXZlU291cmNlQnVmZmVycy0+cmVtb3ZlKGJ1ZmZlcik7
Ci0gICAgbV9wcml2YXRlLT5yZW1vdmVJZChidWZmZXItPmlkKCkpOwogCiAgICAgLy8gNC4gUmVt
b3ZlIHRyYWNrIGluZm9ybWF0aW9uIGZyb20gYXVkaW9UcmFja3MsIHZpZGVvVHJhY2tzLCBhbmQg
dGV4dFRyYWNrcyBmb3IgYWxsIHRyYWNrcyAKICAgICAvLyBhc3NvY2lhdGVkIHdpdGggc291cmNl
QnVmZmVyIGFuZCBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGNoYW5nZSBvbiB0aGUgbW9kaWZp
ZWQgbGlzdHMuCkBAIC0yNjMsNjIgKzI2MCw2IEBAIHZvaWQgTWVkaWFTb3VyY2U6OmVuZE9mU3Ry
ZWFtKGNvbnN0IFN0cmluZyYgZXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG1fcHJpdmF0
ZS0+ZW5kT2ZTdHJlYW0oZW9zU3RhdHVzKTsKIH0KIAotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBN
ZWRpYVNvdXJjZTo6YnVmZmVyZWQoY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUgfHwgbV9yZWFkeVN0YXRlID09IGNsb3NlZEtl
eXdvcmQoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wcml2YXRlLT5idWZmZXJlZChpZCk7Ci19Ci0K
LXZvaWQgTWVkaWFTb3VyY2U6OmFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghZGF0YS5nZXQo
KSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghbV9wcml2YXRlIHx8IG1fcmVhZHlTdGF0ZSA9PSBjbG9zZWRLZXl3
b3JkKCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gZW5kZWRLZXl3b3JkKCkpCi0gICAg
ICAgIHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+
YXBwZW5kKGlkLCBkYXRhLT5kYXRhKCksIGRhdGEtPmxlbmd0aCgpKSkgewotICAgICAgICBlYyA9
IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTb3Vy
Y2U6OmFib3J0KGNvbnN0IFN0cmluZyYgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlm
ICghbV9wcml2YXRlIHx8IG1fcmVhZHlTdGF0ZSAhPSBvcGVuS2V5d29yZCgpKSB7Ci0gICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fcHJpdmF0ZS0+YWJvcnQoaWQpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQotYm9vbCBNZWRpYVNvdXJjZTo6c2V0VGltZXN0YW1wT2Zmc2V0KGNvbnN0IFN0cmluZyYg
aWQsIGRvdWJsZSBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghbV9wcml2
YXRlIHx8IG1fcmVhZHlTdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkpIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
ICghbV9wcml2YXRlLT5zZXRUaW1lc3RhbXBPZmZzZXQoaWQsIG9mZnNldCkpIHsKLSAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBNZWRpYVNvdXJjZTo6c2V0UHJpdmF0ZUFuZE9wZW4o
UGFzc093blB0cjxNZWRpYVNvdXJjZVByaXZhdGU+IG1lZGlhU291cmNlUHJpdmF0ZSkKIHsKICAg
ICBBU1NFUlQobWVkaWFTb3VyY2VQcml2YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAppbmRleCA5NTM1OGQ3Y2I5ZDE3YzQ2YWIwYTk0
ZWY3NTJiN2I1Y2YxZDczMmU3Li4yNjA5MGFhM2RiYmMyZmFkNGUwZGU2OGYwNDQyOGZmMjdhNDlm
ZDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5oCkBAIC02NywxMSArNjcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByaXZhdGVB
bmRPcGVuKFBhc3NPd25QdHI8TWVkaWFTb3VyY2VQcml2YXRlPik7CiAKLSAgICBQYXNzUmVmUHRy
PFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKGNvbnN0IFN0cmluZyYgaWQsIEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPFVpbnQ4
QXJyYXk+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFib3J0KGNvbnN0IFN0cmlu
ZyYgaWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldFRpbWVzdGFtcE9mZnNldChjb25z
dCBTdHJpbmcmIGlkLCBkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIC8vIEV2ZW50VGFy
Z2V0IGludGVyZmFjZQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKaW5kZXggMWQ2
ZTYwNmE3YWI3ZDFkYzNlNzU4NDQyYWM2ZjE0NzJhN2JiNzM4Ni4uMmMwZjM3YzJjNzlmY2FlMGZm
NGE0YWI5NTMwOWYzYmEyNDEzYmQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcApAQCAtMzMsMTMgKzMzLDIwIEBACiAKICNp
ZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCisjaW5jbHVkZSAiTWVkaWFTb3VyY2UuaCIKKyNpbmNs
dWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9VaW50OEFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU291cmNl
QnVmZmVyOjpTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYVNv
dXJjZT4gc291cmNlKQotICAgIDogbV9pZChpZCkKK1Bhc3NSZWZQdHI8U291cmNlQnVmZmVyPiBT
b3VyY2VCdWZmZXI6OmNyZWF0ZShQYXNzT3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJj
ZUJ1ZmZlclByaXZhdGUsIFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+IHNvdXJjZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXJQcml2YXRlLCBzb3Vy
Y2UpKTsKK30KKworU291cmNlQnVmZmVyOjpTb3VyY2VCdWZmZXIoUGFzc093blB0cjxTb3VyY2VC
dWZmZXJQcml2YXRlPiBzb3VyY2VCdWZmZXJQcml2YXRlLCBQYXNzUmVmUHRyPE1lZGlhU291cmNl
PiBzb3VyY2UpCisgICAgOiBtX3ByaXZhdGUoc291cmNlQnVmZmVyUHJpdmF0ZSkKICAgICAsIG1f
c291cmNlKHNvdXJjZSkKICAgICAsIG1fdGltZXN0YW1wT2Zmc2V0KDApCiB7CkBAIC01MSwxMiAr
NTgsMTIgQEAgU291cmNlQnVmZmVyOjp+U291cmNlQnVmZmVyKCkKIAogUGFzc1JlZlB0cjxUaW1l
UmFuZ2VzPiBTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVkKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewotICAgIGlmICghbV9zb3VyY2UpIHsKKyAgICBpZiAoaXNDbG9zZWQoKSkgewogICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gbV9zb3VyY2UtPmJ1ZmZlcmVkKGlkKCksIGVjKTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5idWZmZXJlZCgpOwogfQogCiBkb3VibGUgU291cmNlQnVmZmVyOjp0aW1lc3RhbXBPZmZzZXQo
KSBjb25zdApAQCAtNjYsMzMgKzczLDYzIEBAIGRvdWJsZSBTb3VyY2VCdWZmZXI6OnRpbWVzdGFt
cE9mZnNldCgpIGNvbnN0CiAKIHZvaWQgU291cmNlQnVmZmVyOjpzZXRUaW1lc3RhbXBPZmZzZXQo
ZG91YmxlIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkg
eworICAgIGlmIChpc0Nsb3NlZCgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zb3VyY2UtPnNldFRpbWVzdGFt
cE9mZnNldChpZCgpLCBvZmZzZXQsIGVjKSkKLSAgICAgICAgbV90aW1lc3RhbXBPZmZzZXQgPSBv
ZmZzZXQ7CisgICAgaWYgKG1fc291cmNlLT5yZWFkeVN0YXRlKCkgPT0gTWVkaWFTb3VyY2U6OmVu
ZGVkS2V5d29yZCgpKQorICAgICAgICBtX3NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVNvdXJj
ZTo6b3BlbktleXdvcmQoKSk7CisKKyAgICBpZiAoIW1fcHJpdmF0ZS0+c2V0VGltZXN0YW1wT2Zm
c2V0KG9mZnNldCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX3RpbWVzdGFtcE9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9p
ZCBTb3VyY2VCdWZmZXI6OmFwcGVuZChQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGRhdGEsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIGlmICghbV9zb3VyY2UpIHsKKyAgICBpZiAoaXNDbG9zZWQo
KSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbV9zb3VyY2UtPmFwcGVuZChpZCgpLCBkYXRhLCBlYyk7CisgICAgaWYgKCFk
YXRhLmdldCgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc291cmNlLT5yZWFkeVN0YXRlKCkgPT0gTWVkaWFT
b3VyY2U6OmVuZGVkS2V5d29yZCgpKQorICAgICAgICBtX3NvdXJjZS0+c2V0UmVhZHlTdGF0ZShN
ZWRpYVNvdXJjZTo6b3BlbktleXdvcmQoKSk7CisKKyAgICBpZiAoIW1fcHJpdmF0ZS0+YXBwZW5k
KGRhdGEtPmRhdGEoKSwgZGF0YS0+bGVuZ3RoKCkpKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OmFib3J0
KEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghbV9zb3VyY2UpIHsKKyAgICBpZiAoIW1f
cHJpdmF0ZSB8fCAhbV9zb3VyY2UgfHwgbV9zb3VyY2UtPnJlYWR5U3RhdGUoKSAhPSBNZWRpYVNv
dXJjZTo6b3BlbktleXdvcmQoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zb3VyY2UtPmFib3J0KGlkKCksIGVjKTsK
KyAgICBtX3ByaXZhdGUtPmFib3J0KCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyOjpjbGVhcigp
Cit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5yZW1vdmVkRnJvbU1l
ZGlhU291cmNlKCk7CisgICAgbV9zb3VyY2UuY2xlYXIoKTsKKyAgICBtX3ByaXZhdGUuY2xlYXIo
KTsKK30KKworYm9vbCBTb3VyY2VCdWZmZXI6OmlzQ2xvc2VkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIW1fcHJpdmF0ZSB8fCAhbV9zb3VyY2UgfHwgbV9zb3VyY2UtPnJlYWR5U3RhdGUoKSA9PSBN
ZWRpYVNvdXJjZTo6Y2xvc2VkS2V5d29yZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIu
aAppbmRleCA3ZDFlNTg2MWMwZjIxZGRlZWFjZDM0N2E3OGNiZjIzZTAzM2UzYjdjLi5lNTJiZGNi
Mzc4MzdjMGE4MDYzNGE1ODg3ZjMxODZmNzRjNzcxMGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKQEAgLTM0LDQzICszNCwzOCBA
QAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQorY2xhc3MgTWVkaWFTb3VyY2U7CitjbGFzcyBT
b3VyY2VCdWZmZXJQcml2YXRlOwogY2xhc3MgVGltZVJhbmdlczsKIAogY2xhc3MgU291cmNlQnVm
ZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8U291cmNlQnVmZmVyPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U291cmNlQnVmZmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgUGFz
c1JlZlB0cjxNZWRpYVNvdXJjZT4gc291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTb3VyY2VCdWZmZXIoaWQsIHNvdXJjZSkpOwotICAgIH0KKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTb3VyY2VCdWZmZXI+IGNyZWF0ZShQYXNzT3duUHRyPFNvdXJjZUJ1ZmZlclByaXZh
dGU+LCBQYXNzUmVmUHRyPE1lZGlhU291cmNlPik7CiAKICAgICB2aXJ0dWFsIH5Tb3VyY2VCdWZm
ZXIoKTsKIAorICAgIC8vIFNvdXJjZUJ1ZmZlci5pZGwgbWV0aG9kcwogICAgIFBhc3NSZWZQdHI8
VGltZVJhbmdlcz4gYnVmZmVyZWQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCiAgICAgZG91Ymxl
IHRpbWVzdGFtcE9mZnNldCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGltZXN0YW1wT2Zmc2V0KGRv
dWJsZSwgRXhjZXB0aW9uQ29kZSYpOwotCiAgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxVaW50
OEFycmF5PiBkYXRhLCBFeGNlcHRpb25Db2RlJik7Ci0KICAgICB2b2lkIGFib3J0KEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZDsgfQogCi0gICAgdm9pZCBjbGVhcigpIHsgbV9zb3VyY2UuY2xlYXIoKTsgfQorICAgIHZvaWQg
Y2xlYXIoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTb3VyY2VCdWZmZXIoY29uc3QgU3Ry
aW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4pOworICAgIFNvdXJjZUJ1ZmZlcihQYXNz
T3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+LCBQYXNzUmVmUHRyPE1lZGlhU291cmNlPik7CisK
KyAgICBib29sIGlzQ2xvc2VkKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgbV9pZDsKKyAgICBPd25Q
dHI8U291cmNlQnVmZmVyUHJpdmF0ZT4gbV9wcml2YXRlOwogICAgIFJlZlB0cjxNZWRpYVNvdXJj
ZT4gbV9zb3VyY2U7Ci0gICAgCisKICAgICBkb3VibGUgbV90aW1lc3RhbXBPZmZzZXQ7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlckxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXJMaXN0LmNwcAppbmRleCA1ODM3MjRiYTE1NTk1ODRiZTUzZjdmZGFjODlkMzE1MjYwYWM4
ODViLi45ZGI1ZmE0MTFlYjJhYWJjNmU0NDJmNGFhOWUyNzBmNDNkNzY3NmU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlz
dC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUg
IlNvdXJjZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw3ICs0Myw2IEBA
IFNvdXJjZUJ1ZmZlckxpc3Q6OlNvdXJjZUJ1ZmZlckxpc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJpY0V2
ZW50UXVldWUqIGFzeW5jRXZlbnRRdWV1ZSkKICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dChjb250ZXh0KQogICAgICwgbV9hc3luY0V2ZW50UXVldWUoYXN5bmNFdmVudFF1ZXVlKQotICAg
ICwgbV9sYXN0U291cmNlQnVmZmVySWQoMCkKIHsKIH0KIApAQCAtODIsMzQgKzgyLDYgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJMaXN0OjpjbGVhcigpCiAgICAgICAgIHJlbW92ZShtX2xpc3RbaV0uZ2V0
KCkpOwogfQogCi1TdHJpbmcgU291cmNlQnVmZmVyTGlzdDo6Z2VuZXJhdGVVbmlxdWVJZCgpCi17
Ci0gICAgLy8gRW5zdXJlIGEgdW5pcXVlIGlkLiBVbnRpbCBtX2xhc3RTb3VyY2VCdWZmZXJJZCB3
cmFwcyBhcm91bmQgKHZlcnkgdW5saWtlbHkpLAotICAgIC8vIHRoaXMgbG9vcCB3aWxsIGV4aXQg
YWZ0ZXIgb25lIGNoZWNrLiBJZiBtX2xhc3RTb3VyY2VCdWZmZXJJZCBkb2VzIHdyYXAsCi0gICAg
Ly8gdGhpcyBsb29wIG1heSBydW4gYXMgbWFueSB0aW1lcyBhcyB0aGUgc2l6ZSBvZiBtX2xpc3Qs
IGJ1dCBpbiBtb3N0Ci0gICAgLy8gY2FzZXMgdGhhdCBzaG91bGQgYmUgbGVzcyB0aGFuIDEwLiBX
ZSBtYXkgd2FudCB0byBpbnZlc3RpZ2F0ZSBhIG1vcmUKLSAgICAvLyBlZmZpY2llbnQgYXBwcm9h
Y2ggaWYgbWFueSBtb3JlIFNvdXJjZUJ1ZmZlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIGZ1dHVyZS4K
LSAgICBzaXplX3QgbmV4dFNvdXJjZUJ1ZmZlcklkID0gbV9sYXN0U291cmNlQnVmZmVySWQgKyAx
OwotCi0gICAgd2hpbGUgKGNvbnRhaW5zKG5leHRTb3VyY2VCdWZmZXJJZCkpIHsKLSAgICAgICAg
aWYgKG5leHRTb3VyY2VCdWZmZXJJZCA9PSBtX2xhc3RTb3VyY2VCdWZmZXJJZCkKLSAgICAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICBuZXh0U291cmNlQnVmZmVySWQrKzsK
LSAgICB9Ci0gICAgbV9sYXN0U291cmNlQnVmZmVySWQgPSBuZXh0U291cmNlQnVmZmVySWQ7Ci0K
LSAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobmV4dFNvdXJjZUJ1ZmZlcklkKTsKLX0KLQotYm9v
bCBTb3VyY2VCdWZmZXJMaXN0Ojpjb250YWlucyhzaXplX3QgaWQpIGNvbnN0Ci17Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
bGlzdFtpXS0+aWQoKSA9PSBTdHJpbmc6Om51bWJlcihpZCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNvdXJjZUJ1ZmZlckxp
c3Q6OmNyZWF0ZUFuZEZpcmVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKIHsK
ICAgICBBU1NFUlQobV9hc3luY0V2ZW50UXVldWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAppbmRleCBhOTVhODM3Njhi
YzYzZjhhMGQyYTg3NjcyMjE1NzljOTAzNzBkYWE5Li4wZDQ3NjRlMTNkMTFhMTQwZTg5MTkxYTU3
OWE3ZmNkMDRlYjE5NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaApAQCAtNTcsMTAgKzU3LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgcmVtb3ZlKFNvdXJjZUJ1ZmZlciopOwogICAgIHZvaWQgY2xlYXIoKTsKIAotICAg
IC8vIEdlbmVyYXRlcyBhbiBpZCBmb3IgYWRkaW5nIGEgbmV3IFNvdXJjZUJ1ZmZlci4gUmV0dXJu
cyBhbiBlbXB0eSBzdHJpbmcKLSAgICAvLyBpZiB0aGlzIFNvdXJjZUJ1ZmZlckxpc3QgaXMgZnVs
bC4KLSAgICBTdHJpbmcgZ2VuZXJhdGVVbmlxdWVJZCgpOwotCiAgICAgLy8gRXZlbnRUYXJnZXQg
aW50ZXJmYWNlCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERTsKQEAgLTc1LDcgKzcxLDYgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBTb3VyY2VCdWZmZXJMaXN0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBHZW5lcmljRXZlbnRRdWV1ZSopOwogCi0gICAgYm9vbCBjb250YWlucyhzaXpl
X3QgaWQpIGNvbnN0OwogICAgIHZvaWQgY3JlYXRlQW5kRmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYpOwogCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyBy
ZWYoKTsgfQpAQCAtODYsNyArODEsNiBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNFdmVudFF1ZXVl
KiBtX2FzeW5jRXZlbnRRdWV1ZTsKIAogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPiA+
IG1fbGlzdDsKLSAgICBzaXplX3QgbV9sYXN0U291cmNlQnVmZmVySWQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApp
bmRleCA3ZjMyNjIzYjA3ZTVkOTExN2QxNzRjODMyOWU3OWFhYjdmZTIyYjM5Li5iYzcyNzA1MTIx
NjIwZjA3ZGRiMjEzMmIwYTZhYWI3ZWFlZWE5ZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0jaW5j
bHVkZSAiVVVJRC5oIgogI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5o
CmluZGV4IDhkOTFkYTBjZmQwMTBlNjdmYWI3NWM1Y2FjYWQzZjZiZmY5MGQxZjkuLmRlMTc1Y2Rm
N2Y2MTg0ZjI1NzcxNWEwM2E5OGY4Y2U5NTQxNmEzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5oCkBAIC0zMiwyNyAr
MzIsMjMgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKLSNpbmNsdWRlICJUaW1lUmFu
Z2VzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZTsKKwogY2xhc3MgTWVkaWFTb3VyY2VQ
cml2YXRlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVNvdXJjZVByaXZhdGUpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBNZWRpYVNvdXJjZVByaXZhdGUo
KSB7IH0KICAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGUoKSB7IH0KIAotICAgIGVudW0g
QWRkSWRTdGF0dXMgeyBPaywgTm90U3VwcG9ydGVkLCBSZWFjaGVkSWRMaW1pdCB9OwotICAgIHZp
cnR1YWwgQWRkSWRTdGF0dXMgYWRkSWQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNzKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHJlbW92ZUlkKGNvbnN0IFN0cmluZyYgaWQpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
VGltZVJhbmdlcz4gYnVmZmVyZWQoY29uc3QgU3RyaW5nJiBpZCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBhcHBlbmQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKSA9IDA7CisgICAgZW51bSBBZGRTdGF0dXMgeyBPaywgTm90U3VwcG9y
dGVkLCBSZWFjaGVkSWRMaW1pdCB9OworICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1
ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MsIE93
blB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiopID0gMDsKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJh
dGlvbigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGFib3J0KGNvbnN0IFN0cmluZyYgaWQpID0gMDsKICAgICBlbnVtIEVu
ZE9mU3RyZWFtU3RhdHVzIHsgRW9zTm9FcnJvciwgRW9zTmV0d29ya0Vycm9yLCBFb3NEZWNvZGVF
cnJvciB9OwogICAgIHZpcnR1YWwgdm9pZCBlbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZXRUaW1lc3RhbXBPZmZzZXQoY29uc3QgU3RyaW5nJiBp
ZCwgZG91YmxlIG9mZnNldCkgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFh
MGVjZWQyYzBhNjIwMDk0M2NiNGMyODZjODlmNzEyODYwNDkwYzAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaWZuZGVmIFNvdXJjZUJ1ZmZlclByaXZhdGVfaAorI2RlZmluZSBTb3Vy
Y2VCdWZmZXJQcml2YXRlX2gKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbmNsdWRl
ICJUaW1lUmFuZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlQnVm
ZmVyUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgU291cmNlQnVmZmVyUHJpdmF0ZSgpIHsgfQorICAg
IHZpcnR1YWwgflNvdXJjZUJ1ZmZlclByaXZhdGUoKSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5k
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBhYm9ydCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VGltZXN0YW1wT2Zm
c2V0KGRvdWJsZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNl
KCkgPSAwOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCmluZGV4IDgyMjU5YzIwZTM0NmY4MWNkZDlhYWM4N2E1ZTUwNzNhNGZhYzllMmEuLjc2Mzlk
MjIzNmZlNDQyYzk2ZmRiYzFiOTgyZDAzY2RhMDZiMTRhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKQEAgLTM4Nyw2ICszODcsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dl
YlNjcmVlbkluZm9GYWN0b3J5Lm1tJywKICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJTdWJz
dHJpbmdVdGlsLm1tJywKICAgICAgICAgICAgICAgICAnc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmgnLAogICAg
ICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL3BhaW50aW5nL0NvbnRpbnVvdXNQYWludGVyLmgnLApAQCAtNDAzLDYgKzQwNSw4
IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9TY3JvbGxiYXJHcm91cC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvU2Nyb2xsYmFyR3JvdXAuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Tb3VyY2VCdWZm
ZXJQcml2YXRlSW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvU291cmNlQnVmZmVyUHJp
dmF0ZUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TcGVlY2hJbnB1dENsaWVudEltcGwu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaElucHV0Q2xpZW50SW1wbC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU291cmNlQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVNvdXJjZUNsaWVu
dC5oCmluZGV4IDNlNjUwOTA0YmI0MmJmOGZmYTBlNzZjNzM3YjlmZWVkYzFhZTlmMTAuLjc2YzQy
MTljZDY1YmE5MjlhMTBhYWY2MGVkMDRlYzM0NWE3YzlmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU291cmNlQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTb3VyY2VDbGllbnQuaApAQCAtMzYsMTIg
KzM2LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJTb3VyY2VCdWZmZXI7
CisKIGNsYXNzIFdlYk1lZGlhU291cmNlQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBlbnVtIEFkZElk
U3RhdHVzIHsKLSAgICAgICAgQWRkSWRTdGF0dXNPaywKLSAgICAgICAgQWRkSWRTdGF0dXNOb3RT
dXBwb3J0ZWQsCi0gICAgICAgIEFkZElkU3RhdHVzUmVhY2hlZElkTGltaXQKKyAgICBlbnVtIEFk
ZFN0YXR1cyB7CisgICAgICAgIEFkZFN0YXR1c09rLAorICAgICAgICBBZGRTdGF0dXNOb3RTdXBw
b3J0ZWQsCisgICAgICAgIEFkZFN0YXR1c1JlYWNoZWRJZExpbWl0CiAgICAgfTsKIAogICAgIGVu
dW0gRW5kT2ZTdHJlYW1TdGF0dXMgewpAQCAtNTIsMTUgKzU0LDEwIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgfldlYk1lZGlhU291cmNlQ2xpZW50KCkgeyB9CiAKLSAgICB2aXJ0dWFsIEFkZElk
U3RhdHVzIGFkZElkKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwg
Y29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGNvZGVjcykgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCByZW1vdmVJZChjb25zdCBXZWJTdHJpbmcmIGlkKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJUaW1l
UmFuZ2VzIGJ1ZmZlcmVkKGNvbnN0IFdlYlN0cmluZyYgaWQpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgYXBwZW5kKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhYm9ydChjb25zdCBXZWJT
dHJpbmcmIGlkKSA9IDA7CisgICAgdmlydHVhbCBBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKGNv
bnN0IFdlYlN0cmluZyYgdHlwZSwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGNvZGVjcywg
V2ViU291cmNlQnVmZmVyKiopID0gMDsKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGVuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIHNldFRpbWVzdGFtcE9mZnNldChjb25zdCBXZWJTdHJpbmcmIGlkLCBkb3VibGUgb2Zmc2V0
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU291cmNlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2QzNWM1MGQwMjgy
MmJhZmIwMWNiMDNhY2U3YmIyOTM2ZDMxZGQ4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNvdXJjZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlNvdXJjZUJ1ZmZlcl9oCisjZGVmaW5lIFdlYlNvdXJjZUJ1ZmZlcl9oCisKKyNp
bmNsdWRlICJXZWJUaW1lUmFuZ2UuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YlNvdXJjZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViU291cmNlQnVmZmVyKCkg
eyB9CisKKyAgICB2aXJ0dWFsIFdlYlRpbWVSYW5nZXMgYnVmZmVyZWQoKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGFwcGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoKSA9IDA7CisgICAgdmlydHVhbCBib29s
IHNldFRpbWVzdGFtcE9mZnNldChkb3VibGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
ZEZyb21NZWRpYVNvdXJjZSgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNo
aW5nRW51bXMuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdF
bnVtcy5jcHAKaW5kZXggOGFkMDg0NDQyY2YxMmIwOWUxNDJkZTgxM2E0MzUyYzFmNDA3OGQxZS4u
OGY0MmM2ZmU3Zjc1YzIzMzg3YTY0MGI1NDM0OTFlYWZjMzQ5ZTcyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKQEAgLTQxMyw5
ICs0MTMsOSBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpQ
cmVsb2FkTWV0YURhdGEsIE1lZGlhUGxheWVyOjpNZXRhRAogQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJNZWRpYVBsYXllcjo6UHJlbG9hZEF1dG8sIE1lZGlhUGxheWVyOjpBdXRvKTsK
IAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYk1lZGlhU291cmNlQ2xpZW50OjpBZGRJZFN0YXR1c09rLCBNZWRpYVNvdXJjZVByaXZhdGU6
Ok9rKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6
OkFkZElkU3RhdHVzTm90U3VwcG9ydGVkLCBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRl
ZCk7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhU291cmNlQ2xpZW50OjpB
ZGRJZFN0YXR1c1JlYWNoZWRJZExpbWl0LCBNZWRpYVNvdXJjZVByaXZhdGU6OlJlYWNoZWRJZExp
bWl0KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6
OkFkZFN0YXR1c09rLCBNZWRpYVNvdXJjZVByaXZhdGU6Ok9rKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkFkZFN0YXR1c05vdFN1cHBvcnRlZCwg
TWVkaWFTb3VyY2VQcml2YXRlOjpOb3RTdXBwb3J0ZWQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkU3RhdHVzUmVhY2hlZElkTGltaXQsIE1l
ZGlhU291cmNlUHJpdmF0ZTo6UmVhY2hlZElkTGltaXQpOwogCiBDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk1lZGlhU291cmNlQ2xpZW50OjpFbmRPZlN0cmVhbVN0YXR1c05vRXJyb3Is
IE1lZGlhU291cmNlUHJpdmF0ZTo6RW9zTm9FcnJvcik7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYk1lZGlhU291cmNlQ2xpZW50OjpFbmRPZlN0cmVhbVN0YXR1c05ldHdvcmtFcnJv
ciwgTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOZXR3b3JrRXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTb3VyY2VQcml2YXRlSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xMTgxZmZkYzRmNzkxNzdhNTZmY2U5NjQ0NTc0MDgxYjYzMjFlM2YzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTb3VyY2VQcml2YXRlSW1w
bC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRp
YVNvdXJjZVByaXZhdGVJbXBsLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUltcGwuaCIKKyNpbmNsdWRlICJXZWJNZWRpYVNvdXJj
ZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlNvdXJjZUJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitNZWRpYVNvdXJjZVByaXZhdGVJ
bXBsOjpNZWRpYVNvdXJjZVByaXZhdGVJbXBsKFBhc3NPd25QdHI8V2ViS2l0OjpXZWJNZWRpYVNv
dXJjZUNsaWVudD4gY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworfQorCitXZWJD
b3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1cyBNZWRpYVNvdXJjZVByaXZhdGVJbXBs
OjphZGRTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgY29kZWNzLAorICAgIE93blB0cjxXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlPiogc291
cmNlQnVmZmVyKQoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDsKKworICAgIFdlYlNvdXJjZUJ1ZmZl
ciogd2ViU291cmNlQnVmZmVyID0gMDsKKyAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6
OkFkZFN0YXR1cyByZXN1bHQgPQorICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYVNv
dXJjZVByaXZhdGU6OkFkZFN0YXR1cz4obV9jbGllbnQtPmFkZFNvdXJjZUJ1ZmZlcih0eXBlLCBj
b2RlY3MsICZ3ZWJTb3VyY2VCdWZmZXIpKTsKKworICAgIGlmIChyZXN1bHQgPT0gV2ViQ29yZTo6
TWVkaWFTb3VyY2VQcml2YXRlOjpPaykgeworICAgICAgICBBU1NFUlQod2ViU291cmNlQnVmZmVy
KTsKKyAgICAgICAgKnNvdXJjZUJ1ZmZlciA9IGFkb3B0UHRyKG5ldyBTb3VyY2VCdWZmZXJQcml2
YXRlSW1wbChhZG9wdFB0cih3ZWJTb3VyY2VCdWZmZXIpKSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2RvdWJsZSBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpkdXJhdGlvbigpCit7
CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4gbV9jbGllbnQtPmR1cmF0aW9uKCk7Cit9
CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0
aW9uKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNldER1cmF0aW9u
KGR1cmF0aW9uKTsKK30KKwordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjplbmRPZlN0cmVh
bShXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykK
K3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5lbmRPZlN0cmVhbShzdGF0
aWNfY2FzdDxXZWJNZWRpYVNvdXJjZUNsaWVudDo6RW5kT2ZTdHJlYW1TdGF0dXM+KHN0YXR1cykp
OworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvTWVkaWFTb3VyY2VQcml2YXRlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
TWVkaWFTb3VyY2VQcml2YXRlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MzE4ZTA3ZjI2OWJiYWM5MmE3
ZmI4M2YyNjJlM2E4ZTk0Y2E0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgTWVkaWFTb3VyY2VQcml2YXRlSW1wbF9oCisjZGVmaW5lIE1lZGlhU291cmNlUHJpdmF0ZUlt
cGxfaAorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworI2luY2x1ZGUgIk1lZGlhU291cmNl
UHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTWVkaWFTb3VyY2VD
bGllbnQ7CisKK2NsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUltcGwgOiBwdWJsaWMgV2ViQ29yZTo6
TWVkaWFTb3VyY2VQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZWRpYVNvdXJjZVBy
aXZhdGVJbXBsKFBhc3NPd25QdHI8V2ViTWVkaWFTb3VyY2VDbGllbnQ+KTsKKyAgICB2aXJ0dWFs
IH5NZWRpYVNvdXJjZVByaXZhdGVJbXBsKCkgeyB9CisKKyAgICAvLyBNZWRpYVNvdXJjZVByaXZh
dGUgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6QWRk
U3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBjb2RlY3MsCisgICAgICAgIE93blB0cjxXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlPiopOworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCk7CisgICAgdmlydHVhbCB2b2lk
IHNldER1cmF0aW9uKGRvdWJsZSk7CisgICAgdmlydHVhbCB2b2lkIGVuZE9mU3RyZWFtKFdlYkNv
cmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpOworCitwcml2YXRlOgor
ICAgIE93blB0cjxXZWJLaXQ6OldlYk1lZGlhU291cmNlQ2xpZW50PiBtX2NsaWVudDsKK307CisK
K30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU291cmNlQnVmZmVyUHJpdmF0ZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU291cmNlQnVmZmVyUHJpdmF0ZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1OWQzNmQ1MDZm
ZDlhYTAyYTM2YjkwYmQ5MjEzNzA1NTdhNzFiODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5jcHAKQEAgLTAsMCAr
MSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRl
SW1wbC5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworI2luY2x1ZGUgIldlYlNvdXJj
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU291cmNlQnVmZmVyUHJpdmF0ZUlt
cGw6OlNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsKFBhc3NPd25QdHI8V2ViU291cmNlQnVmZmVyPiBz
b3VyY2VCdWZmZXIpCisgICAgOiBtX3NvdXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXIpCit7Cit9CisK
K1Bhc3NSZWZQdHI8V2ViQ29yZTo6VGltZVJhbmdlcz4gU291cmNlQnVmZmVyUHJpdmF0ZUltcGw6
OmJ1ZmZlcmVkKCkKK3sKKyAgICBpZiAoIW1fc291cmNlQnVmZmVyKQorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6VGltZVJhbmdlczo6Y3JlYXRlKCk7CisKKyAgICBXZWJUaW1lUmFuZ2VzIHdlYlJh
bmdlcyA9IG1fc291cmNlQnVmZmVyLT5idWZmZXJlZCgpOworICAgIFJlZlB0cjxXZWJDb3JlOjpU
aW1lUmFuZ2VzPiByYW5nZXMgPSBXZWJDb3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYlJhbmdlcy5zaXplKCk7ICsraSkKKyAgICAgICAgcmFu
Z2VzLT5hZGQod2ViUmFuZ2VzW2ldLnN0YXJ0LCB3ZWJSYW5nZXNbaV0uZW5kKTsKKyAgICByZXR1
cm4gcmFuZ2VzLnJlbGVhc2UoKTsKK30KKworYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlSW1wbDo6
YXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICBpZiAoIW1fc291cmNlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IG1fc291cmNlQnVmZmVyLT5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKK30KKworYm9vbCBTb3VyY2VC
dWZmZXJQcml2YXRlSW1wbDo6YWJvcnQoKQoreworICAgIGlmICghbV9zb3VyY2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zb3VyY2VCdWZmZXItPmFib3J0KCk7
Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUltcGw6OnNldFRpbWVzdGFtcE9mZnNldChk
b3VibGUgb2Zmc2V0KQoreworICAgIGlmICghbV9zb3VyY2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBtX3NvdXJjZUJ1ZmZlci0+c2V0VGltZXN0YW1wT2Zmc2V0
KG9mZnNldCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUltcGw6OnJlbW92ZWRGcm9t
TWVkaWFTb3VyY2UoKQoreworICAgIGlmICghbV9zb3VyY2VCdWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3NvdXJjZUJ1ZmZlci0+cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpOworICAgIG1f
c291cmNlQnVmZmVyLmNsZWFyKCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvU291cmNlQnVmZmVyUHJpdmF0ZUltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ZmVkMTVmODEzNmZhYzQ0NDNkZWU5M2RiZmQyZDE2NjdiZTI1OWIzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU291cmNlQnVmZmVyUHJpdmF0ZUltcGwu
aApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTb3VyY2VCdWZmZXJQcml2YXRlSW1wbF9oCisjZGVm
aW5lIFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsX2gKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
CisKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJTb3VyY2VCdWZmZXI7CisKK2NsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBs
IDogcHVibGljIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGUgeworcHVibGljOgorICAgIGV4
cGxpY2l0IFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsKFBhc3NPd25QdHI8V2ViU291cmNlQnVmZmVy
Pik7CisgICAgdmlydHVhbCB+U291cmNlQnVmZmVyUHJpdmF0ZUltcGwoKSB7IH0KKworICAgIC8v
IFNvdXJjZUJ1ZmZlclByaXZhdGUgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6VGltZVJhbmdlcz4gYnVmZmVyZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kKGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCBi
b29sIGFib3J0KCk7CisgICAgdmlydHVhbCBib29sIHNldFRpbWVzdGFtcE9mZnNldChkb3VibGUp
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNlKCk7CisKK3ByaXZhdGU6
CisgICAgT3duUHRyPFdlYlNvdXJjZUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7Cit9OworCisKK30K
KworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCmluZGV4IDRjOGRmODkyNzdjNTU4NTU2Mjgx
MWM3NWVjMjdmYmE5YjZkMmRiNDguLjJiYjc1MjI5ZDQ4YmFlMjk4ZGEwMGNmOTViODU3MWE1NWRh
ODhhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiVGlt
ZVJhbmdlcy5oIgorI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlICJXZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZUltcGwuaCIKQEAgLTI4LDYgKzI5LDcgQEAKICNpbmNsdWRlICJXZWJNZWRpYVBsYXllci5oIgog
I2luY2x1ZGUgIldlYk1lZGlhU291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFTb3Vy
Y2VJbXBsLmgiCisjaW5jbHVkZSAiV2ViU291cmNlQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2ViVmll
d0ltcGwuaCIKICNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDxwdWJsaWMv
V2ViQ1N0cmluZy5oPgpAQCAtNjAsMjAgKzYyLDM0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5X
ZWJNZWRpYVNvdXJjZUNsaWVudEltcGwoKTsKIAogICAgIC8vIFdlYk1lZGlhU291cmNlQ2xpZW50
IG1ldGhvZHMuCi0gICAgdmlydHVhbCBBZGRJZFN0YXR1cyBhZGRJZChjb25zdCBXZWJTdHJpbmcm
IGlkLCBjb25zdCBXZWJTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBj
b2RlY3MpOwotICAgIHZpcnR1YWwgYm9vbCByZW1vdmVJZChjb25zdCBXZWJTdHJpbmcmIGlkKTsK
LSAgICB2aXJ0dWFsIFdlYlRpbWVSYW5nZXMgYnVmZmVyZWQoY29uc3QgV2ViU3RyaW5nJiBpZCk7
Ci0gICAgdmlydHVhbCBib29sIGFwcGVuZChjb25zdCBXZWJTdHJpbmcmIGlkLCBjb25zdCB1bnNp
Z25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZpcnR1YWwgYm9vbCBhYm9y
dChjb25zdCBXZWJTdHJpbmcmIGlkKTsKKyAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRTb3VyY2VC
dWZmZXIoY29uc3QgV2ViU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
Y29kZWNzLCBXZWJTb3VyY2VCdWZmZXIqKik7CiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24o
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKTsKICAgICB2aXJ0dWFsIHZv
aWQgZW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMpOwotICAgIHZpcnR1YWwgYm9vbCBzZXRU
aW1lc3RhbXBPZmZzZXQoY29uc3QgV2ViU3RyaW5nJiBpZCwgZG91YmxlIG9mZnNldCk7CiAKIHBy
aXZhdGU6CiAgICAgV2ViTWVkaWFQbGF5ZXIqIG1fd2ViTWVkaWFQbGF5ZXI7CiB9OwogCisvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgY2xhc3Mgb25jZSB0aGUgQ2hyb21pdW0gY29kZSBpbXBsZW1lbnRz
IGl0cyBvd24KKy8vIHZlcnNpb24gb2YgV2ViTWVkaWFQbGF5ZXI6OmxvYWQoV2ViVVJMLCBXZWJN
ZWRpYVNvdXJjZSwgQ09SU01vZGUpLgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMDM3MQorY2xhc3MgV2ViU291cmNlQnVmZmVySW1wbCA6IHB1YmxpYyBXZWJT
b3VyY2VCdWZmZXIgeworcHVibGljOgorICAgIFdlYlNvdXJjZUJ1ZmZlckltcGwoV2ViTWVkaWFQ
bGF5ZXIqLCBjb25zdCBXZWJTdHJpbmcmIGlkKTsKKworICAgIC8vIFdlYlNvdXJjZUJ1ZmZlciBt
ZXRob2RzLgorICAgIHZpcnR1YWwgV2ViVGltZVJhbmdlcyBidWZmZXJlZCgpOworICAgIHZpcnR1
YWwgYm9vbCBhcHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VGltZXN0
YW1wT2Zmc2V0KGRvdWJsZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3Vy
Y2UoKTsKKworcHJpdmF0ZToKKyAgICBXZWJNZWRpYVBsYXllciogbV93ZWJNZWRpYVBsYXllcjsK
KyAgICBXZWJTdHJpbmcgbV9pZDsKK307CisKIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6V2Vi
TWVkaWFTb3VyY2VDbGllbnRJbXBsKFdlYk1lZGlhUGxheWVyKiB3ZWJNZWRpYVBsYXllcikKICAg
ICA6IG1fd2ViTWVkaWFQbGF5ZXIod2ViTWVkaWFQbGF5ZXIpCiB7CkBAIC04Myw0OSArOTksNjUg
QEAgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjp+V2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsKCkK
IHsKIH0KIAotV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkFkZElkU3RhdHVzIFdlYk1lZGlhU291cmNl
Q2xpZW50SW1wbDo6YWRkSWQoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3QgV2ViU3RyaW5nJiB0
eXBlLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgY29kZWNzKQorV2ViTWVkaWFTb3VyY2VD
bGllbnQ6OkFkZFN0YXR1cyBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OmFkZFNvdXJjZUJ1ZmZl
cihjb25zdCBXZWJTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBjb2Rl
Y3MsCisgICAgV2ViU291cmNlQnVmZmVyKiogc291cmNlQnVmZmVyKQoreworICAgIFdlYlN0cmlu
ZyBpZCA9IFdlYkNvcmU6OmNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICBXZWJNZWRp
YVNvdXJjZUNsaWVudDo6QWRkU3RhdHVzIHJlc3VsdCA9IHN0YXRpY19jYXN0PFdlYk1lZGlhU291
cmNlQ2xpZW50OjpBZGRTdGF0dXM+KG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFkZElkKGlkLCB0
eXBlLCBjb2RlY3MpKTsKKyAgICBpZiAocmVzdWx0ID09IFdlYk1lZGlhU291cmNlQ2xpZW50OjpB
ZGRTdGF0dXNPaykKKyAgICAgICAgKnNvdXJjZUJ1ZmZlciA9IG5ldyBXZWJTb3VyY2VCdWZmZXJJ
bXBsKG1fd2ViTWVkaWFQbGF5ZXIsIGlkKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Rv
dWJsZSBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OmR1cmF0aW9uKCkKIHsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2ViTWVkaWFTb3VyY2VDbGllbnQ6OkFkZElkU3RhdHVzPihtX3dlYk1lZGlh
UGxheWVyLT5zb3VyY2VBZGRJZChpZCwgdHlwZSwgY29kZWNzKSk7CisgICAgcmV0dXJuIG1fd2Vi
TWVkaWFQbGF5ZXItPmR1cmF0aW9uKCk7CiB9CiAKLWJvb2wgV2ViTWVkaWFTb3VyY2VDbGllbnRJ
bXBsOjpyZW1vdmVJZChjb25zdCBXZWJTdHJpbmcmIGlkKQordm9pZCBXZWJNZWRpYVNvdXJjZUNs
aWVudEltcGw6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICByZXR1cm4gbV93
ZWJNZWRpYVBsYXllci0+c291cmNlUmVtb3ZlSWQoaWQpOworICAgIHJldHVybiBtX3dlYk1lZGlh
UGxheWVyLT5zb3VyY2VTZXREdXJhdGlvbihkdXJhdGlvbik7CiB9CiAKLVdlYlRpbWVSYW5nZXMg
V2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjpidWZmZXJlZChjb25zdCBXZWJTdHJpbmcmIGlkKQor
dm9pZCBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OmVuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3Rh
dHVzIHN0YXR1cykKIHsKLSAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c291cmNlQnVmZmVy
ZWQoaWQpOworICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUVuZE9mU3RyZWFtKHN0YXRpY19j
YXN0PFdlYk1lZGlhUGxheWVyOjpFbmRPZlN0cmVhbVN0YXR1cz4oc3RhdHVzKSk7CiB9CiAKLWJv
b2wgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjphcHBlbmQoY29uc3QgV2ViU3RyaW5nJiBpZCwg
Y29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorV2ViU291cmNlQnVm
ZmVySW1wbDo6V2ViU291cmNlQnVmZmVySW1wbChXZWJNZWRpYVBsYXllciogd2ViTWVkaWFQbGF5
ZXIsIGNvbnN0IFdlYlN0cmluZyYgaWQpCisgICAgOiBtX3dlYk1lZGlhUGxheWVyKHdlYk1lZGlh
UGxheWVyKQorICAgICwgbV9pZChpZCkKIHsKLSAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+
c291cmNlQXBwZW5kKGlkLCBkYXRhLCBsZW5ndGgpOwogfQogCi1ib29sIFdlYk1lZGlhU291cmNl
Q2xpZW50SW1wbDo6YWJvcnQoY29uc3QgV2ViU3RyaW5nJiBpZCkKK1dlYlRpbWVSYW5nZXMgV2Vi
U291cmNlQnVmZmVySW1wbDo6YnVmZmVyZWQoKQogewotICAgIHJldHVybiBtX3dlYk1lZGlhUGxh
eWVyLT5zb3VyY2VBYm9ydChpZCk7CisgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJj
ZUJ1ZmZlcmVkKG1faWQpOwogfQogCi1kb3VibGUgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjpk
dXJhdGlvbigpCitib29sIFdlYlNvdXJjZUJ1ZmZlckltcGw6OmFwcGVuZChjb25zdCB1bnNpZ25l
ZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIG1fd2ViTWVkaWFQ
bGF5ZXItPmR1cmF0aW9uKCk7CisgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFw
cGVuZChtX2lkLCBkYXRhLCBsZW5ndGgpOwogfQogCi12b2lkIFdlYk1lZGlhU291cmNlQ2xpZW50
SW1wbDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQorYm9vbCBXZWJTb3VyY2VCdWZmZXJJ
bXBsOjphYm9ydCgpCiB7Ci0gICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZVNldER1
cmF0aW9uKGR1cmF0aW9uKTsKKyAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c291cmNlQWJv
cnQobV9pZCk7CiB9CiAKLXZvaWQgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjplbmRPZlN0cmVh
bShFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCitib29sIFdlYlNvdXJjZUJ1ZmZlckltcGw6OnNl
dFRpbWVzdGFtcE9mZnNldChkb3VibGUgb2Zmc2V0KQogewotICAgIG1fd2ViTWVkaWFQbGF5ZXIt
PnNvdXJjZUVuZE9mU3RyZWFtKHN0YXRpY19jYXN0PFdlYk1lZGlhUGxheWVyOjpFbmRPZlN0cmVh
bVN0YXR1cz4oc3RhdHVzKSk7CisgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZVNl
dFRpbWVzdGFtcE9mZnNldChtX2lkLCBvZmZzZXQpOwogfQogCi1ib29sIFdlYk1lZGlhU291cmNl
Q2xpZW50SW1wbDo6c2V0VGltZXN0YW1wT2Zmc2V0KGNvbnN0IFdlYlN0cmluZyYgaWQsIGRvdWJs
ZSBvZmZzZXQpCit2b2lkIFdlYlNvdXJjZUJ1ZmZlckltcGw6OnJlbW92ZWRGcm9tTWVkaWFTb3Vy
Y2UoKQogewotICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VTZXRUaW1lc3RhbXBP
ZmZzZXQoaWQsIG9mZnNldCk7CisgICAgaWYgKCFtX3dlYk1lZGlhUGxheWVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VSZW1vdmVJZChtX2lkKTsKKyAg
ICBtX3dlYk1lZGlhUGxheWVyID0gMDsKIH0KIAogc3RhdGljIFBhc3NPd25QdHI8V2ViTWVkaWFQ
bGF5ZXI+IGNyZWF0ZVdlYk1lZGlhUGxheWVyKFdlYk1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnQs
IGNvbnN0IFdlYlVSTCYgdXJsLCBGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVNvdXJjZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTWVkaWFTb3VyY2VJbXBsLmNwcAppbmRleCBhNWVjODkyMmNmZjcyYjRj
MWUzOGUyZWUxN2MzMzBlYjY0MTg5MGM0Li4yYmEyYzIzYzI3ZDBmZjdmNjNmY2I4MWE3YjE3ZWEw
M2E1Y2FlMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRp
YVNvdXJjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlh
U291cmNlSW1wbC5jcHAKQEAgLTMxLDEwOCArMzEsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJNZWRpYVNvdXJjZUltcGwuaCIKIAotI2luY2x1ZGUgIk1lZGlhU291cmNl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUltcGwuaCIKICNpbmNsdWRl
ICJXZWJNZWRpYVNvdXJjZUNsaWVudC5oIgogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUltcGwgOiBwdWJs
aWMgV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBN
ZWRpYVNvdXJjZVByaXZhdGVJbXBsKFBhc3NPd25QdHI8V2ViTWVkaWFTb3VyY2VDbGllbnQ+KTsK
LSAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGVJbXBsKCkgeyB9Ci0KLSAgICAvLyBNZWRp
YVNvdXJjZVByaXZhdGUgbWV0aG9kcy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZTo6QWRkSWRTdGF0dXMgYWRkSWQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNzKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cmVtb3ZlSWQoY29uc3QgU3RyaW5nJiBpZCk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNv
cmU6OlRpbWVSYW5nZXM+IGJ1ZmZlcmVkKGNvbnN0IFN0cmluZyYgaWQpOwotICAgIHZpcnR1YWwg
Ym9vbCBhcHBlbmQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoY29uc3QgU3RyaW5nJiBp
ZCk7Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RHVyYXRpb24oZG91YmxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kT2ZTdHJlYW0oV2ViQ29yZTo6
TWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyk7Ci0gICAgdmlydHVhbCBib29s
IHNldFRpbWVzdGFtcE9mZnNldChjb25zdCBTdHJpbmcmIGlkLCBkb3VibGUgb2Zmc2V0KTsKLQot
cHJpdmF0ZToKLSAgICBPd25QdHI8V2ViS2l0OjpXZWJNZWRpYVNvdXJjZUNsaWVudD4gbV9jbGll
bnQ7Ci19OwotCi1NZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpNZWRpYVNvdXJjZVByaXZhdGVJbXBs
KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJNZWRpYVNvdXJjZUNsaWVudD4gY2xpZW50KQotICAgIDog
bV9jbGllbnQoY2xpZW50KQotewotfQotCi1XZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkFk
ZElkU3RhdHVzIE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmFkZElkKGNvbnN0IFN0cmluZyYgaWQs
IGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVjcykKLXsKLSAg
ICBpZiAoIW1fY2xpZW50KQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2
YXRlOjpOb3RTdXBwb3J0ZWQ7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVk
aWFTb3VyY2VQcml2YXRlOjpBZGRJZFN0YXR1cz4obV9jbGllbnQtPmFkZElkKGlkLCB0eXBlLCBj
b2RlY3MpKTsKLX0KLQotYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpyZW1vdmVJZChjb25z
dCBTdHJpbmcmIGlkKQotewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBtX2NsaWVudC0+cmVtb3ZlSWQoaWQpOwotfQotCi1QYXNzUmVmUHRy
PFdlYkNvcmU6OlRpbWVSYW5nZXM+IE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmJ1ZmZlcmVkKGNv
bnN0IFN0cmluZyYgaWQpCi17Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OlRpbWVSYW5nZXM6OmNyZWF0ZSgpOwotCi0gICAgV2ViVGltZVJhbmdlcyB3ZWJSYW5n
ZXMgPSBtX2NsaWVudC0+YnVmZmVyZWQoaWQpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFu
Z2VzPiByYW5nZXMgPSBXZWJDb3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHdlYlJhbmdlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmFuZ2VzLT5h
ZGQod2ViUmFuZ2VzW2ldLnN0YXJ0LCB3ZWJSYW5nZXNbaV0uZW5kKTsKLSAgICByZXR1cm4gcmFu
Z2VzLnJlbGVhc2UoKTsKLX0KLQotYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjphcHBlbmQo
Y29uc3QgU3RyaW5nJiBpZCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiBtX2NsaWVudC0+YXBwZW5kKGlkLCBkYXRhLCBsZW5ndGgpOwotfQotCi1ib29sIE1l
ZGlhU291cmNlUHJpdmF0ZUltcGw6OmFib3J0KGNvbnN0IFN0cmluZyYgaWQpCi17Ci0gICAgaWYg
KCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fY2xpZW50
LT5hYm9ydChpZCk7Ci19Ci0KLWRvdWJsZSBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpkdXJhdGlv
bigpCi17Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1cm4gbV9jbGllbnQtPmR1cmF0aW9u
KCk7Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6c2V0RHVyYXRpb24oZG91Ymxl
IGR1cmF0aW9uKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnNldER1
cmF0aW9uKGR1cmF0aW9uKTsKLX0KLQotdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjplbmRP
ZlN0cmVhbShXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0
YXR1cykKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5lbmRPZlN0cmVh
bShzdGF0aWNfY2FzdDxXZWJNZWRpYVNvdXJjZUNsaWVudDo6RW5kT2ZTdHJlYW1TdGF0dXM+KHN0
YXR1cykpOwotfQotCi1ib29sIE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OnNldFRpbWVzdGFtcE9m
ZnNldChjb25zdCBTdHJpbmcmIGlkLCBkb3VibGUgb2Zmc2V0KQotewotICAgIGlmICghbV9jbGll
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9jbGllbnQtPnNldFRpbWVz
dGFtcE9mZnNldChpZCwgb2Zmc2V0KTsKLX0KLQogCiBXZWJNZWRpYVNvdXJjZUltcGw6OldlYk1l
ZGlhU291cmNlSW1wbChQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU291cmNlPiBtZWRpYVNvdXJj
ZSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190606</attachid>
            <date>2013-02-27 14:43:20 -0800</date>
            <delta_ts>2013-02-28 10:24:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110798-20130227143934.patch</filename>
            <type>text/plain</type>
            <size>53599</size>
            <attacher name="Aaron Colwell">acolwell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk3MDY2NDAzNGJiN2Iz
YzE1NjU4NDliYWNlNzQ1ZTE3Y2ZlNDNkNy4uODQ3M2NjYWM4NWE2YWZmYTVmZDJjYTE4YWNmNzY3
OTI5ZGI5ZjdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAyLTI3ICBBYXJv
biBDb2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZhY3RvciBTb3Vy
Y2VCdWZmZXIgbWV0aG9kcyBvdXQgb2YgTWVkaWFTb3VyY2VQcml2YXRlICYgV2ViTWVkaWFTb3Vy
Y2UKKyAgICAgICAgaW50byBTb3VyY2VCdWZmZXJQcml2YXRlICYgV2ViU291cmNlQnVmZmVyIHJl
c3BlY3RpdmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgsIEplciBOb2JsZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6
OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6cmVtb3Zl
U291cmNlQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNl
Lmg6CisgICAgICAgIChNZWRpYVNvdXJjZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJj
ZS9Tb3VyY2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6
OlNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6c2V0VGltZXN0YW1wT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlcjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
OjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
cjo6aXNSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aXNPcGVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aXNFbmRlZCk6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoU291cmNlQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlckxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyTGlzdDo6U291
cmNlQnVmZmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJMaXN0OjpyZW1v
dmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyTGlzdDo6Y2xlYXIpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oOgorICAgICAgICAoU291
cmNlQnVmZmVyTGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGUuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZh
dGUuaDogCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNvdXJjZUJ1ZmZlclByaXZhdGUp
OiBDb250YWlucyBtZXRob2RzIGV4dHJhY3RlZCBmcm9tIE1lZGlhUGxheWVyUHJpdmF0ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6OlNvdXJjZUJ1ZmZlclByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZTo6flNvdXJjZUJ1ZmZlclBy
aXZhdGUpOgorCiAyMDEzLTAyLTI3ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CiAKICAgICAgICAgVG91Y2ggQ1NTR3JhbW1hci55LmluIHRvIGZpeCBhbiBpbnRlcm5hbCBidWls
ZGJvdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1YjYyM2FiNGNlNWNiZjQ5MGIzNzgw
YzNmYzk0NjY4NzcxZDY0ZWJjLi43YjY3MTFmNTRhYjM1MTEzZmEzNmMxZDY3ZmMzYTA4MWE2MTQ5
MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEzLTAy
LTI3ICBBYXJvbiBDb2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZh
Y3RvciBTb3VyY2VCdWZmZXIgbWV0aG9kcyBvdXQgb2YgTWVkaWFTb3VyY2VQcml2YXRlICYgV2Vi
TWVkaWFTb3VyY2UKKyAgICAgICAgaW50byBTb3VyY2VCdWZmZXJQcml2YXRlICYgV2ViU291cmNl
QnVmZmVyIHJlc3BlY3RpdmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgsIEpl
ciBOb2JsZS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYk1l
ZGlhU291cmNlQ2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViTWVkaWFT
b3VyY2VDbGllbnQpOgorICAgICAgICAqIHB1YmxpYy9XZWJTb3VyY2VCdWZmZXIuaDogCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU291cmNlQnVmZmVyKTogQ29udGFpbnMgU291cmNl
QnVmZmVyIG1ldGhvZHMgZXh0cmFjdGVkIGZyb20gV2ViTWVkaWFTb3VyY2UuCisgICAgICAgIChX
ZWJLaXQ6OldlYlNvdXJjZUJ1ZmZlcjo6fldlYlNvdXJjZUJ1ZmZlcik6CisgICAgICAgICogc3Jj
L0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwOgorICAgICAgICAqIHNyYy9NZWRpYVNvdXJjZVByaXZh
dGVJbXBsLmNwcDogCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNv
dXJjZVByaXZhdGVJbXBsOjpNZWRpYVNvdXJjZVByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6TWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdl
YktpdDo6TWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
Ok1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmVuZE9mU3RyZWFtKToKKyAgICAgICAgKiBzcmMvTWVk
aWFTb3VyY2VQcml2YXRlSW1wbC5oOiAKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChNZWRp
YVNvdXJjZVByaXZhdGVJbXBsKTogQWRhcHRzIE1lZGlhU291cmNlUHJpdmF0ZSBpbnRlcmZhY2Ug
dG8gV2ViTWVkaWFTb3VyY2VDbGllbnQuCisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU291cmNlUHJp
dmF0ZUltcGw6On5NZWRpYVNvdXJjZVByaXZhdGVJbXBsKToKKyAgICAgICAgKiBzcmMvU291cmNl
QnVmZmVyUHJpdmF0ZUltcGwuY3BwOiAKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OlNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjpTb3VyY2VCdWZmZXJQcml2YXRlSW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjpidWZmZXJlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjphcHBlbmQpOgorICAgICAgICAo
V2ViS2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlSW1wbDo6YWJvcnQpOgorICAgICAgICAoV2ViS2l0
OjpTb3VyY2VCdWZmZXJQcml2YXRlSW1wbDo6c2V0VGltZXN0YW1wT2Zmc2V0KToKKyAgICAgICAg
KFdlYktpdDo6U291cmNlQnVmZmVyUHJpdmF0ZUltcGw6OnJlbW92ZWRGcm9tTWVkaWFTb3VyY2Up
OgorICAgICAgICAqIHNyYy9Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5oOiAKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChTb3VyY2VCdWZmZXJQcml2YXRlSW1wbCk6IEFkYXB0cyBTb3VyY2VC
dWZmZXJQcml2YXRlIGludGVyZmFjZSB0byBXZWJTb3VyY2VCdWZmZXIuCisgICAgICAgIChXZWJL
aXQ6OlNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjp+U291cmNlQnVmZmVyUHJpdmF0ZUltcGwpOgor
ICAgICAgICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2Vi
TWVkaWFTb3VyY2VDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJT
b3VyY2VCdWZmZXJJbXBsKTogVGVtcG9yYXJ5IGltcGxlbWVudGF0aW9uIG9mIFdlYlNvdXJjZUJ1
ZmZlciB0byBrZWVwIHRoaW5ncyB3b3JraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW50aWwgdGhlIENocm9taXVtIHNpZGUgY2hhbmdlcyBsYW5kLgorICAgICAgICAoV2ViS2l0
OjpXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6ZHVyYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjplbmRPZlN0cmVhbSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvdXJjZUJ1ZmZlckltcGw6OldlYlNvdXJjZUJ1ZmZlckltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTb3VyY2VCdWZmZXJJbXBsOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNvdXJjZUJ1ZmZlckltcGw6OmFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNv
dXJjZUJ1ZmZlckltcGw6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU291cmNlQnVmZmVy
SW1wbDo6c2V0VGltZXN0YW1wT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU291cmNlQnVm
ZmVySW1wbDo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6CisgICAgICAgICogc3JjL1dlYk1lZGlh
U291cmNlSW1wbC5jcHA6CisKIDIwMTMtMDItMjcgIEdsZW5uIEFkYW1zICA8Z2xlbm5Ac2t5bmF2
LmNvbT4KIAogICAgICAgICBBZGQgRU5BQkxFX0NTUzNfVEVYVF9MSU5FX0JSRUFLIGZsYWcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3Bw
CmluZGV4IGU2YmZlMjQyYWQyZDMyNDY3MzFhNzA2NDgwYThkNmIxMGVjNWJkN2MuLjgwY2Y2YzEz
OThiYTgzODI2ZjRhYzg0MWM2NDBjNjZlNWU0N2E3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC0zNSw2ICszNSw3IEBA
CiAKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiU291cmNlQnVmZmVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNs
dWRlIDx3dGYvVWludDhBcnJheS5oPgogCkBAIC0xMzEsMjEgKzEzMiwxOCBAQCBTb3VyY2VCdWZm
ZXIqIE1lZGlhU291cmNlOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNl
cHRpb25Db2RlJiBlYwogICAgIH0KIAogICAgIC8vIDUuIENyZWF0ZSBhIG5ldyBTb3VyY2VCdWZm
ZXIgb2JqZWN0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KLSAgICBTdHJpbmcgaWQgPSBtX3Nv
dXJjZUJ1ZmZlcnMtPmdlbmVyYXRlVW5pcXVlSWQoKTsKLSAgICBpZiAoaWQgPT0gZW1wdHlTdHJp
bmcoKSkgewotICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQorICAgIE93blB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiBzb3VyY2VCdWZmZXJQ
cml2YXRlOworICAgIHN3aXRjaCAobV9wcml2YXRlLT5hZGRTb3VyY2VCdWZmZXIoY29udGVudFR5
cGUudHlwZSgpLCBjb2RlY3MsICZzb3VyY2VCdWZmZXJQcml2YXRlKSkgeworICAgIGNhc2UgTWVk
aWFTb3VyY2VQcml2YXRlOjpPazogeworICAgICAgICBBU1NFUlQoc291cmNlQnVmZmVyUHJpdmF0
ZSk7CisgICAgICAgIFJlZlB0cjxTb3VyY2VCdWZmZXI+IGJ1ZmZlciA9IFNvdXJjZUJ1ZmZlcjo6
Y3JlYXRlKHNvdXJjZUJ1ZmZlclByaXZhdGUucmVsZWFzZSgpLCB0aGlzKTsKIAotICAgIFJlZlB0
cjxTb3VyY2VCdWZmZXI+IGJ1ZmZlciA9IFNvdXJjZUJ1ZmZlcjo6Y3JlYXRlKGlkLCB0aGlzKTsK
LQotICAgIHN3aXRjaCAobV9wcml2YXRlLT5hZGRJZChidWZmZXItPmlkKCksIGNvbnRlbnRUeXBl
LnR5cGUoKSwgY29kZWNzKSkgewotICAgIGNhc2UgTWVkaWFTb3VyY2VQcml2YXRlOjpPazoKICAg
ICAgICAgLy8gNi4gQWRkIHRoZSBuZXcgb2JqZWN0IHRvIHNvdXJjZUJ1ZmZlcnMgYW5kIGZpcmUg
YSBhZGRzb3VyY2VidWZmZXIgb24gdGhhdCBvYmplY3QuCiAgICAgICAgIG1fc291cmNlQnVmZmVy
cy0+YWRkKGJ1ZmZlcik7CiAgICAgICAgIG1fYWN0aXZlU291cmNlQnVmZmVycy0+YWRkKGJ1ZmZl
cik7CiAgICAgICAgIC8vIDcuIFJldHVybiB0aGUgbmV3IG9iamVjdCB0byB0aGUgY2FsbGVyLgog
ICAgICAgICByZXR1cm4gYnVmZmVyLmdldCgpOworICAgIH0KICAgICBjYXNlIE1lZGlhU291cmNl
UHJpdmF0ZTo6Tm90U3VwcG9ydGVkOgogICAgICAgICAvLyAyIChjb250KS4gSWYgdHlwZSBjb250
YWlucyBhIE1JTUUgdHlwZSAuLi4gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggdGhlIHR5cGVz
IAogICAgICAgICAvLyBzcGVjaWZpZWQgZm9yIHRoZSBvdGhlciBTb3VyY2VCdWZmZXIgb2JqZWN0
cyBpbiBzb3VyY2VCdWZmZXJzLCB0aGVuIHRocm93CkBAIC0xOTEsNyArMTg5LDYgQEAgdm9pZCBN
ZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlciogYnVmZmVyLCBFeGNl
cHRpb25Db2RlJiBlYykKIAogICAgIC8vIDcuIERlc3Ryb3kgYWxsIHJlc291cmNlcyBmb3Igc291
cmNlQnVmZmVyLgogICAgIG1fYWN0aXZlU291cmNlQnVmZmVycy0+cmVtb3ZlKGJ1ZmZlcik7Ci0g
ICAgbV9wcml2YXRlLT5yZW1vdmVJZChidWZmZXItPmlkKCkpOwogCiAgICAgLy8gNC4gUmVtb3Zl
IHRyYWNrIGluZm9ybWF0aW9uIGZyb20gYXVkaW9UcmFja3MsIHZpZGVvVHJhY2tzLCBhbmQgdGV4
dFRyYWNrcyBmb3IgYWxsIHRyYWNrcyAKICAgICAvLyBhc3NvY2lhdGVkIHdpdGggc291cmNlQnVm
ZmVyIGFuZCBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGNoYW5nZSBvbiB0aGUgbW9kaWZpZWQg
bGlzdHMuCkBAIC0yNjMsNjIgKzI2MCw2IEBAIHZvaWQgTWVkaWFTb3VyY2U6OmVuZE9mU3RyZWFt
KGNvbnN0IFN0cmluZyYgZXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG1fcHJpdmF0ZS0+
ZW5kT2ZTdHJlYW0oZW9zU3RhdHVzKTsKIH0KIAotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRp
YVNvdXJjZTo6YnVmZmVyZWQoY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUgfHwgbV9yZWFkeVN0YXRlID09IGNsb3NlZEtleXdv
cmQoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wcml2YXRlLT5idWZmZXJlZChpZCk7Ci19Ci0KLXZv
aWQgTWVkaWFTb3VyY2U6OmFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPFVpbnQ4
QXJyYXk+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghZGF0YS5nZXQoKSkg
ewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghbV9wcml2YXRlIHx8IG1fcmVhZHlTdGF0ZSA9PSBjbG9zZWRLZXl3b3Jk
KCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gZW5kZWRLZXl3b3JkKCkpCi0gICAgICAg
IHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+YXBw
ZW5kKGlkLCBkYXRhLT5kYXRhKCksIGRhdGEtPmxlbmd0aCgpKSkgewotICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2U6
OmFib3J0KGNvbnN0IFN0cmluZyYgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICgh
bV9wcml2YXRlIHx8IG1fcmVhZHlTdGF0ZSAhPSBvcGVuS2V5d29yZCgpKSB7Ci0gICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fcHJpdmF0ZS0+YWJvcnQoaWQpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotYm9vbCBNZWRpYVNvdXJjZTo6c2V0VGltZXN0YW1wT2Zmc2V0KGNvbnN0IFN0cmluZyYgaWQs
IGRvdWJsZSBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghbV9wcml2YXRl
IHx8IG1fcmVhZHlTdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgh
bV9wcml2YXRlLT5zZXRUaW1lc3RhbXBPZmZzZXQoaWQsIG9mZnNldCkpIHsKLSAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBNZWRpYVNvdXJjZTo6c2V0UHJpdmF0ZUFuZE9wZW4oUGFz
c093blB0cjxNZWRpYVNvdXJjZVByaXZhdGU+IG1lZGlhU291cmNlUHJpdmF0ZSkKIHsKICAgICBB
U1NFUlQobWVkaWFTb3VyY2VQcml2YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAppbmRleCA5NTM1OGQ3Y2I5ZDE3YzQ2YWIwYTk0ZWY3
NTJiN2I1Y2YxZDczMmU3Li4yNjA5MGFhM2RiYmMyZmFkNGUwZGU2OGYwNDQyOGZmMjdhNDlmZDc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJj
ZS5oCkBAIC02NywxMSArNjcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByaXZhdGVBbmRP
cGVuKFBhc3NPd25QdHI8TWVkaWFTb3VyY2VQcml2YXRlPik7CiAKLSAgICBQYXNzUmVmUHRyPFRp
bWVSYW5nZXM+IGJ1ZmZlcmVkKGNvbnN0IFN0cmluZyYgaWQsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPFVpbnQ4QXJy
YXk+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFib3J0KGNvbnN0IFN0cmluZyYg
aWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldFRpbWVzdGFtcE9mZnNldChjb25zdCBT
dHJpbmcmIGlkLCBkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIC8vIEV2ZW50VGFyZ2V0
IGludGVyZmFjZQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKaW5kZXggMWQ2ZTYw
NmE3YWI3ZDFkYzNlNzU4NDQyYWM2ZjE0NzJhN2JiNzM4Ni4uZmY4MGRmNTQ3NDRhNGEzMTM0ODlj
MjU2NzBhNzJkNjUxNDkzZWUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcApAQCAtMzMsMTYgKzMzLDI1IEBACiAKICNpZiBF
TkFCTEUoTUVESUFfU09VUkNFKQogCisjaW5jbHVkZSAiTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRl
ICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1
ZGUgPHd0Zi9VaW50OEFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU291cmNlQnVm
ZmVyOjpTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYVNvdXJj
ZT4gc291cmNlKQotICAgIDogbV9pZChpZCkKK1Bhc3NSZWZQdHI8U291cmNlQnVmZmVyPiBTb3Vy
Y2VCdWZmZXI6OmNyZWF0ZShQYXNzT3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJjZUJ1
ZmZlclByaXZhdGUsIFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+IHNvdXJjZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXJQcml2YXRlLCBzb3VyY2Up
KTsKK30KKworU291cmNlQnVmZmVyOjpTb3VyY2VCdWZmZXIoUGFzc093blB0cjxTb3VyY2VCdWZm
ZXJQcml2YXRlPiBzb3VyY2VCdWZmZXJQcml2YXRlLCBQYXNzUmVmUHRyPE1lZGlhU291cmNlPiBz
b3VyY2UpCisgICAgOiBtX3ByaXZhdGUoc291cmNlQnVmZmVyUHJpdmF0ZSkKICAgICAsIG1fc291
cmNlKHNvdXJjZSkKICAgICAsIG1fdGltZXN0YW1wT2Zmc2V0KDApCiB7CisgICAgQVNTRVJUKG1f
cHJpdmF0ZSk7CisgICAgQVNTRVJUKG1fc291cmNlKTsKIH0KIAogU291cmNlQnVmZmVyOjp+U291
cmNlQnVmZmVyKCkKQEAgLTUxLDEyICs2MCwxNiBAQCBTb3VyY2VCdWZmZXI6On5Tb3VyY2VCdWZm
ZXIoKQogCiBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IFNvdXJjZUJ1ZmZlcjo6YnVmZmVyZWQoRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkgeworICAgIC8vIFNl
Y3Rpb24gMy4xIGJ1ZmZlcmVkIGF0dHJpYnV0ZSBzdGVwcy4KKyAgICAvLyAxLiBJZiB0aGlzIG9i
amVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZUJ1ZmZlcnMgYXR0cmlidXRlIG9m
IHRoZSBwYXJlbnQgbWVkaWEgc291cmNlIHRoZW4gdGhyb3cgYW4KKyAgICAvLyAgICBJTlZBTElE
X1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIGlmIChpc1Jl
bW92ZWQoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zb3VyY2UtPmJ1ZmZlcmVkKGlkKCksIGVjKTsK
KyAgICAvLyAyLiBSZXR1cm4gYSBuZXcgc3RhdGljIG5vcm1hbGl6ZWQgVGltZVJhbmdlcyBvYmpl
Y3QgZm9yIHRoZSBtZWRpYSBzZWdtZW50cyBidWZmZXJlZC4KKyAgICByZXR1cm4gbV9wcml2YXRl
LT5idWZmZXJlZCgpOwogfQogCiBkb3VibGUgU291cmNlQnVmZmVyOjp0aW1lc3RhbXBPZmZzZXQo
KSBjb25zdApAQCAtNjYsMzMgKzc5LDEwMSBAQCBkb3VibGUgU291cmNlQnVmZmVyOjp0aW1lc3Rh
bXBPZmZzZXQoKSBjb25zdAogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6c2V0VGltZXN0YW1wT2Zmc2V0
KGRvdWJsZSBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghbV9zb3VyY2Up
IHsKKyAgICAvLyBTZWN0aW9uIDMuMSB0aW1lc3RhbXBPZmZzZXQgYXR0cmlidXRlIHNldHRlciBz
dGVwcy4KKyAgICAvLyAxLiBJZiB0aGlzIG9iamVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhl
IHNvdXJjZUJ1ZmZlcnMgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlIHRoZW4g
dGhyb3cgYW4KKyAgICAvLyAgICBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFib3J0
IHRoZXNlIHN0ZXBzLgorICAgIGlmIChpc1JlbW92ZWQoKSkgewogICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc291cmNl
LT5zZXRUaW1lc3RhbXBPZmZzZXQoaWQoKSwgb2Zmc2V0LCBlYykpCi0gICAgICAgIG1fdGltZXN0
YW1wT2Zmc2V0ID0gb2Zmc2V0OworICAgIC8vIDQuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0
ZSBvZiB0aGUgcGFyZW50IG1lZGlhIHNvdXJjZSBpcyBpbiB0aGUgImVuZGVkIiBzdGF0ZSB0aGVu
IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIGlmIChpc0VuZGVkKCkpIHsKKyAgICAgICAg
Ly8gNC4xIFNldCB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgb2YgdGhlIHBhcmVudCBtZWRpYSBz
b3VyY2UgdG8gIm9wZW4iCisgICAgICAgIC8vIDQuMiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCBzb3VyY2VvcGVuIGF0IHRoZSBwYXJlbnQgbWVkaWEgc291cmNlLgor
ICAgICAgICBtX3NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVNvdXJjZTo6b3BlbktleXdvcmQo
KSk7CisgICAgfQorCisgICAgLy8gNS4gSWYgdGhpcyBvYmplY3QgaXMgd2FpdGluZyBmb3IgdGhl
IGVuZCBvZiBhIG1lZGlhIHNlZ21lbnQgdG8gYmUgYXBwZW5kZWQsIHRoZW4gdGhyb3cgYW4gSU5W
QUxJRF9TVEFURV9FUlIKKyAgICAvLyBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKCFt
X3ByaXZhdGUtPnNldFRpbWVzdGFtcE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyA2LiBVcGRh
dGUgdGhlIGF0dHJpYnV0ZSB0byB0aGUgbmV3IHZhbHVlLgorICAgIG1fdGltZXN0YW1wT2Zmc2V0
ID0gb2Zmc2V0OwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6YXBwZW5kKFBhc3NSZWZQdHI8VWlu
dDhBcnJheT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkg
eworICAgIC8vIFNvdXJjZUJ1ZmZlci5hcHBlbmQoKSBzdGVwcyBmcm9tIE9jdG9iZXIgMXN0IHZl
cnNpb24gb2YgdGhlIE1lZGlhIFNvdXJjZSBFeHRlbnNpb25zIHNwZWMuCisgICAgLy8gaHR0cHM6
Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlLzdiYWI2NjM2OGYyYy9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLmh0bWwjZG9tLWFwcGVuZAorCisgICAgLy8gMi4gSWYgZGF0YSBp
cyBudWxsIHRoZW4gdGhyb3cgYW4gSU5WQUxJRF9BQ0NFU1NfRVJSIGV4Y2VwdGlvbiBhbmQgYWJv
cnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gMy4gSWYgdGhpcyBv
YmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2VCdWZmZXJzIGF0dHJpYnV0ZSBv
ZiBtZWRpYSBzb3VyY2UgdGhlbiB0aHJvdworICAgIC8vICAgIGFuIElOVkFMSURfU1RBVEVfRVJS
IGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKGlzUmVtb3ZlZCgpKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX3NvdXJjZS0+YXBwZW5kKGlkKCksIGRhdGEsIGVjKTsKKyAgICAvLyA1LiBJZiB0
aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgb2YgbWVkaWEgc291cmNlIGlzIGluIHRoZSAiZW5kZWQi
IHN0YXRlIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgaWYgKGlzRW5kZWQoKSkg
eworICAgICAgICAvLyA1LjEuIFNldCB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgb2YgbWVkaWEg
c291cmNlIHRvICJvcGVuIgorICAgICAgICAvLyA1LjIuIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEg
c2ltcGxlIGV2ZW50IG5hbWVkIHNvdXJjZW9wZW4gYXQgbWVkaWEgc291cmNlLgorICAgICAgICBt
X3NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVNvdXJjZTo6b3BlbktleXdvcmQoKSk7CisgICAg
fQorCisgICAgLy8gU3RlcHMgNiAmIGJleW9uZCBhcmUgaGFuZGxlZCBieSB0aGUgcHJpdmF0ZSBp
bXBsZW1lbnRhdGlvbi4KKyAgICBtX3ByaXZhdGUtPmFwcGVuZChkYXRhLT5kYXRhKCksIGRhdGEt
Pmxlbmd0aCgpKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OmFib3J0KEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIGlmICghbV9zb3VyY2UpIHsKKyAgICAvLyBTZWN0aW9uIDMuMiBhYm9ydCgp
IG1ldGhvZCBzdGVwcy4KKyAgICAvLyAxLiBJZiB0aGlzIG9iamVjdCBoYXMgYmVlbiByZW1vdmVk
IGZyb20gdGhlIHNvdXJjZUJ1ZmZlcnMgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291
cmNlCisgICAgLy8gICAgdGhlbiB0aHJvdyBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24g
YW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIC8vIDIuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJp
YnV0ZSBvZiB0aGUgcGFyZW50IG1lZGlhIHNvdXJjZSBpcyBub3QgaW4gdGhlICJvcGVuIiBzdGF0
ZQorICAgIC8vICAgIHRoZW4gdGhyb3cgYW4gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICBpZiAoaXNSZW1vdmVkKCkgfHwgIWlzT3BlbigpKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX3NvdXJjZS0+YWJvcnQoaWQoKSwgZWMpOworICAgIC8vIDQuIFJ1biB0aGUgcmVz
ZXQgcGFyc2VyIHN0YXRlIGFsZ29yaXRobS4KKyAgICBtX3ByaXZhdGUtPmFib3J0KCk7Cit9CisK
K3ZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKCkKK3sKKyAgICBpZiAo
aXNSZW1vdmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJpdmF0ZS0+cmVtb3ZlZEZy
b21NZWRpYVNvdXJjZSgpOworICAgIG1fc291cmNlLmNsZWFyKCk7Cit9CisKK2Jvb2wgU291cmNl
QnVmZmVyOjppc1JlbW92ZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9zb3VyY2U7Cit9CisK
K2Jvb2wgU291cmNlQnVmZmVyOjppc09wZW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX3NvdXJj
ZSk7CisgICAgcmV0dXJuIG1fc291cmNlLT5yZWFkeVN0YXRlKCkgPT0gTWVkaWFTb3VyY2U6Om9w
ZW5LZXl3b3JkKCk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyOjppc0VuZGVkKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9zb3VyY2UpOworICAgIHJldHVybiBtX3NvdXJjZS0+cmVhZHlTdGF0ZSgp
ID09IE1lZGlhU291cmNlOjplbmRlZEtleXdvcmQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyLmgKaW5kZXggN2QxZTU4NjFjMGYyMWRkZWVhY2QzNDdhNzhjYmYyM2UwMzNlM2I3Yy4uYTM1
ZTMyNWNhMTM4OTdhMGVkODJlYzEyZjdhMDQzMjZjN2NiMzdiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCkBAIC0zNCw0MyArMzQs
NDAgQEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIk1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KK2NsYXNzIE1lZGlhU291cmNlOworY2xh
c3MgU291cmNlQnVmZmVyUHJpdmF0ZTsKIGNsYXNzIFRpbWVSYW5nZXM7CiAKIGNsYXNzIFNvdXJj
ZUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNvdXJjZUJ1ZmZlcj4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQs
IFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+IHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU291cmNlQnVmZmVyKGlkLCBzb3VyY2UpKTsKLSAgICB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U291cmNlQnVmZmVyPiBjcmVhdGUoUGFzc093blB0cjxTb3VyY2VCdWZmZXJQ
cml2YXRlPiwgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4pOwogCiAgICAgdmlydHVhbCB+U291cmNl
QnVmZmVyKCk7CiAKKyAgICAvLyBTb3VyY2VCdWZmZXIuaWRsIG1ldGhvZHMKICAgICBQYXNzUmVm
UHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQogICAgIGRv
dWJsZSB0aW1lc3RhbXBPZmZzZXQoKSBjb25zdDsKICAgICB2b2lkIHNldFRpbWVzdGFtcE9mZnNl
dChkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8
VWludDhBcnJheT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotCiAgICAgdm9pZCBhYm9ydChFeGNl
cHRpb25Db2RlJik7Ci0gICAgCi0gICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KIAotICAgIHZvaWQgY2xlYXIoKSB7IG1fc291cmNlLmNsZWFyKCk7IH0KKyAgICB2
b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBT
b3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4pOwor
ICAgIFNvdXJjZUJ1ZmZlcihQYXNzT3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+LCBQYXNzUmVm
UHRyPE1lZGlhU291cmNlPik7CisKKyAgICBib29sIGlzUmVtb3ZlZCgpIGNvbnN0OworICAgIGJv
b2wgaXNPcGVuKCkgY29uc3Q7CisgICAgYm9vbCBpc0VuZGVkKCkgY29uc3Q7CiAKLSAgICBTdHJp
bmcgbV9pZDsKKyAgICBPd25QdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4gbV9wcml2YXRlOwogICAg
IFJlZlB0cjxNZWRpYVNvdXJjZT4gbV9zb3VyY2U7Ci0gICAgCisKICAgICBkb3VibGUgbV90aW1l
c3RhbXBPZmZzZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmNwcAppbmRleCA4Mzk3ZTJkMTcyOWNmZGM2MjUx
ZTI0NGIxOGZlMGI3NmVhN2I1ZTczLi4xMWRkOTFjMjcwYWZmNmY2YWFjY2EwN2FkYjFiNmNiNjM0
ODRhODA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlckxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyTGlzdC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoTUVE
SUFfU09VUkNFKQogCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJHZW5lcmljRXZlbnRR
dWV1ZS5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00Miw3ICs0Myw2IEBAIFNvdXJjZUJ1ZmZlckxpc3Q6OlNvdXJjZUJ1ZmZlckxpc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2VuZXJpY0V2ZW50UXVldWUqIGFzeW5jRXZlbnRRdWV1ZSkKICAgICA6IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQogICAgICwgbV9hc3luY0V2ZW50UXVldWUoYXN5
bmNFdmVudFF1ZXVlKQotICAgICwgbV9sYXN0U291cmNlQnVmZmVySWQoMCkKIHsKIH0KIApAQCAt
NzAsNyArNzAsNyBAQCBib29sIFNvdXJjZUJ1ZmZlckxpc3Q6OnJlbW92ZShTb3VyY2VCdWZmZXIq
IGJ1ZmZlcikKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGJ1ZmZlci0+Y2xlYXIoKTsKKyAgICBidWZmZXItPnJlbW92ZWRGcm9tTWVkaWFT
b3VyY2UoKTsKICAgICBtX2xpc3QucmVtb3ZlKGluZGV4KTsKICAgICBjcmVhdGVBbmRGaXJlRXZl
bnQoZXZlbnROYW1lcygpLndlYmtpdHJlbW92ZXNvdXJjZWJ1ZmZlckV2ZW50KTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTc5LDM5ICs3OSwxMSBAQCBib29sIFNvdXJjZUJ1ZmZlckxpc3Q6OnJlbW92
ZShTb3VyY2VCdWZmZXIqIGJ1ZmZlcikKIHZvaWQgU291cmNlQnVmZmVyTGlzdDo6Y2xlYXIoKQog
ewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgKytpKQotICAgICAg
ICBtX2xpc3RbaV0tPmNsZWFyKCk7CisgICAgICAgIG1fbGlzdFtpXS0+cmVtb3ZlZEZyb21NZWRp
YVNvdXJjZSgpOwogICAgIG1fbGlzdC5jbGVhcigpOwogICAgIGNyZWF0ZUFuZEZpcmVFdmVudChl
dmVudE5hbWVzKCkud2Via2l0cmVtb3Zlc291cmNlYnVmZmVyRXZlbnQpOwogfQogCi1TdHJpbmcg
U291cmNlQnVmZmVyTGlzdDo6Z2VuZXJhdGVVbmlxdWVJZCgpCi17Ci0gICAgLy8gRW5zdXJlIGEg
dW5pcXVlIGlkLiBVbnRpbCBtX2xhc3RTb3VyY2VCdWZmZXJJZCB3cmFwcyBhcm91bmQgKHZlcnkg
dW5saWtlbHkpLAotICAgIC8vIHRoaXMgbG9vcCB3aWxsIGV4aXQgYWZ0ZXIgb25lIGNoZWNrLiBJ
ZiBtX2xhc3RTb3VyY2VCdWZmZXJJZCBkb2VzIHdyYXAsCi0gICAgLy8gdGhpcyBsb29wIG1heSBy
dW4gYXMgbWFueSB0aW1lcyBhcyB0aGUgc2l6ZSBvZiBtX2xpc3QsIGJ1dCBpbiBtb3N0Ci0gICAg
Ly8gY2FzZXMgdGhhdCBzaG91bGQgYmUgbGVzcyB0aGFuIDEwLiBXZSBtYXkgd2FudCB0byBpbnZl
c3RpZ2F0ZSBhIG1vcmUKLSAgICAvLyBlZmZpY2llbnQgYXBwcm9hY2ggaWYgbWFueSBtb3JlIFNv
dXJjZUJ1ZmZlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICBzaXplX3QgbmV4dFNv
dXJjZUJ1ZmZlcklkID0gbV9sYXN0U291cmNlQnVmZmVySWQgKyAxOwotCi0gICAgd2hpbGUgKGNv
bnRhaW5zKG5leHRTb3VyY2VCdWZmZXJJZCkpIHsKLSAgICAgICAgaWYgKG5leHRTb3VyY2VCdWZm
ZXJJZCA9PSBtX2xhc3RTb3VyY2VCdWZmZXJJZCkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwotICAgICAgICBuZXh0U291cmNlQnVmZmVySWQrKzsKLSAgICB9Ci0gICAgbV9sYXN0
U291cmNlQnVmZmVySWQgPSBuZXh0U291cmNlQnVmZmVySWQ7Ci0KLSAgICByZXR1cm4gU3RyaW5n
OjpudW1iZXIobmV4dFNvdXJjZUJ1ZmZlcklkKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJMaXN0
Ojpjb250YWlucyhzaXplX3QgaWQpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fbGlzdFtpXS0+aWQoKSA9PSBT
dHJpbmc6Om51bWJlcihpZCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNvdXJjZUJ1ZmZlckxpc3Q6OmNyZWF0ZUFuZEZpcmVF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBBU1NFUlQobV9hc3lu
Y0V2ZW50UXVldWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAppbmRleCBhOTVhODM3NjhiYzYzZjhhMGQyYTg3NjcyMjE1
NzljOTAzNzBkYWE5Li4wZDQ3NjRlMTNkMTFhMTQwZTg5MTkxYTU3OWE3ZmNkMDRlYjE5NGVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlckxpc3QuaApAQCAtNTcsMTAgKzU3LDYgQEAgcHVibGljOgogICAgIGJvb2wgcmVtb3ZlKFNv
dXJjZUJ1ZmZlciopOwogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIC8vIEdlbmVyYXRlcyBhbiBp
ZCBmb3IgYWRkaW5nIGEgbmV3IFNvdXJjZUJ1ZmZlci4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcK
LSAgICAvLyBpZiB0aGlzIFNvdXJjZUJ1ZmZlckxpc3QgaXMgZnVsbC4KLSAgICBTdHJpbmcgZ2Vu
ZXJhdGVVbmlxdWVJZCgpOwotCiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCiAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdCBPVkVSUklERTsKQEAgLTc1LDcgKzcxLDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0
ZToKICAgICBTb3VyY2VCdWZmZXJMaXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBHZW5lcmlj
RXZlbnRRdWV1ZSopOwogCi0gICAgYm9vbCBjb250YWlucyhzaXplX3QgaWQpIGNvbnN0OwogICAg
IHZvaWQgY3JlYXRlQW5kRmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgdmly
dHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyByZWYoKTsgfQpAQCAtODYsNyAr
ODEsNiBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNFdmVudFF1ZXVlKiBtX2FzeW5jRXZlbnRRdWV1
ZTsKIAogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPiA+IG1fbGlzdDsKLSAgICBzaXpl
X3QgbV9sYXN0U291cmNlQnVmZmVySWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCA3ZjMyNjIzYjA3ZTVk
OTExN2QxNzRjODMyOWU3OWFhYjdmZTIyYjM5Li5iYzcyNzA1MTIxNjIwZjA3ZGRiMjEzMmIwYTZh
YWI3ZWFlZWE5ZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
QEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0jaW5jbHVkZSAiVVVJRC5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlIDxsaW1pdHM+
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5oCmluZGV4IDhkOTFkYTBjZmQw
MTBlNjdmYWI3NWM1Y2FjYWQzZjZiZmY5MGQxZjkuLjE4OGYyM2NmYzBjNzNkMmI4ODhiMjBmNmIw
MmFhMjQ5Njc3ZTIwZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhU291cmNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5oCkBAIC0zMiwyNyArMzIsMjQgQEAKIAogI2lmIEVO
QUJMRShNRURJQV9TT1VSQ0UpCiAKLSNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZTsKKwogY2xhc3MgTWVkaWFTb3VyY2VQ
cml2YXRlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVNvdXJjZVByaXZhdGUpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBNZWRpYVNvdXJjZVByaXZhdGUo
KSB7IH0KICAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGUoKSB7IH0KIAotICAgIGVudW0g
QWRkSWRTdGF0dXMgeyBPaywgTm90U3VwcG9ydGVkLCBSZWFjaGVkSWRMaW1pdCB9OwotICAgIHZp
cnR1YWwgQWRkSWRTdGF0dXMgYWRkSWQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNzKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHJlbW92ZUlkKGNvbnN0IFN0cmluZyYgaWQpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
VGltZVJhbmdlcz4gYnVmZmVyZWQoY29uc3QgU3RyaW5nJiBpZCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBhcHBlbmQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKSA9IDA7CisgICAgZW51bSBBZGRTdGF0dXMgeyBPaywgTm90U3VwcG9y
dGVkLCBSZWFjaGVkSWRMaW1pdCB9OworICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1
ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MsIE93
blB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiopID0gMDsKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJh
dGlvbigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGFib3J0KGNvbnN0IFN0cmluZyYgaWQpID0gMDsKICAgICBlbnVtIEVu
ZE9mU3RyZWFtU3RhdHVzIHsgRW9zTm9FcnJvciwgRW9zTmV0d29ya0Vycm9yLCBFb3NEZWNvZGVF
cnJvciB9OwogICAgIHZpcnR1YWwgdm9pZCBlbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZXRUaW1lc3RhbXBPZmZzZXQoY29uc3QgU3RyaW5nJiBp
ZCwgZG91YmxlIG9mZnNldCkgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAy
NDBkYTdkN2NhOWQ1YjkwNzY3NWYxZDg2ZWJjMDFjZGM2NTNiZmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaWZuZGVmIFNvdXJjZUJ1ZmZlclByaXZhdGVfaAorI2RlZmluZSBTb3Vy
Y2VCdWZmZXJQcml2YXRlX2gKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbmNsdWRl
ICJUaW1lUmFuZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlQnVm
ZmVyUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgU291cmNlQnVmZmVyUHJpdmF0ZSgpIHsgfQorICAg
IHZpcnR1YWwgflNvdXJjZUJ1ZmZlclByaXZhdGUoKSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBhYm9ydCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VGltZXN0YW1wT2Zm
c2V0KGRvdWJsZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNl
KCkgPSAwOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCmluZGV4IDgyMjU5YzIwZTM0NmY4MWNkZDlhYWM4N2E1ZTUwNzNhNGZhYzllMmEuLjc2Mzlk
MjIzNmZlNDQyYzk2ZmRiYzFiOTgyZDAzY2RhMDZiMTRhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKQEAgLTM4Nyw2ICszODcsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dl
YlNjcmVlbkluZm9GYWN0b3J5Lm1tJywKICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJTdWJz
dHJpbmdVdGlsLm1tJywKICAgICAgICAgICAgICAgICAnc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmgnLAogICAg
ICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL3BhaW50aW5nL0NvbnRpbnVvdXNQYWludGVyLmgnLApAQCAtNDAzLDYgKzQwNSw4
IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9TY3JvbGxiYXJHcm91cC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvU2Nyb2xsYmFyR3JvdXAuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Tb3VyY2VCdWZm
ZXJQcml2YXRlSW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvU291cmNlQnVmZmVyUHJp
dmF0ZUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TcGVlY2hJbnB1dENsaWVudEltcGwu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaElucHV0Q2xpZW50SW1wbC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU291cmNlQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVNvdXJjZUNsaWVu
dC5oCmluZGV4IDNlNjUwOTA0YmI0MmJmOGZmYTBlNzZjNzM3YjlmZWVkYzFhZTlmMTAuLjc2YzQy
MTljZDY1YmE5MjlhMTBhYWY2MGVkMDRlYzM0NWE3YzlmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU291cmNlQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTb3VyY2VDbGllbnQuaApAQCAtMzYsMTIg
KzM2LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJTb3VyY2VCdWZmZXI7
CisKIGNsYXNzIFdlYk1lZGlhU291cmNlQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBlbnVtIEFkZElk
U3RhdHVzIHsKLSAgICAgICAgQWRkSWRTdGF0dXNPaywKLSAgICAgICAgQWRkSWRTdGF0dXNOb3RT
dXBwb3J0ZWQsCi0gICAgICAgIEFkZElkU3RhdHVzUmVhY2hlZElkTGltaXQKKyAgICBlbnVtIEFk
ZFN0YXR1cyB7CisgICAgICAgIEFkZFN0YXR1c09rLAorICAgICAgICBBZGRTdGF0dXNOb3RTdXBw
b3J0ZWQsCisgICAgICAgIEFkZFN0YXR1c1JlYWNoZWRJZExpbWl0CiAgICAgfTsKIAogICAgIGVu
dW0gRW5kT2ZTdHJlYW1TdGF0dXMgewpAQCAtNTIsMTUgKzU0LDEwIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgfldlYk1lZGlhU291cmNlQ2xpZW50KCkgeyB9CiAKLSAgICB2aXJ0dWFsIEFkZElk
U3RhdHVzIGFkZElkKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwg
Y29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGNvZGVjcykgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCByZW1vdmVJZChjb25zdCBXZWJTdHJpbmcmIGlkKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJUaW1l
UmFuZ2VzIGJ1ZmZlcmVkKGNvbnN0IFdlYlN0cmluZyYgaWQpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgYXBwZW5kKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhYm9ydChjb25zdCBXZWJT
dHJpbmcmIGlkKSA9IDA7CisgICAgdmlydHVhbCBBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKGNv
bnN0IFdlYlN0cmluZyYgdHlwZSwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGNvZGVjcywg
V2ViU291cmNlQnVmZmVyKiopID0gMDsKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGVuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIHNldFRpbWVzdGFtcE9mZnNldChjb25zdCBXZWJTdHJpbmcmIGlkLCBkb3VibGUgb2Zmc2V0
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU291cmNlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU3OTU5NjczYTAy
ZTUzNjM4ZTQwMmUwYTJhODNlYjk2MWJiZTk3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNvdXJjZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlNvdXJjZUJ1ZmZlcl9oCisjZGVmaW5lIFdlYlNvdXJjZUJ1ZmZlcl9oCisKKyNp
bmNsdWRlICJXZWJUaW1lUmFuZ2UuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YlNvdXJjZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViU291cmNlQnVmZmVyKCkg
eyB9CisKKyAgICB2aXJ0dWFsIFdlYlRpbWVSYW5nZXMgYnVmZmVyZWQoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGFwcGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoKSA9IDA7CisgICAgdmlydHVhbCBib29s
IHNldFRpbWVzdGFtcE9mZnNldChkb3VibGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
ZEZyb21NZWRpYVNvdXJjZSgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNo
aW5nRW51bXMuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdF
bnVtcy5jcHAKaW5kZXggOGFkMDg0NDQyY2YxMmIwOWUxNDJkZTgxM2E0MzUyYzFmNDA3OGQxZS4u
OGY0MmM2ZmU3Zjc1YzIzMzg3YTY0MGI1NDM0OTFlYWZjMzQ5ZTcyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKQEAgLTQxMyw5
ICs0MTMsOSBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpQ
cmVsb2FkTWV0YURhdGEsIE1lZGlhUGxheWVyOjpNZXRhRAogQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJNZWRpYVBsYXllcjo6UHJlbG9hZEF1dG8sIE1lZGlhUGxheWVyOjpBdXRvKTsK
IAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYk1lZGlhU291cmNlQ2xpZW50OjpBZGRJZFN0YXR1c09rLCBNZWRpYVNvdXJjZVByaXZhdGU6
Ok9rKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6
OkFkZElkU3RhdHVzTm90U3VwcG9ydGVkLCBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRl
ZCk7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhU291cmNlQ2xpZW50OjpB
ZGRJZFN0YXR1c1JlYWNoZWRJZExpbWl0LCBNZWRpYVNvdXJjZVByaXZhdGU6OlJlYWNoZWRJZExp
bWl0KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6
OkFkZFN0YXR1c09rLCBNZWRpYVNvdXJjZVByaXZhdGU6Ok9rKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkFkZFN0YXR1c05vdFN1cHBvcnRlZCwg
TWVkaWFTb3VyY2VQcml2YXRlOjpOb3RTdXBwb3J0ZWQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkU3RhdHVzUmVhY2hlZElkTGltaXQsIE1l
ZGlhU291cmNlUHJpdmF0ZTo6UmVhY2hlZElkTGltaXQpOwogCiBDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk1lZGlhU291cmNlQ2xpZW50OjpFbmRPZlN0cmVhbVN0YXR1c05vRXJyb3Is
IE1lZGlhU291cmNlUHJpdmF0ZTo6RW9zTm9FcnJvcik7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYk1lZGlhU291cmNlQ2xpZW50OjpFbmRPZlN0cmVhbVN0YXR1c05ldHdvcmtFcnJv
ciwgTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOZXR3b3JrRXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTb3VyY2VQcml2YXRlSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wOGI3MTA4NDI1ZmFkMTA5YWU4ZTNjMmZjNzY3NjQyMDM3MWFmMDVhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTb3VyY2VQcml2YXRlSW1w
bC5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRp
YVNvdXJjZVByaXZhdGVJbXBsLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUltcGwuaCIKKyNpbmNsdWRlICJXZWJNZWRpYVNvdXJj
ZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlNvdXJjZUJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpNZWRpYVNvdXJjZVByaXZhdGVJ
bXBsKFBhc3NPd25QdHI8V2ViS2l0OjpXZWJNZWRpYVNvdXJjZUNsaWVudD4gY2xpZW50KQorICAg
IDogbV9jbGllbnQoY2xpZW50KQoreworfQorCitXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6
OkFkZFN0YXR1cyBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjphZGRTb3VyY2VCdWZmZXIoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNzLAorICAgIE93blB0cjxX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlPiogc291cmNlQnVmZmVyKQoreworICAgIGlmICgh
bV9jbGllbnQpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6Ok5v
dFN1cHBvcnRlZDsKKworICAgIFdlYlNvdXJjZUJ1ZmZlciogd2ViU291cmNlQnVmZmVyID0gMDsK
KyAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1cyByZXN1bHQgPQorICAg
ICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1cz4o
bV9jbGllbnQtPmFkZFNvdXJjZUJ1ZmZlcih0eXBlLCBjb2RlY3MsICZ3ZWJTb3VyY2VCdWZmZXIp
KTsKKworICAgIGlmIChyZXN1bHQgPT0gV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlOjpPaykg
eworICAgICAgICBBU1NFUlQod2ViU291cmNlQnVmZmVyKTsKKyAgICAgICAgKnNvdXJjZUJ1ZmZl
ciA9IGFkb3B0UHRyKG5ldyBTb3VyY2VCdWZmZXJQcml2YXRlSW1wbChhZG9wdFB0cih3ZWJTb3Vy
Y2VCdWZmZXIpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNZWRp
YVNvdXJjZVByaXZhdGVJbXBsOjpkdXJhdGlvbigpCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAg
ICByZXR1cm4gbV9jbGllbnQtPmR1cmF0aW9uKCk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2
YXRlSW1wbDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKK30KKwordm9pZCBN
ZWRpYVNvdXJjZVByaXZhdGVJbXBsOjplbmRPZlN0cmVhbShXZWJDb3JlOjpNZWRpYVNvdXJjZVBy
aXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykKK3sKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIG1fY2xpZW50LT5lbmRPZlN0cmVhbShzdGF0aWNfY2FzdDxXZWJNZWRpYVNvdXJjZUNs
aWVudDo6RW5kT2ZTdHJlYW1TdGF0dXM+KHN0YXR1cykpOworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTb3VyY2VQcml2YXRlSW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTb3VyY2VQcml2YXRlSW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM2MzE4ZTA3ZjI2OWJiYWM5MmE3ZmI4M2YyNjJlM2E4ZTk0Y2E0ODMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNvdXJjZVBy
aXZhdGVJbXBsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFTb3VyY2VQcml2YXRlSW1w
bF9oCisjZGVmaW5lIE1lZGlhU291cmNlUHJpdmF0ZUltcGxfaAorCisjaWYgRU5BQkxFKE1FRElB
X1NPVVJDRSkKKworI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZS5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViTWVkaWFTb3VyY2VDbGllbnQ7CisKK2NsYXNzIE1lZGlhU291
cmNlUHJpdmF0ZUltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlIHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsKFBhc3NPd25QdHI8V2Vi
TWVkaWFTb3VyY2VDbGllbnQ+KTsKKyAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGVJbXBs
KCkgeyB9CisKKyAgICAvLyBNZWRpYVNvdXJjZVByaXZhdGUgbWV0aG9kcy4KKyAgICB2aXJ0dWFs
IFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MsCisgICAgICAg
IE93blB0cjxXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlPiopOworICAgIHZpcnR1YWwgZG91
YmxlIGR1cmF0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGRvdWJsZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGVuZE9mU3RyZWFtKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6
RW5kT2ZTdHJlYW1TdGF0dXMpOworCitwcml2YXRlOgorICAgIE93blB0cjxXZWJLaXQ6OldlYk1l
ZGlhU291cmNlQ2xpZW50PiBtX2NsaWVudDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU291cmNlQnVmZmVyUHJpdmF0
ZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU291cmNlQnVmZmVyUHJpdmF0
ZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5YTJhNjczOGU2ZjQwYWFkNDdlMjU3OTIwNDQ3YThiNjc2
N2IyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Tb3Vy
Y2VCdWZmZXJQcml2YXRlSW1wbC5jcHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5oIgorCisjaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKKworI2luY2x1ZGUgIldlYlNvdXJjZUJ1ZmZlci5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworU291cmNlQnVmZmVyUHJpdmF0ZUltcGw6OlNvdXJjZUJ1ZmZlclByaXZhdGVJ
bXBsKFBhc3NPd25QdHI8V2ViU291cmNlQnVmZmVyPiBzb3VyY2VCdWZmZXIpCisgICAgOiBtX3Nv
dXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXIpCit7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6VGlt
ZVJhbmdlcz4gU291cmNlQnVmZmVyUHJpdmF0ZUltcGw6OmJ1ZmZlcmVkKCkKK3sKKyAgICBpZiAo
IW1fc291cmNlQnVmZmVyKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6VGltZVJhbmdlczo6Y3Jl
YXRlKCk7CisKKyAgICBXZWJUaW1lUmFuZ2VzIHdlYlJhbmdlcyA9IG1fc291cmNlQnVmZmVyLT5i
dWZmZXJlZCgpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiByYW5nZXMgPSBXZWJD
b3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdl
YlJhbmdlcy5zaXplKCk7ICsraSkKKyAgICAgICAgcmFuZ2VzLT5hZGQod2ViUmFuZ2VzW2ldLnN0
YXJ0LCB3ZWJSYW5nZXNbaV0uZW5kKTsKKyAgICByZXR1cm4gcmFuZ2VzLnJlbGVhc2UoKTsKK30K
Kwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlSW1wbDo6YXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIW1fc291cmNlQnVmZmVyKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zb3VyY2VCdWZmZXItPmFwcGVuZChkYXRhLCBsZW5ndGgp
OworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjphYm9ydCgpCit7CisgICAgaWYg
KCFtX3NvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3Nv
dXJjZUJ1ZmZlci0+YWJvcnQoKTsKK30KKworYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlSW1wbDo6
c2V0VGltZXN0YW1wT2Zmc2V0KGRvdWJsZSBvZmZzZXQpCit7CisgICAgaWYgKCFtX3NvdXJjZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fc291cmNlQnVmZmVy
LT5zZXRUaW1lc3RhbXBPZmZzZXQob2Zmc2V0KTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2
YXRlSW1wbDo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpCit7CisgICAgaWYgKCFtX3NvdXJjZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc291cmNlQnVmZmVyLT5yZW1vdmVkRnJvbU1l
ZGlhU291cmNlKCk7CisgICAgbV9zb3VyY2VCdWZmZXIuY2xlYXIoKTsKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvdXJjZUJ1ZmZlclBy
aXZhdGVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Tb3VyY2VCdWZmZXJQcml2
YXRlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMjg3ZDJkYzQwMjVkNWViOWY5ZjYyMzkwNjFkNzMwZjUw
ZTkzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Tb3Vy
Y2VCdWZmZXJQcml2YXRlSW1wbC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNvdXJjZUJ1ZmZl
clByaXZhdGVJbXBsX2gKKyNkZWZpbmUgU291cmNlQnVmZmVyUHJpdmF0ZUltcGxfaAorCisjaWYg
RU5BQkxFKE1FRElBX1NPVVJDRSkKKworI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNvdXJjZUJ1ZmZlcjsKKworY2xhc3MgU291
cmNlQnVmZmVyUHJpdmF0ZUltcGwgOiBwdWJsaWMgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0
ZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU291cmNlQnVmZmVyUHJpdmF0ZUltcGwoUGFzc093
blB0cjxXZWJTb3VyY2VCdWZmZXI+KTsKKyAgICB2aXJ0dWFsIH5Tb3VyY2VCdWZmZXJQcml2YXRl
SW1wbCgpIHsgfQorCisgICAgLy8gU291cmNlQnVmZmVyUHJpdmF0ZSBtZXRob2RzLgorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBidWZmZXJlZCgpOworICAgIHZp
cnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VGlt
ZXN0YW1wT2Zmc2V0KGRvdWJsZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFT
b3VyY2UoKTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8V2ViU291cmNlQnVmZmVyPiBtX3NvdXJj
ZUJ1ZmZlcjsKK307CisKKworfQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKaW5kZXgg
NGM4ZGY4OTI3N2M1NTg1NTYyODExYzc1ZWMyN2ZiYTliNmQyZGI0OC4uZWU5ZGNiNWE4MjliNTY0
NGRjZTMyMDE2OTRhNTIzYWQ4Njk2ZmZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCkBAIC0yMSw2ICsyMSw3
IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlJlbmRlclZp
ZXcuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiVVVJRC5oIgogI2luY2x1
ZGUgIldlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5o
IgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgpAQCAtMjgsNiArMjksNyBAQAogI2luY2x1ZGUg
IldlYk1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFTb3VyY2VDbGllbnQuaCIKICNp
bmNsdWRlICJXZWJNZWRpYVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJTb3VyY2VCdWZmZXIu
aCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5o
PgogI2luY2x1ZGUgPHB1YmxpYy9XZWJDU3RyaW5nLmg+CkBAIC02MCwyMCArNjIsMzQgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfldlYk1lZGlhU291cmNlQ2xpZW50SW1wbCgpOwogCiAgICAgLy8g
V2ViTWVkaWFTb3VyY2VDbGllbnQgbWV0aG9kcy4KLSAgICB2aXJ0dWFsIEFkZElkU3RhdHVzIGFk
ZElkKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwgY29uc3QgV2Vi
VmVjdG9yPFdlYlN0cmluZz4mIGNvZGVjcyk7Ci0gICAgdmlydHVhbCBib29sIHJlbW92ZUlkKGNv
bnN0IFdlYlN0cmluZyYgaWQpOwotICAgIHZpcnR1YWwgV2ViVGltZVJhbmdlcyBidWZmZXJlZChj
b25zdCBXZWJTdHJpbmcmIGlkKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kKGNvbnN0IFdlYlN0
cmluZyYgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgdmlydHVhbCBib29sIGFib3J0KGNvbnN0IFdlYlN0cmluZyYgaWQpOworICAgIHZpcnR1YWwg
QWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBXZWJTdHJpbmcmIHR5cGUsIGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBjb2RlY3MsIFdlYlNvdXJjZUJ1ZmZlcioqKTsKICAgICB2aXJ0
dWFsIGRvdWJsZSBkdXJhdGlvbigpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3Vi
bGUpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyk7Ci0g
ICAgdmlydHVhbCBib29sIHNldFRpbWVzdGFtcE9mZnNldChjb25zdCBXZWJTdHJpbmcmIGlkLCBk
b3VibGUgb2Zmc2V0KTsKIAogcHJpdmF0ZToKICAgICBXZWJNZWRpYVBsYXllciogbV93ZWJNZWRp
YVBsYXllcjsKIH07CiAKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjbGFzcyBvbmNlIHRoZSBDaHJv
bWl1bSBjb2RlIGltcGxlbWVudHMgaXRzIG93bgorLy8gdmVyc2lvbiBvZiBXZWJNZWRpYVBsYXll
cjo6bG9hZChXZWJVUkwsIFdlYk1lZGlhU291cmNlLCBDT1JTTW9kZSkuCisvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzcxCitjbGFzcyBXZWJTb3VyY2VCdWZm
ZXJJbXBsIDogcHVibGljIFdlYlNvdXJjZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgV2ViU291cmNl
QnVmZmVySW1wbChXZWJNZWRpYVBsYXllciosIGNvbnN0IFdlYlN0cmluZyYgaWQpOworCisgICAg
Ly8gV2ViU291cmNlQnVmZmVyIG1ldGhvZHMuCisgICAgdmlydHVhbCBXZWJUaW1lUmFuZ2VzIGJ1
ZmZlcmVkKCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgYm9vbCBhYm9ydCgpOworICAgIHZp
cnR1YWwgYm9vbCBzZXRUaW1lc3RhbXBPZmZzZXQoZG91YmxlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpOworCitwcml2YXRlOgorICAgIFdlYk1lZGlhUGxheWVy
KiBtX3dlYk1lZGlhUGxheWVyOworICAgIFdlYlN0cmluZyBtX2lkOworfTsKKwogV2ViTWVkaWFT
b3VyY2VDbGllbnRJbXBsOjpXZWJNZWRpYVNvdXJjZUNsaWVudEltcGwoV2ViTWVkaWFQbGF5ZXIq
IHdlYk1lZGlhUGxheWVyKQogICAgIDogbV93ZWJNZWRpYVBsYXllcih3ZWJNZWRpYVBsYXllcikK
IHsKQEAgLTgzLDQ5ICs5OSw2NSBAQCBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6On5XZWJNZWRp
YVNvdXJjZUNsaWVudEltcGwoKQogewogfQogCi1XZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkSWRT
dGF0dXMgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjphZGRJZChjb25zdCBXZWJTdHJpbmcmIGlk
LCBjb25zdCBXZWJTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBjb2Rl
Y3MpCitXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkU3RhdHVzIFdlYk1lZGlhU291cmNlQ2xpZW50
SW1wbDo6YWRkU291cmNlQnVmZmVyKGNvbnN0IFdlYlN0cmluZyYgdHlwZSwgY29uc3QgV2ViVmVj
dG9yPFdlYlN0cmluZz4mIGNvZGVjcywKKyAgICBXZWJTb3VyY2VCdWZmZXIqKiBzb3VyY2VCdWZm
ZXIpCit7CisgICAgV2ViU3RyaW5nIGlkID0gV2ViQ29yZTo6Y3JlYXRlQ2Fub25pY2FsVVVJRFN0
cmluZygpOworICAgIFdlYk1lZGlhU291cmNlQ2xpZW50OjpBZGRTdGF0dXMgcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8V2ViTWVkaWFTb3VyY2VDbGllbnQ6OkFkZFN0YXR1cz4obV93ZWJNZWRpYVBsYXll
ci0+c291cmNlQWRkSWQoaWQsIHR5cGUsIGNvZGVjcykpOworICAgIGlmIChyZXN1bHQgPT0gV2Vi
TWVkaWFTb3VyY2VDbGllbnQ6OkFkZFN0YXR1c09rKQorICAgICAgICAqc291cmNlQnVmZmVyID0g
bmV3IFdlYlNvdXJjZUJ1ZmZlckltcGwobV93ZWJNZWRpYVBsYXllciwgaWQpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZG91YmxlIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6ZHVyYXRp
b24oKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRk
SWRTdGF0dXM+KG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFkZElkKGlkLCB0eXBlLCBjb2RlY3Mp
KTsKKyAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZHVyYXRpb24oKTsKIH0KIAotYm9vbCBX
ZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OnJlbW92ZUlkKGNvbnN0IFdlYlN0cmluZyYgaWQpCit2
b2lkIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9u
KQogewotICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VSZW1vdmVJZChpZCk7Cisg
ICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZVNldER1cmF0aW9uKGR1cmF0aW9uKTsK
IH0KIAotV2ViVGltZVJhbmdlcyBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OmJ1ZmZlcmVkKGNv
bnN0IFdlYlN0cmluZyYgaWQpCit2b2lkIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6ZW5kT2ZT
dHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQogewotICAgIHJldHVybiBtX3dlYk1lZGlh
UGxheWVyLT5zb3VyY2VCdWZmZXJlZChpZCk7CisgICAgbV93ZWJNZWRpYVBsYXllci0+c291cmNl
RW5kT2ZTdHJlYW0oc3RhdGljX2Nhc3Q8V2ViTWVkaWFQbGF5ZXI6OkVuZE9mU3RyZWFtU3RhdHVz
PihzdGF0dXMpKTsKIH0KIAotYm9vbCBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OmFwcGVuZChj
b25zdCBXZWJTdHJpbmcmIGlkLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpCitXZWJTb3VyY2VCdWZmZXJJbXBsOjpXZWJTb3VyY2VCdWZmZXJJbXBsKFdlYk1lZGlh
UGxheWVyKiB3ZWJNZWRpYVBsYXllciwgY29uc3QgV2ViU3RyaW5nJiBpZCkKKyAgICA6IG1fd2Vi
TWVkaWFQbGF5ZXIod2ViTWVkaWFQbGF5ZXIpCisgICAgLCBtX2lkKGlkKQogewotICAgIHJldHVy
biBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VBcHBlbmQoaWQsIGRhdGEsIGxlbmd0aCk7CiB9CiAK
LWJvb2wgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjphYm9ydChjb25zdCBXZWJTdHJpbmcmIGlk
KQorV2ViVGltZVJhbmdlcyBXZWJTb3VyY2VCdWZmZXJJbXBsOjpidWZmZXJlZCgpCiB7Ci0gICAg
cmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFib3J0KGlkKTsKKyAgICByZXR1cm4gbV93
ZWJNZWRpYVBsYXllci0+c291cmNlQnVmZmVyZWQobV9pZCk7CiB9CiAKLWRvdWJsZSBXZWJNZWRp
YVNvdXJjZUNsaWVudEltcGw6OmR1cmF0aW9uKCkKK3ZvaWQgV2ViU291cmNlQnVmZmVySW1wbDo6
YXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAg
ICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZHVyYXRpb24oKTsKKyAgICBtX3dlYk1lZGlhUGxh
eWVyLT5zb3VyY2VBcHBlbmQobV9pZCwgZGF0YSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBXZWJNZWRp
YVNvdXJjZUNsaWVudEltcGw6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKK2Jvb2wgV2Vi
U291cmNlQnVmZmVySW1wbDo6YWJvcnQoKQogewotICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVy
LT5zb3VyY2VTZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5
ZXItPnNvdXJjZUFib3J0KG1faWQpOwogfQogCi12b2lkIFdlYk1lZGlhU291cmNlQ2xpZW50SW1w
bDo6ZW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQorYm9vbCBXZWJTb3VyY2VC
dWZmZXJJbXBsOjpzZXRUaW1lc3RhbXBPZmZzZXQoZG91YmxlIG9mZnNldCkKIHsKLSAgICBtX3dl
Yk1lZGlhUGxheWVyLT5zb3VyY2VFbmRPZlN0cmVhbShzdGF0aWNfY2FzdDxXZWJNZWRpYVBsYXll
cjo6RW5kT2ZTdHJlYW1TdGF0dXM+KHN0YXR1cykpOworICAgIHJldHVybiBtX3dlYk1lZGlhUGxh
eWVyLT5zb3VyY2VTZXRUaW1lc3RhbXBPZmZzZXQobV9pZCwgb2Zmc2V0KTsKIH0KIAotYm9vbCBX
ZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OnNldFRpbWVzdGFtcE9mZnNldChjb25zdCBXZWJTdHJp
bmcmIGlkLCBkb3VibGUgb2Zmc2V0KQordm9pZCBXZWJTb3VyY2VCdWZmZXJJbXBsOjpyZW1vdmVk
RnJvbU1lZGlhU291cmNlKCkKIHsKLSAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c291cmNl
U2V0VGltZXN0YW1wT2Zmc2V0KGlkLCBvZmZzZXQpOworICAgIGlmICghbV93ZWJNZWRpYVBsYXll
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJNZWRpYVBsYXllci0+c291cmNlUmVtb3Zl
SWQobV9pZCk7CisgICAgbV93ZWJNZWRpYVBsYXllciA9IDA7CiB9CiAKIHN0YXRpYyBQYXNzT3du
UHRyPFdlYk1lZGlhUGxheWVyPiBjcmVhdGVXZWJNZWRpYVBsYXllcihXZWJNZWRpYVBsYXllckNs
aWVudCogY2xpZW50LCBjb25zdCBXZWJVUkwmIHVybCwgRnJhbWUqIGZyYW1lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTb3VyY2VJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU291cmNlSW1wbC5jcHAKaW5kZXggYTVl
Yzg5MjJjZmY3MmI0YzFlMzhlMmVlMTdjMzMwZWI2NDE4OTBjNC4uMmJhMmMyM2MyN2QwZmY3ZjYz
ZmNiODFhN2IxN2VhMDNhNWNhZTBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTWVkaWFTb3VyY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJNZWRpYVNvdXJjZUltcGwuY3BwCkBAIC0zMSwxMDggKzMxLDEzIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFTb3VyY2VJbXBsLmgiCiAKLSNpbmNsdWRl
ICJNZWRpYVNvdXJjZVByaXZhdGUuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGVJbXBs
LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFTb3VyY2VDbGllbnQuaCIKIAogI2lmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBNZWRpYVNvdXJjZVByaXZh
dGVJbXBsIDogcHVibGljIFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgTWVkaWFTb3VyY2VQcml2YXRlSW1wbChQYXNzT3duUHRyPFdlYk1lZGlhU291
cmNlQ2xpZW50Pik7Ci0gICAgdmlydHVhbCB+TWVkaWFTb3VyY2VQcml2YXRlSW1wbCgpIHsgfQot
Ci0gICAgLy8gTWVkaWFTb3VyY2VQcml2YXRlIG1ldGhvZHMuCi0gICAgdmlydHVhbCBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVByaXZhdGU6OkFkZElkU3RhdHVzIGFkZElkKGNvbnN0IFN0cmluZyYgaWQs
IGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVjcyk7Ci0gICAg
dmlydHVhbCBib29sIHJlbW92ZUlkKGNvbnN0IFN0cmluZyYgaWQpOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBidWZmZXJlZChjb25zdCBTdHJpbmcmIGlkKTsK
LSAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdmlydHVhbCBib29sIGFib3J0KGNv
bnN0IFN0cmluZyYgaWQpOwotICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldER1cmF0aW9uKGRvdWJsZSk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZE9mU3Ry
ZWFtKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpOwotICAg
IHZpcnR1YWwgYm9vbCBzZXRUaW1lc3RhbXBPZmZzZXQoY29uc3QgU3RyaW5nJiBpZCwgZG91Ymxl
IG9mZnNldCk7Ci0KLXByaXZhdGU6Ci0gICAgT3duUHRyPFdlYktpdDo6V2ViTWVkaWFTb3VyY2VD
bGllbnQ+IG1fY2xpZW50OwotfTsKLQotTWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6TWVkaWFTb3Vy
Y2VQcml2YXRlSW1wbChQYXNzT3duUHRyPFdlYktpdDo6V2ViTWVkaWFTb3VyY2VDbGllbnQ+IGNs
aWVudCkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLXsKLX0KLQotV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VQcml2YXRlOjpBZGRJZFN0YXR1cyBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjphZGRJZChjb25z
dCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBj
b2RlY3MpCi17Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok1l
ZGlhU291cmNlUHJpdmF0ZTo6Tm90U3VwcG9ydGVkOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6QWRkSWRTdGF0dXM+KG1fY2xpZW50LT5hZGRJ
ZChpZCwgdHlwZSwgY29kZWNzKSk7Ci19Ci0KLWJvb2wgTWVkaWFTb3VyY2VQcml2YXRlSW1wbDo6
cmVtb3ZlSWQoY29uc3QgU3RyaW5nJiBpZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9jbGllbnQtPnJlbW92ZUlkKGlkKTsKLX0K
LQotUGFzc1JlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBNZWRpYVNvdXJjZVByaXZhdGVJbXBs
OjpidWZmZXJlZChjb25zdCBTdHJpbmcmIGlkKQotewotICAgIGlmICghbV9jbGllbnQpCi0gICAg
ICAgIHJldHVybiBXZWJDb3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLQotICAgIFdlYlRpbWVS
YW5nZXMgd2ViUmFuZ2VzID0gbV9jbGllbnQtPmJ1ZmZlcmVkKGlkKTsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6VGltZVJhbmdlcz4gcmFuZ2VzID0gV2ViQ29yZTo6VGltZVJhbmdlczo6Y3JlYXRlKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJSYW5nZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHJhbmdlcy0+YWRkKHdlYlJhbmdlc1tpXS5zdGFydCwgd2ViUmFuZ2VzW2ldLmVuZCk7Ci0g
ICAgcmV0dXJuIHJhbmdlcy5yZWxlYXNlKCk7Ci19Ci0KLWJvb2wgTWVkaWFTb3VyY2VQcml2YXRl
SW1wbDo6YXBwZW5kKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoIW1fY2xpZW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9jbGllbnQtPmFwcGVuZChpZCwgZGF0YSwgbGVuZ3RoKTsK
LX0KLQotYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjphYm9ydChjb25zdCBTdHJpbmcmIGlk
KQotewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBtX2NsaWVudC0+YWJvcnQoaWQpOwotfQotCi1kb3VibGUgTWVkaWFTb3VyY2VQcml2YXRl
SW1wbDo6ZHVyYXRpb24oKQotewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgcmV0dXJuIG1fY2xp
ZW50LT5kdXJhdGlvbigpOwotfQotCi12b2lkIE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OnNldER1
cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1f
Y2xpZW50LT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2VQcml2
YXRlSW1wbDo6ZW5kT2ZTdHJlYW0oV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0
cmVhbVN0YXR1cyBzdGF0dXMpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVu
dC0+ZW5kT2ZTdHJlYW0oc3RhdGljX2Nhc3Q8V2ViTWVkaWFTb3VyY2VDbGllbnQ6OkVuZE9mU3Ry
ZWFtU3RhdHVzPihzdGF0dXMpKTsKLX0KLQotYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpz
ZXRUaW1lc3RhbXBPZmZzZXQoY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIG9mZnNldCkKLXsKLSAg
ICBpZiAoIW1fY2xpZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fY2xp
ZW50LT5zZXRUaW1lc3RhbXBPZmZzZXQoaWQsIG9mZnNldCk7Ci19Ci0KIAogV2ViTWVkaWFTb3Vy
Y2VJbXBsOjpXZWJNZWRpYVNvdXJjZUltcGwoUGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVNvdXJj
ZT4gbWVkaWFTb3VyY2UpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190750</attachid>
            <date>2013-02-28 10:21:40 -0800</date>
            <delta_ts>2013-02-28 11:02:50 -0800</delta_ts>
            <desc>Fix remaining nit.</desc>
            <filename>bug-110798-20130228101752.patch</filename>
            <type>text/plain</type>
            <size>53682</size>
            <attacher name="Aaron Colwell">acolwell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MzIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA0ZGFkMGM3NmQ3ZmQ5
MGRjMzE4YjFhOTllM2VmMmE0OTlmZDQ2Ny4uNjZiMmEyOWUwOGViYTBlOTJhYjBlY2EyYTk2MThm
MmYzMGJiNjhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAyLTI4ICBBYXJv
biBDb2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZhY3RvciBTb3Vy
Y2VCdWZmZXIgbWV0aG9kcyBvdXQgb2YgTWVkaWFTb3VyY2VQcml2YXRlICYgV2ViTWVkaWFTb3Vy
Y2UKKyAgICAgICAgaW50byBTb3VyY2VCdWZmZXJQcml2YXRlICYgV2ViU291cmNlQnVmZmVyIHJl
c3BlY3RpdmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgsIEplciBOb2JsZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIHVzZXIgdmlzaWJsZSBiZWhhdmlvciBoYXMgY2hh
bmdlZC4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmg6CisgICAgICAgIChNZWRpYVNvdXJjZSk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlcjo6c2V0VGltZXN0YW1wT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YWJvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aXNSZW1vdmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aXNPcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlcjo6aXNFbmRlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZm
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU291cmNlQnVmZmVyKToKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyTGlzdDo6U291cmNlQnVmZmVyTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJMaXN0OjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyTGlzdDo6Y2xlYXIpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyTGlzdC5oOgorICAgICAgICAoU291cmNlQnVmZmVyTGlzdCk6CisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVNvdXJjZVByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVkaWFT
b3VyY2VQcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQ
cml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNvdXJjZUJ1ZmZlclByaXZh
dGUpOiBDb250YWlucyBtZXRob2RzIGV4dHJhY3RlZCBmcm9tIE1lZGlhUGxheWVyUHJpdmF0ZS4K
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6OlNvdXJjZUJ1ZmZlclByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZTo6flNvdXJjZUJ1ZmZl
clByaXZhdGUpOgorCiAyMDEzLTAyLTI4ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTQ0MTU3LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA1ODc0ZGVjOGM2MmJkYTY0NjVlODRjNDNlNGI5OTkyODE3
NWY5MDgxLi4xZTRmMGEwZjU1ODEyOTA2MTQwZjU2NzZkOGI4MWYxN2M4YTczOWY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEzLTAyLTI4ICBBYXJvbiBD
b2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZhY3RvciBTb3VyY2VC
dWZmZXIgbWV0aG9kcyBvdXQgb2YgTWVkaWFTb3VyY2VQcml2YXRlICYgV2ViTWVkaWFTb3VyY2UK
KyAgICAgICAgaW50byBTb3VyY2VCdWZmZXJQcml2YXRlICYgV2ViU291cmNlQnVmZmVyIHJlc3Bl
Y3RpdmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgsIEplciBOb2JsZS4KKwor
ICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYk1lZGlhU291cmNlQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViTWVkaWFTb3VyY2VDbGllbnQp
OgorICAgICAgICAqIHB1YmxpYy9XZWJTb3VyY2VCdWZmZXIuaDogCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViU291cmNlQnVmZmVyKTogQ29udGFpbnMgU291cmNlQnVmZmVyIG1ldGhv
ZHMgZXh0cmFjdGVkIGZyb20gV2ViTWVkaWFTb3VyY2UuCisgICAgICAgIChXZWJLaXQ6OldlYlNv
dXJjZUJ1ZmZlcjo6fldlYlNvdXJjZUJ1ZmZlcik6CisgICAgICAgICogc3JjL0Fzc2VydE1hdGNo
aW5nRW51bXMuY3BwOgorICAgICAgICAqIHNyYy9NZWRpYVNvdXJjZVByaXZhdGVJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU291cmNlUHJpdmF0ZUlt
cGw6Ok1lZGlhU291cmNlUHJpdmF0ZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNvdXJj
ZVByaXZhdGVJbXBsOjphZGRTb3VyY2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNv
dXJjZVByaXZhdGVJbXBsOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU291cmNl
UHJpdmF0ZUltcGw6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTb3VyY2VQ
cml2YXRlSW1wbDo6ZW5kT2ZTdHJlYW0pOgorICAgICAgICAqIHNyYy9NZWRpYVNvdXJjZVByaXZh
dGVJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoTWVkaWFTb3VyY2VQcml2YXRl
SW1wbCk6IEFkYXB0cyBNZWRpYVNvdXJjZVByaXZhdGUgaW50ZXJmYWNlIHRvIFdlYk1lZGlhU291
cmNlQ2xpZW50LgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjp+TWVk
aWFTb3VyY2VQcml2YXRlSW1wbCk6CisgICAgICAgICogc3JjL1NvdXJjZUJ1ZmZlclByaXZhdGVJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZl
clByaXZhdGVJbXBsOjpTb3VyY2VCdWZmZXJQcml2YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OlNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlNv
dXJjZUJ1ZmZlclByaXZhdGVJbXBsOjphcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VC
dWZmZXJQcml2YXRlSW1wbDo6YWJvcnQpOgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VCdWZmZXJQ
cml2YXRlSW1wbDo6c2V0VGltZXN0YW1wT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6U291cmNl
QnVmZmVyUHJpdmF0ZUltcGw6OnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UpOgorICAgICAgICAqIHNy
Yy9Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsKTogQWRhcHRzIFNvdXJjZUJ1ZmZlclByaXZhdGUgaW50
ZXJmYWNlIHRvIFdlYlNvdXJjZUJ1ZmZlci4KKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVmZmVy
UHJpdmF0ZUltcGw6On5Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbCk6CisgICAgICAgICogc3JjL1dl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJNZWRpYVNvdXJjZUNsaWVu
dEltcGwpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNvdXJjZUJ1ZmZlckltcGwp
OiBUZW1wb3JhcnkgaW1wbGVtZW50YXRpb24gb2YgV2ViU291cmNlQnVmZmVyIHRvIGtlZXAgdGhp
bmdzIHdvcmtpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgQ2hy
b21pdW0gc2lkZSBjaGFuZ2VzIGxhbmQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU291cmNl
Q2xpZW50SW1wbDo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFT
b3VyY2VDbGllbnRJbXBsOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU291
cmNlQ2xpZW50SW1wbDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVNv
dXJjZUNsaWVudEltcGw6OmVuZE9mU3RyZWFtKToKKyAgICAgICAgKFdlYktpdDo6V2ViU291cmNl
QnVmZmVySW1wbDo6V2ViU291cmNlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNv
dXJjZUJ1ZmZlckltcGw6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViU291cmNlQnVm
ZmVySW1wbDo6YXBwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViU291cmNlQnVmZmVySW1wbDo6
YWJvcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb3VyY2VCdWZmZXJJbXBsOjpzZXRUaW1lc3Rh
bXBPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb3VyY2VCdWZmZXJJbXBsOjpyZW1vdmVk
RnJvbU1lZGlhU291cmNlKToKKyAgICAgICAgKiBzcmMvV2ViTWVkaWFTb3VyY2VJbXBsLmNwcDoK
KwogMjAxMy0wMi0yOCAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJlbmRlclRhYmxlQ2VsbERlYXRoVGVzdCB1bml0IHRlc3QgZmFpbHMgb24gbWFj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2Uu
Y3BwCmluZGV4IGU2YmZlMjQyYWQyZDMyNDY3MzFhNzA2NDgwYThkNmIxMGVjNWJkN2MuLjgwY2Y2
YzEzOThiYTgzODI2ZjRhYzg0MWM2NDBjNjZlNWU0N2E3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNp
bmNsdWRlIDx3dGYvVWludDhBcnJheS5oPgogCkBAIC0xMzEsMjEgKzEzMiwxOCBAQCBTb3VyY2VC
dWZmZXIqIE1lZGlhU291cmNlOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiB0eXBlLCBF
eGNlcHRpb25Db2RlJiBlYwogICAgIH0KIAogICAgIC8vIDUuIENyZWF0ZSBhIG5ldyBTb3VyY2VC
dWZmZXIgb2JqZWN0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KLSAgICBTdHJpbmcgaWQgPSBt
X3NvdXJjZUJ1ZmZlcnMtPmdlbmVyYXRlVW5pcXVlSWQoKTsKLSAgICBpZiAoaWQgPT0gZW1wdHlT
dHJpbmcoKSkgewotICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQorICAgIE93blB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiBzb3VyY2VCdWZm
ZXJQcml2YXRlOworICAgIHN3aXRjaCAobV9wcml2YXRlLT5hZGRTb3VyY2VCdWZmZXIoY29udGVu
dFR5cGUudHlwZSgpLCBjb2RlY3MsICZzb3VyY2VCdWZmZXJQcml2YXRlKSkgeworICAgIGNhc2Ug
TWVkaWFTb3VyY2VQcml2YXRlOjpPazogeworICAgICAgICBBU1NFUlQoc291cmNlQnVmZmVyUHJp
dmF0ZSk7CisgICAgICAgIFJlZlB0cjxTb3VyY2VCdWZmZXI+IGJ1ZmZlciA9IFNvdXJjZUJ1ZmZl
cjo6Y3JlYXRlKHNvdXJjZUJ1ZmZlclByaXZhdGUucmVsZWFzZSgpLCB0aGlzKTsKIAotICAgIFJl
ZlB0cjxTb3VyY2VCdWZmZXI+IGJ1ZmZlciA9IFNvdXJjZUJ1ZmZlcjo6Y3JlYXRlKGlkLCB0aGlz
KTsKLQotICAgIHN3aXRjaCAobV9wcml2YXRlLT5hZGRJZChidWZmZXItPmlkKCksIGNvbnRlbnRU
eXBlLnR5cGUoKSwgY29kZWNzKSkgewotICAgIGNhc2UgTWVkaWFTb3VyY2VQcml2YXRlOjpPazoK
ICAgICAgICAgLy8gNi4gQWRkIHRoZSBuZXcgb2JqZWN0IHRvIHNvdXJjZUJ1ZmZlcnMgYW5kIGZp
cmUgYSBhZGRzb3VyY2VidWZmZXIgb24gdGhhdCBvYmplY3QuCiAgICAgICAgIG1fc291cmNlQnVm
ZmVycy0+YWRkKGJ1ZmZlcik7CiAgICAgICAgIG1fYWN0aXZlU291cmNlQnVmZmVycy0+YWRkKGJ1
ZmZlcik7CiAgICAgICAgIC8vIDcuIFJldHVybiB0aGUgbmV3IG9iamVjdCB0byB0aGUgY2FsbGVy
LgogICAgICAgICByZXR1cm4gYnVmZmVyLmdldCgpOworICAgIH0KICAgICBjYXNlIE1lZGlhU291
cmNlUHJpdmF0ZTo6Tm90U3VwcG9ydGVkOgogICAgICAgICAvLyAyIChjb250KS4gSWYgdHlwZSBj
b250YWlucyBhIE1JTUUgdHlwZSAuLi4gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggdGhlIHR5
cGVzIAogICAgICAgICAvLyBzcGVjaWZpZWQgZm9yIHRoZSBvdGhlciBTb3VyY2VCdWZmZXIgb2Jq
ZWN0cyBpbiBzb3VyY2VCdWZmZXJzLCB0aGVuIHRocm93CkBAIC0xOTEsNyArMTg5LDYgQEAgdm9p
ZCBNZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlciogYnVmZmVyLCBF
eGNlcHRpb25Db2RlJiBlYykKIAogICAgIC8vIDcuIERlc3Ryb3kgYWxsIHJlc291cmNlcyBmb3Ig
c291cmNlQnVmZmVyLgogICAgIG1fYWN0aXZlU291cmNlQnVmZmVycy0+cmVtb3ZlKGJ1ZmZlcik7
Ci0gICAgbV9wcml2YXRlLT5yZW1vdmVJZChidWZmZXItPmlkKCkpOwogCiAgICAgLy8gNC4gUmVt
b3ZlIHRyYWNrIGluZm9ybWF0aW9uIGZyb20gYXVkaW9UcmFja3MsIHZpZGVvVHJhY2tzLCBhbmQg
dGV4dFRyYWNrcyBmb3IgYWxsIHRyYWNrcyAKICAgICAvLyBhc3NvY2lhdGVkIHdpdGggc291cmNl
QnVmZmVyIGFuZCBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGNoYW5nZSBvbiB0aGUgbW9kaWZp
ZWQgbGlzdHMuCkBAIC0yNjMsNjIgKzI2MCw2IEBAIHZvaWQgTWVkaWFTb3VyY2U6OmVuZE9mU3Ry
ZWFtKGNvbnN0IFN0cmluZyYgZXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG1fcHJpdmF0
ZS0+ZW5kT2ZTdHJlYW0oZW9zU3RhdHVzKTsKIH0KIAotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBN
ZWRpYVNvdXJjZTo6YnVmZmVyZWQoY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUgfHwgbV9yZWFkeVN0YXRlID09IGNsb3NlZEtl
eXdvcmQoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wcml2YXRlLT5idWZmZXJlZChpZCk7Ci19Ci0K
LXZvaWQgTWVkaWFTb3VyY2U6OmFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghZGF0YS5nZXQo
KSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghbV9wcml2YXRlIHx8IG1fcmVhZHlTdGF0ZSA9PSBjbG9zZWRLZXl3
b3JkKCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gZW5kZWRLZXl3b3JkKCkpCi0gICAg
ICAgIHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Ci0KLSAgICBpZiAoIW1fcHJpdmF0ZS0+
YXBwZW5kKGlkLCBkYXRhLT5kYXRhKCksIGRhdGEtPmxlbmd0aCgpKSkgewotICAgICAgICBlYyA9
IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTb3Vy
Y2U6OmFib3J0KGNvbnN0IFN0cmluZyYgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlm
ICghbV9wcml2YXRlIHx8IG1fcmVhZHlTdGF0ZSAhPSBvcGVuS2V5d29yZCgpKSB7Ci0gICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fcHJpdmF0ZS0+YWJvcnQoaWQpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQotYm9vbCBNZWRpYVNvdXJjZTo6c2V0VGltZXN0YW1wT2Zmc2V0KGNvbnN0IFN0cmluZyYg
aWQsIGRvdWJsZSBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghbV9wcml2
YXRlIHx8IG1fcmVhZHlTdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkpIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
ICghbV9wcml2YXRlLT5zZXRUaW1lc3RhbXBPZmZzZXQoaWQsIG9mZnNldCkpIHsKLSAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBNZWRpYVNvdXJjZTo6c2V0UHJpdmF0ZUFuZE9wZW4o
UGFzc093blB0cjxNZWRpYVNvdXJjZVByaXZhdGU+IG1lZGlhU291cmNlUHJpdmF0ZSkKIHsKICAg
ICBBU1NFUlQobWVkaWFTb3VyY2VQcml2YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAppbmRleCA5NTM1OGQ3Y2I5ZDE3YzQ2YWIwYTk0
ZWY3NTJiN2I1Y2YxZDczMmU3Li4yNjA5MGFhM2RiYmMyZmFkNGUwZGU2OGYwNDQyOGZmMjdhNDlm
ZDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5oCkBAIC02NywxMSArNjcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByaXZhdGVB
bmRPcGVuKFBhc3NPd25QdHI8TWVkaWFTb3VyY2VQcml2YXRlPik7CiAKLSAgICBQYXNzUmVmUHRy
PFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKGNvbnN0IFN0cmluZyYgaWQsIEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPFVpbnQ4
QXJyYXk+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFib3J0KGNvbnN0IFN0cmlu
ZyYgaWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldFRpbWVzdGFtcE9mZnNldChjb25z
dCBTdHJpbmcmIGlkLCBkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIC8vIEV2ZW50VGFy
Z2V0IGludGVyZmFjZQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKaW5kZXggMWQ2
ZTYwNmE3YWI3ZDFkYzNlNzU4NDQyYWM2ZjE0NzJhN2JiNzM4Ni4uZmY4MGRmNTQ3NDRhNGEzMTM0
ODljMjU2NzBhNzJkNjUxNDkzZWUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcApAQCAtMzMsMTYgKzMzLDI1IEBACiAKICNp
ZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCisjaW5jbHVkZSAiTWVkaWFTb3VyY2UuaCIKKyNpbmNs
dWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9VaW50OEFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU291cmNl
QnVmZmVyOjpTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYVNv
dXJjZT4gc291cmNlKQotICAgIDogbV9pZChpZCkKK1Bhc3NSZWZQdHI8U291cmNlQnVmZmVyPiBT
b3VyY2VCdWZmZXI6OmNyZWF0ZShQYXNzT3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJj
ZUJ1ZmZlclByaXZhdGUsIFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+IHNvdXJjZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXJQcml2YXRlLCBzb3Vy
Y2UpKTsKK30KKworU291cmNlQnVmZmVyOjpTb3VyY2VCdWZmZXIoUGFzc093blB0cjxTb3VyY2VC
dWZmZXJQcml2YXRlPiBzb3VyY2VCdWZmZXJQcml2YXRlLCBQYXNzUmVmUHRyPE1lZGlhU291cmNl
PiBzb3VyY2UpCisgICAgOiBtX3ByaXZhdGUoc291cmNlQnVmZmVyUHJpdmF0ZSkKICAgICAsIG1f
c291cmNlKHNvdXJjZSkKICAgICAsIG1fdGltZXN0YW1wT2Zmc2V0KDApCiB7CisgICAgQVNTRVJU
KG1fcHJpdmF0ZSk7CisgICAgQVNTRVJUKG1fc291cmNlKTsKIH0KIAogU291cmNlQnVmZmVyOjp+
U291cmNlQnVmZmVyKCkKQEAgLTUxLDEyICs2MCwxNiBAQCBTb3VyY2VCdWZmZXI6On5Tb3VyY2VC
dWZmZXIoKQogCiBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IFNvdXJjZUJ1ZmZlcjo6YnVmZmVyZWQo
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkgeworICAgIC8v
IFNlY3Rpb24gMy4xIGJ1ZmZlcmVkIGF0dHJpYnV0ZSBzdGVwcy4KKyAgICAvLyAxLiBJZiB0aGlz
IG9iamVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZUJ1ZmZlcnMgYXR0cmlidXRl
IG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlIHRoZW4gdGhyb3cgYW4KKyAgICAvLyAgICBJTlZB
TElEX1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIGlmIChp
c1JlbW92ZWQoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zb3VyY2UtPmJ1ZmZlcmVkKGlkKCksIGVj
KTsKKyAgICAvLyAyLiBSZXR1cm4gYSBuZXcgc3RhdGljIG5vcm1hbGl6ZWQgVGltZVJhbmdlcyBv
YmplY3QgZm9yIHRoZSBtZWRpYSBzZWdtZW50cyBidWZmZXJlZC4KKyAgICByZXR1cm4gbV9wcml2
YXRlLT5idWZmZXJlZCgpOwogfQogCiBkb3VibGUgU291cmNlQnVmZmVyOjp0aW1lc3RhbXBPZmZz
ZXQoKSBjb25zdApAQCAtNjYsMzMgKzc5LDEwMSBAQCBkb3VibGUgU291cmNlQnVmZmVyOjp0aW1l
c3RhbXBPZmZzZXQoKSBjb25zdAogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6c2V0VGltZXN0YW1wT2Zm
c2V0KGRvdWJsZSBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghbV9zb3Vy
Y2UpIHsKKyAgICAvLyBTZWN0aW9uIDMuMSB0aW1lc3RhbXBPZmZzZXQgYXR0cmlidXRlIHNldHRl
ciBzdGVwcy4KKyAgICAvLyAxLiBJZiB0aGlzIG9iamVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20g
dGhlIHNvdXJjZUJ1ZmZlcnMgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlIHRo
ZW4gdGhyb3cgYW4KKyAgICAvLyAgICBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgorICAgIGlmIChpc1JlbW92ZWQoKSkgewogICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc291
cmNlLT5zZXRUaW1lc3RhbXBPZmZzZXQoaWQoKSwgb2Zmc2V0LCBlYykpCi0gICAgICAgIG1fdGlt
ZXN0YW1wT2Zmc2V0ID0gb2Zmc2V0OworICAgIC8vIDQuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJp
YnV0ZSBvZiB0aGUgcGFyZW50IG1lZGlhIHNvdXJjZSBpcyBpbiB0aGUgImVuZGVkIiBzdGF0ZSB0
aGVuIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIGlmIChpc0VuZGVkKCkpIHsKKyAgICAg
ICAgLy8gNC4xIFNldCB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgb2YgdGhlIHBhcmVudCBtZWRp
YSBzb3VyY2UgdG8gIm9wZW4iCisgICAgICAgIC8vIDQuMiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBh
IHNpbXBsZSBldmVudCBuYW1lZCBzb3VyY2VvcGVuIGF0IHRoZSBwYXJlbnQgbWVkaWEgc291cmNl
LgorICAgICAgICBtX3NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVNvdXJjZTo6b3BlbktleXdv
cmQoKSk7CisgICAgfQorCisgICAgLy8gNS4gSWYgdGhpcyBvYmplY3QgaXMgd2FpdGluZyBmb3Ig
dGhlIGVuZCBvZiBhIG1lZGlhIHNlZ21lbnQgdG8gYmUgYXBwZW5kZWQsIHRoZW4gdGhyb3cgYW4g
SU5WQUxJRF9TVEFURV9FUlIKKyAgICAvLyBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYg
KCFtX3ByaXZhdGUtPnNldFRpbWVzdGFtcE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyA2LiBV
cGRhdGUgdGhlIGF0dHJpYnV0ZSB0byB0aGUgbmV3IHZhbHVlLgorICAgIG1fdGltZXN0YW1wT2Zm
c2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6YXBwZW5kKFBhc3NSZWZQdHI8
VWludDhBcnJheT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFtX3NvdXJj
ZSkgeworICAgIC8vIFNvdXJjZUJ1ZmZlci5hcHBlbmQoKSBzdGVwcyBmcm9tIE9jdG9iZXIgMXN0
IHZlcnNpb24gb2YgdGhlIE1lZGlhIFNvdXJjZSBFeHRlbnNpb25zIHNwZWMuCisgICAgLy8gaHR0
cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlLzdiYWI2NjM2OGYyYy9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjZG9tLWFwcGVuZAorCisgICAgLy8gMi4gSWYgZGF0
YSBpcyBudWxsIHRoZW4gdGhyb3cgYW4gSU5WQUxJRF9BQ0NFU1NfRVJSIGV4Y2VwdGlvbiBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gMy4gSWYgdGhp
cyBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2VCdWZmZXJzIGF0dHJpYnV0
ZSBvZiBtZWRpYSBzb3VyY2UgdGhlbiB0aHJvdworICAgIC8vICAgIGFuIElOVkFMSURfU1RBVEVf
RVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKGlzUmVtb3ZlZCgp
KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX3NvdXJjZS0+YXBwZW5kKGlkKCksIGRhdGEsIGVjKTsKKyAgICAvLyA1LiBJ
ZiB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgb2YgbWVkaWEgc291cmNlIGlzIGluIHRoZSAiZW5k
ZWQiIHN0YXRlIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgaWYgKGlzRW5kZWQo
KSkgeworICAgICAgICAvLyA1LjEuIFNldCB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgb2YgbWVk
aWEgc291cmNlIHRvICJvcGVuIgorICAgICAgICAvLyA1LjIuIFF1ZXVlIGEgdGFzayB0byBmaXJl
IGEgc2ltcGxlIGV2ZW50IG5hbWVkIHNvdXJjZW9wZW4gYXQgbWVkaWEgc291cmNlLgorICAgICAg
ICBtX3NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVNvdXJjZTo6b3BlbktleXdvcmQoKSk7Cisg
ICAgfQorCisgICAgLy8gU3RlcHMgNiAmIGJleW9uZCBhcmUgaGFuZGxlZCBieSB0aGUgcHJpdmF0
ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICBtX3ByaXZhdGUtPmFwcGVuZChkYXRhLT5kYXRhKCksIGRh
dGEtPmxlbmd0aCgpKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OmFib3J0KEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIGlmICghbV9zb3VyY2UpIHsKKyAgICAvLyBTZWN0aW9uIDMuMiBhYm9y
dCgpIG1ldGhvZCBzdGVwcy4KKyAgICAvLyAxLiBJZiB0aGlzIG9iamVjdCBoYXMgYmVlbiByZW1v
dmVkIGZyb20gdGhlIHNvdXJjZUJ1ZmZlcnMgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEg
c291cmNlCisgICAgLy8gICAgdGhlbiB0aHJvdyBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRp
b24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIC8vIDIuIElmIHRoZSByZWFkeVN0YXRlIGF0
dHJpYnV0ZSBvZiB0aGUgcGFyZW50IG1lZGlhIHNvdXJjZSBpcyBub3QgaW4gdGhlICJvcGVuIiBz
dGF0ZQorICAgIC8vICAgIHRoZW4gdGhyb3cgYW4gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9u
IGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICBpZiAoaXNSZW1vdmVkKCkgfHwgIWlzT3Blbigp
KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX3NvdXJjZS0+YWJvcnQoaWQoKSwgZWMpOworICAgIC8vIDQuIFJ1biB0aGUg
cmVzZXQgcGFyc2VyIHN0YXRlIGFsZ29yaXRobS4KKyAgICBtX3ByaXZhdGUtPmFib3J0KCk7Cit9
CisKK3ZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKCkKK3sKKyAgICBp
ZiAoaXNSZW1vdmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJpdmF0ZS0+cmVtb3Zl
ZEZyb21NZWRpYVNvdXJjZSgpOworICAgIG1fc291cmNlLmNsZWFyKCk7Cit9CisKK2Jvb2wgU291
cmNlQnVmZmVyOjppc1JlbW92ZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9zb3VyY2U7Cit9
CisKK2Jvb2wgU291cmNlQnVmZmVyOjppc09wZW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX3Nv
dXJjZSk7CisgICAgcmV0dXJuIG1fc291cmNlLT5yZWFkeVN0YXRlKCkgPT0gTWVkaWFTb3VyY2U6
Om9wZW5LZXl3b3JkKCk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyOjppc0VuZGVkKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9zb3VyY2UpOworICAgIHJldHVybiBtX3NvdXJjZS0+cmVhZHlTdGF0
ZSgpID09IE1lZGlhU291cmNlOjplbmRlZEtleXdvcmQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNl
QnVmZmVyLmgKaW5kZXggN2QxZTU4NjFjMGYyMWRkZWVhY2QzNDdhNzhjYmYyM2UwMzNlM2I3Yy4u
YTM1ZTMyNWNhMTM4OTdhMGVkODJlYzEyZjdhMDQzMjZjN2NiMzdiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCkBAIC0zNCw0MyAr
MzQsNDAgQEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIk1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KK2NsYXNzIE1lZGlhU291cmNlOwor
Y2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZTsKIGNsYXNzIFRpbWVSYW5nZXM7CiAKIGNsYXNzIFNv
dXJjZUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNvdXJjZUJ1ZmZlcj4gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
aWQsIFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+IHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU291cmNlQnVmZmVyKGlkLCBzb3VyY2UpKTsKLSAgICB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U291cmNlQnVmZmVyPiBjcmVhdGUoUGFzc093blB0cjxTb3VyY2VCdWZm
ZXJQcml2YXRlPiwgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4pOwogCiAgICAgdmlydHVhbCB+U291
cmNlQnVmZmVyKCk7CiAKKyAgICAvLyBTb3VyY2VCdWZmZXIuaWRsIG1ldGhvZHMKICAgICBQYXNz
UmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQogICAg
IGRvdWJsZSB0aW1lc3RhbXBPZmZzZXQoKSBjb25zdDsKICAgICB2b2lkIHNldFRpbWVzdGFtcE9m
ZnNldChkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQ
dHI8VWludDhBcnJheT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotCiAgICAgdm9pZCBhYm9ydChF
eGNlcHRpb25Db2RlJik7Ci0gICAgCi0gICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KIAotICAgIHZvaWQgY2xlYXIoKSB7IG1fc291cmNlLmNsZWFyKCk7IH0KKyAg
ICB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4p
OworICAgIFNvdXJjZUJ1ZmZlcihQYXNzT3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+LCBQYXNz
UmVmUHRyPE1lZGlhU291cmNlPik7CisKKyAgICBib29sIGlzUmVtb3ZlZCgpIGNvbnN0OworICAg
IGJvb2wgaXNPcGVuKCkgY29uc3Q7CisgICAgYm9vbCBpc0VuZGVkKCkgY29uc3Q7CiAKLSAgICBT
dHJpbmcgbV9pZDsKKyAgICBPd25QdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4gbV9wcml2YXRlOwog
ICAgIFJlZlB0cjxNZWRpYVNvdXJjZT4gbV9zb3VyY2U7Ci0gICAgCisKICAgICBkb3VibGUgbV90
aW1lc3RhbXBPZmZzZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmNwcAppbmRleCA4Mzk3ZTJkMTcyOWNmZGM2
MjUxZTI0NGIxOGZlMGI3NmVhN2I1ZTczLi4xMWRkOTFjMjcwYWZmNmY2YWFjY2EwN2FkYjFiNmNi
NjM0ODRhODA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlckxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvU291cmNlQnVmZmVyTGlzdC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJHZW5lcmljRXZl
bnRRdWV1ZS5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00Miw3ICs0Myw2IEBAIFNvdXJjZUJ1ZmZlckxpc3Q6OlNvdXJjZUJ1ZmZlckxpc3Qo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2VuZXJpY0V2ZW50UXVldWUqIGFzeW5jRXZlbnRRdWV1ZSkKICAgICA6IG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQogICAgICwgbV9hc3luY0V2ZW50UXVldWUo
YXN5bmNFdmVudFF1ZXVlKQotICAgICwgbV9sYXN0U291cmNlQnVmZmVySWQoMCkKIHsKIH0KIApA
QCAtNzAsNyArNzAsNyBAQCBib29sIFNvdXJjZUJ1ZmZlckxpc3Q6OnJlbW92ZShTb3VyY2VCdWZm
ZXIqIGJ1ZmZlcikKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGJ1ZmZlci0+Y2xlYXIoKTsKKyAgICBidWZmZXItPnJlbW92ZWRGcm9tTWVk
aWFTb3VyY2UoKTsKICAgICBtX2xpc3QucmVtb3ZlKGluZGV4KTsKICAgICBjcmVhdGVBbmRGaXJl
RXZlbnQoZXZlbnROYW1lcygpLndlYmtpdHJlbW92ZXNvdXJjZWJ1ZmZlckV2ZW50KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTc5LDM5ICs3OSwxMSBAQCBib29sIFNvdXJjZUJ1ZmZlckxpc3Q6OnJl
bW92ZShTb3VyY2VCdWZmZXIqIGJ1ZmZlcikKIHZvaWQgU291cmNlQnVmZmVyTGlzdDo6Y2xlYXIo
KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgKytpKQotICAg
ICAgICBtX2xpc3RbaV0tPmNsZWFyKCk7CisgICAgICAgIG1fbGlzdFtpXS0+cmVtb3ZlZEZyb21N
ZWRpYVNvdXJjZSgpOwogICAgIG1fbGlzdC5jbGVhcigpOwogICAgIGNyZWF0ZUFuZEZpcmVFdmVu
dChldmVudE5hbWVzKCkud2Via2l0cmVtb3Zlc291cmNlYnVmZmVyRXZlbnQpOwogfQogCi1TdHJp
bmcgU291cmNlQnVmZmVyTGlzdDo6Z2VuZXJhdGVVbmlxdWVJZCgpCi17Ci0gICAgLy8gRW5zdXJl
IGEgdW5pcXVlIGlkLiBVbnRpbCBtX2xhc3RTb3VyY2VCdWZmZXJJZCB3cmFwcyBhcm91bmQgKHZl
cnkgdW5saWtlbHkpLAotICAgIC8vIHRoaXMgbG9vcCB3aWxsIGV4aXQgYWZ0ZXIgb25lIGNoZWNr
LiBJZiBtX2xhc3RTb3VyY2VCdWZmZXJJZCBkb2VzIHdyYXAsCi0gICAgLy8gdGhpcyBsb29wIG1h
eSBydW4gYXMgbWFueSB0aW1lcyBhcyB0aGUgc2l6ZSBvZiBtX2xpc3QsIGJ1dCBpbiBtb3N0Ci0g
ICAgLy8gY2FzZXMgdGhhdCBzaG91bGQgYmUgbGVzcyB0aGFuIDEwLiBXZSBtYXkgd2FudCB0byBp
bnZlc3RpZ2F0ZSBhIG1vcmUKLSAgICAvLyBlZmZpY2llbnQgYXBwcm9hY2ggaWYgbWFueSBtb3Jl
IFNvdXJjZUJ1ZmZlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICBzaXplX3QgbmV4
dFNvdXJjZUJ1ZmZlcklkID0gbV9sYXN0U291cmNlQnVmZmVySWQgKyAxOwotCi0gICAgd2hpbGUg
KGNvbnRhaW5zKG5leHRTb3VyY2VCdWZmZXJJZCkpIHsKLSAgICAgICAgaWYgKG5leHRTb3VyY2VC
dWZmZXJJZCA9PSBtX2xhc3RTb3VyY2VCdWZmZXJJZCkKLSAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotICAgICAgICBuZXh0U291cmNlQnVmZmVySWQrKzsKLSAgICB9Ci0gICAgbV9s
YXN0U291cmNlQnVmZmVySWQgPSBuZXh0U291cmNlQnVmZmVySWQ7Ci0KLSAgICByZXR1cm4gU3Ry
aW5nOjpudW1iZXIobmV4dFNvdXJjZUJ1ZmZlcklkKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJM
aXN0Ojpjb250YWlucyhzaXplX3QgaWQpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fbGlzdFtpXS0+aWQoKSA9
PSBTdHJpbmc6Om51bWJlcihpZCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNvdXJjZUJ1ZmZlckxpc3Q6OmNyZWF0ZUFuZEZp
cmVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBBU1NFUlQobV9h
c3luY0V2ZW50UXVldWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAppbmRleCBhOTVhODM3NjhiYzYzZjhhMGQyYTg3Njcy
MjE1NzljOTAzNzBkYWE5Li4wZDQ3NjRlMTNkMTFhMTQwZTg5MTkxYTU3OWE3ZmNkMDRlYjE5NGVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlckxpc3QuaApAQCAtNTcsMTAgKzU3LDYgQEAgcHVibGljOgogICAgIGJvb2wgcmVtb3Zl
KFNvdXJjZUJ1ZmZlciopOwogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIC8vIEdlbmVyYXRlcyBh
biBpZCBmb3IgYWRkaW5nIGEgbmV3IFNvdXJjZUJ1ZmZlci4gUmV0dXJucyBhbiBlbXB0eSBzdHJp
bmcKLSAgICAvLyBpZiB0aGlzIFNvdXJjZUJ1ZmZlckxpc3QgaXMgZnVsbC4KLSAgICBTdHJpbmcg
Z2VuZXJhdGVVbmlxdWVJZCgpOwotCiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdCBPVkVSUklERTsKQEAgLTc1LDcgKzcxLDYgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBTb3VyY2VCdWZmZXJMaXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBHZW5l
cmljRXZlbnRRdWV1ZSopOwogCi0gICAgYm9vbCBjb250YWlucyhzaXplX3QgaWQpIGNvbnN0Owog
ICAgIHZvaWQgY3JlYXRlQW5kRmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAg
dmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUgeyByZWYoKTsgfQpAQCAtODYs
NyArODEsNiBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNFdmVudFF1ZXVlKiBtX2FzeW5jRXZlbnRR
dWV1ZTsKIAogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPiA+IG1fbGlzdDsKLSAgICBz
aXplX3QgbV9sYXN0U291cmNlQnVmZmVySWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCA3ZjMyNjIzYjA3
ZTVkOTExN2QxNzRjODMyOWU3OWFhYjdmZTIyYjM5Li5iYzcyNzA1MTIxNjIwZjA3ZGRiMjEzMmIw
YTZhYWI3ZWFlZWE5ZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKQEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNo
YWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0jaW5jbHVkZSAiVVVJRC5oIgog
I2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5oCmluZGV4IDhkOTFkYTBj
ZmQwMTBlNjdmYWI3NWM1Y2FjYWQzZjZiZmY5MGQxZjkuLjJiMTA3NGZiY2ZiMmUxNGNhNjVkMmU1
OTU4MzNiZWM1YmY2ZTUxOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5oCkBAIC0zMiwyNyArMzIsMjUgQEAKIAogI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKLSNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTb3VyY2VC
dWZmZXJQcml2YXRlOworCiBjbGFzcyBNZWRpYVNvdXJjZVByaXZhdGUgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE1lZGlhU291cmNlUHJpdmF0ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFN0cmluZywgMD4gQ29kZWNzQXJyYXk7CisK
ICAgICBNZWRpYVNvdXJjZVByaXZhdGUoKSB7IH0KICAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVBy
aXZhdGUoKSB7IH0KIAotICAgIGVudW0gQWRkSWRTdGF0dXMgeyBPaywgTm90U3VwcG9ydGVkLCBS
ZWFjaGVkSWRMaW1pdCB9OwotICAgIHZpcnR1YWwgQWRkSWRTdGF0dXMgYWRkSWQoY29uc3QgU3Ry
aW5nJiBpZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNz
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJlbW92ZUlkKGNvbnN0IFN0cmluZyYgaWQpID0gMDsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoY29uc3QgU3RyaW5n
JiBpZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhcHBlbmQoY29uc3QgU3RyaW5nJiBpZCwgY29u
c3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSA9IDA7CisgICAgZW51bSBB
ZGRTdGF0dXMgeyBPaywgTm90U3VwcG9ydGVkLCBSZWFjaGVkSWRMaW1pdCB9OworICAgIHZpcnR1
YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IENv
ZGVjc0FycmF5JiwgT3duUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+KikgPSAwOwogICAgIHZpcnR1
YWwgZG91YmxlIGR1cmF0aW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihk
b3VibGUpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoY29uc3QgU3RyaW5nJiBpZCkgPSAw
OwogICAgIGVudW0gRW5kT2ZTdHJlYW1TdGF0dXMgeyBFb3NOb0Vycm9yLCBFb3NOZXR3b3JrRXJy
b3IsIEVvc0RlY29kZUVycm9yIH07CiAgICAgdmlydHVhbCB2b2lkIGVuZE9mU3RyZWFtKEVuZE9m
U3RyZWFtU3RhdHVzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNldFRpbWVzdGFtcE9mZnNldChj
b25zdCBTdHJpbmcmIGlkLCBkb3VibGUgb2Zmc2V0KSA9IDA7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDI0MGRhN2Q3Y2E5ZDViOTA3Njc1ZjFkODZlYmMwMWNkYzY1M2JmYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1
ZmZlclByaXZhdGUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU291cmNlQnVmZmVyUHJpdmF0ZV9o
CisjZGVmaW5lIFNvdXJjZUJ1ZmZlclByaXZhdGVfaAorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKKworI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBTb3VyY2VCdWZmZXJQcml2
YXRlKCkgeyB9CisgICAgdmlydHVhbCB+U291cmNlQnVmZmVyUHJpdmF0ZSgpIHsgfQorCisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGFib3J0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBz
ZXRUaW1lc3RhbXBPZmZzZXQoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRG
cm9tTWVkaWFTb3VyY2UoKSA9IDA7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggODIyNTljMjBlMzQ2ZjgxY2RkOWFhYzg3YTVlNTA3M2E0
ZmFjOWUyYS4uNzYzOWQyMjM2ZmU0NDJjOTZmZGJjMWI5ODJkMDNjZGEwNmIxNGEzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMzg3LDYgKzM4Nyw4IEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9tYWMvV2ViU2NyZWVuSW5mb0ZhY3RvcnkubW0nLAogICAgICAgICAgICAgICAgICdz
cmMvbWFjL1dlYlN1YnN0cmluZ1V0aWwubW0nLAogICAgICAgICAgICAgICAgICdzcmMvTG9jYWxG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL01lZGlhU291cmNl
UHJpdmF0ZUltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL01lZGlhU291cmNlUHJpdmF0
ZUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvcGFpbnRpbmcvQ29udGludW91c1BhaW50ZXIuaCcsCkBA
IC00MDMsNiArNDA1LDggQEAKICAgICAgICAgICAgICAgICAnc3JjL1Njcm9sbGJhckdyb3VwLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TY3JvbGxiYXJHcm91cC5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1NvdXJjZUJ1ZmZlclByaXZhdGVJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9T
b3VyY2VCdWZmZXJQcml2YXRlSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaElu
cHV0Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoSW5wdXRDbGll
bnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQ
cm94eS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
TWVkaWFTb3VyY2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1l
ZGlhU291cmNlQ2xpZW50LmgKaW5kZXggM2U2NTA5MDRiYjQyYmY4ZmZhMGU3NmM3MzdiOWZlZWRj
MWFlOWYxMC4uNzZjNDIxOWNkNjViYTkyOWExMGFhZjYwZWQwNGVjMzQ1YTdjOWY2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTb3VyY2VDbGllbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVNvdXJjZUNsaWVu
dC5oCkBAIC0zNiwxMiArMzYsMTQgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdl
YlNvdXJjZUJ1ZmZlcjsKKwogY2xhc3MgV2ViTWVkaWFTb3VyY2VDbGllbnQgewogcHVibGljOgot
ICAgIGVudW0gQWRkSWRTdGF0dXMgewotICAgICAgICBBZGRJZFN0YXR1c09rLAotICAgICAgICBB
ZGRJZFN0YXR1c05vdFN1cHBvcnRlZCwKLSAgICAgICAgQWRkSWRTdGF0dXNSZWFjaGVkSWRMaW1p
dAorICAgIGVudW0gQWRkU3RhdHVzIHsKKyAgICAgICAgQWRkU3RhdHVzT2ssCisgICAgICAgIEFk
ZFN0YXR1c05vdFN1cHBvcnRlZCwKKyAgICAgICAgQWRkU3RhdHVzUmVhY2hlZElkTGltaXQKICAg
ICB9OwogCiAgICAgZW51bSBFbmRPZlN0cmVhbVN0YXR1cyB7CkBAIC01MiwxNSArNTQsMTAgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB+V2ViTWVkaWFTb3VyY2VDbGllbnQoKSB7IH0KIAotICAg
IHZpcnR1YWwgQWRkSWRTdGF0dXMgYWRkSWQoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3QgV2Vi
U3RyaW5nJiB0eXBlLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgY29kZWNzKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHJlbW92ZUlkKGNvbnN0IFdlYlN0cmluZyYgaWQpID0gMDsKLSAgICB2
aXJ0dWFsIFdlYlRpbWVSYW5nZXMgYnVmZmVyZWQoY29uc3QgV2ViU3RyaW5nJiBpZCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBhcHBlbmQoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3QgdW5zaWdu
ZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGFi
b3J0KGNvbnN0IFdlYlN0cmluZyYgaWQpID0gMDsKKyAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRT
b3VyY2VCdWZmZXIoY29uc3QgV2ViU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiYgY29kZWNzLCBXZWJTb3VyY2VCdWZmZXIqKikgPSAwOwogICAgIHZpcnR1YWwgZG91Ymxl
IGR1cmF0aW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgc2V0VGltZXN0YW1wT2Zmc2V0KGNvbnN0IFdlYlN0cmluZyYgaWQs
IGRvdWJsZSBvZmZzZXQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU291cmNlQnVmZmVyLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTb3VyY2VCdWZmZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kNTc5NTk2NzNhMDJlNTM2MzhlNDAyZTBhMmE4M2ViOTYxYmJlOTdjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU291cmNlQnVmZmVyLmgKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViU291cmNlQnVmZmVyX2gKKyNkZWZpbmUgV2ViU291cmNl
QnVmZmVyX2gKKworI2luY2x1ZGUgIldlYlRpbWVSYW5nZS5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViU291cmNlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJT
b3VyY2VCdWZmZXIoKSB7IH0KKworICAgIHZpcnR1YWwgV2ViVGltZVJhbmdlcyBidWZmZXJlZCgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhYm9ydCgpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2V0VGltZXN0YW1wT2Zmc2V0KGRvdWJsZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNlKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9B
c3NlcnRNYXRjaGluZ0VudW1zLmNwcAppbmRleCA4YWQwODQ0NDJjZjEyYjA5ZTE0MmRlODEzYTQz
NTJjMWY0MDc4ZDFlLi44ZjQyYzZmZTdmNzVjMjMzODdhNjQwYjU0MzQ5MWVhZmMzNDllNzI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcApAQCAtNDEzLDkgKzQxMyw5IEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2Vi
TWVkaWFQbGF5ZXI6OlByZWxvYWRNZXRhRGF0YSwgTWVkaWFQbGF5ZXI6Ok1ldGFECiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpQcmVsb2FkQXV0bywgTWVkaWFQ
bGF5ZXI6OkF1dG8pOwogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLUNPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkFkZElkU3RhdHVzT2ssIE1lZGlh
U291cmNlUHJpdmF0ZTo6T2spOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRp
YVNvdXJjZUNsaWVudDo6QWRkSWRTdGF0dXNOb3RTdXBwb3J0ZWQsIE1lZGlhU291cmNlUHJpdmF0
ZTo6Tm90U3VwcG9ydGVkKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFT
b3VyY2VDbGllbnQ6OkFkZElkU3RhdHVzUmVhY2hlZElkTGltaXQsIE1lZGlhU291cmNlUHJpdmF0
ZTo6UmVhY2hlZElkTGltaXQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRp
YVNvdXJjZUNsaWVudDo6QWRkU3RhdHVzT2ssIE1lZGlhU291cmNlUHJpdmF0ZTo6T2spOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkU3RhdHVz
Tm90U3VwcG9ydGVkLCBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZCk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhU291cmNlQ2xpZW50OjpBZGRTdGF0dXNSZWFj
aGVkSWRMaW1pdCwgTWVkaWFTb3VyY2VQcml2YXRlOjpSZWFjaGVkSWRMaW1pdCk7CiAKIENPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkVuZE9mU3RyZWFt
U3RhdHVzTm9FcnJvciwgTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vycm9yKTsKIENPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFTb3VyY2VDbGllbnQ6OkVuZE9mU3RyZWFtU3Rh
dHVzTmV0d29ya0Vycm9yLCBNZWRpYVNvdXJjZVByaXZhdGU6OkVvc05ldHdvcmtFcnJvcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNvdXJjZVByaXZhdGVJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL01lZGlhU291cmNlUHJpdmF0ZUlt
cGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlkMjU1OWU5ZmM1ZWQzYmNmMTdhY2M4ZTQ5NjJkZjU0OWYwZDcy
NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNv
dXJjZVByaXZhdGVJbXBsLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUltcGwuaCIKKworI2lmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCisKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5oIgorI2luY2x1ZGUg
IldlYk1lZGlhU291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU291cmNlQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK01lZGlhU291cmNlUHJpdmF0ZUltcGw6Ok1lZGlh
U291cmNlUHJpdmF0ZUltcGwoUGFzc093blB0cjxXZWJLaXQ6OldlYk1lZGlhU291cmNlQ2xpZW50
PiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1dlYkNvcmU6Ok1lZGlh
U291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmFkZFNvdXJj
ZUJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IENvZGVjc0FycmF5JiBjb2RlY3MsCisg
ICAgT3duUHRyPFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU+KiBzb3VyY2VCdWZmZXIpCit7
CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZTo6Tm90U3VwcG9ydGVkOworCisgICAgV2ViU291cmNlQnVmZmVyKiB3ZWJTb3VyY2VC
dWZmZXIgPSAwOworICAgIFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIHJl
c3VsdCA9CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6
QWRkU3RhdHVzPihtX2NsaWVudC0+YWRkU291cmNlQnVmZmVyKHR5cGUsIGNvZGVjcywgJndlYlNv
dXJjZUJ1ZmZlcikpOworCisgICAgaWYgKHJlc3VsdCA9PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVBy
aXZhdGU6Ok9rKSB7CisgICAgICAgIEFTU0VSVCh3ZWJTb3VyY2VCdWZmZXIpOworICAgICAgICAq
c291cmNlQnVmZmVyID0gYWRvcHRQdHIobmV3IFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsKGFkb3B0
UHRyKHdlYlNvdXJjZUJ1ZmZlcikpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZG91YmxlIE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmR1cmF0aW9uKCkKK3sKKyAgICBpZiAoIW1f
Y2xpZW50KQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0
X05hTigpOworICAgIHJldHVybiBtX2NsaWVudC0+ZHVyYXRpb24oKTsKK30KKwordm9pZCBNZWRp
YVNvdXJjZVByaXZhdGVJbXBsOjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCit7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwor
fQorCit2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmVuZE9mU3RyZWFtKFdlYkNvcmU6Ok1l
ZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQoreworICAgIGlmICht
X2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmVuZE9mU3RyZWFtKHN0YXRpY19jYXN0PFdlYk1l
ZGlhU291cmNlQ2xpZW50OjpFbmRPZlN0cmVhbVN0YXR1cz4oc3RhdHVzKSk7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNvdXJj
ZVByaXZhdGVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVNvdXJjZVBy
aXZhdGVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIwYmM1ZGMxMzU3OGIzZmI2NTQyZjY4OTE3MTI1ZDdh
OGU0MGJkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL01l
ZGlhU291cmNlUHJpdmF0ZUltcGwuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVNvdXJj
ZVByaXZhdGVJbXBsX2gKKyNkZWZpbmUgTWVkaWFTb3VyY2VQcml2YXRlSW1wbF9oCisKKyNpZiBF
TkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlLmgiCisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
TWVkaWFTb3VyY2VDbGllbnQ7CisKK2NsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUltcGwgOiBwdWJs
aWMgV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBN
ZWRpYVNvdXJjZVByaXZhdGVJbXBsKFBhc3NPd25QdHI8V2ViTWVkaWFTb3VyY2VDbGllbnQ+KTsK
KyAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGVJbXBsKCkgeyB9CisKKyAgICAvLyBNZWRp
YVNvdXJjZVByaXZhdGUgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZTo6QWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IENvZGVjc0FycmF5JiwKKyAgICAgICAgT3duUHRyPFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBy
aXZhdGU+Kik7CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0RHVyYXRpb24oZG91YmxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2ZTdHJlYW0oV2Vi
Q29yZTo6TWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyk7CisKK3ByaXZhdGU6
CisgICAgT3duUHRyPFdlYktpdDo6V2ViTWVkaWFTb3VyY2VDbGllbnQ+IG1fY2xpZW50OworfTsK
KworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Tb3VyY2VCdWZmZXJQcml2YXRlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDlhMmE2NzM4
ZTZmNDBhYWQ0N2UyNTc5MjA0NDdhOGI2NzY3YjI2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvdXJjZUJ1ZmZlclByaXZhdGVJbXBsLmNwcApAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZh
dGVJbXBsLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiV2ViU291
cmNlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTb3VyY2VCdWZmZXJQcml2YXRl
SW1wbDo6U291cmNlQnVmZmVyUHJpdmF0ZUltcGwoUGFzc093blB0cjxXZWJTb3VyY2VCdWZmZXI+
IHNvdXJjZUJ1ZmZlcikKKyAgICA6IG1fc291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZlcikKK3sKK30K
KworUGFzc1JlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBTb3VyY2VCdWZmZXJQcml2YXRlSW1w
bDo6YnVmZmVyZWQoKQoreworICAgIGlmICghbV9zb3VyY2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKworICAgIFdlYlRpbWVSYW5nZXMgd2Vi
UmFuZ2VzID0gbV9zb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6
OlRpbWVSYW5nZXM+IHJhbmdlcyA9IFdlYkNvcmU6OlRpbWVSYW5nZXM6OmNyZWF0ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViUmFuZ2VzLnNpemUoKTsgKytpKQorICAgICAgICBy
YW5nZXMtPmFkZCh3ZWJSYW5nZXNbaV0uc3RhcnQsIHdlYlJhbmdlc1tpXS5lbmQpOworICAgIHJl
dHVybiByYW5nZXMucmVsZWFzZSgpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBs
OjphcHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIGlmICghbV9zb3VyY2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NvdXJjZUJ1
ZmZlci0+YXBwZW5kKGRhdGEsIGxlbmd0aCk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyUHJpdmF0
ZUltcGw6OmFib3J0KCkKK3sKKyAgICBpZiAoIW1fc291cmNlQnVmZmVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc291cmNlQnVmZmVyLT5hYm9ydCgpOworfQorCitib29s
IFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjpzZXRUaW1lc3RhbXBPZmZzZXQoZG91YmxlIG9mZnNl
dCkKK3sKKyAgICBpZiAoIW1fc291cmNlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gbV9zb3VyY2VCdWZmZXItPnNldFRpbWVzdGFtcE9mZnNldChvZmZzZXQpOwor
fQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsOjpyZW1vdmVkRnJvbU1lZGlhU291cmNl
KCkKK3sKKyAgICBpZiAoIW1fc291cmNlQnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9z
b3VyY2VCdWZmZXItPnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKKyAgICBtX3NvdXJjZUJ1ZmZl
ci5jbGVhcigpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvU291cmNlQnVmZmVyUHJpdmF0ZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1NvdXJjZUJ1ZmZlclByaXZhdGVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmMyODdkMmRj
NDAyNWQ1ZWI5ZjlmNjIzOTA2MWQ3MzBmNTBlOTMxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvdXJjZUJ1ZmZlclByaXZhdGVJbXBsLmgKQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU291cmNlQnVmZmVyUHJpdmF0ZUltcGxfaAorI2RlZmluZSBTb3VyY2VC
dWZmZXJQcml2YXRlSW1wbF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVk
ZSAiU291cmNlQnVmZmVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
U291cmNlQnVmZmVyOworCitjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlSW1wbCA6IHB1YmxpYyBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTb3Vy
Y2VCdWZmZXJQcml2YXRlSW1wbChQYXNzT3duUHRyPFdlYlNvdXJjZUJ1ZmZlcj4pOworICAgIHZp
cnR1YWwgflNvdXJjZUJ1ZmZlclByaXZhdGVJbXBsKCkgeyB9CisKKyAgICAvLyBTb3VyY2VCdWZm
ZXJQcml2YXRlIG1ldGhvZHMuCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlRpbWVS
YW5nZXM+IGJ1ZmZlcmVkKCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCB1bnNpZ25l
ZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgYm9vbCBhYm9ydCgp
OworICAgIHZpcnR1YWwgYm9vbCBzZXRUaW1lc3RhbXBPZmZzZXQoZG91YmxlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpOworCitwcml2YXRlOgorICAgIE93blB0
cjxXZWJTb3VyY2VCdWZmZXI+IG1fc291cmNlQnVmZmVyOworfTsKKworCit9CisKKyNlbmRpZgor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBs
YXllckNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsLmNwcAppbmRleCA0YzhkZjg5Mjc3YzU1ODU1NjI4MTFjNzVlYzI3ZmJh
OWI2ZDJkYjQ4Li5lZTlkY2I1YTgyOWI1NjQ0ZGNlMzIwMTY5NGE1MjNhZDg2OTZmZmIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbC5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRT
a2lhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIK
KyNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSAiV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oIgog
I2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCkBA
IC0yOCw2ICsyOSw3IEBACiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJX
ZWJNZWRpYVNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIldlYk1lZGlhU291cmNlSW1wbC5oIgor
I2luY2x1ZGUgIldlYlNvdXJjZUJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCiAj
aW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcu
aD4KQEAgLTYwLDIwICs2MiwzNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViTWVkaWFTb3Vy
Y2VDbGllbnRJbXBsKCk7CiAKICAgICAvLyBXZWJNZWRpYVNvdXJjZUNsaWVudCBtZXRob2RzLgot
ICAgIHZpcnR1YWwgQWRkSWRTdGF0dXMgYWRkSWQoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3Qg
V2ViU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgY29kZWNzKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgcmVtb3ZlSWQoY29uc3QgV2ViU3RyaW5nJiBpZCk7Ci0gICAgdmlydHVh
bCBXZWJUaW1lUmFuZ2VzIGJ1ZmZlcmVkKGNvbnN0IFdlYlN0cmluZyYgaWQpOwotICAgIHZpcnR1
YWwgYm9vbCBhcHBlbmQoY29uc3QgV2ViU3RyaW5nJiBpZCwgY29uc3QgdW5zaWduZWQgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoY29uc3QgV2Vi
U3RyaW5nJiBpZCk7CisgICAgdmlydHVhbCBBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKGNvbnN0
IFdlYlN0cmluZyYgdHlwZSwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGNvZGVjcywgV2Vi
U291cmNlQnVmZmVyKiopOwogICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCk7CiAgICAgdmly
dHVhbCB2b2lkIHNldER1cmF0aW9uKGRvdWJsZSk7CiAgICAgdmlydHVhbCB2b2lkIGVuZE9mU3Ry
ZWFtKEVuZE9mU3RyZWFtU3RhdHVzKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0VGltZXN0YW1wT2Zm
c2V0KGNvbnN0IFdlYlN0cmluZyYgaWQsIGRvdWJsZSBvZmZzZXQpOwogCiBwcml2YXRlOgogICAg
IFdlYk1lZGlhUGxheWVyKiBtX3dlYk1lZGlhUGxheWVyOwogfTsKIAorLy8gRklYTUU6IFJlbW92
ZSB0aGlzIGNsYXNzIG9uY2UgdGhlIENocm9taXVtIGNvZGUgaW1wbGVtZW50cyBpdHMgb3duCisv
LyB2ZXJzaW9uIG9mIFdlYk1lZGlhUGxheWVyOjpsb2FkKFdlYlVSTCwgV2ViTWVkaWFTb3VyY2Us
IENPUlNNb2RlKS4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTAzNzEKK2NsYXNzIFdlYlNvdXJjZUJ1ZmZlckltcGwgOiBwdWJsaWMgV2ViU291cmNlQnVmZmVy
IHsKK3B1YmxpYzoKKyAgICBXZWJTb3VyY2VCdWZmZXJJbXBsKFdlYk1lZGlhUGxheWVyKiwgY29u
c3QgV2ViU3RyaW5nJiBpZCk7CisKKyAgICAvLyBXZWJTb3VyY2VCdWZmZXIgbWV0aG9kcy4KKyAg
ICB2aXJ0dWFsIFdlYlRpbWVSYW5nZXMgYnVmZmVyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmly
dHVhbCBib29sIGFib3J0KCk7CisgICAgdmlydHVhbCBib29sIHNldFRpbWVzdGFtcE9mZnNldChk
b3VibGUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNlKCk7CisKK3By
aXZhdGU6CisgICAgV2ViTWVkaWFQbGF5ZXIqIG1fd2ViTWVkaWFQbGF5ZXI7CisgICAgV2ViU3Ry
aW5nIG1faWQ7Cit9OworCiBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6OldlYk1lZGlhU291cmNl
Q2xpZW50SW1wbChXZWJNZWRpYVBsYXllciogd2ViTWVkaWFQbGF5ZXIpCiAgICAgOiBtX3dlYk1l
ZGlhUGxheWVyKHdlYk1lZGlhUGxheWVyKQogewpAQCAtODMsNDkgKzk5LDY1IEBAIFdlYk1lZGlh
U291cmNlQ2xpZW50SW1wbDo6fldlYk1lZGlhU291cmNlQ2xpZW50SW1wbCgpCiB7CiB9CiAKLVdl
Yk1lZGlhU291cmNlQ2xpZW50OjpBZGRJZFN0YXR1cyBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6
OmFkZElkKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwgY29uc3Qg
V2ViVmVjdG9yPFdlYlN0cmluZz4mIGNvZGVjcykKK1dlYk1lZGlhU291cmNlQ2xpZW50OjpBZGRT
dGF0dXMgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgV2Vi
U3RyaW5nJiB0eXBlLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgY29kZWNzLAorICAgIFdl
YlNvdXJjZUJ1ZmZlcioqIHNvdXJjZUJ1ZmZlcikKK3sKKyAgICBXZWJTdHJpbmcgaWQgPSBXZWJD
b3JlOjpjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgV2ViTWVkaWFTb3VyY2VDbGll
bnQ6OkFkZFN0YXR1cyByZXN1bHQgPSBzdGF0aWNfY2FzdDxXZWJNZWRpYVNvdXJjZUNsaWVudDo6
QWRkU3RhdHVzPihtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VBZGRJZChpZCwgdHlwZSwgY29kZWNz
KSk7CisgICAgaWYgKHJlc3VsdCA9PSBXZWJNZWRpYVNvdXJjZUNsaWVudDo6QWRkU3RhdHVzT2sp
CisgICAgICAgICpzb3VyY2VCdWZmZXIgPSBuZXcgV2ViU291cmNlQnVmZmVySW1wbChtX3dlYk1l
ZGlhUGxheWVyLCBpZCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitkb3VibGUgV2ViTWVk
aWFTb3VyY2VDbGllbnRJbXBsOjpkdXJhdGlvbigpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYk1lZGlhU291cmNlQ2xpZW50OjpBZGRJZFN0YXR1cz4obV93ZWJNZWRpYVBsYXllci0+c291
cmNlQWRkSWQoaWQsIHR5cGUsIGNvZGVjcykpOworICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVy
LT5kdXJhdGlvbigpOwogfQogCi1ib29sIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6cmVtb3Zl
SWQoY29uc3QgV2ViU3RyaW5nJiBpZCkKK3ZvaWQgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjpz
ZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5
ZXItPnNvdXJjZVJlbW92ZUlkKGlkKTsKKyAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c291
cmNlU2V0RHVyYXRpb24oZHVyYXRpb24pOwogfQogCi1XZWJUaW1lUmFuZ2VzIFdlYk1lZGlhU291
cmNlQ2xpZW50SW1wbDo6YnVmZmVyZWQoY29uc3QgV2ViU3RyaW5nJiBpZCkKK3ZvaWQgV2ViTWVk
aWFTb3VyY2VDbGllbnRJbXBsOjplbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMp
CiB7Ci0gICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUJ1ZmZlcmVkKGlkKTsKKyAg
ICBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VFbmRPZlN0cmVhbShzdGF0aWNfY2FzdDxXZWJNZWRp
YVBsYXllcjo6RW5kT2ZTdHJlYW1TdGF0dXM+KHN0YXR1cykpOwogfQogCi1ib29sIFdlYk1lZGlh
U291cmNlQ2xpZW50SW1wbDo6YXBwZW5kKGNvbnN0IFdlYlN0cmluZyYgaWQsIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK1dlYlNvdXJjZUJ1ZmZlckltcGw6Oldl
YlNvdXJjZUJ1ZmZlckltcGwoV2ViTWVkaWFQbGF5ZXIqIHdlYk1lZGlhUGxheWVyLCBjb25zdCBX
ZWJTdHJpbmcmIGlkKQorICAgIDogbV93ZWJNZWRpYVBsYXllcih3ZWJNZWRpYVBsYXllcikKKyAg
ICAsIG1faWQoaWQpCiB7Ci0gICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFwcGVu
ZChpZCwgZGF0YSwgbGVuZ3RoKTsKIH0KIAotYm9vbCBXZWJNZWRpYVNvdXJjZUNsaWVudEltcGw6
OmFib3J0KGNvbnN0IFdlYlN0cmluZyYgaWQpCitXZWJUaW1lUmFuZ2VzIFdlYlNvdXJjZUJ1ZmZl
ckltcGw6OmJ1ZmZlcmVkKCkKIHsKLSAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c291cmNl
QWJvcnQoaWQpOworICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VCdWZmZXJlZCht
X2lkKTsKIH0KIAotZG91YmxlIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6ZHVyYXRpb24oKQor
dm9pZCBXZWJTb3VyY2VCdWZmZXJJbXBsOjphcHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5kdXJh
dGlvbigpOworICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUFwcGVuZChtX2lkLCBkYXRhLCBs
ZW5ndGgpOwogfQogCi12b2lkIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6c2V0RHVyYXRpb24o
ZG91YmxlIGR1cmF0aW9uKQorYm9vbCBXZWJTb3VyY2VCdWZmZXJJbXBsOjphYm9ydCgpCiB7Ci0g
ICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZVNldER1cmF0aW9uKGR1cmF0aW9uKTsK
KyAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c291cmNlQWJvcnQobV9pZCk7CiB9CiAKLXZv
aWQgV2ViTWVkaWFTb3VyY2VDbGllbnRJbXBsOjplbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1
cyBzdGF0dXMpCitib29sIFdlYlNvdXJjZUJ1ZmZlckltcGw6OnNldFRpbWVzdGFtcE9mZnNldChk
b3VibGUgb2Zmc2V0KQogewotICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZUVuZE9mU3RyZWFt
KHN0YXRpY19jYXN0PFdlYk1lZGlhUGxheWVyOjpFbmRPZlN0cmVhbVN0YXR1cz4oc3RhdHVzKSk7
CisgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnNvdXJjZVNldFRpbWVzdGFtcE9mZnNldCht
X2lkLCBvZmZzZXQpOwogfQogCi1ib29sIFdlYk1lZGlhU291cmNlQ2xpZW50SW1wbDo6c2V0VGlt
ZXN0YW1wT2Zmc2V0KGNvbnN0IFdlYlN0cmluZyYgaWQsIGRvdWJsZSBvZmZzZXQpCit2b2lkIFdl
YlNvdXJjZUJ1ZmZlckltcGw6OnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKQogewotICAgIHJldHVy
biBtX3dlYk1lZGlhUGxheWVyLT5zb3VyY2VTZXRUaW1lc3RhbXBPZmZzZXQoaWQsIG9mZnNldCk7
CisgICAgaWYgKCFtX3dlYk1lZGlhUGxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dl
Yk1lZGlhUGxheWVyLT5zb3VyY2VSZW1vdmVJZChtX2lkKTsKKyAgICBtX3dlYk1lZGlhUGxheWVy
ID0gMDsKIH0KIAogc3RhdGljIFBhc3NPd25QdHI8V2ViTWVkaWFQbGF5ZXI+IGNyZWF0ZVdlYk1l
ZGlhUGxheWVyKFdlYk1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYlVSTCYgdXJs
LCBGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJNZWRpYVNvdXJjZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVk
aWFTb3VyY2VJbXBsLmNwcAppbmRleCBhNWVjODkyMmNmZjcyYjRjMWUzOGUyZWUxN2MzMzBlYjY0
MTg5MGM0Li4yYmEyYzIzYzI3ZDBmZjdmNjNmY2I4MWE3YjE3ZWEwM2E1Y2FlMGI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVNvdXJjZUltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU291cmNlSW1wbC5jcHAKQEAg
LTMxLDEwOCArMzEsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJNZWRp
YVNvdXJjZUltcGwuaCIKIAotI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUltcGwuaCIKICNpbmNsdWRlICJXZWJNZWRpYVNvdXJjZUNs
aWVudC5oIgogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFT
b3VyY2VQcml2YXRlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBNZWRpYVNvdXJjZVByaXZhdGVJ
bXBsKFBhc3NPd25QdHI8V2ViTWVkaWFTb3VyY2VDbGllbnQ+KTsKLSAgICB2aXJ0dWFsIH5NZWRp
YVNvdXJjZVByaXZhdGVJbXBsKCkgeyB9Ci0KLSAgICAvLyBNZWRpYVNvdXJjZVByaXZhdGUgbWV0
aG9kcy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZTo6QWRkSWRTdGF0
dXMgYWRkSWQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgY29kZWNzKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlSWQoY29uc3QgU3Ry
aW5nJiBpZCk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5nZXM+IGJ1
ZmZlcmVkKGNvbnN0IFN0cmluZyYgaWQpOwotICAgIHZpcnR1YWwgYm9vbCBhcHBlbmQoY29uc3Qg
U3RyaW5nJiBpZCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgYWJvcnQoY29uc3QgU3RyaW5nJiBpZCk7Ci0gICAgdmlydHVhbCBk
b3VibGUgZHVyYXRpb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZW5kT2ZTdHJlYW0oV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
OjpFbmRPZlN0cmVhbVN0YXR1cyk7Ci0gICAgdmlydHVhbCBib29sIHNldFRpbWVzdGFtcE9mZnNl
dChjb25zdCBTdHJpbmcmIGlkLCBkb3VibGUgb2Zmc2V0KTsKLQotcHJpdmF0ZToKLSAgICBPd25Q
dHI8V2ViS2l0OjpXZWJNZWRpYVNvdXJjZUNsaWVudD4gbV9jbGllbnQ7Ci19OwotCi1NZWRpYVNv
dXJjZVByaXZhdGVJbXBsOjpNZWRpYVNvdXJjZVByaXZhdGVJbXBsKFBhc3NPd25QdHI8V2ViS2l0
OjpXZWJNZWRpYVNvdXJjZUNsaWVudD4gY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQot
ewotfQotCi1XZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGU6OkFkZElkU3RhdHVzIE1lZGlhU291
cmNlUHJpdmF0ZUltcGw6OmFkZElkKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVjcykKLXsKLSAgICBpZiAoIW1fY2xpZW50KQot
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlOjpOb3RTdXBwb3J0ZWQ7
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlOjpB
ZGRJZFN0YXR1cz4obV9jbGllbnQtPmFkZElkKGlkLCB0eXBlLCBjb2RlY3MpKTsKLX0KLQotYm9v
bCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpyZW1vdmVJZChjb25zdCBTdHJpbmcmIGlkKQotewot
ICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBt
X2NsaWVudC0+cmVtb3ZlSWQoaWQpOwotfQotCi1QYXNzUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5n
ZXM+IE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OmJ1ZmZlcmVkKGNvbnN0IFN0cmluZyYgaWQpCi17
Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRpbWVSYW5nZXM6
OmNyZWF0ZSgpOwotCi0gICAgV2ViVGltZVJhbmdlcyB3ZWJSYW5nZXMgPSBtX2NsaWVudC0+YnVm
ZmVyZWQoaWQpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiByYW5nZXMgPSBXZWJD
b3JlOjpUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdl
YlJhbmdlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmFuZ2VzLT5hZGQod2ViUmFuZ2VzW2ldLnN0
YXJ0LCB3ZWJSYW5nZXNbaV0uZW5kKTsKLSAgICByZXR1cm4gcmFuZ2VzLnJlbGVhc2UoKTsKLX0K
LQotYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjphcHBlbmQoY29uc3QgU3RyaW5nJiBpZCwg
Y29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGlmICgh
bV9jbGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2NsaWVudC0+
YXBwZW5kKGlkLCBkYXRhLCBsZW5ndGgpOwotfQotCi1ib29sIE1lZGlhU291cmNlUHJpdmF0ZUlt
cGw6OmFib3J0KGNvbnN0IFN0cmluZyYgaWQpCi17Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LT5hYm9ydChpZCk7Ci19Ci0K
LWRvdWJsZSBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjpkdXJhdGlvbigpCi17Ci0gICAgaWYgKCFt
X2NsaWVudCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWll
dF9OYU4oKTsKLSAgICByZXR1cm4gbV9jbGllbnQtPmR1cmF0aW9uKCk7Ci19Ci0KLXZvaWQgTWVk
aWFTb3VyY2VQcml2YXRlSW1wbDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQotewotICAg
IGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsK
LX0KLQotdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVJbXBsOjplbmRPZlN0cmVhbShXZWJDb3JlOjpN
ZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykKLXsKLSAgICBpZiAo
bV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5lbmRPZlN0cmVhbShzdGF0aWNfY2FzdDxXZWJN
ZWRpYVNvdXJjZUNsaWVudDo6RW5kT2ZTdHJlYW1TdGF0dXM+KHN0YXR1cykpOwotfQotCi1ib29s
IE1lZGlhU291cmNlUHJpdmF0ZUltcGw6OnNldFRpbWVzdGFtcE9mZnNldChjb25zdCBTdHJpbmcm
IGlkLCBkb3VibGUgb2Zmc2V0KQotewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gbV9jbGllbnQtPnNldFRpbWVzdGFtcE9mZnNldChpZCwgb2Zm
c2V0KTsKLX0KLQogCiBXZWJNZWRpYVNvdXJjZUltcGw6OldlYk1lZGlhU291cmNlSW1wbChQYXNz
UmVmUHRyPFdlYkNvcmU6Ok1lZGlhU291cmNlPiBtZWRpYVNvdXJjZSkKIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>