<?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>162900</bug_id>
          
          <creation_ts>2016-10-04 04:55:22 -0700</creation_ts>
          <short_desc>[GStreamer][MSE][EME] MSE specialization of Media Player Private for GStreamer</short_desc>
          <delta_ts>2016-10-26 01:45:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>157314</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrique Ocaña">eocanha</reporter>
          <assigned_to name="Enrique Ocaña">eocanha</assigned_to>
          <cc>calvaris</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1236136</commentid>
    <comment_count>0</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 04:55:22 -0700</bug_when>
    <thetext>Refactor MSE-specific logic to its own GStreamer player. This new MSE player coordinates data appending, media playback and interaction with MediaSource by delegating to AppendPipeline (one instance per SourceBuffer), PlaybackPipeline and MediaSourceClientGStreamerMSE/MediaSourcePrivateClient respectively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236137</commentid>
    <comment_count>1</comment_count>
      <attachid>290592</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 05:02:36 -0700</bug_when>
    <thetext>Created attachment 290592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236140</commentid>
    <comment_count>2</comment_count>
      <attachid>290594</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 05:39:32 -0700</bug_when>
    <thetext>Created attachment 290594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236163</commentid>
    <comment_count>3</comment_count>
      <attachid>290594</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 07:08:07 -0700</bug_when>
    <thetext>Comment on attachment 290594
Patch

Wait until all the patches in 157314 are ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236584</commentid>
    <comment_count>4</comment_count>
      <attachid>290594</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-10-05 03:09:42 -0700</bug_when>
    <thetext>Comment on attachment 290594
Patch

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

These things can be fixed at landing time.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:35
&gt; +#include &quot;MIMETypeRegistry.h&quot;

This include is unsorted

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:49
&gt; +

You don&apos;t need this extra line

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:111
&gt; +    GST_DEBUG(&quot;%p&quot;, this);

Meaningful message and also GST_TRACE

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:116
&gt; +    GST_DEBUG(&quot;destroying the player&quot;);

GST_TRACE

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:136
&gt; +        GST_DEBUG(&quot;Unsupported url: %s&quot;, urlString.utf8().data());

Shouldn&apos;t this be a GST_WARNING or GST_ERROR?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:162
&gt; +        return { };

I think it is clearer if we return MediaTime();

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:197
&gt; +        GST_DEBUG(&quot;Seeking to %f failed&quot;, time);

GST_WARNING?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:213
&gt; +        g_object_set(G_OBJECT(playsink.get()), &quot;send-event-mode&quot;, 0, NULL);

NULL -&gt; nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:371
&gt; +        GST_DEBUG(&quot;Returning false&quot;);
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    // The samples will be enqueued in notifySeekNeedsData().
&gt; +    GST_DEBUG(&quot;Returning true&quot;);

Make these two message more meaningful, please.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:393
&gt; +            GST_DEBUG(&quot;[Seek] Seeking to %f failed&quot;, m_seekTime);

GST_WARNING?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:449
&gt; +        GST_DEBUG(&quot;Changing pipeline to PAUSED...&quot;);
&gt; +        bool ok = changePipelineState(GST_STATE_PAUSED);
&gt; +        GST_DEBUG(&quot;Changed pipeline to PAUSED: %s&quot;, ok ? &quot;Success&quot; : &quot;Error&quot;);

These two messages are bit redundant. If you really think you need them, probably first should be a _TRACE.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:527
&gt; +        m_resetPipeline = (state &lt;= GST_STATE_READY);
&gt; +        if (state &lt;= GST_STATE_READY)

These two lines are funny :) Changing them is your call. I don&apos;t mind.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:692
&gt; +        GST_DEBUG(&quot;m_mediaSourceClient is null, not doing anything&quot;);

My preference: not doing anything -&gt; doing nothing

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:785
&gt; +    for (HashMap&lt;RefPtr&lt;SourceBufferPrivateGStreamer&gt;, RefPtr&lt;AppendPipeline&gt; &gt;::iterator it = m_appendPipelinesMap.begin(); it != m_appendPipelinesMap.end(); ++it) {

&gt; &gt;   -&gt;    &gt;&gt;

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:809
&gt; +    auto position = MediaPlayerPrivateGStreamer::currentMediaTime();

Type this, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236680</commentid>
    <comment_count>5</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-05 10:05:18 -0700</bug_when>
    <thetext>(In reply to comment #4)

Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:35
&gt; &gt; +#include &quot;MIMETypeRegistry.h&quot;
&gt; 
&gt; This include is unsorted

Sorry, but the style checker thinks different (it uses case-sensitive string comparison):

#include &quot;MediaPlayer.h&quot;
#include &quot;MIMETypeRegistry.h&quot;
#include &quot;NotImplemented.h&quot;

ERROR: Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]

This explanation applies to all the other bugs where you&apos;ve suggested a case-insensitive header sorting.

Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:213
&gt; &gt; +        g_object_set(G_OBJECT(playsink.get()), &quot;send-event-mode&quot;, 0, NULL);
&gt; 
&gt; NULL -&gt; nullptr

The g_object_set() API says (literally) that the last parameter must be NULL. Maybe in some strange platform NULL has a different value than nullptr. Anyway, I&apos;ll use nullptr.

https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-set</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237016</commentid>
    <comment_count>6</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-06 05:38:12 -0700</bug_when>
    <thetext>(In reply to comment #4)

Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:449
&gt; &gt; +        GST_DEBUG(&quot;Changing pipeline to PAUSED...&quot;);
&gt; &gt; +        bool ok = changePipelineState(GST_STATE_PAUSED);
&gt; &gt; +        GST_DEBUG(&quot;Changed pipeline to PAUSED: %s&quot;, ok ? &quot;Success&quot; : &quot;Error&quot;);
&gt; 
&gt; These two messages are bit redundant. If you really think you need them,
&gt; probably first should be a _TRACE.

changePipelineState() does a lot of things internally, can potentially take some time to complete and even fail internally in the middle. It&apos;s interesting to have begin/end log messages to ease the interpretation of the gst log messages of other elements between the begin/end log messages. So ok, I&apos;ll change them to GST_TRACE().

Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:785
&gt; &gt; +    for (HashMap&lt;RefPtr&lt;SourceBufferPrivateGStreamer&gt;, RefPtr&lt;AppendPipeline&gt; &gt;::iterator it = m_appendPipelinesMap.begin(); it != m_appendPipelinesMap.end(); ++it) {

I guess you&apos;d like me to use &quot;iterator&quot; instead of &quot;it&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237958</commentid>
    <comment_count>7</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-10-08 05:33:11 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Source/WebCore/platform/graphics/gstreamer/mse/
&gt; MediaPlayerPrivateGStreamerMSE.cpp:213
&gt; &gt; &gt; +        g_object_set(G_OBJECT(playsink.get()), &quot;send-event-mode&quot;, 0, NULL);
&gt; &gt; 
&gt; &gt; NULL -&gt; nullptr
&gt; 
&gt; The g_object_set() API says (literally) that the last parameter must be
&gt; NULL. Maybe in some strange platform NULL has a different value than
&gt; nullptr. Anyway, I&apos;ll use nullptr.
&gt; 
&gt; https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.
&gt; html#g-object-set

I agree with you but we have decided some time ago that we won&apos;t use NULL but nullptr instead. It is a matter of coding style then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240764</commentid>
    <comment_count>8</comment_count>
      <attachid>291763</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-16 12:06:49 -0700</bug_when>
    <thetext>Created attachment 291763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242588</commentid>
    <comment_count>9</comment_count>
      <attachid>292256</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-20 13:57:39 -0700</bug_when>
    <thetext>Created attachment 292256
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242786</commentid>
    <comment_count>10</comment_count>
      <attachid>292256</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-21 00:38:42 -0700</bug_when>
    <thetext>Comment on attachment 292256
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:109
&gt; +    , m_eosMarked(false)
&gt; +    , m_eosPending(false)
&gt; +    , m_gstSeekCompleted(true)
&gt; +    , m_mseSeekCompleted(true)

These can all be defined in the class declaration in the header.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:119
&gt; +    for (HashMap&lt;RefPtr&lt;SourceBufferPrivateGStreamer&gt;, RefPtr&lt;AppendPipeline&gt;&gt;::iterator iterator = m_appendPipelinesMap.begin(); iterator != m_appendPipelinesMap.end(); ++iterator)
&gt; +        iterator-&gt;value-&gt;clearPlayerPrivate();

for (auto it : m_appendPipelinesMap)
    it.value-&gt;clearPlayerPrivate();

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:150
&gt; +    String mediasourceUri = String::format(&quot;mediasource%s&quot;, url.utf8().data());
&gt; +    m_mediaSource = mediaSource;
&gt; +    load(mediasourceUri);

Just inline String::format() into the load() call.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:175
&gt; +    float current = currentMediaTime().toDouble();

You&apos;re clipping a double value to a float. Using currentMediaTime().toFloat() is the first step. The best solution (for a follow-up patch) would be to override seekMediaTime() and use MediaTime for this.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:351
&gt; +    gint64 startTime, endTime;
&gt; +
&gt; +    if (rate &gt; 0) {
&gt; +        startTime = position;
&gt; +        endTime = GST_CLOCK_TIME_NONE;
&gt; +    } else {
&gt; +        startTime = 0;
&gt; +        endTime = position;
&gt; +    }

Alternatively, initialize startTime to 0 and endTime to `position`, and then override them in case `rate &gt; 0`.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:491
&gt; +    m_source.clear();

m_source = nullptr;

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:785
&gt; +    for (HashMap&lt;RefPtr&lt;SourceBufferPrivateGStreamer&gt;, RefPtr&lt;AppendPipeline&gt; &gt;::iterator iterator = m_appendPipelinesMap.begin(); iterator != m_appendPipelinesMap.end(); ++iterator) {

for (auto it : m_appendPipelinesMap)

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:832
&gt; +    float result = durationMediaTime().toDouble();

Same here, clipping double to a float. Use toFloat() for now, but in the long-term we should switch to the MediaTime version of this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243098</commentid>
    <comment_count>11</comment_count>
      <attachid>292409</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-21 14:26:45 -0700</bug_when>
    <thetext>Created attachment 292409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244676</commentid>
    <comment_count>12</comment_count>
      <attachid>292894</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:20:56 -0700</bug_when>
    <thetext>Created attachment 292894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244710</commentid>
    <comment_count>13</comment_count>
      <attachid>292894</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:44:52 -0700</bug_when>
    <thetext>Comment on attachment 292894
Patch

Clearing flags on attachment: 292894

Committed r207881: &lt;http://trac.webkit.org/changeset/207881&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244711</commentid>
    <comment_count>14</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:45:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290592</attachid>
            <date>2016-10-04 05:02:36 -0700</date>
            <delta_ts>2016-10-04 05:39:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162900-20161004115925.patch</filename>
            <type>text/plain</type>
            <size>41541</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYwN2E2YzdkYzg3MWUy
Zjc3YmMyMmJlMmRlMTI0NWQ2NjUzOGFiYy4uNDYxOTAyOGExZGUxYzAzMDY0YzgzNjUxODM5Nzc2
MDIwMTk0ZDA5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYyIEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJp
dmF0ZSBmb3IgR1N0cmVhbWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI5MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZWZhY3RvciBNU0Utc3BlY2lmaWMgbG9naWMgdG8gaXRzIG93biBHU3RyZWFt
ZXIgcGxheWVyLiBUaGlzIG5ldyBNU0UgcGxheWVyIGNvb3JkaW5hdGVzCisgICAgICAgIGRhdGEg
YXBwZW5kaW5nLCBtZWRpYSBwbGF5YmFjayBhbmQgaW50ZXJhY3Rpb24gd2l0aCBNZWRpYVNvdXJj
ZSBieSBkZWxlZ2F0aW5nIHRvCisgICAgICAgIEFwcGVuZFBpcGVsaW5lIChvbmUgaW5zdGFuY2Ug
cGVyIFNvdXJjZUJ1ZmZlciksIFBsYXliYWNrUGlwZWxpbmUgYW5kCisgICAgICAgIE1lZGlhU291
cmNlQ2xpZW50R1N0cmVhbWVyTVNFL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudCByZXNwZWN0aXZl
bHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRoIFBoaWxpcHBlIE5v
cm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+IChFTUUgc3VwcG9ydCkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE1l
ZGlhRW5naW5lc1ZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KGR1bXBSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0
aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25N
ZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6Y29uZmlndXJlUGxheVNpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpjaGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bm90aWZ5U2Vla05lZWRzRGF0YUZv
clRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjptYXliZUZpbmlzaFNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVraW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRGb3JTZWVr
Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OnNldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3luY1N0YXRlQ2hh
bmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OmlzVGltZUJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6c2V0TWVkaWFTb3VyY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJjZUNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0Rl
dGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVudE1lZGlhVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1h
eFRpbWVTZWVrYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1lZGlhU291cmNlUHJpdmF0ZUNs
aWVudCk6CisKKzIwMTYtMTAtMDQgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAgPGVvY2FuaGFA
aWdhbGlhLmNvbT4KKwogICAgICAgICBbR1N0cmVhbWVyXVtNU0VdIE1lZGlhU291cmNlR1N0cmVh
bWVyIHJlZmFjdG9yaW5nCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI4OTkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCmluZGV4IDhiNTFlNjAwNmEyNTcyMGRiZTdiNzI1OTQ5ZmNmYzg1ZmIw
MjcwMDMuLjNlYzJmOTM2OGVlOGU4NTA5M2QwYTM2MzQyNTZmZTNmYmI4ODc5NjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTU3
LDcgKzU3LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgi
CiAjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TT1VS
Q0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UuaCIKICNlbmRpZgorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCiAKICNpZiBV
U0UoTUVESUFfRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb24uaCIKQEAgLTIyOSw2ICsyMzIsMTAgQEAgc3RhdGljIHZvaWQgYnVpbGRNZWRpYUVu
Z2luZXNWZWN0b3IoKQogICAgIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWU6OnJlZ2lzdGVy
TWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnJlZ2lzdGVyTWVk
aWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCisKICAgICBoYXZlTWVkaWFFbmdpbmVz
VmVjdG9yKCkgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRiMzllZWRkMWQ1NTEz
OGI0YzUyMjZkMmMwZGFmOTBmOTJkMTgxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmNwcApAQCAtMCwwICsxLDg0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE2IElnYWxpYSBTLkwKKyAqIENvcHly
aWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVE
SUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJBcHBlbmRQaXBl
bGluZS5oIgorI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJN
ZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAi
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBw
c2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2dz
dC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKyNpbmNsdWRlIDxnc3Qvdmlk
ZW8vdmlkZW8uaD4KKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworc3RhdGljIGNvbnN0
IGNoYXIqIGR1bXBSZWFkeVN0YXRlKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJl
YWR5U3RhdGUpCit7CisgICAgc3dpdGNoIChyZWFkeVN0YXRlKSB7CisgICAgY2FzZSBXZWJDb3Jl
OjpNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc6IHJldHVybiAiSGF2ZU5vdGhpbmciOworICAgIGNh
c2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTogcmV0dXJuICJIYXZlTWV0YWRh
dGEiOworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTogcmV0
dXJuICJIYXZlQ3VycmVudERhdGEiOworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Okhh
dmVGdXR1cmVEYXRhOiByZXR1cm4gIkhhdmVGdXR1cmVEYXRhIjsKKyAgICBjYXNlIFdlYkNvcmU6
Ok1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTogcmV0dXJuICJIYXZlRW5vdWdoRGF0YSI7Cisg
ICAgZGVmYXVsdDogcmV0dXJuICIodW5rbm93bikiOworICAgIH0KK30KKworLy8gTWF4IGludGVy
dmFsIGluIHNlY29uZHMgdG8gc3RheSBpbiB0aGUgUkVBRFkgc3RhdGUgb24gbWFudWFsIHN0YXRl
IGNoYW5nZSByZXF1ZXN0cy4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBnUmVhZHlTdGF0ZVRpbWVy
SW50ZXJ2YWwgPSA2MDsKKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tc2VfZGVidWcpOwor
I2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21zZV9kZWJ1ZworCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJl
Z2lzdHJhcikKK3sKKyAgICBpZiAoaXNBdmFpbGFibGUoKSkgeworICAgICAgICByZWdpc3RyYXIo
W10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U+KHBsYXllcik7IH0sCisgICAgICAgICAgICBnZXRTdXBw
b3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBzdXBw
b3J0c0tleVN5c3RlbSk7CisgICAgfQorfQorCitib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRS
ZWdpc3RlcldlYktpdE1TRUVsZW1lbnQoKQoreworICAgIGlmIChVTkxJS0VMWSghaW5pdGlhbGl6
ZUdTdHJlYW1lcigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVnaXN0ZXJXZWJL
aXRHU3RyZWFtZXJFbGVtZW50cygpOworCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Vi
a2l0X21zZV9kZWJ1ZywgIndlYmtpdG1zZSIsIDAsICJXZWJLaXQgTVNFIG1lZGlhIHBsYXllciIp
OworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gV2ViS2l0TWVkaWFTcmNGYWN0b3J5
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgid2Via2l0bWVkaWFzcmMiKSk7
CisgICAgaWYgKFVOTElLRUxZKCFXZWJLaXRNZWRpYVNyY0ZhY3RvcnkpKQorICAgICAgICBnc3Rf
ZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0bWVkaWFzcmMiLCBHU1RfUkFOS19QUklN
QVJZICsgMTAwLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNBdmFpbGFibGUoKQorewor
ICAgIGlmIChVTkxJS0VMWSghaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0TVNF
RWxlbWVudCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50RmFjdG9yeT4gZmFjdG9yeSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQo
InBsYXliaW4iKSk7CisgICAgcmV0dXJuIGZhY3Rvcnk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKE1lZGlhUGxheWVy
KiBwbGF5ZXIpCisgICAgOiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIocGxheWVyKQorICAg
ICwgbV9lb3NNYXJrZWQoZmFsc2UpCisgICAgLCBtX2Vvc1BlbmRpbmcoZmFsc2UpCisgICAgLCBt
X2dzdFNlZWtDb21wbGV0ZWQodHJ1ZSkKKyAgICAsIG1fbXNlU2Vla0NvbXBsZXRlZCh0cnVlKQor
eworICAgIEdTVF9ERUJVRygiJXAiLCB0aGlzKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKCkKK3sKKyAgICBHU1Rf
REVCVUcoImRlc3Ryb3lpbmcgdGhlIHBsYXllciIpOworCisgICAgZm9yIChIYXNoTWFwPFJlZlB0
cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPEFwcGVuZFBpcGVsaW5lPj46
Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9hcHBlbmRQaXBlbGluZXNNYXAuYmVnaW4oKTsgaXRlcmF0
b3IgIT0gbV9hcHBlbmRQaXBlbGluZXNNYXAuZW5kKCk7ICsraXRlcmF0b3IpCisgICAgICAgIGl0
ZXJhdG9yLT52YWx1ZS0+Y2xlYXJQbGF5ZXJQcml2YXRlKCk7CisKKyAgICBpZiAobV9zb3VyY2Up
IHsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNTZXRNZWRpYVBsYXllclByaXZhdGUoV0VCS0lUX01F
RElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIG51bGxwdHIpOworICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9zb3VyY2UuZ2V0KCksIHRoaXMpOworICAgIH0KKwor
ICAgIGlmIChtX3BsYXliYWNrUGlwZWxpbmUpCisgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZS0+
c2V0V2ViS2l0TWVkaWFTcmMobnVsbHB0cik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIGlmIChV
TkxJS0VMWSghaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0TVNFRWxlbWVudCgp
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF1cmxTdHJpbmcuc3RhcnRzV2l0aCgibWVk
aWFzb3VyY2UiKSkgeworICAgICAgICBHU1RfREVCVUcoIlVuc3VwcG9ydGVkIHVybDogJXMiLCB1
cmxTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIW1fcGxheWJhY2tQaXBlbGluZSkKKyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lID0gUGxh
eWJhY2tQaXBlbGluZTo6Y3JlYXRlKCk7CisKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmxvYWQodXJsU3RyaW5nKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCog
bWVkaWFTb3VyY2UpCit7CisgICAgU3RyaW5nIG1lZGlhc291cmNlVXJpID0gU3RyaW5nOjpmb3Jt
YXQoIm1lZGlhc291cmNlJXMiLCB1cmwudXRmOCgpLmRhdGEoKSk7CisgICAgbV9tZWRpYVNvdXJj
ZSA9IG1lZGlhU291cmNlOworICAgIGxvYWQobWVkaWFzb3VyY2VVcmkpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cGF1c2UoKQoreworICAgIG1fcGF1c2VkID0g
dHJ1ZTsKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlKCk7Cit9CisKK01l
ZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uTWVkaWFUaW1l
KCkgY29uc3QKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3Vy
ZWQpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIG1fbWVkaWFUaW1lRHVyYXRp
b247Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGZsb2F0
IHRpbWUpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVk
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0lORk8oIltTZWVrXSBzZWVrIGF0dGVtcHQg
dG8gJWYgc2VjcyIsIHRpbWUpOworCisgICAgLy8gQXZvaWQgdXNlbGVzcyBzZWVraW5nLgorICAg
IGZsb2F0IGN1cnJlbnQgPSBjdXJyZW50TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKKyAgICBpZiAo
dGltZSA9PSBjdXJyZW50KSB7CisgICAgICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICAgICAg
dGltZUNoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0xpdmVT
dHJlYW0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2Vla2luZyAmJiBtX3NlZWtJ
c1BlbmRpbmcpIHsKKyAgICAgICAgbV9zZWVrVGltZSA9IHRpbWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBHU1RfREVCVUcoIlNlZWtpbmcgZnJvbSAlZiB0byAlZiBzZWNvbmRzIiwg
Y3VycmVudCwgdGltZSk7CisKKyAgICBmbG9hdCBwcmV2U2Vla1RpbWUgPSBtX3NlZWtUaW1lOwor
ICAgIG1fc2Vla1RpbWUgPSB0aW1lOworCisgICAgaWYgKCFkb1NlZWsoKSkgeworICAgICAgICBt
X3NlZWtUaW1lID0gcHJldlNlZWtUaW1lOworICAgICAgICBHU1RfREVCVUcoIlNlZWtpbmcgdG8g
JWYgZmFpbGVkIiwgdGltZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2lzRW5k
UmVhY2hlZCA9IGZhbHNlOworICAgIEdTVF9ERUJVRygibV9zZWVraW5nPSVzLCBtX3NlZWtUaW1l
PSVmIiwgbV9zZWVraW5nID8gInRydWUiIDogImZhbHNlIiwgbV9zZWVrVGltZSk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjb25maWd1cmVQbGF5U2luaygpCit7
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb25maWd1cmVQbGF5U2luaygpOwor
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBwbGF5c2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dl
dF9ieV9uYW1lKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksICJwbGF5c2luayIpKTsKKyAgICBp
ZiAocGxheXNpbmspIHsKKyAgICAgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWUgKDApIG1lYW5zICJz
ZW5kIGV2ZW50cyB0byBhbGwgdGhlIHNpbmtzIiwgaW5zdGVhZAorICAgICAgICAvLyBvZiAib25s
eSB0byB0aGUgZmlyc3QgdGhhdCByZXR1cm5zIHRydWUiLiBUaGlzIGlzIG5lZWRlZCBmb3IgTVNF
IHNlZWsuCisgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChwbGF5c2luay5nZXQoKSksICJz
ZW5kLWV2ZW50LW1vZGUiLCAwLCBOVUxMKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlIG5ld1N0YXRl
KQoreworICAgIGlmIChzZWVraW5nKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJSZWplY3RlZCBz
dGF0ZSBjaGFuZ2UgdG8gJXMgd2hpbGUgc2Vla2luZyIsCisgICAgICAgICAgICBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBlbGlu
ZVN0YXRlKG5ld1N0YXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6Om5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNvbnN0IE1lZGlhVGltZSYgc2Vla1RpbWUp
Cit7CisgICAgLy8gUmVlbnF1ZXVlIHNhbXBsZXMgbmVlZGVkIHRvIHJlc3VtZSBwbGF5YmFjayBp
biB0aGUgbmV3IHBvc2l0aW9uLgorICAgIG1fbWVkaWFTb3VyY2UtPnNlZWtUb1RpbWUoc2Vla1Rp
bWUpOworCisgICAgR1NUX0RFQlVHKCJNU0Ugc2VlayB0byAlZiBmaW5pc2hlZCIsIHNlZWtUaW1l
LnRvRG91YmxlKCkpOworCisgICAgaWYgKCFtX2dzdFNlZWtDb21wbGV0ZWQpIHsKKyAgICAgICAg
bV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7Cisg
ICAgfQorfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKGdp
bnQ2NCwgZmxvYXQsIEdzdFNlZWtGbGFncykKK3sKKyAgICAvLyBVc2UgZG9TZWVrKCkgaW5zdGVh
ZC4gSWYgYW55Ym9keSBpcyBjYWxsaW5nIHRoaXMgdmVyc2lvbiBvZiBkb1NlZWsoKSwgc29tZXRo
aW5nIGlzIHdyb25nLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmRvU2VlaygpCit7
CisgICAgR3N0Q2xvY2tUaW1lIHBvc2l0aW9uID0gdG9Hc3RDbG9ja1RpbWUobV9zZWVrVGltZSk7
CisgICAgTWVkaWFUaW1lIHNlZWtUaW1lID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1f
c2Vla1RpbWUpOworICAgIGRvdWJsZSByYXRlID0gbV9wbGF5ZXItPnJhdGUoKTsKKyAgICBHc3RT
ZWVrRmxhZ3Mgc2Vla1R5cGUgPSBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZM
QUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKTsKKworICAgIC8vIEFsd2F5cyBtb3Zl
IHRvIHNlZWtpbmcgc3RhdGUgdG8gcmVwb3J0IGNvcnJlY3QgJ2N1cnJlbnRUaW1lJyB3aGlsZSBw
ZW5kaW5nIGZvciBhY3R1YWwgc2VlayB0byBjb21wbGV0ZS4KKyAgICBtX3NlZWtpbmcgPSB0cnVl
OworCisgICAgLy8gQ2hlY2sgaWYgcGxheWJhY2sgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNlZWsu
CisgICAgR3N0U3RhdGUgc3RhdGUsIG5ld1N0YXRlOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJu
IGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
ICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsKKyAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NU
QVRFX0NIQU5HRV9GQUlMVVJFIHx8IGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
Tk9fUFJFUk9MTCkgeworICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBjYW5ub3Qgc2VlaywgY3Vy
cmVudCBzdGF0ZSBjaGFuZ2UgaXMgJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJu
X2dldF9uYW1lKGdldFN0YXRlUmVzdWx0KSk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVh
ZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKKyAg
ICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DCisgICAgICAg
ICYmICEoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRF
X1BBVVNFRCkpCisgICAgICAgIHx8IHN0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRAorICAgICAgICB8
fCBtX2lzRW5kUmVhY2hlZAorICAgICAgICB8fCAhbV9nc3RTZWVrQ29tcGxldGVkKSB7CisgICAg
ICAgIENTdHJpbmcgcmVhc29uID0gIlVua25vd24gcmVhc29uIjsKKyAgICAgICAgaWYgKGdldFN0
YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpIHsKKyAgICAgICAgICAgIHJlYXNv
biA9IFN0cmluZzo6Zm9ybWF0KCJJbiBhc3luYyBjaGFuZ2UgJXMgLS0+ICVzIiwKKyAgICAgICAg
ICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksCisgICAgICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKS51dGY4KCk7CisgICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VEKQorICAgICAgICAgICAgcmVhc29u
ID0gIlN0YXRlIGxlc3MgdGhhbiBQQVVTRUQiOworICAgICAgICBlbHNlIGlmIChtX2lzRW5kUmVh
Y2hlZCkKKyAgICAgICAgICAgIHJlYXNvbiA9ICJFbmQgcmVhY2hlZCI7CisgICAgICAgIGVsc2Ug
aWYgKCFtX2dzdFNlZWtDb21wbGV0ZWQpCisgICAgICAgICAgICByZWFzb24gPSAiUHJldmlvdXMg
c2VlayBpcyBub3QgZmluaXNoZWQgeWV0IjsKKworICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBE
ZWxheWluZyB0aGUgc2VlazogJXMiLCByZWFzb24uZGF0YSgpKTsKKworICAgICAgICBtX3NlZWtJ
c1BlbmRpbmcgPSB0cnVlOworCisgICAgICAgIGlmIChtX2lzRW5kUmVhY2hlZCkgeworICAgICAg
ICAgICAgR1NUX0RFQlVHKCJbU2Vla10gcmVzZXQgcGlwZWxpbmUiKTsKKyAgICAgICAgICAgIG1f
cmVzZXRQaXBlbGluZSA9IHRydWU7CisgICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICghY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKSkKKyAg
ICAgICAgICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpFbXB0eSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zZWVraW5nID0gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBtX3NlZWtpbmc7CisgICAgfQorCisgICAgLy8gU3RvcCBhY2NlcHRp
bmcgbmV3IHNhbXBsZXMgdW50aWwgYWN0dWFsIHNlZWsgaXMgZmluaXNoZWQuCisgICAgd2ViS2l0
TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQo
KSksIGZhbHNlKTsKKworICAgIC8vIENvcnJlY3Qgc2VlayB0aW1lIGlmIGl0IGhlbHBzIHRvIGZp
eCBhIHNtYWxsIGdhcC4KKyAgICBpZiAoIWlzVGltZUJ1ZmZlcmVkKHNlZWtUaW1lKSkgeworICAg
ICAgICAvLyBMb29rIGlmIGEgbmVhciBmdXR1cmUgdGltZSAoPDAuMSBzZWMuKSBpcyBidWZmZXJl
ZCBhbmQgY2hhbmdlIHRoZSBzZWVrIHRhcmdldCB0aW1lLgorICAgICAgICBpZiAobV9tZWRpYVNv
dXJjZSkgeworICAgICAgICAgICAgY29uc3QgTWVkaWFUaW1lIG1pbmlHYXAgPSBNZWRpYVRpbWU6
OmNyZWF0ZVdpdGhEb3VibGUoMC4xKTsKKyAgICAgICAgICAgIE1lZGlhVGltZSBuZWFyZXN0ID0g
bV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKS0+bmVhcmVzdChzZWVrVGltZSk7CisgICAgICAgICAg
ICBpZiAobmVhcmVzdC5pc1ZhbGlkKCkgJiYgbmVhcmVzdCA+IHNlZWtUaW1lICYmIChuZWFyZXN0
IC0gc2Vla1RpbWUpIDw9IG1pbmlHYXAgJiYgaXNUaW1lQnVmZmVyZWQobmVhcmVzdCArIG1pbmlH
YXApKSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gQ2hhbmdlZCB0aGUgc2Vl
ayB0YXJnZXQgdGltZSBmcm9tICVmIHRvICVmLCBhIG5lYXIgcG9pbnQgaW4gdGhlIGZ1dHVyZSIs
IHNlZWtUaW1lLnRvRmxvYXQoKSwgbmVhcmVzdC50b0Zsb2F0KCkpOworICAgICAgICAgICAgICAg
IHNlZWtUaW1lID0gbmVhcmVzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIENoZWNrIGlmIE1TRSBoYXMgc2FtcGxlcyBmb3IgcmVxdWVzdGVkIHRpbWUgYW5kIGRl
ZmVyIGFjdHVhbCBzZWVrIGlmIG5lZWRlZC4KKyAgICBpZiAoIWlzVGltZUJ1ZmZlcmVkKHNlZWtU
aW1lKSkgeworICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBEZWxheWluZyB0aGUgc2VlazogTVNF
IGlzIG5vdCByZWFkeSIpOworICAgICAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJl
c3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVf
UEFVU0VEKTsKKyAgICAgICAgaWYgKHNldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
RkFJTFVSRSkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gQ2Fubm90IHNlZWssIGZh
aWxlZCB0byBwYXVzZSBwbGF5YmFjayBwaXBlbGluZS4iKTsKKyAgICAgICAgICAgIHdlYktpdE1l
ZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkp
LCB0cnVlKTsKKyAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpIYXZlTWV0YWRhdGE7CisgICAgICAgIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKHNlZWtU
aW1lKTsKKyAgICAgICAgQVNTRVJUKCFtX21zZVNlZWtDb21wbGV0ZWQpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDb21wbGV0ZSBwcmV2aW91cyBNU0Ugc2VlayBpZiBu
ZWVkZWQuCisgICAgaWYgKCFtX21zZVNlZWtDb21wbGV0ZWQpIHsKKyAgICAgICAgbV9tZWRpYVNv
dXJjZS0+bW9uaXRvclNvdXJjZUJ1ZmZlcnMoKTsKKyAgICAgICAgQVNTRVJUKG1fbXNlU2Vla0Nv
bXBsZXRlZCk7CisgICAgICAgIC8vIE5vdGU6IHNlZWtDb21wbGV0ZWQgd2lsbCByZWN1cnNpdmVs
eSBjYWxsIHVzLgorICAgICAgICByZXR1cm4gbV9zZWVraW5nOworICAgIH0KKworICAgIEdTVF9E
RUJVRygiV2UgY2FuIHNlZWsgbm93Iik7CisKKyAgICBnaW50NjQgc3RhcnRUaW1lLCBlbmRUaW1l
OworCisgICAgaWYgKHJhdGUgPiAwKSB7CisgICAgICAgIHN0YXJ0VGltZSA9IHBvc2l0aW9uOwor
ICAgICAgICBlbmRUaW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBzdGFydFRpbWUgPSAwOworICAgICAgICBlbmRUaW1lID0gcG9zaXRpb247CisgICAgfQor
CisgICAgaWYgKCFyYXRlKQorICAgICAgICByYXRlID0gMTsKKworICAgIEdTVF9ERUJVRygiQWN0
dWFsIHNlZWsgdG8gJSIgR1NUX1RJTUVfRk9STUFUICIsIGVuZCB0aW1lOiAgJSIgR1NUX1RJTUVf
Rk9STUFUICIsIHJhdGU6ICVmIiwgR1NUX1RJTUVfQVJHUyhzdGFydFRpbWUpLCBHU1RfVElNRV9B
UkdTKGVuZFRpbWUpLCByYXRlKTsKKworICAgIC8vIFRoaXMgd2lsbCBjYWxsIG5vdGlmeVNlZWtO
ZWVkc0RhdGEoKSBhZnRlciBzb21lIHRpbWUgdG8gdGVsbCB0aGF0IHRoZSBwaXBlbGluZSBpcyBy
ZWFkeSBmb3Igc2FtcGxlIGVucXVldWluZy4KKyAgICB3ZWJLaXRNZWRpYVNyY1ByZXBhcmVTZWVr
KFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBzZWVrVGltZSk7CisKKyAgICBtX2dz
dFNlZWtDb21wbGV0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWdzdF9lbGVtZW50X3NlZWsobV9waXBl
bGluZS5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwgR1NUX1NFRUtfVFlQ
RV9TRVQsIHN0YXJ0VGltZSwgR1NUX1NFRUtfVFlQRV9TRVQsIGVuZFRpbWUpKSB7CisgICAgICAg
IHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpLCB0cnVlKTsKKyAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgIG1f
Z3N0U2Vla0NvbXBsZXRlZCA9IHRydWU7CisgICAgICAgIEdTVF9ERUJVRygiUmV0dXJuaW5nIGZh
bHNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgc2FtcGxl
cyB3aWxsIGJlIGVucXVldWVkIGluIG5vdGlmeVNlZWtOZWVkc0RhdGEoKS4KKyAgICBHU1RfREVC
VUcoIlJldHVybmluZyB0cnVlIik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWsoKQoreworICAgIGlmICgh
bV9zZWVraW5nIHx8ICFtX21zZVNlZWtDb21wbGV0ZWQgfHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3N0U3RhdGUgc3RhdGUsIG5ld1N0YXRlOworICAgIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRl
KG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsKKworICAgIGlmIChnZXRT
dGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DCisgICAgICAgICYmICEoc3RhdGUg
PT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkpIHsK
KyAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gRGVsYXlpbmcgc2VlayBmaW5pc2giKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAg
R1NUX0RFQlVHKCJbU2Vla10gQ29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8gJWYiLCBtX3NlZWtU
aW1lKTsKKyAgICAgICAgbV9zZWVrSXNQZW5kaW5nID0gZmFsc2U7CisgICAgICAgIGlmICghZG9T
ZWVrKCkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIFNlZWtpbmcgdG8gJWYgZmFp
bGVkIiwgbV9zZWVrVGltZSk7CisgICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gLTE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdTVF9ERUJVRygiW1NlZWtd
IFNlZWtlZCB0byAlZiIsIG1fc2Vla1RpbWUpOworCisgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFk
eUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUpOworICAg
IG1fc2Vla2luZyA9IGZhbHNlOworICAgIG1fY2FjaGVkUG9zaXRpb24gPSAtMTsKKyAgICAvLyBU
aGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhhdmUgYSBwZW5kaW5nIHN0YXRlLiBJbiB0aGlzIGNhc2Ug
YSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZhaWwuCisgICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2Ug
bV9zZWVrVGltZSBhcyBhIGZhbGxiYWNrLgorICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hl
ZFNlZWtQb3NpdGlvbiA9IHRydWU7CisgICAgdGltZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnNlZWtpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlZWtpbmc7Cit9CisKKy8vIEZJ
WE1FOiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgbWFuYWdlcyB0aGUgUmVhZHlTdGF0ZSBv
biBpdHMgb3duLiBXZSBzaG91bGRuJ3QgY2hhbmdlIGl0IG1hbnVhbGx5Lgordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBpZiAocmVhZHlTdGF0ZSA9PSBtX3JlYWR5U3RhdGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzZWVraW5nKCkpIHsKKyAgICAgICAgR1NUX0RF
QlVHKCJTa2lwIHJlYWR5IHN0YXRlIGNoYW5nZSglcyAtPiAlcykgZHVlIHRvIHNlZWtcbiIsIGR1
bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKHJlYWR5U3RhdGUpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdTVF9ERUJVRygiUmVhZHkgU3RhdGUgQ2hh
bmdlZCBtYW51YWxseSBmcm9tICV1IHRvICV1IiwgbV9yZWFkeVN0YXRlLCByZWFkeVN0YXRlKTsK
KyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRl
OworICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7CisgICAgR1NUX0RFQlVHKCJtX3JlYWR5
U3RhdGU6ICVzIC0+ICVzIiwgZHVtcFJlYWR5U3RhdGUob2xkUmVhZHlTdGF0ZSksIGR1bXBSZWFk
eVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworCisgICAgaWYgKG9sZFJlYWR5U3RhdGUgPCBNZWRpYVBs
YXllcjo6SGF2ZUN1cnJlbnREYXRhICYmIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2
ZUN1cnJlbnREYXRhKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIFJlcG9ydGluZyBsb2Fk
IHN0YXRlIGNoYW5nZWQgdG8gdHJpZ2dlciBzZWVrIGNvbnRpbnVhdGlvbiIpOworICAgICAgICBs
b2FkU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdl
ZCgpOworCisgICAgR3N0U3RhdGUgcGlwZWxpbmVTdGF0ZTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJl
dHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdl
dCgpLCAmcGlwZWxpbmVTdGF0ZSwgbnVsbHB0ciwgMjUwICogR1NUX05TRUNPTkQpOworICAgIGJv
b2wgaXNQbGF5aW5nID0gKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VT
UyAmJiBwaXBlbGluZVN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKTsKKworICAgIGlmIChtX3Jl
YWR5U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBvbGRSZWFkeVN0YXRlID4g
TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBpc1BsYXlpbmcpIHsKKyAgICAgICAgR1NUX0RF
QlVHKCJDaGFuZ2luZyBwaXBlbGluZSB0byBQQVVTRUQuLi4iKTsKKyAgICAgICAgYm9vbCBvayA9
IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIEdTVF9ERUJV
RygiQ2hhbmdlZCBwaXBlbGluZSB0byBQQVVTRUQ6ICVzIiwgb2sgPyAiU3VjY2VzcyIgOiAiRXJy
b3IiKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp3
YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdTVF9ERUJVRygiV2FpdGluZyBmb3IgTVNFIHNlZWsgY29tcGxldGVkIik7
CisgICAgbV9tc2VTZWVrQ29tcGxldGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrQ29tcGxldGVkKCkKK3sKKyAgICBpZiAobV9tc2VTZWVr
Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIk1TRSBzZWVrIGNv
bXBsZXRlZCIpOworICAgIG1fbXNlU2Vla0NvbXBsZXRlZCA9IHRydWU7CisKKyAgICBkb1NlZWso
KTsKKworICAgIGlmICghc2Vla2luZygpICYmIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6
SGF2ZUZ1dHVyZURhdGEpCisgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BM
QVlJTkcpOworCisgICAgaWYgKCFzZWVraW5nKCkpCisgICAgICAgIG1fcGxheWVyLT50aW1lQ2hh
bmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmF0
ZShmbG9hdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmJ1ZmZl
cmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQoKQor
eworICAgIG1fc291cmNlLmNsZWFyKCk7CisgICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0
KCksICJzb3VyY2UiLCAmbV9zb3VyY2Uub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgQVNTRVJU
KFdFQktJVF9JU19NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpKTsKKworICAgIG1fcGxheWJhY2tQ
aXBlbGluZS0+c2V0V2ViS2l0TWVkaWFTcmMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQo
KSkpOworCisgICAgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om9wZW4obV9tZWRpYVNvdXJjZS5nZXQo
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAi
dmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9zb3VyY2UuZ2V0KCksICJhdWRpby1jaGFu
Z2VkIiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5nZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FM
TEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIHdlYktpdE1lZGlhU3JjU2V0
TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0aGlz
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRl
cygpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3
b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBv
bGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOworICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5n
OworCisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVu
dF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NU
X05TRUNPTkQpOworCisgICAgYm9vbCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7
CisgICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5H
RV9TVUNDRVNTOiB7CisgICAgICAgIEdTVF9ERUJVRygiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIs
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUocGVuZGluZykpOworCisgICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBz
dGF0ZSBjaGFuZ2VkIHRvIFJFQURZIHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgorICAg
ICAgICAvLyBvbiBIVE1MTWVkaWFFbGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlk
ZW8gJ2VuZGVkJyBldmVudC4KKyAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09
IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fcmVzZXRQ
aXBlbGluZSA9IChzdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkpOworICAgICAgICBpZiAoc3RhdGUg
PD0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICAgICAgbV9tZWRpYVRpbWVEdXJhdGlvbiA9IE1l
ZGlhVGltZTo6emVyb1RpbWUoKTsKKworICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdv
cmsgc3RhdGVzLgorICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgR1NUX1NU
QVRFX05VTEw6CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmc7CisgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFk
eVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6RW1wdHk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfU1RB
VEVfUkVBRFk6CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1l
dGFkYXRhOworICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVh
ZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkVtcHR5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NU
QVRFX1BBVVNFRDoKKyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKKyAgICAgICAgICAg
IGlmIChzZWVraW5nKCkpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
bWFuYWdlIE5ldHdvcmtTdGF0ZSB0b28/CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3Jl
YWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9idWZmZXJpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJp
bmdQZXJjZW50YWdlID09IDEwMCkgeworICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoIltC
dWZmZXJpbmddIENvbXBsZXRlLiIpOworICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlcmluZyA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0
YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6Oklk
bGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnRE
YXRhOworICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1
bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAg
ICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0
YXRlKSk7CisgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGVkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVH
KCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAg
ICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9lb3NNYXJrZWQgJiYgc3RhdGUgPT0gR1NUX1NU
QVRFX1BMQVlJTkcpCisgICAgICAgICAgICAgICAgbV9lb3NQZW5kaW5nID0gdHJ1ZTsKKworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8g
U3luYyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgorICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRF
X1BBVVNFRCkgeworICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkg
eworICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CisgICAgICAg
ICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisgICAgICAgICAgICAgICAgbV92b2x1bWVB
bmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXNlZWtpbmcoKSAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tS
YXRlKSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5n
IHBsYXliYWNrLiIpOworICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NU
QVRFX1BMQVlJTkcpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09
IEdTVF9TVEFURV9QTEFZSU5HKSB7CisgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworCisg
ICAgICAgICAgICBpZiAoKG1fYnVmZmVyaW5nICYmICFpc0xpdmVTdHJlYW0oKSkgfHwgIW1fcGxh
eWJhY2tSYXRlKSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBQYXVz
aW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOworICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVs
aW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAgICAgIGlmIChtX3JlcXVlc3Rl
ZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkg
eworICAgICAgICAgICAgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAg
ICAgICBHU1RfREVCVUcoIlJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2FzIGNvbXBsZXRl
ZCIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7CisgICAgICAgIH0KKworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAg
ICAgICBHU1RfREVCVUcoIkFzeW5jOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5k
aW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBpbiBwcm9ncmVzcy4KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CisgICAgICAgIEdTVF9XQVJOSU5HKCJG
YWlsdXJlOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAg
IC8vIENoYW5nZSBmYWlsZWQuCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdTVF9TVEFURV9D
SEFOR0VfTk9fUFJFUk9MTDoKKyAgICAgICAgR1NUX0RFQlVHKCJObyBwcmVyb2xsOiBTdGF0ZTog
JXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgLy8gTGl2ZSBwaXBl
bGluZXMgZ28gaW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KKyAgICAgICAgbV9pc1N0cmVh
bWluZyA9IHRydWU7CisKKyAgICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkgewor
ICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAg
ICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3Jl
YWR5U3RhdGUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VE
KSB7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGE7CisgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0
YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAg
ICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQorICAgICAgICAgICAgbV9w
YXVzZWQgPSBmYWxzZTsKKworICAgICAgICBpZiAoIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRl
KQorICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CisK
KyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHKCJFbHNlIDogJWQiLCBnZXRT
dGF0ZVJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fcmVxdWVzdGVkU3Rh
dGUgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworCisgICAgaWYgKHNob3VsZFVwZGF0ZVBsYXli
YWNrU3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0YXRlQ2hhbmdlZCgpOworCisg
ICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkgeworICAgICAgICBHU1Rf
REVCVUcoIk5ldHdvcmsgU3RhdGUgQ2hhbmdlZCBmcm9tICV1IHRvICV1Iiwgb2xkTmV0d29ya1N0
YXRlLCBtX25ldHdvcmtTdGF0ZSk7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgewor
ICAgICAgICBHU1RfREVCVUcoIlJlYWR5IFN0YXRlIENoYW5nZWQgZnJvbSAldSB0byAldSIsIG9s
ZFJlYWR5U3RhdGUsIG1fcmVhZHlTdGF0ZSk7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOworICAgIH0KKworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVf
Q0hBTkdFX1NVQ0NFU1MgJiYgc3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICB1
cGRhdGVQbGF5YmFja1JhdGUoKTsKKyAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7CisgICAgfQor
fQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVDaGFuZ2VE
b25lKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zZWVraW5nKQorICAgICAgICBtYXliZUZp
bmlzaFNlZWsoKTsKKyAgICBlbHNlCisgICAgICAgIHVwZGF0ZVN0YXRlcygpOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNUaW1lQnVmZmVyZWQoY29uc3QgTWVk
aWFUaW1lICZ0aW1lKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gbV9tZWRpYVNvdXJjZSAm
JiBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpLT5jb250YWluKHRpbWUpOworICAgIEdTVF9ERUJV
RygiVGltZSAlZiBidWZmZXJlZD8gJXMiLCB0aW1lLnRvRG91YmxlKCksIHJlc3VsdCA/ICJZZXMi
IDogIk5vIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OnNldE1lZGlhU291cmNlQ2xpZW50KFBhc3NSZWZQdHI8TWVkaWFTb3Vy
Y2VDbGllbnRHU3RyZWFtZXJNU0U+IGNsaWVudCkKK3sKKyAgICBtX21lZGlhU291cmNlQ2xpZW50
ID0gY2xpZW50OworfQorCitSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWVkaWFTb3VyY2VDbGllbnQoKQoreworICAg
IHJldHVybiBtX21lZGlhU291cmNlQ2xpZW50OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fbWVkaWFTb3Vy
Y2VDbGllbnQpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJtX21lZGlhU291cmNlQ2xpZW50IGlzIG51
bGwsIG5vdCBkb2luZyBhbnl0aGluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
TWVkaWFUaW1lIHByZXZpb3VzRHVyYXRpb24gPSBtX21lZGlhVGltZUR1cmF0aW9uOworICAgIG1f
bWVkaWFUaW1lRHVyYXRpb24gPSBtX21lZGlhU291cmNlQ2xpZW50LT5kdXJhdGlvbigpOworCisg
ICAgR1NUX1RSQUNFKCJwcmV2aW91cz0lZiwgbmV3PSVmIiwgcHJldmlvdXNEdXJhdGlvbi50b0Zs
b2F0KCksIG1fbWVkaWFUaW1lRHVyYXRpb24udG9GbG9hdCgpKTsKKworICAgIC8vIEF2b2lkIGVt
aXRpbmcgZHVyYXRpb25jaGFuZ2VkIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBwcmV2aW91cyBkdXJh
dGlvbiB3YXMgMCBiZWNhdXNlIHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQKKyAgICAvLyBi
eSB0aGUgSFRNTE1lZGlhRWxlbWVudC4KKyAgICBpZiAobV9tZWRpYVRpbWVEdXJhdGlvbiAhPSBw
cmV2aW91c0R1cmF0aW9uICYmIG1fbWVkaWFUaW1lRHVyYXRpb24uaXNWYWxpZCgpICYmIHByZXZp
b3VzRHVyYXRpb24uaXNWYWxpZCgpKSB7CisgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5n
ZWQoKTsKKyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5ub3RpZnlEdXJhdGlvbkNoYW5nZWQo
KTsKKyAgICAgICAgbV9tZWRpYVNvdXJjZS0+ZHVyYXRpb25DaGFuZ2VkKG1fbWVkaWFUaW1lRHVy
YXRpb24pOworICAgIH0KK30KKworc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+JiBtaW1lVHlwZUNhY2hlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IGNhY2hlID0gW10o
KQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0TVNF
RWxlbWVudCgpOworICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiBzZXQ7CisgICAgICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0geworICAgICAgICAg
ICAgInZpZGVvL21wNCIsCisgICAgICAgICAgICAiYXVkaW8vbXA0IgorICAgICAgICB9OworICAg
ICAgICBmb3IgKGF1dG8mIHR5cGUgOiBtaW1lVHlwZXMpCisgICAgICAgICAgICBzZXQuYWRkKHR5
cGUpOworICAgICAgICByZXR1cm4gc2V0OworICAgIH0oKTsKKyAgICByZXR1cm4gY2FjaGU7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCit7Cisg
ICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4gYXBwZW5k
UGlwZWxpbmUsIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBvbGRUcmFjaywgUmVm
UHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNrKQoreworICAgIEFTU0VSVChh
cHBlbmRQaXBlbGluZS0+dHJhY2soKSA9PSBuZXdUcmFjayk7CisKKyAgICBHc3RDYXBzKiBjYXBz
ID0gYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmtDYXBzKCk7CisgICAgQVNTRVJUKGNhcHMpOworICAg
IEdTVF9ERUJVRygidHJhY2sgSUQ6ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3VHJh
Y2stPmlkKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBjYXBzKTsKKworICAgIEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLCAwKTsKKyAgICBj
b25zdCBnY2hhciogbWVkaWFUeXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUp
OworICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVk
aWFUeXBlLCAidmlkZW8vIikgJiYgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBz
KSkgeworICAgICAgICBmbG9hdCB3aWR0aCwgaGVpZ2h0OworCisgICAgICAgIHdpZHRoID0gaW5m
by53aWR0aDsKKyAgICAgICAgaGVpZ2h0ID0gaW5mby5oZWlnaHQgKiAoKGZsb2F0KSBpbmZvLnBh
cl9kIC8gKGZsb2F0KSBpbmZvLnBhcl9uKTsKKyAgICAgICAgbV92aWRlb1NpemUuc2V0V2lkdGgo
d2lkdGgpOworICAgICAgICBtX3ZpZGVvU2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICB9CisK
KyAgICBpZiAoIW9sZFRyYWNrKQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPmF0dGFjaFRy
YWNrKGFwcGVuZFBpcGVsaW5lLT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrLCBzdHJ1
Y3R1cmUsIGNhcHMpOworICAgIGVsc2UKKyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5yZWF0
dGFjaFRyYWNrKGFwcGVuZFBpcGVsaW5lLT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNr
KTsKK30KKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQoreworICAgIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgcmVzdWx0ID0g
TWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworICAgIGlmICghcGFyYW1ldGVycy5pc01lZGlh
U291cmNlKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLy8gRGlzYWJsZSBWUFgvT3B1
cyBvbiBNU0UgZm9yIG5vdywgbXA0L2F2YzEgc2VlbXMgd2F5IG1vcmUgcmVsaWFibGUgY3VycmVu
dGx5LgorICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuZW5kc1dpdGgoIndlYm0iKSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFlvdVR1YmUgVFYgcHJvdmlkZXMgZW1wdHkgdHlwZXMg
Zm9yIHNvbWUgdmlkZW9zIGFuZCB3ZSB3YW50IHRvIGJlIHNlbGVjdGVkIGFzIGJlc3QgbWVkaWEg
ZW5naW5lIGZvciB0aGVtLgorICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1
cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eS4KKyAgICBpZiAobWlt
ZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgICAgIHJlc3VsdCA9
IHBhcmFtZXRlcnMuY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRl
ZCA6IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKKworICAgIHJldHVybiBleHRlbmRlZFN1cHBv
cnRzVHlwZShwYXJhbWV0ZXJzLCByZXN1bHQpOworfQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQV9WMikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkaXNwYXRjaERl
Y3J5cHRpb25LZXkoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgZm9yIChIYXNoTWFwPFJlZlB0
cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPEFwcGVuZFBpcGVsaW5lPiA+
OjppdGVyYXRvciBpdCA9IG1fYXBwZW5kUGlwZWxpbmVzTWFwLmJlZ2luKCk7IGl0ICE9IG1fYXBw
ZW5kUGlwZWxpbmVzTWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmFw
cGVuZFN0YXRlKCkgPT0gQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpLZXlOZWdvdGlhdGlv
bikgeworICAgICAgICAgICAgR1NUX1RSQUNFKCJhcHBlbmQgcGlwZWxpbmUgJXAgaW4ga2V5IG5l
Z290aWF0aW9uLCBzZXR0aW5nIGtleSIsIGl0LT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBn
c3RfZWxlbWVudF9zZW5kX2V2ZW50KGl0LT52YWx1ZS0+cGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25l
d19jdXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwKKyAgICAgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX25ldygiZHJtLWNpcGhlciIsICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIs
IGJ1ZmZlciwgbnVsbHB0cikpKTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0QXBwZW5kU3Rh
dGUoQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpPbmdvaW5nKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBHU1RfVFJBQ0UoImFwcGVuZCBwaXBlbGluZSAlcCBub3QgaW4ga2V5IG5l
Z290aWF0aW9uIiwgaXQtPnZhbHVlLmdldCgpKTsKKyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJj
ZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykKK3sKKyAgICBpZiAoc3RhdHVzICE9
IE1lZGlhU291cmNlUHJpdmF0ZTo6RW9zTm9FcnJvcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
R1NUX0RFQlVHKCJNYXJraW5nIGVuZCBvZiBzdHJlYW0iKTsKKyAgICBtX2Vvc01hcmtlZCA9IHRy
dWU7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdAoreworICAgIGF1dG8gcG9z
aXRpb24gPSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKTsK
KworICAgIGlmIChtX2Vvc1BlbmRpbmcgJiYgKHBhdXNlZCgpIHx8IChwb3NpdGlvbiA+PSBkdXJh
dGlvbk1lZGlhVGltZSgpKSkpIHsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlh
UGxheWVyOjpMb2FkZWQpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7
CisgICAgICAgIH0KKworICAgICAgICBtX2Vvc1BlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9p
c0VuZFJlYWNoZWQgPSB0cnVlOworICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gbV9tZWRpYVRp
bWVEdXJhdGlvbi50b0Zsb2F0KCk7CisgICAgICAgIG1fZHVyYXRpb25BdEVPUyA9IG1fbWVkaWFU
aW1lRHVyYXRpb24udG9GbG9hdCgpOworICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsK
KyAgICB9CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKFVOTElL
RUxZKG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHU1RfREVCVUco
Im1heFRpbWVTZWVrYWJsZSIpOworICAgIGZsb2F0IHJlc3VsdCA9IGR1cmF0aW9uTWVkaWFUaW1l
KCkudG9Eb3VibGUoKTsKKyAgICAvLyBJbmZpbml0ZSBkdXJhdGlvbiBtZWFucyBsaXZlIHN0cmVh
bS4KKyAgICBpZiAoaXNpbmYocmVzdWx0KSkgeworICAgICAgICBNZWRpYVRpbWUgbWF4QnVmZmVy
ZWRUaW1lID0gYnVmZmVyZWQoKS0+bWF4aW11bUJ1ZmZlcmVkVGltZSgpOworICAgICAgICAvLyBS
ZXR1cm4gdGhlIGhpZ2hlc3QgZW5kIHRpbWUgcmVwb3J0ZWQgYnkgdGhlIGJ1ZmZlcmVkIGF0dHJp
YnV0ZS4KKyAgICAgICAgcmVzdWx0ID0gbWF4QnVmZmVyZWRUaW1lLmlzVmFsaWQoKSA/IG1heEJ1
ZmZlcmVkVGltZS50b0Zsb2F0KCkgOiAwOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTE1MmViZWM0YTAxMzI0NjM2YzM0MDY5NDgwMjAzNmUwNTRmNzRkMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTAsMCArMSwxMzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTYgSWdhbGlhIFMuTAorICog
Q29weXJpZ2h0IChDKSAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxh
ci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRV9oCisjZGVmaW5lIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRV9oCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICAmJiBFTkFCTEUoVklERU9fVFJBQ0sp
CisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIKKyNpbmNsdWRlICJN
ZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIKKyNp
bmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOworY2xhc3MgQXBwZW5k
UGlwZWxpbmU7CitjbGFzcyBQbGF5YmFja1BpcGVsaW5lOworCitjbGFzcyBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Up
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVNvdXJj
ZUNsaWVudEdTdHJlYW1lck1TRTsKKworcHVibGljOgorICAgIGV4cGxpY2l0IE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRShNZWRpYVBsYXllciopOworICAgIHZpcnR1YWwgfk1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRSgpOworCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRp
YUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CisKKyAgICB2b2lkIGxvYWQoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNl
UHJpdmF0ZUNsaWVudCopIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXREb3dubG9hZEJ1ZmZlcmlu
ZygpIG92ZXJyaWRlIHsgfTsKKworICAgIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOworICAgIGJvb2wgc2Vl
a2luZygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2VlayhmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIG92ZXJyaWRlOworICAgIGJvb2wgY2hhbmdlUGlw
ZWxpbmVTdGF0ZShHc3RTdGF0ZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdl
ZCgpIG92ZXJyaWRlOworICAgIE1lZGlhVGltZSBkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KSBvdmVycmlkZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBz
b3VyY2VDaGFuZ2VkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAg
ICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKKyAgICBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1l
ZGlhU291cmNlUHJpdmF0ZUNsaWVudCgpIHsgcmV0dXJuIG1fbWVkaWFTb3VyY2UuZ2V0KCk7IH0K
KworICAgIHZvaWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJl
YW1TdGF0dXMpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKKyAgICB2b2lkIGRp
c3BhdGNoRGVjcnlwdGlvbktleShHc3RCdWZmZXIqKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAg
dm9pZCB0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4sIFJlZlB0cjxXZWJDb3Jl
OjpUcmFja1ByaXZhdGVCYXNlPiBvbGRUcmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0
ZUJhc2U+IG5ld1RyYWNrKTsKKyAgICB2b2lkIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNv
bnN0IE1lZGlhVGltZSYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRl
ZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CisgICAg
c3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlh
RW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKKworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxl
KCk7CisKKyAgICAvLyBGSVhNRTogUmVkdWNlIGNvZGUgZHVwbGljYXRpb24uCisgICAgdm9pZCB1
cGRhdGVTdGF0ZXMoKSBvdmVycmlkZTsKKworICAgIGJvb2wgZG9TZWVrKGdpbnQ2NCwgZmxvYXQs
IEdzdFNlZWtGbGFncykgb3ZlcnJpZGU7CisgICAgYm9vbCBkb1NlZWsoKTsKKyAgICB2b2lkIG1h
eWJlRmluaXNoU2VlaygpOworICAgIHZvaWQgdXBkYXRlUGxheWJhY2tSYXRlKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBhc3luY1N0YXRlQ2hhbmdlRG9uZSgpIG92ZXJyaWRlOworCisgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KKyAgICB1bnNpZ25lZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSBvdmVy
cmlkZSB7IHJldHVybiAwOyB9CisgICAgdW5zaWduZWQgbG9uZyBkcm9wcGVkVmlkZW9GcmFtZXMo
KSBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdW5zaWduZWQgbG9uZyBjb3JydXB0ZWRWaWRl
b0ZyYW1lcygpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBNZWRpYVRpbWUgdG90YWxGcmFt
ZURlbGF5KCkgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9CisgICAg
Ym9vbCBpc1RpbWVCdWZmZXJlZChjb25zdCBNZWRpYVRpbWUmKSBjb25zdDsKKworICAgIGJvb2wg
aXNNZWRpYVNvdXJjZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZv
aWQgc2V0TWVkaWFTb3VyY2VDbGllbnQoUGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJl
YW1lck1TRT4pOworICAgIFJlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gbWVk
aWFTb3VyY2VDbGllbnQoKTsKKworICAgIEhhc2hNYXA8UmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXI+LCBSZWZQdHI8QXBwZW5kUGlwZWxpbmU+PiBtX2FwcGVuZFBpcGVsaW5lc01h
cDsKKyAgICBib29sIG1fZW9zTWFya2VkOworICAgIG11dGFibGUgYm9vbCBtX2Vvc1BlbmRpbmc7
CisgICAgYm9vbCBtX2dzdFNlZWtDb21wbGV0ZWQ7CisgICAgUmVmUHRyPE1lZGlhU291cmNlUHJp
dmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U+IG1fbWVkaWFTb3VyY2VDbGllbnQ7CisgICAgTWVkaWFUaW1lIG1fbWVkaWFU
aW1lRHVyYXRpb247CisgICAgYm9vbCBtX21zZVNlZWtDb21wbGV0ZWQ7CisgICAgUmVmUHRyPFBs
YXliYWNrUGlwZWxpbmU+IG1fcGxheWJhY2tQaXBlbGluZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290594</attachid>
            <date>2016-10-04 05:39:32 -0700</date>
            <delta_ts>2016-10-16 12:06:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162900-20161004123621.patch</filename>
            <type>text/plain</type>
            <size>41517</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYwN2E2YzdkYzg3MWUy
Zjc3YmMyMmJlMmRlMTI0NWQ2NjUzOGFiYy4uNDYxOTAyOGExZGUxYzAzMDY0YzgzNjUxODM5Nzc2
MDIwMTk0ZDA5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYyIEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJp
dmF0ZSBmb3IgR1N0cmVhbWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI5MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZWZhY3RvciBNU0Utc3BlY2lmaWMgbG9naWMgdG8gaXRzIG93biBHU3RyZWFt
ZXIgcGxheWVyLiBUaGlzIG5ldyBNU0UgcGxheWVyIGNvb3JkaW5hdGVzCisgICAgICAgIGRhdGEg
YXBwZW5kaW5nLCBtZWRpYSBwbGF5YmFjayBhbmQgaW50ZXJhY3Rpb24gd2l0aCBNZWRpYVNvdXJj
ZSBieSBkZWxlZ2F0aW5nIHRvCisgICAgICAgIEFwcGVuZFBpcGVsaW5lIChvbmUgaW5zdGFuY2Ug
cGVyIFNvdXJjZUJ1ZmZlciksIFBsYXliYWNrUGlwZWxpbmUgYW5kCisgICAgICAgIE1lZGlhU291
cmNlQ2xpZW50R1N0cmVhbWVyTVNFL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudCByZXNwZWN0aXZl
bHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRoIFBoaWxpcHBlIE5v
cm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+IChFTUUgc3VwcG9ydCkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE1l
ZGlhRW5naW5lc1ZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KGR1bXBSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0
aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25N
ZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6Y29uZmlndXJlUGxheVNpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpjaGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bm90aWZ5U2Vla05lZWRzRGF0YUZv
clRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjptYXliZUZpbmlzaFNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVraW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRGb3JTZWVr
Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OnNldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3luY1N0YXRlQ2hh
bmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OmlzVGltZUJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6c2V0TWVkaWFTb3VyY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJjZUNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0Rl
dGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVudE1lZGlhVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1h
eFRpbWVTZWVrYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1lZGlhU291cmNlUHJpdmF0ZUNs
aWVudCk6CisKKzIwMTYtMTAtMDQgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAgPGVvY2FuaGFA
aWdhbGlhLmNvbT4KKwogICAgICAgICBbR1N0cmVhbWVyXVtNU0VdIE1lZGlhU291cmNlR1N0cmVh
bWVyIHJlZmFjdG9yaW5nCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI4OTkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCmluZGV4IDhiNTFlNjAwNmEyNTcyMGRiZTdiNzI1OTQ5ZmNmYzg1ZmIw
MjcwMDMuLjNlYzJmOTM2OGVlOGU4NTA5M2QwYTM2MzQyNTZmZTNmYmI4ODc5NjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTU3
LDcgKzU3LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyT3dyLmgi
CiAjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TT1VS
Q0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UuaCIKICNlbmRpZgorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCiAKICNpZiBV
U0UoTUVESUFfRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVNZWRpYUZv
dW5kYXRpb24uaCIKQEAgLTIyOSw2ICsyMzIsMTAgQEAgc3RhdGljIHZvaWQgYnVpbGRNZWRpYUVu
Z2luZXNWZWN0b3IoKQogICAgIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWU6OnJlZ2lzdGVy
TWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnJlZ2lzdGVyTWVk
aWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCisKICAgICBoYXZlTWVkaWFFbmdpbmVz
VmVjdG9yKCkgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmM2NDEwNGYzMGE4NWU1
YmI1MmQ3Mzc0NjBhMmRhMDY4YmJmMjM3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmNwcApAQCAtMCwwICsxLDg0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE2IElnYWxpYSBTLkwKKyAqIENvcHly
aWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVE
SUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJBcHBlbmRQaXBl
bGluZS5oIgorI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJN
ZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAi
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBw
c2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2dz
dC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKyNpbmNsdWRlIDxnc3Qvdmlk
ZW8vdmlkZW8uaD4KKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworc3RhdGljIGNvbnN0
IGNoYXIqIGR1bXBSZWFkeVN0YXRlKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJl
YWR5U3RhdGUpCit7CisgICAgc3dpdGNoIChyZWFkeVN0YXRlKSB7CisgICAgY2FzZSBXZWJDb3Jl
OjpNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc6IHJldHVybiAiSGF2ZU5vdGhpbmciOworICAgIGNh
c2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTogcmV0dXJuICJIYXZlTWV0YWRh
dGEiOworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTogcmV0
dXJuICJIYXZlQ3VycmVudERhdGEiOworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Okhh
dmVGdXR1cmVEYXRhOiByZXR1cm4gIkhhdmVGdXR1cmVEYXRhIjsKKyAgICBjYXNlIFdlYkNvcmU6
Ok1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTogcmV0dXJuICJIYXZlRW5vdWdoRGF0YSI7Cisg
ICAgZGVmYXVsdDogcmV0dXJuICIodW5rbm93bikiOworICAgIH0KK30KKworLy8gTWF4IGludGVy
dmFsIGluIHNlY29uZHMgdG8gc3RheSBpbiB0aGUgUkVBRFkgc3RhdGUgb24gbWFudWFsIHN0YXRl
IGNoYW5nZSByZXF1ZXN0cy4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBnUmVhZHlTdGF0ZVRpbWVy
SW50ZXJ2YWwgPSA2MDsKKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tc2VfZGVidWcpOwor
I2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21zZV9kZWJ1ZworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpyZWdpc3Rlck1l
ZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNB
dmFpbGFibGUoKSkgeworICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikg
eyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U+
KHBsYXllcik7IH0sCisgICAgICAgICAgICBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBl
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBzdXBwb3J0c0tleVN5c3RlbSk7CisgICAgfQor
fQorCitib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdE1TRUVsZW1lbnQo
KQoreworICAgIGlmIChVTkxJS0VMWSghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cygpOwor
CisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21zZV9kZWJ1ZywgIndlYmtpdG1z
ZSIsIDAsICJXZWJLaXQgTVNFIG1lZGlhIHBsYXllciIpOworCisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50RmFjdG9yeT4gV2ViS2l0TWVkaWFTcmNGYWN0b3J5ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2ZhY3RvcnlfZmluZCgid2Via2l0bWVkaWFzcmMiKSk7CisgICAgaWYgKFVOTElLRUxZKCFXZWJL
aXRNZWRpYVNyY0ZhY3RvcnkpKQorICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRy
LCAid2Via2l0bWVkaWFzcmMiLCBHU1RfUkFOS19QUklNQVJZICsgMTAwLCBXRUJLSVRfVFlQRV9N
RURJQV9TUkMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6aXNBdmFpbGFibGUoKQoreworICAgIGlmIChVTkxJS0VMWSghaW5pdGlh
bGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0TVNFRWxlbWVudCgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gZmFjdG9yeSA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoInBsYXliaW4iKSk7CisgICAgcmV0dXJu
IGZhY3Rvcnk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIocGxheWVyKQorICAgICwgbV9lb3NNYXJrZWQoZmFsc2UpCisg
ICAgLCBtX2Vvc1BlbmRpbmcoZmFsc2UpCisgICAgLCBtX2dzdFNlZWtDb21wbGV0ZWQodHJ1ZSkK
KyAgICAsIG1fbXNlU2Vla0NvbXBsZXRlZCh0cnVlKQoreworICAgIEdTVF9ERUJVRygiJXAiLCB0
aGlzKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFKCkKK3sKKyAgICBHU1RfREVCVUcoImRlc3Ryb3lpbmcgdGhlIHBs
YXllciIpOworCisgICAgZm9yIChIYXNoTWFwPFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyPiwgUmVmUHRyPEFwcGVuZFBpcGVsaW5lPj46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9h
cHBlbmRQaXBlbGluZXNNYXAuYmVnaW4oKTsgaXRlcmF0b3IgIT0gbV9hcHBlbmRQaXBlbGluZXNN
YXAuZW5kKCk7ICsraXRlcmF0b3IpCisgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+Y2xlYXJQbGF5
ZXJQcml2YXRlKCk7CisKKyAgICBpZiAobV9zb3VyY2UpIHsKKyAgICAgICAgd2ViS2l0TWVkaWFT
cmNTZXRNZWRpYVBsYXllclByaXZhdGUoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSks
IG51bGxwdHIpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEo
bV9zb3VyY2UuZ2V0KCksIHRoaXMpOworICAgIH0KKworICAgIGlmIChtX3BsYXliYWNrUGlwZWxp
bmUpCisgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZS0+c2V0V2ViS2l0TWVkaWFTcmMobnVsbHB0
cik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpsb2FkKGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIGlmIChVTkxJS0VMWSghaW5pdGlhbGl6ZUdTdHJl
YW1lckFuZFJlZ2lzdGVyV2ViS2l0TVNFRWxlbWVudCgpKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCF1cmxTdHJpbmcuc3RhcnRzV2l0aCgibWVkaWFzb3VyY2UiKSkgeworICAgICAgICBH
U1RfREVCVUcoIlVuc3VwcG9ydGVkIHVybDogJXMiLCB1cmxTdHJpbmcudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcGxheWJhY2tQaXBlbGluZSkK
KyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lID0gUGxheWJhY2tQaXBlbGluZTo6Y3JlYXRlKCk7
CisKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQodXJsU3RyaW5nKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmxvYWQoY29uc3QgU3RyaW5n
JiB1cmwsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbWVkaWFTb3VyY2UpCit7CisgICAgU3Ry
aW5nIG1lZGlhc291cmNlVXJpID0gU3RyaW5nOjpmb3JtYXQoIm1lZGlhc291cmNlJXMiLCB1cmwu
dXRmOCgpLmRhdGEoKSk7CisgICAgbV9tZWRpYVNvdXJjZSA9IG1lZGlhU291cmNlOworICAgIGxv
YWQobWVkaWFzb3VyY2VVcmkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6cGF1c2UoKQoreworICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnBhdXNlKCk7Cit9CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKK3sKKyAgICBpZiAoVU5M
SUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgcmV0dXJuIG1fbWVkaWFUaW1lRHVyYXRpb247Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGZsb2F0IHRpbWUpCit7CisgICAgaWYgKFVOTElL
RUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1NUX0lORk8oIltTZWVrXSBzZWVrIGF0dGVtcHQgdG8gJWYgc2VjcyIsIHRpbWUpOworCisg
ICAgLy8gQXZvaWQgdXNlbGVzcyBzZWVraW5nLgorICAgIGZsb2F0IGN1cnJlbnQgPSBjdXJyZW50
TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKKyAgICBpZiAodGltZSA9PSBjdXJyZW50KSB7CisgICAg
ICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICAgICAgdGltZUNoYW5nZWQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fc2Vla2luZyAmJiBtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgbV9z
ZWVrVGltZSA9IHRpbWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHU1RfREVCVUco
IlNlZWtpbmcgZnJvbSAlZiB0byAlZiBzZWNvbmRzIiwgY3VycmVudCwgdGltZSk7CisKKyAgICBm
bG9hdCBwcmV2U2Vla1RpbWUgPSBtX3NlZWtUaW1lOworICAgIG1fc2Vla1RpbWUgPSB0aW1lOwor
CisgICAgaWYgKCFkb1NlZWsoKSkgeworICAgICAgICBtX3NlZWtUaW1lID0gcHJldlNlZWtUaW1l
OworICAgICAgICBHU1RfREVCVUcoIlNlZWtpbmcgdG8gJWYgZmFpbGVkIiwgdGltZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOworICAgIEdT
VF9ERUJVRygibV9zZWVraW5nPSVzLCBtX3NlZWtUaW1lPSVmIiwgbV9zZWVraW5nID8gInRydWUi
IDogImZhbHNlIiwgbV9zZWVrVGltZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpjb25maWd1cmVQbGF5U2luaygpCit7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjb25maWd1cmVQbGF5U2luaygpOworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBwbGF5c2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU4obV9waXBl
bGluZS5nZXQoKSksICJwbGF5c2luayIpKTsKKyAgICBpZiAocGxheXNpbmspIHsKKyAgICAgICAg
Ly8gVGhlIGRlZmF1bHQgdmFsdWUgKDApIG1lYW5zICJzZW5kIGV2ZW50cyB0byBhbGwgdGhlIHNp
bmtzIiwgaW5zdGVhZAorICAgICAgICAvLyBvZiAib25seSB0byB0aGUgZmlyc3QgdGhhdCByZXR1
cm5zIHRydWUiLiBUaGlzIGlzIG5lZWRlZCBmb3IgTVNFIHNlZWsuCisgICAgICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChwbGF5c2luay5nZXQoKSksICJzZW5kLWV2ZW50LW1vZGUiLCAwLCBOVUxM
KTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjaGFu
Z2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlIG5ld1N0YXRlKQoreworICAgIGlmIChzZWVraW5nKCkp
IHsKKyAgICAgICAgR1NUX0RFQlVHKCJSZWplY3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2hpbGUg
c2Vla2luZyIsCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0
ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRlKG5ld1N0YXRlKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om5vdGlmeVNlZWtOZWVkc0RhdGFG
b3JUaW1lKGNvbnN0IE1lZGlhVGltZSYgc2Vla1RpbWUpCit7CisgICAgLy8gUmVlbnF1ZXVlIHNh
bXBsZXMgbmVlZGVkIHRvIHJlc3VtZSBwbGF5YmFjayBpbiB0aGUgbmV3IHBvc2l0aW9uLgorICAg
IG1fbWVkaWFTb3VyY2UtPnNlZWtUb1RpbWUoc2Vla1RpbWUpOworCisgICAgR1NUX0RFQlVHKCJN
U0Ugc2VlayB0byAlZiBmaW5pc2hlZCIsIHNlZWtUaW1lLnRvRG91YmxlKCkpOworCisgICAgaWYg
KCFtX2dzdFNlZWtDb21wbGV0ZWQpIHsKKyAgICAgICAgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1
ZTsKKyAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7CisgICAgfQorfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKGdpbnQ2NCwgZmxvYXQsIEdzdFNlZWtGbGFn
cykKK3sKKyAgICAvLyBVc2UgZG9TZWVrKCkgaW5zdGVhZC4gSWYgYW55Ym9keSBpcyBjYWxsaW5n
IHRoaXMgdmVyc2lvbiBvZiBkb1NlZWsoKSwgc29tZXRoaW5nIGlzIHdyb25nLgorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OmRvU2VlaygpCit7CisgICAgR3N0Q2xvY2tUaW1lIHBvc2l0
aW9uID0gdG9Hc3RDbG9ja1RpbWUobV9zZWVrVGltZSk7CisgICAgTWVkaWFUaW1lIHNlZWtUaW1l
ID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1fc2Vla1RpbWUpOworICAgIGRvdWJsZSBy
YXRlID0gbV9wbGF5ZXItPnJhdGUoKTsKKyAgICBHc3RTZWVrRmxhZ3Mgc2Vla1R5cGUgPSBzdGF0
aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFH
X0FDQ1VSQVRFKTsKKworICAgIC8vIEFsd2F5cyBtb3ZlIHRvIHNlZWtpbmcgc3RhdGUgdG8gcmVw
b3J0IGNvcnJlY3QgJ2N1cnJlbnRUaW1lJyB3aGlsZSBwZW5kaW5nIGZvciBhY3R1YWwgc2VlayB0
byBjb21wbGV0ZS4KKyAgICBtX3NlZWtpbmcgPSB0cnVlOworCisgICAgLy8gQ2hlY2sgaWYgcGxh
eWJhY2sgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNlZWsuCisgICAgR3N0U3RhdGUgc3RhdGUsIG5l
d1N0YXRlOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsK
KyAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIHx8IGdl
dFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCkgeworICAgICAgICBH
U1RfREVCVUcoIltTZWVrXSBjYW5ub3Qgc2VlaywgY3VycmVudCBzdGF0ZSBjaGFuZ2UgaXMgJXMi
LCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lKGdldFN0YXRlUmVzdWx0
KSk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJ
QV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKKyAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKChnZXRTdGF0ZVJlc3VsdCA9
PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DCisgICAgICAgICYmICEoc3RhdGUgPT0gR1NUX1NUQVRF
X1BMQVlJTkcgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkpCisgICAgICAgIHx8IHN0
YXRlIDwgR1NUX1NUQVRFX1BBVVNFRAorICAgICAgICB8fCBtX2lzRW5kUmVhY2hlZAorICAgICAg
ICB8fCAhbV9nc3RTZWVrQ29tcGxldGVkKSB7CisgICAgICAgIENTdHJpbmcgcmVhc29uID0gIlVu
a25vd24gcmVhc29uIjsKKyAgICAgICAgaWYgKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9D
SEFOR0VfQVNZTkMpIHsKKyAgICAgICAgICAgIHJlYXNvbiA9IFN0cmluZzo6Zm9ybWF0KCJJbiBh
c3luYyBjaGFuZ2UgJXMgLS0+ICVzIiwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0
ZV9nZXRfbmFtZShzdGF0ZSksCisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUobmV3U3RhdGUpKS51dGY4KCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPCBHU1Rf
U1RBVEVfUEFVU0VEKQorICAgICAgICAgICAgcmVhc29uID0gIlN0YXRlIGxlc3MgdGhhbiBQQVVT
RUQiOworICAgICAgICBlbHNlIGlmIChtX2lzRW5kUmVhY2hlZCkKKyAgICAgICAgICAgIHJlYXNv
biA9ICJFbmQgcmVhY2hlZCI7CisgICAgICAgIGVsc2UgaWYgKCFtX2dzdFNlZWtDb21wbGV0ZWQp
CisgICAgICAgICAgICByZWFzb24gPSAiUHJldmlvdXMgc2VlayBpcyBub3QgZmluaXNoZWQgeWV0
IjsKKworICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBEZWxheWluZyB0aGUgc2VlazogJXMiLCBy
ZWFzb24uZGF0YSgpKTsKKworICAgICAgICBtX3NlZWtJc1BlbmRpbmcgPSB0cnVlOworCisgICAg
ICAgIGlmIChtX2lzRW5kUmVhY2hlZCkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10g
cmVzZXQgcGlwZWxpbmUiKTsKKyAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IHRydWU7Cisg
ICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY2hhbmdlUGlw
ZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKSkKKyAgICAgICAgICAgICAgICBsb2FkaW5nRmFp
bGVkKE1lZGlhUGxheWVyOjpFbXB0eSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9zZWVraW5nID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX3NlZWtp
bmc7CisgICAgfQorCisgICAgLy8gU3RvcCBhY2NlcHRpbmcgbmV3IHNhbXBsZXMgdW50aWwgYWN0
dWFsIHNlZWsgaXMgZmluaXNoZWQuCisgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBs
ZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIGZhbHNlKTsKKworICAgIC8vIENv
cnJlY3Qgc2VlayB0aW1lIGlmIGl0IGhlbHBzIHRvIGZpeCBhIHNtYWxsIGdhcC4KKyAgICBpZiAo
IWlzVGltZUJ1ZmZlcmVkKHNlZWtUaW1lKSkgeworICAgICAgICAvLyBMb29rIGlmIGEgbmVhciBm
dXR1cmUgdGltZSAoPDAuMSBzZWMuKSBpcyBidWZmZXJlZCBhbmQgY2hhbmdlIHRoZSBzZWVrIHRh
cmdldCB0aW1lLgorICAgICAgICBpZiAobV9tZWRpYVNvdXJjZSkgeworICAgICAgICAgICAgY29u
c3QgTWVkaWFUaW1lIG1pbmlHYXAgPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoMC4xKTsK
KyAgICAgICAgICAgIE1lZGlhVGltZSBuZWFyZXN0ID0gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQo
KS0+bmVhcmVzdChzZWVrVGltZSk7CisgICAgICAgICAgICBpZiAobmVhcmVzdC5pc1ZhbGlkKCkg
JiYgbmVhcmVzdCA+IHNlZWtUaW1lICYmIChuZWFyZXN0IC0gc2Vla1RpbWUpIDw9IG1pbmlHYXAg
JiYgaXNUaW1lQnVmZmVyZWQobmVhcmVzdCArIG1pbmlHYXApKSB7CisgICAgICAgICAgICAgICAg
R1NUX0RFQlVHKCJbU2Vla10gQ2hhbmdlZCB0aGUgc2VlayB0YXJnZXQgdGltZSBmcm9tICVmIHRv
ICVmLCBhIG5lYXIgcG9pbnQgaW4gdGhlIGZ1dHVyZSIsIHNlZWtUaW1lLnRvRmxvYXQoKSwgbmVh
cmVzdC50b0Zsb2F0KCkpOworICAgICAgICAgICAgICAgIHNlZWtUaW1lID0gbmVhcmVzdDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGlmIE1TRSBoYXMg
c2FtcGxlcyBmb3IgcmVxdWVzdGVkIHRpbWUgYW5kIGRlZmVyIGFjdHVhbCBzZWVrIGlmIG5lZWRl
ZC4KKyAgICBpZiAoIWlzVGltZUJ1ZmZlcmVkKHNlZWtUaW1lKSkgeworICAgICAgICBHU1RfREVC
VUcoIltTZWVrXSBEZWxheWluZyB0aGUgc2VlazogTVNFIGlzIG5vdCByZWFkeSIpOworICAgICAg
ICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgaWYgKHNl
dFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgeworICAgICAgICAgICAg
R1NUX0RFQlVHKCJbU2Vla10gQ2Fubm90IHNlZWssIGZhaWxlZCB0byBwYXVzZSBwbGF5YmFjayBw
aXBlbGluZS4iKTsKKyAgICAgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVz
KFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKKyAgICAgICAgICAgIG1f
c2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgICAg
IG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKHNlZWtUaW1lKTsKKyAgICAgICAgQVNTRVJUKCFt
X21zZVNlZWtDb21wbGV0ZWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBDb21wbGV0ZSBwcmV2aW91cyBNU0Ugc2VlayBpZiBuZWVkZWQuCisgICAgaWYgKCFtX21zZVNl
ZWtDb21wbGV0ZWQpIHsKKyAgICAgICAgbV9tZWRpYVNvdXJjZS0+bW9uaXRvclNvdXJjZUJ1ZmZl
cnMoKTsKKyAgICAgICAgQVNTRVJUKG1fbXNlU2Vla0NvbXBsZXRlZCk7CisgICAgICAgIC8vIE5v
dGU6IHNlZWtDb21wbGV0ZWQgd2lsbCByZWN1cnNpdmVseSBjYWxsIHVzLgorICAgICAgICByZXR1
cm4gbV9zZWVraW5nOworICAgIH0KKworICAgIEdTVF9ERUJVRygiV2UgY2FuIHNlZWsgbm93Iik7
CisKKyAgICBnaW50NjQgc3RhcnRUaW1lLCBlbmRUaW1lOworCisgICAgaWYgKHJhdGUgPiAwKSB7
CisgICAgICAgIHN0YXJ0VGltZSA9IHBvc2l0aW9uOworICAgICAgICBlbmRUaW1lID0gR1NUX0NM
T0NLX1RJTUVfTk9ORTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGFydFRpbWUgPSAwOworICAg
ICAgICBlbmRUaW1lID0gcG9zaXRpb247CisgICAgfQorCisgICAgaWYgKCFyYXRlKQorICAgICAg
ICByYXRlID0gMTsKKworICAgIEdTVF9ERUJVRygiQWN0dWFsIHNlZWsgdG8gJSIgR1NUX1RJTUVf
Rk9STUFUICIsIGVuZCB0aW1lOiAgJSIgR1NUX1RJTUVfRk9STUFUICIsIHJhdGU6ICVmIiwgR1NU
X1RJTUVfQVJHUyhzdGFydFRpbWUpLCBHU1RfVElNRV9BUkdTKGVuZFRpbWUpLCByYXRlKTsKKwor
ICAgIC8vIFRoaXMgd2lsbCBjYWxsIG5vdGlmeVNlZWtOZWVkc0RhdGEoKSBhZnRlciBzb21lIHRp
bWUgdG8gdGVsbCB0aGF0IHRoZSBwaXBlbGluZSBpcyByZWFkeSBmb3Igc2FtcGxlIGVucXVldWlu
Zy4KKyAgICB3ZWJLaXRNZWRpYVNyY1ByZXBhcmVTZWVrKFdFQktJVF9NRURJQV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpLCBzZWVrVGltZSk7CisKKyAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSBmYWxzZTsK
KyAgICBpZiAoIWdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQoKSwgcmF0ZSwgR1NUX0ZP
Uk1BVF9USU1FLCBzZWVrVHlwZSwgR1NUX1NFRUtfVFlQRV9TRVQsIHN0YXJ0VGltZSwgR1NUX1NF
RUtfVFlQRV9TRVQsIGVuZFRpbWUpKSB7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlG
b3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKKyAgICAg
ICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IHRydWU7
CisgICAgICAgIEdTVF9ERUJVRygiUmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgc2FtcGxlcyB3aWxsIGJlIGVucXVldWVkIGluIG5v
dGlmeVNlZWtOZWVkc0RhdGEoKS4KKyAgICBHU1RfREVCVUcoIlJldHVybmluZyB0cnVlIik7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjptYXliZUZpbmlzaFNlZWsoKQoreworICAgIGlmICghbV9zZWVraW5nIHx8ICFtX21zZVNlZWtD
b21wbGV0ZWQgfHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R3N0U3RhdGUgc3RhdGUsIG5ld1N0YXRlOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0
YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0
ZSwgJm5ld1N0YXRlLCAwKTsKKworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVf
Q0hBTkdFX0FTWU5DCisgICAgICAgICYmICEoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYg
bmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJbU2Vl
a10gRGVsYXlpbmcgc2VlayBmaW5pc2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gQ29tbWl0
dGluZyBwZW5kaW5nIHNlZWsgdG8gJWYiLCBtX3NlZWtUaW1lKTsKKyAgICAgICAgbV9zZWVrSXNQ
ZW5kaW5nID0gZmFsc2U7CisgICAgICAgIGlmICghZG9TZWVrKCkpIHsKKyAgICAgICAgICAgIEdT
VF9ERUJVRygiW1NlZWtdIFNlZWtpbmcgdG8gJWYgZmFpbGVkIiwgbV9zZWVrVGltZSk7CisgICAg
ICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEdTVF9ERUJVRygiW1NlZWtdIFNlZWtlZCB0byAlZiIsIG1fc2Vla1Rp
bWUpOworCisgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElB
X1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUpOworICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAg
IG1fY2FjaGVkUG9zaXRpb24gPSAtMTsKKyAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhh
dmUgYSBwZW5kaW5nIHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZh
aWwuCisgICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2UgbV9zZWVrVGltZSBhcyBhIGZhbGxiYWNr
LgorICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRydWU7Cisg
ICAgdGltZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NlZWtpbmc7Cit9CisKKy8vIEZJWE1FOiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIgbWFuYWdlcyB0aGUgUmVhZHlTdGF0ZSBvbiBpdHMgb3duLiBXZSBzaG91bGRuJ3Qg
Y2hhbmdlIGl0IG1hbnVhbGx5Lgordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAg
ICBpZiAocmVhZHlTdGF0ZSA9PSBtX3JlYWR5U3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChzZWVraW5nKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJTa2lwIHJlYWR5IHN0YXRlIGNo
YW5nZSglcyAtPiAlcykgZHVlIHRvIHNlZWtcbiIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0
ZSksIGR1bXBSZWFkeVN0YXRlKHJlYWR5U3RhdGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdTVF9ERUJVRygiUmVhZHkgU3RhdGUgQ2hhbmdlZCBtYW51YWxseSBmcm9tICV1IHRv
ICV1IiwgbV9yZWFkeVN0YXRlLCByZWFkeVN0YXRlKTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOworICAgIG1fcmVhZHlTdGF0ZSA9IHJl
YWR5U3RhdGU7CisgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU6ICVzIC0+ICVzIiwgZHVtcFJl
YWR5U3RhdGUob2xkUmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwor
CisgICAgaWYgKG9sZFJlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhICYm
IG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhKSB7CisgICAgICAg
IEdTVF9ERUJVRygiW1NlZWtdIFJlcG9ydGluZyBsb2FkIHN0YXRlIGNoYW5nZWQgdG8gdHJpZ2dl
ciBzZWVrIGNvbnRpbnVhdGlvbiIpOworICAgICAgICBsb2FkU3RhdGVDaGFuZ2VkKCk7CisgICAg
fQorICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgR3N0U3RhdGUgcGlw
ZWxpbmVTdGF0ZTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdz
dF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmcGlwZWxpbmVTdGF0ZSwgbnVs
bHB0ciwgMjUwICogR1NUX05TRUNPTkQpOworICAgIGJvb2wgaXNQbGF5aW5nID0gKGdldFN0YXRl
UmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBwaXBlbGluZVN0YXRlID09IEdT
VF9TVEFURV9QTEFZSU5HKTsKKworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTWVkaWFQbGF5ZXI6
OkhhdmVNZXRhZGF0YSAmJiBvbGRSZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0
YSAmJiBpc1BsYXlpbmcpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJDaGFuZ2luZyBwaXBlbGluZSB0
byBQQVVTRUQuLi4iKTsKKyAgICAgICAgYm9vbCBvayA9IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NU
X1NUQVRFX1BBVVNFRCk7CisgICAgICAgIEdTVF9ERUJVRygiQ2hhbmdlZCBwaXBlbGluZSB0byBQ
QVVTRUQ6ICVzIiwgb2sgPyAiU3VjY2VzcyIgOiAiRXJyb3IiKTsKKyAgICB9Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7
CisgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygi
V2FpdGluZyBmb3IgTVNFIHNlZWsgY29tcGxldGVkIik7CisgICAgbV9tc2VTZWVrQ29tcGxldGVk
ID0gZmFsc2U7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVr
Q29tcGxldGVkKCkKK3sKKyAgICBpZiAobV9tc2VTZWVrQ29tcGxldGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBHU1RfREVCVUcoIk1TRSBzZWVrIGNvbXBsZXRlZCIpOworICAgIG1fbXNlU2Vl
a0NvbXBsZXRlZCA9IHRydWU7CisKKyAgICBkb1NlZWsoKTsKKworICAgIGlmICghc2Vla2luZygp
ICYmIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEpCisgICAgICAg
IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgaWYgKCFzZWVr
aW5nKCkpCisgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmF0ZShmbG9hdCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQoKQoreworICAgIG1fc291cmNlLmNsZWFyKCk7
CisgICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJzb3VyY2UiLCAmbV9zb3VyY2Uu
b3V0UHRyKCksIG51bGxwdHIpOworCisgICAgQVNTRVJUKFdFQktJVF9JU19NRURJQV9TUkMobV9z
b3VyY2UuZ2V0KCkpKTsKKworICAgIG1fcGxheWJhY2tQaXBlbGluZS0+c2V0V2ViS2l0TWVkaWFT
cmMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSkpOworCisgICAgTWVkaWFTb3VyY2VH
U3RyZWFtZXI6Om9wZW4obV9tZWRpYVNvdXJjZS5nZXQoKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJB
Q0sodmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV9zb3VyY2UuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhhdWRpb0No
YW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Nv
dXJjZS5nZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJ
VF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0aGlzKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygpCit7CisgICAgaWYgKFVOTElLRUxZ
KCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0
ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0
YXRlOworICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5nOworCisgICAgR3N0U3RhdGVDaGFuZ2VS
ZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NUX05TRUNPTkQpOworCisgICAgYm9vbCBz
aG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7CisgICAgc3dpdGNoIChnZXRTdGF0ZVJl
c3VsdCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOiB7CisgICAgICAgIEdT
VF9ERUJVRygiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9u
YW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworCisgICAg
ICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0ZSBjaGFuZ2VkIHRvIFJFQURZIHRv
IGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgorICAgICAgICAvLyBvbiBIVE1MTWVkaWFFbGVt
ZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8gJ2VuZGVkJyBldmVudC4KKyAgICAg
ICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IChzdGF0ZSA8PSBHU1Rf
U1RBVEVfUkVBRFkpOworICAgICAgICBpZiAoc3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZKQorICAg
ICAgICAgICAgbV9tZWRpYVRpbWVEdXJhdGlvbiA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKwor
ICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgorICAgICAgICBzd2l0
Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6CisgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBHU1Rf
REVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwor
ICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1wdHk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6CisgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICAgICAgR1NU
X0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsK
KyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKKyAgICAgICAgY2Fz
ZSBHU1RfU1RBVEVfUExBWUlORzoKKyAgICAgICAgICAgIGlmIChzZWVraW5nKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgbWFuYWdlIE5ldHdvcmtTdGF0ZSB0b28/
CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlT
dGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9idWZmZXJpbmcp
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgewor
ICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoIltCdWZmZXJpbmddIENvbXBsZXRlLiIpOwor
ICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlcmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAg
ICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUo
bV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbV9k
b3dubG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGlu
ZzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgICAgICAgICAgICAgICAg
ICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0
ZSkpOworICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpM
b2FkaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3du
bG9hZEZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0
YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVy
ZURhdGE7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1w
UmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAobV9lb3NNYXJrZWQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCisgICAgICAgICAg
ICAgICAgbV9lb3NQZW5kaW5nID0gdHJ1ZTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3luYyBzdGF0ZXMgd2hlcmUgbmVlZGVk
LgorICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAg
aWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgeworICAgICAgICAgICAgICAgIG5vdGlm
eVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CisgICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZN
dXRlKCk7CisgICAgICAgICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXNlZWtpbmcoKSAmJiAhbV9idWZm
ZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAgICAgICAg
R1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOworICAgICAgICAg
ICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Cisg
ICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoKG1fYnVmZmVy
aW5nICYmICFpc0xpdmVTdHJlYW0oKSkgfHwgIW1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAg
ICAgICAgR1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5n
LiIpOworICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNF
RCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9wYXVzZWQg
PSB0cnVlOworCisgICAgICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVT
RUQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgc2hvdWxkVXBk
YXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVCVUcoIlJlcXVlc3Rl
ZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2FzIGNvbXBsZXRlZCIsIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKHN0YXRlKSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAgICAgICBHU1RfREVCVUcoIkFzeW5jOiBT
dGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUp
LCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5n
ZSBpbiBwcm9ncmVzcy4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdF
X0ZBSUxVUkU6CisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsdXJlOiBTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBmYWlsZWQuCisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKKyAgICAg
ICAgR1NUX0RFQlVHKCJObyBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2Vs
ZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShw
ZW5kaW5nKSk7CisKKyAgICAgICAgLy8gTGl2ZSBwaXBlbGluZXMgZ28gaW4gUEFVU0VEIHdpdGhv
dXQgcHJlcm9sbGluZy4KKyAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRydWU7CisKKyAgICAgICAg
aWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3Jl
YWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICBHU1RfREVC
VUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAg
ICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdT
VF9TVEFURV9QTEFZSU5HKQorICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKworICAgICAg
ICBpZiAoIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKQorICAgICAgICAgICAgY2hhbmdlUGlw
ZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR1NUX0RFQlVHKCJFbHNlIDogJWQiLCBnZXRTdGF0ZVJlc3VsdCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9QRU5E
SU5HOworCisgICAgaWYgKHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUpCisgICAgICAgIG1fcGxh
eWVyLT5wbGF5YmFja1N0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9
IG9sZE5ldHdvcmtTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUcoIk5ldHdvcmsgU3RhdGUgQ2hh
bmdlZCBmcm9tICV1IHRvICV1Iiwgb2xkTmV0d29ya1N0YXRlLCBtX25ldHdvcmtTdGF0ZSk7Cisg
ICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmICht
X3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUcoIlJlYWR5
IFN0YXRlIENoYW5nZWQgZnJvbSAldSB0byAldSIsIG9sZFJlYWR5U3RhdGUsIG1fcmVhZHlTdGF0
ZSk7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAg
IGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgc3RhdGUg
Pj0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKKyAg
ICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7CisgICAgfQorfQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKK3sKKyAgICBpZiAoVU5MSUtF
TFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9zZWVraW5nKQorICAgICAgICBtYXliZUZpbmlzaFNlZWsoKTsKKyAgICBlbHNlCisg
ICAgICAgIHVwZGF0ZVN0YXRlcygpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6aXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lICZ0aW1lKSBjb25zdAorewor
ICAgIGJvb2wgcmVzdWx0ID0gbV9tZWRpYVNvdXJjZSAmJiBtX21lZGlhU291cmNlLT5idWZmZXJl
ZCgpLT5jb250YWluKHRpbWUpOworICAgIEdTVF9ERUJVRygiVGltZSAlZiBidWZmZXJlZD8gJXMi
LCB0aW1lLnRvRG91YmxlKCksIHJlc3VsdCA/ICJZZXMiIDogIk5vIik7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldE1lZGlh
U291cmNlQ2xpZW50KFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IGNs
aWVudCkKK3sKKyAgICBtX21lZGlhU291cmNlQ2xpZW50ID0gY2xpZW50OworfQorCitSZWZQdHI8
TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6bWVkaWFTb3VyY2VDbGllbnQoKQoreworICAgIHJldHVybiBtX21lZGlhU291cmNlQ2xp
ZW50OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25D
aGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fbWVkaWFTb3VyY2VDbGllbnQpIHsKKyAgICAgICAgR1NU
X0RFQlVHKCJtX21lZGlhU291cmNlQ2xpZW50IGlzIG51bGwsIG5vdCBkb2luZyBhbnl0aGluZyIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWVkaWFUaW1lIHByZXZpb3VzRHVyYXRp
b24gPSBtX21lZGlhVGltZUR1cmF0aW9uOworICAgIG1fbWVkaWFUaW1lRHVyYXRpb24gPSBtX21l
ZGlhU291cmNlQ2xpZW50LT5kdXJhdGlvbigpOworCisgICAgR1NUX1RSQUNFKCJwcmV2aW91cz0l
ZiwgbmV3PSVmIiwgcHJldmlvdXNEdXJhdGlvbi50b0Zsb2F0KCksIG1fbWVkaWFUaW1lRHVyYXRp
b24udG9GbG9hdCgpKTsKKworICAgIC8vIEF2b2lkIGVtaXRpbmcgZHVyYXRpb25jaGFuZ2VkIGlu
IHRoZSBjYXNlIHdoZXJlIHRoZSBwcmV2aW91cyBkdXJhdGlvbiB3YXMgMCBiZWNhdXNlIHRoYXQg
Y2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQKKyAgICAvLyBieSB0aGUgSFRNTE1lZGlhRWxlbWVudC4K
KyAgICBpZiAobV9tZWRpYVRpbWVEdXJhdGlvbiAhPSBwcmV2aW91c0R1cmF0aW9uICYmIG1fbWVk
aWFUaW1lRHVyYXRpb24uaXNWYWxpZCgpICYmIHByZXZpb3VzRHVyYXRpb24uaXNWYWxpZCgpKSB7
CisgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9wbGF5YmFj
a1BpcGVsaW5lLT5ub3RpZnlEdXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9tZWRpYVNvdXJj
ZS0+ZHVyYXRpb25DaGFuZ2VkKG1fbWVkaWFUaW1lRHVyYXRpb24pOworICAgIH0KK30KKworc3Rh
dGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZUNh
Y2hlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4+IGNhY2hlID0gW10oKQorICAgIHsKKyAgICAgICAgaW5pdGlh
bGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0TVNFRWxlbWVudCgpOworICAgICAgICBIYXNo
U2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7CisgICAgICAgIGNvbnN0
IGNoYXIqIG1pbWVUeXBlc1tdID0geworICAgICAgICAgICAgInZpZGVvL21wNCIsCisgICAgICAg
ICAgICAiYXVkaW8vbXA0IgorICAgICAgICB9OworICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBt
aW1lVHlwZXMpCisgICAgICAgICAgICBzZXQuYWRkKHR5cGUpOworICAgICAgICByZXR1cm4gc2V0
OworICAgIH0oKTsKKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlD
YXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hl
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVj
dGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4gYXBwZW5kUGlwZWxpbmUsIFJlZlB0cjxXZWJDb3Jl
OjpUcmFja1ByaXZhdGVCYXNlPiBvbGRUcmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0
ZUJhc2U+IG5ld1RyYWNrKQoreworICAgIEFTU0VSVChhcHBlbmRQaXBlbGluZS0+dHJhY2soKSA9
PSBuZXdUcmFjayk7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUtPmFwcHNp
bmtDYXBzKCk7CisgICAgQVNTRVJUKGNhcHMpOworICAgIEdTVF9ERUJVRygidHJhY2sgSUQ6ICVz
LCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3VHJhY2stPmlkKCkuc3RyaW5nKCkubGF0aW4x
KCkuZGF0YSgpLCBjYXBzKTsKKworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2Nh
cHNfZ2V0X3N0cnVjdHVyZShjYXBzLCAwKTsKKyAgICBjb25zdCBnY2hhciogbWVkaWFUeXBlID0g
Z3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworICAgIEdzdFZpZGVvSW5mbyBpbmZv
OworCisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8vIikgJiYgZ3N0
X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzKSkgeworICAgICAgICBmbG9hdCB3aWR0
aCwgaGVpZ2h0OworCisgICAgICAgIHdpZHRoID0gaW5mby53aWR0aDsKKyAgICAgICAgaGVpZ2h0
ID0gaW5mby5oZWlnaHQgKiAoKGZsb2F0KSBpbmZvLnBhcl9kIC8gKGZsb2F0KSBpbmZvLnBhcl9u
KTsKKyAgICAgICAgbV92aWRlb1NpemUuc2V0V2lkdGgod2lkdGgpOworICAgICAgICBtX3ZpZGVv
U2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICB9CisKKyAgICBpZiAoIW9sZFRyYWNrKQorICAg
ICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPmF0dGFjaFRyYWNrKGFwcGVuZFBpcGVsaW5lLT5zb3Vy
Y2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrLCBzdHJ1Y3R1cmUsIGNhcHMpOworICAgIGVsc2UK
KyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5yZWF0dGFjaFRyYWNrKGFwcGVuZFBpcGVsaW5l
LT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9y
dGVkOworICAgIGlmICghcGFyYW1ldGVycy5pc01lZGlhU291cmNlKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgLy8gRGlzYWJsZSBWUFgvT3B1cyBvbiBNU0UgZm9yIG5vdywgbXA0L2F2
YzEgc2VlbXMgd2F5IG1vcmUgcmVsaWFibGUgY3VycmVudGx5LgorICAgIGlmIChwYXJhbWV0ZXJz
LnR5cGUuZW5kc1dpdGgoIndlYm0iKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8v
IFlvdVR1YmUgVFYgcHJvdmlkZXMgZW1wdHkgdHlwZXMgZm9yIHNvbWUgdmlkZW9zIGFuZCB3ZSB3
YW50IHRvIGJlIHNlbGVjdGVkIGFzIGJlc3QgbWVkaWEgZW5naW5lIGZvciB0aGVtLgorICAgIGlm
IChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdCA9IE1lZGlhUGxh
eWVyOjpNYXlCZVN1cHBvcnRlZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29k
ZWNzIHN0cmluZyBpcyBlbXB0eS4KKyAgICBpZiAobWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBh
cmFtZXRlcnMudHlwZSkpCisgICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlcnMuY29kZWNzLmlzRW1w
dHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc1N1cHBv
cnRlZDsKKworICAgIHJldHVybiBleHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0ZXJzLCByZXN1
bHQpOworfQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkaXNwYXRjaERlY3J5cHRpb25LZXkoR3N0QnVmZmVyKiBi
dWZmZXIpCit7CisgICAgZm9yIChIYXNoTWFwPFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyPiwgUmVmUHRyPEFwcGVuZFBpcGVsaW5lPiA+OjppdGVyYXRvciBpdCA9IG1fYXBwZW5k
UGlwZWxpbmVzTWFwLmJlZ2luKCk7IGl0ICE9IG1fYXBwZW5kUGlwZWxpbmVzTWFwLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmFwcGVuZFN0YXRlKCkgPT0gQXBwZW5kUGlw
ZWxpbmU6OkFwcGVuZFN0YXRlOjpLZXlOZWdvdGlhdGlvbikgeworICAgICAgICAgICAgR1NUX1RS
QUNFKCJhcHBlbmQgcGlwZWxpbmUgJXAgaW4ga2V5IG5lZ290aWF0aW9uLCBzZXR0aW5nIGtleSIs
IGl0LT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KGl0
LT52YWx1ZS0+cGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25ld19jdXN0b20oR1NUX0VWRU5UX0NVU1RP
TV9ET1dOU1RSRUFNX09PQiwKKyAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldygiZHJt
LWNpcGhlciIsICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZmZlciwgbnVsbHB0cikpKTsKKyAg
ICAgICAgICAgIGl0LT52YWx1ZS0+c2V0QXBwZW5kU3RhdGUoQXBwZW5kUGlwZWxpbmU6OkFwcGVu
ZFN0YXRlOjpPbmdvaW5nKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBHU1RfVFJBQ0Uo
ImFwcGVuZCBwaXBlbGluZSAlcCBub3QgaW4ga2V5IG5lZ290aWF0aW9uIiwgaXQtPnZhbHVlLmdl
dCgpKTsKKyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6Om1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3Rh
dHVzIHN0YXR1cykKK3sKKyAgICBpZiAoc3RhdHVzICE9IE1lZGlhU291cmNlUHJpdmF0ZTo6RW9z
Tm9FcnJvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJNYXJraW5nIGVuZCBv
ZiBzdHJlYW0iKTsKKyAgICBtX2Vvc01hcmtlZCA9IHRydWU7CisgICAgdXBkYXRlU3RhdGVzKCk7
Cit9CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmN1cnJlbnRN
ZWRpYVRpbWUoKSBjb25zdAoreworICAgIGF1dG8gcG9zaXRpb24gPSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKTsKKworICAgIGlmIChtX2Vvc1BlbmRpbmcg
JiYgKHBhdXNlZCgpIHx8IChwb3NpdGlvbiA+PSBkdXJhdGlvbk1lZGlhVGltZSgpKSkpIHsKKyAg
ICAgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkZWQpIHsKKyAgICAg
ICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAg
IG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBt
X2Vvc1BlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOworICAg
ICAgICBtX2NhY2hlZFBvc2l0aW9uID0gbV9tZWRpYVRpbWVEdXJhdGlvbi50b0Zsb2F0KCk7Cisg
ICAgICAgIG1fZHVyYXRpb25BdEVPUyA9IG1fbWVkaWFUaW1lRHVyYXRpb24udG9GbG9hdCgpOwor
ICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHBvc2l0
aW9uOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heFRpbWVT
ZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKFVOTElLRUxZKG1fZXJyb3JPY2N1cmVkKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBHU1RfREVCVUcoIm1heFRpbWVTZWVrYWJsZSIpOworICAg
IGZsb2F0IHJlc3VsdCA9IGR1cmF0aW9uTWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKKyAgICAvLyBJ
bmZpbml0ZSBkdXJhdGlvbiBtZWFucyBsaXZlIHN0cmVhbS4KKyAgICBpZiAoaXNpbmYocmVzdWx0
KSkgeworICAgICAgICBNZWRpYVRpbWUgbWF4QnVmZmVyZWRUaW1lID0gYnVmZmVyZWQoKS0+bWF4
aW11bUJ1ZmZlcmVkVGltZSgpOworICAgICAgICAvLyBSZXR1cm4gdGhlIGhpZ2hlc3QgZW5kIHRp
bWUgcmVwb3J0ZWQgYnkgdGhlIGJ1ZmZlcmVkIGF0dHJpYnV0ZS4KKyAgICAgICAgcmVzdWx0ID0g
bWF4QnVmZmVyZWRUaW1lLmlzVmFsaWQoKSA/IG1heEJ1ZmZlcmVkVGltZS50b0Zsb2F0KCkgOiAw
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUuCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE1MmViZWM0
YTAxMzI0NjM2YzM0MDY5NDgwMjAzNmUwNTRmNzRkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTYgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE1IFNlYmFz
dGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRV9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RV9oCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpICAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiTWVkaWFTYW1wbGUuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgor
I2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyTVNFOworY2xhc3MgQXBwZW5kUGlwZWxpbmU7CitjbGFzcyBQbGF5YmFj
a1BpcGVsaW5lOworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UgOiBwdWJs
aWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTsKKwor
cHVibGljOgorICAgIGV4cGxpY2l0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRShNZWRp
YVBsYXllciopOworICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSgp
OworCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lz
dHJhcik7CisKKyAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopIG92ZXJyaWRl
OworCisgICAgdm9pZCBzZXREb3dubG9hZEJ1ZmZlcmluZygpIG92ZXJyaWRlIHsgfTsKKworICAg
IGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9p
ZCBwYXVzZSgpIG92ZXJyaWRlOworICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgc2VlayhmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb25maWd1cmVQbGF5U2lu
aygpIG92ZXJyaWRlOworICAgIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSkgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpIG92ZXJyaWRlOworICAgIE1lZGlh
VGltZSBkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRS
YXRlKGZsb2F0KSBvdmVycmlkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFu
Z2VzPiBidWZmZXJlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGZsb2F0IG1heFRpbWVTZWVrYWJs
ZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzb3VyY2VDaGFuZ2VkKCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOworICAg
IHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsK
KyAgICBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCgp
IHsgcmV0dXJuIG1fbWVkaWFTb3VyY2UuZ2V0KCk7IH0KKworICAgIHZvaWQgbWFya0VuZE9mU3Ry
ZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpOworCisjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQV9WMikKKyAgICB2b2lkIGRpc3BhdGNoRGVjcnlwdGlvbktleShHc3RC
dWZmZXIqKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9pZCB0cmFja0RldGVjdGVkKFJlZlB0
cjxBcHBlbmRQaXBlbGluZT4sIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBvbGRU
cmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNrKTsKKyAgICB2
b2lkIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNvbnN0IE1lZGlhVGltZSYpOworCitwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
KTsKKworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICAvLyBGSVhNRTogUmVk
dWNlIGNvZGUgZHVwbGljYXRpb24uCisgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKSBvdmVycmlkZTsK
KworICAgIGJvb2wgZG9TZWVrKGdpbnQ2NCwgZmxvYXQsIEdzdFNlZWtGbGFncykgb3ZlcnJpZGU7
CisgICAgYm9vbCBkb1NlZWsoKTsKKyAgICB2b2lkIG1heWJlRmluaXNoU2VlaygpOworICAgIHZv
aWQgdXBkYXRlUGxheWJhY2tSYXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhc3luY1N0YXRlQ2hh
bmdlRG9uZSgpIG92ZXJyaWRlOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICB1bnNp
Z25lZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAg
dW5zaWduZWQgbG9uZyBkcm9wcGVkVmlkZW9GcmFtZXMoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9
CisgICAgdW5zaWduZWQgbG9uZyBjb3JydXB0ZWRWaWRlb0ZyYW1lcygpIG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KKyAgICBNZWRpYVRpbWUgdG90YWxGcmFtZURlbGF5KCkgb3ZlcnJpZGUgeyByZXR1
cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9CisgICAgYm9vbCBpc1RpbWVCdWZmZXJlZChjb25z
dCBNZWRpYVRpbWUmKSBjb25zdDsKKworICAgIGJvb2wgaXNNZWRpYVNvdXJjZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgc2V0TWVkaWFTb3VyY2VDbGllbnQo
UGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4pOworICAgIFJlZlB0cjxN
ZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gbWVkaWFTb3VyY2VDbGllbnQoKTsKKworICAg
IEhhc2hNYXA8UmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBSZWZQdHI8QXBw
ZW5kUGlwZWxpbmU+PiBtX2FwcGVuZFBpcGVsaW5lc01hcDsKKyAgICBib29sIG1fZW9zTWFya2Vk
OworICAgIG11dGFibGUgYm9vbCBtX2Vvc1BlbmRpbmc7CisgICAgYm9vbCBtX2dzdFNlZWtDb21w
bGV0ZWQ7CisgICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJj
ZTsKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1fbWVkaWFTb3Vy
Y2VDbGllbnQ7CisgICAgTWVkaWFUaW1lIG1fbWVkaWFUaW1lRHVyYXRpb247CisgICAgYm9vbCBt
X21zZVNlZWtDb21wbGV0ZWQ7CisgICAgUmVmUHRyPFBsYXliYWNrUGlwZWxpbmU+IG1fcGxheWJh
Y2tQaXBlbGluZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVIpCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291763</attachid>
            <date>2016-10-16 12:06:49 -0700</date>
            <delta_ts>2016-10-20 13:57:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162900-20161016190317.patch</filename>
            <type>text/plain</type>
            <size>41651</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjViZTJhNzllNGRmY2Y3
YTg4YjdmMWIzMzMyODcxNjZkOTlmM2RhMC4uOGI0NDAyMTVhODg3ODE2MTdhZTMzNzhlMTkyYTk4
MGJmMTBjOTg3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYyIEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJp
dmF0ZSBmb3IgR1N0cmVhbWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI5MDAKKworICAgICAgICBSZXZpZXdlZCBieSBYYWJpZXIgUm9kcmlndWV6
LUNhbHZhci4KKworICAgICAgICBSZWZhY3RvciBNU0Utc3BlY2lmaWMgbG9naWMgdG8gaXRzIG93
biBHU3RyZWFtZXIgcGxheWVyLiBUaGlzIG5ldyBNU0UgcGxheWVyIGNvb3JkaW5hdGVzCisgICAg
ICAgIGRhdGEgYXBwZW5kaW5nLCBtZWRpYSBwbGF5YmFjayBhbmQgaW50ZXJhY3Rpb24gd2l0aCBN
ZWRpYVNvdXJjZSBieSBkZWxlZ2F0aW5nIHRvCisgICAgICAgIEFwcGVuZFBpcGVsaW5lIChvbmUg
aW5zdGFuY2UgcGVyIFNvdXJjZUJ1ZmZlciksIFBsYXliYWNrUGlwZWxpbmUgYW5kCisgICAgICAg
IE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudCBy
ZXNwZWN0aXZlbHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRoIFBo
aWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+IChFTUUgc3VwcG9ydCkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpidWlsZE1lZGlhRW5naW5lc1ZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGR1bXBSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJD
b3JlOjppbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
ZHVyYXRpb25NZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6Y29uZmlndXJlUGxheVNpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjaGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bm90aWZ5U2Vla05l
ZWRzRGF0YUZvclRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVraW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Ondh
aXRGb3JTZWVrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3lu
Y1N0YXRlQ2hhbmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OmlzVGltZUJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0TWVkaWFTb3VyY2VDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJjZUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1
cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVk
VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojp0cmFja0RldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVu
dE1lZGlhVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1lZGlhU291cmNl
UHJpdmF0ZUNsaWVudCk6CisKKzIwMTYtMTAtMDQgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAg
PGVvY2FuaGFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1N0cmVhbWVyXVtNU0VdIE1lZGlhU291
cmNlR1N0cmVhbWVyIHJlZmFjdG9yaW5nCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI4OTkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDE1YmE2ZjNhN2U4YzcwMWUzMTc4MWNhNjZj
YjZmODRmNGFlMDJhYjkuLmU1ZDZjMzVkOTU5NjYwZmU5ZTYxMmEzMzRjMjgzMGY3NmU2OTk3ZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTU3LDcgKzU3LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmgiCiAjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShN
RURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaCIKICNlbmRpZgorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
CiAKICNpZiBVU0UoTUVESUFfRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uaCIKQEAgLTIyOSw2ICsyMzIsMTAgQEAgc3RhdGljIHZvaWQgYnVp
bGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWU6
OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnJl
Z2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCisKICAgICBoYXZlTWVk
aWFFbmdpbmVzVmVjdG9yKCkgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTliNzdl
MDQyMzU5NTE0NjQyOTA3N2QzZGQ3YjVmNTA1MTZhOGJhNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFLmNwcApAQCAtMCwwICsxLDg0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE2IElnYWxpYSBTLkwK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJp
Y3VsYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBF
TkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJB
cHBlbmRQaXBlbGluZS5oIgorI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiVVJMLmgiCisj
aW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9h
cHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKyNpbmNsdWRl
IDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyKiBkdW1wUmVhZHlT
dGF0ZShXZWJDb3JlOjpNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQoreworICAg
IHN3aXRjaCAocmVhZHlTdGF0ZSkgeworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nOiByZXR1cm4gIkhhdmVOb3RoaW5nIjsKKyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlh
UGxheWVyOjpIYXZlTWV0YWRhdGE6IHJldHVybiAiSGF2ZU1ldGFkYXRhIjsKKyAgICBjYXNlIFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE6IHJldHVybiAiSGF2ZUN1cnJlbnRE
YXRhIjsKKyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTogcmV0
dXJuICJIYXZlRnV0dXJlRGF0YSI7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVBsYXllcjo6SGF2
ZUVub3VnaERhdGE6IHJldHVybiAiSGF2ZUVub3VnaERhdGEiOworICAgIGRlZmF1bHQ6IHJldHVy
biAiKHVua25vd24pIjsKKyAgICB9Cit9CisKKy8vIE1heCBpbnRlcnZhbCBpbiBzZWNvbmRzIHRv
IHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1hbnVhbCBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMu
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgZ1JlYWR5U3RhdGVUaW1lckludGVydmFsID0gNjA7CisK
K0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfbXNlX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9E
RUZBVUxUIHdlYmtpdF9tc2VfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVu
Z2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpIHsKKyAg
ICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFPihwbGF5ZXIpOyB9LAorICAg
ICAgICAgICAgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgc3VwcG9ydHNLZXlTeXN0ZW0pOworICAgIH0KK30KKworYm9vbCBpbml0aWFs
aXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50KCkKK3sKKyAgICBpZiAoVU5M
SUtFTFkoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKKworICAgIEdTVF9ERUJVR19D
QVRFR09SWV9JTklUKHdlYmtpdF9tc2VfZGVidWcsICJ3ZWJraXRtc2UiLCAwLCAiV2ViS2l0IE1T
RSBtZWRpYSBwbGF5ZXIiKTsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IFdlYktp
dE1lZGlhU3JjRmFjdG9yeSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoIndl
YmtpdG1lZGlhc3JjIikpOworICAgIGlmIChVTkxJS0VMWSghV2ViS2l0TWVkaWFTcmNGYWN0b3J5
KSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdG1lZGlhc3Jj
IiwgR1NUX1JBTktfUFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfU1JDKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Omlz
QXZhaWxhYmxlKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIWluaXRpYWxpemVHU3RyZWFtZXJBbmRS
ZWdpc3RlcldlYktpdE1TRUVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IGZhY3RvcnkgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZmFjdG9yeV9maW5kKCJwbGF5YmluIikpOworICAgIHJldHVybiBmYWN0b3J5OworfQorCitN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKHBsYXllcikKKyAgICAsIG1fZW9zTWFya2VkKGZhbHNlKQorICAgICwgbV9lb3NQZW5kaW5n
KGZhbHNlKQorICAgICwgbV9nc3RTZWVrQ29tcGxldGVkKHRydWUpCisgICAgLCBtX21zZVNlZWtD
b21wbGV0ZWQodHJ1ZSkKK3sKKyAgICBHU1RfVFJBQ0UoImNyZWF0aW5nIHRoZSBwbGF5ZXIgKCVw
KSIsIHRoaXMpOworfQorCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6On5NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0UoKQoreworICAgIEdTVF9UUkFDRSgiZGVzdHJveWluZyB0
aGUgcGxheWVyICglcCkiLCB0aGlzKTsKKworICAgIGZvciAoSGFzaE1hcDxSZWZQdHI8U291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4sIFJlZlB0cjxBcHBlbmRQaXBlbGluZT4+OjppdGVyYXRv
ciBpdGVyYXRvciA9IG1fYXBwZW5kUGlwZWxpbmVzTWFwLmJlZ2luKCk7IGl0ZXJhdG9yICE9IG1f
YXBwZW5kUGlwZWxpbmVzTWFwLmVuZCgpOyArK2l0ZXJhdG9yKQorICAgICAgICBpdGVyYXRvci0+
dmFsdWUtPmNsZWFyUGxheWVyUHJpdmF0ZSgpOworCisgICAgaWYgKG1fc291cmNlKSB7CisgICAg
ICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMo
bV9zb3VyY2UuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKG1fc291cmNlLmdldCgpLCB0aGlzKTsKKyAgICB9CisKKyAgICBpZiAo
bV9wbGF5YmFja1BpcGVsaW5lKQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPnNldFdlYktp
dE1lZGlhU3JjKG51bGxwdHIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAoVU5MSUtFTFko
IWluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdE1TRUVsZW1lbnQoKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghdXJsU3RyaW5nLnN0YXJ0c1dpdGgoIm1lZGlhc291cmNl
IikpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJVbnN1cHBvcnRlZCB1cmw6ICVzIiwgdXJsU3RyaW5n
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Bs
YXliYWNrUGlwZWxpbmUpCisgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZSA9IFBsYXliYWNrUGlw
ZWxpbmU6OmNyZWF0ZSgpOworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2Fk
KHVybFN0cmluZyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjps
b2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291
cmNlKQoreworICAgIFN0cmluZyBtZWRpYXNvdXJjZVVyaSA9IFN0cmluZzo6Zm9ybWF0KCJtZWRp
YXNvdXJjZSVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOworICAgIG1fbWVkaWFTb3VyY2UgPSBtZWRp
YVNvdXJjZTsKKyAgICBsb2FkKG1lZGlhc291cmNlVXJpKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKCkKK3sKKyAgICBtX3BhdXNlZCA9IHRydWU7Cisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSgpOworfQorCitNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0
Cit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAg
ICAgICAgcmV0dXJuIE1lZGlhVGltZSgpOworCisgICAgcmV0dXJuIG1fbWVkaWFUaW1lRHVyYXRp
b247Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGZsb2F0
IHRpbWUpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVk
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0lORk8oIltTZWVrXSBzZWVrIGF0dGVtcHQg
dG8gJWYgc2VjcyIsIHRpbWUpOworCisgICAgLy8gQXZvaWQgdXNlbGVzcyBzZWVraW5nLgorICAg
IGZsb2F0IGN1cnJlbnQgPSBjdXJyZW50TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKKyAgICBpZiAo
dGltZSA9PSBjdXJyZW50KSB7CisgICAgICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICAgICAg
dGltZUNoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0xpdmVT
dHJlYW0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2Vla2luZyAmJiBtX3NlZWtJ
c1BlbmRpbmcpIHsKKyAgICAgICAgbV9zZWVrVGltZSA9IHRpbWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBHU1RfREVCVUcoIlNlZWtpbmcgZnJvbSAlZiB0byAlZiBzZWNvbmRzIiwg
Y3VycmVudCwgdGltZSk7CisKKyAgICBmbG9hdCBwcmV2U2Vla1RpbWUgPSBtX3NlZWtUaW1lOwor
ICAgIG1fc2Vla1RpbWUgPSB0aW1lOworCisgICAgaWYgKCFkb1NlZWsoKSkgeworICAgICAgICBt
X3NlZWtUaW1lID0gcHJldlNlZWtUaW1lOworICAgICAgICBHU1RfV0FSTklORygiU2Vla2luZyB0
byAlZiBmYWlsZWQiLCB0aW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faXNF
bmRSZWFjaGVkID0gZmFsc2U7CisgICAgR1NUX0RFQlVHKCJtX3NlZWtpbmc9JXMsIG1fc2Vla1Rp
bWU9JWYiLCBtX3NlZWtpbmcgPyAidHJ1ZSIgOiAiZmFsc2UiLCBtX3NlZWtUaW1lKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNvbmZpZ3VyZVBsYXlTaW5rKCkK
K3sKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbmZpZ3VyZVBsYXlTaW5rKCk7
CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHBsYXlzaW5rID0gYWRvcHRHUmVmKGdzdF9iaW5f
Z2V0X2J5X25hbWUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgInBsYXlzaW5rIikpOworICAg
IGlmIChwbGF5c2luaykgeworICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSAoMCkgbWVhbnMg
InNlbmQgZXZlbnRzIHRvIGFsbCB0aGUgc2lua3MiLCBpbnN0ZWFkCisgICAgICAgIC8vIG9mICJv
bmx5IHRvIHRoZSBmaXJzdCB0aGF0IHJldHVybnMgdHJ1ZSIuIFRoaXMgaXMgbmVlZGVkIGZvciBN
U0Ugc2Vlay4KKyAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHBsYXlzaW5rLmdldCgpKSwg
InNlbmQtZXZlbnQtbW9kZSIsIDAsIG51bGxwdHIpOworICAgIH0KK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3
U3RhdGUpCit7CisgICAgaWYgKHNlZWtpbmcoKSkgeworICAgICAgICBHU1RfREVCVUcoIlJlamVj
dGVkIHN0YXRlIGNoYW5nZSB0byAlcyB3aGlsZSBzZWVraW5nIiwKKyAgICAgICAgICAgIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBp
cGVsaW5lU3RhdGUobmV3U3RhdGUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6bm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJiBzZWVr
VGltZSkKK3sKKyAgICAvLyBSZWVucXVldWUgc2FtcGxlcyBuZWVkZWQgdG8gcmVzdW1lIHBsYXli
YWNrIGluIHRoZSBuZXcgcG9zaXRpb24uCisgICAgbV9tZWRpYVNvdXJjZS0+c2Vla1RvVGltZShz
ZWVrVGltZSk7CisKKyAgICBHU1RfREVCVUcoIk1TRSBzZWVrIHRvICVmIGZpbmlzaGVkIiwgc2Vl
a1RpbWUudG9Eb3VibGUoKSk7CisKKyAgICBpZiAoIW1fZ3N0U2Vla0NvbXBsZXRlZCkgeworICAg
ICAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBtYXliZUZpbmlzaFNlZWso
KTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1Nl
ZWsoZ2ludDY0LCBmbG9hdCwgR3N0U2Vla0ZsYWdzKQoreworICAgIC8vIFVzZSBkb1NlZWsoKSBp
bnN0ZWFkLiBJZiBhbnlib2R5IGlzIGNhbGxpbmcgdGhpcyB2ZXJzaW9uIG9mIGRvU2VlaygpLCBz
b21ldGhpbmcgaXMgd3JvbmcuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVr
KCkKK3sKKyAgICBHc3RDbG9ja1RpbWUgcG9zaXRpb24gPSB0b0dzdENsb2NrVGltZShtX3NlZWtU
aW1lKTsKKyAgICBNZWRpYVRpbWUgc2Vla1RpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3Vi
bGUobV9zZWVrVGltZSk7CisgICAgZG91YmxlIHJhdGUgPSBtX3BsYXllci0+cmF0ZSgpOworICAg
IEdzdFNlZWtGbGFncyBzZWVrVHlwZSA9IHN0YXRpY19jYXN0PEdzdFNlZWtGbGFncz4oR1NUX1NF
RUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpOworCisgICAgLy8gQWx3YXlz
IG1vdmUgdG8gc2Vla2luZyBzdGF0ZSB0byByZXBvcnQgY29ycmVjdCAnY3VycmVudFRpbWUnIHdo
aWxlIHBlbmRpbmcgZm9yIGFjdHVhbCBzZWVrIHRvIGNvbXBsZXRlLgorICAgIG1fc2Vla2luZyA9
IHRydWU7CisKKyAgICAvLyBDaGVjayBpZiBwbGF5YmFjayBwaXBlbGluZSBpcyByZWFkeSBmb3Ig
c2Vlay4KKyAgICBHc3RTdGF0ZSBzdGF0ZSwgbmV3U3RhdGU7CisgICAgR3N0U3RhdGVDaGFuZ2VS
ZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgJnN0YXRlLCAmbmV3U3RhdGUsIDApOworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBH
U1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUgfHwgZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NI
QU5HRV9OT19QUkVST0xMKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIGNhbm5vdCBzZWVr
LCBjdXJyZW50IHN0YXRlIGNoYW5nZSBpcyAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9y
ZXR1cm5fZ2V0X25hbWUoZ2V0U3RhdGVSZXN1bHQpKTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNT
ZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUp
OworICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMKKyAg
ICAgICAgJiYgIShzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORyAmJiBuZXdTdGF0ZSA9PSBHU1Rf
U1RBVEVfUEFVU0VEKSkKKyAgICAgICAgfHwgc3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VECisgICAg
ICAgIHx8IG1faXNFbmRSZWFjaGVkCisgICAgICAgIHx8ICFtX2dzdFNlZWtDb21wbGV0ZWQpIHsK
KyAgICAgICAgQ1N0cmluZyByZWFzb24gPSAiVW5rbm93biByZWFzb24iOworICAgICAgICBpZiAo
Z2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykgeworICAgICAgICAgICAg
cmVhc29uID0gU3RyaW5nOjpmb3JtYXQoIkluIGFzeW5jIGNoYW5nZSAlcyAtLT4gJXMiLAorICAg
ICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwKKyAgICAgICAg
ICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpLnV0ZjgoKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQpCisgICAgICAgICAgICBy
ZWFzb24gPSAiU3RhdGUgbGVzcyB0aGFuIFBBVVNFRCI7CisgICAgICAgIGVsc2UgaWYgKG1faXNF
bmRSZWFjaGVkKQorICAgICAgICAgICAgcmVhc29uID0gIkVuZCByZWFjaGVkIjsKKyAgICAgICAg
ZWxzZSBpZiAoIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAgICAgICAgICAgIHJlYXNvbiA9ICJQcmV2
aW91cyBzZWVrIGlzIG5vdCBmaW5pc2hlZCB5ZXQiOworCisgICAgICAgIEdTVF9ERUJVRygiW1Nl
ZWtdIERlbGF5aW5nIHRoZSBzZWVrOiAlcyIsIHJlYXNvbi5kYXRhKCkpOworCisgICAgICAgIG1f
c2Vla0lzUGVuZGluZyA9IHRydWU7CisKKyAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkKSB7Cisg
ICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSByZXNldCBwaXBlbGluZSIpOworICAgICAgICAg
ICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQp
KQorICAgICAgICAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG1fc2Vla2luZzsKKyAgICB9CisKKyAgICAvLyBTdG9wIGFj
Y2VwdGluZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwgc2VlayBpcyBmaW5pc2hlZC4KKyAgICB3
ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNl
LmdldCgpKSwgZmFsc2UpOworCisgICAgLy8gQ29ycmVjdCBzZWVrIHRpbWUgaWYgaXQgaGVscHMg
dG8gZml4IGEgc21hbGwgZ2FwLgorICAgIGlmICghaXNUaW1lQnVmZmVyZWQoc2Vla1RpbWUpKSB7
CisgICAgICAgIC8vIExvb2sgaWYgYSBuZWFyIGZ1dHVyZSB0aW1lICg8MC4xIHNlYy4pIGlzIGJ1
ZmZlcmVkIGFuZCBjaGFuZ2UgdGhlIHNlZWsgdGFyZ2V0IHRpbWUuCisgICAgICAgIGlmIChtX21l
ZGlhU291cmNlKSB7CisgICAgICAgICAgICBjb25zdCBNZWRpYVRpbWUgbWluaUdhcCA9IE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZSgwLjEpOworICAgICAgICAgICAgTWVkaWFUaW1lIG5lYXJl
c3QgPSBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpLT5uZWFyZXN0KHNlZWtUaW1lKTsKKyAgICAg
ICAgICAgIGlmIChuZWFyZXN0LmlzVmFsaWQoKSAmJiBuZWFyZXN0ID4gc2Vla1RpbWUgJiYgKG5l
YXJlc3QgLSBzZWVrVGltZSkgPD0gbWluaUdhcCAmJiBpc1RpbWVCdWZmZXJlZChuZWFyZXN0ICsg
bWluaUdhcCkpIHsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDaGFuZ2VkIHRo
ZSBzZWVrIHRhcmdldCB0aW1lIGZyb20gJWYgdG8gJWYsIGEgbmVhciBwb2ludCBpbiB0aGUgZnV0
dXJlIiwgc2Vla1RpbWUudG9GbG9hdCgpLCBuZWFyZXN0LnRvRmxvYXQoKSk7CisgICAgICAgICAg
ICAgICAgc2Vla1RpbWUgPSBuZWFyZXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gQ2hlY2sgaWYgTVNFIGhhcyBzYW1wbGVzIGZvciByZXF1ZXN0ZWQgdGltZSBh
bmQgZGVmZXIgYWN0dWFsIHNlZWsgaWYgbmVlZGVkLgorICAgIGlmICghaXNUaW1lQnVmZmVyZWQo
c2Vla1RpbWUpKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIERlbGF5aW5nIHRoZSBzZWVr
OiBNU0UgaXMgbm90IHJlYWR5Iik7CisgICAgICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHNldFN0
YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9T
VEFURV9QQVVTRUQpOworICAgICAgICBpZiAoc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NI
QU5HRV9GQUlMVVJFKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDYW5ub3Qgc2Vl
aywgZmFpbGVkIHRvIHBhdXNlIHBsYXliYWNrIHBpcGVsaW5lLiIpOworICAgICAgICAgICAgd2Vi
S2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5n
ZXQoKSksIHRydWUpOworICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICAgICAgbm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUo
c2Vla1RpbWUpOworICAgICAgICBBU1NFUlQoIW1fbXNlU2Vla0NvbXBsZXRlZCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENvbXBsZXRlIHByZXZpb3VzIE1TRSBzZWVr
IGlmIG5lZWRlZC4KKyAgICBpZiAoIW1fbXNlU2Vla0NvbXBsZXRlZCkgeworICAgICAgICBtX21l
ZGlhU291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOworICAgICAgICBBU1NFUlQobV9tc2VT
ZWVrQ29tcGxldGVkKTsKKyAgICAgICAgLy8gTm90ZTogc2Vla0NvbXBsZXRlZCB3aWxsIHJlY3Vy
c2l2ZWx5IGNhbGwgdXMuCisgICAgICAgIHJldHVybiBtX3NlZWtpbmc7CisgICAgfQorCisgICAg
R1NUX0RFQlVHKCJXZSBjYW4gc2VlayBub3ciKTsKKworICAgIGdpbnQ2NCBzdGFydFRpbWUsIGVu
ZFRpbWU7CisKKyAgICBpZiAocmF0ZSA+IDApIHsKKyAgICAgICAgc3RhcnRUaW1lID0gcG9zaXRp
b247CisgICAgICAgIGVuZFRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgIH0gZWxzZSB7
CisgICAgICAgIHN0YXJ0VGltZSA9IDA7CisgICAgICAgIGVuZFRpbWUgPSBwb3NpdGlvbjsKKyAg
ICB9CisKKyAgICBpZiAoIXJhdGUpCisgICAgICAgIHJhdGUgPSAxOworCisgICAgR1NUX0RFQlVH
KCJBY3R1YWwgc2VlayB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZW5kIHRpbWU6ICAlIiBHU1Rf
VElNRV9GT1JNQVQgIiwgcmF0ZTogJWYiLCBHU1RfVElNRV9BUkdTKHN0YXJ0VGltZSksIEdTVF9U
SU1FX0FSR1MoZW5kVGltZSksIHJhdGUpOworCisgICAgLy8gVGhpcyB3aWxsIGNhbGwgbm90aWZ5
U2Vla05lZWRzRGF0YSgpIGFmdGVyIHNvbWUgdGltZSB0byB0ZWxsIHRoYXQgdGhlIHBpcGVsaW5l
IGlzIHJlYWR5IGZvciBzYW1wbGUgZW5xdWV1aW5nLgorICAgIHdlYktpdE1lZGlhU3JjUHJlcGFy
ZVNlZWsoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHNlZWtUaW1lKTsKKworICAg
IG1fZ3N0U2Vla0NvbXBsZXRlZCA9IGZhbHNlOworICAgIGlmICghZ3N0X2VsZW1lbnRfc2Vlayht
X3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtUeXBlLCBHU1RfU0VF
S19UWVBFX1NFVCwgc3RhcnRUaW1lLCBHU1RfU0VFS19UWVBFX1NFVCwgZW5kVGltZSkpIHsKKyAg
ICAgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyht
X3NvdXJjZS5nZXQoKSksIHRydWUpOworICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAg
ICAgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgR1NUX0RFQlVHKCJkb1NlZWso
KTogZ3N0X2VsZW1lbnRfc2VlaygpIGZhaWxlZCwgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgc2FtcGxlcyB3aWxsIGJlIGVucXVl
dWVkIGluIG5vdGlmeVNlZWtOZWVkc0RhdGEoKS4KKyAgICBHU1RfREVCVUcoImRvU2VlaygpOiBn
c3RfZWxlbWVudF9zZWVrKCkgc3VjY2VlZGVkLCByZXR1cm5pbmcgdHJ1ZSIpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVG
aW5pc2hTZWVrKCkKK3sKKyAgICBpZiAoIW1fc2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxldGVk
IHx8ICFtX2dzdFNlZWtDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFN0YXRl
IHN0YXRlLCBuZXdTdGF0ZTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3Vs
dCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZuZXdT
dGF0ZSwgMCk7CisKKyAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9B
U1lOQworICAgICAgICAmJiAhKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HICYmIG5ld1N0YXRl
ID09IEdTVF9TVEFURV9QQVVTRUQpKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIERlbGF5
aW5nIHNlZWsgZmluaXNoIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9z
ZWVrSXNQZW5kaW5nKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIENvbW1pdHRpbmcgcGVu
ZGluZyBzZWVrIHRvICVmIiwgbV9zZWVrVGltZSk7CisgICAgICAgIG1fc2Vla0lzUGVuZGluZyA9
IGZhbHNlOworICAgICAgICBpZiAoIWRvU2VlaygpKSB7CisgICAgICAgICAgICBHU1RfV0FSTklO
RygiW1NlZWtdIFNlZWtpbmcgdG8gJWYgZmFpbGVkIiwgbV9zZWVrVGltZSk7CisgICAgICAgICAg
ICBtX2NhY2hlZFBvc2l0aW9uID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdTVF9ERUJVRygiW1NlZWtdIFNlZWtlZCB0byAlZiIsIG1fc2Vla1RpbWUpOwor
CisgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyht
X3NvdXJjZS5nZXQoKSksIHRydWUpOworICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgIG1fY2Fj
aGVkUG9zaXRpb24gPSAtMTsKKyAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhhdmUgYSBw
ZW5kaW5nIHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZhaWwuCisg
ICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2UgbV9zZWVrVGltZSBhcyBhIGZhbGxiYWNrLgorICAg
IG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRydWU7CisgICAgdGlt
ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVw
ZGF0ZVBsYXliYWNrUmF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3NlZWtpbmc7Cit9CisKKy8vIEZJWE1FOiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIgbWFuYWdlcyB0aGUgUmVhZHlTdGF0ZSBvbiBpdHMgb3duLiBXZSBzaG91bGRuJ3QgY2hhbmdl
IGl0IG1hbnVhbGx5Lgordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJl
YWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBpZiAo
cmVhZHlTdGF0ZSA9PSBtX3JlYWR5U3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChz
ZWVraW5nKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJTa2lwIHJlYWR5IHN0YXRlIGNoYW5nZSgl
cyAtPiAlcykgZHVlIHRvIHNlZWtcbiIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSksIGR1
bXBSZWFkeVN0YXRlKHJlYWR5U3RhdGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEdTVF9ERUJVRygiUmVhZHkgU3RhdGUgQ2hhbmdlZCBtYW51YWxseSBmcm9tICV1IHRvICV1Iiwg
bV9yZWFkeVN0YXRlLCByZWFkeVN0YXRlKTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBv
bGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOworICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3Rh
dGU7CisgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU6ICVzIC0+ICVzIiwgZHVtcFJlYWR5U3Rh
dGUob2xkUmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworCisgICAg
aWYgKG9sZFJlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhICYmIG1fcmVh
ZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhKSB7CisgICAgICAgIEdTVF9E
RUJVRygiW1NlZWtdIFJlcG9ydGluZyBsb2FkIHN0YXRlIGNoYW5nZWQgdG8gdHJpZ2dlciBzZWVr
IGNvbnRpbnVhdGlvbiIpOworICAgICAgICBsb2FkU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAg
IG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgR3N0U3RhdGUgcGlwZWxpbmVT
dGF0ZTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVt
ZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmcGlwZWxpbmVTdGF0ZSwgbnVsbHB0ciwg
MjUwICogR1NUX05TRUNPTkQpOworICAgIGJvb2wgaXNQbGF5aW5nID0gKGdldFN0YXRlUmVzdWx0
ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBwaXBlbGluZVN0YXRlID09IEdTVF9TVEFU
RV9QTEFZSU5HKTsKKworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YSAmJiBvbGRSZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBp
c1BsYXlpbmcpIHsKKyAgICAgICAgR1NUX1RSQUNFKCJDaGFuZ2luZyBwaXBlbGluZSB0byBQQVVT
RUQuLi4iKTsKKyAgICAgICAgYm9vbCBvayA9IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRF
X1BBVVNFRCk7CisgICAgICAgIEdTVF9UUkFDRSgiQ2hhbmdlZCBwaXBlbGluZSB0byBQQVVTRUQ6
ICVzIiwgb2sgPyAiU3VjY2VzcyIgOiAiRXJyb3IiKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAg
aWYgKCFtX3NlZWtpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiV2FpdGlu
ZyBmb3IgTVNFIHNlZWsgY29tcGxldGVkIik7CisgICAgbV9tc2VTZWVrQ29tcGxldGVkID0gZmFs
c2U7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrQ29tcGxl
dGVkKCkKK3sKKyAgICBpZiAobV9tc2VTZWVrQ29tcGxldGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBHU1RfREVCVUcoIk1TRSBzZWVrIGNvbXBsZXRlZCIpOworICAgIG1fbXNlU2Vla0NvbXBs
ZXRlZCA9IHRydWU7CisKKyAgICBkb1NlZWsoKTsKKworICAgIGlmICghc2Vla2luZygpICYmIG1f
cmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEpCisgICAgICAgIGNoYW5n
ZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgaWYgKCFzZWVraW5nKCkp
CisgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmF0ZShmbG9hdCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
ZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQoKQoreworICAgIG1fc291cmNlLmNsZWFyKCk7CisgICAg
Z19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJzb3VyY2UiLCAmbV9zb3VyY2Uub3V0UHRy
KCksIG51bGxwdHIpOworCisgICAgQVNTRVJUKFdFQktJVF9JU19NRURJQV9TUkMobV9zb3VyY2Uu
Z2V0KCkpKTsKKworICAgIG1fcGxheWJhY2tQaXBlbGluZS0+c2V0V2ViS2l0TWVkaWFTcmMoV0VC
S0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSkpOworCisgICAgTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6Om9wZW4obV9tZWRpYVNvdXJjZS5nZXQoKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlk
ZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9zb3VyY2UuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRD
YWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5n
ZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOworICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJ
QV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0aGlzKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3Bp
cGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwor
ICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5nOworCisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4g
Z2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwg
JnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NUX05TRUNPTkQpOworCisgICAgYm9vbCBzaG91bGRV
cGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7CisgICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkg
eworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOiB7CisgICAgICAgIEdTVF9ERUJV
RygiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0
YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworCisgICAgICAgIC8v
IERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0ZSBjaGFuZ2VkIHRvIFJFQURZIHRvIGF2b2lk
IHJlY3JlYXRpbmcgdGhlIHBsYXllcgorICAgICAgICAvLyBvbiBIVE1MTWVkaWFFbGVtZW50IGFu
ZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8gJ2VuZGVkJyBldmVudC4KKyAgICAgICAgaWYg
KG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IChzdGF0ZSA8PSBHU1RfU1RBVEVf
UkVBRFkpOworICAgICAgICBpZiAobV9yZXNldFBpcGVsaW5lKQorICAgICAgICAgICAgbV9tZWRp
YVRpbWVEdXJhdGlvbiA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKworICAgICAgICAvLyBVcGRh
dGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgorICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlT
dGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1wdHk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5
U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKKyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUExB
WUlORzoKKyAgICAgICAgICAgIGlmIChzZWVraW5nKCkpIHsKKyAgICAgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBTaG91bGQgd2UgbWFuYWdlIE5ldHdvcmtTdGF0ZSB0b28/CisgICAgICAgICAgICAg
ICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3Rh
dGUpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9idWZmZXJpbmcpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9idWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgeworICAgICAgICAgICAgICAg
ICAgICBHU1RfREVCVUcoIltCdWZmZXJpbmddIENvbXBsZXRlLiIpOworICAgICAgICAgICAgICAg
ICAgICBtX2J1ZmZlcmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICAgICAgICAgIEdT
VF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVk
ID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoIm1f
cmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAg
ICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7
CisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hE
YXRhOworICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJl
YWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAg
ICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3Jl
YWR5U3RhdGUpKTsKKyAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVy
OjpMb2FkaW5nOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9lb3NNYXJrZWQg
JiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCisgICAgICAgICAgICAgICAgbV9lb3NQZW5k
aW5nID0gdHJ1ZTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU3luYyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgorICAgICAgICBpZiAo
c3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFu
ZE11dGVJbml0aWFsaXplZCkgeworICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1l
Q2hhbmdlKCk7CisgICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisgICAgICAg
ICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXNlZWtpbmcoKSAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1
c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVm
ZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOworICAgICAgICAgICAgICAgIGNoYW5nZVBp
cGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CisgICAgICAgICAgICBtX3Bh
dXNlZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoKG1fYnVmZmVyaW5nICYmICFpc0xpdmVT
dHJlYW0oKSkgfHwgIW1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVH
KCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOworICAgICAgICAg
ICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAg
ICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgc3RhdGUgPT0g
R1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0
ZSA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVCVUcoIlJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2Ug
dG8gJXMgd2FzIGNvbXBsZXRlZCIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7
CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVf
Q0hBTkdFX0FTWU5DOgorICAgICAgICBHU1RfREVCVUcoIkFzeW5jOiBTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBpbiBwcm9ncmVzcy4K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CisgICAg
ICAgIEdTVF9XQVJOSU5HKCJGYWlsdXJlOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2Vs
ZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShw
ZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBmYWlsZWQuCisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKKyAgICAgICAgR1NUX0RFQlVHKCJO
byBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAg
ICAgICAgLy8gTGl2ZSBwaXBlbGluZXMgZ28gaW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4K
KyAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRydWU7CisKKyAgICAgICAgaWYgKHN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBk
dW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9
PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0
ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgbV9wYXVz
ZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5H
KQorICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKworICAgICAgICBpZiAoIW1fcGF1c2Vk
ICYmIG1fcGxheWJhY2tSYXRlKQorICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1Rf
U1RBVEVfUExBWUlORyk7CisKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVH
KCJFbHNlIDogJWQiLCBnZXRTdGF0ZVJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworCisgICAgaWYg
KHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0
YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0
ZSkgeworICAgICAgICBHU1RfREVCVUcoIk5ldHdvcmsgU3RhdGUgQ2hhbmdlZCBmcm9tICV1IHRv
ICV1Iiwgb2xkTmV0d29ya1N0YXRlLCBtX25ldHdvcmtTdGF0ZSk7CisgICAgICAgIG1fcGxheWVy
LT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0g
b2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUcoIlJlYWR5IFN0YXRlIENoYW5nZWQg
ZnJvbSAldSB0byAldSIsIG9sZFJlYWR5U3RhdGUsIG1fcmVhZHlTdGF0ZSk7CisgICAgICAgIG1f
cGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAgIGlmIChnZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgc3RhdGUgPj0gR1NUX1NUQVRFX1BB
VVNFRCkgeworICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKKyAgICAgICAgbWF5YmVGaW5p
c2hTZWVrKCk7CisgICAgfQorfQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUg
fHwgbV9lcnJvck9jY3VyZWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zZWVraW5n
KQorICAgICAgICBtYXliZUZpbmlzaFNlZWsoKTsKKyAgICBlbHNlCisgICAgICAgIHVwZGF0ZVN0
YXRlcygpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNUaW1l
QnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lICZ0aW1lKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0
ID0gbV9tZWRpYVNvdXJjZSAmJiBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpLT5jb250YWluKHRp
bWUpOworICAgIEdTVF9ERUJVRygiVGltZSAlZiBidWZmZXJlZD8gJXMiLCB0aW1lLnRvRG91Ymxl
KCksIHJlc3VsdCA/ICJZZXMiIDogIk5vIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldE1lZGlhU291cmNlQ2xpZW50KFBh
c3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IGNsaWVudCkKK3sKKyAgICBt
X21lZGlhU291cmNlQ2xpZW50ID0gY2xpZW50OworfQorCitSZWZQdHI8TWVkaWFTb3VyY2VDbGll
bnRHU3RyZWFtZXJNU0U+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWVkaWFTb3Vy
Y2VDbGllbnQoKQoreworICAgIHJldHVybiBtX21lZGlhU291cmNlQ2xpZW50OworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAg
ICBpZiAoIW1fbWVkaWFTb3VyY2VDbGllbnQpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJtX21lZGlh
U291cmNlQ2xpZW50IGlzIG51bGwsIGRvaW5nIG5vdGhpbmciKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIE1lZGlhVGltZSBwcmV2aW91c0R1cmF0aW9uID0gbV9tZWRpYVRpbWVEdXJh
dGlvbjsKKyAgICBtX21lZGlhVGltZUR1cmF0aW9uID0gbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVy
YXRpb24oKTsKKworICAgIEdTVF9UUkFDRSgicHJldmlvdXM9JWYsIG5ldz0lZiIsIHByZXZpb3Vz
RHVyYXRpb24udG9GbG9hdCgpLCBtX21lZGlhVGltZUR1cmF0aW9uLnRvRmxvYXQoKSk7CisKKyAg
ICAvLyBBdm9pZCBlbWl0aW5nIGR1cmF0aW9uY2hhbmdlZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUg
cHJldmlvdXMgZHVyYXRpb24gd2FzIDAgYmVjYXVzZSB0aGF0IGNhc2UgaXMgYWxyZWFkeSBoYW5k
bGVkCisgICAgLy8gYnkgdGhlIEhUTUxNZWRpYUVsZW1lbnQuCisgICAgaWYgKG1fbWVkaWFUaW1l
RHVyYXRpb24gIT0gcHJldmlvdXNEdXJhdGlvbiAmJiBtX21lZGlhVGltZUR1cmF0aW9uLmlzVmFs
aWQoKSAmJiBwcmV2aW91c0R1cmF0aW9uLmlzVmFsaWQoKSkgeworICAgICAgICBtX3BsYXllci0+
ZHVyYXRpb25DaGFuZ2VkKCk7CisgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZS0+bm90aWZ5RHVy
YXRpb25DaGFuZ2VkKCk7CisgICAgICAgIG1fbWVkaWFTb3VyY2UtPmR1cmF0aW9uQ2hhbmdlZCht
X21lZGlhVGltZUR1cmF0aW9uKTsKKyAgICB9Cit9CisKK3N0YXRpYyBIYXNoU2V0PFN0cmluZywg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgbWltZVR5cGVDYWNoZSgpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
PiBjYWNoZSA9IFtdKCkKKyAgICB7CisgICAgICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdp
c3RlcldlYktpdE1TRUVsZW1lbnQoKTsKKyAgICAgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaD4gc2V0OworICAgICAgICBjb25zdCBjaGFyKiBtaW1lVHlwZXNbXSA9
IHsKKyAgICAgICAgICAgICJ2aWRlby9tcDQiLAorICAgICAgICAgICAgImF1ZGlvL21wNCIKKyAg
ICAgICAgfTsKKyAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogbWltZVR5cGVzKQorICAgICAgICAg
ICAgc2V0LmFkZCh0eXBlKTsKKyAgICAgICAgcmV0dXJuIHNldDsKKyAgICB9KCk7CisgICAgcmV0
dXJuIGNhY2hlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0
U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4m
IHR5cGVzKQoreworICAgIHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5kUGlw
ZWxpbmU+IGFwcGVuZFBpcGVsaW5lLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4g
b2xkVHJhY2ssIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBuZXdUcmFjaykKK3sK
KyAgICBBU1NFUlQoYXBwZW5kUGlwZWxpbmUtPnRyYWNrKCkgPT0gbmV3VHJhY2spOworCisgICAg
R3N0Q2FwcyogY2FwcyA9IGFwcGVuZFBpcGVsaW5lLT5hcHBzaW5rQ2FwcygpOworICAgIEFTU0VS
VChjYXBzKTsKKyAgICBHU1RfREVCVUcoInRyYWNrIElEOiAlcywgY2FwczogJSIgR1NUX1BUUl9G
T1JNQVQsIG5ld1RyYWNrLT5pZCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgY2Fwcyk7CisK
KyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fw
cywgMCk7CisgICAgY29uc3QgZ2NoYXIqIG1lZGlhVHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25h
bWUoc3RydWN0dXJlKTsKKyAgICBHc3RWaWRlb0luZm8gaW5mbzsKKworICAgIGlmIChnX3N0cl9o
YXNfcHJlZml4KG1lZGlhVHlwZSwgInZpZGVvLyIpICYmIGdzdF92aWRlb19pbmZvX2Zyb21fY2Fw
cygmaW5mbywgY2FwcykpIHsKKyAgICAgICAgZmxvYXQgd2lkdGgsIGhlaWdodDsKKworICAgICAg
ICB3aWR0aCA9IGluZm8ud2lkdGg7CisgICAgICAgIGhlaWdodCA9IGluZm8uaGVpZ2h0ICogKChm
bG9hdCkgaW5mby5wYXJfZCAvIChmbG9hdCkgaW5mby5wYXJfbik7CisgICAgICAgIG1fdmlkZW9T
aXplLnNldFdpZHRoKHdpZHRoKTsKKyAgICAgICAgbV92aWRlb1NpemUuc2V0SGVpZ2h0KGhlaWdo
dCk7CisgICAgfQorCisgICAgaWYgKCFvbGRUcmFjaykKKyAgICAgICAgbV9wbGF5YmFja1BpcGVs
aW5lLT5hdHRhY2hUcmFjayhhcHBlbmRQaXBlbGluZS0+c291cmNlQnVmZmVyUHJpdmF0ZSgpLCBu
ZXdUcmFjaywgc3RydWN0dXJlLCBjYXBzKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGxheWJhY2tQ
aXBlbGluZS0+cmVhdHRhY2hUcmFjayhhcHBlbmRQaXBlbGluZS0+c291cmNlQnVmZmVyUHJpdmF0
ZSgpLCBuZXdUcmFjayk7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBw
b3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICBNZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKyAgICBpZiAoIXBhcmFt
ZXRlcnMuaXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIERp
c2FibGUgVlBYL09wdXMgb24gTVNFIGZvciBub3csIG1wNC9hdmMxIHNlZW1zIHdheSBtb3JlIHJl
bGlhYmxlIGN1cnJlbnRseS4KKyAgICBpZiAocGFyYW1ldGVycy50eXBlLmVuZHNXaXRoKCJ3ZWJt
IikpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBZb3VUdWJlIFRWIHByb3ZpZGVz
IGVtcHR5IHR5cGVzIGZvciBzb21lIHZpZGVvcyBhbmQgd2Ugd2FudCB0byBiZSBzZWxlY3RlZCBh
cyBiZXN0IG1lZGlhIGVuZ2luZSBmb3IgdGhlbS4KKyAgICBpZiAocGFyYW1ldGVycy50eXBlLmlz
RW1wdHkoKSkgeworICAgICAgICByZXN1bHQgPSBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQ7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gU3BlYyBzYXlzIHdlIHNo
b3VsZCBub3QgcmV0dXJuICJwcm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHku
CisgICAgaWYgKG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5cGUpKQorICAg
ICAgICByZXN1bHQgPSBwYXJhbWV0ZXJzLmNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6
TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4g
ZXh0ZW5kZWRTdXBwb3J0c1R5cGUocGFyYW1ldGVycywgcmVzdWx0KTsKK30KKworI2lmIEVOQUJM
RShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OmRpc3BhdGNoRGVjcnlwdGlvbktleShHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBm
b3IgKEhhc2hNYXA8UmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBSZWZQdHI8
QXBwZW5kUGlwZWxpbmU+ID46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9hcHBlbmRQaXBlbGluZXNN
YXAuYmVnaW4oKTsgaXRlcmF0b3IgIT0gbV9hcHBlbmRQaXBlbGluZXNNYXAuZW5kKCk7ICsraXRl
cmF0b3IpIHsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kU3RhdGUoKSA9PSBB
cHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uKSB7CisgICAgICAgICAg
ICBHU1RfVFJBQ0UoImFwcGVuZCBwaXBlbGluZSAlcCBpbiBrZXkgbmVnb3RpYXRpb24sIHNldHRp
bmcga2V5IiwgaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50
X3NlbmRfZXZlbnQoaXRlcmF0b3ItPnZhbHVlLT5waXBlbGluZSgpLCBnc3RfZXZlbnRfbmV3X2N1
c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09CLAorICAgICAgICAgICAgICAgIGdz
dF9zdHJ1Y3R1cmVfbmV3KCJkcm0tY2lwaGVyIiwgImtleSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVm
ZmVyLCBudWxscHRyKSkpOworICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5zZXRBcHBlbmRT
dGF0ZShBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6Ok9uZ29pbmcpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIEdTVF9UUkFDRSgiYXBwZW5kIHBpcGVsaW5lICVwIG5vdCBpbiBrZXkg
bmVnb3RpYXRpb24iLCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworICAgIH0KK30KKyNlbmRpZgor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKE1l
ZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQoreworICAgIGlmIChz
dGF0dXMgIT0gTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vycm9yKQorICAgICAgICByZXR1cm47
CisKKyAgICBHU1RfREVCVUcoIk1hcmtpbmcgZW5kIG9mIHN0cmVhbSIpOworICAgIG1fZW9zTWFy
a2VkID0gdHJ1ZTsKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKworTWVkaWFUaW1lIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0Cit7CisgICAg
TWVkaWFUaW1lIHBvc2l0aW9uID0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50
TWVkaWFUaW1lKCk7CisKKyAgICBpZiAobV9lb3NQZW5kaW5nICYmIChwYXVzZWQoKSB8fCAocG9z
aXRpb24gPj0gZHVyYXRpb25NZWRpYVRpbWUoKSkpKSB7CisgICAgICAgIGlmIChtX25ldHdvcmtT
dGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGVkKSB7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CisgICAgICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0
YXRlQ2hhbmdlZCgpOworICAgICAgICB9CisKKyAgICAgICAgbV9lb3NQZW5kaW5nID0gZmFsc2U7
CisgICAgICAgIG1faXNFbmRSZWFjaGVkID0gdHJ1ZTsKKyAgICAgICAgbV9jYWNoZWRQb3NpdGlv
biA9IG1fbWVkaWFUaW1lRHVyYXRpb24udG9GbG9hdCgpOworICAgICAgICBtX2R1cmF0aW9uQXRF
T1MgPSBtX21lZGlhVGltZUR1cmF0aW9uLnRvRmxvYXQoKTsKKyAgICAgICAgbV9wbGF5ZXItPnRp
bWVDaGFuZ2VkKCk7CisgICAgfQorICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworZmxvYXQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAorewor
ICAgIGlmIChVTkxJS0VMWShtX2Vycm9yT2NjdXJlZCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgR1NUX0RFQlVHKCJtYXhUaW1lU2Vla2FibGUiKTsKKyAgICBmbG9hdCByZXN1bHQgPSBkdXJh
dGlvbk1lZGlhVGltZSgpLnRvRG91YmxlKCk7CisgICAgLy8gSW5maW5pdGUgZHVyYXRpb24gbWVh
bnMgbGl2ZSBzdHJlYW0uCisgICAgaWYgKGlzaW5mKHJlc3VsdCkpIHsKKyAgICAgICAgTWVkaWFU
aW1lIG1heEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkKCktPm1heGltdW1CdWZmZXJlZFRpbWUoKTsK
KyAgICAgICAgLy8gUmV0dXJuIHRoZSBoaWdoZXN0IGVuZCB0aW1lIHJlcG9ydGVkIGJ5IHRoZSBi
dWZmZXJlZCBhdHRyaWJ1dGUuCisgICAgICAgIHJlc3VsdCA9IG1heEJ1ZmZlcmVkVGltZS5pc1Zh
bGlkKCkgPyBtYXhCdWZmZXJlZFRpbWUudG9GbG9hdCgpIDogMDsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwMWJlMzMwOGFmNzc2YjAxMWFkMTQ4OWJmODBk
ODBjZDEwYzdmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCkBA
IC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDE2IEln
YWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3Rp
YW5AY2VudHJpY3VsYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICAmJiBFTkFCTEUoVklERU9fVFJBQ0sp
CisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIKKyNpbmNsdWRlICJN
ZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIKKyNp
bmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOworY2xhc3MgQXBwZW5k
UGlwZWxpbmU7CitjbGFzcyBQbGF5YmFja1BpcGVsaW5lOworCitjbGFzcyBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Up
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVNvdXJj
ZUNsaWVudEdTdHJlYW1lck1TRTsKKworcHVibGljOgorICAgIGV4cGxpY2l0IE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRShNZWRpYVBsYXllciopOworICAgIHZpcnR1YWwgfk1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRSgpOworCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRp
YUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CisKKyAgICB2b2lkIGxvYWQoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNl
UHJpdmF0ZUNsaWVudCopIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXREb3dubG9hZEJ1ZmZlcmlu
ZygpIG92ZXJyaWRlIHsgfTsKKworICAgIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOworICAgIGJvb2wgc2Vl
a2luZygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2VlayhmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIG92ZXJyaWRlOworICAgIGJvb2wgY2hhbmdlUGlw
ZWxpbmVTdGF0ZShHc3RTdGF0ZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdl
ZCgpIG92ZXJyaWRlOworICAgIE1lZGlhVGltZSBkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KSBvdmVycmlkZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBz
b3VyY2VDaGFuZ2VkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAg
ICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKKyAgICBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1l
ZGlhU291cmNlUHJpdmF0ZUNsaWVudCgpIHsgcmV0dXJuIG1fbWVkaWFTb3VyY2UuZ2V0KCk7IH0K
KworICAgIHZvaWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJl
YW1TdGF0dXMpOworCisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgdm9p
ZCBkaXNwYXRjaERlY3J5cHRpb25LZXkoR3N0QnVmZmVyKikgb3ZlcnJpZGU7CisjZW5kaWYKKwor
ICAgIHZvaWQgdHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5kUGlwZWxpbmU+LCBSZWZQdHI8V2Vi
Q29yZTo6VHJhY2tQcml2YXRlQmFzZT4gb2xkVHJhY2ssIFJlZlB0cjxXZWJDb3JlOjpUcmFja1By
aXZhdGVCYXNlPiBuZXdUcmFjayk7CisgICAgdm9pZCBub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGlt
ZShjb25zdCBNZWRpYVRpbWUmKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBw
b3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYpOwor
ICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBN
ZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWls
YWJsZSgpOworCisgICAgLy8gRklYTUU6IFJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLgorICAgIHZv
aWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGRvU2VlayhnaW50NjQsIGZs
b2F0LCBHc3RTZWVrRmxhZ3MpIG92ZXJyaWRlOworICAgIGJvb2wgZG9TZWVrKCk7CisgICAgdm9p
ZCBtYXliZUZpbmlzaFNlZWsoKTsKKyAgICB2b2lkIHVwZGF0ZVBsYXliYWNrUmF0ZSgpIG92ZXJy
aWRlOworICAgIHZvaWQgYXN5bmNTdGF0ZUNoYW5nZURvbmUoKSBvdmVycmlkZTsKKworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCisgICAgdW5zaWduZWQgbG9uZyB0b3RhbFZpZGVvRnJhbWVzKCkg
b3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIHVuc2lnbmVkIGxvbmcgZHJvcHBlZFZpZGVvRnJh
bWVzKCkgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIHVuc2lnbmVkIGxvbmcgY29ycnVwdGVk
VmlkZW9GcmFtZXMoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgTWVkaWFUaW1lIHRvdGFs
RnJhbWVEZWxheSgpIG92ZXJyaWRlIHsgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsgfQor
ICAgIGJvb2wgaXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lJikgY29uc3Q7CisKKyAgICBi
b29sIGlzTWVkaWFTb3VyY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICB2b2lkIHNldE1lZGlhU291cmNlQ2xpZW50KFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U+KTsKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+
IG1lZGlhU291cmNlQ2xpZW50KCk7CisKKyAgICBIYXNoTWFwPFJlZlB0cjxTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPEFwcGVuZFBpcGVsaW5lPj4gbV9hcHBlbmRQaXBlbGlu
ZXNNYXA7CisgICAgYm9vbCBtX2Vvc01hcmtlZDsKKyAgICBtdXRhYmxlIGJvb2wgbV9lb3NQZW5k
aW5nOworICAgIGJvb2wgbV9nc3RTZWVrQ29tcGxldGVkOworICAgIFJlZlB0cjxNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQ+IG1fbWVkaWFTb3VyY2U7CisgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xp
ZW50R1N0cmVhbWVyTVNFPiBtX21lZGlhU291cmNlQ2xpZW50OworICAgIE1lZGlhVGltZSBtX21l
ZGlhVGltZUR1cmF0aW9uOworICAgIGJvb2wgbV9tc2VTZWVrQ29tcGxldGVkOworICAgIFJlZlB0
cjxQbGF5YmFja1BpcGVsaW5lPiBtX3BsYXliYWNrUGlwZWxpbmU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292256</attachid>
            <date>2016-10-20 13:57:39 -0700</date>
            <delta_ts>2016-10-21 14:26:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162900-20161020205400.patch</filename>
            <type>text/plain</type>
            <size>41643</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzVmZTBhMGFiM2VkMDk1
ZWFkODAwNjQxMzgwM2ExOGNlMDRmNTgzZS4uZThiODhiYjM0M2I1NTBiZGRmZGU1YjY2NjZlMWIy
MDVmNmM5YmQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYyIEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJp
dmF0ZSBmb3IgR1N0cmVhbWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI5MDAKKworICAgICAgICBSZXZpZXdlZCBieSBYYWJpZXIgUm9kcmlndWV6
LUNhbHZhci4KKworICAgICAgICBSZWZhY3RvciBNU0Utc3BlY2lmaWMgbG9naWMgdG8gaXRzIG93
biBHU3RyZWFtZXIgcGxheWVyLiBUaGlzIG5ldyBNU0UgcGxheWVyIGNvb3JkaW5hdGVzCisgICAg
ICAgIGRhdGEgYXBwZW5kaW5nLCBtZWRpYSBwbGF5YmFjayBhbmQgaW50ZXJhY3Rpb24gd2l0aCBN
ZWRpYVNvdXJjZSBieSBkZWxlZ2F0aW5nIHRvCisgICAgICAgIEFwcGVuZFBpcGVsaW5lIChvbmUg
aW5zdGFuY2UgcGVyIFNvdXJjZUJ1ZmZlciksIFBsYXliYWNrUGlwZWxpbmUgYW5kCisgICAgICAg
IE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudCBy
ZXNwZWN0aXZlbHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRoIFBo
aWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+IChFTUUgc3VwcG9ydCkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpidWlsZE1lZGlhRW5naW5lc1ZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGR1bXBSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJD
b3JlOjppbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
ZHVyYXRpb25NZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6Y29uZmlndXJlUGxheVNpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjaGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bm90aWZ5U2Vla05l
ZWRzRGF0YUZvclRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVraW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Ondh
aXRGb3JTZWVrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3lu
Y1N0YXRlQ2hhbmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OmlzVGltZUJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0TWVkaWFTb3VyY2VDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJjZUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1
cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVk
VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojp0cmFja0RldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVu
dE1lZGlhVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1lZGlhU291cmNl
UHJpdmF0ZUNsaWVudCk6CisKKzIwMTYtMTAtMDQgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAg
PGVvY2FuaGFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1N0cmVhbWVyXVtNU0VdIE1lZGlhU291
cmNlR1N0cmVhbWVyIHJlZmFjdG9yaW5nCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI4OTkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDE1YmE2ZjNhN2U4YzcwMWUzMTc4MWNhNjZj
YjZmODRmNGFlMDJhYjkuLmU1ZDZjMzVkOTU5NjYwZmU5ZTYxMmEzMzRjMjgzMGY3NmU2OTk3ZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTU3LDcgKzU3LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmgiCiAjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShN
RURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaCIKICNlbmRpZgorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
CiAKICNpZiBVU0UoTUVESUFfRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uaCIKQEAgLTIyOSw2ICsyMzIsMTAgQEAgc3RhdGljIHZvaWQgYnVp
bGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWU6
OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnJl
Z2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCisKICAgICBoYXZlTWVk
aWFFbmdpbmVzVmVjdG9yKCkgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGUwZjM3
YWU3N2RjNjlhZWVjODU2YmE4NDFhOGIwZGEzYTc3ODFmNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFLmNwcApAQCAtMCwwICsxLDg0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE2IElnYWxpYSBTLkwK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJp
Y3VsYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBF
TkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJB
cHBlbmRQaXBlbGluZS5oIgorI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiVVJMLmgiCisj
aW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9h
cHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKyNpbmNsdWRl
IDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyKiBkdW1wUmVhZHlT
dGF0ZShXZWJDb3JlOjpNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQoreworICAg
IHN3aXRjaCAocmVhZHlTdGF0ZSkgeworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nOiByZXR1cm4gIkhhdmVOb3RoaW5nIjsKKyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlh
UGxheWVyOjpIYXZlTWV0YWRhdGE6IHJldHVybiAiSGF2ZU1ldGFkYXRhIjsKKyAgICBjYXNlIFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE6IHJldHVybiAiSGF2ZUN1cnJlbnRE
YXRhIjsKKyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTogcmV0
dXJuICJIYXZlRnV0dXJlRGF0YSI7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVBsYXllcjo6SGF2
ZUVub3VnaERhdGE6IHJldHVybiAiSGF2ZUVub3VnaERhdGEiOworICAgIGRlZmF1bHQ6IHJldHVy
biAiKHVua25vd24pIjsKKyAgICB9Cit9CisKKy8vIE1heCBpbnRlcnZhbCBpbiBzZWNvbmRzIHRv
IHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1hbnVhbCBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMu
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgZ1JlYWR5U3RhdGVUaW1lckludGVydmFsID0gNjA7CisK
K0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfbXNlX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9E
RUZBVUxUIHdlYmtpdF9tc2VfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVu
Z2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpIHsKKyAg
ICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFPihwbGF5ZXIpOyB9LAorICAg
ICAgICAgICAgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgc3VwcG9ydHNLZXlTeXN0ZW0pOworICAgIH0KK30KKworYm9vbCBpbml0aWFs
aXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50KCkKK3sKKyAgICBpZiAoVU5M
SUtFTFkoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKKworICAgIEdTVF9ERUJVR19D
QVRFR09SWV9JTklUKHdlYmtpdF9tc2VfZGVidWcsICJ3ZWJraXRtc2UiLCAwLCAiV2ViS2l0IE1T
RSBtZWRpYSBwbGF5ZXIiKTsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IFdlYktp
dE1lZGlhU3JjRmFjdG9yeSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoIndl
YmtpdG1lZGlhc3JjIikpOworICAgIGlmIChVTkxJS0VMWSghV2ViS2l0TWVkaWFTcmNGYWN0b3J5
KSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdG1lZGlhc3Jj
IiwgR1NUX1JBTktfUFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfU1JDKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Omlz
QXZhaWxhYmxlKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIWluaXRpYWxpemVHU3RyZWFtZXJBbmRS
ZWdpc3RlcldlYktpdE1TRUVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IGZhY3RvcnkgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZmFjdG9yeV9maW5kKCJwbGF5YmluIikpOworICAgIHJldHVybiBmYWN0b3J5OworfQorCitN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKHBsYXllcikKKyAgICAsIG1fZW9zTWFya2VkKGZhbHNlKQorICAgICwgbV9lb3NQZW5kaW5n
KGZhbHNlKQorICAgICwgbV9nc3RTZWVrQ29tcGxldGVkKHRydWUpCisgICAgLCBtX21zZVNlZWtD
b21wbGV0ZWQodHJ1ZSkKK3sKKyAgICBHU1RfVFJBQ0UoImNyZWF0aW5nIHRoZSBwbGF5ZXIgKCVw
KSIsIHRoaXMpOworfQorCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6On5NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0UoKQoreworICAgIEdTVF9UUkFDRSgiZGVzdHJveWluZyB0
aGUgcGxheWVyICglcCkiLCB0aGlzKTsKKworICAgIGZvciAoSGFzaE1hcDxSZWZQdHI8U291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4sIFJlZlB0cjxBcHBlbmRQaXBlbGluZT4+OjppdGVyYXRv
ciBpdGVyYXRvciA9IG1fYXBwZW5kUGlwZWxpbmVzTWFwLmJlZ2luKCk7IGl0ZXJhdG9yICE9IG1f
YXBwZW5kUGlwZWxpbmVzTWFwLmVuZCgpOyArK2l0ZXJhdG9yKQorICAgICAgICBpdGVyYXRvci0+
dmFsdWUtPmNsZWFyUGxheWVyUHJpdmF0ZSgpOworCisgICAgaWYgKG1fc291cmNlKSB7CisgICAg
ICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMo
bV9zb3VyY2UuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKG1fc291cmNlLmdldCgpLCB0aGlzKTsKKyAgICB9CisKKyAgICBpZiAo
bV9wbGF5YmFja1BpcGVsaW5lKQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPnNldFdlYktp
dE1lZGlhU3JjKG51bGxwdHIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAoVU5MSUtFTFko
IWluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdE1TRUVsZW1lbnQoKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghdXJsU3RyaW5nLnN0YXJ0c1dpdGgoIm1lZGlhc291cmNl
IikpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJVbnN1cHBvcnRlZCB1cmw6ICVzIiwgdXJsU3RyaW5n
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Bs
YXliYWNrUGlwZWxpbmUpCisgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZSA9IFBsYXliYWNrUGlw
ZWxpbmU6OmNyZWF0ZSgpOworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2Fk
KHVybFN0cmluZyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjps
b2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291
cmNlKQoreworICAgIFN0cmluZyBtZWRpYXNvdXJjZVVyaSA9IFN0cmluZzo6Zm9ybWF0KCJtZWRp
YXNvdXJjZSVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOworICAgIG1fbWVkaWFTb3VyY2UgPSBtZWRp
YVNvdXJjZTsKKyAgICBsb2FkKG1lZGlhc291cmNlVXJpKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKCkKK3sKKyAgICBtX3BhdXNlZCA9IHRydWU7Cisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSgpOworfQorCitNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0
Cit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAg
ICAgICAgcmV0dXJuIE1lZGlhVGltZSgpOworCisgICAgcmV0dXJuIG1fbWVkaWFUaW1lRHVyYXRp
b247Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGZsb2F0
IHRpbWUpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVk
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0lORk8oIltTZWVrXSBzZWVrIGF0dGVtcHQg
dG8gJWYgc2VjcyIsIHRpbWUpOworCisgICAgLy8gQXZvaWQgdXNlbGVzcyBzZWVraW5nLgorICAg
IGZsb2F0IGN1cnJlbnQgPSBjdXJyZW50TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKKyAgICBpZiAo
dGltZSA9PSBjdXJyZW50KSB7CisgICAgICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICAgICAg
dGltZUNoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0xpdmVT
dHJlYW0oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2Vla2luZyAmJiBtX3NlZWtJ
c1BlbmRpbmcpIHsKKyAgICAgICAgbV9zZWVrVGltZSA9IHRpbWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBHU1RfREVCVUcoIlNlZWtpbmcgZnJvbSAlZiB0byAlZiBzZWNvbmRzIiwg
Y3VycmVudCwgdGltZSk7CisKKyAgICBmbG9hdCBwcmV2U2Vla1RpbWUgPSBtX3NlZWtUaW1lOwor
ICAgIG1fc2Vla1RpbWUgPSB0aW1lOworCisgICAgaWYgKCFkb1NlZWsoKSkgeworICAgICAgICBt
X3NlZWtUaW1lID0gcHJldlNlZWtUaW1lOworICAgICAgICBHU1RfV0FSTklORygiU2Vla2luZyB0
byAlZiBmYWlsZWQiLCB0aW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faXNF
bmRSZWFjaGVkID0gZmFsc2U7CisgICAgR1NUX0RFQlVHKCJtX3NlZWtpbmc9JXMsIG1fc2Vla1Rp
bWU9JWYiLCBtX3NlZWtpbmcgPyAidHJ1ZSIgOiAiZmFsc2UiLCBtX3NlZWtUaW1lKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNvbmZpZ3VyZVBsYXlTaW5rKCkK
K3sKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbmZpZ3VyZVBsYXlTaW5rKCk7
CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHBsYXlzaW5rID0gYWRvcHRHUmVmKGdzdF9iaW5f
Z2V0X2J5X25hbWUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgInBsYXlzaW5rIikpOworICAg
IGlmIChwbGF5c2luaykgeworICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSAoMCkgbWVhbnMg
InNlbmQgZXZlbnRzIHRvIGFsbCB0aGUgc2lua3MiLCBpbnN0ZWFkCisgICAgICAgIC8vIG9mICJv
bmx5IHRvIHRoZSBmaXJzdCB0aGF0IHJldHVybnMgdHJ1ZSIuIFRoaXMgaXMgbmVlZGVkIGZvciBN
U0Ugc2Vlay4KKyAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHBsYXlzaW5rLmdldCgpKSwg
InNlbmQtZXZlbnQtbW9kZSIsIDAsIG51bGxwdHIpOworICAgIH0KK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3
U3RhdGUpCit7CisgICAgaWYgKHNlZWtpbmcoKSkgeworICAgICAgICBHU1RfREVCVUcoIlJlamVj
dGVkIHN0YXRlIGNoYW5nZSB0byAlcyB3aGlsZSBzZWVraW5nIiwKKyAgICAgICAgICAgIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBp
cGVsaW5lU3RhdGUobmV3U3RhdGUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6bm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJiBzZWVr
VGltZSkKK3sKKyAgICAvLyBSZWVucXVldWUgc2FtcGxlcyBuZWVkZWQgdG8gcmVzdW1lIHBsYXli
YWNrIGluIHRoZSBuZXcgcG9zaXRpb24uCisgICAgbV9tZWRpYVNvdXJjZS0+c2Vla1RvVGltZShz
ZWVrVGltZSk7CisKKyAgICBHU1RfREVCVUcoIk1TRSBzZWVrIHRvICVmIGZpbmlzaGVkIiwgc2Vl
a1RpbWUudG9Eb3VibGUoKSk7CisKKyAgICBpZiAoIW1fZ3N0U2Vla0NvbXBsZXRlZCkgeworICAg
ICAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBtYXliZUZpbmlzaFNlZWso
KTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1Nl
ZWsoZ2ludDY0LCBmbG9hdCwgR3N0U2Vla0ZsYWdzKQoreworICAgIC8vIFVzZSBkb1NlZWsoKSBp
bnN0ZWFkLiBJZiBhbnlib2R5IGlzIGNhbGxpbmcgdGhpcyB2ZXJzaW9uIG9mIGRvU2VlaygpLCBz
b21ldGhpbmcgaXMgd3JvbmcuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVr
KCkKK3sKKyAgICBHc3RDbG9ja1RpbWUgcG9zaXRpb24gPSB0b0dzdENsb2NrVGltZShtX3NlZWtU
aW1lKTsKKyAgICBNZWRpYVRpbWUgc2Vla1RpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3Vi
bGUobV9zZWVrVGltZSk7CisgICAgZG91YmxlIHJhdGUgPSBtX3BsYXllci0+cmF0ZSgpOworICAg
IEdzdFNlZWtGbGFncyBzZWVrVHlwZSA9IHN0YXRpY19jYXN0PEdzdFNlZWtGbGFncz4oR1NUX1NF
RUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpOworCisgICAgLy8gQWx3YXlz
IG1vdmUgdG8gc2Vla2luZyBzdGF0ZSB0byByZXBvcnQgY29ycmVjdCAnY3VycmVudFRpbWUnIHdo
aWxlIHBlbmRpbmcgZm9yIGFjdHVhbCBzZWVrIHRvIGNvbXBsZXRlLgorICAgIG1fc2Vla2luZyA9
IHRydWU7CisKKyAgICAvLyBDaGVjayBpZiBwbGF5YmFjayBwaXBlbGluZSBpcyByZWFkeSBmb3Ig
c2Vlay4KKyAgICBHc3RTdGF0ZSBzdGF0ZSwgbmV3U3RhdGU7CisgICAgR3N0U3RhdGVDaGFuZ2VS
ZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgJnN0YXRlLCAmbmV3U3RhdGUsIDApOworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBH
U1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUgfHwgZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NI
QU5HRV9OT19QUkVST0xMKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIGNhbm5vdCBzZWVr
LCBjdXJyZW50IHN0YXRlIGNoYW5nZSBpcyAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9y
ZXR1cm5fZ2V0X25hbWUoZ2V0U3RhdGVSZXN1bHQpKTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNT
ZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUp
OworICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMKKyAg
ICAgICAgJiYgIShzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORyAmJiBuZXdTdGF0ZSA9PSBHU1Rf
U1RBVEVfUEFVU0VEKSkKKyAgICAgICAgfHwgc3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VECisgICAg
ICAgIHx8IG1faXNFbmRSZWFjaGVkCisgICAgICAgIHx8ICFtX2dzdFNlZWtDb21wbGV0ZWQpIHsK
KyAgICAgICAgQ1N0cmluZyByZWFzb24gPSAiVW5rbm93biByZWFzb24iOworICAgICAgICBpZiAo
Z2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykgeworICAgICAgICAgICAg
cmVhc29uID0gU3RyaW5nOjpmb3JtYXQoIkluIGFzeW5jIGNoYW5nZSAlcyAtLT4gJXMiLAorICAg
ICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwKKyAgICAgICAg
ICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpLnV0ZjgoKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQpCisgICAgICAgICAgICBy
ZWFzb24gPSAiU3RhdGUgbGVzcyB0aGFuIFBBVVNFRCI7CisgICAgICAgIGVsc2UgaWYgKG1faXNF
bmRSZWFjaGVkKQorICAgICAgICAgICAgcmVhc29uID0gIkVuZCByZWFjaGVkIjsKKyAgICAgICAg
ZWxzZSBpZiAoIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAgICAgICAgICAgIHJlYXNvbiA9ICJQcmV2
aW91cyBzZWVrIGlzIG5vdCBmaW5pc2hlZCB5ZXQiOworCisgICAgICAgIEdTVF9ERUJVRygiW1Nl
ZWtdIERlbGF5aW5nIHRoZSBzZWVrOiAlcyIsIHJlYXNvbi5kYXRhKCkpOworCisgICAgICAgIG1f
c2Vla0lzUGVuZGluZyA9IHRydWU7CisKKyAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkKSB7Cisg
ICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSByZXNldCBwaXBlbGluZSIpOworICAgICAgICAg
ICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQp
KQorICAgICAgICAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG1fc2Vla2luZzsKKyAgICB9CisKKyAgICAvLyBTdG9wIGFj
Y2VwdGluZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwgc2VlayBpcyBmaW5pc2hlZC4KKyAgICB3
ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNl
LmdldCgpKSwgZmFsc2UpOworCisgICAgLy8gQ29ycmVjdCBzZWVrIHRpbWUgaWYgaXQgaGVscHMg
dG8gZml4IGEgc21hbGwgZ2FwLgorICAgIGlmICghaXNUaW1lQnVmZmVyZWQoc2Vla1RpbWUpKSB7
CisgICAgICAgIC8vIExvb2sgaWYgYSBuZWFyIGZ1dHVyZSB0aW1lICg8MC4xIHNlYy4pIGlzIGJ1
ZmZlcmVkIGFuZCBjaGFuZ2UgdGhlIHNlZWsgdGFyZ2V0IHRpbWUuCisgICAgICAgIGlmIChtX21l
ZGlhU291cmNlKSB7CisgICAgICAgICAgICBjb25zdCBNZWRpYVRpbWUgbWluaUdhcCA9IE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZSgwLjEpOworICAgICAgICAgICAgTWVkaWFUaW1lIG5lYXJl
c3QgPSBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpLT5uZWFyZXN0KHNlZWtUaW1lKTsKKyAgICAg
ICAgICAgIGlmIChuZWFyZXN0LmlzVmFsaWQoKSAmJiBuZWFyZXN0ID4gc2Vla1RpbWUgJiYgKG5l
YXJlc3QgLSBzZWVrVGltZSkgPD0gbWluaUdhcCAmJiBpc1RpbWVCdWZmZXJlZChuZWFyZXN0ICsg
bWluaUdhcCkpIHsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDaGFuZ2VkIHRo
ZSBzZWVrIHRhcmdldCB0aW1lIGZyb20gJWYgdG8gJWYsIGEgbmVhciBwb2ludCBpbiB0aGUgZnV0
dXJlIiwgc2Vla1RpbWUudG9GbG9hdCgpLCBuZWFyZXN0LnRvRmxvYXQoKSk7CisgICAgICAgICAg
ICAgICAgc2Vla1RpbWUgPSBuZWFyZXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gQ2hlY2sgaWYgTVNFIGhhcyBzYW1wbGVzIGZvciByZXF1ZXN0ZWQgdGltZSBh
bmQgZGVmZXIgYWN0dWFsIHNlZWsgaWYgbmVlZGVkLgorICAgIGlmICghaXNUaW1lQnVmZmVyZWQo
c2Vla1RpbWUpKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIERlbGF5aW5nIHRoZSBzZWVr
OiBNU0UgaXMgbm90IHJlYWR5Iik7CisgICAgICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHNldFN0
YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9T
VEFURV9QQVVTRUQpOworICAgICAgICBpZiAoc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NI
QU5HRV9GQUlMVVJFKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDYW5ub3Qgc2Vl
aywgZmFpbGVkIHRvIHBhdXNlIHBsYXliYWNrIHBpcGVsaW5lLiIpOworICAgICAgICAgICAgd2Vi
S2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5n
ZXQoKSksIHRydWUpOworICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICAgICAgbm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUo
c2Vla1RpbWUpOworICAgICAgICBBU1NFUlQoIW1fbXNlU2Vla0NvbXBsZXRlZCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENvbXBsZXRlIHByZXZpb3VzIE1TRSBzZWVr
IGlmIG5lZWRlZC4KKyAgICBpZiAoIW1fbXNlU2Vla0NvbXBsZXRlZCkgeworICAgICAgICBtX21l
ZGlhU291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOworICAgICAgICBBU1NFUlQobV9tc2VT
ZWVrQ29tcGxldGVkKTsKKyAgICAgICAgLy8gTm90ZTogc2Vla0NvbXBsZXRlZCB3aWxsIHJlY3Vy
c2l2ZWx5IGNhbGwgdXMuCisgICAgICAgIHJldHVybiBtX3NlZWtpbmc7CisgICAgfQorCisgICAg
R1NUX0RFQlVHKCJXZSBjYW4gc2VlayBub3ciKTsKKworICAgIGdpbnQ2NCBzdGFydFRpbWUsIGVu
ZFRpbWU7CisKKyAgICBpZiAocmF0ZSA+IDApIHsKKyAgICAgICAgc3RhcnRUaW1lID0gcG9zaXRp
b247CisgICAgICAgIGVuZFRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgIH0gZWxzZSB7
CisgICAgICAgIHN0YXJ0VGltZSA9IDA7CisgICAgICAgIGVuZFRpbWUgPSBwb3NpdGlvbjsKKyAg
ICB9CisKKyAgICBpZiAoIXJhdGUpCisgICAgICAgIHJhdGUgPSAxOworCisgICAgR1NUX0RFQlVH
KCJBY3R1YWwgc2VlayB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZW5kIHRpbWU6ICAlIiBHU1Rf
VElNRV9GT1JNQVQgIiwgcmF0ZTogJWYiLCBHU1RfVElNRV9BUkdTKHN0YXJ0VGltZSksIEdTVF9U
SU1FX0FSR1MoZW5kVGltZSksIHJhdGUpOworCisgICAgLy8gVGhpcyB3aWxsIGNhbGwgbm90aWZ5
U2Vla05lZWRzRGF0YSgpIGFmdGVyIHNvbWUgdGltZSB0byB0ZWxsIHRoYXQgdGhlIHBpcGVsaW5l
IGlzIHJlYWR5IGZvciBzYW1wbGUgZW5xdWV1aW5nLgorICAgIHdlYktpdE1lZGlhU3JjUHJlcGFy
ZVNlZWsoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHNlZWtUaW1lKTsKKworICAg
IG1fZ3N0U2Vla0NvbXBsZXRlZCA9IGZhbHNlOworICAgIGlmICghZ3N0X2VsZW1lbnRfc2Vlayht
X3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtUeXBlLCBHU1RfU0VF
S19UWVBFX1NFVCwgc3RhcnRUaW1lLCBHU1RfU0VFS19UWVBFX1NFVCwgZW5kVGltZSkpIHsKKyAg
ICAgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyht
X3NvdXJjZS5nZXQoKSksIHRydWUpOworICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAg
ICAgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgR1NUX0RFQlVHKCJkb1NlZWso
KTogZ3N0X2VsZW1lbnRfc2VlaygpIGZhaWxlZCwgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgc2FtcGxlcyB3aWxsIGJlIGVucXVl
dWVkIGluIG5vdGlmeVNlZWtOZWVkc0RhdGEoKS4KKyAgICBHU1RfREVCVUcoImRvU2VlaygpOiBn
c3RfZWxlbWVudF9zZWVrKCkgc3VjY2VlZGVkLCByZXR1cm5pbmcgdHJ1ZSIpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVG
aW5pc2hTZWVrKCkKK3sKKyAgICBpZiAoIW1fc2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxldGVk
IHx8ICFtX2dzdFNlZWtDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFN0YXRl
IHN0YXRlLCBuZXdTdGF0ZTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3Vs
dCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZuZXdT
dGF0ZSwgMCk7CisKKyAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9B
U1lOQworICAgICAgICAmJiAhKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HICYmIG5ld1N0YXRl
ID09IEdTVF9TVEFURV9QQVVTRUQpKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIERlbGF5
aW5nIHNlZWsgZmluaXNoIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9z
ZWVrSXNQZW5kaW5nKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIENvbW1pdHRpbmcgcGVu
ZGluZyBzZWVrIHRvICVmIiwgbV9zZWVrVGltZSk7CisgICAgICAgIG1fc2Vla0lzUGVuZGluZyA9
IGZhbHNlOworICAgICAgICBpZiAoIWRvU2VlaygpKSB7CisgICAgICAgICAgICBHU1RfV0FSTklO
RygiW1NlZWtdIFNlZWtpbmcgdG8gJWYgZmFpbGVkIiwgbV9zZWVrVGltZSk7CisgICAgICAgICAg
ICBtX2NhY2hlZFBvc2l0aW9uID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdTVF9ERUJVRygiW1NlZWtdIFNlZWtlZCB0byAlZiIsIG1fc2Vla1RpbWUpOwor
CisgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyht
X3NvdXJjZS5nZXQoKSksIHRydWUpOworICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgIG1fY2Fj
aGVkUG9zaXRpb24gPSAtMTsKKyAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhhdmUgYSBw
ZW5kaW5nIHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZhaWwuCisg
ICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2UgbV9zZWVrVGltZSBhcyBhIGZhbGxiYWNrLgorICAg
IG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRydWU7CisgICAgdGlt
ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVw
ZGF0ZVBsYXliYWNrUmF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3NlZWtpbmc7Cit9CisKKy8vIEZJWE1FOiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIgbWFuYWdlcyB0aGUgUmVhZHlTdGF0ZSBvbiBpdHMgb3duLiBXZSBzaG91bGRuJ3QgY2hhbmdl
IGl0IG1hbnVhbGx5Lgordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJl
YWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBpZiAo
cmVhZHlTdGF0ZSA9PSBtX3JlYWR5U3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChz
ZWVraW5nKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJTa2lwIHJlYWR5IHN0YXRlIGNoYW5nZSgl
cyAtPiAlcykgZHVlIHRvIHNlZWtcbiIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSksIGR1
bXBSZWFkeVN0YXRlKHJlYWR5U3RhdGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEdTVF9ERUJVRygiUmVhZHkgU3RhdGUgQ2hhbmdlZCBtYW51YWxseSBmcm9tICV1IHRvICV1Iiwg
bV9yZWFkeVN0YXRlLCByZWFkeVN0YXRlKTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBv
bGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOworICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3Rh
dGU7CisgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU6ICVzIC0+ICVzIiwgZHVtcFJlYWR5U3Rh
dGUob2xkUmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworCisgICAg
aWYgKG9sZFJlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhICYmIG1fcmVh
ZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhKSB7CisgICAgICAgIEdTVF9E
RUJVRygiW1NlZWtdIFJlcG9ydGluZyBsb2FkIHN0YXRlIGNoYW5nZWQgdG8gdHJpZ2dlciBzZWVr
IGNvbnRpbnVhdGlvbiIpOworICAgICAgICBsb2FkU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAg
IG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgR3N0U3RhdGUgcGlwZWxpbmVT
dGF0ZTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVt
ZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmcGlwZWxpbmVTdGF0ZSwgbnVsbHB0ciwg
MjUwICogR1NUX05TRUNPTkQpOworICAgIGJvb2wgaXNQbGF5aW5nID0gKGdldFN0YXRlUmVzdWx0
ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBwaXBlbGluZVN0YXRlID09IEdTVF9TVEFU
RV9QTEFZSU5HKTsKKworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YSAmJiBvbGRSZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBp
c1BsYXlpbmcpIHsKKyAgICAgICAgR1NUX1RSQUNFKCJDaGFuZ2luZyBwaXBlbGluZSB0byBQQVVT
RUQuLi4iKTsKKyAgICAgICAgYm9vbCBvayA9IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRF
X1BBVVNFRCk7CisgICAgICAgIEdTVF9UUkFDRSgiQ2hhbmdlZCBwaXBlbGluZSB0byBQQVVTRUQ6
ICVzIiwgb2sgPyAiU3VjY2VzcyIgOiAiRXJyb3IiKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAg
aWYgKCFtX3NlZWtpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiV2FpdGlu
ZyBmb3IgTVNFIHNlZWsgY29tcGxldGVkIik7CisgICAgbV9tc2VTZWVrQ29tcGxldGVkID0gZmFs
c2U7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrQ29tcGxl
dGVkKCkKK3sKKyAgICBpZiAobV9tc2VTZWVrQ29tcGxldGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBHU1RfREVCVUcoIk1TRSBzZWVrIGNvbXBsZXRlZCIpOworICAgIG1fbXNlU2Vla0NvbXBs
ZXRlZCA9IHRydWU7CisKKyAgICBkb1NlZWsoKTsKKworICAgIGlmICghc2Vla2luZygpICYmIG1f
cmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEpCisgICAgICAgIGNoYW5n
ZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgaWYgKCFzZWVraW5nKCkp
CisgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmF0ZShmbG9hdCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
ZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQoKQoreworICAgIG1fc291cmNlLmNsZWFyKCk7CisgICAg
Z19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJzb3VyY2UiLCAmbV9zb3VyY2Uub3V0UHRy
KCksIG51bGxwdHIpOworCisgICAgQVNTRVJUKFdFQktJVF9JU19NRURJQV9TUkMobV9zb3VyY2Uu
Z2V0KCkpKTsKKworICAgIG1fcGxheWJhY2tQaXBlbGluZS0+c2V0V2ViS2l0TWVkaWFTcmMoV0VC
S0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSkpOworCisgICAgTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6Om9wZW4obV9tZWRpYVNvdXJjZS5nZXQoKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlk
ZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9zb3VyY2UuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRD
YWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5n
ZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOworICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJ
QV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0aGlzKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3Bp
cGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwor
ICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5nOworCisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4g
Z2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwg
JnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NUX05TRUNPTkQpOworCisgICAgYm9vbCBzaG91bGRV
cGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7CisgICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkg
eworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOiB7CisgICAgICAgIEdTVF9ERUJV
RygiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0
YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworCisgICAgICAgIC8v
IERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0ZSBjaGFuZ2VkIHRvIFJFQURZIHRvIGF2b2lk
IHJlY3JlYXRpbmcgdGhlIHBsYXllcgorICAgICAgICAvLyBvbiBIVE1MTWVkaWFFbGVtZW50IGFu
ZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8gJ2VuZGVkJyBldmVudC4KKyAgICAgICAgaWYg
KG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IChzdGF0ZSA8PSBHU1RfU1RBVEVf
UkVBRFkpOworICAgICAgICBpZiAobV9yZXNldFBpcGVsaW5lKQorICAgICAgICAgICAgbV9tZWRp
YVRpbWVEdXJhdGlvbiA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKworICAgICAgICAvLyBVcGRh
dGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgorICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlT
dGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1wdHk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5
U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKKyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUExB
WUlORzoKKyAgICAgICAgICAgIGlmIChzZWVraW5nKCkpIHsKKyAgICAgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBTaG91bGQgd2UgbWFuYWdlIE5ldHdvcmtTdGF0ZSB0b28/CisgICAgICAgICAgICAg
ICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3Rh
dGUpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9idWZmZXJpbmcpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9idWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgeworICAgICAgICAgICAgICAg
ICAgICBHU1RfREVCVUcoIltCdWZmZXJpbmddIENvbXBsZXRlLiIpOworICAgICAgICAgICAgICAg
ICAgICBtX2J1ZmZlcmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICAgICAgICAgIEdT
VF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVk
ID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoIm1f
cmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAg
ICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7
CisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hE
YXRhOworICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJl
YWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAg
ICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3Jl
YWR5U3RhdGUpKTsKKyAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVy
OjpMb2FkaW5nOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9lb3NNYXJrZWQg
JiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCisgICAgICAgICAgICAgICAgbV9lb3NQZW5k
aW5nID0gdHJ1ZTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU3luYyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgorICAgICAgICBpZiAo
c3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFu
ZE11dGVJbml0aWFsaXplZCkgeworICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1l
Q2hhbmdlKCk7CisgICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisgICAgICAg
ICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXNlZWtpbmcoKSAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1
c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVm
ZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOworICAgICAgICAgICAgICAgIGNoYW5nZVBp
cGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CisgICAgICAgICAgICBtX3Bh
dXNlZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoKG1fYnVmZmVyaW5nICYmICFpc0xpdmVT
dHJlYW0oKSkgfHwgIW1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVH
KCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOworICAgICAgICAg
ICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAg
ICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgc3RhdGUgPT0g
R1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0
ZSA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVCVUcoIlJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2Ug
dG8gJXMgd2FzIGNvbXBsZXRlZCIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7
CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVf
Q0hBTkdFX0FTWU5DOgorICAgICAgICBHU1RfREVCVUcoIkFzeW5jOiBTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBpbiBwcm9ncmVzcy4K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CisgICAg
ICAgIEdTVF9XQVJOSU5HKCJGYWlsdXJlOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2Vs
ZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShw
ZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBmYWlsZWQuCisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKKyAgICAgICAgR1NUX0RFQlVHKCJO
byBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAg
ICAgICAgLy8gTGl2ZSBwaXBlbGluZXMgZ28gaW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4K
KyAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRydWU7CisKKyAgICAgICAgaWYgKHN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBk
dW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9
PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0
ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgbV9wYXVz
ZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5H
KQorICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKworICAgICAgICBpZiAoIW1fcGF1c2Vk
ICYmIG1fcGxheWJhY2tSYXRlKQorICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1Rf
U1RBVEVfUExBWUlORyk7CisKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVH
KCJFbHNlIDogJWQiLCBnZXRTdGF0ZVJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworCisgICAgaWYg
KHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0
YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0
ZSkgeworICAgICAgICBHU1RfREVCVUcoIk5ldHdvcmsgU3RhdGUgQ2hhbmdlZCBmcm9tICV1IHRv
ICV1Iiwgb2xkTmV0d29ya1N0YXRlLCBtX25ldHdvcmtTdGF0ZSk7CisgICAgICAgIG1fcGxheWVy
LT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0g
b2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUcoIlJlYWR5IFN0YXRlIENoYW5nZWQg
ZnJvbSAldSB0byAldSIsIG9sZFJlYWR5U3RhdGUsIG1fcmVhZHlTdGF0ZSk7CisgICAgICAgIG1f
cGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAgIGlmIChnZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgc3RhdGUgPj0gR1NUX1NUQVRFX1BB
VVNFRCkgeworICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKKyAgICAgICAgbWF5YmVGaW5p
c2hTZWVrKCk7CisgICAgfQorfQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUg
fHwgbV9lcnJvck9jY3VyZWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zZWVraW5n
KQorICAgICAgICBtYXliZUZpbmlzaFNlZWsoKTsKKyAgICBlbHNlCisgICAgICAgIHVwZGF0ZVN0
YXRlcygpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNUaW1l
QnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lICZ0aW1lKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0
ID0gbV9tZWRpYVNvdXJjZSAmJiBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpLT5jb250YWluKHRp
bWUpOworICAgIEdTVF9ERUJVRygiVGltZSAlZiBidWZmZXJlZD8gJXMiLCB0aW1lLnRvRG91Ymxl
KCksIHJlc3VsdCA/ICJZZXMiIDogIk5vIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldE1lZGlhU291cmNlQ2xpZW50KFJl
ZjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gY2xpZW50KQoreworICAgIG1fbWVkaWFT
b3VyY2VDbGllbnQgPSBjbGllbnQucHRyKCk7Cit9CisKK1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVu
dEdTdHJlYW1lck1TRT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJj
ZUNsaWVudCgpCit7CisgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2VDbGllbnQ7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbkNoYW5nZWQoKQoreworICAg
IGlmICghbV9tZWRpYVNvdXJjZUNsaWVudCkgeworICAgICAgICBHU1RfREVCVUcoIm1fbWVkaWFT
b3VyY2VDbGllbnQgaXMgbnVsbCwgZG9pbmcgbm90aGluZyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgTWVkaWFUaW1lIHByZXZpb3VzRHVyYXRpb24gPSBtX21lZGlhVGltZUR1cmF0
aW9uOworICAgIG1fbWVkaWFUaW1lRHVyYXRpb24gPSBtX21lZGlhU291cmNlQ2xpZW50LT5kdXJh
dGlvbigpOworCisgICAgR1NUX1RSQUNFKCJwcmV2aW91cz0lZiwgbmV3PSVmIiwgcHJldmlvdXNE
dXJhdGlvbi50b0Zsb2F0KCksIG1fbWVkaWFUaW1lRHVyYXRpb24udG9GbG9hdCgpKTsKKworICAg
IC8vIEF2b2lkIGVtaXRpbmcgZHVyYXRpb25jaGFuZ2VkIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBw
cmV2aW91cyBkdXJhdGlvbiB3YXMgMCBiZWNhdXNlIHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRs
ZWQKKyAgICAvLyBieSB0aGUgSFRNTE1lZGlhRWxlbWVudC4KKyAgICBpZiAobV9tZWRpYVRpbWVE
dXJhdGlvbiAhPSBwcmV2aW91c0R1cmF0aW9uICYmIG1fbWVkaWFUaW1lRHVyYXRpb24uaXNWYWxp
ZCgpICYmIHByZXZpb3VzRHVyYXRpb24uaXNWYWxpZCgpKSB7CisgICAgICAgIG1fcGxheWVyLT5k
dXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5ub3RpZnlEdXJh
dGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9tZWRpYVNvdXJjZS0+ZHVyYXRpb25DaGFuZ2VkKG1f
bWVkaWFUaW1lRHVyYXRpb24pOworICAgIH0KK30KKworc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZUNhY2hlKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+
IGNhY2hlID0gW10oKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lz
dGVyV2ViS2l0TVNFRWxlbWVudCgpOworICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBzZXQ7CisgICAgICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0g
eworICAgICAgICAgICAgInZpZGVvL21wNCIsCisgICAgICAgICAgICAiYXVkaW8vbXA0IgorICAg
ICAgICB9OworICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBtaW1lVHlwZXMpCisgICAgICAgICAg
ICBzZXQuYWRkKHR5cGUpOworICAgICAgICByZXR1cm4gc2V0OworICAgIH0oKTsKKyAgICByZXR1
cm4gY2FjaGU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRT
dXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYg
dHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBl
bGluZT4gYXBwZW5kUGlwZWxpbmUsIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBv
bGRUcmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNrKQorewor
ICAgIEFTU0VSVChhcHBlbmRQaXBlbGluZS0+dHJhY2soKSA9PSBuZXdUcmFjayk7CisKKyAgICBH
c3RDYXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmtDYXBzKCk7CisgICAgQVNTRVJU
KGNhcHMpOworICAgIEdTVF9ERUJVRygidHJhY2sgSUQ6ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgbmV3VHJhY2stPmlkKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBjYXBzKTsKKwor
ICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBz
LCAwKTsKKyAgICBjb25zdCBnY2hhciogbWVkaWFUeXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFt
ZShzdHJ1Y3R1cmUpOworICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgaWYgKGdfc3RyX2hh
c19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8vIikgJiYgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBz
KCZpbmZvLCBjYXBzKSkgeworICAgICAgICBmbG9hdCB3aWR0aCwgaGVpZ2h0OworCisgICAgICAg
IHdpZHRoID0gaW5mby53aWR0aDsKKyAgICAgICAgaGVpZ2h0ID0gaW5mby5oZWlnaHQgKiAoKGZs
b2F0KSBpbmZvLnBhcl9kIC8gKGZsb2F0KSBpbmZvLnBhcl9uKTsKKyAgICAgICAgbV92aWRlb1Np
emUuc2V0V2lkdGgod2lkdGgpOworICAgICAgICBtX3ZpZGVvU2l6ZS5zZXRIZWlnaHQoaGVpZ2h0
KTsKKyAgICB9CisKKyAgICBpZiAoIW9sZFRyYWNrKQorICAgICAgICBtX3BsYXliYWNrUGlwZWxp
bmUtPmF0dGFjaFRyYWNrKGFwcGVuZFBpcGVsaW5lLT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5l
d1RyYWNrLCBzdHJ1Y3R1cmUsIGNhcHMpOworICAgIGVsc2UKKyAgICAgICAgbV9wbGF5YmFja1Bp
cGVsaW5lLT5yZWF0dGFjaFRyYWNrKGFwcGVuZFBpcGVsaW5lLT5zb3VyY2VCdWZmZXJQcml2YXRl
KCksIG5ld1RyYWNrKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBv
cnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5
cGUgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworICAgIGlmICghcGFyYW1l
dGVycy5pc01lZGlhU291cmNlKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLy8gRGlz
YWJsZSBWUFgvT3B1cyBvbiBNU0UgZm9yIG5vdywgbXA0L2F2YzEgc2VlbXMgd2F5IG1vcmUgcmVs
aWFibGUgY3VycmVudGx5LgorICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuZW5kc1dpdGgoIndlYm0i
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFlvdVR1YmUgVFYgcHJvdmlkZXMg
ZW1wdHkgdHlwZXMgZm9yIHNvbWUgdmlkZW9zIGFuZCB3ZSB3YW50IHRvIGJlIHNlbGVjdGVkIGFz
IGJlc3QgbWVkaWEgZW5naW5lIGZvciB0aGVtLgorICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNF
bXB0eSgpKSB7CisgICAgICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBTcGVjIHNheXMgd2Ugc2hv
dWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eS4K
KyAgICBpZiAobWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAg
ICAgIHJlc3VsdCA9IHBhcmFtZXRlcnMuY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpN
YXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKKworICAgIHJldHVybiBl
eHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0ZXJzLCByZXN1bHQpOworfQorCisjaWYgRU5BQkxF
KExFR0FDWV9FTkNSWVBURURfTUVESUEpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAgIGZv
ciAoSGFzaE1hcDxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4sIFJlZlB0cjxB
cHBlbmRQaXBlbGluZT4gPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2FwcGVuZFBpcGVsaW5lc01h
cC5iZWdpbigpOyBpdGVyYXRvciAhPSBtX2FwcGVuZFBpcGVsaW5lc01hcC5lbmQoKTsgKytpdGVy
YXRvcikgeworICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLT5hcHBlbmRTdGF0ZSgpID09IEFw
cGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6S2V5TmVnb3RpYXRpb24pIHsKKyAgICAgICAgICAg
IEdTVF9UUkFDRSgiYXBwZW5kIHBpcGVsaW5lICVwIGluIGtleSBuZWdvdGlhdGlvbiwgc2V0dGlu
ZyBrZXkiLCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
c2VuZF9ldmVudChpdGVyYXRvci0+dmFsdWUtPnBpcGVsaW5lKCksIGdzdF9ldmVudF9uZXdfY3Vz
dG9tKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0IsCisgICAgICAgICAgICAgICAgZ3N0
X3N0cnVjdHVyZV9uZXcoImRybS1jaXBoZXIiLCAia2V5IiwgR1NUX1RZUEVfQlVGRkVSLCBidWZm
ZXIsIG51bGxwdHIpKSk7CisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPnNldEFwcGVuZFN0
YXRlKEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6T25nb2luZyk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgR1NUX1RSQUNFKCJhcHBlbmQgcGlwZWxpbmUgJXAgbm90IGluIGtleSBu
ZWdvdGlhdGlvbiIsIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CisgICAgfQorfQorI2VuZGlmCisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0oTWVk
aWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCit7CisgICAgaWYgKHN0
YXR1cyAhPSBNZWRpYVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3IpCisgICAgICAgIHJldHVybjsK
KworICAgIEdTVF9ERUJVRygiTWFya2luZyBlbmQgb2Ygc3RyZWFtIik7CisgICAgbV9lb3NNYXJr
ZWQgPSB0cnVlOworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKK3sKKyAgICBN
ZWRpYVRpbWUgcG9zaXRpb24gPSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRN
ZWRpYVRpbWUoKTsKKworICAgIGlmIChtX2Vvc1BlbmRpbmcgJiYgKHBhdXNlZCgpIHx8IChwb3Np
dGlvbiA+PSBkdXJhdGlvbk1lZGlhVGltZSgpKSkpIHsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0
YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkZWQpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRl
ID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBtX2Vvc1BlbmRpbmcgPSBmYWxzZTsK
KyAgICAgICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOworICAgICAgICBtX2NhY2hlZFBvc2l0aW9u
ID0gbV9tZWRpYVRpbWVEdXJhdGlvbi50b0Zsb2F0KCk7CisgICAgICAgIG1fZHVyYXRpb25BdEVP
UyA9IG1fbWVkaWFUaW1lRHVyYXRpb24udG9GbG9hdCgpOworICAgICAgICBtX3BsYXllci0+dGlt
ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitmbG9hdCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKFVOTElLRUxZKG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBHU1RfREVCVUcoIm1heFRpbWVTZWVrYWJsZSIpOworICAgIGZsb2F0IHJlc3VsdCA9IGR1cmF0
aW9uTWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKKyAgICAvLyBJbmZpbml0ZSBkdXJhdGlvbiBtZWFu
cyBsaXZlIHN0cmVhbS4KKyAgICBpZiAoaXNpbmYocmVzdWx0KSkgeworICAgICAgICBNZWRpYVRp
bWUgbWF4QnVmZmVyZWRUaW1lID0gYnVmZmVyZWQoKS0+bWF4aW11bUJ1ZmZlcmVkVGltZSgpOwor
ICAgICAgICAvLyBSZXR1cm4gdGhlIGhpZ2hlc3QgZW5kIHRpbWUgcmVwb3J0ZWQgYnkgdGhlIGJ1
ZmZlcmVkIGF0dHJpYnV0ZS4KKyAgICAgICAgcmVzdWx0ID0gbWF4QnVmZmVyZWRUaW1lLmlzVmFs
aWQoKSA/IG1heEJ1ZmZlcmVkVGltZS50b0Zsb2F0KCkgOiAwOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjk1YTAwODAwNmU0ZTc2MTZhNWQzYmNiZTYyY2Zh
NjEzZWE3N2Q4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAg
LTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTYgSWdh
bGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlh
bkBjZW50cmljdWxhci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgICYmIEVOQUJMRShWSURFT19UUkFDSykK
KworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgorI2luY2x1ZGUgIk1l
ZGlhU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgorI2lu
Y2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U7CitjbGFzcyBBcHBlbmRQ
aXBlbGluZTsKK2NsYXNzIFBsYXliYWNrUGlwZWxpbmU7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCisgICAgZnJpZW5kIGNsYXNzIE1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyTVNFOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFKE1lZGlhUGxheWVyKik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlh
RW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKworICAgIHZvaWQgbG9hZChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3VyY2VQ
cml2YXRlQ2xpZW50Kikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldERvd25sb2FkQnVmZmVyaW5n
KCkgb3ZlcnJpZGUgeyB9OworCisgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzZWVr
aW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZWVrKGZsb2F0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIGNvbmZpZ3VyZVBsYXlTaW5rKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjaGFuZ2VQaXBl
bGluZVN0YXRlKEdzdFN0YXRlKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2Vk
KCkgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIHNldFJhdGUoZmxvYXQpIG92ZXJyaWRlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNv
dXJjZUNoYW5nZWQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSk7CisgICAgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOworICAg
IHZvaWQgc2Vla0NvbXBsZXRlZCgpOworICAgIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbWVk
aWFTb3VyY2VQcml2YXRlQ2xpZW50KCkgeyByZXR1cm4gbV9tZWRpYVNvdXJjZS5nZXQoKTsgfQor
CisgICAgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVh
bVN0YXR1cyk7CisKKyNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkKKyAgICB2b2lk
IGRpc3BhdGNoRGVjcnlwdGlvbktleShHc3RCdWZmZXIqKSBvdmVycmlkZTsKKyNlbmRpZgorCisg
ICAgdm9pZCB0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4sIFJlZlB0cjxXZWJD
b3JlOjpUcmFja1ByaXZhdGVCYXNlPiBvbGRUcmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJp
dmF0ZUJhc2U+IG5ld1RyYWNrKTsKKyAgICB2b2lkIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1l
KGNvbnN0IE1lZGlhVGltZSYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGdldFN1cHBv
cnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7Cisg
ICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1l
ZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKKworICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlKCk7CisKKyAgICAvLyBGSVhNRTogUmVkdWNlIGNvZGUgZHVwbGljYXRpb24uCisgICAgdm9p
ZCB1cGRhdGVTdGF0ZXMoKSBvdmVycmlkZTsKKworICAgIGJvb2wgZG9TZWVrKGdpbnQ2NCwgZmxv
YXQsIEdzdFNlZWtGbGFncykgb3ZlcnJpZGU7CisgICAgYm9vbCBkb1NlZWsoKTsKKyAgICB2b2lk
IG1heWJlRmluaXNoU2VlaygpOworICAgIHZvaWQgdXBkYXRlUGxheWJhY2tSYXRlKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBhc3luY1N0YXRlQ2hhbmdlRG9uZSgpIG92ZXJyaWRlOworCisgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KKyAgICB1bnNpZ25lZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSBv
dmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdW5zaWduZWQgbG9uZyBkcm9wcGVkVmlkZW9GcmFt
ZXMoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdW5zaWduZWQgbG9uZyBjb3JydXB0ZWRW
aWRlb0ZyYW1lcygpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBNZWRpYVRpbWUgdG90YWxG
cmFtZURlbGF5KCkgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Cisg
ICAgYm9vbCBpc1RpbWVCdWZmZXJlZChjb25zdCBNZWRpYVRpbWUmKSBjb25zdDsKKworICAgIGJv
b2wgaXNNZWRpYVNvdXJjZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAg
IHZvaWQgc2V0TWVkaWFTb3VyY2VDbGllbnQoUmVmPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVy
TVNFPik7CisgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiBtZWRpYVNv
dXJjZUNsaWVudCgpOworCisgICAgSGFzaE1hcDxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcj4sIFJlZlB0cjxBcHBlbmRQaXBlbGluZT4+IG1fYXBwZW5kUGlwZWxpbmVzTWFwOwor
ICAgIGJvb2wgbV9lb3NNYXJrZWQ7CisgICAgbXV0YWJsZSBib29sIG1fZW9zUGVuZGluZzsKKyAg
ICBib29sIG1fZ3N0U2Vla0NvbXBsZXRlZDsKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRl
Q2xpZW50PiBtX21lZGlhU291cmNlOworICAgIFJlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJl
YW1lck1TRT4gbV9tZWRpYVNvdXJjZUNsaWVudDsKKyAgICBNZWRpYVRpbWUgbV9tZWRpYVRpbWVE
dXJhdGlvbjsKKyAgICBib29sIG1fbXNlU2Vla0NvbXBsZXRlZDsKKyAgICBSZWZQdHI8UGxheWJh
Y2tQaXBlbGluZT4gbV9wbGF5YmFja1BpcGVsaW5lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292409</attachid>
            <date>2016-10-21 14:26:45 -0700</date>
            <delta_ts>2016-10-26 01:20:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162900-20161021212305.patch</filename>
            <type>text/plain</type>
            <size>41136</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzVmZTBhMGFiM2VkMDk1
ZWFkODAwNjQxMzgwM2ExOGNlMDRmNTgzZS4uZThiODhiYjM0M2I1NTBiZGRmZGU1YjY2NjZlMWIy
MDVmNmM5YmQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYyIEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJp
dmF0ZSBmb3IgR1N0cmVhbWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI5MDAKKworICAgICAgICBSZXZpZXdlZCBieSBYYWJpZXIgUm9kcmlndWV6
LUNhbHZhci4KKworICAgICAgICBSZWZhY3RvciBNU0Utc3BlY2lmaWMgbG9naWMgdG8gaXRzIG93
biBHU3RyZWFtZXIgcGxheWVyLiBUaGlzIG5ldyBNU0UgcGxheWVyIGNvb3JkaW5hdGVzCisgICAg
ICAgIGRhdGEgYXBwZW5kaW5nLCBtZWRpYSBwbGF5YmFjayBhbmQgaW50ZXJhY3Rpb24gd2l0aCBN
ZWRpYVNvdXJjZSBieSBkZWxlZ2F0aW5nIHRvCisgICAgICAgIEFwcGVuZFBpcGVsaW5lIChvbmUg
aW5zdGFuY2UgcGVyIFNvdXJjZUJ1ZmZlciksIFBsYXliYWNrUGlwZWxpbmUgYW5kCisgICAgICAg
IE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudCBy
ZXNwZWN0aXZlbHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRoIFBo
aWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+IChFTUUgc3VwcG9ydCkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpidWlsZE1lZGlhRW5naW5lc1ZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGR1bXBSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJD
b3JlOjppbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
ZHVyYXRpb25NZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6Y29uZmlndXJlUGxheVNpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjaGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bm90aWZ5U2Vla05l
ZWRzRGF0YUZvclRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVraW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Ondh
aXRGb3JTZWVrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3lu
Y1N0YXRlQ2hhbmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OmlzVGltZUJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0TWVkaWFTb3VyY2VDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJjZUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1
cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVk
VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojp0cmFja0RldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVu
dE1lZGlhVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1lZGlhU291cmNl
UHJpdmF0ZUNsaWVudCk6CisKKzIwMTYtMTAtMDQgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAg
PGVvY2FuaGFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1N0cmVhbWVyXVtNU0VdIE1lZGlhU291
cmNlR1N0cmVhbWVyIHJlZmFjdG9yaW5nCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI4OTkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDE1YmE2ZjNhN2U4YzcwMWUzMTc4MWNhNjZj
YjZmODRmNGFlMDJhYjkuLmU1ZDZjMzVkOTU5NjYwZmU5ZTYxMmEzMzRjMjgzMGY3NmU2OTk3ZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTU3LDcgKzU3LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmgiCiAjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShN
RURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaCIKICNlbmRpZgorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
CiAKICNpZiBVU0UoTUVESUFfRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uaCIKQEAgLTIyOSw2ICsyMzIsMTAgQEAgc3RhdGljIHZvaWQgYnVp
bGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWU6
OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnJl
Z2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCisKICAgICBoYXZlTWVk
aWFFbmdpbmVzVmVjdG9yKCkgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI3MGUw
NmU2ZjhlNWJlODhlYzQxMmQ5N2NhZGEyYzRhMjY2ZGVmOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFLmNwcApAQCAtMCwwICsxLDgzNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE2IElnYWxpYSBTLkwK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJp
Y3VsYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBF
TkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIKKyNpbmNs
dWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclV0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTWVkaWFEZXNjcmlwdGlv
bi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
VGltZVJhbmdlcy5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNs
dWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRl
IDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Cisj
aW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorCitzdGF0aWMgY29uc3QgY2hhciogZHVtcFJlYWR5U3RhdGUoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHJlYWR5U3RhdGUpIHsK
KyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpIYXZlTm90aGluZzogcmV0dXJuICJIYXZl
Tm90aGluZyI7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOiBy
ZXR1cm4gIkhhdmVNZXRhZGF0YSI7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVBsYXllcjo6SGF2
ZUN1cnJlbnREYXRhOiByZXR1cm4gIkhhdmVDdXJyZW50RGF0YSI7CisgICAgY2FzZSBXZWJDb3Jl
OjpNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE6IHJldHVybiAiSGF2ZUZ1dHVyZURhdGEiOwor
ICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOiByZXR1cm4gIkhh
dmVFbm91Z2hEYXRhIjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIih1bmtub3duKSI7CisgICAgfQor
fQorCisvLyBNYXggaW50ZXJ2YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0
ZSBvbiBtYW51YWwgc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgorc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGdSZWFkeVN0YXRlVGltZXJJbnRlcnZhbCA9IDYwOworCitHU1RfREVCVUdfQ0FURUdPUlkod2Vi
a2l0X21zZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbXNlX2RlYnVn
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFy
KQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKSB7CisgICAgICAgIHJlZ2lzdHJhcihbXShNZWRp
YVBsYXllciogcGxheWVyKSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRT4ocGxheWVyKTsgfSwKKyAgICAgICAgICAgIGdldFN1cHBvcnRlZFR5
cGVzLCBzdXBwb3J0c1R5cGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHN1cHBvcnRzS2V5
U3lzdGVtKTsKKyAgICB9Cit9CisKK2Jvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVy
V2ViS2l0TVNFRWxlbWVudCgpCit7CisgICAgaWYgKFVOTElLRUxZKCFpbml0aWFsaXplR1N0cmVh
bWVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZWdpc3RlcldlYktpdEdTdHJl
YW1lckVsZW1lbnRzKCk7CisKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbXNl
X2RlYnVnLCAid2Via2l0bXNlIiwgMCwgIldlYktpdCBNU0UgbWVkaWEgcGxheWVyIik7CisKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiBXZWJLaXRNZWRpYVNyY0ZhY3RvcnkgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJ3ZWJraXRtZWRpYXNyYyIpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIVdlYktpdE1lZGlhU3JjRmFjdG9yeSkpCisgICAgICAgIGdzdF9lbGVtZW50
X3JlZ2lzdGVyKG51bGxwdHIsICJ3ZWJraXRtZWRpYXNyYyIsIEdTVF9SQU5LX1BSSU1BUlkgKyAx
MDAsIFdFQktJVF9UWVBFX01FRElBX1NSQyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjppc0F2YWlsYWJsZSgpCit7CisgICAgaWYg
KFVOTElLRUxZKCFpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0
b3J5PiBmYWN0b3J5ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgicGxheWJp
biIpKTsKKyAgICByZXR1cm4gZmFjdG9yeTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UoTWVkaWFQbGF5ZXIqIHBsYXll
cikKKyAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcihwbGF5ZXIpCit7CisgICAgR1NU
X1RSQUNFKCJjcmVhdGluZyB0aGUgcGxheWVyICglcCkiLCB0aGlzKTsKK30KKworTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKCkK
K3sKKyAgICBHU1RfVFJBQ0UoImRlc3Ryb3lpbmcgdGhlIHBsYXllciAoJXApIiwgdGhpcyk7CisK
KyAgICBmb3IgKGF1dG8gaXRlcmF0b3IgOiBtX2FwcGVuZFBpcGVsaW5lc01hcCkKKyAgICAgICAg
aXRlcmF0b3IudmFsdWUtPmNsZWFyUGxheWVyUHJpdmF0ZSgpOworCisgICAgaWYgKG1fc291cmNl
KSB7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9N
RURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fc291cmNlLmdldCgpLCB0aGlzKTsKKyAgICB9CisK
KyAgICBpZiAobV9wbGF5YmFja1BpcGVsaW5lKQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUt
PnNldFdlYktpdE1lZGlhU3JjKG51bGxwdHIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAo
VU5MSUtFTFkoIWluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdE1TRUVsZW1lbnQo
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdXJsU3RyaW5nLnN0YXJ0c1dpdGgoIm1l
ZGlhc291cmNlIikpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJVbnN1cHBvcnRlZCB1cmw6ICVzIiwg
dXJsU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFtX3BsYXliYWNrUGlwZWxpbmUpCisgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZSA9IFBs
YXliYWNrUGlwZWxpbmU6OmNyZWF0ZSgpOworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpsb2FkKHVybFN0cmluZyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQq
IG1lZGlhU291cmNlKQoreworICAgIG1fbWVkaWFTb3VyY2UgPSBtZWRpYVNvdXJjZTsKKyAgICBs
b2FkKFN0cmluZzo6Zm9ybWF0KCJtZWRpYXNvdXJjZSVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKCkKK3sKKyAg
ICBtX3BhdXNlZCA9IHRydWU7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVz
ZSgpOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJh
dGlvbk1lZGlhVGltZSgpIGNvbnN0Cit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8
IG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZSgpOworCisgICAgcmV0
dXJuIG1fbWVkaWFUaW1lRHVyYXRpb247Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpzZWVrKGZsb2F0IHRpbWUpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVs
aW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0lORk8o
IltTZWVrXSBzZWVrIGF0dGVtcHQgdG8gJWYgc2VjcyIsIHRpbWUpOworCisgICAgLy8gQXZvaWQg
dXNlbGVzcyBzZWVraW5nLgorICAgIGZsb2F0IGN1cnJlbnQgPSBjdXJyZW50TWVkaWFUaW1lKCku
dG9GbG9hdCgpOworICAgIGlmICh0aW1lID09IGN1cnJlbnQpIHsKKyAgICAgICAgaWYgKCFtX3Nl
ZWtpbmcpCisgICAgICAgICAgICB0aW1lQ2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9zZWVraW5nICYmIG1fc2Vla0lzUGVuZGluZykgeworICAgICAgICBtX3NlZWtUaW1lID0gdGlt
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdTVF9ERUJVRygiU2Vla2luZyBmcm9t
ICVmIHRvICVmIHNlY29uZHMiLCBjdXJyZW50LCB0aW1lKTsKKworICAgIGZsb2F0IHByZXZTZWVr
VGltZSA9IG1fc2Vla1RpbWU7CisgICAgbV9zZWVrVGltZSA9IHRpbWU7CisKKyAgICBpZiAoIWRv
U2VlaygpKSB7CisgICAgICAgIG1fc2Vla1RpbWUgPSBwcmV2U2Vla1RpbWU7CisgICAgICAgIEdT
VF9XQVJOSU5HKCJTZWVraW5nIHRvICVmIGZhaWxlZCIsIHRpbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9pc0VuZFJlYWNoZWQgPSBmYWxzZTsKKyAgICBHU1RfREVCVUcoIm1f
c2Vla2luZz0lcywgbV9zZWVrVGltZT0lZiIsIG1fc2Vla2luZyA/ICJ0cnVlIiA6ICJmYWxzZSIs
IG1fc2Vla1RpbWUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
Y29uZmlndXJlUGxheVNpbmsoKQoreworICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y29uZmlndXJlUGxheVNpbmsoKTsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gcGxheXNpbmsg
PSBhZG9wdEdSZWYoZ3N0X2Jpbl9nZXRfYnlfbmFtZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkp
LCAicGxheXNpbmsiKSk7CisgICAgaWYgKHBsYXlzaW5rKSB7CisgICAgICAgIC8vIFRoZSBkZWZh
dWx0IHZhbHVlICgwKSBtZWFucyAic2VuZCBldmVudHMgdG8gYWxsIHRoZSBzaW5rcyIsIGluc3Rl
YWQKKyAgICAgICAgLy8gb2YgIm9ubHkgdG8gdGhlIGZpcnN0IHRoYXQgcmV0dXJucyB0cnVlIi4g
VGhpcyBpcyBuZWVkZWQgZm9yIE1TRSBzZWVrLgorICAgICAgICBnX29iamVjdF9zZXQoR19PQkpF
Q1QocGxheXNpbmsuZ2V0KCkpLCAic2VuZC1ldmVudC1tb2RlIiwgMCwgbnVsbHB0cik7CisgICAg
fQorfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y2hhbmdlUGlwZWxp
bmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkKK3sKKyAgICBpZiAoc2Vla2luZygpKSB7CisgICAg
ICAgIEdTVF9ERUJVRygiUmVqZWN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIHdoaWxlIHNlZWtpbmci
LAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShuZXdTdGF0ZSk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGltZShj
b25zdCBNZWRpYVRpbWUmIHNlZWtUaW1lKQoreworICAgIC8vIFJlZW5xdWV1ZSBzYW1wbGVzIG5l
ZWRlZCB0byByZXN1bWUgcGxheWJhY2sgaW4gdGhlIG5ldyBwb3NpdGlvbi4KKyAgICBtX21lZGlh
U291cmNlLT5zZWVrVG9UaW1lKHNlZWtUaW1lKTsKKworICAgIEdTVF9ERUJVRygiTVNFIHNlZWsg
dG8gJWYgZmluaXNoZWQiLCBzZWVrVGltZS50b0RvdWJsZSgpKTsKKworICAgIGlmICghbV9nc3RT
ZWVrQ29tcGxldGVkKSB7CisgICAgICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IHRydWU7CisgICAg
ICAgIG1heWJlRmluaXNoU2VlaygpOworICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmRvU2VlayhnaW50NjQsIGZsb2F0LCBHc3RTZWVrRmxhZ3MpCit7Cisg
ICAgLy8gVXNlIGRvU2VlaygpIGluc3RlYWQuIElmIGFueWJvZHkgaXMgY2FsbGluZyB0aGlzIHZl
cnNpb24gb2YgZG9TZWVrKCksIHNvbWV0aGluZyBpcyB3cm9uZy4KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpkb1NlZWsoKQoreworICAgIEdzdENsb2NrVGltZSBwb3NpdGlvbiA9IHRv
R3N0Q2xvY2tUaW1lKG1fc2Vla1RpbWUpOworICAgIE1lZGlhVGltZSBzZWVrVGltZSA9IE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3NlZWtUaW1lKTsKKyAgICBkb3VibGUgcmF0ZSA9IG1f
cGxheWVyLT5yYXRlKCk7CisgICAgR3N0U2Vla0ZsYWdzIHNlZWtUeXBlID0gc3RhdGljX2Nhc3Q8
R3N0U2Vla0ZsYWdzPihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFU
RSk7CisKKyAgICAvLyBBbHdheXMgbW92ZSB0byBzZWVraW5nIHN0YXRlIHRvIHJlcG9ydCBjb3Jy
ZWN0ICdjdXJyZW50VGltZScgd2hpbGUgcGVuZGluZyBmb3IgYWN0dWFsIHNlZWsgdG8gY29tcGxl
dGUuCisgICAgbV9zZWVraW5nID0gdHJ1ZTsKKworICAgIC8vIENoZWNrIGlmIHBsYXliYWNrIHBp
cGVsaW5lIGlzIHJlYWR5IGZvciBzZWVrLgorICAgIEdzdFN0YXRlIHN0YXRlLCBuZXdTdGF0ZTsK
KyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dl
dF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZuZXdTdGF0ZSwgMCk7CisgICAgaWYg
KGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSB8fCBnZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwpIHsKKyAgICAgICAgR1NUX0RFQlVH
KCJbU2Vla10gY2Fubm90IHNlZWssIGN1cnJlbnQgc3RhdGUgY2hhbmdlIGlzICVzIiwgZ3N0X2Vs
ZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZShnZXRTdGF0ZVJlc3VsdCkpOworICAg
ICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1f
c291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NU
QVRFX0NIQU5HRV9BU1lOQworICAgICAgICAmJiAhKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5H
ICYmIG5ld1N0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpKQorICAgICAgICB8fCBzdGF0ZSA8IEdT
VF9TVEFURV9QQVVTRUQKKyAgICAgICAgfHwgbV9pc0VuZFJlYWNoZWQKKyAgICAgICAgfHwgIW1f
Z3N0U2Vla0NvbXBsZXRlZCkgeworICAgICAgICBDU3RyaW5nIHJlYXNvbiA9ICJVbmtub3duIHJl
YXNvbiI7CisgICAgICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FT
WU5DKSB7CisgICAgICAgICAgICByZWFzb24gPSBTdHJpbmc6OmZvcm1hdCgiSW4gYXN5bmMgY2hh
bmdlICVzIC0tPiAlcyIsCisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUoc3RhdGUpLAorICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5l
d1N0YXRlKSkudXRmOCgpOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIDwgR1NUX1NUQVRFX1BB
VVNFRCkKKyAgICAgICAgICAgIHJlYXNvbiA9ICJTdGF0ZSBsZXNzIHRoYW4gUEFVU0VEIjsKKyAg
ICAgICAgZWxzZSBpZiAobV9pc0VuZFJlYWNoZWQpCisgICAgICAgICAgICByZWFzb24gPSAiRW5k
IHJlYWNoZWQiOworICAgICAgICBlbHNlIGlmICghbV9nc3RTZWVrQ29tcGxldGVkKQorICAgICAg
ICAgICAgcmVhc29uID0gIlByZXZpb3VzIHNlZWsgaXMgbm90IGZpbmlzaGVkIHlldCI7CisKKyAg
ICAgICAgR1NUX0RFQlVHKCJbU2Vla10gRGVsYXlpbmcgdGhlIHNlZWs6ICVzIiwgcmVhc29uLmRh
dGEoKSk7CisKKyAgICAgICAgbV9zZWVrSXNQZW5kaW5nID0gdHJ1ZTsKKworICAgICAgICBpZiAo
bV9pc0VuZFJlYWNoZWQpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIHJlc2V0IHBp
cGVsaW5lIik7CisgICAgICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSB0cnVlOworICAgICAgICAg
ICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoYW5nZVBpcGVsaW5lU3Rh
dGUoR1NUX1NUQVRFX1BBVVNFRCkpCisgICAgICAgICAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6RW1wdHkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2Vl
a2luZyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9zZWVraW5nOworICAg
IH0KKworICAgIC8vIFN0b3AgYWNjZXB0aW5nIG5ldyBzYW1wbGVzIHVudGlsIGFjdHVhbCBzZWVr
IGlzIGZpbmlzaGVkLgorICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJ
VF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBmYWxzZSk7CisKKyAgICAvLyBDb3JyZWN0IHNl
ZWsgdGltZSBpZiBpdCBoZWxwcyB0byBmaXggYSBzbWFsbCBnYXAuCisgICAgaWYgKCFpc1RpbWVC
dWZmZXJlZChzZWVrVGltZSkpIHsKKyAgICAgICAgLy8gTG9vayBpZiBhIG5lYXIgZnV0dXJlIHRp
bWUgKDwwLjEgc2VjLikgaXMgYnVmZmVyZWQgYW5kIGNoYW5nZSB0aGUgc2VlayB0YXJnZXQgdGlt
ZS4KKyAgICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpIHsKKyAgICAgICAgICAgIGNvbnN0IE1lZGlh
VGltZSBtaW5pR2FwID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKDAuMSk7CisgICAgICAg
ICAgICBNZWRpYVRpbWUgbmVhcmVzdCA9IG1fbWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCktPm5lYXJl
c3Qoc2Vla1RpbWUpOworICAgICAgICAgICAgaWYgKG5lYXJlc3QuaXNWYWxpZCgpICYmIG5lYXJl
c3QgPiBzZWVrVGltZSAmJiAobmVhcmVzdCAtIHNlZWtUaW1lKSA8PSBtaW5pR2FwICYmIGlzVGlt
ZUJ1ZmZlcmVkKG5lYXJlc3QgKyBtaW5pR2FwKSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJV
RygiW1NlZWtdIENoYW5nZWQgdGhlIHNlZWsgdGFyZ2V0IHRpbWUgZnJvbSAlZiB0byAlZiwgYSBu
ZWFyIHBvaW50IGluIHRoZSBmdXR1cmUiLCBzZWVrVGltZS50b0Zsb2F0KCksIG5lYXJlc3QudG9G
bG9hdCgpKTsKKyAgICAgICAgICAgICAgICBzZWVrVGltZSA9IG5lYXJlc3Q7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBNU0UgaGFzIHNhbXBsZXMg
Zm9yIHJlcXVlc3RlZCB0aW1lIGFuZCBkZWZlciBhY3R1YWwgc2VlayBpZiBuZWVkZWQuCisgICAg
aWYgKCFpc1RpbWVCdWZmZXJlZChzZWVrVGltZSkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJbU2Vl
a10gRGVsYXlpbmcgdGhlIHNlZWs6IE1TRSBpcyBub3QgcmVhZHkiKTsKKyAgICAgICAgR3N0U3Rh
dGVDaGFuZ2VSZXR1cm4gc2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9w
aXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIGlmIChzZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICAgICAgICAgIEdTVF9ERUJV
RygiW1NlZWtdIENhbm5vdCBzZWVrLCBmYWlsZWQgdG8gcGF1c2UgcGxheWJhY2sgcGlwZWxpbmUu
Iik7CisgICAgICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRf
TUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgICAgICAgICBtX3NlZWtpbmcg
PSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICBub3RpZnlT
ZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7CisgICAgICAgIEFTU0VSVCghbV9tc2VTZWVr
Q29tcGxldGVkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQ29tcGxl
dGUgcHJldmlvdXMgTVNFIHNlZWsgaWYgbmVlZGVkLgorICAgIGlmICghbV9tc2VTZWVrQ29tcGxl
dGVkKSB7CisgICAgICAgIG1fbWVkaWFTb3VyY2UtPm1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Cisg
ICAgICAgIEFTU0VSVChtX21zZVNlZWtDb21wbGV0ZWQpOworICAgICAgICAvLyBOb3RlOiBzZWVr
Q29tcGxldGVkIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCB1cy4KKyAgICAgICAgcmV0dXJuIG1fc2Vl
a2luZzsKKyAgICB9CisKKyAgICBHU1RfREVCVUcoIldlIGNhbiBzZWVrIG5vdyIpOworCisgICAg
Z2ludDY0IHN0YXJ0VGltZSA9IHBvc2l0aW9uLCBlbmRUaW1lID0gR1NUX0NMT0NLX1RJTUVfTk9O
RTsKKyAgICBpZiAocmF0ZSA8IDApIHsKKyAgICAgICAgc3RhcnRUaW1lID0gMDsKKyAgICAgICAg
ZW5kVGltZSA9IHBvc2l0aW9uOworICAgIH0KKworICAgIGlmICghcmF0ZSkKKyAgICAgICAgcmF0
ZSA9IDE7CisKKyAgICBHU1RfREVCVUcoIkFjdHVhbCBzZWVrIHRvICUiIEdTVF9USU1FX0ZPUk1B
VCAiLCBlbmQgdGltZTogICUiIEdTVF9USU1FX0ZPUk1BVCAiLCByYXRlOiAlZiIsIEdTVF9USU1F
X0FSR1Moc3RhcnRUaW1lKSwgR1NUX1RJTUVfQVJHUyhlbmRUaW1lKSwgcmF0ZSk7CisKKyAgICAv
LyBUaGlzIHdpbGwgY2FsbCBub3RpZnlTZWVrTmVlZHNEYXRhKCkgYWZ0ZXIgc29tZSB0aW1lIHRv
IHRlbGwgdGhhdCB0aGUgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNhbXBsZSBlbnF1ZXVpbmcuCisg
ICAgd2ViS2l0TWVkaWFTcmNQcmVwYXJlU2VlayhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdl
dCgpKSwgc2Vla1RpbWUpOworCisgICAgbV9nc3RTZWVrQ29tcGxldGVkID0gZmFsc2U7CisgICAg
aWYgKCFnc3RfZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRf
VElNRSwgc2Vla1R5cGUsIEdTVF9TRUVLX1RZUEVfU0VULCBzdGFydFRpbWUsIEdTVF9TRUVLX1RZ
UEVfU0VULCBlbmRUaW1lKSkgeworICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2Ft
cGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgICAgIG1f
c2Vla2luZyA9IGZhbHNlOworICAgICAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOworICAg
ICAgICBHU1RfREVCVUcoImRvU2VlaygpOiBnc3RfZWxlbWVudF9zZWVrKCkgZmFpbGVkLCByZXR1
cm5pbmcgZmFsc2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRo
ZSBzYW1wbGVzIHdpbGwgYmUgZW5xdWV1ZWQgaW4gbm90aWZ5U2Vla05lZWRzRGF0YSgpLgorICAg
IEdTVF9ERUJVRygiZG9TZWVrKCk6IGdzdF9lbGVtZW50X3NlZWsoKSBzdWNjZWVkZWQsIHJldHVy
bmluZyB0cnVlIik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWsoKQoreworICAgIGlmICghbV9zZWVraW5n
IHx8ICFtX21zZVNlZWtDb21wbGV0ZWQgfHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3N0U3RhdGUgc3RhdGUsIG5ld1N0YXRlOworICAgIEdzdFN0YXRlQ2hh
bmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsKKworICAgIGlmIChnZXRTdGF0ZVJlc3Vs
dCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DCisgICAgICAgICYmICEoc3RhdGUgPT0gR1NUX1NU
QVRFX1BMQVlJTkcgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkpIHsKKyAgICAgICAg
R1NUX0RFQlVHKCJbU2Vla10gRGVsYXlpbmcgc2VlayBmaW5pc2giKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgR1NUX0RFQlVH
KCJbU2Vla10gQ29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8gJWYiLCBtX3NlZWtUaW1lKTsKKyAg
ICAgICAgbV9zZWVrSXNQZW5kaW5nID0gZmFsc2U7CisgICAgICAgIGlmICghZG9TZWVrKCkpIHsK
KyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJbU2Vla10gU2Vla2luZyB0byAlZiBmYWlsZWQiLCBt
X3NlZWtUaW1lKTsKKyAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSAtMTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJbU2Vla10gU2Vla2Vk
IHRvICVmIiwgbV9zZWVrVGltZSk7CisKKyAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2Ft
cGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgbV9zZWVr
aW5nID0gZmFsc2U7CisgICAgbV9jYWNoZWRQb3NpdGlvbiA9IC0xOworICAgIC8vIFRoZSBwaXBl
bGluZSBjYW4gc3RpbGwgaGF2ZSBhIHBlbmRpbmcgc3RhdGUuIEluIHRoaXMgY2FzZSBhIHBvc2l0
aW9uIHF1ZXJ5IHdpbGwgZmFpbC4KKyAgICAvLyBSaWdodCBub3cgd2UgY2FuIHVzZSBtX3NlZWtU
aW1lIGFzIGEgZmFsbGJhY2suCisgICAgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bv
c2l0aW9uID0gdHJ1ZTsKKyAgICB0aW1lQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlUGxheWJhY2tSYXRlKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vl
a2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Vla2luZzsKK30KKworLy8gRklYTUU6IE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBtYW5hZ2VzIHRoZSBSZWFkeVN0YXRlIG9uIGl0cyBv
d24uIFdlIHNob3VsZG4ndCBjaGFuZ2UgaXQgbWFudWFsbHkuCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBy
ZWFkeVN0YXRlKQoreworICAgIGlmIChyZWFkeVN0YXRlID09IG1fcmVhZHlTdGF0ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKHNlZWtpbmcoKSkgeworICAgICAgICBHU1RfREVCVUcoIlNr
aXAgcmVhZHkgc3RhdGUgY2hhbmdlKCVzIC0+ICVzKSBkdWUgdG8gc2Vla1xuIiwgZHVtcFJlYWR5
U3RhdGUobV9yZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUocmVhZHlTdGF0ZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJSZWFkeSBTdGF0ZSBDaGFuZ2VkIG1h
bnVhbGx5IGZyb20gJXUgdG8gJXUiLCBtX3JlYWR5U3RhdGUsIHJlYWR5U3RhdGUpOworICAgIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisgICAg
bV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKKyAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZTog
JXMgLT4gJXMiLCBkdW1wUmVhZHlTdGF0ZShvbGRSZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUo
bV9yZWFkeVN0YXRlKSk7CisKKyAgICBpZiAob2xkUmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpI
YXZlQ3VycmVudERhdGEgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVu
dERhdGEpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gUmVwb3J0aW5nIGxvYWQgc3RhdGUg
Y2hhbmdlZCB0byB0cmlnZ2VyIHNlZWsgY29udGludWF0aW9uIik7CisgICAgICAgIGxvYWRTdGF0
ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisK
KyAgICBHc3RTdGF0ZSBwaXBlbGluZVN0YXRlOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdl
dFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZw
aXBlbGluZVN0YXRlLCBudWxscHRyLCAyNTAgKiBHU1RfTlNFQ09ORCk7CisgICAgYm9vbCBpc1Bs
YXlpbmcgPSAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIHBp
cGVsaW5lU3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgaWYgKG1fcmVhZHlTdGF0
ZSA9PSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhICYmIG9sZFJlYWR5U3RhdGUgPiBNZWRpYVBs
YXllcjo6SGF2ZU1ldGFkYXRhICYmIGlzUGxheWluZykgeworICAgICAgICBHU1RfVFJBQ0UoIkNo
YW5naW5nIHBpcGVsaW5lIHRvIFBBVVNFRC4uLiIpOworICAgICAgICBib29sIG9rID0gY2hhbmdl
UGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgR1NUX1RSQUNFKCJDaGFu
Z2VkIHBpcGVsaW5lIHRvIFBBVVNFRDogJXMiLCBvayA/ICJTdWNjZXNzIiA6ICJFcnJvciIpOwor
ICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRGb3JT
ZWVrQ29tcGxldGVkKCkKK3sKKyAgICBpZiAoIW1fc2Vla2luZykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR1NUX0RFQlVHKCJXYWl0aW5nIGZvciBNU0Ugc2VlayBjb21wbGV0ZWQiKTsKKyAgICBt
X21zZVNlZWtDb21wbGV0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OnNlZWtDb21wbGV0ZWQoKQoreworICAgIGlmIChtX21zZVNlZWtDb21wbGV0
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiTVNFIHNlZWsgY29tcGxldGVk
Iik7CisgICAgbV9tc2VTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKworICAgIGRvU2VlaygpOworCisg
ICAgaWYgKCFzZWVraW5nKCkgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlRnV0
dXJlRGF0YSkKKyAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7
CisKKyAgICBpZiAoIXNlZWtpbmcoKSkKKyAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZXRSYXRlKGZsb2F0
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YnVmZmVyZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c291cmNlQ2hhbmdlZCgpCit7CisgICAg
bV9zb3VyY2UgPSBudWxscHRyOworICAgIGdfb2JqZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAi
c291cmNlIiwgJm1fc291cmNlLm91dFB0cigpLCBudWxscHRyKTsKKworICAgIEFTU0VSVChXRUJL
SVRfSVNfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSk7CisKKyAgICBtX3BsYXliYWNrUGlwZWxp
bmUtPnNldFdlYktpdE1lZGlhU3JjKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpKTsK
KworICAgIE1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVuKCptX21lZGlhU291cmNlLmdldCgpLCAq
dGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidmlk
ZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9zb3VyY2UuZ2V0KCksICJhdWRpby1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5nZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJB
Q0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIHdlYktpdE1lZGlhU3JjU2V0TWVk
aWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0aGlzKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygp
Cit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3Jr
U3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRS
ZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOworICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5nOwor
CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9n
ZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NUX05T
RUNPTkQpOworCisgICAgYm9vbCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7Cisg
ICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9T
VUNDRVNTOiB7CisgICAgICAgIEdTVF9ERUJVRygiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUocGVuZGluZykpOworCisgICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0
ZSBjaGFuZ2VkIHRvIFJFQURZIHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgorICAgICAg
ICAvLyBvbiBIVE1MTWVkaWFFbGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8g
J2VuZGVkJyBldmVudC4KKyAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fcmVzZXRQaXBl
bGluZSA9IChzdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkpOworICAgICAgICBpZiAobV9yZXNldFBp
cGVsaW5lKQorICAgICAgICAgICAgbV9tZWRpYVRpbWVEdXJhdGlvbiA9IE1lZGlhVGltZTo6emVy
b1RpbWUoKTsKKworICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgor
ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6Cisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAg
ICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVh
ZHlTdGF0ZSkpOworICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1w
dHk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6Cisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAg
ICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3Jl
YWR5U3RhdGUpKTsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVt
cHR5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoK
KyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKKyAgICAgICAgICAgIGlmIChzZWVraW5n
KCkpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1l
dGFkYXRhOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgbWFuYWdlIE5ldHdv
cmtTdGF0ZSB0b28/CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMi
LCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV9idWZmZXJpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJpbmdQZXJjZW50YWdl
ID09IDEwMCkgeworICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoIltCdWZmZXJpbmddIENv
bXBsZXRlLiIpOworICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlcmluZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGE7CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVt
cFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBs
YXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgICAg
ICAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRl
KG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgICAgIEdTVF9ERUJV
RygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAg
ICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3Rh
dGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobV9lb3NNYXJrZWQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcp
CisgICAgICAgICAgICAgICAgbV9lb3NQZW5kaW5nID0gdHJ1ZTsKKworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3luYyBzdGF0ZXMg
d2hlcmUgbmVlZGVkLgorICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewor
ICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgeworICAgICAgICAg
ICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CisgICAgICAgICAgICAgICAgbm90
aWZ5UGxheWVyT2ZNdXRlKCk7CisgICAgICAgICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXNlZWtpbmco
KSAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAg
ICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIp
OworICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9Q
TEFZSU5HKSB7CisgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworCisgICAgICAgICAgICBp
ZiAoKG1fYnVmZmVyaW5nICYmICFpc0xpdmVTdHJlYW0oKSkgfHwgIW1fcGxheWJhY2tSYXRlKSB7
CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBm
b3IgYnVmZmVyaW5nLiIpOworICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NU
X1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAgICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdT
VF9TVEFURV9QQVVTRUQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAg
ICAgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVC
VUcoIlJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2FzIGNvbXBsZXRlZCIsIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAgICAgICBHU1RfREVC
VUcoIkFzeW5jOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAg
ICAgIC8vIENoYW5nZSBpbiBwcm9ncmVzcy4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1Rf
U1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsdXJlOiBTdGF0
ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBm
YWlsZWQuCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJF
Uk9MTDoKKyAgICAgICAgR1NUX0RFQlVHKCJObyBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRpbmc6
ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0
ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgLy8gTGl2ZSBwaXBlbGluZXMgZ28gaW4g
UEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KKyAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRydWU7
CisKKyAgICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkgeworICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgR1NU
X0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAg
ICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlT
dGF0ZSkpOworICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYg
KHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQorICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxz
ZTsKKworICAgICAgICBpZiAoIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKQorICAgICAgICAg
ICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHKCJFbHNlIDogJWQiLCBnZXRTdGF0ZVJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBHU1RfU1RB
VEVfVk9JRF9QRU5ESU5HOworCisgICAgaWYgKHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUpCisg
ICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKG1fbmV0
d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUcoIk5ldHdv
cmsgU3RhdGUgQ2hhbmdlZCBmcm9tICV1IHRvICV1Iiwgb2xkTmV0d29ya1N0YXRlLCBtX25ldHdv
cmtTdGF0ZSk7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAg
fQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBHU1Rf
REVCVUcoIlJlYWR5IFN0YXRlIENoYW5nZWQgZnJvbSAldSB0byAldSIsIG9sZFJlYWR5U3RhdGUs
IG1fcmVhZHlTdGF0ZSk7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwor
ICAgIH0KKworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NF
U1MgJiYgc3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICB1cGRhdGVQbGF5YmFj
a1JhdGUoKTsKKyAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7CisgICAgfQorfQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKK3sKKyAg
ICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9zZWVraW5nKQorICAgICAgICBtYXliZUZpbmlzaFNlZWsoKTsK
KyAgICBlbHNlCisgICAgICAgIHVwZGF0ZVN0YXRlcygpOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lICZ0aW1l
KSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gbV9tZWRpYVNvdXJjZSAmJiBtX21lZGlhU291
cmNlLT5idWZmZXJlZCgpLT5jb250YWluKHRpbWUpOworICAgIEdTVF9ERUJVRygiVGltZSAlZiBi
dWZmZXJlZD8gJXMiLCB0aW1lLnRvRG91YmxlKCksIHJlc3VsdCA/ICJZZXMiIDogIk5vIik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnNldE1lZGlhU291cmNlQ2xpZW50KFJlZjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1T
RT4gY2xpZW50KQoreworICAgIG1fbWVkaWFTb3VyY2VDbGllbnQgPSBjbGllbnQucHRyKCk7Cit9
CisKK1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJjZUNsaWVudCgpCit7CisgICAgcmV0dXJuIG1fbWVk
aWFTb3VyY2VDbGllbnQ7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjpkdXJhdGlvbkNoYW5nZWQoKQoreworICAgIGlmICghbV9tZWRpYVNvdXJjZUNsaWVudCkgewor
ICAgICAgICBHU1RfREVCVUcoIm1fbWVkaWFTb3VyY2VDbGllbnQgaXMgbnVsbCwgZG9pbmcgbm90
aGluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWVkaWFUaW1lIHByZXZpb3Vz
RHVyYXRpb24gPSBtX21lZGlhVGltZUR1cmF0aW9uOworICAgIG1fbWVkaWFUaW1lRHVyYXRpb24g
PSBtX21lZGlhU291cmNlQ2xpZW50LT5kdXJhdGlvbigpOworCisgICAgR1NUX1RSQUNFKCJwcmV2
aW91cz0lZiwgbmV3PSVmIiwgcHJldmlvdXNEdXJhdGlvbi50b0Zsb2F0KCksIG1fbWVkaWFUaW1l
RHVyYXRpb24udG9GbG9hdCgpKTsKKworICAgIC8vIEF2b2lkIGVtaXRpbmcgZHVyYXRpb25jaGFu
Z2VkIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBwcmV2aW91cyBkdXJhdGlvbiB3YXMgMCBiZWNhdXNl
IHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQKKyAgICAvLyBieSB0aGUgSFRNTE1lZGlhRWxl
bWVudC4KKyAgICBpZiAobV9tZWRpYVRpbWVEdXJhdGlvbiAhPSBwcmV2aW91c0R1cmF0aW9uICYm
IG1fbWVkaWFUaW1lRHVyYXRpb24uaXNWYWxpZCgpICYmIHByZXZpb3VzRHVyYXRpb24uaXNWYWxp
ZCgpKSB7CisgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9w
bGF5YmFja1BpcGVsaW5lLT5ub3RpZnlEdXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9tZWRp
YVNvdXJjZS0+ZHVyYXRpb25DaGFuZ2VkKG1fbWVkaWFUaW1lRHVyYXRpb24pOworICAgIH0KK30K
Kworc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1l
VHlwZUNhY2hlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IGNhY2hlID0gW10oKQorICAgIHsKKyAgICAgICAg
aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0TVNFRWxlbWVudCgpOworICAgICAg
ICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7CisgICAgICAg
IGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0geworICAgICAgICAgICAgInZpZGVvL21wNCIsCisg
ICAgICAgICAgICAiYXVkaW8vbXA0IgorICAgICAgICB9OworICAgICAgICBmb3IgKGF1dG8mIHR5
cGUgOiBtaW1lVHlwZXMpCisgICAgICAgICAgICBzZXQuYWRkKHR5cGUpOworICAgICAgICByZXR1
cm4gc2V0OworICAgIH0oKTsKKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlw
ZUNhY2hlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFj
a0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4gYXBwZW5kUGlwZWxpbmUsIFJlZlB0cjxX
ZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBvbGRUcmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNr
UHJpdmF0ZUJhc2U+IG5ld1RyYWNrKQoreworICAgIEFTU0VSVChhcHBlbmRQaXBlbGluZS0+dHJh
Y2soKSA9PSBuZXdUcmFjayk7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUt
PmFwcHNpbmtDYXBzKCk7CisgICAgQVNTRVJUKGNhcHMpOworICAgIEdTVF9ERUJVRygidHJhY2sg
SUQ6ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3VHJhY2stPmlkKCkuc3RyaW5nKCku
bGF0aW4xKCkuZGF0YSgpLCBjYXBzKTsKKworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLCAwKTsKKyAgICBjb25zdCBnY2hhciogbWVkaWFU
eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworICAgIEdzdFZpZGVvSW5m
byBpbmZvOworCisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8vIikg
JiYgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzKSkgeworICAgICAgICBmbG9h
dCB3aWR0aCwgaGVpZ2h0OworCisgICAgICAgIHdpZHRoID0gaW5mby53aWR0aDsKKyAgICAgICAg
aGVpZ2h0ID0gaW5mby5oZWlnaHQgKiAoKGZsb2F0KSBpbmZvLnBhcl9kIC8gKGZsb2F0KSBpbmZv
LnBhcl9uKTsKKyAgICAgICAgbV92aWRlb1NpemUuc2V0V2lkdGgod2lkdGgpOworICAgICAgICBt
X3ZpZGVvU2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICB9CisKKyAgICBpZiAoIW9sZFRyYWNr
KQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPmF0dGFjaFRyYWNrKGFwcGVuZFBpcGVsaW5l
LT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrLCBzdHJ1Y3R1cmUsIGNhcHMpOworICAg
IGVsc2UKKyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5yZWF0dGFjaFRyYWNrKGFwcGVuZFBp
cGVsaW5lLT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrKTsKK30KKworTWVkaWFQbGF5
ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRz
VHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorewor
ICAgIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6OklzTm90
U3VwcG9ydGVkOworICAgIGlmICghcGFyYW1ldGVycy5pc01lZGlhU291cmNlKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworCisgICAgLy8gRGlzYWJsZSBWUFgvT3B1cyBvbiBNU0UgZm9yIG5vdywg
bXA0L2F2YzEgc2VlbXMgd2F5IG1vcmUgcmVsaWFibGUgY3VycmVudGx5LgorICAgIGlmIChwYXJh
bWV0ZXJzLnR5cGUuZW5kc1dpdGgoIndlYm0iKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwor
ICAgIC8vIFlvdVR1YmUgVFYgcHJvdmlkZXMgZW1wdHkgdHlwZXMgZm9yIHNvbWUgdmlkZW9zIGFu
ZCB3ZSB3YW50IHRvIGJlIHNlbGVjdGVkIGFzIGJlc3QgbWVkaWEgZW5naW5lIGZvciB0aGVtLgor
ICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdCA9IE1l
ZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0
aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eS4KKyAgICBpZiAobWltZVR5cGVDYWNoZSgpLmNvbnRh
aW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlcnMuY29kZWNz
LmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJ
c1N1cHBvcnRlZDsKKworICAgIHJldHVybiBleHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0ZXJz
LCByZXN1bHQpOworfQorCisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KEdz
dEJ1ZmZlciogYnVmZmVyKQoreworICAgIGZvciAoYXV0byBpdGVyYXRvciA6IG1fYXBwZW5kUGlw
ZWxpbmVzTWFwKSB7CisgICAgICAgIGlmIChpdGVyYXRvci52YWx1ZS0+YXBwZW5kU3RhdGUoKSA9
PSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uKSB7CisgICAgICAg
ICAgICBHU1RfVFJBQ0UoImFwcGVuZCBwaXBlbGluZSAlcCBpbiBrZXkgbmVnb3RpYXRpb24sIHNl
dHRpbmcga2V5IiwgaXRlcmF0b3IudmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1l
bnRfc2VuZF9ldmVudChpdGVyYXRvci52YWx1ZS0+cGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25ld19j
dXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwKKyAgICAgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX25ldygiZHJtLWNpcGhlciIsICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1
ZmZlciwgbnVsbHB0cikpKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yLnZhbHVlLT5zZXRBcHBlbmRT
dGF0ZShBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6Ok9uZ29pbmcpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIEdTVF9UUkFDRSgiYXBwZW5kIHBpcGVsaW5lICVwIG5vdCBpbiBrZXkg
bmVnb3RpYXRpb24iLCBpdGVyYXRvci52YWx1ZS5nZXQoKSk7CisgICAgfQorfQorI2VuZGlmCisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0oTWVk
aWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCit7CisgICAgaWYgKHN0
YXR1cyAhPSBNZWRpYVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3IpCisgICAgICAgIHJldHVybjsK
KworICAgIEdTVF9ERUJVRygiTWFya2luZyBlbmQgb2Ygc3RyZWFtIik7CisgICAgbV9lb3NNYXJr
ZWQgPSB0cnVlOworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKK3sKKyAgICBN
ZWRpYVRpbWUgcG9zaXRpb24gPSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRN
ZWRpYVRpbWUoKTsKKworICAgIGlmIChtX2Vvc1BlbmRpbmcgJiYgKHBhdXNlZCgpIHx8IChwb3Np
dGlvbiA+PSBkdXJhdGlvbk1lZGlhVGltZSgpKSkpIHsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0
YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkZWQpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRl
ID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBtX2Vvc1BlbmRpbmcgPSBmYWxzZTsK
KyAgICAgICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOworICAgICAgICBtX2NhY2hlZFBvc2l0aW9u
ID0gbV9tZWRpYVRpbWVEdXJhdGlvbi50b0Zsb2F0KCk7CisgICAgICAgIG1fZHVyYXRpb25BdEVP
UyA9IG1fbWVkaWFUaW1lRHVyYXRpb24udG9GbG9hdCgpOworICAgICAgICBtX3BsYXllci0+dGlt
ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitmbG9hdCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKFVOTElLRUxZKG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBHU1RfREVCVUcoIm1heFRpbWVTZWVrYWJsZSIpOworICAgIGZsb2F0IHJlc3VsdCA9IGR1cmF0
aW9uTWVkaWFUaW1lKCkudG9GbG9hdCgpOworICAgIC8vIEluZmluaXRlIGR1cmF0aW9uIG1lYW5z
IGxpdmUgc3RyZWFtLgorICAgIGlmIChpc2luZihyZXN1bHQpKSB7CisgICAgICAgIE1lZGlhVGlt
ZSBtYXhCdWZmZXJlZFRpbWUgPSBidWZmZXJlZCgpLT5tYXhpbXVtQnVmZmVyZWRUaW1lKCk7Cisg
ICAgICAgIC8vIFJldHVybiB0aGUgaGlnaGVzdCBlbmQgdGltZSByZXBvcnRlZCBieSB0aGUgYnVm
ZmVyZWQgYXR0cmlidXRlLgorICAgICAgICByZXN1bHQgPSBtYXhCdWZmZXJlZFRpbWUuaXNWYWxp
ZCgpID8gbWF4QnVmZmVyZWRUaW1lLnRvRmxvYXQoKSA6IDA7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDA0MzlmOTFlMGRkM2U4ZGIzZGZkYmMxNmFiMGU1
MGM2OGM2NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaApAQCAt
MCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxNiBJZ2Fs
aWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFu
QGNlbnRyaWN1bGFyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NU
UkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAKKworI2luY2x1ZGUgIkdSZWZQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJNZWRpYVNhbXBsZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgorI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTb3VyY2VD
bGllbnRHU3RyZWFtZXJNU0U7CitjbGFzcyBBcHBlbmRQaXBlbGluZTsKK2NsYXNzIFBsYXliYWNr
UGlwZWxpbmU7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSA6IHB1Ymxp
YyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworCisgICAgZnJpZW5kIGNsYXNzIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOworCitw
dWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKE1lZGlh
UGxheWVyKik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKCk7
CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0
cmFyKTsKKworICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGxvYWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kikgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNldERvd25sb2FkQnVmZmVyaW5nKCkgb3ZlcnJpZGUgeyB9OworCisgICAg
Ym9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IHBhdXNlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZWVrKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbmZpZ3VyZVBsYXlTaW5r
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgTWVkaWFU
aW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFJh
dGUoZmxvYXQpIG92ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5n
ZXM+IGJ1ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgZmxvYXQgbWF4VGltZVNlZWthYmxl
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNvdXJjZUNoYW5nZWQoKSBvdmVycmlkZTsK
KworICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisgICAg
dm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOworICAgIHZvaWQgc2Vla0NvbXBsZXRlZCgpOwor
ICAgIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KCkg
eyByZXR1cm4gbV9tZWRpYVNvdXJjZS5nZXQoKTsgfQorCisgICAgdm9pZCBtYXJrRW5kT2ZTdHJl
YW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyk7CisKKyNpZiBFTkFCTEUo
TEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkKKyAgICB2b2lkIGRpc3BhdGNoRGVjcnlwdGlvbktleShH
c3RCdWZmZXIqKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9pZCB0cmFja0RldGVjdGVkKFJl
ZlB0cjxBcHBlbmRQaXBlbGluZT4sIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBv
bGRUcmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNrKTsKKyAg
ICB2b2lkIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNvbnN0IE1lZGlhVGltZSYpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5n
LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRl
cnMmKTsKKworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICAvLyBGSVhNRTog
UmVkdWNlIGNvZGUgZHVwbGljYXRpb24uCisgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKSBvdmVycmlk
ZTsKKworICAgIGJvb2wgZG9TZWVrKGdpbnQ2NCwgZmxvYXQsIEdzdFNlZWtGbGFncykgb3ZlcnJp
ZGU7CisgICAgYm9vbCBkb1NlZWsoKTsKKyAgICB2b2lkIG1heWJlRmluaXNoU2VlaygpOworICAg
IHZvaWQgdXBkYXRlUGxheWJhY2tSYXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhc3luY1N0YXRl
Q2hhbmdlRG9uZSgpIG92ZXJyaWRlOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICB1
bnNpZ25lZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9Cisg
ICAgdW5zaWduZWQgbG9uZyBkcm9wcGVkVmlkZW9GcmFtZXMoKSBvdmVycmlkZSB7IHJldHVybiAw
OyB9CisgICAgdW5zaWduZWQgbG9uZyBjb3JydXB0ZWRWaWRlb0ZyYW1lcygpIG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KKyAgICBNZWRpYVRpbWUgdG90YWxGcmFtZURlbGF5KCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9CisgICAgYm9vbCBpc1RpbWVCdWZmZXJlZChj
b25zdCBNZWRpYVRpbWUmKSBjb25zdDsKKworICAgIGJvb2wgaXNNZWRpYVNvdXJjZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgc2V0TWVkaWFTb3VyY2VDbGll
bnQoUmVmPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPik7CisgICAgUmVmUHRyPE1lZGlh
U291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiBtZWRpYVNvdXJjZUNsaWVudCgpOworCisgICAgSGFz
aE1hcDxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4sIFJlZlB0cjxBcHBlbmRQ
aXBlbGluZT4+IG1fYXBwZW5kUGlwZWxpbmVzTWFwOworICAgIGJvb2wgbV9lb3NNYXJrZWQgPSBm
YWxzZTsKKyAgICBtdXRhYmxlIGJvb2wgbV9lb3NQZW5kaW5nID0gZmFsc2U7CisgICAgYm9vbCBt
X2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOworICAgIFJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVD
bGllbnQ+IG1fbWVkaWFTb3VyY2U7CisgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVh
bWVyTVNFPiBtX21lZGlhU291cmNlQ2xpZW50OworICAgIE1lZGlhVGltZSBtX21lZGlhVGltZUR1
cmF0aW9uOworICAgIGJvb2wgbV9tc2VTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICBSZWZQdHI8
UGxheWJhY2tQaXBlbGluZT4gbV9wbGF5YmFja1BpcGVsaW5lOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292894</attachid>
            <date>2016-10-26 01:20:56 -0700</date>
            <delta_ts>2016-10-26 01:44:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162900-20161026081708.patch</filename>
            <type>text/plain</type>
            <size>41136</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3ODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGZkOTA3YjhkNjVkNzRk
MmI5ZWM2N2FmZmQ0NTI4NjYxNjU2YjM2My4uZDk3N2RjNTIwY2UxMmE2MzhmYWZlOGJkZWNiOWQ0
MzBiM2M4M2Y4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYyIEBACiAyMDE2LTEwLTI2ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJp
dmF0ZSBmb3IgR1N0cmVhbWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI5MDAKKworICAgICAgICBSZXZpZXdlZCBieSBYYWJpZXIgUm9kcmlndWV6
LUNhbHZhci4KKworICAgICAgICBSZWZhY3RvciBNU0Utc3BlY2lmaWMgbG9naWMgdG8gaXRzIG93
biBHU3RyZWFtZXIgcGxheWVyLiBUaGlzIG5ldyBNU0UgcGxheWVyIGNvb3JkaW5hdGVzCisgICAg
ICAgIGRhdGEgYXBwZW5kaW5nLCBtZWRpYSBwbGF5YmFjayBhbmQgaW50ZXJhY3Rpb24gd2l0aCBN
ZWRpYVNvdXJjZSBieSBkZWxlZ2F0aW5nIHRvCisgICAgICAgIEFwcGVuZFBpcGVsaW5lIChvbmUg
aW5zdGFuY2UgcGVyIFNvdXJjZUJ1ZmZlciksIFBsYXliYWNrUGlwZWxpbmUgYW5kCisgICAgICAg
IE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudCBy
ZXNwZWN0aXZlbHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRoIFBo
aWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+IChFTUUgc3VwcG9ydCkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpidWlsZE1lZGlhRW5naW5lc1ZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGR1bXBSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJD
b3JlOjppbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
ZHVyYXRpb25NZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6Y29uZmlndXJlUGxheVNpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjaGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bm90aWZ5U2Vla05l
ZWRzRGF0YUZvclRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVraW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Ondh
aXRGb3JTZWVrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3lu
Y1N0YXRlQ2hhbmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OmlzVGltZUJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0TWVkaWFTb3VyY2VDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJjZUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1
cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVk
VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojp0cmFja0RldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVu
dE1lZGlhVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1lZGlhU291cmNl
UHJpdmF0ZUNsaWVudCk6CisKKzIwMTYtMTAtMjYgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAg
PGVvY2FuaGFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1N0cmVhbWVyXVtNU0VdIE1lZGlhU291
cmNlR1N0cmVhbWVyIHJlZmFjdG9yaW5nCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI4OTkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDE1YmE2ZjNhN2U4YzcwMWUzMTc4MWNhNjZj
YjZmODRmNGFlMDJhYjkuLmU1ZDZjMzVkOTU5NjYwZmU5ZTYxMmEzMzRjMjgzMGY3NmU2OTk3ZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKQEAgLTU3LDcgKzU3LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyT3dyLmgiCiAjZW5kaWYKICNkZWZpbmUgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKKyNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShN
RURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaCIKICNlbmRpZgorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
CiAKICNpZiBVU0UoTUVESUFfRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uaCIKQEAgLTIyOSw2ICsyMzIsMTAgQEAgc3RhdGljIHZvaWQgYnVp
bGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWU6
OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnJl
Z2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCisKICAgICBoYXZlTWVk
aWFFbmdpbmVzVmVjdG9yKCkgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI3MGUw
NmU2ZjhlNWJlODhlYzQxMmQ5N2NhZGEyYzRhMjY2ZGVmOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFLmNwcApAQCAtMCwwICsxLDgzNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE2IElnYWxpYSBTLkwK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJp
Y3VsYXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBF
TkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIKKyNpbmNs
dWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclV0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTWVkaWFEZXNjcmlwdGlv
bi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
VGltZVJhbmdlcy5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNs
dWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRl
IDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Cisj
aW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorCitzdGF0aWMgY29uc3QgY2hhciogZHVtcFJlYWR5U3RhdGUoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHJlYWR5U3RhdGUpIHsK
KyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpIYXZlTm90aGluZzogcmV0dXJuICJIYXZl
Tm90aGluZyI7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOiBy
ZXR1cm4gIkhhdmVNZXRhZGF0YSI7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVBsYXllcjo6SGF2
ZUN1cnJlbnREYXRhOiByZXR1cm4gIkhhdmVDdXJyZW50RGF0YSI7CisgICAgY2FzZSBXZWJDb3Jl
OjpNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE6IHJldHVybiAiSGF2ZUZ1dHVyZURhdGEiOwor
ICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOiByZXR1cm4gIkhh
dmVFbm91Z2hEYXRhIjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIih1bmtub3duKSI7CisgICAgfQor
fQorCisvLyBNYXggaW50ZXJ2YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0
ZSBvbiBtYW51YWwgc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgorc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGdSZWFkeVN0YXRlVGltZXJJbnRlcnZhbCA9IDYwOworCitHU1RfREVCVUdfQ0FURUdPUlkod2Vi
a2l0X21zZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbXNlX2RlYnVn
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFy
KQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKSB7CisgICAgICAgIHJlZ2lzdHJhcihbXShNZWRp
YVBsYXllciogcGxheWVyKSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRT4ocGxheWVyKTsgfSwKKyAgICAgICAgICAgIGdldFN1cHBvcnRlZFR5
cGVzLCBzdXBwb3J0c1R5cGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHN1cHBvcnRzS2V5
U3lzdGVtKTsKKyAgICB9Cit9CisKK2Jvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVy
V2ViS2l0TVNFRWxlbWVudCgpCit7CisgICAgaWYgKFVOTElLRUxZKCFpbml0aWFsaXplR1N0cmVh
bWVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZWdpc3RlcldlYktpdEdTdHJl
YW1lckVsZW1lbnRzKCk7CisKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbXNl
X2RlYnVnLCAid2Via2l0bXNlIiwgMCwgIldlYktpdCBNU0UgbWVkaWEgcGxheWVyIik7CisKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiBXZWJLaXRNZWRpYVNyY0ZhY3RvcnkgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJ3ZWJraXRtZWRpYXNyYyIpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIVdlYktpdE1lZGlhU3JjRmFjdG9yeSkpCisgICAgICAgIGdzdF9lbGVtZW50
X3JlZ2lzdGVyKG51bGxwdHIsICJ3ZWJraXRtZWRpYXNyYyIsIEdTVF9SQU5LX1BSSU1BUlkgKyAx
MDAsIFdFQktJVF9UWVBFX01FRElBX1NSQyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjppc0F2YWlsYWJsZSgpCit7CisgICAgaWYg
KFVOTElLRUxZKCFpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRNU0VFbGVtZW50
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0
b3J5PiBmYWN0b3J5ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgicGxheWJp
biIpKTsKKyAgICByZXR1cm4gZmFjdG9yeTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UoTWVkaWFQbGF5ZXIqIHBsYXll
cikKKyAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcihwbGF5ZXIpCit7CisgICAgR1NU
X1RSQUNFKCJjcmVhdGluZyB0aGUgcGxheWVyICglcCkiLCB0aGlzKTsKK30KKworTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKCkK
K3sKKyAgICBHU1RfVFJBQ0UoImRlc3Ryb3lpbmcgdGhlIHBsYXllciAoJXApIiwgdGhpcyk7CisK
KyAgICBmb3IgKGF1dG8gaXRlcmF0b3IgOiBtX2FwcGVuZFBpcGVsaW5lc01hcCkKKyAgICAgICAg
aXRlcmF0b3IudmFsdWUtPmNsZWFyUGxheWVyUHJpdmF0ZSgpOworCisgICAgaWYgKG1fc291cmNl
KSB7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9N
RURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fc291cmNlLmdldCgpLCB0aGlzKTsKKyAgICB9CisK
KyAgICBpZiAobV9wbGF5YmFja1BpcGVsaW5lKQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUt
PnNldFdlYktpdE1lZGlhU3JjKG51bGxwdHIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAo
VU5MSUtFTFkoIWluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdE1TRUVsZW1lbnQo
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdXJsU3RyaW5nLnN0YXJ0c1dpdGgoIm1l
ZGlhc291cmNlIikpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJVbnN1cHBvcnRlZCB1cmw6ICVzIiwg
dXJsU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFtX3BsYXliYWNrUGlwZWxpbmUpCisgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZSA9IFBs
YXliYWNrUGlwZWxpbmU6OmNyZWF0ZSgpOworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpsb2FkKHVybFN0cmluZyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQq
IG1lZGlhU291cmNlKQoreworICAgIG1fbWVkaWFTb3VyY2UgPSBtZWRpYVNvdXJjZTsKKyAgICBs
b2FkKFN0cmluZzo6Zm9ybWF0KCJtZWRpYXNvdXJjZSVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKCkKK3sKKyAg
ICBtX3BhdXNlZCA9IHRydWU7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVz
ZSgpOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJh
dGlvbk1lZGlhVGltZSgpIGNvbnN0Cit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8
IG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZSgpOworCisgICAgcmV0
dXJuIG1fbWVkaWFUaW1lRHVyYXRpb247Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpzZWVrKGZsb2F0IHRpbWUpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVs
aW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0lORk8o
IltTZWVrXSBzZWVrIGF0dGVtcHQgdG8gJWYgc2VjcyIsIHRpbWUpOworCisgICAgLy8gQXZvaWQg
dXNlbGVzcyBzZWVraW5nLgorICAgIGZsb2F0IGN1cnJlbnQgPSBjdXJyZW50TWVkaWFUaW1lKCku
dG9GbG9hdCgpOworICAgIGlmICh0aW1lID09IGN1cnJlbnQpIHsKKyAgICAgICAgaWYgKCFtX3Nl
ZWtpbmcpCisgICAgICAgICAgICB0aW1lQ2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9zZWVraW5nICYmIG1fc2Vla0lzUGVuZGluZykgeworICAgICAgICBtX3NlZWtUaW1lID0gdGlt
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdTVF9ERUJVRygiU2Vla2luZyBmcm9t
ICVmIHRvICVmIHNlY29uZHMiLCBjdXJyZW50LCB0aW1lKTsKKworICAgIGZsb2F0IHByZXZTZWVr
VGltZSA9IG1fc2Vla1RpbWU7CisgICAgbV9zZWVrVGltZSA9IHRpbWU7CisKKyAgICBpZiAoIWRv
U2VlaygpKSB7CisgICAgICAgIG1fc2Vla1RpbWUgPSBwcmV2U2Vla1RpbWU7CisgICAgICAgIEdT
VF9XQVJOSU5HKCJTZWVraW5nIHRvICVmIGZhaWxlZCIsIHRpbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9pc0VuZFJlYWNoZWQgPSBmYWxzZTsKKyAgICBHU1RfREVCVUcoIm1f
c2Vla2luZz0lcywgbV9zZWVrVGltZT0lZiIsIG1fc2Vla2luZyA/ICJ0cnVlIiA6ICJmYWxzZSIs
IG1fc2Vla1RpbWUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
Y29uZmlndXJlUGxheVNpbmsoKQoreworICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y29uZmlndXJlUGxheVNpbmsoKTsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gcGxheXNpbmsg
PSBhZG9wdEdSZWYoZ3N0X2Jpbl9nZXRfYnlfbmFtZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkp
LCAicGxheXNpbmsiKSk7CisgICAgaWYgKHBsYXlzaW5rKSB7CisgICAgICAgIC8vIFRoZSBkZWZh
dWx0IHZhbHVlICgwKSBtZWFucyAic2VuZCBldmVudHMgdG8gYWxsIHRoZSBzaW5rcyIsIGluc3Rl
YWQKKyAgICAgICAgLy8gb2YgIm9ubHkgdG8gdGhlIGZpcnN0IHRoYXQgcmV0dXJucyB0cnVlIi4g
VGhpcyBpcyBuZWVkZWQgZm9yIE1TRSBzZWVrLgorICAgICAgICBnX29iamVjdF9zZXQoR19PQkpF
Q1QocGxheXNpbmsuZ2V0KCkpLCAic2VuZC1ldmVudC1tb2RlIiwgMCwgbnVsbHB0cik7CisgICAg
fQorfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y2hhbmdlUGlwZWxp
bmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkKK3sKKyAgICBpZiAoc2Vla2luZygpKSB7CisgICAg
ICAgIEdTVF9ERUJVRygiUmVqZWN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIHdoaWxlIHNlZWtpbmci
LAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShuZXdTdGF0ZSk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGltZShj
b25zdCBNZWRpYVRpbWUmIHNlZWtUaW1lKQoreworICAgIC8vIFJlZW5xdWV1ZSBzYW1wbGVzIG5l
ZWRlZCB0byByZXN1bWUgcGxheWJhY2sgaW4gdGhlIG5ldyBwb3NpdGlvbi4KKyAgICBtX21lZGlh
U291cmNlLT5zZWVrVG9UaW1lKHNlZWtUaW1lKTsKKworICAgIEdTVF9ERUJVRygiTVNFIHNlZWsg
dG8gJWYgZmluaXNoZWQiLCBzZWVrVGltZS50b0RvdWJsZSgpKTsKKworICAgIGlmICghbV9nc3RT
ZWVrQ29tcGxldGVkKSB7CisgICAgICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IHRydWU7CisgICAg
ICAgIG1heWJlRmluaXNoU2VlaygpOworICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmRvU2VlayhnaW50NjQsIGZsb2F0LCBHc3RTZWVrRmxhZ3MpCit7Cisg
ICAgLy8gVXNlIGRvU2VlaygpIGluc3RlYWQuIElmIGFueWJvZHkgaXMgY2FsbGluZyB0aGlzIHZl
cnNpb24gb2YgZG9TZWVrKCksIHNvbWV0aGluZyBpcyB3cm9uZy4KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpkb1NlZWsoKQoreworICAgIEdzdENsb2NrVGltZSBwb3NpdGlvbiA9IHRv
R3N0Q2xvY2tUaW1lKG1fc2Vla1RpbWUpOworICAgIE1lZGlhVGltZSBzZWVrVGltZSA9IE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3NlZWtUaW1lKTsKKyAgICBkb3VibGUgcmF0ZSA9IG1f
cGxheWVyLT5yYXRlKCk7CisgICAgR3N0U2Vla0ZsYWdzIHNlZWtUeXBlID0gc3RhdGljX2Nhc3Q8
R3N0U2Vla0ZsYWdzPihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFU
RSk7CisKKyAgICAvLyBBbHdheXMgbW92ZSB0byBzZWVraW5nIHN0YXRlIHRvIHJlcG9ydCBjb3Jy
ZWN0ICdjdXJyZW50VGltZScgd2hpbGUgcGVuZGluZyBmb3IgYWN0dWFsIHNlZWsgdG8gY29tcGxl
dGUuCisgICAgbV9zZWVraW5nID0gdHJ1ZTsKKworICAgIC8vIENoZWNrIGlmIHBsYXliYWNrIHBp
cGVsaW5lIGlzIHJlYWR5IGZvciBzZWVrLgorICAgIEdzdFN0YXRlIHN0YXRlLCBuZXdTdGF0ZTsK
KyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dl
dF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZuZXdTdGF0ZSwgMCk7CisgICAgaWYg
KGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSB8fCBnZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwpIHsKKyAgICAgICAgR1NUX0RFQlVH
KCJbU2Vla10gY2Fubm90IHNlZWssIGN1cnJlbnQgc3RhdGUgY2hhbmdlIGlzICVzIiwgZ3N0X2Vs
ZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZShnZXRTdGF0ZVJlc3VsdCkpOworICAg
ICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1f
c291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NU
QVRFX0NIQU5HRV9BU1lOQworICAgICAgICAmJiAhKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5H
ICYmIG5ld1N0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpKQorICAgICAgICB8fCBzdGF0ZSA8IEdT
VF9TVEFURV9QQVVTRUQKKyAgICAgICAgfHwgbV9pc0VuZFJlYWNoZWQKKyAgICAgICAgfHwgIW1f
Z3N0U2Vla0NvbXBsZXRlZCkgeworICAgICAgICBDU3RyaW5nIHJlYXNvbiA9ICJVbmtub3duIHJl
YXNvbiI7CisgICAgICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FT
WU5DKSB7CisgICAgICAgICAgICByZWFzb24gPSBTdHJpbmc6OmZvcm1hdCgiSW4gYXN5bmMgY2hh
bmdlICVzIC0tPiAlcyIsCisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUoc3RhdGUpLAorICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5l
d1N0YXRlKSkudXRmOCgpOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIDwgR1NUX1NUQVRFX1BB
VVNFRCkKKyAgICAgICAgICAgIHJlYXNvbiA9ICJTdGF0ZSBsZXNzIHRoYW4gUEFVU0VEIjsKKyAg
ICAgICAgZWxzZSBpZiAobV9pc0VuZFJlYWNoZWQpCisgICAgICAgICAgICByZWFzb24gPSAiRW5k
IHJlYWNoZWQiOworICAgICAgICBlbHNlIGlmICghbV9nc3RTZWVrQ29tcGxldGVkKQorICAgICAg
ICAgICAgcmVhc29uID0gIlByZXZpb3VzIHNlZWsgaXMgbm90IGZpbmlzaGVkIHlldCI7CisKKyAg
ICAgICAgR1NUX0RFQlVHKCJbU2Vla10gRGVsYXlpbmcgdGhlIHNlZWs6ICVzIiwgcmVhc29uLmRh
dGEoKSk7CisKKyAgICAgICAgbV9zZWVrSXNQZW5kaW5nID0gdHJ1ZTsKKworICAgICAgICBpZiAo
bV9pc0VuZFJlYWNoZWQpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIHJlc2V0IHBp
cGVsaW5lIik7CisgICAgICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSB0cnVlOworICAgICAgICAg
ICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoYW5nZVBpcGVsaW5lU3Rh
dGUoR1NUX1NUQVRFX1BBVVNFRCkpCisgICAgICAgICAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6RW1wdHkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2Vl
a2luZyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9zZWVraW5nOworICAg
IH0KKworICAgIC8vIFN0b3AgYWNjZXB0aW5nIG5ldyBzYW1wbGVzIHVudGlsIGFjdHVhbCBzZWVr
IGlzIGZpbmlzaGVkLgorICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJ
VF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBmYWxzZSk7CisKKyAgICAvLyBDb3JyZWN0IHNl
ZWsgdGltZSBpZiBpdCBoZWxwcyB0byBmaXggYSBzbWFsbCBnYXAuCisgICAgaWYgKCFpc1RpbWVC
dWZmZXJlZChzZWVrVGltZSkpIHsKKyAgICAgICAgLy8gTG9vayBpZiBhIG5lYXIgZnV0dXJlIHRp
bWUgKDwwLjEgc2VjLikgaXMgYnVmZmVyZWQgYW5kIGNoYW5nZSB0aGUgc2VlayB0YXJnZXQgdGlt
ZS4KKyAgICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpIHsKKyAgICAgICAgICAgIGNvbnN0IE1lZGlh
VGltZSBtaW5pR2FwID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKDAuMSk7CisgICAgICAg
ICAgICBNZWRpYVRpbWUgbmVhcmVzdCA9IG1fbWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCktPm5lYXJl
c3Qoc2Vla1RpbWUpOworICAgICAgICAgICAgaWYgKG5lYXJlc3QuaXNWYWxpZCgpICYmIG5lYXJl
c3QgPiBzZWVrVGltZSAmJiAobmVhcmVzdCAtIHNlZWtUaW1lKSA8PSBtaW5pR2FwICYmIGlzVGlt
ZUJ1ZmZlcmVkKG5lYXJlc3QgKyBtaW5pR2FwKSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJV
RygiW1NlZWtdIENoYW5nZWQgdGhlIHNlZWsgdGFyZ2V0IHRpbWUgZnJvbSAlZiB0byAlZiwgYSBu
ZWFyIHBvaW50IGluIHRoZSBmdXR1cmUiLCBzZWVrVGltZS50b0Zsb2F0KCksIG5lYXJlc3QudG9G
bG9hdCgpKTsKKyAgICAgICAgICAgICAgICBzZWVrVGltZSA9IG5lYXJlc3Q7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBNU0UgaGFzIHNhbXBsZXMg
Zm9yIHJlcXVlc3RlZCB0aW1lIGFuZCBkZWZlciBhY3R1YWwgc2VlayBpZiBuZWVkZWQuCisgICAg
aWYgKCFpc1RpbWVCdWZmZXJlZChzZWVrVGltZSkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJbU2Vl
a10gRGVsYXlpbmcgdGhlIHNlZWs6IE1TRSBpcyBub3QgcmVhZHkiKTsKKyAgICAgICAgR3N0U3Rh
dGVDaGFuZ2VSZXR1cm4gc2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9w
aXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIGlmIChzZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICAgICAgICAgIEdTVF9ERUJV
RygiW1NlZWtdIENhbm5vdCBzZWVrLCBmYWlsZWQgdG8gcGF1c2UgcGxheWJhY2sgcGlwZWxpbmUu
Iik7CisgICAgICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRf
TUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgICAgICAgICBtX3NlZWtpbmcg
PSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICBub3RpZnlT
ZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7CisgICAgICAgIEFTU0VSVCghbV9tc2VTZWVr
Q29tcGxldGVkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQ29tcGxl
dGUgcHJldmlvdXMgTVNFIHNlZWsgaWYgbmVlZGVkLgorICAgIGlmICghbV9tc2VTZWVrQ29tcGxl
dGVkKSB7CisgICAgICAgIG1fbWVkaWFTb3VyY2UtPm1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Cisg
ICAgICAgIEFTU0VSVChtX21zZVNlZWtDb21wbGV0ZWQpOworICAgICAgICAvLyBOb3RlOiBzZWVr
Q29tcGxldGVkIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCB1cy4KKyAgICAgICAgcmV0dXJuIG1fc2Vl
a2luZzsKKyAgICB9CisKKyAgICBHU1RfREVCVUcoIldlIGNhbiBzZWVrIG5vdyIpOworCisgICAg
Z2ludDY0IHN0YXJ0VGltZSA9IHBvc2l0aW9uLCBlbmRUaW1lID0gR1NUX0NMT0NLX1RJTUVfTk9O
RTsKKyAgICBpZiAocmF0ZSA8IDApIHsKKyAgICAgICAgc3RhcnRUaW1lID0gMDsKKyAgICAgICAg
ZW5kVGltZSA9IHBvc2l0aW9uOworICAgIH0KKworICAgIGlmICghcmF0ZSkKKyAgICAgICAgcmF0
ZSA9IDE7CisKKyAgICBHU1RfREVCVUcoIkFjdHVhbCBzZWVrIHRvICUiIEdTVF9USU1FX0ZPUk1B
VCAiLCBlbmQgdGltZTogICUiIEdTVF9USU1FX0ZPUk1BVCAiLCByYXRlOiAlZiIsIEdTVF9USU1F
X0FSR1Moc3RhcnRUaW1lKSwgR1NUX1RJTUVfQVJHUyhlbmRUaW1lKSwgcmF0ZSk7CisKKyAgICAv
LyBUaGlzIHdpbGwgY2FsbCBub3RpZnlTZWVrTmVlZHNEYXRhKCkgYWZ0ZXIgc29tZSB0aW1lIHRv
IHRlbGwgdGhhdCB0aGUgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNhbXBsZSBlbnF1ZXVpbmcuCisg
ICAgd2ViS2l0TWVkaWFTcmNQcmVwYXJlU2VlayhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdl
dCgpKSwgc2Vla1RpbWUpOworCisgICAgbV9nc3RTZWVrQ29tcGxldGVkID0gZmFsc2U7CisgICAg
aWYgKCFnc3RfZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRf
VElNRSwgc2Vla1R5cGUsIEdTVF9TRUVLX1RZUEVfU0VULCBzdGFydFRpbWUsIEdTVF9TRUVLX1RZ
UEVfU0VULCBlbmRUaW1lKSkgeworICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2Ft
cGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgICAgIG1f
c2Vla2luZyA9IGZhbHNlOworICAgICAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOworICAg
ICAgICBHU1RfREVCVUcoImRvU2VlaygpOiBnc3RfZWxlbWVudF9zZWVrKCkgZmFpbGVkLCByZXR1
cm5pbmcgZmFsc2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRo
ZSBzYW1wbGVzIHdpbGwgYmUgZW5xdWV1ZWQgaW4gbm90aWZ5U2Vla05lZWRzRGF0YSgpLgorICAg
IEdTVF9ERUJVRygiZG9TZWVrKCk6IGdzdF9lbGVtZW50X3NlZWsoKSBzdWNjZWVkZWQsIHJldHVy
bmluZyB0cnVlIik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWsoKQoreworICAgIGlmICghbV9zZWVraW5n
IHx8ICFtX21zZVNlZWtDb21wbGV0ZWQgfHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3N0U3RhdGUgc3RhdGUsIG5ld1N0YXRlOworICAgIEdzdFN0YXRlQ2hh
bmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsKKworICAgIGlmIChnZXRTdGF0ZVJlc3Vs
dCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DCisgICAgICAgICYmICEoc3RhdGUgPT0gR1NUX1NU
QVRFX1BMQVlJTkcgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkpIHsKKyAgICAgICAg
R1NUX0RFQlVHKCJbU2Vla10gRGVsYXlpbmcgc2VlayBmaW5pc2giKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgR1NUX0RFQlVH
KCJbU2Vla10gQ29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8gJWYiLCBtX3NlZWtUaW1lKTsKKyAg
ICAgICAgbV9zZWVrSXNQZW5kaW5nID0gZmFsc2U7CisgICAgICAgIGlmICghZG9TZWVrKCkpIHsK
KyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJbU2Vla10gU2Vla2luZyB0byAlZiBmYWlsZWQiLCBt
X3NlZWtUaW1lKTsKKyAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSAtMTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJbU2Vla10gU2Vla2Vk
IHRvICVmIiwgbV9zZWVrVGltZSk7CisKKyAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2Ft
cGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgbV9zZWVr
aW5nID0gZmFsc2U7CisgICAgbV9jYWNoZWRQb3NpdGlvbiA9IC0xOworICAgIC8vIFRoZSBwaXBl
bGluZSBjYW4gc3RpbGwgaGF2ZSBhIHBlbmRpbmcgc3RhdGUuIEluIHRoaXMgY2FzZSBhIHBvc2l0
aW9uIHF1ZXJ5IHdpbGwgZmFpbC4KKyAgICAvLyBSaWdodCBub3cgd2UgY2FuIHVzZSBtX3NlZWtU
aW1lIGFzIGEgZmFsbGJhY2suCisgICAgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bv
c2l0aW9uID0gdHJ1ZTsKKyAgICB0aW1lQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlUGxheWJhY2tSYXRlKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vl
a2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Vla2luZzsKK30KKworLy8gRklYTUU6IE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBtYW5hZ2VzIHRoZSBSZWFkeVN0YXRlIG9uIGl0cyBv
d24uIFdlIHNob3VsZG4ndCBjaGFuZ2UgaXQgbWFudWFsbHkuCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBy
ZWFkeVN0YXRlKQoreworICAgIGlmIChyZWFkeVN0YXRlID09IG1fcmVhZHlTdGF0ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKHNlZWtpbmcoKSkgeworICAgICAgICBHU1RfREVCVUcoIlNr
aXAgcmVhZHkgc3RhdGUgY2hhbmdlKCVzIC0+ICVzKSBkdWUgdG8gc2Vla1xuIiwgZHVtcFJlYWR5
U3RhdGUobV9yZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUocmVhZHlTdGF0ZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJSZWFkeSBTdGF0ZSBDaGFuZ2VkIG1h
bnVhbGx5IGZyb20gJXUgdG8gJXUiLCBtX3JlYWR5U3RhdGUsIHJlYWR5U3RhdGUpOworICAgIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisgICAg
bV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKKyAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZTog
JXMgLT4gJXMiLCBkdW1wUmVhZHlTdGF0ZShvbGRSZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUo
bV9yZWFkeVN0YXRlKSk7CisKKyAgICBpZiAob2xkUmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpI
YXZlQ3VycmVudERhdGEgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVu
dERhdGEpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gUmVwb3J0aW5nIGxvYWQgc3RhdGUg
Y2hhbmdlZCB0byB0cmlnZ2VyIHNlZWsgY29udGludWF0aW9uIik7CisgICAgICAgIGxvYWRTdGF0
ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisK
KyAgICBHc3RTdGF0ZSBwaXBlbGluZVN0YXRlOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdl
dFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZw
aXBlbGluZVN0YXRlLCBudWxscHRyLCAyNTAgKiBHU1RfTlNFQ09ORCk7CisgICAgYm9vbCBpc1Bs
YXlpbmcgPSAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIHBp
cGVsaW5lU3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgaWYgKG1fcmVhZHlTdGF0
ZSA9PSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhICYmIG9sZFJlYWR5U3RhdGUgPiBNZWRpYVBs
YXllcjo6SGF2ZU1ldGFkYXRhICYmIGlzUGxheWluZykgeworICAgICAgICBHU1RfVFJBQ0UoIkNo
YW5naW5nIHBpcGVsaW5lIHRvIFBBVVNFRC4uLiIpOworICAgICAgICBib29sIG9rID0gY2hhbmdl
UGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgR1NUX1RSQUNFKCJDaGFu
Z2VkIHBpcGVsaW5lIHRvIFBBVVNFRDogJXMiLCBvayA/ICJTdWNjZXNzIiA6ICJFcnJvciIpOwor
ICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRGb3JT
ZWVrQ29tcGxldGVkKCkKK3sKKyAgICBpZiAoIW1fc2Vla2luZykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR1NUX0RFQlVHKCJXYWl0aW5nIGZvciBNU0Ugc2VlayBjb21wbGV0ZWQiKTsKKyAgICBt
X21zZVNlZWtDb21wbGV0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OnNlZWtDb21wbGV0ZWQoKQoreworICAgIGlmIChtX21zZVNlZWtDb21wbGV0
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiTVNFIHNlZWsgY29tcGxldGVk
Iik7CisgICAgbV9tc2VTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKworICAgIGRvU2VlaygpOworCisg
ICAgaWYgKCFzZWVraW5nKCkgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlRnV0
dXJlRGF0YSkKKyAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7
CisKKyAgICBpZiAoIXNlZWtpbmcoKSkKKyAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZXRSYXRlKGZsb2F0
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YnVmZmVyZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c291cmNlQ2hhbmdlZCgpCit7CisgICAg
bV9zb3VyY2UgPSBudWxscHRyOworICAgIGdfb2JqZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAi
c291cmNlIiwgJm1fc291cmNlLm91dFB0cigpLCBudWxscHRyKTsKKworICAgIEFTU0VSVChXRUJL
SVRfSVNfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSk7CisKKyAgICBtX3BsYXliYWNrUGlwZWxp
bmUtPnNldFdlYktpdE1lZGlhU3JjKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpKTsK
KworICAgIE1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVuKCptX21lZGlhU291cmNlLmdldCgpLCAq
dGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidmlk
ZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9zb3VyY2UuZ2V0KCksICJhdWRpby1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5nZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJB
Q0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIHdlYktpdE1lZGlhU3JjU2V0TWVk
aWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0aGlzKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygp
Cit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3Jr
U3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRS
ZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOworICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5nOwor
CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9n
ZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NUX05T
RUNPTkQpOworCisgICAgYm9vbCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7Cisg
ICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9T
VUNDRVNTOiB7CisgICAgICAgIEdTVF9ERUJVRygiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUocGVuZGluZykpOworCisgICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0
ZSBjaGFuZ2VkIHRvIFJFQURZIHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgorICAgICAg
ICAvLyBvbiBIVE1MTWVkaWFFbGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8g
J2VuZGVkJyBldmVudC4KKyAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fcmVzZXRQaXBl
bGluZSA9IChzdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkpOworICAgICAgICBpZiAobV9yZXNldFBp
cGVsaW5lKQorICAgICAgICAgICAgbV9tZWRpYVRpbWVEdXJhdGlvbiA9IE1lZGlhVGltZTo6emVy
b1RpbWUoKTsKKworICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgor
ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6Cisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAg
ICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVh
ZHlTdGF0ZSkpOworICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1w
dHk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6Cisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAg
ICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3Jl
YWR5U3RhdGUpKTsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVt
cHR5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoK
KyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKKyAgICAgICAgICAgIGlmIChzZWVraW5n
KCkpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1l
dGFkYXRhOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgbWFuYWdlIE5ldHdv
cmtTdGF0ZSB0b28/CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMi
LCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV9idWZmZXJpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJpbmdQZXJjZW50YWdl
ID09IDEwMCkgeworICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoIltCdWZmZXJpbmddIENv
bXBsZXRlLiIpOworICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlcmluZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGE7CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVt
cFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBs
YXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgICAg
ICAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRl
KG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgICAgIEdTVF9ERUJV
RygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAg
ICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3Rh
dGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKKyAgICAgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobV9lb3NNYXJrZWQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcp
CisgICAgICAgICAgICAgICAgbV9lb3NQZW5kaW5nID0gdHJ1ZTsKKworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3luYyBzdGF0ZXMg
d2hlcmUgbmVlZGVkLgorICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewor
ICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgeworICAgICAgICAg
ICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CisgICAgICAgICAgICAgICAgbm90
aWZ5UGxheWVyT2ZNdXRlKCk7CisgICAgICAgICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXNlZWtpbmco
KSAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAg
ICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIp
OworICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9Q
TEFZSU5HKSB7CisgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworCisgICAgICAgICAgICBp
ZiAoKG1fYnVmZmVyaW5nICYmICFpc0xpdmVTdHJlYW0oKSkgfHwgIW1fcGxheWJhY2tSYXRlKSB7
CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBm
b3IgYnVmZmVyaW5nLiIpOworICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NU
X1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAgICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdT
VF9TVEFURV9QQVVTRUQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAg
ICAgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVC
VUcoIlJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2FzIGNvbXBsZXRlZCIsIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAgICAgICBHU1RfREVC
VUcoIkFzeW5jOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAg
ICAgIC8vIENoYW5nZSBpbiBwcm9ncmVzcy4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1Rf
U1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsdXJlOiBTdGF0
ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBm
YWlsZWQuCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJF
Uk9MTDoKKyAgICAgICAgR1NUX0RFQlVHKCJObyBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRpbmc6
ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0
ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgLy8gTGl2ZSBwaXBlbGluZXMgZ28gaW4g
UEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KKyAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRydWU7
CisKKyAgICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkgeworICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgR1NU
X0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAg
ICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlT
dGF0ZSkpOworICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYg
KHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQorICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxz
ZTsKKworICAgICAgICBpZiAoIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKQorICAgICAgICAg
ICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHKCJFbHNlIDogJWQiLCBnZXRTdGF0ZVJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBHU1RfU1RB
VEVfVk9JRF9QRU5ESU5HOworCisgICAgaWYgKHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUpCisg
ICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKG1fbmV0
d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUcoIk5ldHdv
cmsgU3RhdGUgQ2hhbmdlZCBmcm9tICV1IHRvICV1Iiwgb2xkTmV0d29ya1N0YXRlLCBtX25ldHdv
cmtTdGF0ZSk7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAg
fQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBHU1Rf
REVCVUcoIlJlYWR5IFN0YXRlIENoYW5nZWQgZnJvbSAldSB0byAldSIsIG9sZFJlYWR5U3RhdGUs
IG1fcmVhZHlTdGF0ZSk7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwor
ICAgIH0KKworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NF
U1MgJiYgc3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICB1cGRhdGVQbGF5YmFj
a1JhdGUoKTsKKyAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7CisgICAgfQorfQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKK3sKKyAg
ICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9zZWVraW5nKQorICAgICAgICBtYXliZUZpbmlzaFNlZWsoKTsK
KyAgICBlbHNlCisgICAgICAgIHVwZGF0ZVN0YXRlcygpOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lICZ0aW1l
KSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0gbV9tZWRpYVNvdXJjZSAmJiBtX21lZGlhU291
cmNlLT5idWZmZXJlZCgpLT5jb250YWluKHRpbWUpOworICAgIEdTVF9ERUJVRygiVGltZSAlZiBi
dWZmZXJlZD8gJXMiLCB0aW1lLnRvRG91YmxlKCksIHJlc3VsdCA/ICJZZXMiIDogIk5vIik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnNldE1lZGlhU291cmNlQ2xpZW50KFJlZjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1T
RT4gY2xpZW50KQoreworICAgIG1fbWVkaWFTb3VyY2VDbGllbnQgPSBjbGllbnQucHRyKCk7Cit9
CisKK1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjptZWRpYVNvdXJjZUNsaWVudCgpCit7CisgICAgcmV0dXJuIG1fbWVk
aWFTb3VyY2VDbGllbnQ7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjpkdXJhdGlvbkNoYW5nZWQoKQoreworICAgIGlmICghbV9tZWRpYVNvdXJjZUNsaWVudCkgewor
ICAgICAgICBHU1RfREVCVUcoIm1fbWVkaWFTb3VyY2VDbGllbnQgaXMgbnVsbCwgZG9pbmcgbm90
aGluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWVkaWFUaW1lIHByZXZpb3Vz
RHVyYXRpb24gPSBtX21lZGlhVGltZUR1cmF0aW9uOworICAgIG1fbWVkaWFUaW1lRHVyYXRpb24g
PSBtX21lZGlhU291cmNlQ2xpZW50LT5kdXJhdGlvbigpOworCisgICAgR1NUX1RSQUNFKCJwcmV2
aW91cz0lZiwgbmV3PSVmIiwgcHJldmlvdXNEdXJhdGlvbi50b0Zsb2F0KCksIG1fbWVkaWFUaW1l
RHVyYXRpb24udG9GbG9hdCgpKTsKKworICAgIC8vIEF2b2lkIGVtaXRpbmcgZHVyYXRpb25jaGFu
Z2VkIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBwcmV2aW91cyBkdXJhdGlvbiB3YXMgMCBiZWNhdXNl
IHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQKKyAgICAvLyBieSB0aGUgSFRNTE1lZGlhRWxl
bWVudC4KKyAgICBpZiAobV9tZWRpYVRpbWVEdXJhdGlvbiAhPSBwcmV2aW91c0R1cmF0aW9uICYm
IG1fbWVkaWFUaW1lRHVyYXRpb24uaXNWYWxpZCgpICYmIHByZXZpb3VzRHVyYXRpb24uaXNWYWxp
ZCgpKSB7CisgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9w
bGF5YmFja1BpcGVsaW5lLT5ub3RpZnlEdXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9tZWRp
YVNvdXJjZS0+ZHVyYXRpb25DaGFuZ2VkKG1fbWVkaWFUaW1lRHVyYXRpb24pOworICAgIH0KK30K
Kworc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1l
VHlwZUNhY2hlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IGNhY2hlID0gW10oKQorICAgIHsKKyAgICAgICAg
aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0TVNFRWxlbWVudCgpOworICAgICAg
ICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7CisgICAgICAg
IGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0geworICAgICAgICAgICAgInZpZGVvL21wNCIsCisg
ICAgICAgICAgICAiYXVkaW8vbXA0IgorICAgICAgICB9OworICAgICAgICBmb3IgKGF1dG8mIHR5
cGUgOiBtaW1lVHlwZXMpCisgICAgICAgICAgICBzZXQuYWRkKHR5cGUpOworICAgICAgICByZXR1
cm4gc2V0OworICAgIH0oKTsKKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlw
ZUNhY2hlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFj
a0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4gYXBwZW5kUGlwZWxpbmUsIFJlZlB0cjxX
ZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBvbGRUcmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNr
UHJpdmF0ZUJhc2U+IG5ld1RyYWNrKQoreworICAgIEFTU0VSVChhcHBlbmRQaXBlbGluZS0+dHJh
Y2soKSA9PSBuZXdUcmFjayk7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUt
PmFwcHNpbmtDYXBzKCk7CisgICAgQVNTRVJUKGNhcHMpOworICAgIEdTVF9ERUJVRygidHJhY2sg
SUQ6ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3VHJhY2stPmlkKCkuc3RyaW5nKCku
bGF0aW4xKCkuZGF0YSgpLCBjYXBzKTsKKworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLCAwKTsKKyAgICBjb25zdCBnY2hhciogbWVkaWFU
eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworICAgIEdzdFZpZGVvSW5m
byBpbmZvOworCisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8vIikg
JiYgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzKSkgeworICAgICAgICBmbG9h
dCB3aWR0aCwgaGVpZ2h0OworCisgICAgICAgIHdpZHRoID0gaW5mby53aWR0aDsKKyAgICAgICAg
aGVpZ2h0ID0gaW5mby5oZWlnaHQgKiAoKGZsb2F0KSBpbmZvLnBhcl9kIC8gKGZsb2F0KSBpbmZv
LnBhcl9uKTsKKyAgICAgICAgbV92aWRlb1NpemUuc2V0V2lkdGgod2lkdGgpOworICAgICAgICBt
X3ZpZGVvU2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICB9CisKKyAgICBpZiAoIW9sZFRyYWNr
KQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPmF0dGFjaFRyYWNrKGFwcGVuZFBpcGVsaW5l
LT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrLCBzdHJ1Y3R1cmUsIGNhcHMpOworICAg
IGVsc2UKKyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5yZWF0dGFjaFRyYWNrKGFwcGVuZFBp
cGVsaW5lLT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrKTsKK30KKworTWVkaWFQbGF5
ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRz
VHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorewor
ICAgIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6OklzTm90
U3VwcG9ydGVkOworICAgIGlmICghcGFyYW1ldGVycy5pc01lZGlhU291cmNlKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworCisgICAgLy8gRGlzYWJsZSBWUFgvT3B1cyBvbiBNU0UgZm9yIG5vdywg
bXA0L2F2YzEgc2VlbXMgd2F5IG1vcmUgcmVsaWFibGUgY3VycmVudGx5LgorICAgIGlmIChwYXJh
bWV0ZXJzLnR5cGUuZW5kc1dpdGgoIndlYm0iKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwor
ICAgIC8vIFlvdVR1YmUgVFYgcHJvdmlkZXMgZW1wdHkgdHlwZXMgZm9yIHNvbWUgdmlkZW9zIGFu
ZCB3ZSB3YW50IHRvIGJlIHNlbGVjdGVkIGFzIGJlc3QgbWVkaWEgZW5naW5lIGZvciB0aGVtLgor
ICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdCA9IE1l
ZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0
aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eS4KKyAgICBpZiAobWltZVR5cGVDYWNoZSgpLmNvbnRh
aW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlcnMuY29kZWNz
LmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJ
c1N1cHBvcnRlZDsKKworICAgIHJldHVybiBleHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0ZXJz
LCByZXN1bHQpOworfQorCisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZGlzcGF0Y2hEZWNyeXB0aW9uS2V5KEdz
dEJ1ZmZlciogYnVmZmVyKQoreworICAgIGZvciAoYXV0byBpdGVyYXRvciA6IG1fYXBwZW5kUGlw
ZWxpbmVzTWFwKSB7CisgICAgICAgIGlmIChpdGVyYXRvci52YWx1ZS0+YXBwZW5kU3RhdGUoKSA9
PSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uKSB7CisgICAgICAg
ICAgICBHU1RfVFJBQ0UoImFwcGVuZCBwaXBlbGluZSAlcCBpbiBrZXkgbmVnb3RpYXRpb24sIHNl
dHRpbmcga2V5IiwgaXRlcmF0b3IudmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1l
bnRfc2VuZF9ldmVudChpdGVyYXRvci52YWx1ZS0+cGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25ld19j
dXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwKKyAgICAgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX25ldygiZHJtLWNpcGhlciIsICJrZXkiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1
ZmZlciwgbnVsbHB0cikpKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yLnZhbHVlLT5zZXRBcHBlbmRT
dGF0ZShBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6Ok9uZ29pbmcpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIEdTVF9UUkFDRSgiYXBwZW5kIHBpcGVsaW5lICVwIG5vdCBpbiBrZXkg
bmVnb3RpYXRpb24iLCBpdGVyYXRvci52YWx1ZS5nZXQoKSk7CisgICAgfQorfQorI2VuZGlmCisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0oTWVk
aWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCit7CisgICAgaWYgKHN0
YXR1cyAhPSBNZWRpYVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3IpCisgICAgICAgIHJldHVybjsK
KworICAgIEdTVF9ERUJVRygiTWFya2luZyBlbmQgb2Ygc3RyZWFtIik7CisgICAgbV9lb3NNYXJr
ZWQgPSB0cnVlOworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKK3sKKyAgICBN
ZWRpYVRpbWUgcG9zaXRpb24gPSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRN
ZWRpYVRpbWUoKTsKKworICAgIGlmIChtX2Vvc1BlbmRpbmcgJiYgKHBhdXNlZCgpIHx8IChwb3Np
dGlvbiA+PSBkdXJhdGlvbk1lZGlhVGltZSgpKSkpIHsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0
YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkZWQpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRl
ID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBtX2Vvc1BlbmRpbmcgPSBmYWxzZTsK
KyAgICAgICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOworICAgICAgICBtX2NhY2hlZFBvc2l0aW9u
ID0gbV9tZWRpYVRpbWVEdXJhdGlvbi50b0Zsb2F0KCk7CisgICAgICAgIG1fZHVyYXRpb25BdEVP
UyA9IG1fbWVkaWFUaW1lRHVyYXRpb24udG9GbG9hdCgpOworICAgICAgICBtX3BsYXllci0+dGlt
ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitmbG9hdCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKFVOTElLRUxZKG1fZXJyb3JPY2N1cmVkKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBHU1RfREVCVUcoIm1heFRpbWVTZWVrYWJsZSIpOworICAgIGZsb2F0IHJlc3VsdCA9IGR1cmF0
aW9uTWVkaWFUaW1lKCkudG9GbG9hdCgpOworICAgIC8vIEluZmluaXRlIGR1cmF0aW9uIG1lYW5z
IGxpdmUgc3RyZWFtLgorICAgIGlmIChpc2luZihyZXN1bHQpKSB7CisgICAgICAgIE1lZGlhVGlt
ZSBtYXhCdWZmZXJlZFRpbWUgPSBidWZmZXJlZCgpLT5tYXhpbXVtQnVmZmVyZWRUaW1lKCk7Cisg
ICAgICAgIC8vIFJldHVybiB0aGUgaGlnaGVzdCBlbmQgdGltZSByZXBvcnRlZCBieSB0aGUgYnVm
ZmVyZWQgYXR0cmlidXRlLgorICAgICAgICByZXN1bHQgPSBtYXhCdWZmZXJlZFRpbWUuaXNWYWxp
ZCgpID8gbWF4QnVmZmVyZWRUaW1lLnRvRmxvYXQoKSA6IDA7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDA0MzlmOTFlMGRkM2U4ZGIzZGZkYmMxNmFiMGU1
MGM2OGM2NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaApAQCAt
MCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxNiBJZ2Fs
aWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFu
QGNlbnRyaWN1bGFyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NU
UkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAKKworI2luY2x1ZGUgIkdSZWZQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJNZWRpYVNhbXBsZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgorI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTb3VyY2VD
bGllbnRHU3RyZWFtZXJNU0U7CitjbGFzcyBBcHBlbmRQaXBlbGluZTsKK2NsYXNzIFBsYXliYWNr
UGlwZWxpbmU7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSA6IHB1Ymxp
YyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworCisgICAgZnJpZW5kIGNsYXNzIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOworCitw
dWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKE1lZGlh
UGxheWVyKik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKCk7
CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0
cmFyKTsKKworICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGxvYWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kikgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNldERvd25sb2FkQnVmZmVyaW5nKCkgb3ZlcnJpZGUgeyB9OworCisgICAg
Ym9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IHBhdXNlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZWVrKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbmZpZ3VyZVBsYXlTaW5r
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgTWVkaWFU
aW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFJh
dGUoZmxvYXQpIG92ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5n
ZXM+IGJ1ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgZmxvYXQgbWF4VGltZVNlZWthYmxl
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNvdXJjZUNoYW5nZWQoKSBvdmVycmlkZTsK
KworICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisgICAg
dm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOworICAgIHZvaWQgc2Vla0NvbXBsZXRlZCgpOwor
ICAgIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KCkg
eyByZXR1cm4gbV9tZWRpYVNvdXJjZS5nZXQoKTsgfQorCisgICAgdm9pZCBtYXJrRW5kT2ZTdHJl
YW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyk7CisKKyNpZiBFTkFCTEUo
TEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkKKyAgICB2b2lkIGRpc3BhdGNoRGVjcnlwdGlvbktleShH
c3RCdWZmZXIqKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9pZCB0cmFja0RldGVjdGVkKFJl
ZlB0cjxBcHBlbmRQaXBlbGluZT4sIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBv
bGRUcmFjaywgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNrKTsKKyAg
ICB2b2lkIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNvbnN0IE1lZGlhVGltZSYpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5n
LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRl
cnMmKTsKKworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICAvLyBGSVhNRTog
UmVkdWNlIGNvZGUgZHVwbGljYXRpb24uCisgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKSBvdmVycmlk
ZTsKKworICAgIGJvb2wgZG9TZWVrKGdpbnQ2NCwgZmxvYXQsIEdzdFNlZWtGbGFncykgb3ZlcnJp
ZGU7CisgICAgYm9vbCBkb1NlZWsoKTsKKyAgICB2b2lkIG1heWJlRmluaXNoU2VlaygpOworICAg
IHZvaWQgdXBkYXRlUGxheWJhY2tSYXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhc3luY1N0YXRl
Q2hhbmdlRG9uZSgpIG92ZXJyaWRlOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICB1
bnNpZ25lZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9Cisg
ICAgdW5zaWduZWQgbG9uZyBkcm9wcGVkVmlkZW9GcmFtZXMoKSBvdmVycmlkZSB7IHJldHVybiAw
OyB9CisgICAgdW5zaWduZWQgbG9uZyBjb3JydXB0ZWRWaWRlb0ZyYW1lcygpIG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KKyAgICBNZWRpYVRpbWUgdG90YWxGcmFtZURlbGF5KCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9CisgICAgYm9vbCBpc1RpbWVCdWZmZXJlZChj
b25zdCBNZWRpYVRpbWUmKSBjb25zdDsKKworICAgIGJvb2wgaXNNZWRpYVNvdXJjZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgc2V0TWVkaWFTb3VyY2VDbGll
bnQoUmVmPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPik7CisgICAgUmVmUHRyPE1lZGlh
U291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiBtZWRpYVNvdXJjZUNsaWVudCgpOworCisgICAgSGFz
aE1hcDxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4sIFJlZlB0cjxBcHBlbmRQ
aXBlbGluZT4+IG1fYXBwZW5kUGlwZWxpbmVzTWFwOworICAgIGJvb2wgbV9lb3NNYXJrZWQgPSBm
YWxzZTsKKyAgICBtdXRhYmxlIGJvb2wgbV9lb3NQZW5kaW5nID0gZmFsc2U7CisgICAgYm9vbCBt
X2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOworICAgIFJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVD
bGllbnQ+IG1fbWVkaWFTb3VyY2U7CisgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVh
bWVyTVNFPiBtX21lZGlhU291cmNlQ2xpZW50OworICAgIE1lZGlhVGltZSBtX21lZGlhVGltZUR1
cmF0aW9uOworICAgIGJvb2wgbV9tc2VTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICBSZWZQdHI8
UGxheWJhY2tQaXBlbGluZT4gbV9wbGF5YmFja1BpcGVsaW5lOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
      

    </bug>

</bugzilla>