<?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>153541</bug_id>
          
          <creation_ts>2016-01-27 03:48:11 -0800</creation_ts>
          <short_desc>[GTK] Implement mediastream mediaplayer</short_desc>
          <delta_ts>2016-02-04 03:42:01 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>153489</dependson>
          <blocked>153826</blocked>
    
    <blocked>153828</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Alejandro G. Castro">alex</assigned_to>
          <cc>adam.bergkvist</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1159265</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-27 03:48:11 -0800</bug_when>
    <thetext>We need to add the mediaplayer for the mediastream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159266</commentid>
    <comment_count>1</comment_count>
      <attachid>269996</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-27 03:54:42 -0800</bug_when>
    <thetext>Created attachment 269996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159267</commentid>
    <comment_count>2</comment_count>
      <attachid>269996</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-01-27 04:04:06 -0800</bug_when>
    <thetext>Comment on attachment 269996
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:201
&gt; +            g_object_set(m_videoRenderer, &quot;width&quot;, 640, &quot;height&quot;, 480, nullptr);

Please add a FIXME about this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159269</commentid>
    <comment_count>3</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-27 04:38:51 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 269996 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269996&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:201
&gt; &gt; +            g_object_set(m_videoRenderer, &quot;width&quot;, 640, &quot;height&quot;, 480, nullptr);
&gt; 
&gt; Please add a FIXME about this :)

Fixed, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159270</commentid>
    <comment_count>4</comment_count>
      <attachid>269997</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-27 04:39:38 -0800</bug_when>
    <thetext>Created attachment 269997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159271</commentid>
    <comment_count>5</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-27 04:45:51 -0800</bug_when>
    <thetext>The failure in efl bot is caused by a problem that should be solved when patch in bug 153489 lands, we can wait for that to check again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159272</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-01-27 05:56:17 -0800</bug_when>
    <thetext>I suspect adding the new file in PlatformEFL.cmake would make the EWS a bit happier, maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159283</commentid>
    <comment_count>7</comment_count>
      <attachid>269997</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-01-27 06:39:46 -0800</bug_when>
    <thetext>Comment on attachment 269997
Patch

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

Not a GStreamer person, but I noticed a few issues with the patch.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:98
&gt; +    GstQuery* query= gst_query_new_position(GST_FORMAT_TIME);

Nit &quot;query=&quot; -&gt; &quot;query =&quot;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:105
&gt; +    float result = 0.0f;

This should just be float result = 0;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:128
&gt; +    if (!m_streamPrivate || !m_streamPrivate-&gt;active()) {

!m_streamPrivate can never be true right? Perhaps this check should be omitted entirely.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:142
&gt; +    // HaveEnoughData

Missing a period here.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:152
&gt; +

Extra line.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:166
&gt; +{
&gt; +    return true;
&gt; +}

Is this implementation complete or does it need a FIXME as well?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:243
&gt; +    // FIXME

Do you mind actually writing a fixme comment here that is a complete sentence?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:248
&gt; +    // FIXME

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:252
&gt; +bool MediaPlayerPrivateGStreamerOwr::isAvailable()

This should probably be renamed to something like initializeGStreamerAndGStreamerDebugging.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:262
&gt; +    static bool debugRegistered = false;
&gt; +    if (!debugRegistered) {
&gt; +        GST_DEBUG_CATEGORY_INIT(webkit_openwebrtc_debug, &quot;webkitowrplayer&quot;, 0, &quot;WebKit OpenWebRTC player&quot;);
&gt; +        debugRegistered = true;
&gt; +    }
&gt; +

I think you can use std::once here.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:277
&gt; +    m_audioRenderer = owr_gst_audio_renderer_new(m_audioSink.get());

It looks like this is leaking?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:317
&gt; +    m_videoRenderer = owr_gst_video_renderer_new(sink);

It looks like this is leaking as well. Better to use smart pointers, if possible.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:318
&gt; +    return nullptr;

Why do you always return nullptr? Certainly this cannot be correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159690</commentid>
    <comment_count>8</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-28 04:00:15 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 269997 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269997&amp;action=review
&gt; 
&gt; Not a GStreamer person, but I noticed a few issues with the patch.
&gt; 

Awesome review Martin, thanks very much. I basically did everything and I&apos;m going to upload again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159691</commentid>
    <comment_count>9</comment_count>
      <attachid>270107</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-28 04:22:03 -0800</bug_when>
    <thetext>Created attachment 270107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159703</commentid>
    <comment_count>10</comment_count>
      <attachid>270107</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-01-28 07:05:24 -0800</bug_when>
    <thetext>Comment on attachment 270107
Patch

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        * html/HTMLMediaElement.cpp:
&gt; +        (WebCore::HTMLMediaElement::setSrcObject):
&gt; +        (WebCore::HTMLMediaElement::createMediaPlayer): Deleted.
&gt; +        * platform/graphics/MediaPlayer.cpp:
&gt; +        (WebCore::buildMediaEnginesVector):
&gt; +        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp: Added.

I think it is helpful to have comments in the ChangeLog explaining what changed or was added. This isn&apos;t as necessary with completely new files, but please at least add comments about the changes to existing files.

Also, &quot;(WebCore::HTMLMediaElement::createMediaPlayer): Deleted&quot; suggests that the entire method was deleted, which is not true.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:-5769
&gt; -#if ENABLE(MEDIA_STREAM)
&gt; -    m_mediaStreamSrcObject = nullptr;
&gt; -#endif
&gt; -

Why is this unnecessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159709</commentid>
    <comment_count>11</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-28 07:20:43 -0800</bug_when>
    <thetext>Thanks for the comments.

(In reply to comment #10)
&gt; Comment on attachment 270107 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270107&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        * html/HTMLMediaElement.cpp:
&gt; &gt; +        (WebCore::HTMLMediaElement::setSrcObject):
&gt; &gt; +        (WebCore::HTMLMediaElement::createMediaPlayer): Deleted.
&gt; &gt; +        * platform/graphics/MediaPlayer.cpp:
&gt; &gt; +        (WebCore::buildMediaEnginesVector):
&gt; &gt; +        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp: Added.
&gt; 
&gt; I think it is helpful to have comments in the ChangeLog explaining what
&gt; changed or was added. This isn&apos;t as necessary with completely new files, but
&gt; please at least add comments about the changes to existing files.
&gt; 
&gt; Also, &quot;(WebCore::HTMLMediaElement::createMediaPlayer): Deleted&quot; suggests
&gt; that the entire method was deleted, which is not true.
&gt; 

I&apos;ll do it.

&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:-5769
&gt; &gt; -#if ENABLE(MEDIA_STREAM)
&gt; &gt; -    m_mediaStreamSrcObject = nullptr;
&gt; &gt; -#endif
&gt; &gt; -
&gt; 
&gt; Why is this unnecessary?

It is already nullified in the constructor.

Thanks again for the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159712</commentid>
    <comment_count>12</comment_count>
      <attachid>270107</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-01-28 07:26:43 -0800</bug_when>
    <thetext>Comment on attachment 270107
Patch

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

&gt;&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:-5769
&gt;&gt;&gt; -
&gt;&gt; 
&gt;&gt; Why is this unnecessary?
&gt; 
&gt; It is already nullified in the constructor.
&gt; 
&gt; Thanks again for the comment.

createMediaPlayer is called at the beginning of the load algorithm, so may be called multiple times during the life cycle of a media element (eg. if a script changes .src or calls load().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159715</commentid>
    <comment_count>13</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-28 07:31:58 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 270107 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270107&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:-5769
&gt; &gt;&gt;&gt; -
&gt; &gt;&gt; 
&gt; &gt;&gt; Why is this unnecessary?
&gt; &gt; 
&gt; &gt; It is already nullified in the constructor.
&gt; &gt; 
&gt; &gt; Thanks again for the comment.
&gt; 
&gt; createMediaPlayer is called at the beginning of the load algorithm, so may
&gt; be called multiple times during the life cycle of a media element (eg. if a
&gt; script changes .src or calls load().

Good point, I agree, I&apos;ll check the code again, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161249</commentid>
    <comment_count>14</comment_count>
      <attachid>270484</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-02 04:28:36 -0800</bug_when>
    <thetext>Created attachment 270484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161262</commentid>
    <comment_count>15</comment_count>
      <attachid>270484</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-02-02 07:10:49 -0800</bug_when>
    <thetext>Comment on attachment 270484
Patch

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

I know almost nothing about GStreamer, so once the structural issues noted here have been fixed a GStreamer person should do the final review.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:47
&gt; +    , m_paused(true)
&gt; +    , m_stopped(true)

In new code we should initialize data members in the class definition.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:35
&gt; +class URL;

This is not needed.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:52
&gt; +    virtual String engineDescription() const { return &quot;OpenWebRTC&quot;; }
&gt; +
&gt; +    virtual void load(const String&amp;);
&gt; +#if ENABLE(MEDIA_SOURCE)
&gt; +    virtual void load(const String&amp;, MediaSourcePrivateClient*) { }
&gt; +#endif
&gt; +    virtual void load(MediaStreamPrivate&amp;);
&gt; +    virtual void cancelLoad() { }
&gt; +
&gt; +    virtual void prepareToPlay() { }

These are overrides, so you should omit the &quot;virtual&quot; and add &quot;override&quot;, eg.:

    void load(const String&amp;) override;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:57
&gt; +    void play();
&gt; +    void pause();
&gt; +
&gt; +    bool hasVideo() const;
&gt; +    bool hasAudio() const;

Aren&apos;t these supposed to override the base class?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:73
&gt; +    virtual float duration() const { return 0; }
&gt; +
&gt; +    virtual float currentTime() const;
&gt; +    virtual void seek(float) { }
&gt; +    virtual bool seeking() const { return false; }
&gt; +
&gt; +    virtual void setRate(float) { }
&gt; +    virtual void setPreservesPitch(bool) { }
&gt; +    virtual bool paused() const { return m_paused; }
&gt; +
&gt; +    virtual bool hasClosedCaptions() const { return false; }
&gt; +    virtual void setClosedCaptionsVisible(bool) { };
&gt; +
&gt; +    virtual float maxTimeSeekable() const { return 0; }
&gt; +    virtual std::unique_ptr&lt;PlatformTimeRanges&gt; buffered() const { return std::make_unique&lt;PlatformTimeRanges&gt;(); }

Omit &quot;virtual&quot; and add &quot;override&quot;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:74
&gt; +    bool didLoadingProgress() const;

Aren&apos;t these supposed to override the base class?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:82
&gt; +    virtual unsigned long long totalBytes() const { return 0; }
&gt; +    virtual unsigned bytesLoaded() const { return 0; }
&gt; +
&gt; +    virtual bool canLoadPoster() const { return false; }
&gt; +    virtual void setPoster(const String&amp;) { }
&gt; +
&gt; +    virtual bool isLiveStream() const { return true; }

Omit &quot;virtual&quot; and add &quot;override&quot;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:88
&gt; +    virtual void sourceStopped() override final;
&gt; +    virtual void sourceMutedChanged() override final;
&gt; +    virtual void sourceSettingsChanged() override final;
&gt; +    virtual bool preventSourceFromStopping() override final;

Don&apos;t need &quot;virtual&quot;.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:91
&gt; +    virtual GstElement* createVideoSink();

Omit &quot;virtual&quot; and add &quot;override&quot;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:93
&gt; +private:

Almost everything in the file (eg. most or all of the virtual methods) can be private.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:105
&gt; +    bool m_paused;
&gt; +    bool m_stopped;

These should be initialized here instead of in the constructor:

    bool m_paused { false };
    bool m_stopped { false };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161289</commentid>
    <comment_count>16</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-02 09:16:36 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 270484 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270484&amp;action=review
&gt; 
&gt; I know almost nothing about GStreamer, so once the structural issues noted
&gt; here have been fixed a GStreamer person should do the final review.
&gt; 

Thanks again for the review Eric, just did the changes and solved other small issues I found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161291</commentid>
    <comment_count>17</comment_count>
      <attachid>270492</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-02 09:17:18 -0800</bug_when>
    <thetext>Created attachment 270492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161310</commentid>
    <comment_count>18</comment_count>
      <attachid>270497</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-02 10:32:06 -0800</bug_when>
    <thetext>Created attachment 270497
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161458</commentid>
    <comment_count>19</comment_count>
      <attachid>270497</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-02-02 16:50:09 -0800</bug_when>
    <thetext>Comment on attachment 270497
Patch

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

I&apos;m not a GStreamer expert, but I think this really close! I noticed a couple weird things though:

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:48
&gt; +        LOG_MEDIA_MESSAGE(&quot;Creating Stream media player&quot;);

This is a little bit ambiguous. Perhaps say something like &quot;Creating MediaPlayerPrivateGStreamerOwr.&quot;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:146
&gt; +    m_player-&gt;readyStateChanged();
&gt; +
&gt; +}

Nit: Extra line here.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:188
&gt; +        if (track-&gt;type() == RealtimeMediaSource::Audio) {

It might be clearer to use a switch statement here and handle all enum values.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:200
&gt; +            // FIXME: Remove hardcoded video dimensions when the rendering performance
&gt; +            // bottleneck is resolved.

Would you file a bug for this and include a link here?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:206
&gt; +        } else
&gt; +            ASSERT_NOT_REACHED();

What does it mean when the track is None here? Might be worth leaving a comment explaining why it should never happen.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:266
&gt; +    // FIXME: volume/mute support.

Would be a good to have a bug for this as well.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:283
&gt; +    if (!m_streamPrivate || !m_streamPrivate-&gt;active())
&gt; +        stop();
&gt; +
&gt; +    for (auto track : m_streamPrivate-&gt;tracks()) {

This doesn&apos;t seem right. You check if m_steamPrivate is NULL and then you immediately dereference it. If m_streamPrivate can be null it should be handled, but if not, it should be an assertion instead of a runtime check</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161638</commentid>
    <comment_count>20</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-03 04:37:20 -0800</bug_when>
    <thetext>Thanks for the comments Martin, I&apos;ve updated all of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161639</commentid>
    <comment_count>21</comment_count>
      <attachid>270570</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-03 04:38:07 -0800</bug_when>
    <thetext>Created attachment 270570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161748</commentid>
    <comment_count>22</comment_count>
      <attachid>270497</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-02-03 12:25:55 -0800</bug_when>
    <thetext>Comment on attachment 270497
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:25
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#if ENABLE(MEDIA_STREAM) &amp;&amp; USE(GSTREAMER) &amp;&amp; USE(OPENWEBRTC)
&gt; +#include &quot;MediaPlayerPrivateGStreamerOwr.h&quot;

Nit: since normally the header that&apos;s specific to some implementation file uses the same build guards, I couple the config.h and this implementation-specific header into the same block, same as it&apos;s done when there are no build guards used.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:284
&gt; +    for (auto track : m_streamPrivate-&gt;tracks()) {
&gt; +        RealtimeMediaSourceOwr* source = reinterpret_cast&lt;RealtimeMediaSourceOwr*&gt;(&amp;track-&gt;source());

You should use auto&amp;, directly referencing the objects in the vector instead of copying the RefPtr object.

By specifying the type in reinterpret_cast, you can again simply use auto:

    auto* source = reinterpret_cast&lt;...&gt;(...);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161864</commentid>
    <comment_count>23</comment_count>
      <attachid>270570</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-02-03 18:40:26 -0800</bug_when>
    <thetext>Comment on attachment 270570
Patch

Okay. I think with Zan&apos;s nits this looks good. Thanks for the changes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161922</commentid>
    <comment_count>24</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-02-04 00:56:52 -0800</bug_when>
    <thetext>Looks good indeed, thanks for the reviews :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161949</commentid>
    <comment_count>25</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-04 02:47:36 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Comment on attachment 270497 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270497&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:25
&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +
&gt; &gt; +#if ENABLE(MEDIA_STREAM) &amp;&amp; USE(GSTREAMER) &amp;&amp; USE(OPENWEBRTC)
&gt; &gt; +#include &quot;MediaPlayerPrivateGStreamerOwr.h&quot;
&gt; 
&gt; Nit: since normally the header that&apos;s specific to some implementation file
&gt; uses the same build guards, I couple the config.h and this
&gt; implementation-specific header into the same block, same as it&apos;s done when
&gt; there are no build guards used.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:284
&gt; &gt; +    for (auto track : m_streamPrivate-&gt;tracks()) {
&gt; &gt; +        RealtimeMediaSourceOwr* source = reinterpret_cast&lt;RealtimeMediaSourceOwr*&gt;(&amp;track-&gt;source());
&gt; 
&gt; You should use auto&amp;, directly referencing the objects in the vector instead
&gt; of copying the RefPtr object.
&gt; 
&gt; By specifying the type in reinterpret_cast, you can again simply use auto:
&gt; 
&gt;     auto* source = reinterpret_cast&lt;...&gt;(...);

Thanks for the comments Zan, I&apos;ll apply them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161965</commentid>
    <comment_count>26</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-04 03:39:45 -0800</bug_when>
    <thetext>Committed r196117: &lt;http://trac.webkit.org/changeset/196117&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161966</commentid>
    <comment_count>27</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-04 03:42:01 -0800</bug_when>
    <thetext>Thanks everyone for the reviews.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269996</attachid>
            <date>2016-01-27 03:54:42 -0800</date>
            <delta_ts>2016-01-27 04:39:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153541-20160127125415.patch</filename>
            <type>text/plain</type>
            <size>21478</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1NDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQ4OWQ3ZWU1Mzc2NzQx
YzgwNmNiZmQ1Yjc2ZTliYjE0ZDI3YjlkMC4uZTkwODNhYjJhNWI3MGNkMmM3MDk5YjczMDE4NmQy
NTE0YWU3Mzk3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTAxLTI3ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBtZWRpYXN0cmVhbSBtZWRpYXBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZWRp
YXBsYXllci4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIGh0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpzZXRTcmNPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y3Jl
YXRlTWVkaWFQbGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3VycmVudFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZGluZ0ZhaWxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmRpZExv
YWRpbmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3I6OmludGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzdXBwb3J0
c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3I6OmNyZWF0ZUdTVEF1ZGlvU2lua0Jpbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNvdXJjZVN0b3BwZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VNdXRlZENoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3Vy
Y2VTZXR0aW5nc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwcmV2ZW50U291cmNlRnJvbVN0b3BwaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjplbmdpbmVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cHJlcGFyZVRvUGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmR1cmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2Vlayk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNlZWtp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpz
ZXRSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpoYXNDbG9zZWRDYXB0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldENsb3NlZENhcHRpb25zVmlzaWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Om1h
eFRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3I6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cjo6dG90YWxCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6OmJ5dGVzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y2FuTG9hZFBvc3Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldFBvc3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmlzTGl2ZVN0cmVh
bSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmF1
ZGlvU2luayk6CisKIDIwMTYtMDEtMTkgIEFkYSBDaGFuICA8YWRhY2hhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byBlbmFibGUgVklERU9fUFJFU0VOVEFUSU9OX01P
REUgb24gb3RoZXIgQ29jb2EgcGxhdGZvcm1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRl
eCBkYTgyY2I0ZDA2ZTY1YmNjNjg4ZDg5ZmY0NTIzM2NlNjE1ZTFkNGM5Li5jZjUxY2EzMmM1ZjAy
MmEzNjA0Yjk2NzkwNmI4ZjIzMzBkOGYzYjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpA
QCAtMTMzLDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGYwNTNhY2UwNDExMzg5Yzk2MmRlYTA2
ODM2ZDA4ZDI1MjJiMGJkYzkuLjc5ZTVhMDE1ZWI1NGMyNGMyYmY2MGEyN2ExZmRkMTFhMWY4OWI4
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMTI5LDYg
KzEyOSw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAi
RE9NVVJMLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRlICJNZWRpYVN0cmVh
bVJlZ2lzdHJ5LmgiCiAjZW5kaWYKQEAgLTkwNCw2ICs5MDUsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldFNyY09iamVjdChNZWRpYVN0cmVhbSogbWVkaWFTdHJlYW0pCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDg5NgogCiAgICAgbV9tZWRp
YVN0cmVhbVNyY09iamVjdCA9IG1lZGlhU3RyZWFtOworICAgIHNldFNyYyhET01VUkw6OmNyZWF0
ZVB1YmxpY1VSTChBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbWVk
aWFTdHJlYW0pKTsKIH0KICNlbmRpZgogCkBAIC01NzYzLDEwICs1NzY1LDYgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXllcigpCiAgICAgICAgIG1fbWVkaWFTb3VyY2Ut
PmNsb3NlKCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgbV9tZWRp
YVN0cmVhbVNyY09iamVjdCA9IG51bGxwdHI7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKICAgICBmb3JnZXRSZXNvdXJjZVNwZWNpZmljVHJhY2tzKCk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCA1
ZWYyOWY1NzgxMGFkN2I3MzZlZWU0NjNiNDlkMzBiZGY2ZTA1YWNlLi4wZDZhYmYxMzVjZDA2MWQ1
NjBlMzQwMDkzMTk5ZjY2MzY2NmQ3OWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC01Myw2ICs1Myw5IEBACiAKICNpZiBVU0Uo
R1NUUkVBTUVSKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQorI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oIgorI2VuZGlmCiAjZGVmaW5lIFBsYXRmb3JtTWVk
aWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyCiAjZW5kaWYKIApA
QCAtMjA5LDYgKzIxMiwxMSBAQCBzdGF0aWMgdm9pZCBidWlsZE1lZGlhRW5naW5lc1ZlY3Rvcigp
CiAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZWdpc3Rlck1lZGlhRW5naW5lKGFk
ZE1lZGlhRW5naW5lKTsKICNlbmRpZgogCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKKyAgICBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlm
CisKICNpZiBkZWZpbmVkKFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUpCiAgICAgUGxhdGZv
cm1NZWRpYUVuZ2luZUNsYXNzTmFtZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2lu
ZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGIzZDY4OGExMzRkNTBjZmY4OGI2MWE4YmMxYTllZDAz
ODRmNDZhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCkBAIC0wLDAg
KzEsMzIyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2lj
YWwgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJj
ZU93ci5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPGdzdC9hdWRpby9zdHJlYW12b2x1
bWUuaD4KKyNpbmNsdWRlIDxvd3Ivb3dyLmg+CisjaW5jbHVkZSA8b3dyL293cl9nc3RfYXVkaW9f
cmVuZGVyZXIuaD4KKyNpbmNsdWRlIDxvd3Ivb3dyX2dzdF92aWRlb19yZW5kZXJlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9v
cGVud2VicnRjX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9vcGVud2Vi
cnRjX2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IoTWVkaWFQbGF5ZXIqIHBs
YXllcikKKyAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UocGxheWVyKQorICAg
ICwgbV9wYXVzZWQodHJ1ZSkKKyAgICAsIG1fc3RvcHBlZCh0cnVlKQoreworICAgIGlmIChpc0F2
YWlsYWJsZSgpKSB7CisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJDcmVhdGluZyBTdHJlYW0g
bWVkaWEgcGxheWVyIik7CisKKyAgICAgICAgY3JlYXRlVmlkZW9TaW5rKCk7CisgICAgICAgIGNy
ZWF0ZUdTVEF1ZGlvU2lua0JpbigpOworICAgIH0KK30KKworTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyKCkKK3sKKyAgICBMT0df
TUVESUFfTUVTU0FHRSgiRGVzdHJ1Y3RpbmciKTsKKworICAgIHN0b3AoKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnBsYXkoKQoreworICAgIExPR19NRURJQV9N
RVNTQUdFKCJQbGF5Iik7CisKKyAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Q
cml2YXRlLT5hY3RpdmUoKSkgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmc7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGF1c2VkID0gZmFsc2U7CisgICAgaW50
ZXJuYWxMb2FkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpw
YXVzZSgpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlBhdXNlIik7CisgICAgbV9wYXVzZWQg
PSB0cnVlOworICAgIHN0b3AoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWRlb1NvdXJjZTsKK30K
KworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9hdWRpb1NvdXJjZTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpjdXJyZW50VGltZSgpIGNvbnN0Cit7CisgICAgZ2ludDY0IHBvc2l0
aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBHc3RRdWVyeSogcXVlcnk9IGdzdF9xdWVy
eV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKKworICAgIGlmIChtX3ZpZGVvU291cmNl
ICYmIGdzdF9lbGVtZW50X3F1ZXJ5KG1fdmlkZW9TaW5rLmdldCgpLCBxdWVyeSkpCisgICAgICAg
IGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKKyAgICBlbHNl
IGlmIChtX2F1ZGlvU291cmNlICYmIGdzdF9lbGVtZW50X3F1ZXJ5KG1fYXVkaW9TaW5rLmdldCgp
LCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBv
c2l0aW9uKTsKKworICAgIGZsb2F0IHJlc3VsdCA9IDAuMGY7CisgICAgaWYgKHN0YXRpY19jYXN0
PEdzdENsb2NrVGltZT4ocG9zaXRpb24pICE9IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICAg
IHJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4ocG9zaXRpb24pIC8gR1NUX1NFQ09ORDsKKwor
ICAgIExPR19NRURJQV9NRVNTQUdFKCJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9U
SU1FX0FSR1MocG9zaXRpb24pKTsKKyAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OmxvYWQoY29uc3QgU3RyaW5nICZ1cmwpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWQoTWVkaWFTdHJlYW1Qcml2
YXRlJiBzdHJlYW1Qcml2YXRlKQoreworICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiTG9hZGluZyBNZWRpYVN0
cmVhbVByaXZhdGUgJXAiLCAmc3RyZWFtUHJpdmF0ZSk7CisKKyAgICBtX3N0cmVhbVByaXZhdGUg
PSAmc3RyZWFtUHJpdmF0ZTsKKyAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Q
cml2YXRlLT5hY3RpdmUoKSkgeworICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpO
ZXR3b3JrRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmc7CisgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAg
ICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworICAgIGlmICghaW50ZXJuYWxMb2Fk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBzdHJlYW0gY29udGFpbnMgdmlk
ZW8sIHdhaXQgZm9yIGZpcnN0IHZpZGVvIGZyYW1lIGJlZm9yZSBzZXR0aW5nCisgICAgLy8gSGF2
ZUVub3VnaERhdGEKKyAgICBpZiAoIWhhc1ZpZGVvKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOworCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjps
b2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCit7CisKKyAgICBp
ZiAobV9uZXR3b3JrU3RhdGUgIT0gZXJyb3IpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBl
cnJvcjsKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICB9Cisg
ICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKKyAgICAg
ICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICBtX3Bs
YXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6aW50
ZXJuYWxMb2FkKCkKK3sKKyAgICBpZiAoIW1fc3RvcHBlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgbV9zdG9wcGVkID0gZmFsc2U7CisgICAgaWYgKCFtX3N0cmVhbVByaXZhdGUgfHwg
IW1fc3RyZWFtUHJpdmF0ZS0+YWN0aXZlKCkpIHsKKyAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6TmV0d29ya0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIExPR19NRURJQV9NRVNTQUdFKCJDb25uZWN0aW5nIHRvIGxpdmUgc3RyZWFtLCBkZXNjcmlw
dG9yOiAlcCIsIG1fc3RyZWFtUHJpdmF0ZS5nZXQoKSk7CisKKyAgICBmb3IgKGF1dG8gdHJhY2sg
OiBtX3N0cmVhbVByaXZhdGUtPnRyYWNrcygpKSB7CisgICAgICAgIGlmICghdHJhY2stPmVuYWJs
ZWQoKSkgeworICAgICAgICAgICAgTE9HX01FRElBX01FU1NBR0UoIlRyYWNrICVzIGRpc2FibGVk
IiwgdHJhY2stPmxhYmVsKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlT3dyKiBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqPigmdHJhY2stPnNvdXJjZSgp
KTsKKyAgICAgICAgT3dyTWVkaWFTb3VyY2UqIG1lZGlhU291cmNlID0gT1dSX01FRElBX1NPVVJD
RShzb3VyY2UtPm1lZGlhU291cmNlKCkpOworCisgICAgICAgIGlmICh0cmFjay0+dHlwZSgpID09
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKSB7CisgICAgICAgICAgICBpZiAobV9hdWRpb1Nv
dXJjZSAmJiAobV9hdWRpb1NvdXJjZS5nZXQoKSA9PSBzb3VyY2UpKQorICAgICAgICAgICAgICAg
IGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIsICJkaXNhYmxlZCIsIEZBTFNFLCBudWxscHRy
KTsKKworICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElB
X1JFTkRFUkVSKG1fYXVkaW9SZW5kZXJlciksIG1lZGlhU291cmNlKTsKKyAgICAgICAgICAgIG1f
YXVkaW9Tb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICBzb3VyY2UtPmFkZE9ic2VydmVyKHRo
aXMpOworICAgICAgICB9IGVsc2UgaWYgKHRyYWNrLT50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VmlkZW8pIHsKKyAgICAgICAgICAgIGlmIChtX3ZpZGVvU291cmNlICYmIChtX3ZpZGVv
U291cmNlLmdldCgpID09IHNvdXJjZSkpCisgICAgICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1f
dmlkZW9SZW5kZXJlciwgImRpc2FibGVkIiwgRkFMU0UsIG51bGxwdHIpOworCisgICAgICAgICAg
ICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLCAid2lkdGgiLCA2NDAsICJoZWlnaHQiLCA0
ODAsIG51bGxwdHIpOworICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2Uo
T1dSX01FRElBX1JFTkRFUkVSKG1fdmlkZW9SZW5kZXJlciksIG1lZGlhU291cmNlKTsKKyAgICAg
ICAgICAgIG1fdmlkZW9Tb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICBzb3VyY2UtPmFkZE9i
c2VydmVyKHRoaXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKworICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5v
dWdoRGF0YTsKKyAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnN0b3AoKQor
eworICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RvcHBlZCA9
IHRydWU7CisgICAgaWYgKG1fYXVkaW9Tb3VyY2UpIHsKKyAgICAgICAgTE9HX01FRElBX01FU1NB
R0UoIlN0b3A6IGRpc2Nvbm5lY3RpbmcgYXVkaW8iKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1f
YXVkaW9SZW5kZXJlciwgImRpc2FibGVkIiwgVFJVRSwgbnVsbHB0cik7CisgICAgfQorICAgIGlm
IChtX3ZpZGVvU291cmNlKSB7CisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJTdG9wOiBkaXNj
b25uZWN0aW5nIHZpZGVvIik7CisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIs
ICJkaXNhYmxlZCIsIFRSVUUsIG51bGxwdHIpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdp
c3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKSB7CisgICAgICAgIHJl
Z2lzdHJhcihbXShNZWRpYVBsYXllciogcGxheWVyKSB7CisgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I+KHBsYXllcik7Cisg
ICAgICAgIH0sIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUsIDAsIDAsIDAsIDApOwor
ICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmdldFN1cHBv
cnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgLy8gRklYTUUKK30KKwor
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBv
cnRlZDsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmlzQXZhaWxh
YmxlKCkKK3sKKyAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3RhdGljIGJvb2wgZGVidWdSZWdpc3RlcmVkID0gZmFsc2U7CisgICAg
aWYgKCFkZWJ1Z1JlZ2lzdGVyZWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQo
d2Via2l0X29wZW53ZWJydGNfZGVidWcsICJ3ZWJraXRvd3JwbGF5ZXIiLCAwLCAiV2ViS2l0IE9w
ZW5XZWJSVEMgcGxheWVyIik7CisgICAgICAgIGRlYnVnUmVnaXN0ZXJlZCA9IHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyOjpjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKQoreworICAgIEFTU0VSVCghbV9hdWRpb1Np
bmspOworICAgIExPR19NRURJQV9NRVNTQUdFKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7CisgICAg
Ly8gRklYTUU6IHZvbHVtZS9tdXRlIHN1cHBvcnQKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
c2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIDApOworICAg
IEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlQ2hhbmdlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CisgICAgR3N0Q2hpbGRQcm94eSog
Y2hpbGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShzaW5rLmdldCgpKTsKKyAgICBtX2F1ZGlvU2lu
ayA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2lu
ZGV4KGNoaWxkUHJveHksIDApKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNpbmsuZ2V0
KCksIEdTVF9TVEFURV9OVUxMKTsKKworICAgIG1fYXVkaW9SZW5kZXJlciA9IG93cl9nc3RfYXVk
aW9fcmVuZGVyZXJfbmV3KG1fYXVkaW9TaW5rLmdldCgpKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6OnNvdXJjZVN0b3BwZWQoKQoreworICAgIExPR19NRURJQV9N
RVNTQUdFKCJTb3VyY2Ugc3RvcHBlZCIpOworCisgICAgaWYgKCFtX3N0cmVhbVByaXZhdGUgfHwg
IW1fc3RyZWFtUHJpdmF0ZS0+YWN0aXZlKCkpCisgICAgICAgIHN0b3AoKTsKKworICAgIGZvciAo
YXV0byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0ZS0+dHJhY2tzKCkpIHsKKyAgICAgICAgUmVhbHRp
bWVNZWRpYVNvdXJjZU93ciogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxSZWFsdGltZU1lZGlh
U291cmNlT3dyKj4oJnRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIGlmICh0cmFjay0+ZW5hYmxl
ZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChzb3VyY2UgPT0gbV9hdWRp
b1NvdXJjZSkKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2F1ZGlvUmVuZGVyZXIsICJkaXNh
YmxlZCIsIFRSVUUsIG51bGxwdHIpOworICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gbV92aWRl
b1NvdXJjZSkKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIsICJkaXNh
YmxlZCIsIFRSVUUsIG51bGxwdHIpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCit7CisgICAgTE9HX01FRElBX01F
U1NBR0UoIlNvdXJjZSBtdXRlZCBzdGF0ZSBjaGFuZ2VkIik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VTZXR0aW5nc0NoYW5nZWQoKQoreworICAgIExP
R19NRURJQV9NRVNTQUdFKCJTb3VyY2Ugc2V0dGluZ3MgY2hhbmdlZCIpOworfQorCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cHJldmVudFNvdXJjZUZyb21TdG9wcGluZygp
Cit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlByZXZlbnQgc291cmNlIGZyb20gc3RvcHBpbmci
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKCkKK3sKKyAgICBHc3RFbGVtZW50KiBzaW5r
ID0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5rKCk7Cisg
ICAgbV92aWRlb1JlbmRlcmVyID0gb3dyX2dzdF92aWRlb19yZW5kZXJlcl9uZXcoc2luayk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VC
UlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFjYjdhMGY1MWMwNjNmNTk4Zjk2YzFlOWI0NTcyNzAxYjQzNmUyMjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgKQEAgLTAsMCArMSwxMTggQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVT
RShPUEVOV0VCUlRDKQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKwordHlwZWRlZiBzdHJ1Y3Qg
X093ckdzdFZpZGVvUmVuZGVyZXIgT3dyR3N0VmlkZW9SZW5kZXJlcjsKK3R5cGVkZWYgc3RydWN0
IF9Pd3JHc3RBdWRpb1JlbmRlcmVyIE93ckdzdEF1ZGlvUmVuZGVyZXI7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlOworY2xhc3MgUmVhbHRpbWVNZWRp
YVNvdXJjZU93cjsKK2NsYXNzIFVSTDsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UsIHByaXZhdGUg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cihNZWRpYVBsYXllciopOworICAgIH5NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3IoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVk
aWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworICAgIHZpcnR1YWwgU3RyaW5nIGVuZ2lu
ZURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gIk9wZW5XZWJSVEMiOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmKTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNs
aWVudCopIHsgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGxvYWQoTWVkaWFTdHJlYW1Qcml2
YXRlJik7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQoKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlVG9QbGF5KCkgeyB9CisgICAgdm9pZCBwbGF5KCk7CisgICAgdm9pZCBwYXVz
ZSgpOworCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OworICAgIGJvb2wgaGFzQXVkaW8oKSBj
b25zdDsKKworICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAwOyB9
CisKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNlZWsoZmxvYXQpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzZWVraW5nKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0KSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgeyB9CisgICAgdmlydHVhbCBi
b29sIHBhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VkOyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCkgeyB9OworCisgICAgdmlydHVh
bCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOyB9CisgICAgYm9v
bCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXMoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1bnNp
Z25lZCBieXRlc0xvYWRlZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBjYW5Mb2FkUG9zdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UG9zdGVyKGNvbnN0IFN0cmluZyYpIHsgfQorCisgICAgdmlydHVhbCBib29sIGlzTGl2
ZVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIFJlYWx0aW1lTWVkaWFT
b3VyY2U6Ok9ic2VydmVyIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVN0
b3BwZWQoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlTXV0ZWRDaGFu
Z2VkKCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVNldHRpbmdzQ2hh
bmdlZCgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBwcmV2ZW50U291cmNlRnJv
bVN0b3BwaW5nKCkgb3ZlcnJpZGUgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEdz
dEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2luaygpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lk
IGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgIHN0YXRpYyBNZWRpYVBs
YXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQ
YXJhbWV0ZXJzJik7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICB2b2lkIGNy
ZWF0ZUdTVEF1ZGlvU2lua0JpbigpOworICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlIGVycm9yKTsKKyAgICBib29sIGludGVybmFsTG9hZCgpOworICAgIHZv
aWQgc3RvcCgpOworICAgIHZpcnR1YWwgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdWRpb1NpbmsuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1fcGF1c2Vk
OworICAgIGJvb2wgbV9zdG9wcGVkOworICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dy
PiBtX3ZpZGVvU291cmNlOworICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlT3dyPiBtX2F1
ZGlvU291cmNlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hdWRpb1Npbms7CisgICAgUmVm
UHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gbV9zdHJlYW1Qcml2YXRlOworICAgIE93ckdzdFZpZGVv
UmVuZGVyZXIqIG1fdmlkZW9SZW5kZXJlcjsKKyAgICBPd3JHc3RBdWRpb1JlbmRlcmVyKiBtX2F1
ZGlvUmVuZGVyZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykK
KworI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269997</attachid>
            <date>2016-01-27 04:39:38 -0800</date>
            <delta_ts>2016-01-28 04:21:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153541-20160127133911.patch</filename>
            <type>text/plain</type>
            <size>21437</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1NDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQ4OWQ3ZWU1Mzc2NzQx
YzgwNmNiZmQ1Yjc2ZTliYjE0ZDI3YjlkMC4uMDljZGJhNDg4ZTllNTEwYjdkMjVhY2Q1ZTAzMjAx
OTYxNWM5NTc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTAxLTI3ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBtZWRpYXN0cmVhbSBtZWRpYXBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZWRp
YXBsYXllciBmb3IgdGhlCisgICAgICAgIG1lZGlhc3RyZWFtLiBUaGUgY29kZSB3YXMgaW1wbGVt
ZW50ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZCBhbmQKKyAgICAgICAgQWxlc3NhbmRybyBEZWNpbmEu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0U3Jj
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlh
UGxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE1lZGlhRW5naW5lc1ZlY3Rvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp+TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3I6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cjo6aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWRpbmdGYWlsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpkaWRMb2FkaW5nUHJv
Z3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjppbnRlcm5hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmdldFN1cHBvcnRlZFR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c3VwcG9ydHNUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6aXNBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjpjcmVhdGVHU1RBdWRpb1NpbmtCaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VTdG9wcGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c291cmNlTXV0ZWRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c291cmNlU2V0dGlu
Z3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6cHJldmVudFNvdXJjZUZyb21TdG9wcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNyZWF0ZVZpZGVvU2luayk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6ZW5naW5lRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnByZXBhcmVUb1BsYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpkdXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNlZWspOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZWVraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2V0UmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldFBy
ZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cjo6cGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6aGFzQ2xvc2VkQ2FwdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjptYXhUaW1lU2Vl
a2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjpidWZmZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OnRvdGFsQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpieXRlc0xvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6OmNhbkxvYWRQb3N0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRQb3N0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjppc0xpdmVTdHJlYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjphdWRpb1Npbmsp
OgorCiAyMDE2LTAxLTE5ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IE1ha2UgaXQgcG9zc2libGUgdG8gZW5hYmxlIFZJREVPX1BSRVNFTlRBVElPTl9NT0RFIG9uIG90
aGVyIENvY29hIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZGE4MmNi
NGQwNmU2NWJjYzY4OGQ4OWZmNDUyMzNjZTYxNWUxZDRjOS4uYzRlNTMwZGZlZDQ0MGMzZDM4ZWYz
OGM2NmQwNmI4ZTQ3YzgyYzljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTQwNiw2
ICs0MDYsOSBAQCBpZiAoRU5BQkxFX01FRElBX1NUUkVBTSkKICAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX0xJQlJBUklFUwogICAgICAgICAke09QRU5XRUJSVENfTElCUkFSSUVTfQogICAgICkKKyAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKKyAgICApCiBlbmRp
ZiAoKQogCiBpZiAoVVNFX1RFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKaW5kZXggZjA1M2FjZTA0MTEzODljOTYyZGVhMDY4MzZkMDhkMjUyMmIw
YmRjOS4uNzllNWEwMTVlYjU0YzI0YzJiZjYwYTI3YTFmZGQxMWExZjg5Yjg3NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0xMjksNiArMTI5LDcgQEAKICNl
bmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNsdWRlICJET01VUkwuaCIKICNp
bmNsdWRlICJNZWRpYVN0cmVhbS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtUmVnaXN0cnkuaCIK
ICNlbmRpZgpAQCAtOTA0LDYgKzkwNSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U3Jj
T2JqZWN0KE1lZGlhU3RyZWFtKiBtZWRpYVN0cmVhbSkKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODk2CiAKICAgICBtX21lZGlhU3RyZWFtU3JjT2Jq
ZWN0ID0gbWVkaWFTdHJlYW07CisgICAgc2V0U3JjKERPTVVSTDo6Y3JlYXRlUHVibGljVVJMKEFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtZWRpYVN0cmVhbSkpOwog
fQogI2VuZGlmCiAKQEAgLTU3NjMsMTAgKzU3NjUsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmNyZWF0ZU1lZGlhUGxheWVyKCkKICAgICAgICAgbV9tZWRpYVNvdXJjZS0+Y2xvc2UoKTsKICNl
bmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBtX21lZGlhU3RyZWFtU3JjT2Jq
ZWN0ID0gbnVsbHB0cjsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGZv
cmdldFJlc291cmNlU3BlY2lmaWNUcmFja3MoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDVlZjI5ZjU3ODEwYWQ3
YjczNmVlZTQ2M2I0OWQzMGJkZjZlMDVhY2UuLjBkNmFiZjEzNWNkMDYxZDU2MGUzNDAwOTMxOTlm
NjYzNjY2ZDc5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAKQEAgLTUzLDYgKzUzLDkgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKE9QRU5XRUJSVEMpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmgiCisjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNz
TmFtZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICNlbmRpZgogCkBAIC0yMDksNiArMjEy
LDExIEBAIHN0YXRpYyB2b2lkIGJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKCkKICAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUp
OwogI2VuZGlmCiAKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIp
ICYmIFVTRShPUEVOV0VCUlRDKQorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CisjZW5kaWYKKwogI2lmIGRlZmlu
ZWQoUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSkKICAgICBQbGF0Zm9ybU1lZGlhRW5naW5l
Q2xhc3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMTc3OGZlZTA2NTFlMGYzZDQ4M2FmMDA5YjRjYWU3MGFlMGYyYTMzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKQEAgLTAsMCArMSwzMjMgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbCBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAm
JiBVU0UoT1BFTldFQlJUQykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3IuaCIKKworI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCisjaW5j
bHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgorI2luY2x1
ZGUgPG93ci9vd3IuaD4KKyNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgor
I2luY2x1ZGUgPG93ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVi
dWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cihNZWRpYVBsYXllciogcGxheWVyKQorICAgIDog
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZShwbGF5ZXIpCisgICAgLCBtX3BhdXNlZCh0
cnVlKQorICAgICwgbV9zdG9wcGVkKHRydWUpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpIHsK
KyAgICAgICAgTE9HX01FRElBX01FU1NBR0UoIkNyZWF0aW5nIFN0cmVhbSBtZWRpYSBwbGF5ZXIi
KTsKKworICAgICAgICBjcmVhdGVWaWRlb1NpbmsoKTsKKyAgICAgICAgY3JlYXRlR1NUQXVkaW9T
aW5rQmluKCk7CisgICAgfQorfQorCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IoKQoreworICAgIExPR19NRURJQV9NRVNTQUdF
KCJEZXN0cnVjdGluZyIpOworCisgICAgc3RvcCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6cGxheSgpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlBsYXki
KTsKKworICAgIGlmICghbV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2
ZSgpKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsK
KyAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6RW1wdHkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9wYXVzZWQgPSBmYWxzZTsKKyAgICBpbnRlcm5hbExvYWQoKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnBhdXNlKCkKK3sKKyAg
ICBMT0dfTUVESUFfTUVTU0FHRSgiUGF1c2UiKTsKKyAgICBtX3BhdXNlZCA9IHRydWU7CisgICAg
c3RvcCgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6aGFzVmlk
ZW8oKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZGVvU291cmNlOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIHJldHVy
biBtX2F1ZGlvU291cmNlOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3I6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xP
Q0tfVElNRV9OT05FOworICAgIEdzdFF1ZXJ5KiBxdWVyeT0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlv
bihHU1RfRk9STUFUX1RJTUUpOworCisgICAgaWYgKG1fdmlkZW9Tb3VyY2UgJiYgZ3N0X2VsZW1l
bnRfcXVlcnkobV92aWRlb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKKyAgICAgICAgZ3N0X3F1ZXJ5X3Bh
cnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOworICAgIGVsc2UgaWYgKG1fYXVkaW9T
b3VyY2UgJiYgZ3N0X2VsZW1lbnRfcXVlcnkobV9hdWRpb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKKyAg
ICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOworCisg
ICAgZmxvYXQgcmVzdWx0ID0gMC4wZjsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1l
Pihwb3NpdGlvbikgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICAgICAgcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihwb3NpdGlvbikgLyBHU1RfU0VDT05EOworCisgICAgTE9HX01FRElB
X01FU1NBR0UoIlBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhwb3Np
dGlvbikpOworICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZChjb25zdCBT
dHJpbmcgJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUmIHN0cmVhbVByaXZh
dGUpCit7CisgICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIExPR19NRURJQV9NRVNTQUdFKCJMb2FkaW5nIE1lZGlhU3RyZWFtUHJpdmF0ZSAlcCIs
ICZzdHJlYW1Qcml2YXRlKTsKKworICAgIG1fc3RyZWFtUHJpdmF0ZSA9ICZzdHJlYW1Qcml2YXRl
OworICAgIGlmICghbV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgp
KSB7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmc7CisgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsK
KyAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIG1fcGxheWVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKCFpbnRlcm5hbExvYWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gSWYgdGhlIHN0cmVhbSBjb250YWlucyB2aWRlbywgd2FpdCBmb3IgZmly
c3QgdmlkZW8gZnJhbWUgYmVmb3JlIHNldHRpbmcKKyAgICAvLyBIYXZlRW5vdWdoRGF0YQorICAg
IGlmICghaGFzVmlkZW8oKSkKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVFbm91Z2hEYXRhOworCisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWRpbmdGYWlsZWQoTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKK3sKKworICAgIGlmIChtX25ldHdvcmtTdGF0
ZSAhPSBlcnJvcikgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IGVycm9yOworICAgICAgICBt
X3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBpZiAobV9yZWFkeVN0
YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgeworICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOworICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3I6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjppbnRlcm5hbExvYWQoKQorewor
ICAgIGlmICghbV9zdG9wcGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3N0b3Bw
ZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRl
LT5hY3RpdmUoKSkgeworICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3Jr
RXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgTE9HX01FRElBX01F
U1NBR0UoIkNvbm5lY3RpbmcgdG8gbGl2ZSBzdHJlYW0sIGRlc2NyaXB0b3I6ICVwIiwgbV9zdHJl
YW1Qcml2YXRlLmdldCgpKTsKKworICAgIGZvciAoYXV0byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0
ZS0+dHJhY2tzKCkpIHsKKyAgICAgICAgaWYgKCF0cmFjay0+ZW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICBMT0dfTUVESUFfTUVTU0FHRSgiVHJhY2sgJXMgZGlzYWJsZWQiLCB0cmFjay0+bGFiZWwo
KS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UmVhbHRpbWVNZWRpYVNvdXJjZU93cio+KCZ0cmFjay0+c291cmNlKCkpOworICAgICAgICBPd3JN
ZWRpYVNvdXJjZSogbWVkaWFTb3VyY2UgPSBPV1JfTUVESUFfU09VUkNFKHNvdXJjZS0+bWVkaWFT
b3VyY2UoKSk7CisKKyAgICAgICAgaWYgKHRyYWNrLT50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNv
dXJjZTo6QXVkaW8pIHsKKyAgICAgICAgICAgIGlmIChtX2F1ZGlvU291cmNlICYmIChtX2F1ZGlv
U291cmNlLmdldCgpID09IHNvdXJjZSkpCisgICAgICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1f
YXVkaW9SZW5kZXJlciwgImRpc2FibGVkIiwgRkFMU0UsIG51bGxwdHIpOworCisgICAgICAgICAg
ICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1JfTUVESUFfUkVOREVSRVIobV9hdWRp
b1JlbmRlcmVyKSwgbWVkaWFTb3VyY2UpOworICAgICAgICAgICAgbV9hdWRpb1NvdXJjZSA9IHNv
dXJjZTsKKyAgICAgICAgICAgIHNvdXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7CisgICAgICAgIH0g
ZWxzZSBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbykgewor
ICAgICAgICAgICAgaWYgKG1fdmlkZW9Tb3VyY2UgJiYgKG1fdmlkZW9Tb3VyY2UuZ2V0KCkgPT0g
c291cmNlKSkKKyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLCAi
ZGlzYWJsZWQiLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgaGFyZGNvZGVkIHZpZGVvIGRpbWVuc2lvbnMgd2hlbiB0aGUgcmVuZGVyaW5nIHBlcmZvcm1h
bmNlCisgICAgICAgICAgICAvLyBib3R0bGVuZWNrIGlzIHJlc29sdmVkLgorICAgICAgICAgICAg
Z19vYmplY3Rfc2V0KG1fdmlkZW9SZW5kZXJlciwgIndpZHRoIiwgNjQwLCAiaGVpZ2h0IiwgNDgw
LCBudWxscHRyKTsKKyAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9X
Ul9NRURJQV9SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIpLCBtZWRpYVNvdXJjZSk7CisgICAgICAg
ICAgICBtX3ZpZGVvU291cmNlID0gc291cmNlOworICAgICAgICAgICAgc291cmNlLT5hZGRPYnNl
cnZlcih0aGlzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisKKyAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3Vn
aERhdGE7CisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzdG9wKCkKK3sK
KyAgICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0b3BwZWQgPSB0
cnVlOworICAgIGlmIChtX2F1ZGlvU291cmNlKSB7CisgICAgICAgIExPR19NRURJQV9NRVNTQUdF
KCJTdG9wOiBkaXNjb25uZWN0aW5nIGF1ZGlvIik7CisgICAgICAgIG93cl9tZWRpYV9yZW5kZXJl
cl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX2F1ZGlvUmVuZGVyZXIpLCBudWxscHRy
KTsKKyAgICB9CisgICAgaWYgKG1fdmlkZW9Tb3VyY2UpIHsKKyAgICAgICAgTE9HX01FRElBX01F
U1NBR0UoIlN0b3A6IGRpc2Nvbm5lY3RpbmcgdmlkZW8iKTsKKyAgICAgICAgb3dyX21lZGlhX3Jl
bmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fdmlkZW9SZW5kZXJlciksIG51
bGxwdHIpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQorewor
ICAgIGlmIChpc0F2YWlsYWJsZSgpKSB7CisgICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBsYXll
ciogcGxheWVyKSB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I+KHBsYXllcik7CisgICAgICAgIH0sIGdldFN1cHBvcnRl
ZFR5cGVzLCBzdXBwb3J0c1R5cGUsIDAsIDAsIDAsIDApOworICAgIH0KK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3Ry
aW5nPiYpCit7CisgICAgLy8gRklYTUUKK30KKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVu
Z2luZVN1cHBvcnRQYXJhbWV0ZXJzJikKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjppc0F2YWlsYWJsZSgpCit7CisgICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRpYyBib29sIGRlYnVnUmVnaXN0
ZXJlZCA9IGZhbHNlOworICAgIGlmICghZGVidWdSZWdpc3RlcmVkKSB7CisgICAgICAgIEdTVF9E
RUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9vcGVud2VicnRjX2RlYnVnLCAid2Via2l0b3dycGxh
eWVyIiwgMCwgIldlYktpdCBPcGVuV2ViUlRDIHBsYXllciIpOworICAgICAgICBkZWJ1Z1JlZ2lz
dGVyZWQgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlR1NUQXVkaW9TaW5rQmluKCkKK3sKKyAg
ICBBU1NFUlQoIW1fYXVkaW9TaW5rKTsKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiQ3JlYXRpbmcg
YXVkaW8gc2luayIpOworICAgIC8vIEZJWE1FOiB2b2x1bWUvbXV0ZSBzdXBwb3J0CisKKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9h
dWRpb3NpbmsiLCAwKTsKKyAgICBHc3RDaGlsZFByb3h5KiBjaGlsZFByb3h5ID0gR1NUX0NISUxE
X1BST1hZKHNpbmsuZ2V0KCkpOworICAgIG1fYXVkaW9TaW5rID0gYWRvcHRHUmVmKEdTVF9FTEVN
RU5UKGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXgoY2hpbGRQcm94eSwgMCkpKTsK
KyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoc2luay5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwor
CisgICAgbV9hdWRpb1JlbmRlcmVyID0gb3dyX2dzdF9hdWRpb19yZW5kZXJlcl9uZXcobV9hdWRp
b1NpbmsuZ2V0KCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
c291cmNlU3RvcHBlZCgpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlNvdXJjZSBzdG9wcGVk
Iik7CisKKyAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3Rp
dmUoKSkKKyAgICAgICAgc3RvcCgpOworCisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9zdHJlYW1Q
cml2YXRlLT50cmFja3MoKSkgeworICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlT3dyKiBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqPigmdHJhY2stPnNv
dXJjZSgpKTsKKyAgICAgICAgaWYgKHRyYWNrLT5lbmFibGVkKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKHNvdXJjZSA9PSBtX2F1ZGlvU291cmNlKQorICAgICAgICAgICAg
b3dyX21lZGlhX3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fYXVkaW9S
ZW5kZXJlciksIG51bGxwdHIpOworICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gbV92aWRlb1Nv
dXJjZSkKKyAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJ
QV9SRU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIpLCBudWxscHRyKTsKKyAgICB9Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VNdXRlZENoYW5nZWQoKQorewor
ICAgIExPR19NRURJQV9NRVNTQUdFKCJTb3VyY2UgbXV0ZWQgc3RhdGUgY2hhbmdlZCIpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c291cmNlU2V0dGluZ3NDaGFu
Z2VkKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiU291cmNlIHNldHRpbmdzIGNoYW5nZWQi
KTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnByZXZlbnRTb3Vy
Y2VGcm9tU3RvcHBpbmcoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJQcmV2ZW50IHNvdXJj
ZSBmcm9tIHN0b3BwaW5nIik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitHc3RFbGVtZW50KiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNyZWF0ZVZpZGVvU2luaygpCit7CisgICAg
R3N0RWxlbWVudCogc2luayA9IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0
ZVZpZGVvU2luaygpOworICAgIG1fdmlkZW9SZW5kZXJlciA9IG93cl9nc3RfdmlkZW9fcmVuZGVy
ZXJfbmV3KHNpbmspOworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVS
KSAmJiBVU0UoT1BFTldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2I3YTBmNTFjMDYzZjU5OGY5NmMxZTliNDU3
MjcwMWI0MzZlMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oCkBAIC0w
LDAgKzEsMTE4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxNSBNZXRyb2xvZ2ljYWwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZu
ZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cl9oCisjZGVmaW5lIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0Uo
R1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisK
K3R5cGVkZWYgc3RydWN0IF9Pd3JHc3RWaWRlb1JlbmRlcmVyIE93ckdzdFZpZGVvUmVuZGVyZXI7
Cit0eXBlZGVmIHN0cnVjdCBfT3dyR3N0QXVkaW9SZW5kZXJlciBPd3JHc3RBdWRpb1JlbmRlcmVy
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFtUHJpdmF0ZTsKK2Ns
YXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I7CitjbGFzcyBVUkw7CisKK2NsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck93ciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlLCBwcml2YXRlIFJlYWx0aW1lTWVkaWFTb3VyY2U6Ok9ic2VydmVyIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IoTWVkaWFQbGF5ZXIq
KTsKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyKCk7CisKKyAgICBzdGF0aWMg
dm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKyAgICB2aXJ0
dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuICJPcGVuV2ViUlRD
IjsgfQorCisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJik7CisjaWYgRU5BQkxF
KE1FRElBX1NPVVJDRSkKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBNZWRp
YVNvdXJjZVByaXZhdGVDbGllbnQqKSB7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
KE1lZGlhU3RyZWFtUHJpdmF0ZSYpOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvUGxheSgpIHsgfQorICAgIHZvaWQgcGxheSgp
OworICAgIHZvaWQgcGF1c2UoKTsKKworICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKKyAgICBi
b29sIGhhc0F1ZGlvKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZWVrKGZsb2F0KSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2Vl
a2luZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmF0
ZShmbG9hdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpIHsg
fQorICAgIHZpcnR1YWwgYm9vbCBwYXVzZWQoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlZDsgfQor
CisgICAgdmlydHVhbCBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wpIHsg
fTsKKworICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVm
ZmVyZWQoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtVGltZVJhbmdl
cz4oKTsgfQorICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiAwOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFBvc3Rlcihjb25zdCBTdHJpbmcmKSB7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAv
LyBSZWFsdGltZU1lZGlhU291cmNlOjpPYnNlcnZlciBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VTdG9wcGVkKCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lk
IHNvdXJjZU11dGVkQ2hhbmdlZCgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBz
b3VyY2VTZXR0aW5nc0NoYW5nZWQoKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wg
cHJldmVudFNvdXJjZUZyb21TdG9wcGluZygpIG92ZXJyaWRlIGZpbmFsOworCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCBHc3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmsoKTsKKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKKyAg
ICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVk
aWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxl
KCk7CisgICAgdm9pZCBjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKTsKKyAgICB2b2lkIGxvYWRpbmdG
YWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcik7CisgICAgYm9vbCBpbnRlcm5h
bExvYWQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICB2aXJ0dWFsIEdzdEVsZW1lbnQqIGF1ZGlv
U2luaygpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9TaW5rLmdldCgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBtX3BhdXNlZDsKKyAgICBib29sIG1fc3RvcHBlZDsKKyAgICBSZWZQdHI8UmVhbHRp
bWVNZWRpYVNvdXJjZU93cj4gbV92aWRlb1NvdXJjZTsKKyAgICBSZWZQdHI8UmVhbHRpbWVNZWRp
YVNvdXJjZU93cj4gbV9hdWRpb1NvdXJjZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYXVk
aW9TaW5rOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGU+IG1fc3RyZWFtUHJpdmF0ZTsK
KyAgICBPd3JHc3RWaWRlb1JlbmRlcmVyKiBtX3ZpZGVvUmVuZGVyZXI7CisgICAgT3dyR3N0QXVk
aW9SZW5kZXJlciogbV9hdWRpb1JlbmRlcmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYg
VVNFKE9QRU5XRUJSVEMpCisKKyNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270107</attachid>
            <date>2016-01-28 04:22:03 -0800</date>
            <delta_ts>2016-02-02 04:28:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153541-20160128132136.patch</filename>
            <type>text/plain</type>
            <size>22141</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1NDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQ4OWQ3ZWU1Mzc2NzQx
YzgwNmNiZmQ1Yjc2ZTliYjE0ZDI3YjlkMC4uMDljZGJhNDg4ZTllNTEwYjdkMjVhY2Q1ZTAzMjAx
OTYxNWM5NTc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTAxLTI3ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBtZWRpYXN0cmVhbSBtZWRpYXBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZWRp
YXBsYXllciBmb3IgdGhlCisgICAgICAgIG1lZGlhc3RyZWFtLiBUaGUgY29kZSB3YXMgaW1wbGVt
ZW50ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZCBhbmQKKyAgICAgICAgQWxlc3NhbmRybyBEZWNpbmEu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0U3Jj
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlh
UGxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE1lZGlhRW5naW5lc1ZlY3Rvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp+TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3I6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cjo6aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWRpbmdGYWlsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpkaWRMb2FkaW5nUHJv
Z3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjppbnRlcm5hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmdldFN1cHBvcnRlZFR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c3VwcG9ydHNUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6aXNBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjpjcmVhdGVHU1RBdWRpb1NpbmtCaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VTdG9wcGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c291cmNlTXV0ZWRDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c291cmNlU2V0dGlu
Z3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6cHJldmVudFNvdXJjZUZyb21TdG9wcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNyZWF0ZVZpZGVvU2luayk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6ZW5naW5lRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnByZXBhcmVUb1BsYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpkdXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNlZWspOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZWVraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2V0UmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldFBy
ZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cjo6cGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6aGFzQ2xvc2VkQ2FwdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjptYXhUaW1lU2Vl
a2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjpidWZmZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OnRvdGFsQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpieXRlc0xvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6OmNhbkxvYWRQb3N0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRQb3N0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjppc0xpdmVTdHJlYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjphdWRpb1Npbmsp
OgorCiAyMDE2LTAxLTE5ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IE1ha2UgaXQgcG9zc2libGUgdG8gZW5hYmxlIFZJREVPX1BSRVNFTlRBVElPTl9NT0RFIG9uIG90
aGVyIENvY29hIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggY2EyZWRi
MDk2YjRiMTRiZGYwNWMxYmI2NjZjNzI1YmNlZjExOTBmMy4uNDliNzlhNTRmM2FhNDVmMDRhZDdm
MTY2Zjc4ZWE0NmEwMzk1NTE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1F
ZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTM4OCw2
ICszODgsOSBAQCBpZiAoRU5BQkxFX01FRElBX1NUUkVBTSkKICAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX0xJQlJBUklFUwogICAgICAgICAke09QRU5XRUJSVENfTElCUkFSSUVTfQogICAgICkKKyAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKKyAgICApCiBlbmRp
ZiAoKQogCiBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCmluZGV4IGRhODJjYjRkMDZlNjViY2M2ODhkODlmZjQ1MjMzY2U2MTVlMWQ0
YzkuLmM0ZTUzMGRmZWQ0NDBjM2QzOGVmMzhjNjZkMDZiOGU0N2M4MmM5YzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCkBAIC00MDYsNiArNDA2LDkgQEAgaWYgKEVOQUJMRV9NRURJQV9TVFJF
QU0pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKICAgICAgICAgJHtPUEVOV0VC
UlRDX0xJQlJBUklFU30KICAgICApCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3IuY3BwCisgICAgKQogZW5kaWYgKCkKIAogaWYgKFVTRV9URVhUVVJFX01BUFBFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGYwNTNhY2UwNDEx
Mzg5Yzk2MmRlYTA2ODM2ZDA4ZDI1MjJiMGJkYzkuLjc5ZTVhMDE1ZWI1NGMyNGMyYmY2MGEyN2Ex
ZmRkMTFhMWY4OWI4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cApAQCAtMTI5LDYgKzEyOSw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisjaW5jbHVkZSAiRE9NVVJMLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRl
ICJNZWRpYVN0cmVhbVJlZ2lzdHJ5LmgiCiAjZW5kaWYKQEAgLTkwNCw2ICs5MDUsNyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnNldFNyY09iamVjdChNZWRpYVN0cmVhbSogbWVkaWFTdHJlYW0p
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDg5Ngog
CiAgICAgbV9tZWRpYVN0cmVhbVNyY09iamVjdCA9IG1lZGlhU3RyZWFtOworICAgIHNldFNyYyhE
T01VUkw6OmNyZWF0ZVB1YmxpY1VSTChBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgbWVkaWFTdHJlYW0pKTsKIH0KICNlbmRpZgogCkBAIC01NzYzLDEwICs1NzY1LDYg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXllcigpCiAgICAgICAgIG1f
bWVkaWFTb3VyY2UtPmNsb3NlKCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0gICAgbV9tZWRpYVN0cmVhbVNyY09iamVjdCA9IG51bGxwdHI7Ci0jZW5kaWYKLQogI2lmIEVO
QUJMRShWSURFT19UUkFDSykKICAgICBmb3JnZXRSZXNvdXJjZVNwZWNpZmljVHJhY2tzKCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAppbmRleCA1ZWYyOWY1NzgxMGFkN2I3MzZlZWU0NjNiNDlkMzBiZGY2ZTA1YWNlLi4wZDZh
YmYxMzVjZDA2MWQ1NjBlMzQwMDkzMTk5ZjY2MzY2NmQ3OWJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC01Myw2ICs1Myw5IEBA
CiAKICNpZiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oIgorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShPUEVOV0VCUlRDKQorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oIgorI2VuZGlmCiAjZGVmaW5l
IFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
CiAjZW5kaWYKIApAQCAtMjA5LDYgKzIxMiwxMSBAQCBzdGF0aWMgdm9pZCBidWlsZE1lZGlhRW5n
aW5lc1ZlY3RvcigpCiAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZWdpc3Rlck1l
ZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRpZgogCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKKyAgICBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdp
bmUpOworI2VuZGlmCisKICNpZiBkZWZpbmVkKFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUp
CiAgICAgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShh
ZGRNZWRpYUVuZ2luZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTEyY2Q2OWI0ZWU1Y2JiMzRiNGNm
YTJiZTg5YTcxZjQwNDZiMDkxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3Iu
Y3BwCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJv
cmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAx
NSBNZXRyb2xvZ2ljYWwgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCisjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGls
aXRpZXMuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFt
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZU93ci5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPGdzdC9hdWRp
by9zdHJlYW12b2x1bWUuaD4KKyNpbmNsdWRlIDxvd3Ivb3dyLmg+CisjaW5jbHVkZSA8b3dyL293
cl9nc3RfYXVkaW9fcmVuZGVyZXIuaD4KKyNpbmNsdWRlIDxvd3Ivb3dyX2dzdF92aWRlb19yZW5k
ZXJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVH
T1JZKHdlYmtpdF9vcGVud2VicnRjX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdF9vcGVud2VicnRjX2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IoTWVk
aWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uo
cGxheWVyKQorICAgICwgbV9wYXVzZWQodHJ1ZSkKKyAgICAsIG1fc3RvcHBlZCh0cnVlKQorewor
ICAgIGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkpIHsKKyAg
ICAgICAgTE9HX01FRElBX01FU1NBR0UoIkNyZWF0aW5nIFN0cmVhbSBtZWRpYSBwbGF5ZXIiKTsK
KworICAgICAgICBjcmVhdGVWaWRlb1NpbmsoKTsKKyAgICAgICAgY3JlYXRlR1NUQXVkaW9TaW5r
QmluKCk7CisgICAgfQorfQorCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJE
ZXN0cm95aW5nIik7CisKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwbGF5KCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiUGxheSIpOwor
CisgICAgaWYgKCFtX3N0cmVhbVByaXZhdGUgfHwgIW1fc3RyZWFtUHJpdmF0ZS0+YWN0aXZlKCkp
IHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAg
ICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpFbXB0eSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgIGludGVybmFsTG9hZCgpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cGF1c2UoKQoreworICAgIExP
R19NRURJQV9NRVNTQUdFKCJQYXVzZSIpOworICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICBzdG9w
KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpoYXNWaWRlbygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlkZW9Tb3VyY2U7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YXVkaW9Tb3VyY2U7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGdpbnQ2NCBwb3NpdGlvbiA9IEdTVF9DTE9DS19U
SU1FX05PTkU7CisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihH
U1RfRk9STUFUX1RJTUUpOworCisgICAgaWYgKG1fdmlkZW9Tb3VyY2UgJiYgZ3N0X2VsZW1lbnRf
cXVlcnkobV92aWRlb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKKyAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNl
X3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOworICAgIGVsc2UgaWYgKG1fYXVkaW9Tb3Vy
Y2UgJiYgZ3N0X2VsZW1lbnRfcXVlcnkobV9hdWRpb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKKyAgICAg
ICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOworCisgICAg
ZmxvYXQgcmVzdWx0ID0gMDsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihwb3Np
dGlvbikgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihwb3NpdGlvbikgLyBHU1RfU0VDT05EOworCisgICAgTE9HX01FRElBX01FU1NB
R0UoIlBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhwb3NpdGlvbikp
OworICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZChjb25zdCBTdHJpbmcg
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cjo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUmIHN0cmVhbVByaXZhdGUpCit7
CisgICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IExPR19NRURJQV9NRVNTQUdFKCJMb2FkaW5nIE1lZGlhU3RyZWFtUHJpdmF0ZSAlcCIsICZzdHJl
YW1Qcml2YXRlKTsKKworICAgIG1fc3RyZWFtUHJpdmF0ZSA9ICZzdHJlYW1Qcml2YXRlOworICAg
IGlmICghbV9zdHJlYW1Qcml2YXRlLT5hY3RpdmUoKSkgeworICAgICAgICBsb2FkaW5nRmFpbGVk
KE1lZGlhUGxheWVyOjpOZXR3b3JrRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKKyAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworICAgIGlm
ICghaW50ZXJuYWxMb2FkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBzdHJl
YW0gY29udGFpbnMgdmlkZW8sIHdhaXQgZm9yIGZpcnN0IHZpZGVvIGZyYW1lIGJlZm9yZSBzZXR0
aW5nCisgICAgLy8gSGF2ZUVub3VnaERhdGEuCisgICAgaWYgKCFoYXNWaWRlbygpKQorICAgICAg
ICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisKKyAgICBtX3Bs
YXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVy
cm9yKQoreworICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBlcnJvcikgeworICAgICAgICBtX25l
dHdvcmtTdGF0ZSA9IGVycm9yOworICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdl
ZCgpOworICAgIH0KKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZykgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBsb2FkaW5nIHByb2dyZXNzIHN1cHBvcnQu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyOjppbnRlcm5hbExvYWQoKQoreworICAgIGlmICghbV9zdG9wcGVkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBtX3N0b3BwZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fc3RyZWFtUHJp
dmF0ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3RpdmUoKSkgeworICAgICAgICBsb2FkaW5nRmFp
bGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrRXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgTE9HX01FRElBX01FU1NBR0UoIkNvbm5lY3RpbmcgdG8gbGl2ZSBzdHJlYW0s
IGRlc2NyaXB0b3I6ICVwIiwgbV9zdHJlYW1Qcml2YXRlLmdldCgpKTsKKworICAgIGZvciAoYXV0
byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0ZS0+dHJhY2tzKCkpIHsKKyAgICAgICAgaWYgKCF0cmFj
ay0+ZW5hYmxlZCgpKSB7CisgICAgICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiVHJhY2sgJXMg
ZGlzYWJsZWQiLCB0cmFjay0+bGFiZWwoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93cio+KCZ0cmFjay0+
c291cmNlKCkpOworICAgICAgICBPd3JNZWRpYVNvdXJjZSogbWVkaWFTb3VyY2UgPSBPV1JfTUVE
SUFfU09VUkNFKHNvdXJjZS0+bWVkaWFTb3VyY2UoKSk7CisKKyAgICAgICAgaWYgKHRyYWNrLT50
eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pIHsKKyAgICAgICAgICAgIGlmICht
X2F1ZGlvU291cmNlICYmIChtX2F1ZGlvU291cmNlLmdldCgpID09IHNvdXJjZSkpCisgICAgICAg
ICAgICAgICAgZ19vYmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwg
RkFMU0UsIG51bGxwdHIpOworCisgICAgICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3Nv
dXJjZShPV1JfTUVESUFfUkVOREVSRVIobV9hdWRpb1JlbmRlcmVyLmdldCgpKSwgbWVkaWFTb3Vy
Y2UpOworICAgICAgICAgICAgbV9hdWRpb1NvdXJjZSA9IHNvdXJjZTsKKyAgICAgICAgICAgIHNv
dXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7CisgICAgICAgIH0gZWxzZSBpZiAodHJhY2stPnR5cGUo
KSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbykgeworICAgICAgICAgICAgaWYgKG1fdmlk
ZW9Tb3VyY2UgJiYgKG1fdmlkZW9Tb3VyY2UuZ2V0KCkgPT0gc291cmNlKSkKKyAgICAgICAgICAg
ICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBGQUxT
RSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgaGFyZGNvZGVkIHZp
ZGVvIGRpbWVuc2lvbnMgd2hlbiB0aGUgcmVuZGVyaW5nIHBlcmZvcm1hbmNlCisgICAgICAgICAg
ICAvLyBib3R0bGVuZWNrIGlzIHJlc29sdmVkLgorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1f
dmlkZW9SZW5kZXJlci5nZXQoKSwgIndpZHRoIiwgNjQwLCAiaGVpZ2h0IiwgNDgwLCBudWxscHRy
KTsKKyAgICAgICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9S
RU5ERVJFUihtX3ZpZGVvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNvdXJjZSk7CisgICAgICAgICAg
ICBtX3ZpZGVvU291cmNlID0gc291cmNlOworICAgICAgICAgICAgc291cmNlLT5hZGRPYnNlcnZl
cih0aGlzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGE7CisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzdG9wKCkKK3sKKyAg
ICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0b3BwZWQgPSB0cnVl
OworICAgIGlmIChtX2F1ZGlvU291cmNlKSB7CisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJT
dG9wOiBkaXNjb25uZWN0aW5nIGF1ZGlvIik7CisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVv
UmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIFRSVUUsIG51bGxwdHIpOworICAgIH0KKyAgICBp
ZiAobV92aWRlb1NvdXJjZSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiU3RvcDogZGlz
Y29ubmVjdGluZyB2aWRlbyIpOworICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVy
LmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxscHRyKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5n
aW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaW5pdGlhbGl6ZUdTdHJlYW1lckFu
ZEdTdHJlYW1lckRlYnVnZ2luZygpKSB7CisgICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBsYXll
ciogcGxheWVyKSB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I+KHBsYXllcik7CisgICAgICAgIH0sIGdldFN1cHBvcnRl
ZFR5cGVzLCBzdXBwb3J0c1R5cGUsIDAsIDAsIDAsIDApOworICAgIH0KK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3Ry
aW5nPiYpCit7CisgICAgLy8gTm90IHN1cHBvcnRlZCBpbiB0aGlzIG1lZGlhIHBsYXllci4KK30K
KworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3I6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJikKK3sK
KyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1l
ckRlYnVnZ2luZygpCit7CisgICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVy
ZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKKyAg
ICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X29wZW53ZWJydGNfZGVidWcsICJ3
ZWJraXRvd3JwbGF5ZXIiLCAwLCAiV2ViS2l0IE9wZW5XZWJSVEMgcGxheWVyIik7CisgICAgfSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpCit7CisgICAgQVNTRVJUKCFtX2F1ZGlvU2lu
ayk7CisgICAgTE9HX01FRElBX01FU1NBR0UoIkNyZWF0aW5nIGF1ZGlvIHNpbmsiKTsKKyAgICAv
LyBGSVhNRTogdm9sdW1lL211dGUgc3VwcG9ydC4KKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
c2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIDApOworICAg
IEdzdENoaWxkUHJveHkqIGNoaWxkUHJveHkgPSBHU1RfQ0hJTERfUFJPWFkoc2luay5nZXQoKSk7
CisgICAgbV9hdWRpb1NpbmsgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2NoaWxkX3Byb3h5
X2dldF9jaGlsZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOworICAgIGdzdF9lbGVtZW50X3Nl
dF9zdGF0ZShzaW5rLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgICBtX2F1ZGlvUmVuZGVy
ZXIgPSBhZG9wdEdSZWYob3dyX2dzdF9hdWRpb19yZW5kZXJlcl9uZXcobV9hdWRpb1NpbmsuZ2V0
KCkpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNvdXJjZVN0
b3BwZWQoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJTb3VyY2Ugc3RvcHBlZCIpOworCisg
ICAgaWYgKCFtX3N0cmVhbVByaXZhdGUgfHwgIW1fc3RyZWFtUHJpdmF0ZS0+YWN0aXZlKCkpCisg
ICAgICAgIHN0b3AoKTsKKworICAgIGZvciAoYXV0byB0cmFjayA6IG1fc3RyZWFtUHJpdmF0ZS0+
dHJhY2tzKCkpIHsKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU93ciogc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyKj4oJnRyYWNrLT5zb3VyY2UoKSk7
CisgICAgICAgIGlmICh0cmFjay0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChzb3VyY2UgPT0gbV9hdWRpb1NvdXJjZSkKKyAgICAgICAgICAgIGdfb2JqZWN0
X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIFRSVUUsIG51bGxwdHIpOwor
ICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gbV92aWRlb1NvdXJjZSkKKyAgICAgICAgICAgIGdf
b2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIFRSVUUsIG51bGxw
dHIpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNv
dXJjZU11dGVkQ2hhbmdlZCgpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlNvdXJjZSBtdXRl
ZCBzdGF0ZSBjaGFuZ2VkIik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyOjpzb3VyY2VTZXR0aW5nc0NoYW5nZWQoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJT
b3VyY2Ugc2V0dGluZ3MgY2hhbmdlZCIpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6cHJldmVudFNvdXJjZUZyb21TdG9wcGluZygpCit7CisgICAgTE9HX01FRElB
X01FU1NBR0UoIlByZXZlbnQgc291cmNlIGZyb20gc3RvcHBpbmciKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3Jl
YXRlVmlkZW9TaW5rKCkKK3sKKyAgICBHc3RFbGVtZW50KiBzaW5rID0gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5rKCk7CisgICAgbV92aWRlb1JlbmRlcmVy
ID0gYWRvcHRHUmVmKG93cl9nc3RfdmlkZW9fcmVuZGVyZXJfbmV3KHNpbmspKTsKKyAgICByZXR1
cm4gc2luazsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjU1YjU5YTk1YzQ5ODE1NWQ1YThkODIxOWVmODk1YzQzODI4YTU2MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3IuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTUgTWV0cm9sb2dpY2FsLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3JfaAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3JfaAorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE9QRU5XRUJS
VEMpCisKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCisjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCit0eXBlZGVmIHN0cnVjdCBfT3dyR3N0Vmlk
ZW9SZW5kZXJlciBPd3JHc3RWaWRlb1JlbmRlcmVyOwordHlwZWRlZiBzdHJ1Y3QgX093ckdzdEF1
ZGlvUmVuZGVyZXIgT3dyR3N0QXVkaW9SZW5kZXJlcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBNZWRpYVN0cmVhbVByaXZhdGU7CitjbGFzcyBSZWFsdGltZU1lZGlhU291cmNlT3dy
OworY2xhc3MgVVJMOworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IgOiBw
dWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSwgcHJpdmF0ZSBSZWFsdGltZU1l
ZGlhU291cmNlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyKE1lZGlhUGxheWVyKik7CisgICAgfk1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cigpOworCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShN
ZWRpYUVuZ2luZVJlZ2lzdHJhcik7CisgICAgdmlydHVhbCBTdHJpbmcgZW5naW5lRGVzY3JpcHRp
b24oKSBjb25zdCB7IHJldHVybiAiT3BlbldlYlJUQyI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBs
b2FkKGNvbnN0IFN0cmluZyYpOworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgdmlydHVh
bCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KikgeyB9
CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChNZWRpYVN0cmVhbVByaXZhdGUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2FuY2VsTG9hZCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHByZXBh
cmVUb1BsYXkoKSB7IH0KKyAgICB2b2lkIHBsYXkoKTsKKyAgICB2b2lkIHBhdXNlKCk7CisKKyAg
ICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisg
ICAgdmlydHVhbCBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZp
cnR1YWwgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vlayhm
bG9hdCkgeyB9CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFJhdGUoZmxvYXQpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGF1c2Vk
KCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZWQ7IH0KKworICAgIHZpcnR1YWwgYm9vbCBoYXNDbG9z
ZWRDYXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSB7IH07CisKKyAgICB2aXJ0dWFsIGZsb2F0IG1h
eFRpbWVTZWVrYWJsZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7IH0KKyAgICBib29sIGRpZExvYWRp
bmdQcm9ncmVzcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlcygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVz
TG9hZGVkKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBib29sIGNhbkxvYWRQ
b3N0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQb3N0
ZXIoY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNMaXZlU3RyZWFtKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZTo6T2Jz
ZXJ2ZXIgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVN0b3BwZWQoKSBv
dmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCkgb3Zl
cnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVNldHRpbmdzQ2hhbmdlZCgpIG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBwcmV2ZW50U291cmNlRnJvbVN0b3BwaW5n
KCkgb3ZlcnJpZGUgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEdzdEVsZW1lbnQq
IGNyZWF0ZVZpZGVvU2luaygpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGdldFN1cHBv
cnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3Vw
cG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJz
Jik7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZEdTdHJlYW1lckRlYnVn
Z2luZygpOworICAgIHZvaWQgY3JlYXRlR1NUQXVkaW9TaW5rQmluKCk7CisgICAgdm9pZCBsb2Fk
aW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpOworICAgIGJvb2wgaW50
ZXJuYWxMb2FkKCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgdmlydHVhbCBHc3RFbGVtZW50KiBh
dWRpb1NpbmsoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvU2luay5nZXQoKTsgfQorCitwcml2YXRl
OgorICAgIGJvb2wgbV9wYXVzZWQ7CisgICAgYm9vbCBtX3N0b3BwZWQ7CisgICAgUmVmUHRyPFJl
YWx0aW1lTWVkaWFTb3VyY2VPd3I+IG1fdmlkZW9Tb3VyY2U7CisgICAgUmVmUHRyPFJlYWx0aW1l
TWVkaWFTb3VyY2VPd3I+IG1fYXVkaW9Tb3VyY2U7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBt
X2F1ZGlvU2luazsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVByaXZh
dGU7CisgICAgR1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7Cisg
ICAgR1JlZlB0cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKKworI2VuZGlmIC8vIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck93cl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270484</attachid>
            <date>2016-02-02 04:28:36 -0800</date>
            <delta_ts>2016-02-02 09:17:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153541-20160202132810.patch</filename>
            <type>text/plain</type>
            <size>22042</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Q1MDcwMDA0ZjE5NzM2
NTEyOTljMDM5NTEwZWNiYTljMjQzMWM1MS4uODNhZTdkZWI3NjVkMjI1NjBlMjYxNTliM2ZjNmVk
ODQxMzE3ZjFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE2LTAyLTAyICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBtZWRpYXN0cmVhbSBtZWRpYXBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZWRp
YXBsYXllciBmb3IgdGhlCisgICAgICAgIG1lZGlhc3RyZWFtLiBUaGUgY29kZSB3YXMgaW1wbGVt
ZW50ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZCBhbmQKKyAgICAgICAgQWxlc3NhbmRybyBEZWNpbmEu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkZWQgdGhlIGZpbGUgdG8gdGhlIGNv
bXBpbGF0aW9uLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRTcmNPYmplY3QpOiBTZXQgdGhlIHNyYyBv
ZiB0aGUKKyAgICAgICAgbWVkaWEgZWxlbWVudCB0byB0aGUgbWVkaWFzdHJlYW0uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IpOiBSZWdpc3RlciB0aGUgbWVkaWFzdHJlYW0KKyAgICAg
ICAgbWVkaWFwbGF5ZXIgYXMgYW4gb3B0aW9uIGluIHRoZSBtZWRpYSBlbmdpbmVzIHZlY3Rvci4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZGluZ0ZhaWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmRpZExvYWRp
bmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmludGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzdXBwb3J0c1R5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmNyZWF0ZUdTVEF1ZGlvU2lua0Jpbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNvdXJjZVN0b3BwZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VNdXRlZENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VT
ZXR0aW5nc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpwcmV2ZW50U291cmNlRnJvbVN0b3BwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjplbmdpbmVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cHJlcGFyZVRvUGxheSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmR1cmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2Vlayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNlZWtpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRS
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpoYXNDbG9zZWRDYXB0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Om1heFRp
bWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6dG90YWxCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OmJ5dGVzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y2FuTG9hZFBvc3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldFBvc3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmlzTGl2ZVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmF1ZGlv
U2luayk6CisKIDIwMTYtMDItMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBIaWdoIExldmVsIE1lbW9yeSBPdmVydmlldyBJ
bnN0cnVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDEyOGExNjAwYTcwOGEzYmY5
NWYxM2I1YzE3MDczNjIwMDQwY2ZhYWQuLjQzMDljNWMxNWExZGRiNTM1NTA0YWFiM2Q2MWRlMGZk
YjU4OWEwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zODgsNiArMzg4LDkgQEAg
aWYgKEVOQUJMRV9NRURJQV9TVFJFQU0pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJ
RVMKICAgICAgICAgJHtPUEVOV0VCUlRDX0xJQlJBUklFU30KICAgICApCisgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCisgICAgKQogZW5kaWYgKCkKIAogaWYg
KEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQppbmRleCAzNGNjZDUzNDc3ODNkZmI4NzUxYjRkMzFlM2E4ZjAwZjBhYzdlMzUwLi45ZTJkZmYy
ZmZkMTc5MDRkMDM3M2M5OWY1NTQ1ZjJjZTYwMzZlZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtNDA3LDYgKzQwNyw5IEBAIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNKQogICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7T1BFTldFQlJUQ19MSUJSQVJJ
RVN9CiAgICAgKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cAorICAgICkKIGVuZGlmICgpCiAKIGlmIChVU0VfVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBkZDE0YmVjY2YxZmMyN2JhYWQ1YTdi
ZDA3MjUzNzc1NmMyZTUzM2JkLi40YmI5YWY0ZGU1ODJiODIyNDZlNTY4YjMzZGRmY2FmYjI1OTUx
ZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTEzMyw2
ICsxMzMsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUg
IkRPTVVSTC5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1SZWdpc3RyeS5oIgogI2VuZGlmCkBAIC05MDgsNiArOTA5LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRTcmNPYmplY3QoTWVkaWFTdHJlYW0qIG1lZGlhU3RyZWFtKQogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4OTYKIAogICAgIG1fbWVk
aWFTdHJlYW1TcmNPYmplY3QgPSBtZWRpYVN0cmVhbTsKKyAgICBzZXRTcmMoRE9NVVJMOjpjcmVh
dGVQdWJsaWNVUkwoQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1l
ZGlhU3RyZWFtKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IGFiODJlNDhkMTg3MzU2OWQxNzQ5OWQ1ODQz
YWU1YmZjNzg4NTdkZGIuLjY2MjBmYjRiMDI2ZTI1NmJkMTBkNjM4ZmQ4OWU4NzM4NGI3NGZjYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTUzLDYgKzUzLDkgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKE9QRU5XRUJSVEMpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
LmgiCisjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIKICNlbmRpZgogCkBAIC0yMDksNiArMjEyLDExIEBAIHN0YXRp
YyB2b2lkIGJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKCkKICAgICAgICAgTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVO
V0VCUlRDKQorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cmVnaXN0ZXJNZWRp
YUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CisjZW5kaWYKKwogI2lmIGRlZmluZWQoUGxhdGZvcm1N
ZWRpYUVuZ2luZUNsYXNzTmFtZSkKICAgICBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpy
ZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
ZTVjNDU4NWRkZGY0MTFkMTFkNTAyMGEyZTQ1MmQyOTkxMDdmZGIzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbCBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldF
QlJUQykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCIKKworI2lu
Y2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisj
aW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCisjaW5jbHVkZSAiVVJMLmgi
CisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgorI2luY2x1ZGUgPG93ci9vd3Iu
aD4KKyNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgorI2luY2x1ZGUgPG93
ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVidWcpOworI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cihNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZShwbGF5ZXIpCisgICAgLCBtX3BhdXNlZCh0cnVlKQorICAgICwg
bV9zdG9wcGVkKHRydWUpCit7CisgICAgaWYgKGluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFt
ZXJEZWJ1Z2dpbmcoKSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiQ3JlYXRpbmcgU3Ry
ZWFtIG1lZGlhIHBsYXllciIpOworCisgICAgICAgIGNyZWF0ZVZpZGVvU2luaygpOworICAgICAg
ICBjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKTsKKyAgICB9Cit9CisKK01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cigpCit7CisgICAg
TE9HX01FRElBX01FU1NBR0UoIkRlc3Ryb3lpbmciKTsKKworICAgIHN0b3AoKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnBsYXkoKQoreworICAgIExPR19NRURJ
QV9NRVNTQUdFKCJQbGF5Iik7CisKKyAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAhbV9zdHJl
YW1Qcml2YXRlLT5hY3RpdmUoKSkgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGF1c2VkID0gZmFsc2U7CisgICAg
aW50ZXJuYWxMb2FkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
OjpwYXVzZSgpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlBhdXNlIik7CisgICAgbV9wYXVz
ZWQgPSB0cnVlOworICAgIHN0b3AoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWRlb1NvdXJjZTsK
K30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9hdWRpb1NvdXJjZTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpjdXJyZW50VGltZSgpIGNvbnN0Cit7CisgICAgZ2ludDY0IHBv
c2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3Rf
cXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7CisKKyAgICBpZiAobV92aWRlb1Nv
dXJjZSAmJiBnc3RfZWxlbWVudF9xdWVyeShtX3ZpZGVvU2luay5nZXQoKSwgcXVlcnkpKQorICAg
ICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlvbik7CisgICAg
ZWxzZSBpZiAobV9hdWRpb1NvdXJjZSAmJiBnc3RfZWxlbWVudF9xdWVyeShtX2F1ZGlvU2luay5n
ZXQoKSwgcXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAs
ICZwb3NpdGlvbik7CisKKyAgICBmbG9hdCByZXN1bHQgPSAwOworICAgIGlmIChzdGF0aWNfY2Fz
dDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgICAg
ICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIEdTVF9TRUNPTkQ7CisK
KyAgICBMT0dfTUVESUFfTUVTU0FHRSgiUG9zaXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBHU1Rf
VElNRV9BUkdTKHBvc2l0aW9uKSk7CisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
Ojpsb2FkKGNvbnN0IFN0cmluZyAmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKE1lZGlhU3RyZWFtUHJpdmF0
ZSYgc3RyZWFtUHJpdmF0ZSkKK3sKKyAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTE9HX01FRElBX01FU1NBR0UoIkxvYWRpbmcgTWVkaWFTdHJl
YW1Qcml2YXRlICVwIiwgJnN0cmVhbVByaXZhdGUpOworCisgICAgbV9zdHJlYW1Qcml2YXRlID0g
JnN0cmVhbVByaXZhdGU7CisgICAgaWYgKCFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7Cisg
ICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmc7CisgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICBt
X3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOworCisgICAgaWYgKCFpbnRlcm5hbExvYWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSWYgdGhlIHN0cmVhbSBjb250YWlucyB2aWRlbywgd2FpdCBmb3IgZmlyc3Qgdmlk
ZW8gZnJhbWUgYmVmb3JlIHNldHRpbmcKKyAgICAvLyBIYXZlRW5vdWdoRGF0YS4KKyAgICBpZiAo
IWhhc1ZpZGVvKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5v
dWdoRGF0YTsKKworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkaW5nRmFpbGVkKE1lZGlhUGxh
eWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCit7CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IGVy
cm9yKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gZXJyb3I7CisgICAgICAgIG1fcGxheWVy
LT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0g
TWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2Vk
KCk7CisgICAgfQorfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6ZGlk
TG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGxvYWRp
bmcgcHJvZ3Jlc3Mgc3VwcG9ydC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmludGVybmFsTG9hZCgpCit7CisgICAgaWYgKCFtX3N0
b3BwZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc3RvcHBlZCA9IGZhbHNlOwor
ICAgIGlmICghbV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7
CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiQ29ubmVj
dGluZyB0byBsaXZlIHN0cmVhbSwgZGVzY3JpcHRvcjogJXAiLCBtX3N0cmVhbVByaXZhdGUuZ2V0
KCkpOworCisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9zdHJlYW1Qcml2YXRlLT50cmFja3MoKSkg
eworICAgICAgICBpZiAoIXRyYWNrLT5lbmFibGVkKCkpIHsKKyAgICAgICAgICAgIExPR19NRURJ
QV9NRVNTQUdFKCJUcmFjayAlcyBkaXNhYmxlZCIsIHRyYWNrLT5sYWJlbCgpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgUmVhbHRp
bWVNZWRpYVNvdXJjZU93ciogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxSZWFsdGltZU1lZGlh
U291cmNlT3dyKj4oJnRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIE93ck1lZGlhU291cmNlKiBt
ZWRpYVNvdXJjZSA9IE9XUl9NRURJQV9TT1VSQ0Uoc291cmNlLT5tZWRpYVNvdXJjZSgpKTsKKwor
ICAgICAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbykg
eworICAgICAgICAgICAgaWYgKG1fYXVkaW9Tb3VyY2UgJiYgKG1fYXVkaW9Tb3VyY2UuZ2V0KCkg
PT0gc291cmNlKSkKKyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9hdWRpb1JlbmRlcmVy
LmdldCgpLCAiZGlzYWJsZWQiLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIG93cl9t
ZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUihtX2F1ZGlvUmVuZGVy
ZXIuZ2V0KCkpLCBtZWRpYVNvdXJjZSk7CisgICAgICAgICAgICBtX2F1ZGlvU291cmNlID0gc291
cmNlOworICAgICAgICAgICAgc291cmNlLT5hZGRPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgfSBl
bHNlIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvKSB7Cisg
ICAgICAgICAgICBpZiAobV92aWRlb1NvdXJjZSAmJiAobV92aWRlb1NvdXJjZS5nZXQoKSA9PSBz
b3VyY2UpKQorICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0
KCksICJkaXNhYmxlZCIsIEZBTFNFLCBudWxscHRyKTsKKworICAgICAgICAgICAgLy8gRklYTUU6
IFJlbW92ZSBoYXJkY29kZWQgdmlkZW8gZGltZW5zaW9ucyB3aGVuIHRoZSByZW5kZXJpbmcgcGVy
Zm9ybWFuY2UKKyAgICAgICAgICAgIC8vIGJvdHRsZW5lY2sgaXMgcmVzb2x2ZWQuCisgICAgICAg
ICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAid2lkdGgiLCA2NDAsICJo
ZWlnaHQiLCA0ODAsIG51bGxwdHIpOworICAgICAgICAgICAgb3dyX21lZGlhX3JlbmRlcmVyX3Nl
dF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fdmlkZW9SZW5kZXJlci5nZXQoKSksIG1lZGlh
U291cmNlKTsKKyAgICAgICAgICAgIG1fdmlkZW9Tb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAg
ICBzb3VyY2UtPmFkZE9ic2VydmVyKHRoaXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OnN0b3AoKQoreworICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc3RvcHBlZCA9IHRydWU7CisgICAgaWYgKG1fYXVkaW9Tb3VyY2UpIHsKKyAgICAgICAg
TE9HX01FRElBX01FU1NBR0UoIlN0b3A6IGRpc2Nvbm5lY3RpbmcgYXVkaW8iKTsKKyAgICAgICAg
Z19vYmplY3Rfc2V0KG1fdmlkZW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgVFJVRSwgbnVs
bHB0cik7CisgICAgfQorICAgIGlmIChtX3ZpZGVvU291cmNlKSB7CisgICAgICAgIExPR19NRURJ
QV9NRVNTQUdFKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7CisgICAgICAgIGdfb2JqZWN0
X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIFRSVUUsIG51bGxwdHIpOwor
ICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnJlZ2lzdGVy
TWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChp
bml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkpIHsKKyAgICAgICAgcmVn
aXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cj4ocGxheWVyKTsKKyAg
ICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwgMCwgMCk7Cisg
ICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9y
dGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mKQorewor
ICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBtZWRpYSBwbGF5ZXIuCit9CisKK01lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzdXBwb3J0
c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpCit7CisgICAgcmV0dXJu
IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFtZXJEZWJ1Z2dpbmco
KQoreworICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxhZzsKKyAg
ICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7CisgICAgICAgIEdTVF9E
RUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9vcGVud2VicnRjX2RlYnVnLCAid2Via2l0b3dycGxh
eWVyIiwgMCwgIldlYktpdCBPcGVuV2ViUlRDIHBsYXllciIpOworICAgIH0pOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjcmVh
dGVHU1RBdWRpb1NpbmtCaW4oKQoreworICAgIEFTU0VSVCghbV9hdWRpb1NpbmspOworICAgIExP
R19NRURJQV9NRVNTQUdFKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7CisgICAgLy8gRklYTUU6IHZv
bHVtZS9tdXRlIHN1cHBvcnQuCisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHNpbmsgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3NpbmsiLCAwKTsKKyAgICBHc3RDaGlsZFBy
b3h5KiBjaGlsZFByb3h5ID0gR1NUX0NISUxEX1BST1hZKHNpbmsuZ2V0KCkpOworICAgIG1fYXVk
aW9TaW5rID0gYWRvcHRHUmVmKEdTVF9FTEVNRU5UKGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRf
YnlfaW5kZXgoY2hpbGRQcm94eSwgMCkpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoc2lu
ay5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgbV9hdWRpb1JlbmRlcmVyID0gYWRvcHRH
UmVmKG93cl9nc3RfYXVkaW9fcmVuZGVyZXJfbmV3KG1fYXVkaW9TaW5rLmdldCgpKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VTdG9wcGVkKCkKK3sK
KyAgICBMT0dfTUVESUFfTUVTU0FHRSgiU291cmNlIHN0b3BwZWQiKTsKKworICAgIGlmICghbV9z
dHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKQorICAgICAgICBzdG9w
KCk7CisKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX3N0cmVhbVByaXZhdGUtPnRyYWNrcygpKSB7
CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93cio+KCZ0cmFjay0+c291cmNlKCkpOworICAgICAgICBp
ZiAodHJhY2stPmVuYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
c291cmNlID09IG1fYXVkaW9Tb3VyY2UpCisgICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRl
b1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxscHRyKTsKKyAgICAgICAgZWxz
ZSBpZiAoc291cmNlID09IG1fdmlkZW9Tb3VyY2UpCisgICAgICAgICAgICBnX29iamVjdF9zZXQo
bV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxscHRyKTsKKyAgICB9
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VNdXRlZENo
YW5nZWQoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJTb3VyY2UgbXV0ZWQgc3RhdGUgY2hh
bmdlZCIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c291cmNl
U2V0dGluZ3NDaGFuZ2VkKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiU291cmNlIHNldHRp
bmdzIGNoYW5nZWQiKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OnByZXZlbnRTb3VyY2VGcm9tU3RvcHBpbmcoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJQ
cmV2ZW50IHNvdXJjZSBmcm9tIHN0b3BwaW5nIik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitH
c3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNyZWF0ZVZpZGVvU2lu
aygpCit7CisgICAgR3N0RWxlbWVudCogc2luayA9IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OmNyZWF0ZVZpZGVvU2luaygpOworICAgIG1fdmlkZW9SZW5kZXJlciA9IGFkb3B0R1Jl
Zihvd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyX25ldyhzaW5rKSk7CisgICAgcmV0dXJuIHNpbms7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyMzdlZTM4
M2UyNDY3MjEyMDQ1NWQyNmY1ZDk5Y2EzMGU5N2UwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyX2gK
KyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyX2gKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRDKQorCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgorI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2UuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX093ckdzdFZpZGVvUmVuZGVyZXIg
T3dyR3N0VmlkZW9SZW5kZXJlcjsKK3R5cGVkZWYgc3RydWN0IF9Pd3JHc3RBdWRpb1JlbmRlcmVy
IE93ckdzdEF1ZGlvUmVuZGVyZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVk
aWFTdHJlYW1Qcml2YXRlOworY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZU93cjsKK2NsYXNzIFVS
TDsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UsIHByaXZhdGUgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
T2JzZXJ2ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cihNZWRpYVBsYXllciopOworICAgIH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3IoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVS
ZWdpc3RyYXIpOworICAgIHZpcnR1YWwgU3RyaW5nIGVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gIk9wZW5XZWJSVEMiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBT
dHJpbmcmKTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
KGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopIHsgfQorI2VuZGlmCisg
ICAgdmlydHVhbCB2b2lkIGxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJik7CisgICAgdmlydHVhbCB2
b2lkIGNhbmNlbExvYWQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QbGF5KCkg
eyB9CisgICAgdm9pZCBwbGF5KCk7CisgICAgdm9pZCBwYXVzZSgpOworCisgICAgYm9vbCBoYXNW
aWRlbygpIGNvbnN0OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKworICAgIHZpcnR1YWwg
ZmxvYXQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIGZsb2F0
IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNlZWsoZmxvYXQpIHsgfQor
ICAgIHZpcnR1YWwgYm9vbCBzZWVraW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJl
c2VydmVzUGl0Y2goYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF1c2VkOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ2xvc2VkQ2FwdGlvbnMo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZWRDYXB0
aW9uc1Zpc2libGUoYm9vbCkgeyB9OworCisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vla2Fi
bGUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOyB9CisgICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3Mo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXMoKSBj
b25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjYW5Mb2FkUG9zdGVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0
cmluZyYpIHsgfQorCisgICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKworICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2U6Ok9ic2VydmVyIGltcGxl
bWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTdG9wcGVkKCkgb3ZlcnJpZGUgZmlu
YWw7CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpIG92ZXJyaWRlIGZpbmFs
OworICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTZXR0aW5nc0NoYW5nZWQoKSBvdmVycmlkZSBmaW5h
bDsKKyAgICB2aXJ0dWFsIGJvb2wgcHJldmVudFNvdXJjZUZyb21TdG9wcGluZygpIG92ZXJyaWRl
IGZpbmFsOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBHc3RFbGVtZW50KiBjcmVhdGVWaWRl
b1NpbmsoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYpOworICAgIHN0YXRpYyBN
ZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1
cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lckFu
ZEdTdHJlYW1lckRlYnVnZ2luZygpOworICAgIHZvaWQgY3JlYXRlR1NUQXVkaW9TaW5rQmluKCk7
CisgICAgdm9pZCBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3Ip
OworICAgIGJvb2wgaW50ZXJuYWxMb2FkKCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgdmlydHVh
bCBHc3RFbGVtZW50KiBhdWRpb1NpbmsoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvU2luay5nZXQo
KTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9wYXVzZWQ7CisgICAgYm9vbCBtX3N0b3BwZWQ7
CisgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+IG1fdmlkZW9Tb3VyY2U7CisgICAg
UmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VPd3I+IG1fYXVkaW9Tb3VyY2U7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX2F1ZGlvU2luazsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRl
PiBtX3N0cmVhbVByaXZhdGU7CisgICAgR1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3Zp
ZGVvUmVuZGVyZXI7CisgICAgR1JlZlB0cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVu
ZGVyZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKKworI2Vu
ZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270492</attachid>
            <date>2016-02-02 09:17:18 -0800</date>
            <delta_ts>2016-02-02 10:32:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153541-20160202181653.patch</filename>
            <type>text/plain</type>
            <size>21961</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Q1MDcwMDA0ZjE5NzM2
NTEyOTljMDM5NTEwZWNiYTljMjQzMWM1MS4uODNhZTdkZWI3NjVkMjI1NjBlMjYxNTliM2ZjNmVk
ODQxMzE3ZjFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE2LTAyLTAyICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBtZWRpYXN0cmVhbSBtZWRpYXBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZWRp
YXBsYXllciBmb3IgdGhlCisgICAgICAgIG1lZGlhc3RyZWFtLiBUaGUgY29kZSB3YXMgaW1wbGVt
ZW50ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZCBhbmQKKyAgICAgICAgQWxlc3NhbmRybyBEZWNpbmEu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkZWQgdGhlIGZpbGUgdG8gdGhlIGNv
bXBpbGF0aW9uLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRTcmNPYmplY3QpOiBTZXQgdGhlIHNyYyBv
ZiB0aGUKKyAgICAgICAgbWVkaWEgZWxlbWVudCB0byB0aGUgbWVkaWFzdHJlYW0uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IpOiBSZWdpc3RlciB0aGUgbWVkaWFzdHJlYW0KKyAgICAg
ICAgbWVkaWFwbGF5ZXIgYXMgYW4gb3B0aW9uIGluIHRoZSBtZWRpYSBlbmdpbmVzIHZlY3Rvci4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZGluZ0ZhaWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmRpZExvYWRp
bmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmludGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzdXBwb3J0c1R5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmNyZWF0ZUdTVEF1ZGlvU2lua0Jpbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNvdXJjZVN0b3BwZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VNdXRlZENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VT
ZXR0aW5nc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpwcmV2ZW50U291cmNlRnJvbVN0b3BwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjplbmdpbmVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cHJlcGFyZVRvUGxheSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmR1cmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2Vlayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNlZWtpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRS
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpoYXNDbG9zZWRDYXB0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Om1heFRp
bWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6dG90YWxCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OmJ5dGVzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y2FuTG9hZFBvc3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldFBvc3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmlzTGl2ZVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmF1ZGlv
U2luayk6CisKIDIwMTYtMDItMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBIaWdoIExldmVsIE1lbW9yeSBPdmVydmlldyBJ
bnN0cnVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDEyOGExNjAwYTcwOGEzYmY5
NWYxM2I1YzE3MDczNjIwMDQwY2ZhYWQuLjQzMDljNWMxNWExZGRiNTM1NTA0YWFiM2Q2MWRlMGZk
YjU4OWEwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zODgsNiArMzg4LDkgQEAg
aWYgKEVOQUJMRV9NRURJQV9TVFJFQU0pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJ
RVMKICAgICAgICAgJHtPUEVOV0VCUlRDX0xJQlJBUklFU30KICAgICApCisgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCisgICAgKQogZW5kaWYgKCkKIAogaWYg
KEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQppbmRleCAzNGNjZDUzNDc3ODNkZmI4NzUxYjRkMzFlM2E4ZjAwZjBhYzdlMzUwLi45ZTJkZmYy
ZmZkMTc5MDRkMDM3M2M5OWY1NTQ1ZjJjZTYwMzZlZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtNDA3LDYgKzQwNyw5IEBAIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNKQogICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7T1BFTldFQlJUQ19MSUJSQVJJ
RVN9CiAgICAgKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cAorICAgICkKIGVuZGlmICgpCiAKIGlmIChVU0VfVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBkZDE0YmVjY2YxZmMyN2JhYWQ1YTdi
ZDA3MjUzNzc1NmMyZTUzM2JkLi40YmI5YWY0ZGU1ODJiODIyNDZlNTY4YjMzZGRmY2FmYjI1OTUx
ZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTEzMyw2
ICsxMzMsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUg
IkRPTVVSTC5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1SZWdpc3RyeS5oIgogI2VuZGlmCkBAIC05MDgsNiArOTA5LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRTcmNPYmplY3QoTWVkaWFTdHJlYW0qIG1lZGlhU3RyZWFtKQogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4OTYKIAogICAgIG1fbWVk
aWFTdHJlYW1TcmNPYmplY3QgPSBtZWRpYVN0cmVhbTsKKyAgICBzZXRTcmMoRE9NVVJMOjpjcmVh
dGVQdWJsaWNVUkwoQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1l
ZGlhU3RyZWFtKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IGFiODJlNDhkMTg3MzU2OWQxNzQ5OWQ1ODQz
YWU1YmZjNzg4NTdkZGIuLjY2MjBmYjRiMDI2ZTI1NmJkMTBkNjM4ZmQ4OWU4NzM4NGI3NGZjYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTUzLDYgKzUzLDkgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKE9QRU5XRUJSVEMpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
LmgiCisjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIKICNlbmRpZgogCkBAIC0yMDksNiArMjEyLDExIEBAIHN0YXRp
YyB2b2lkIGJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKCkKICAgICAgICAgTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVO
V0VCUlRDKQorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cmVnaXN0ZXJNZWRp
YUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CisjZW5kaWYKKwogI2lmIGRlZmluZWQoUGxhdGZvcm1N
ZWRpYUVuZ2luZUNsYXNzTmFtZSkKICAgICBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpy
ZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
Nzg3NmM5ZTNhOWU1NTBmNTkyYTM3ZWI3YjBjZTQ4YzJlM2NlNGYxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbCBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldF
QlJUQykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCIKKworI2lu
Y2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisj
aW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCisjaW5jbHVkZSAiVVJMLmgi
CisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgorI2luY2x1ZGUgPG93ci9vd3Iu
aD4KKyNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgorI2luY2x1ZGUgPG93
ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVidWcpOworI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cihNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZShwbGF5ZXIpCit7CisgICAgaWYgKGluaXRpYWxpemVHU3RyZWFt
ZXJBbmRHU3RyZWFtZXJEZWJ1Z2dpbmcoKSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgi
Q3JlYXRpbmcgU3RyZWFtIG1lZGlhIHBsYXllciIpOworCisgICAgICAgIGNyZWF0ZVZpZGVvU2lu
aygpOworICAgICAgICBjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKTsKKyAgICB9Cit9CisKK01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cigpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIkRlc3Ryb3lpbmciKTsKKworICAgIHN0b3Ao
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnBsYXkoKQorewor
ICAgIExPR19NRURJQV9NRVNTQUdFKCJQbGF5Iik7CisKKyAgICBpZiAoIW1fc3RyZWFtUHJpdmF0
ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3RpdmUoKSkgeworICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQ
bGF5ZXI6OkVtcHR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGF1c2VkID0g
ZmFsc2U7CisgICAgaW50ZXJuYWxMb2FkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZSgpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlBhdXNlIik7
CisgICAgbV9wYXVzZWQgPSB0cnVlOworICAgIHN0b3AoKTsKK30KKworYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92
aWRlb1NvdXJjZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhh
c0F1ZGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hdWRpb1NvdXJjZTsKK30KKworZmxvYXQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjdXJyZW50VGltZSgpIGNvbnN0Cit7Cisg
ICAgZ2ludDY0IHBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBHc3RRdWVyeSog
cXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7CisKKyAgICBp
ZiAobV92aWRlb1NvdXJjZSAmJiBnc3RfZWxlbWVudF9xdWVyeShtX3ZpZGVvU2luay5nZXQoKSwg
cXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3Np
dGlvbik7CisgICAgZWxzZSBpZiAobV9hdWRpb1NvdXJjZSAmJiBnc3RfZWxlbWVudF9xdWVyeSht
X2F1ZGlvU2luay5nZXQoKSwgcXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRp
b24ocXVlcnksIDAsICZwb3NpdGlvbik7CisKKyAgICBmbG9hdCByZXN1bHQgPSAwOworICAgIGlm
IChzdGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKSAhPSBHU1RfQ0xPQ0tfVElNRV9O
T05FKQorICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIEdT
VF9TRUNPTkQ7CisKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiUG9zaXRpb24gJSIgR1NUX1RJTUVf
Rk9STUFULCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSk7CisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1
ZXJ5KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpsb2FkKGNvbnN0IFN0cmluZyAmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKE1lZGlh
U3RyZWFtUHJpdmF0ZSYgc3RyZWFtUHJpdmF0ZSkKK3sKKyAgICBpZiAoIWluaXRpYWxpemVHU3Ry
ZWFtZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX01FRElBX01FU1NBR0UoIkxvYWRp
bmcgTWVkaWFTdHJlYW1Qcml2YXRlICVwIiwgJnN0cmVhbVByaXZhdGUpOworCisgICAgbV9zdHJl
YW1Qcml2YXRlID0gJnN0cmVhbVByaXZhdGU7CisgICAgaWYgKCFtX3N0cmVhbVByaXZhdGUtPmFj
dGl2ZSgpKSB7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZU5vdGhpbmc7CisgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKKyAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIG1fcGxheWVy
LT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKCFpbnRlcm5hbExvYWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIHN0cmVhbSBjb250YWlucyB2aWRlbywgd2FpdCBm
b3IgZmlyc3QgdmlkZW8gZnJhbWUgYmVmb3JlIHNldHRpbmcKKyAgICAvLyBIYXZlRW5vdWdoRGF0
YS4KKyAgICBpZiAoIWhhc1ZpZGVvKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpIYXZlRW5vdWdoRGF0YTsKKworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgp
OworCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkaW5nRmFp
bGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCit7CisgICAgaWYgKG1fbmV0d29y
a1N0YXRlICE9IGVycm9yKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gZXJyb3I7CisgICAg
ICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmIChtX3Jl
YWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGxvYWRpbmcgcHJvZ3Jlc3Mgc3VwcG9ydC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmludGVybmFsTG9hZCgpCit7Cisg
ICAgaWYgKCFtX3N0b3BwZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc3RvcHBl
ZCA9IGZhbHNlOworICAgIGlmICghbV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUt
PmFjdGl2ZSgpKSB7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtF
cnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBMT0dfTUVESUFfTUVT
U0FHRSgiQ29ubmVjdGluZyB0byBsaXZlIHN0cmVhbSwgZGVzY3JpcHRvcjogJXAiLCBtX3N0cmVh
bVByaXZhdGUuZ2V0KCkpOworCisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9zdHJlYW1Qcml2YXRl
LT50cmFja3MoKSkgeworICAgICAgICBpZiAoIXRyYWNrLT5lbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgIExPR19NRURJQV9NRVNTQUdFKCJUcmFjayAlcyBkaXNhYmxlZCIsIHRyYWNrLT5sYWJlbCgp
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU93ciogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxS
ZWFsdGltZU1lZGlhU291cmNlT3dyKj4oJnRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIE93ck1l
ZGlhU291cmNlKiBtZWRpYVNvdXJjZSA9IE9XUl9NRURJQV9TT1VSQ0Uoc291cmNlLT5tZWRpYVNv
dXJjZSgpKTsKKworICAgICAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291
cmNlOjpBdWRpbykgeworICAgICAgICAgICAgaWYgKG1fYXVkaW9Tb3VyY2UgJiYgKG1fYXVkaW9T
b3VyY2UuZ2V0KCkgPT0gc291cmNlKSkKKyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9h
dWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICAg
ICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUiht
X2F1ZGlvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNvdXJjZSk7CisgICAgICAgICAgICBtX2F1ZGlv
U291cmNlID0gc291cmNlOworICAgICAgICAgICAgc291cmNlLT5hZGRPYnNlcnZlcih0aGlzKTsK
KyAgICAgICAgfSBlbHNlIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlZpZGVvKSB7CisgICAgICAgICAgICBpZiAobV92aWRlb1NvdXJjZSAmJiAobV92aWRlb1NvdXJj
ZS5nZXQoKSA9PSBzb3VyY2UpKQorICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVv
UmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIEZBTFNFLCBudWxscHRyKTsKKworICAgICAgICAg
ICAgLy8gRklYTUU6IFJlbW92ZSBoYXJkY29kZWQgdmlkZW8gZGltZW5zaW9ucyB3aGVuIHRoZSBy
ZW5kZXJpbmcgcGVyZm9ybWFuY2UKKyAgICAgICAgICAgIC8vIGJvdHRsZW5lY2sgaXMgcmVzb2x2
ZWQuCisgICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAid2lk
dGgiLCA2NDAsICJoZWlnaHQiLCA0ODAsIG51bGxwdHIpOworICAgICAgICAgICAgb3dyX21lZGlh
X3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fdmlkZW9SZW5kZXJlci5n
ZXQoKSksIG1lZGlhU291cmNlKTsKKyAgICAgICAgICAgIG1fdmlkZW9Tb3VyY2UgPSBzb3VyY2U7
CisgICAgICAgICAgICBzb3VyY2UtPmFkZE9ic2VydmVyKHRoaXMpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICBtX3BsYXllci0+cmVhZHlT
dGF0ZUNoYW5nZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OnN0b3AoKQoreworICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc3RvcHBlZCA9IHRydWU7CisgICAgaWYgKG1fYXVkaW9Tb3VyY2Up
IHsKKyAgICAgICAgTE9HX01FRElBX01FU1NBR0UoIlN0b3A6IGRpc2Nvbm5lY3RpbmcgYXVkaW8i
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmlkZW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVk
IiwgVFJVRSwgbnVsbHB0cik7CisgICAgfQorICAgIGlmIChtX3ZpZGVvU291cmNlKSB7CisgICAg
ICAgIExPR19NRURJQV9NRVNTQUdFKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7CisgICAg
ICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIFRSVUUs
IG51bGxwdHIpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQor
eworICAgIGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkpIHsK
KyAgICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cj4o
cGxheWVyKTsKKyAgICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwg
MCwgMCwgMCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mKQoreworICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBtZWRpYSBwbGF5ZXIuCit9
CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpCit7
CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFt
ZXJEZWJ1Z2dpbmcoKQoreworICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3Rl
cmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7Cisg
ICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9vcGVud2VicnRjX2RlYnVnLCAi
d2Via2l0b3dycGxheWVyIiwgMCwgIldlYktpdCBPcGVuV2ViUlRDIHBsYXllciIpOworICAgIH0p
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyOjpjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKQoreworICAgIEFTU0VSVCghbV9hdWRpb1Np
bmspOworICAgIExPR19NRURJQV9NRVNTQUdFKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7CisgICAg
Ly8gRklYTUU6IHZvbHVtZS9tdXRlIHN1cHBvcnQuCisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3NpbmsiLCAwKTsKKyAg
ICBHc3RDaGlsZFByb3h5KiBjaGlsZFByb3h5ID0gR1NUX0NISUxEX1BST1hZKHNpbmsuZ2V0KCkp
OworICAgIG1fYXVkaW9TaW5rID0gYWRvcHRHUmVmKEdTVF9FTEVNRU5UKGdzdF9jaGlsZF9wcm94
eV9nZXRfY2hpbGRfYnlfaW5kZXgoY2hpbGRQcm94eSwgMCkpKTsKKyAgICBnc3RfZWxlbWVudF9z
ZXRfc3RhdGUoc2luay5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgbV9hdWRpb1JlbmRl
cmVyID0gYWRvcHRHUmVmKG93cl9nc3RfYXVkaW9fcmVuZGVyZXJfbmV3KG1fYXVkaW9TaW5rLmdl
dCgpKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VT
dG9wcGVkKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiU291cmNlIHN0b3BwZWQiKTsKKwor
ICAgIGlmICghbV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKQor
ICAgICAgICBzdG9wKCk7CisKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX3N0cmVhbVByaXZhdGUt
PnRyYWNrcygpKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93cio+KCZ0cmFjay0+c291cmNlKCkp
OworICAgICAgICBpZiAodHJhY2stPmVuYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoc291cmNlID09IG1fYXVkaW9Tb3VyY2UpCisgICAgICAgICAgICBnX29iamVj
dF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxscHRyKTsK
KyAgICAgICAgZWxzZSBpZiAoc291cmNlID09IG1fdmlkZW9Tb3VyY2UpCisgICAgICAgICAgICBn
X29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxs
cHRyKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpz
b3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJTb3VyY2UgbXV0
ZWQgc3RhdGUgY2hhbmdlZCIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6c291cmNlU2V0dGluZ3NDaGFuZ2VkKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgi
U291cmNlIHNldHRpbmdzIGNoYW5nZWQiKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3I6OnByZXZlbnRTb3VyY2VGcm9tU3RvcHBpbmcoKQoreworICAgIExPR19NRURJ
QV9NRVNTQUdFKCJQcmV2ZW50IHNvdXJjZSBmcm9tIHN0b3BwaW5nIik7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNy
ZWF0ZVZpZGVvU2luaygpCit7CisgICAgR3N0RWxlbWVudCogc2luayA9IE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luaygpOworICAgIG1fdmlkZW9SZW5kZXJl
ciA9IGFkb3B0R1JlZihvd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyX25ldyhzaW5rKSk7CisgICAgcmV0
dXJuIHNpbms7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZjNTQ4ZTUxYzk3MDNjNjQ3NDM1ZTVlMzM1YTJhNTEwNjY4ZTZjZDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyX2gKKwor
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VC
UlRDKQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX093ckdzdFZp
ZGVvUmVuZGVyZXIgT3dyR3N0VmlkZW9SZW5kZXJlcjsKK3R5cGVkZWYgc3RydWN0IF9Pd3JHc3RB
dWRpb1JlbmRlcmVyIE93ckdzdEF1ZGlvUmVuZGVyZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlOworY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZU93
cjsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UsIHByaXZhdGUgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
T2JzZXJ2ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cihNZWRpYVBsYXllciopOworICAgIH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3IoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVS
ZWdpc3RyYXIpOworCitwcml2YXRlOgorICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2luaygp
IG92ZXJyaWRlOworICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fYXVkaW9TaW5rLmdldCgpOyB9CisgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcgZW5naW5lRGVzY3JpcHRp
b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiT3BlbldlYlJUQyI7IH0KKworICAgIHZvaWQg
bG9hZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQor
ICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKSBv
dmVycmlkZSB7IH0KKyNlbmRpZgorICAgIHZvaWQgbG9hZChNZWRpYVN0cmVhbVByaXZhdGUmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKSBvdmVycmlkZSB7IH0KKworICAgIHZvaWQg
cHJlcGFyZVRvUGxheSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKKworICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9h
dCBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIGZsb2F0IGN1
cnJlbnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZWVrKGZsb2F0KSBvdmVycmlk
ZSB7IH0KKyAgICBib29sIHNlZWtpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFBy
ZXNlcnZlc1BpdGNoKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgcGF1c2VkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9wYXVzZWQ7IH0KKworICAgIGJvb2wgaGFzQ2xvc2VkQ2FwdGlv
bnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0Q2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfTsKKworICAgIGZsb2F0IG1heFRpbWVT
ZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOyB9CisgICAgYm9vbCBkaWRM
b2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgYm9vbCBj
YW5Mb2FkUG9zdGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lk
IHNldFBvc3Rlcihjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IH0KKworICAgIC8vIFJlYWx0aW1l
TWVkaWFTb3VyY2U6Ok9ic2VydmVyIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgc291cmNlU3Rv
cHBlZCgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCkgb3Zl
cnJpZGUgZmluYWw7CisgICAgdm9pZCBzb3VyY2VTZXR0aW5nc0NoYW5nZWQoKSBvdmVycmlkZSBm
aW5hbDsKKyAgICBib29sIHByZXZlbnRTb3VyY2VGcm9tU3RvcHBpbmcoKSBvdmVycmlkZSBmaW5h
bDsKKworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
KTsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdn
aW5nKCk7CisgICAgdm9pZCBjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKTsKKyAgICB2b2lkIGxvYWRp
bmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcik7CisgICAgYm9vbCBpbnRl
cm5hbExvYWQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKworICAgIGJvb2wgbV9wYXVzZWQgeyB0cnVl
IH07CisgICAgYm9vbCBtX3N0b3BwZWQgeyB0cnVlIH07CisgICAgUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2VPd3I+IG1fdmlkZW9Tb3VyY2U7CisgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3Vy
Y2VPd3I+IG1fYXVkaW9Tb3VyY2U7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvU2lu
azsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVByaXZhdGU7CisgICAg
R1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7CisgICAgR1JlZlB0
cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NU
UkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKKworI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270497</attachid>
            <date>2016-02-02 10:32:06 -0800</date>
            <delta_ts>2016-02-03 12:25:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153541-20160202193141.patch</filename>
            <type>text/plain</type>
            <size>21961</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Q1MDcwMDA0ZjE5NzM2
NTEyOTljMDM5NTEwZWNiYTljMjQzMWM1MS4uODNhZTdkZWI3NjVkMjI1NjBlMjYxNTliM2ZjNmVk
ODQxMzE3ZjFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE2LTAyLTAyICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBtZWRpYXN0cmVhbSBtZWRpYXBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZWRp
YXBsYXllciBmb3IgdGhlCisgICAgICAgIG1lZGlhc3RyZWFtLiBUaGUgY29kZSB3YXMgaW1wbGVt
ZW50ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZCBhbmQKKyAgICAgICAgQWxlc3NhbmRybyBEZWNpbmEu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkZWQgdGhlIGZpbGUgdG8gdGhlIGNv
bXBpbGF0aW9uLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRTcmNPYmplY3QpOiBTZXQgdGhlIHNyYyBv
ZiB0aGUKKyAgICAgICAgbWVkaWEgZWxlbWVudCB0byB0aGUgbWVkaWFzdHJlYW0uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IpOiBSZWdpc3RlciB0aGUgbWVkaWFzdHJlYW0KKyAgICAg
ICAgbWVkaWFwbGF5ZXIgYXMgYW4gb3B0aW9uIGluIHRoZSBtZWRpYSBlbmdpbmVzIHZlY3Rvci4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZGluZ0ZhaWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmRpZExvYWRp
bmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmludGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzdXBwb3J0c1R5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmNyZWF0ZUdTVEF1ZGlvU2lua0Jpbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNvdXJjZVN0b3BwZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VNdXRlZENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VT
ZXR0aW5nc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpwcmV2ZW50U291cmNlRnJvbVN0b3BwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjplbmdpbmVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cHJlcGFyZVRvUGxheSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmR1cmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2Vlayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNlZWtpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRS
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpoYXNDbG9zZWRDYXB0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Om1heFRp
bWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6dG90YWxCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OmJ5dGVzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y2FuTG9hZFBvc3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldFBvc3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmlzTGl2ZVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmF1ZGlv
U2luayk6CisKIDIwMTYtMDItMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBIaWdoIExldmVsIE1lbW9yeSBPdmVydmlldyBJ
bnN0cnVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDEyOGExNjAwYTcwOGEzYmY5
NWYxM2I1YzE3MDczNjIwMDQwY2ZhYWQuLjQzMDljNWMxNWExZGRiNTM1NTA0YWFiM2Q2MWRlMGZk
YjU4OWEwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zODgsNiArMzg4LDkgQEAg
aWYgKEVOQUJMRV9NRURJQV9TVFJFQU0pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJ
RVMKICAgICAgICAgJHtPUEVOV0VCUlRDX0xJQlJBUklFU30KICAgICApCisgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCisgICAgKQogZW5kaWYgKCkKIAogaWYg
KEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQppbmRleCAzNGNjZDUzNDc3ODNkZmI4NzUxYjRkMzFlM2E4ZjAwZjBhYzdlMzUwLi45ZTJkZmYy
ZmZkMTc5MDRkMDM3M2M5OWY1NTQ1ZjJjZTYwMzZlZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtNDA3LDYgKzQwNyw5IEBAIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNKQogICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7T1BFTldFQlJUQ19MSUJSQVJJ
RVN9CiAgICAgKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cAorICAgICkKIGVuZGlmICgpCiAKIGlmIChVU0VfVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBkZDE0YmVjY2YxZmMyN2JhYWQ1YTdi
ZDA3MjUzNzc1NmMyZTUzM2JkLi40YmI5YWY0ZGU1ODJiODIyNDZlNTY4YjMzZGRmY2FmYjI1OTUx
ZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTEzMyw2
ICsxMzMsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUg
IkRPTVVSTC5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1SZWdpc3RyeS5oIgogI2VuZGlmCkBAIC05MDgsNiArOTA5LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRTcmNPYmplY3QoTWVkaWFTdHJlYW0qIG1lZGlhU3RyZWFtKQogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4OTYKIAogICAgIG1fbWVk
aWFTdHJlYW1TcmNPYmplY3QgPSBtZWRpYVN0cmVhbTsKKyAgICBzZXRTcmMoRE9NVVJMOjpjcmVh
dGVQdWJsaWNVUkwoQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1l
ZGlhU3RyZWFtKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IGFiODJlNDhkMTg3MzU2OWQxNzQ5OWQ1ODQz
YWU1YmZjNzg4NTdkZGIuLjY2MjBmYjRiMDI2ZTI1NmJkMTBkNjM4ZmQ4OWU4NzM4NGI3NGZjYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTUzLDYgKzUzLDkgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKE9QRU5XRUJSVEMpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
LmgiCisjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIKICNlbmRpZgogCkBAIC0yMDksNiArMjEyLDExIEBAIHN0YXRp
YyB2b2lkIGJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKCkKICAgICAgICAgTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVO
V0VCUlRDKQorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cmVnaXN0ZXJNZWRp
YUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CisjZW5kaWYKKwogI2lmIGRlZmluZWQoUGxhdGZvcm1N
ZWRpYUVuZ2luZUNsYXNzTmFtZSkKICAgICBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpy
ZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MjE3ODA0NGRmNTc1YmE2ODc3NDlmZDE1YTI2MjBjMWU2YWI3MmFkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbCBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldF
QlJUQykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCIKKworI2lu
Y2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisj
aW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCisjaW5jbHVkZSAiVVJMLmgi
CisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgorI2luY2x1ZGUgPG93ci9vd3Iu
aD4KKyNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgorI2luY2x1ZGUgPG93
ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVidWcpOworI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cihNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZShwbGF5ZXIpCit7CisgICAgaWYgKGluaXRpYWxpemVHU3RyZWFt
ZXJBbmRHU3RyZWFtZXJEZWJ1Z2dpbmcoKSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgi
Q3JlYXRpbmcgU3RyZWFtIG1lZGlhIHBsYXllciIpOworCisgICAgICAgIGNyZWF0ZVZpZGVvU2lu
aygpOworICAgICAgICBjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKTsKKyAgICB9Cit9CisKK01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cigpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIkRlc3Ryb3lpbmciKTsKKworICAgIHN0b3Ao
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnBsYXkoKQorewor
ICAgIExPR19NRURJQV9NRVNTQUdFKCJQbGF5Iik7CisKKyAgICBpZiAoIW1fc3RyZWFtUHJpdmF0
ZSB8fCAhbV9zdHJlYW1Qcml2YXRlLT5hY3RpdmUoKSkgeworICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQ
bGF5ZXI6OkVtcHR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGF1c2VkID0g
ZmFsc2U7CisgICAgaW50ZXJuYWxMb2FkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZSgpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlBhdXNlIik7
CisgICAgbV9wYXVzZWQgPSB0cnVlOworICAgIHN0b3AoKTsKK30KKworYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92
aWRlb1NvdXJjZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhh
c0F1ZGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hdWRpb1NvdXJjZTsKK30KKworZmxvYXQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjdXJyZW50VGltZSgpIGNvbnN0Cit7Cisg
ICAgZ2ludDY0IHBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBHc3RRdWVyeSog
cXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7CisKKyAgICBp
ZiAobV92aWRlb1NvdXJjZSAmJiBnc3RfZWxlbWVudF9xdWVyeShtX3ZpZGVvU2luay5nZXQoKSwg
cXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3Np
dGlvbik7CisgICAgZWxzZSBpZiAobV9hdWRpb1NvdXJjZSAmJiBnc3RfZWxlbWVudF9xdWVyeSht
X2F1ZGlvU2luay5nZXQoKSwgcXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRp
b24ocXVlcnksIDAsICZwb3NpdGlvbik7CisKKyAgICBmbG9hdCByZXN1bHQgPSAwOworICAgIGlm
IChzdGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKSAhPSBHU1RfQ0xPQ0tfVElNRV9O
T05FKQorICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHBvc2l0aW9uKSAvIEdT
VF9TRUNPTkQ7CisKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiUG9zaXRpb24gJSIgR1NUX1RJTUVf
Rk9STUFULCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSk7CisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1
ZXJ5KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpsb2FkKGNvbnN0IFN0cmluZyAmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKE1lZGlh
U3RyZWFtUHJpdmF0ZSYgc3RyZWFtUHJpdmF0ZSkKK3sKKyAgICBpZiAoIWluaXRpYWxpemVHU3Ry
ZWFtZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX01FRElBX01FU1NBR0UoIkxvYWRp
bmcgTWVkaWFTdHJlYW1Qcml2YXRlICVwIiwgJnN0cmVhbVByaXZhdGUpOworCisgICAgbV9zdHJl
YW1Qcml2YXRlID0gJnN0cmVhbVByaXZhdGU7CisgICAgaWYgKCFtX3N0cmVhbVByaXZhdGUtPmFj
dGl2ZSgpKSB7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZU5vdGhpbmc7CisgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKKyAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIG1fcGxheWVy
LT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKCFpbnRlcm5hbExvYWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIHN0cmVhbSBjb250YWlucyB2aWRlbywgd2FpdCBm
b3IgZmlyc3QgdmlkZW8gZnJhbWUgYmVmb3JlIHNldHRpbmcKKyAgICAvLyBIYXZlRW5vdWdoRGF0
YS4KKyAgICBpZiAoIWhhc1ZpZGVvKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpIYXZlRW5vdWdoRGF0YTsKKworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgp
OworCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkaW5nRmFp
bGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCit7CisgICAgaWYgKG1fbmV0d29y
a1N0YXRlICE9IGVycm9yKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gZXJyb3I7CisgICAg
ICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmIChtX3Jl
YWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGxvYWRpbmcgcHJvZ3Jlc3Mgc3VwcG9ydC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmludGVybmFsTG9hZCgpCit7Cisg
ICAgaWYgKCFtX3N0b3BwZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc3RvcHBl
ZCA9IGZhbHNlOworICAgIGlmICghbV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUt
PmFjdGl2ZSgpKSB7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtF
cnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBMT0dfTUVESUFfTUVT
U0FHRSgiQ29ubmVjdGluZyB0byBsaXZlIHN0cmVhbSwgZGVzY3JpcHRvcjogJXAiLCBtX3N0cmVh
bVByaXZhdGUuZ2V0KCkpOworCisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9zdHJlYW1Qcml2YXRl
LT50cmFja3MoKSkgeworICAgICAgICBpZiAoIXRyYWNrLT5lbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgIExPR19NRURJQV9NRVNTQUdFKCJUcmFjayAlcyBkaXNhYmxlZCIsIHRyYWNrLT5sYWJlbCgp
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU93ciogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxS
ZWFsdGltZU1lZGlhU291cmNlT3dyKj4oJnRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIE93ck1l
ZGlhU291cmNlKiBtZWRpYVNvdXJjZSA9IE9XUl9NRURJQV9TT1VSQ0Uoc291cmNlLT5tZWRpYVNv
dXJjZSgpKTsKKworICAgICAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291
cmNlOjpBdWRpbykgeworICAgICAgICAgICAgaWYgKG1fYXVkaW9Tb3VyY2UgJiYgKG1fYXVkaW9T
b3VyY2UuZ2V0KCkgPT0gc291cmNlKSkKKyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9h
dWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICAg
ICAgICAgIG93cl9tZWRpYV9yZW5kZXJlcl9zZXRfc291cmNlKE9XUl9NRURJQV9SRU5ERVJFUiht
X2F1ZGlvUmVuZGVyZXIuZ2V0KCkpLCBtZWRpYVNvdXJjZSk7CisgICAgICAgICAgICBtX2F1ZGlv
U291cmNlID0gc291cmNlOworICAgICAgICAgICAgc291cmNlLT5hZGRPYnNlcnZlcih0aGlzKTsK
KyAgICAgICAgfSBlbHNlIGlmICh0cmFjay0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlZpZGVvKSB7CisgICAgICAgICAgICBpZiAobV92aWRlb1NvdXJjZSAmJiAobV92aWRlb1NvdXJj
ZS5nZXQoKSA9PSBzb3VyY2UpKQorICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3ZpZGVv
UmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIEZBTFNFLCBudWxscHRyKTsKKworICAgICAgICAg
ICAgLy8gRklYTUU6IFJlbW92ZSBoYXJkY29kZWQgdmlkZW8gZGltZW5zaW9ucyB3aGVuIHRoZSBy
ZW5kZXJpbmcgcGVyZm9ybWFuY2UKKyAgICAgICAgICAgIC8vIGJvdHRsZW5lY2sgaXMgcmVzb2x2
ZWQuCisgICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAid2lk
dGgiLCA2NDAsICJoZWlnaHQiLCA0ODAsIG51bGxwdHIpOworICAgICAgICAgICAgb3dyX21lZGlh
X3JlbmRlcmVyX3NldF9zb3VyY2UoT1dSX01FRElBX1JFTkRFUkVSKG1fdmlkZW9SZW5kZXJlci5n
ZXQoKSksIG1lZGlhU291cmNlKTsKKyAgICAgICAgICAgIG1fdmlkZW9Tb3VyY2UgPSBzb3VyY2U7
CisgICAgICAgICAgICBzb3VyY2UtPmFkZE9ic2VydmVyKHRoaXMpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICBtX3BsYXllci0+cmVhZHlT
dGF0ZUNoYW5nZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OnN0b3AoKQoreworICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc3RvcHBlZCA9IHRydWU7CisgICAgaWYgKG1fYXVkaW9Tb3VyY2Up
IHsKKyAgICAgICAgTE9HX01FRElBX01FU1NBR0UoIlN0b3A6IGRpc2Nvbm5lY3RpbmcgYXVkaW8i
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVk
IiwgVFJVRSwgbnVsbHB0cik7CisgICAgfQorICAgIGlmIChtX3ZpZGVvU291cmNlKSB7CisgICAg
ICAgIExPR19NRURJQV9NRVNTQUdFKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7CisgICAg
ICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIFRSVUUs
IG51bGxwdHIpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQor
eworICAgIGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkpIHsK
KyAgICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cj4o
cGxheWVyKTsKKyAgICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwg
MCwgMCwgMCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mKQoreworICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBtZWRpYSBwbGF5ZXIuCit9
CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpCit7
CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFt
ZXJEZWJ1Z2dpbmcoKQoreworICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3Rl
cmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7Cisg
ICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9vcGVud2VicnRjX2RlYnVnLCAi
d2Via2l0b3dycGxheWVyIiwgMCwgIldlYktpdCBPcGVuV2ViUlRDIHBsYXllciIpOworICAgIH0p
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyOjpjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKQoreworICAgIEFTU0VSVCghbV9hdWRpb1Np
bmspOworICAgIExPR19NRURJQV9NRVNTQUdFKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7CisgICAg
Ly8gRklYTUU6IHZvbHVtZS9tdXRlIHN1cHBvcnQuCisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3NpbmsiLCAwKTsKKyAg
ICBHc3RDaGlsZFByb3h5KiBjaGlsZFByb3h5ID0gR1NUX0NISUxEX1BST1hZKHNpbmsuZ2V0KCkp
OworICAgIG1fYXVkaW9TaW5rID0gYWRvcHRHUmVmKEdTVF9FTEVNRU5UKGdzdF9jaGlsZF9wcm94
eV9nZXRfY2hpbGRfYnlfaW5kZXgoY2hpbGRQcm94eSwgMCkpKTsKKyAgICBnc3RfZWxlbWVudF9z
ZXRfc3RhdGUoc2luay5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgbV9hdWRpb1JlbmRl
cmVyID0gYWRvcHRHUmVmKG93cl9nc3RfYXVkaW9fcmVuZGVyZXJfbmV3KG1fYXVkaW9TaW5rLmdl
dCgpKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VT
dG9wcGVkKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiU291cmNlIHN0b3BwZWQiKTsKKwor
ICAgIGlmICghbV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKQor
ICAgICAgICBzdG9wKCk7CisKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX3N0cmVhbVByaXZhdGUt
PnRyYWNrcygpKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93cio+KCZ0cmFjay0+c291cmNlKCkp
OworICAgICAgICBpZiAodHJhY2stPmVuYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoc291cmNlID09IG1fYXVkaW9Tb3VyY2UpCisgICAgICAgICAgICBnX29iamVj
dF9zZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxscHRyKTsK
KyAgICAgICAgZWxzZSBpZiAoc291cmNlID09IG1fdmlkZW9Tb3VyY2UpCisgICAgICAgICAgICBn
X29iamVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxs
cHRyKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpz
b3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJTb3VyY2UgbXV0
ZWQgc3RhdGUgY2hhbmdlZCIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cjo6c291cmNlU2V0dGluZ3NDaGFuZ2VkKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgi
U291cmNlIHNldHRpbmdzIGNoYW5nZWQiKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJPd3I6OnByZXZlbnRTb3VyY2VGcm9tU3RvcHBpbmcoKQoreworICAgIExPR19NRURJ
QV9NRVNTQUdFKCJQcmV2ZW50IHNvdXJjZSBmcm9tIHN0b3BwaW5nIik7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNy
ZWF0ZVZpZGVvU2luaygpCit7CisgICAgR3N0RWxlbWVudCogc2luayA9IE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luaygpOworICAgIG1fdmlkZW9SZW5kZXJl
ciA9IGFkb3B0R1JlZihvd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyX25ldyhzaW5rKSk7CisgICAgcmV0
dXJuIHNpbms7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZjNTQ4ZTUxYzk3MDNjNjQ3NDM1ZTVlMzM1YTJhNTEwNjY4ZTZjZDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyX2gKKwor
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VC
UlRDKQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX093ckdzdFZp
ZGVvUmVuZGVyZXIgT3dyR3N0VmlkZW9SZW5kZXJlcjsKK3R5cGVkZWYgc3RydWN0IF9Pd3JHc3RB
dWRpb1JlbmRlcmVyIE93ckdzdEF1ZGlvUmVuZGVyZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlOworY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZU93
cjsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UsIHByaXZhdGUgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
T2JzZXJ2ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cihNZWRpYVBsYXllciopOworICAgIH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3IoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVS
ZWdpc3RyYXIpOworCitwcml2YXRlOgorICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2luaygp
IG92ZXJyaWRlOworICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fYXVkaW9TaW5rLmdldCgpOyB9CisgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcgZW5naW5lRGVzY3JpcHRp
b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiT3BlbldlYlJUQyI7IH0KKworICAgIHZvaWQg
bG9hZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQor
ICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKSBv
dmVycmlkZSB7IH0KKyNlbmRpZgorICAgIHZvaWQgbG9hZChNZWRpYVN0cmVhbVByaXZhdGUmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKSBvdmVycmlkZSB7IH0KKworICAgIHZvaWQg
cHJlcGFyZVRvUGxheSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKKworICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9h
dCBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIGZsb2F0IGN1
cnJlbnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZWVrKGZsb2F0KSBvdmVycmlk
ZSB7IH0KKyAgICBib29sIHNlZWtpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFBy
ZXNlcnZlc1BpdGNoKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgcGF1c2VkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9wYXVzZWQ7IH0KKworICAgIGJvb2wgaGFzQ2xvc2VkQ2FwdGlv
bnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0Q2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfTsKKworICAgIGZsb2F0IG1heFRpbWVT
ZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOyB9CisgICAgYm9vbCBkaWRM
b2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgYm9vbCBj
YW5Mb2FkUG9zdGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lk
IHNldFBvc3Rlcihjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IH0KKworICAgIC8vIFJlYWx0aW1l
TWVkaWFTb3VyY2U6Ok9ic2VydmVyIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgc291cmNlU3Rv
cHBlZCgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCkgb3Zl
cnJpZGUgZmluYWw7CisgICAgdm9pZCBzb3VyY2VTZXR0aW5nc0NoYW5nZWQoKSBvdmVycmlkZSBm
aW5hbDsKKyAgICBib29sIHByZXZlbnRTb3VyY2VGcm9tU3RvcHBpbmcoKSBvdmVycmlkZSBmaW5h
bDsKKworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
KTsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdn
aW5nKCk7CisgICAgdm9pZCBjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKTsKKyAgICB2b2lkIGxvYWRp
bmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcik7CisgICAgYm9vbCBpbnRl
cm5hbExvYWQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKworICAgIGJvb2wgbV9wYXVzZWQgeyB0cnVl
IH07CisgICAgYm9vbCBtX3N0b3BwZWQgeyB0cnVlIH07CisgICAgUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2VPd3I+IG1fdmlkZW9Tb3VyY2U7CisgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3Vy
Y2VPd3I+IG1fYXVkaW9Tb3VyY2U7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvU2lu
azsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVByaXZhdGU7CisgICAg
R1JlZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7CisgICAgR1JlZlB0
cjxPd3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NU
UkVBTUVSKSAmJiBVU0UoT1BFTldFQlJUQykKKworI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck93cl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270570</attachid>
            <date>2016-02-03 04:38:07 -0800</date>
            <delta_ts>2016-02-03 18:40:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153541-20160203133742.patch</filename>
            <type>text/plain</type>
            <size>22129</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Q1MDcwMDA0ZjE5NzM2
NTEyOTljMDM5NTEwZWNiYTljMjQzMWM1MS4uODNhZTdkZWI3NjVkMjI1NjBlMjYxNTliM2ZjNmVk
ODQxMzE3ZjFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE2LTAyLTAyICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBtZWRpYXN0cmVhbSBtZWRpYXBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZWRp
YXBsYXllciBmb3IgdGhlCisgICAgICAgIG1lZGlhc3RyZWFtLiBUaGUgY29kZSB3YXMgaW1wbGVt
ZW50ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZCBhbmQKKyAgICAgICAgQWxlc3NhbmRybyBEZWNpbmEu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkZWQgdGhlIGZpbGUgdG8gdGhlIGNv
bXBpbGF0aW9uLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRTcmNPYmplY3QpOiBTZXQgdGhlIHNyYyBv
ZiB0aGUKKyAgICAgICAgbWVkaWEgZWxlbWVudCB0byB0aGUgbWVkaWFzdHJlYW0uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IpOiBSZWdpc3RlciB0aGUgbWVkaWFzdHJlYW0KKyAgICAg
ICAgbWVkaWFwbGF5ZXIgYXMgYW4gb3B0aW9uIGluIHRoZSBtZWRpYSBlbmdpbmVzIHZlY3Rvci4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJPd3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyT3dyOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpsb2FkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6bG9hZGluZ0ZhaWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmRpZExvYWRp
bmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmludGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJPd3I6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzdXBwb3J0c1R5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmNyZWF0ZUdTVEF1ZGlvU2lua0Jpbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNvdXJjZVN0b3BwZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VNdXRlZENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3VyY2VT
ZXR0aW5nc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjpwcmV2ZW50U291cmNlRnJvbVN0b3BwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y3JlYXRlVmlkZW9TaW5rKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyT3dyOjplbmdpbmVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cHJlcGFyZVRvUGxheSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmR1cmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6c2Vlayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNlZWtpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzZXRS
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyT3dyOjpoYXNDbG9zZWRDYXB0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Om1heFRp
bWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJPd3I6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cjo6dG90YWxCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OmJ5dGVzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6Y2FuTG9hZFBvc3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnNldFBvc3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmlzTGl2ZVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmF1ZGlv
U2luayk6CisKIDIwMTYtMDItMDEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBIaWdoIExldmVsIE1lbW9yeSBPdmVydmlldyBJ
bnN0cnVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDEyOGExNjAwYTcwOGEzYmY5
NWYxM2I1YzE3MDczNjIwMDQwY2ZhYWQuLjQzMDljNWMxNWExZGRiNTM1NTA0YWFiM2Q2MWRlMGZk
YjU4OWEwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zODgsNiArMzg4LDkgQEAg
aWYgKEVOQUJMRV9NRURJQV9TVFJFQU0pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJ
RVMKICAgICAgICAgJHtPUEVOV0VCUlRDX0xJQlJBUklFU30KICAgICApCisgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuY3BwCisgICAgKQogZW5kaWYgKCkKIAogaWYg
KEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQppbmRleCAzNGNjZDUzNDc3ODNkZmI4NzUxYjRkMzFlM2E4ZjAwZjBhYzdlMzUwLi45ZTJkZmYy
ZmZkMTc5MDRkMDM3M2M5OWY1NTQ1ZjJjZTYwMzZlZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtNDA3LDYgKzQwNyw5IEBAIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNKQogICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7T1BFTldFQlJUQ19MSUJSQVJJ
RVN9CiAgICAgKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNw
cAorICAgICkKIGVuZGlmICgpCiAKIGlmIChVU0VfVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBkZDE0YmVjY2YxZmMyN2JhYWQ1YTdi
ZDA3MjUzNzc1NmMyZTUzM2JkLi40YmI5YWY0ZGU1ODJiODIyNDZlNTY4YjMzZGRmY2FmYjI1OTUx
ZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTEzMyw2
ICsxMzMsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUg
IkRPTVVSTC5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1SZWdpc3RyeS5oIgogI2VuZGlmCkBAIC05MDgsNiArOTA5LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRTcmNPYmplY3QoTWVkaWFTdHJlYW0qIG1lZGlhU3RyZWFtKQogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4OTYKIAogICAgIG1fbWVk
aWFTdHJlYW1TcmNPYmplY3QgPSBtZWRpYVN0cmVhbTsKKyAgICBzZXRTcmMoRE9NVVJMOjpjcmVh
dGVQdWJsaWNVUkwoQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1l
ZGlhU3RyZWFtKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IGFiODJlNDhkMTg3MzU2OWQxNzQ5OWQ1ODQz
YWU1YmZjNzg4NTdkZGIuLjY2MjBmYjRiMDI2ZTI1NmJkMTBkNjM4ZmQ4OWU4NzM4NGI3NGZjYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTUzLDYgKzUzLDkgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKE9QRU5XRUJSVEMpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dy
LmgiCisjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIKICNlbmRpZgogCkBAIC0yMDksNiArMjEyLDExIEBAIHN0YXRp
YyB2b2lkIGJ1aWxkTWVkaWFFbmdpbmVzVmVjdG9yKCkKICAgICAgICAgTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVO
V0VCUlRDKQorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6cmVnaXN0ZXJNZWRp
YUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CisjZW5kaWYKKwogI2lmIGRlZmluZWQoUGxhdGZvcm1N
ZWRpYUVuZ2luZUNsYXNzTmFtZSkKICAgICBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpy
ZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
OTI1NGRlODQ3NTA5YWYyNzg2NDliZDZjZGU1NTgwMTQ4NGQ0YWNhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93ci5jcHAKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbCBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoT1BFTldF
QlJUQykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3IuaCIKKworI2lu
Y2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisj
aW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlT3dyLmgiCisjaW5jbHVkZSAiVVJMLmgi
CisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgorI2luY2x1ZGUgPG93ci9vd3Iu
aD4KKyNpbmNsdWRlIDxvd3Ivb3dyX2dzdF9hdWRpb19yZW5kZXJlci5oPgorI2luY2x1ZGUgPG93
ci9vd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X29wZW53ZWJydGNfZGVidWcpOworI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X29wZW53ZWJydGNfZGVidWcKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cihNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZShwbGF5ZXIpCit7CisgICAgaWYgKGluaXRpYWxpemVHU3RyZWFt
ZXJBbmRHU3RyZWFtZXJEZWJ1Z2dpbmcoKSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgi
Q3JlYXRpbmcgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyIik7CisKKyAgICAgICAgY3Jl
YXRlVmlkZW9TaW5rKCk7CisgICAgICAgIGNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpOworICAgIH0K
K30KKworTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjp+TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyT3dyKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiRGVzdHJveWluZyIpOwor
CisgICAgc3RvcCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6
cGxheSgpCit7CisgICAgTE9HX01FRElBX01FU1NBR0UoIlBsYXkiKTsKKworICAgIGlmICghbV9z
dHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVhbVByaXZhdGUtPmFjdGl2ZSgpKSB7CisgICAgICAgIG1f
cmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbG9hZGluZ0Zh
aWxlZChNZWRpYVBsYXllcjo6RW1wdHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9wYXVzZWQgPSBmYWxzZTsKKyAgICBpbnRlcm5hbExvYWQoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OnBhdXNlKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FH
RSgiUGF1c2UiKTsKKyAgICBtX3BhdXNlZCA9IHRydWU7CisgICAgc3RvcCgpOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cjo6aGFzVmlkZW8oKSBjb25zdAoreworICAg
IHJldHVybiBtX3ZpZGVvU291cmNlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck93cjo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIHJldHVybiBtX2F1ZGlvU291cmNlOwor
fQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmN1cnJlbnRUaW1lKCkg
Y29uc3QKK3sKKyAgICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAg
IEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1F
KTsKKworICAgIGlmIChtX3ZpZGVvU291cmNlICYmIGdzdF9lbGVtZW50X3F1ZXJ5KG1fdmlkZW9T
aW5rLmdldCgpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVy
eSwgMCwgJnBvc2l0aW9uKTsKKyAgICBlbHNlIGlmIChtX2F1ZGlvU291cmNlICYmIGdzdF9lbGVt
ZW50X3F1ZXJ5KG1fYXVkaW9TaW5rLmdldCgpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVyeV9w
YXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKKworICAgIGZsb2F0IHJlc3VsdCA9
IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4ocG9zaXRpb24pICE9IEdTVF9D
TE9DS19USU1FX05PTkUpCisgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4ocG9z
aXRpb24pIC8gR1NUX1NFQ09ORDsKKworICAgIExPR19NRURJQV9NRVNTQUdFKCJQb3NpdGlvbiAl
IiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MocG9zaXRpb24pKTsKKyAgICBnc3RfcXVl
cnlfdW5yZWYocXVlcnkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmxvYWQoY29uc3QgU3RyaW5nICYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6
OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW1Qcml2YXRlKQoreworICAgIGlmICghaW5p
dGlhbGl6ZUdTdHJlYW1lcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfTUVESUFfTUVT
U0FHRSgiTG9hZGluZyBNZWRpYVN0cmVhbVByaXZhdGUgJXAiLCAmc3RyZWFtUHJpdmF0ZSk7CisK
KyAgICBtX3N0cmVhbVByaXZhdGUgPSAmc3RyZWFtUHJpdmF0ZTsKKyAgICBpZiAoIW1fc3RyZWFt
UHJpdmF0ZS0+YWN0aXZlKCkpIHsKKyAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6
TmV0d29ya0Vycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpMb2FkaW5nOworICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Cisg
ICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAoIWludGVybmFsTG9h
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgc3RyZWFtIGNvbnRhaW5zIHZp
ZGVvLCB3YWl0IGZvciBmaXJzdCB2aWRlbyBmcmFtZSBiZWZvcmUgc2V0dGluZworICAgIC8vIEhh
dmVFbm91Z2hEYXRhLgorICAgIGlmICghaGFzVmlkZW8oKSkKKyAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworCisgICAgbV9wbGF5ZXItPnJlYWR5U3Rh
dGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjps
b2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCit7CisgICAgaWYg
KG1fbmV0d29ya1N0YXRlICE9IGVycm9yKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gZXJy
b3I7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAg
IGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9wbGF5
ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck93cjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGxvYWRpbmcgcHJvZ3Jlc3Mgc3VwcG9ydC4KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmludGVybmFsTG9h
ZCgpCit7CisgICAgaWYgKCFtX3N0b3BwZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1fc3RvcHBlZCA9IGZhbHNlOworICAgIGlmICghbV9zdHJlYW1Qcml2YXRlIHx8ICFtX3N0cmVh
bVByaXZhdGUtPmFjdGl2ZSgpKSB7CisgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtFcnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBMT0df
TUVESUFfTUVTU0FHRSgiQ29ubmVjdGluZyB0byBsaXZlIHN0cmVhbSwgZGVzY3JpcHRvcjogJXAi
LCBtX3N0cmVhbVByaXZhdGUuZ2V0KCkpOworCisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9zdHJl
YW1Qcml2YXRlLT50cmFja3MoKSkgeworICAgICAgICBpZiAoIXRyYWNrLT5lbmFibGVkKCkpIHsK
KyAgICAgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJUcmFjayAlcyBkaXNhYmxlZCIsIHRyYWNr
LT5sYWJlbCgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZU93ciogc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxSZWFsdGltZU1lZGlhU291cmNlT3dyKj4oJnRyYWNrLT5zb3VyY2UoKSk7CisgICAg
ICAgIE93ck1lZGlhU291cmNlKiBtZWRpYVNvdXJjZSA9IE9XUl9NRURJQV9TT1VSQ0Uoc291cmNl
LT5tZWRpYVNvdXJjZSgpKTsKKworICAgICAgICBzd2l0Y2ggKHRyYWNrLT50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbzoKKyAgICAgICAgICAgIGlmICht
X2F1ZGlvU291cmNlICYmIChtX2F1ZGlvU291cmNlLmdldCgpID09IHNvdXJjZSkpCisgICAgICAg
ICAgICAgICAgZ19vYmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwg
RkFMU0UsIG51bGxwdHIpOworCisgICAgICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3Nv
dXJjZShPV1JfTUVESUFfUkVOREVSRVIobV9hdWRpb1JlbmRlcmVyLmdldCgpKSwgbWVkaWFTb3Vy
Y2UpOworICAgICAgICAgICAgbV9hdWRpb1NvdXJjZSA9IHNvdXJjZTsKKyAgICAgICAgICAgIHNv
dXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbzoKKyAgICAgICAgICAgIGlmIChtX3ZpZGVvU291
cmNlICYmIChtX3ZpZGVvU291cmNlLmdldCgpID09IHNvdXJjZSkpCisgICAgICAgICAgICAgICAg
Z19vYmplY3Rfc2V0KG1fdmlkZW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVkIiwgRkFMU0UsIG51
bGxwdHIpOworCisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIGhhcmRjb2RlZCB2aWRlbyBk
aW1lbnNpb25zIHdoZW4gdGhlIHJlbmRlcmluZyBwZXJmb3JtYW5jZToKKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzgyNi4KKyAgICAgICAgICAgIGdfb2JqZWN0X3NldCht
X3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJ3aWR0aCIsIDY0MCwgImhlaWdodCIsIDQ4MCwgbnVsbHB0
cik7CisgICAgICAgICAgICBvd3JfbWVkaWFfcmVuZGVyZXJfc2V0X3NvdXJjZShPV1JfTUVESUFf
UkVOREVSRVIobV92aWRlb1JlbmRlcmVyLmdldCgpKSwgbWVkaWFTb3VyY2UpOworICAgICAgICAg
ICAgbV92aWRlb1NvdXJjZSA9IHNvdXJjZTsKKyAgICAgICAgICAgIHNvdXJjZS0+YWRkT2JzZXJ2
ZXIodGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWFsdGltZU1lZGlh
U291cmNlOjpOb25lOgorICAgICAgICAgICAgV0FSTl9NRURJQV9NRVNTQUdFKCJMb2FkaW5nIGEg
dHJhY2sgd2l0aCBOb25lIHR5cGUiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICBtX3BsYXllci0+cmVhZHlT
dGF0ZUNoYW5nZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJPd3I6OnN0b3AoKQoreworICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc3RvcHBlZCA9IHRydWU7CisgICAgaWYgKG1fYXVkaW9Tb3VyY2Up
IHsKKyAgICAgICAgTE9HX01FRElBX01FU1NBR0UoIlN0b3A6IGRpc2Nvbm5lY3RpbmcgYXVkaW8i
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fYXVkaW9SZW5kZXJlci5nZXQoKSwgImRpc2FibGVk
IiwgVFJVRSwgbnVsbHB0cik7CisgICAgfQorICAgIGlmIChtX3ZpZGVvU291cmNlKSB7CisgICAg
ICAgIExPR19NRURJQV9NRVNTQUdFKCJTdG9wOiBkaXNjb25uZWN0aW5nIHZpZGVvIik7CisgICAg
ICAgIGdfb2JqZWN0X3NldChtX3ZpZGVvUmVuZGVyZXIuZ2V0KCksICJkaXNhYmxlZCIsIFRSVUUs
IG51bGxwdHIpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJP
d3I6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQor
eworICAgIGlmIChpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5nKCkpIHsK
KyAgICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93cj4o
cGxheWVyKTsKKyAgICAgICAgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwg
MCwgMCwgMCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mKQoreworICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBtZWRpYSBwbGF5ZXIuCit9
CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
T3dyOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpCit7
CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRHU3RyZWFt
ZXJEZWJ1Z2dpbmcoKQoreworICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3Rl
cmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7Cisg
ICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9vcGVud2VicnRjX2RlYnVnLCAi
d2Via2l0b3dycGxheWVyIiwgMCwgIldlYktpdCBPcGVuV2ViUlRDIHBsYXllciIpOworICAgIH0p
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyOjpjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKQoreworICAgIEFTU0VSVCghbV9hdWRpb1Np
bmspOworICAgIExPR19NRURJQV9NRVNTQUdFKCJDcmVhdGluZyBhdWRpbyBzaW5rIik7CisgICAg
Ly8gRklYTUU6IHZvbHVtZS9tdXRlIHN1cHBvcnQ6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1Mzgy
OAorCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhdXRvYXVkaW9zaW5rIiwgMCk7CisgICAgR3N0Q2hpbGRQcm94eSogY2hpbGRQcm94eSA9
IEdTVF9DSElMRF9QUk9YWShzaW5rLmdldCgpKTsKKyAgICBtX2F1ZGlvU2luayA9IGFkb3B0R1Jl
ZihHU1RfRUxFTUVOVChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4KGNoaWxkUHJv
eHksIDApKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNpbmsuZ2V0KCksIEdTVF9TVEFU
RV9OVUxMKTsKKworICAgIG1fYXVkaW9SZW5kZXJlciA9IGFkb3B0R1JlZihvd3JfZ3N0X2F1ZGlv
X3JlbmRlcmVyX25ldyhtX2F1ZGlvU2luay5nZXQoKSkpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck93cjo6c291cmNlU3RvcHBlZCgpCit7CisgICAgTE9HX01FRElBX01F
U1NBR0UoIlNvdXJjZSBzdG9wcGVkIik7CisKKyAgICBpZiAoIW1fc3RyZWFtUHJpdmF0ZSB8fCAh
bV9zdHJlYW1Qcml2YXRlLT5hY3RpdmUoKSkgeworICAgICAgICBzdG9wKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX3N0cmVhbVByaXZhdGUtPnRy
YWNrcygpKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VPd3IqIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UmVhbHRpbWVNZWRpYVNvdXJjZU93cio+KCZ0cmFjay0+c291cmNlKCkpOwor
ICAgICAgICBpZiAodHJhY2stPmVuYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoc291cmNlID09IG1fYXVkaW9Tb3VyY2UpCisgICAgICAgICAgICBnX29iamVjdF9z
ZXQobV9hdWRpb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxscHRyKTsKKyAg
ICAgICAgZWxzZSBpZiAoc291cmNlID09IG1fdmlkZW9Tb3VyY2UpCisgICAgICAgICAgICBnX29i
amVjdF9zZXQobV92aWRlb1JlbmRlcmVyLmdldCgpLCAiZGlzYWJsZWQiLCBUUlVFLCBudWxscHRy
KTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyOjpzb3Vy
Y2VNdXRlZENoYW5nZWQoKQoreworICAgIExPR19NRURJQV9NRVNTQUdFKCJTb3VyY2UgbXV0ZWQg
c3RhdGUgY2hhbmdlZCIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93
cjo6c291cmNlU2V0dGluZ3NDaGFuZ2VkKCkKK3sKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiU291
cmNlIHNldHRpbmdzIGNoYW5nZWQiKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJPd3I6OnByZXZlbnRTb3VyY2VGcm9tU3RvcHBpbmcoKQoreworICAgIExPR19NRURJQV9N
RVNTQUdFKCJQcmV2ZW50IHNvdXJjZSBmcm9tIHN0b3BwaW5nIik7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3I6OmNyZWF0
ZVZpZGVvU2luaygpCit7CisgICAgR3N0RWxlbWVudCogc2luayA9IE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luaygpOworICAgIG1fdmlkZW9SZW5kZXJlciA9
IGFkb3B0R1JlZihvd3JfZ3N0X3ZpZGVvX3JlbmRlcmVyX25ldyhzaW5rKSk7CisgICAgcmV0dXJu
IHNpbms7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck93ci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZjNTQ4ZTUxYzk3MDNjNjQ3NDM1ZTVlMzM1YTJhNTEwNjY4ZTZjZDIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE1IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE1IE1ldHJvbG9naWNhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyX2gKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShPUEVOV0VCUlRD
KQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgorI2luY2x1
ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX093ckdzdFZpZGVv
UmVuZGVyZXIgT3dyR3N0VmlkZW9SZW5kZXJlcjsKK3R5cGVkZWYgc3RydWN0IF9Pd3JHc3RBdWRp
b1JlbmRlcmVyIE93ckdzdEF1ZGlvUmVuZGVyZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlOworY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZU93cjsK
KworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyIDogcHVibGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UsIHByaXZhdGUgUmVhbHRpbWVNZWRpYVNvdXJjZTo6T2Jz
ZXJ2ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck93cihNZWRpYVBsYXllciopOworICAgIH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJPd3Io
KTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdp
c3RyYXIpOworCitwcml2YXRlOgorICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2luaygpIG92
ZXJyaWRlOworICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fYXVkaW9TaW5rLmdldCgpOyB9CisgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiT3BlbldlYlJUQyI7IH0KKworICAgIHZvaWQgbG9h
ZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAg
IHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKSBvdmVy
cmlkZSB7IH0KKyNlbmRpZgorICAgIHZvaWQgbG9hZChNZWRpYVN0cmVhbVByaXZhdGUmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKSBvdmVycmlkZSB7IH0KKworICAgIHZvaWQgcHJl
cGFyZVRvUGxheSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOworICAg
IHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKKworICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBk
dXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIGZsb2F0IGN1cnJl
bnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZWVrKGZsb2F0KSBvdmVycmlkZSB7
IH0KKyAgICBib29sIHNlZWtpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFByZXNl
cnZlc1BpdGNoKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgcGF1c2VkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9wYXVzZWQ7IH0KKworICAgIGJvb2wgaGFzQ2xvc2VkQ2FwdGlvbnMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0Q2xvc2VkQ2Fw
dGlvbnNWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfTsKKworICAgIGZsb2F0IG1heFRpbWVTZWVr
YWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOyB9CisgICAgYm9vbCBkaWRMb2Fk
aW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0
b3RhbEJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgYm9vbCBjYW5M
b2FkUG9zdGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNl
dFBvc3Rlcihjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IH0KKworICAgIC8vIFJlYWx0aW1lTWVk
aWFTb3VyY2U6Ok9ic2VydmVyIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgc291cmNlU3RvcHBl
ZCgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCkgb3ZlcnJp
ZGUgZmluYWw7CisgICAgdm9pZCBzb3VyY2VTZXR0aW5nc0NoYW5nZWQoKSBvdmVycmlkZSBmaW5h
bDsKKyAgICBib29sIHByZXZlbnRTb3VyY2VGcm9tU3RvcHBpbmcoKSBvdmVycmlkZSBmaW5hbDsK
KworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsK
KyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kR1N0cmVhbWVyRGVidWdnaW5n
KCk7CisgICAgdm9pZCBjcmVhdGVHU1RBdWRpb1NpbmtCaW4oKTsKKyAgICB2b2lkIGxvYWRpbmdG
YWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcik7CisgICAgYm9vbCBpbnRlcm5h
bExvYWQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKworICAgIGJvb2wgbV9wYXVzZWQgeyB0cnVlIH07
CisgICAgYm9vbCBtX3N0b3BwZWQgeyB0cnVlIH07CisgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFT
b3VyY2VPd3I+IG1fdmlkZW9Tb3VyY2U7CisgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VP
d3I+IG1fYXVkaW9Tb3VyY2U7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvU2luazsK
KyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVByaXZhdGU7CisgICAgR1Jl
ZlB0cjxPd3JHc3RWaWRlb1JlbmRlcmVyPiBtX3ZpZGVvUmVuZGVyZXI7CisgICAgR1JlZlB0cjxP
d3JHc3RBdWRpb1JlbmRlcmVyPiBtX2F1ZGlvUmVuZGVyZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBVU0UoT1BFTldFQlJUQykKKworI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck93cl9oCg==
</data>
<flag name="review"
          id="295406"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>