<?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>204617</bug_id>
          
          <creation_ts>2019-11-26 06:33:43 -0800</creation_ts>
          <short_desc>[GStreamer] MediaPlayerPrivateGStreamer style cleanups</short_desc>
          <delta_ts>2019-11-29 12:27:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>204352</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Charlie Turner">cturner</assigned_to>
          <cc>annulen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>cturner</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1593657</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-26 06:33:43 -0800</bug_when>
    <thetext>+++ This bug was initially created as a clone of Bug #204352 +++

[GStreamer] Flatten MediaPlayerPrivateGStreamer into MediaPlayerPrivateGStreamerBase

https://bugs.webkit.org/show_bug.cgi?id=204352#c6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593890</commentid>
    <comment_count>1</comment_count>
      <attachid>384419</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-27 10:21:02 -0800</bug_when>
    <thetext>Created attachment 384419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593891</commentid>
    <comment_count>2</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-27 10:21:51 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #6)
&gt; Comment on attachment 383871 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383871&amp;action=review

I am skipping all the GL related code since Phil has a patch to
refactor all that in-review.

A lot of the g* types to C++ types I have also kept. Since we
discussed and concluded that the style is to always use g* types for
out parameters. Even though in several cases like gint and gchar it&apos;s
obvious they are the same as int and char, I still use the g* types
for out-params for consistency, and favour explicit static_cast&apos;ing to
be on the safe side.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:677
&gt; &gt; +        // If we are at beginning of media, start from the end to
&gt; &gt; +        // avoid immediate EOS.
&gt; 
&gt; This can be one line.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:681
&gt; &gt; +        if (position &lt; MediaTime::zeroTime())
&gt; &gt; +            endTime = durationMediaTime();
&gt; &gt; +        else
&gt; &gt; +            endTime = position;
&gt; 
&gt; This can be a ? : assignment

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:838
&gt; &gt; +    // Higher rate causes crash.
&gt; &gt; +    rate = clampTo(rate, -20.0, 20.0);
&gt; 
&gt; Clamping is fine but I would warn as well (either g_warn or WebKit WARN).

Done, but I warned with GST_WARNING.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:842
&gt; &gt; +        // and make sure that upper layers were notified if rate was set
&gt; 
&gt; Capital and period.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:850
&gt; &gt; +        // notify upper layers that we cannot handle passed rate.
&gt; 
&gt; Capital

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:857
&gt; &gt; +    GstState state;
&gt; &gt; +    GstState pending;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:930
&gt; &gt; +    // Fallback to the more general maxTimeLoaded() if no range has
&gt; &gt; +    // been found.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:951
&gt; &gt; +    // infinite duration means live stream

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1008
&gt; &gt; +    gint64 length = 0;

Because this is an out-parameter of gst_element_query_duration, I have kept it as-is, and use an explicit static_cast&lt;uint64_t&gt; to assign to m_totalBytes (which has been changed to be a uint64_t rather than unsigned long long.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1017
&gt; &gt; +    // Fall back to querying the source pads manually.
&gt; &gt; +    // See also https://bugzilla.gnome.org/show_bug.cgi?id=638749

Changed to a single line, but not assing a period since it forms a invalid URL.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1025
&gt; &gt; +            gint64 padLength = 0;

Out-param.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1173
&gt; &gt; +    GstState currentState;
&gt; &gt; +    GstState pending;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1198
&gt; &gt; +    // Create a timer when entering the READY state so that we can free resources
&gt; &gt; +    // if we stay for too long on READY.
&gt; &gt; +    // Also lets remove the timer if we request a state change for any state other than READY.
&gt; &gt; +    // See also https://bugs.webkit.org/show_bug.cgi?id=117354

Done, but see above about invalid URL.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1201
&gt; &gt; +        // Max interval in seconds to stay in the READY state on manual
&gt; &gt; +        // state change requests.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1252
&gt; &gt; +    gint numTracks = 0;

Done, it&apos;s kinda an out-parameter (from g_object_get &quot;n-video&quot;), but it seems fine to use the standard int in this case.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1275
&gt; &gt; +    for (gint i = 0; i &lt; numTracks; ++i) {

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1330
&gt; &gt; +    gint numTracks = 0;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1349
&gt; &gt; +    for (gint i = 0; i &lt; numTracks; ++i) {

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1385
&gt; &gt; +void MediaPlayerPrivateGStreamer::notifyPlayerOfText()
&gt; 
&gt; Are these three functions almost the same? Wouldn&apos;t it make sense to use
&gt; some templating magic here if possible?

There is a lot of duplication, I&apos;ll do that in a follow up since it&apos;s
easier to break a test with this change.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1392
&gt; &gt; +    gint numTracks = 0;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1405
&gt; &gt; +    for (gint i = 0; i &lt; numTracks; ++i) {

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1657
&gt; &gt; +    case TrackPrivateBaseGStreamer::TrackType::Unknown:
&gt; &gt; +    default:
&gt; 
&gt; Doesn&apos;t this need a FALLTHROUGH?

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1670
&gt; &gt; +        // TODO: MSE GstStream API support: https://bugs.webkit.org/show_bug.cgi?id=182531

Invalid URL.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1708
&gt; &gt; +    if ((oldHasVideo != m_hasVideo) || (oldHasAudio != m_hasAudio))
&gt; 
&gt; No need for inner () here.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1767
&gt; &gt; +    const gchar* contextType;

Kept for consitency with the out-param rule.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1827
&gt; &gt; +            GST_WARNING(&quot;CDM instance not initializaed&quot;);
&gt; 
&gt; typo!

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1952
&gt; &gt; +// Returns the size of the video
&gt; 
&gt; period.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1968
&gt; &gt; +            gint width, height;

Kept, out-param.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1993
&gt; &gt; +    // TODO: handle possible clean aperture data. See
&gt; &gt; +    // https://bugzilla.gnome.org/show_bug.cgi?id=596571
&gt; &gt; +    // TODO: handle possible transformation matrix. See
&gt; &gt; +    // https://bugzilla.gnome.org/show_bug.cgi?id=596326
&gt; 
&gt; Two lines, periods.

Two lines, no periods.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2024
&gt; &gt; +    guint64 width = 0, height = 0;
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2186
&gt; &gt; +            // Let the mediaPlayerClient handle the stream error, in
&gt; &gt; +            // this case the HTMLMediaElement will emit a stalled

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2513
&gt; &gt; +                for (guint j = 0; j &lt; stream-&gt;descriptors-&gt;len; ++j) {

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2515
&gt; &gt; +                    for (guint k = 0; k &lt; descriptor-&gt;length; ++k)

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2563
&gt; &gt; +    gint64 start = -1, stop = -1;

Out-param.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2572
&gt; &gt; +        gchar* title = nullptr;

Out-param.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2703
&gt; &gt; +    GstState pending;
&gt; &gt; +    GstState state;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2808
&gt; &gt; +        // Change failed
&gt; 
&gt; .

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2889
&gt; &gt; +    const gchar* newLocation = nullptr;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3054
&gt; &gt; +    const gchar* playbinName = &quot;playbin&quot;;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3078
&gt; &gt; +    // gst_element_factory_make() returns a floating reference so
&gt; &gt; +    // we should not adopt.
&gt; 
&gt; Is this comment valid? I don&apos;t see any adoption or smart ptr anywhere.

It seems to be there to stop future maintainers thinking they should use a smart-pointer here, but they should check the docs instead. Removed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3288
&gt; &gt; +    bool triggerResize;
&gt; 
&gt; shouldTriggerResize.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3449
&gt; &gt; +            const gchar* formatString = GST_VIDEO_INFO_HAS_ALPHA(&amp;videoInfo) ? &quot;RGBA&quot; : &quot;BGRx&quot;;
&gt; &gt; +#else
&gt; &gt; +            const gchar* formatString = GST_VIDEO_INFO_HAS_ALPHA(&amp;videoInfo) ? &quot;RGBA&quot; : &quot;RGBx&quot;;
&gt; 
&gt; char

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3636
&gt; &gt; +    gboolean result = TRUE;
&gt; 
&gt; bool result = true;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3829
&gt; &gt; +    guint64 decodedFrames = 0;
&gt; 
&gt; uint64_t

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3837
&gt; &gt; +    guint64 framesDropped = 0;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3846
&gt; &gt; +    gint64 position = 0;
&gt; 
&gt; int64_t
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3858
&gt; &gt; +    gint64 position = 0;

Out-param.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3935
&gt; &gt; +    bool eventHandled = gst_element_send_event(pipeline(), gst_event_new_custom(GST_EVENT_CUSTOM_DOWNSTREAM_OOB, gst_structure_new_empty(&quot;attempt-to-decrypt&quot;)));
&gt; 
&gt; wasEventHandled

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3955
&gt; &gt; +void MediaPlayerPrivateGStreamer::setWaitingForKey(bool waitingForKey)
&gt; 
&gt; parameter isWaitingForKey

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:213
&gt; &gt; +    unsigned decodedFrameCount() const override;
&gt; 
&gt; As an example, could you please check all overrides here against the MSE
&gt; player and make final here the ones that do not appear there?

TODO.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:327
&gt; &gt; +    // FIXME: Where is this used?
&gt; &gt; +    void handlePluginInstallerResult(GstInstallPluginsReturn);
&gt; 
&gt; If it is used nowhere, please remove it. What is weird is that the compiler
&gt; shuts up about this...

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:369
&gt; &gt; +    bool m_changingRate { false };
&gt; &gt; +    bool m_downloadFinished { false };
&gt; &gt; +    bool m_errorOccured { false };
&gt; 
&gt; Let&apos;s take advantage to fix the style here: m_isChangingRate,
&gt; m_didDownloadFinish, m_didErrorOccur.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:372
&gt; &gt; +    bool m_paused { true };
&gt; 
&gt; m_isPaused

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:379
&gt; &gt; +    bool m_resetPipeline { false };
&gt; &gt; +    bool m_seeking { false };
&gt; &gt; +    bool m_seekIsPending { false };
&gt; 
&gt; m_shouldResetPipeline
&gt; m_isSeeking
&gt; m_isSeekPending;

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:382
&gt; &gt; +    bool m_volumeAndMuteInitialized { false };
&gt; 
&gt; m_areVolumeAndMuteInitialized

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:403
&gt; &gt; +    bool m_renderingCanBeAccelerated { false };
&gt; &gt; +
&gt; &gt; +    bool m_destroying { false };
&gt; 
&gt; m_isUsingFallbackVideoSink, m_canRenderingBeAccelerated, m_isBeingDestroyed

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:426
&gt; &gt; +    bool m_waitingForKey { false };
&gt; 
&gt; m_isWaitingForKey

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:495
&gt; &gt; +    bool m_playbackRatePause { false };
&gt; 
&gt; m_isPlaybackRatePaused

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:502
&gt; &gt; +    bool m_delayingLoad { false };
&gt; 
&gt; m_isDelayingLoad

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:517
&gt; &gt; +    bool m_buffering { false };
&gt; 
&gt; m_isBuffering

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:521
&gt; &gt; +    bool m_preservesPitch { false };
&gt; 
&gt; m_shouldPreservePitch

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594035</commentid>
    <comment_count>3</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-11-28 06:54:47 -0800</bug_when>
    <thetext>(In reply to Charlie Turner from comment #2)
 
&gt; I am skipping all the GL related code since Phil has a patch to
&gt; refactor all that in-review.
&gt; 
&gt; A lot of the g* types to C++ types I have also kept. Since we
&gt; discussed and concluded that the style is to always use g* types for
&gt; out parameters. Even though in several cases like gint and gchar it&apos;s
&gt; obvious they are the same as int and char, I still use the g* types
&gt; for out-params for consistency, and favour explicit static_cast&apos;ing to
&gt; be on the safe side.

Ok.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:857
&gt; &gt; &gt; +    GstState state;
&gt; &gt; &gt; +    GstState pending;
&gt; 
&gt; Done.

Did you miss this one?

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1008
&gt; &gt; &gt; +    gint64 length = 0;
&gt; 
&gt; Because this is an out-parameter of gst_element_query_duration, I have kept
&gt; it as-is, and use an explicit static_cast&lt;uint64_t&gt; to assign to
&gt; m_totalBytes (which has been changed to be a uint64_t rather than unsigned
&gt; long long.

I cannot find this change.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1017
&gt; &gt; &gt; +    // Fall back to querying the source pads manually.
&gt; &gt; &gt; +    // See also https://bugzilla.gnome.org/show_bug.cgi?id=638749
&gt; 
&gt; Changed to a single line, but not assing a period since it forms a invalid
&gt; URL.

I don&apos;t think forming an invalid URL is a problem here, but I am going to buy it.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1173
&gt; &gt; &gt; +    GstState currentState;
&gt; &gt; &gt; +    GstState pending;
&gt; 
&gt; Done.

Can&apos;t find this one either.
 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1252
&gt; &gt; &gt; +    gint numTracks = 0;
&gt; 
&gt; Done, it&apos;s kinda an out-parameter (from g_object_get &quot;n-video&quot;), but it
&gt; seems fine to use the standard int in this case.

It strikes that you flipped it unsigned even when the API says it is integer, though range seems to be positive range for a signed integer. I don&apos;t see this a big issue so I let you decide int or unsigned.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1275
&gt; &gt; &gt; +    for (gint i = 0; i &lt; numTracks; ++i) {
&gt; 
&gt; Done.

Ditto.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1330
&gt; &gt; &gt; +    gint numTracks = 0;
&gt; 
&gt; Done.

Ditto.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1349
&gt; &gt; &gt; +    for (gint i = 0; i &lt; numTracks; ++i) {
&gt; 
&gt; Done.

Ditto.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1385
&gt; &gt; &gt; +void MediaPlayerPrivateGStreamer::notifyPlayerOfText()
&gt; &gt; 
&gt; &gt; Are these three functions almost the same? Wouldn&apos;t it make sense to use
&gt; &gt; some templating magic here if possible?
&gt; 
&gt; There is a lot of duplication, I&apos;ll do that in a follow up since it&apos;s
&gt; easier to break a test with this change.

Ok. Please open the bug then.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1392
&gt; &gt; &gt; +    gint numTracks = 0;
&gt; 
&gt; Done.

Ditto.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1405
&gt; &gt; &gt; +    for (gint i = 0; i &lt; numTracks; ++i) {
&gt; 
&gt; Done.

Ditto.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1670
&gt; &gt; &gt; +        // TODO: MSE GstStream API support: https://bugs.webkit.org/show_bug.cgi?id=182531
&gt; 
&gt; Invalid URL.

Ditto.
 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1993
&gt; &gt; &gt; +    // TODO: handle possible clean aperture data. See
&gt; &gt; &gt; +    // https://bugzilla.gnome.org/show_bug.cgi?id=596571
&gt; &gt; &gt; +    // TODO: handle possible transformation matrix. See
&gt; &gt; &gt; +    // https://bugzilla.gnome.org/show_bug.cgi?id=596326
&gt; &gt; 
&gt; &gt; Two lines, periods.
&gt; 
&gt; Two lines, no periods.

Lol

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2703
&gt; &gt; &gt; +    GstState pending;
&gt; &gt; &gt; +    GstState state;
&gt; 
&gt; Done.

This I saw, but not the other two appearances...
 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3636
&gt; &gt; &gt; +    gboolean result = TRUE;
&gt; &gt; 
&gt; &gt; bool result = true;
&gt; 
&gt; Done.

TRUE -&gt; true.

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:213
&gt; &gt; &gt; +    unsigned decodedFrameCount() const override;
&gt; &gt; 
&gt; &gt; As an example, could you please check all overrides here against the MSE
&gt; &gt; player and make final here the ones that do not appear there?
&gt; 
&gt; TODO.

Alright, please file bug then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594071</commentid>
    <comment_count>4</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-28 10:03:52 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #3)
&gt; (In reply to Charlie Turner from comment #2)
&gt;  
&gt; &gt; I am skipping all the GL related code since Phil has a patch to
&gt; &gt; refactor all that in-review.
&gt; &gt; 
&gt; &gt; A lot of the g* types to C++ types I have also kept. Since we
&gt; &gt; discussed and concluded that the style is to always use g* types for
&gt; &gt; out parameters. Even though in several cases like gint and gchar it&apos;s
&gt; &gt; obvious they are the same as int and char, I still use the g* types
&gt; &gt; for out-params for consistency, and favour explicit static_cast&apos;ing to
&gt; &gt; be on the safe side.
&gt; 
&gt; Ok.
&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:857
&gt; &gt; &gt; &gt; +    GstState state;
&gt; &gt; &gt; &gt; +    GstState pending;
&gt; &gt; 
&gt; &gt; Done.
&gt; 
&gt; Did you miss this one?

Fixed the remaining cases of this.
&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1008
&gt; &gt; &gt; &gt; +    gint64 length = 0;
&gt; &gt; 
&gt; &gt; Because this is an out-parameter of gst_element_query_duration, I have kept
&gt; &gt; it as-is, and use an explicit static_cast&lt;uint64_t&gt; to assign to
&gt; &gt; m_totalBytes (which has been changed to be a uint64_t rather than unsigned
&gt; &gt; long long.
&gt; 
&gt; I cannot find this change.

That was out-of-date, I initially changed it to uint64_t, but actually higher layers require unsigned long long.

&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1017
&gt; &gt; &gt; &gt; +    // Fall back to querying the source pads manually.
&gt; &gt; &gt; &gt; +    // See also https://bugzilla.gnome.org/show_bug.cgi?id=638749
&gt; &gt; 
&gt; &gt; Changed to a single line, but not assing a period since it forms a invalid
&gt; &gt; URL.
&gt; 
&gt; I don&apos;t think forming an invalid URL is a problem here, but I am going to
&gt; buy it.

My editor includes the period at the end of a URL and takes me to an invalid place. I&apos;ll leave them off.
&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1173
&gt; &gt; &gt; &gt; +    GstState currentState;
&gt; &gt; &gt; &gt; +    GstState pending;
&gt; &gt; 
&gt; &gt; Done.
&gt; 
&gt; Can&apos;t find this one either.

Think I got these all now.
&gt;  
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1252
&gt; &gt; &gt; &gt; +    gint numTracks = 0;
&gt; &gt; 
&gt; &gt; Done, it&apos;s kinda an out-parameter (from g_object_get &quot;n-video&quot;), but it
&gt; &gt; seems fine to use the standard int in this case.
&gt; 
&gt; It strikes that you flipped it unsigned even when the API says it is
&gt; integer, though range seems to be positive range for a signed integer. I
&gt; don&apos;t see this a big issue so I let you decide int or unsigned.

I kept it unsigned so that we don&apos;t get warnings comparing to the Vector::size() method later on. Since these functions will be getting refactored later, we can leave it as is.


Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1385
&gt; &gt; &gt; &gt; +void MediaPlayerPrivateGStreamer::notifyPlayerOfText()
&gt; &gt; &gt; 
&gt; &gt; &gt; Are these three functions almost the same? Wouldn&apos;t it make sense to use
&gt; &gt; &gt; some templating magic here if possible?
&gt; &gt; 
&gt; &gt; There is a lot of duplication, I&apos;ll do that in a follow up since it&apos;s
&gt; &gt; easier to break a test with this change.
&gt; 
&gt; Ok. Please open the bug then.

https://bugs.webkit.org/show_bug.cgi?id=204686


&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3636
&gt; &gt; &gt; &gt; +    gboolean result = TRUE;
&gt; &gt; &gt; 
&gt; &gt; &gt; bool result = true;
&gt; &gt; 
&gt; &gt; Done.
&gt; 
&gt; TRUE -&gt; true.

This has left us after the GLsink bin.
&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:213
&gt; &gt; &gt; &gt; +    unsigned decodedFrameCount() const override;
&gt; &gt; &gt; 
&gt; &gt; &gt; As an example, could you please check all overrides here against the MSE
&gt; &gt; &gt; player and make final here the ones that do not appear there?
&gt; &gt; 
&gt; &gt; TODO.
&gt; 
&gt; Alright, please file bug then.

Actually, I did this in this patch in the end, it was not as much work as I thought.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594072</commentid>
    <comment_count>5</comment_count>
      <attachid>384461</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-28 10:07:06 -0800</bug_when>
    <thetext>Created attachment 384461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594143</commentid>
    <comment_count>6</comment_count>
      <attachid>384461</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-11-29 00:42:35 -0800</bug_when>
    <thetext>Comment on attachment 384461
Patch

Really good! Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594153</commentid>
    <comment_count>7</comment_count>
      <attachid>384490</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-29 01:41:03 -0800</bug_when>
    <thetext>Created attachment 384490
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594157</commentid>
    <comment_count>8</comment_count>
      <attachid>384490</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-29 02:25:03 -0800</bug_when>
    <thetext>Comment on attachment 384490
Patch for landing

Clearing flags on attachment: 384490

Committed r252937: &lt;https://trac.webkit.org/changeset/252937&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594158</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-29 02:25:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594163</commentid>
    <comment_count>10</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-29 03:11:12 -0800</bug_when>
    <thetext>Reverted r252937 for reason:

broke GTK/WPE builds and most likely media track notification support

Committed r252938: &lt;https://trac.webkit.org/changeset/252938&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594165</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-29 03:24:35 -0800</bug_when>
    <thetext>Looks like a refactoring was started in this patch regarding track notifications, but was landed unfinished. It wasn&apos;t clear to me how to fix the build in a timely manner, hence the rollout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594218</commentid>
    <comment_count>12</comment_count>
      <attachid>384516</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-29 09:47:26 -0800</bug_when>
    <thetext>Created attachment 384516
Patch

Remove inadvertent diff from the working dir</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594244</commentid>
    <comment_count>13</comment_count>
      <attachid>384521</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-29 11:44:46 -0800</bug_when>
    <thetext>Created attachment 384521
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594245</commentid>
    <comment_count>14</comment_count>
      <attachid>384521</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-29 12:27:16 -0800</bug_when>
    <thetext>Comment on attachment 384521
Patch for landing

Clearing flags on attachment: 384521

Committed r252950: &lt;https://trac.webkit.org/changeset/252950&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594246</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-29 12:27:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384419</attachid>
            <date>2019-11-27 10:21:02 -0800</date>
            <delta_ts>2019-11-28 10:07:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204617-20191127182101.patch</filename>
            <type>text/plain</type>
            <size>71991</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODBkNzlkYzFiOGFkNmM5
ODMzZDk2NTNmZDI4YmZmNzVjNWFlYzY2Mi4uOTFlODU4YzViYjAyZjUxYTJlOTVjNTliYzlmN2Qx
NDRiYzg1ZDAyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDE5LTExLTI3ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgc3R5bGUgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDYxNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvbGxvdy11cCBjb21taXQgdG8gYnVn
IDIwNDM1MiBhZGRyZXNzaW5nIHN0eWxlIGlzc3VlcyBpbiB0aGUKKyAgICAgICAgZXhpc3Rpbmcg
Y29kZWJhc2UgKHNvbWUgb2YgdGhlLCBhdCBsZWFzdCkuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG9TZWVrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3Jt
RHVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFU
aW1lU2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5n
ZVBpcGVsaW5lU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9h
ZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnBsYXliYWNrUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5k
bGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dXBkYXRlQnVmZmVyaW5nU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc01wZWdUc1NlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50
cnkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphc3lu
Y1N0YXRlQ2hhbmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQ
bGF5QmluKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2Vs
UmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVv
U2lua0dMKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlVmlkZW9TaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZGVjb2RlZEZyYW1lQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF0dGVtcHRUb0RlY3J5
cHRXaXRoTG9jYWxJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2luZyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRG
b3JTZWVrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXhNZWRpYVRpbWVTZWVrYWJs
ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZUNsaWVudEdTdHJlYW1lck1TRTo6Zmx1c2gpOgorCiAyMDE5LTExLTI2ICB5b3Vlbm4gZmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBRdWV1aW5nIGEgdGFzayBpbiBFdmVu
dExvb3AgaXMgbm90IHdvcmtpbmcgd2l0aCBVc2VyTWVkaWFSZXF1ZXN0IGFsbG93IGNvbXBsZXRp
b24gaGFuZGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAppbmRleCA4NmUxY2FiMzA0ZTNhOTBkY2YzZGNjNmE1ZTNjNTc4ODM2Mzg1ZTUzLi5iMmEw
NjE1ZWZiYWNjMTdhMjcwMWEwNDkzMjFmMGNhMzRiZGE3ODMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
cHJlbG9hZDogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhtX3ByZWxvYWQpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6Ok5vbmUpIHsKICAg
ICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJEZWxheWluZyBsb2FkLiIpOwotICAg
ICAgICBtX2RlbGF5aW5nTG9hZCA9IHRydWU7CisgICAgICAgIG1faXNEZWxheWluZ0xvYWQgPSB0
cnVlOwogICAgIH0KIAogICAgIC8vIFJlc2V0IG5ldHdvcmsgYW5kIHJlYWR5IHN0YXRlcy4gVGhv
c2Ugd2lsbCBiZSBzZXQgcHJvcGVybHkgb25jZQpAQCAtNTQzLDEwICs1NDMsMTAgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nLCBjb25zdCBTdHJpbmcKICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwog
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKICAgICBtX3BsYXll
ci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9
IGZhbHNlOworICAgIG1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkID0gZmFsc2U7CiAgICAg
bV9oYXNUYWludGVkT3JpZ2luID0gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFtX2RlbGF5aW5n
TG9hZCkKKyAgICBpZiAoIW1faXNEZWxheWluZ0xvYWQpCiAgICAgICAgIGNvbW1pdExvYWQoKTsK
IH0KIApAQCAtNTgzLDcgKzU4Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojpsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSYgc3RyZWFtKQogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y29tbWl0TG9hZCgpCiB7Ci0gICAgQVNTRVJUKCFtX2RlbGF5aW5nTG9h
ZCk7CisgICAgQVNTRVJUKCFtX2lzRGVsYXlpbmdMb2FkKTsKICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJDb21taXR0aW5nIGxvYWQuIik7CiAKICAgICAvLyBHU3RyZWFtZXIgbmVl
ZHMgdG8gaGF2ZSB0aGUgcGlwZWxpbmUgc2V0IHRvIGEgcGF1c2VkIHN0YXRlIHRvCkBAIC02MDcs
OCArNjA3LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByZXBhcmVUb1Bs
YXkoKQogewogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlByZXBhcmUgdG8gcGxh
eSIpOwogICAgIG1fcHJlbG9hZCA9IE1lZGlhUGxheWVyOjpBdXRvOwotICAgIGlmIChtX2RlbGF5
aW5nTG9hZCkgewotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOworICAgIGlmIChtX2lz
RGVsYXlpbmdMb2FkKSB7CisgICAgICAgIG1faXNEZWxheWluZ0xvYWQgPSBmYWxzZTsKICAgICAg
ICAgY29tbWl0TG9hZCgpOwogICAgIH0KIH0KQEAgLTYxNiwxMyArNjE2LDEzIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KCkKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5KCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tSYXRlKSB7
Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSB0cnVlOworICAgICAgICBtX2lzUGxheWJh
Y2tSYXRlUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChj
aGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKSkgewogICAgICAgICBtX2lzRW5k
UmVhY2hlZCA9IGZhbHNlOwotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOworICAgICAg
ICBtX2lzRGVsYXlpbmdMb2FkID0gZmFsc2U7CiAgICAgICAgIG1fcHJlbG9hZCA9IE1lZGlhUGxh
eWVyOjpBdXRvOwogICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKICAgICAg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5Iik7CkBAIC02MzIsNyArNjMyLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXkoKQogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKQogewotICAgIG1fcGxheWJhY2tSYXRlUGF1
c2UgPSBmYWxzZTsKKyAgICBtX2lzUGxheWJhY2tSYXRlUGF1c2VkID0gZmFsc2U7CiAgICAgR3N0
U3RhdGUgY3VycmVudFN0YXRlLCBwZW5kaW5nU3RhdGU7CiAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nU3RhdGUsIDApOwog
ICAgIGlmIChjdXJyZW50U3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmdTdGF0ZSA8
PSBHU1RfU1RBVEVfUEFVU0VEKQpAQCAtNjU0LDcgKzY1NCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwYXVzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgeworICAgIGlmIChtX2lzUGxheWJh
Y2tSYXRlUGF1c2VkKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBs
YXliYWNrIHJhdGUgaXMgMCwgc2ltdWxhdGluZyBQQVVTRUQgc3RhdGUiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTY3MywxMiArNjczLDggQEAgYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCBy
YXRlLAogCiAgICAgaWYgKHJhdGUgPCAwKSB7CiAgICAgICAgIHN0YXJ0VGltZSA9IE1lZGlhVGlt
ZTo6emVyb1RpbWUoKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGF0IGJlZ2lubmluZyBvZiBtZWRp
YSwgc3RhcnQgZnJvbSB0aGUgZW5kIHRvCi0gICAgICAgIC8vIGF2b2lkIGltbWVkaWF0ZSBFT1Mu
Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAgICAg
ICAgIGVuZFRpbWUgPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBlbmRUaW1lID0gcG9zaXRpb247CisgICAgICAgIC8vIElmIHdlIGFyZSBhdCBiZWdpbm5p
bmcgb2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0byBhdm9pZCBpbW1lZGlhdGUgRU9TLgor
ICAgICAgICBlbmRUaW1lID0gcG9zaXRpb24gPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkgPyBkdXJh
dGlvbk1lZGlhVGltZSgpIDogcG9zaXRpb247CiAgICAgfQogCiAgICAgaWYgKCFyYXRlKQpAQCAt
NjkwLDEwICs2ODYsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG9TZWVr
KGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1lKQogewot
ICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZXJyb3JP
Y2N1cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNlZWsg
YXR0ZW1wdCB0byAlcyIsIHRvU3RyaW5nKG1lZGlhVGltZSkudXRmOCgpLmRhdGEoKSk7CkBAIC03
MTMsOSArNzA2LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNlZWsoY29u
c3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAKICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgIltTZWVrXSBzZWVraW5nIHRvICVzIiwgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7
CiAKLSAgICBpZiAobV9zZWVraW5nKSB7CisgICAgaWYgKG1faXNTZWVraW5nKSB7CiAgICAgICAg
IG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gdGltZTsKLSAgICAgICAgaWYgKG1fc2Vla0lzUGVu
ZGluZykgeworICAgICAgICBpZiAobV9pc1NlZWtQZW5kaW5nKSB7CiAgICAgICAgICAgICBtX3Nl
ZWtUaW1lID0gdGltZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNzI4LDEw
ICs3MjEsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNlZWsoY29uc3Qg
TWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGdl
dFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMgfHwgc3RhdGUgPCBHU1RfU1RB
VEVfUEFVU0VEIHx8IG1faXNFbmRSZWFjaGVkKSB7Ci0gICAgICAgIG1fc2Vla0lzUGVuZGluZyA9
IHRydWU7CisgICAgICAgIG1faXNTZWVrUGVuZGluZyA9IHRydWU7CiAgICAgICAgIGlmIChtX2lz
RW5kUmVhY2hlZCkgewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
W1NlZWtdIHJlc2V0IHBpcGVsaW5lIik7Ci0gICAgICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSB0
cnVlOworICAgICAgICAgICAgbV9zaG91bGRSZXNldFBpcGVsaW5lID0gdHJ1ZTsKICAgICAgICAg
ICAgIGlmICghY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKSkKICAgICAgICAg
ICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpFbXB0eSk7CiAgICAgICAgIH0KQEAg
LTc0MywyMCArNzM2LDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVr
KGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1lKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9z
ZWVraW5nID0gdHJ1ZTsKKyAgICBtX2lzU2Vla2luZyA9IHRydWU7CiAgICAgbV9zZWVrVGltZSA9
IHRpbWU7CiAgICAgbV9pc0VuZFJlYWNoZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiB7Ci0gICAgaWYgKCFtX2No
YW5naW5nUmF0ZSkKKyAgICBpZiAoIW1faXNDaGFuZ2luZ1JhdGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiU2V0IFJhdGUgdG8gJWYiLCBtX3Bs
YXliYWNrUmF0ZSk7CiAKICAgICAvLyBNdXRlIHRoZSBzb3VuZCBpZiB0aGUgcGxheWJhY2sgcmF0
ZSBpcyBuZWdhdGl2ZSBvciB0b28gZXh0cmVtZSBhbmQgYXVkaW8gcGl0Y2ggaXMgbm90IGFkanVz
dGVkLgotICAgIGJvb2wgbXV0ZSA9IG1fcGxheWJhY2tSYXRlIDw9IDAgfHwgKCFtX3ByZXNlcnZl
c1BpdGNoICYmIChtX3BsYXliYWNrUmF0ZSA8IDAuOCB8fCBtX3BsYXliYWNrUmF0ZSA+IDIpKTsK
KyAgICBib29sIG11dGUgPSBtX3BsYXliYWNrUmF0ZSA8PSAwIHx8ICghbV9zaG91bGRQcmVzZXJ2
ZVBpdGNoICYmIChtX3BsYXliYWNrUmF0ZSA8IDAuOCB8fCBtX3BsYXliYWNrUmF0ZSA+IDIpKTsK
IAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCBtdXRlID8gIk5lZWQgdG8gbXV0ZSBh
dWRpbyIgOiAiRG8gbm90IG5lZWQgdG8gbXV0ZSBhdWRpbyIpOwogCkBAIC03NjgsMTcgKzc2MSwx
NiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlUGxheWJhY2tSYXRl
KCkKICAgICAgICAgR1NUX0VSUk9SKCJTZXQgcmF0ZSB0byAlZiBmYWlsZWQiLCBtX3BsYXliYWNr
UmF0ZSk7CiAgICAgfQogCi0gICAgaWYgKG1fcGxheWJhY2tSYXRlUGF1c2UpIHsKLSAgICAgICAg
R3N0U3RhdGUgc3RhdGU7Ci0gICAgICAgIEdzdFN0YXRlIHBlbmRpbmc7CisgICAgaWYgKG1faXNQ
bGF5YmFja1JhdGVQYXVzZWQpIHsKKyAgICAgICAgR3N0U3RhdGUgc3RhdGUsIHBlbmRpbmc7CiAK
ICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwg
JnBlbmRpbmcsIDApOwogICAgICAgICBpZiAoc3RhdGUgIT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYg
cGVuZGluZyAhPSBHU1RfU1RBVEVfUExBWUlORykKICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5l
U3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgICAgICBtX3BsYXliYWNrUmF0ZVBhdXNlID0g
ZmFsc2U7CisgICAgICAgIG1faXNQbGF5YmFja1JhdGVQYXVzZWQgPSBmYWxzZTsKICAgICB9CiAK
LSAgICBtX2NoYW5naW5nUmF0ZSA9IGZhbHNlOworICAgIG1faXNDaGFuZ2luZ1JhdGUgPSBmYWxz
ZTsKICAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKIH0KIApAQCAtNzg3LDggKzc3OSw4IEBA
IE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24o
KSBjb25zdAogICAgIGlmICghbV9waXBlbGluZSkKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKTsKIAotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImVycm9y
T2NjdXJlZDogJXMsIHBpcGVsaW5lIHN0YXRlOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9y
T2NjdXJlZCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKEdTVF9TVEFURShtX3BpcGVsaW5l
LmdldCgpKSkpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICBHU1RfVFJBQ0VfT0JKRUNU
KHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBwaXBlbGluZSBzdGF0ZTogJXMiLCBib29s
Rm9yUHJpbnRpbmcobV9kaWRFcnJvck9jY3VyKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
R1NUX1NUQVRFKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikK
ICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKIAogICAgIC8vIFRoZSBk
dXJhdGlvbiBxdWVyeSB3b3VsZCBmYWlsIG9uIGEgbm90LXByZXJvbGxlZCBwaXBlbGluZS4KQEAg
LTgyMiwxMSArODE0LDExIEBAIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BpcGVs
aW5lIHx8IG1fZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9y
T2NjdXIpCiAgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAKLSAgICBH
U1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJzZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwg
Ym9vbEZvclByaW50aW5nKG1fc2Vla2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBpZiAobV9zZWVraW5nKQorICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxp
bmUoKSwgInNlZWtpbmc6ICVzLCBzZWVrVGltZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1Nl
ZWtpbmcpLCBtX3NlZWtUaW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1f
aXNTZWVraW5nKQogICAgICAgICByZXR1cm4gbV9zZWVrVGltZTsKIAogICAgIHJldHVybiBwbGF5
YmFja1Bvc2l0aW9uKCk7CkBAIC04MzQsMjEgKzgyNiwyMiBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKIAogdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKLSAgICAvLyBI
aWdoZXIgcmF0ZSBjYXVzZXMgY3Jhc2guCi0gICAgcmF0ZSA9IGNsYW1wVG8ocmF0ZSwgLTIwLjAs
IDIwLjApOworICAgIGZsb2F0IHJhdGVDbGFtcGVkID0gY2xhbXBUbyhyYXRlLCAtMjAuMCwgMjAu
MCk7CisgICAgaWYgKHJhdGVDbGFtcGVkICE9IHJhdGUpCisgICAgICAgIEdTVF9XQVJOSU5HKCJD
bGFtcGluZyBvcmlnaW5hbCByYXRlICglZikgdG8gWy0yMCwgMjBdICglZiksIGhpZ2hlciByYXRl
cyBjYXVzZSBjcmFzaGVzIiwgcmF0ZSwgcmF0ZUNsYW1wZWQpOwogCiAgICAgLy8gQXZvaWQgdXNl
bGVzcyBwbGF5YmFjayByYXRlIHVwZGF0ZS4KLSAgICBpZiAobV9wbGF5YmFja1JhdGUgPT0gcmF0
ZSkgewotICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIHRoYXQgdXBwZXIgbGF5ZXJzIHdlcmUgbm90
aWZpZWQgaWYgcmF0ZSB3YXMgc2V0CisgICAgaWYgKG1fcGxheWJhY2tSYXRlID09IHJhdGVDbGFt
cGVkKSB7CisgICAgICAgIC8vIEFuZCBtYWtlIHN1cmUgdGhhdCB1cHBlciBsYXllcnMgd2VyZSBu
b3RpZmllZCBpZiByYXRlIHdhcyBzZXQuCiAKLSAgICAgICAgaWYgKCFtX2NoYW5naW5nUmF0ZSAm
JiBtX3BsYXllci0+cmF0ZSgpICE9IG1fcGxheWJhY2tSYXRlKQorICAgICAgICBpZiAoIW1faXND
aGFuZ2luZ1JhdGUgJiYgbV9wbGF5ZXItPnJhdGUoKSAhPSBtX3BsYXliYWNrUmF0ZSkKICAgICAg
ICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKSB7Ci0gICAgICAgIC8vIG5vdGlmeSB1cHBlciBsYXll
cnMgdGhhdCB3ZSBjYW5ub3QgaGFuZGxlIHBhc3NlZCByYXRlLgotICAgICAgICBtX2NoYW5naW5n
UmF0ZSA9IGZhbHNlOworICAgICAgICAvLyBOb3RpZnkgdXBwZXIgbGF5ZXJzIHRoYXQgd2UgY2Fu
bm90IGhhbmRsZSBwYXNzZWQgcmF0ZS4KKyAgICAgICAgbV9pc0NoYW5naW5nUmF0ZSA9IGZhbHNl
OwogICAgICAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTg1NiwxNCArODQ5LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRSYXRlKGZsb2F0IHJhdGUpCiAgICAgR3N0U3RhdGUgc3RhdGU7CiAgICAgR3N0U3RhdGUg
cGVuZGluZzsKIAotICAgIG1fcGxheWJhY2tSYXRlID0gcmF0ZTsKLSAgICBtX2NoYW5naW5nUmF0
ZSA9IHRydWU7CisgICAgbV9wbGF5YmFja1JhdGUgPSByYXRlQ2xhbXBlZDsKKyAgICBtX2lzQ2hh
bmdpbmdSYXRlID0gdHJ1ZTsKIAogICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5l
LmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAwKTsKIAotICAgIGlmICghcmF0ZSkgewotICAgICAg
ICBtX2NoYW5naW5nUmF0ZSA9IGZhbHNlOwotICAgICAgICBtX3BsYXliYWNrUmF0ZVBhdXNlID0g
dHJ1ZTsKKyAgICBpZiAoIXJhdGVDbGFtcGVkKSB7CisgICAgICAgIG1faXNDaGFuZ2luZ1JhdGUg
PSBmYWxzZTsKKyAgICAgICAgbV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IHRydWU7CiAgICAgICAg
IGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmcgIT0gR1NUX1NUQVRFX1BB
VVNFRCkKICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTg4Myw3ICs4NzYsNyBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpyYXRlKCkgY29uc3QKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCiB7Ci0gICAg
bV9wcmVzZXJ2ZXNQaXRjaCA9IHByZXNlcnZlc1BpdGNoOworICAgIG1fc2hvdWxkUHJlc2VydmVQ
aXRjaCA9IHByZXNlcnZlc1BpdGNoOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQpAQCAtODk1LDgg
Kzg4OCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKE1l
ZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWQpCiAgICAgbV9wcmVsb2FkID0gcHJlbG9hZDsKICAg
ICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKIAotICAgIGlmIChtX2RlbGF5aW5nTG9h
ZCAmJiBtX3ByZWxvYWQgIT0gTWVkaWFQbGF5ZXI6Ok5vbmUpIHsKLSAgICAgICAgbV9kZWxheWlu
Z0xvYWQgPSBmYWxzZTsKKyAgICBpZiAobV9pc0RlbGF5aW5nTG9hZCAmJiBtX3ByZWxvYWQgIT0g
TWVkaWFQbGF5ZXI6Ok5vbmUpIHsKKyAgICAgICAgbV9pc0RlbGF5aW5nTG9hZCA9IGZhbHNlOwog
ICAgICAgICBjb21taXRMb2FkKCk7CiAgICAgfQogfQpAQCAtOTA0LDcgKzg5Nyw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVs
b2FkIHByZWxvYWQpCiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29uc3QKIHsKICAgICBhdXRvIHRpbWVS
YW5nZXMgPSBtYWtlVW5pcXVlPFBsYXRmb3JtVGltZVJhbmdlcz4oKTsKLSAgICBpZiAobV9lcnJv
ck9jY3VyZWQgfHwgaXNMaXZlU3RyZWFtKCkpCisgICAgaWYgKG1fZGlkRXJyb3JPY2N1ciB8fCBp
c0xpdmVTdHJlYW0oKSkKICAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7CiAKICAgICBNZWRpYVRp
bWUgbWVkaWFEdXJhdGlvbiA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7CkBAIC05MTYsOCArOTA5LDgg
QEAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpidWZmZXJlZCgpIGNvbnMKICAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5KG1f
cGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKSkKICAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7
CiAKLSAgICBndWludCBudW1CdWZmZXJpbmdSYW5nZXMgPSBnc3RfcXVlcnlfZ2V0X25fYnVmZmVy
aW5nX3JhbmdlcyhxdWVyeS5nZXQoKSk7Ci0gICAgZm9yIChndWludCBpbmRleCA9IDA7IGluZGV4
IDwgbnVtQnVmZmVyaW5nUmFuZ2VzOyBpbmRleCsrKSB7CisgICAgdW5zaWduZWQgbnVtQnVmZmVy
aW5nUmFuZ2VzID0gZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMocXVlcnkuZ2V0KCkp
OworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bUJ1ZmZlcmluZ1Jhbmdl
czsgaW5kZXgrKykgewogICAgICAgICBnaW50NjQgcmFuZ2VTdGFydCA9IDAsIHJhbmdlU3RvcCA9
IDA7CiAgICAgICAgIGlmIChnc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZShxdWVy
eS5nZXQoKSwgaW5kZXgsICZyYW5nZVN0YXJ0LCAmcmFuZ2VTdG9wKSkgewogICAgICAgICAgICAg
dWludDY0X3Qgc3RhcnRUaW1lID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCh0b0dz
dFVuc2lnbmVkNjRUaW1lKG1lZGlhRHVyYXRpb24pLCByYW5nZVN0YXJ0LCBHU1RfRk9STUFUX1BF
UkNFTlRfTUFYKTsKQEAgLTkyNiw4ICs5MTksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1U
aW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29ucwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gRmFsbGJhY2sgdG8gdGhlIG1vcmUgZ2VuZXJhbCBt
YXhUaW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzCi0gICAgLy8gYmVlbiBmb3VuZC4KKyAgICAv
LyBGYWxsYmFjayB0byB0aGUgbW9yZSBnZW5lcmFsIG1heFRpbWVMb2FkZWQoKSBpZiBubyByYW5n
ZSBoYXMgYmVlbiBmb3VuZC4KICAgICBpZiAoIXRpbWVSYW5nZXMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgIE1lZGlhVGltZSBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CiAgICAgICAgIGlmIChsb2Fk
ZWQuaXNWYWxpZCgpICYmIGxvYWRlZCkKQEAgLTkzOSw4ICs5MzEsOCBAQCBzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZl
cmVkKCkgY29ucwogCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhN
ZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGlu
ZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywgaXNMaXZlU3RyZWFtOiAlcyIsIGJvb2xGb3JQcmludGlu
ZyhtX2Vycm9yT2NjdXJlZCksIGJvb2xGb3JQcmludGluZyhpc0xpdmVTdHJlYW0oKSkpOwotICAg
IGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJl
cnJvck9jY3VyZWQ6ICVzLCBpc0xpdmVTdHJlYW06ICVzIiwgYm9vbEZvclByaW50aW5nKG1fZGlk
RXJyb3JPY2N1ciksIGJvb2xGb3JQcmludGluZyhpc0xpdmVTdHJlYW0oKSkpOworICAgIGlmICht
X2RpZEVycm9yT2NjdXIpCiAgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAK
ICAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCkBAIC05NDgsNyArOTQwLDcgQEAgTWVkaWFUaW1lIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdAog
CiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhNZWRpYVRpbWVTZWVrYWJsZSwgZHVyYXRpb246
ICVzIiwgdG9TdHJpbmcoZHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOwotICAgIC8vIGluZmluaXRl
IGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAgLy8gSW5maW5pdGUgZHVyYXRpb24gbWVh
bnMgbGl2ZSBzdHJlYW0uCiAgICAgaWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZpbml0ZSgpKQog
ICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCkBAIC05NTcsNyArOTQ5LDcg
QEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1lU2Vl
a2FibGUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpt
YXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQpCisgICAgaWYg
KG1fZGlkRXJyb3JPY2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsK
IAogICAgIE1lZGlhVGltZSBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7CkBAIC05NjksNyArOTYx
LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4VGltZUxvYWRl
ZCgpIGNvbnN0CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRMb2FkaW5n
UHJvZ3Jlc3MoKSBjb25zdAogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCB8fCBtX2xvYWRpbmdT
dGFsbGVkKQorICAgIGlmIChtX2RpZEVycm9yT2NjdXIgfHwgbV9sb2FkaW5nU3RhbGxlZCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNl
LmdldCgpKSkgewpAQCAtOTkyLDE4ICs5ODQsMTIgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0CiAKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25zdAogewotICAg
IGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICBpZiAobV9kaWRFcnJvck9jY3VyIHx8ICFtX3NvdXJj
ZSB8fCBpc0xpdmVTdHJlYW0oKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAobV90b3Rh
bEJ5dGVzKQogICAgICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwogCi0gICAgaWYgKCFtX3NvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCi0gICAgICAg
IHJldHVybiAwOwotCiAgICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfQllURVM7CiAgICAg
Z2ludDY0IGxlbmd0aCA9IDA7CiAgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1f
c291cmNlLmdldCgpLCBmbXQsICZsZW5ndGgpKSB7CkBAIC0xMDEzLDggKzk5OSw3IEBAIHVuc2ln
bmVkIGxvbmcgbG9uZyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBj
b25zdAogICAgICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwogICAgIH0KIAotICAgIC8vIEZhbGwg
YmFjayB0byBxdWVyeWluZyB0aGUgc291cmNlIHBhZHMgbWFudWFsbHkuCi0gICAgLy8gU2VlIGFs
c28gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODc0OQorICAg
IC8vIEZhbGwgYmFjayB0byBxdWVyeWluZyB0aGUgc291cmNlIHBhZHMgbWFudWFsbHkuIFNlZSBh
bHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg3NDkKICAg
ICBHc3RJdGVyYXRvciogaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMobV9zb3Vy
Y2UuZ2V0KCkpOwogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgIHdoaWxlICghZG9uZSkgewpA
QCAtMTE5MiwxMyArMTE3NywxMCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkKICAgICBpZiAoY3VycmVudFN0
YXRlICE9IHBhdXNlZE9yUGxheWluZyAmJiBzZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hB
TkdFX0ZBSUxVUkUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIENyZWF0ZSBhIHRp
bWVyIHdoZW4gZW50ZXJpbmcgdGhlIFJFQURZIHN0YXRlIHNvIHRoYXQgd2UgY2FuIGZyZWUgcmVz
b3VyY2VzCi0gICAgLy8gaWYgd2Ugc3RheSBmb3IgdG9vIGxvbmcgb24gUkVBRFkuCi0gICAgLy8g
QWxzbyBsZXRzIHJlbW92ZSB0aGUgdGltZXIgaWYgd2UgcmVxdWVzdCBhIHN0YXRlIGNoYW5nZSBm
b3IgYW55IHN0YXRlIG90aGVyIHRoYW4gUkVBRFkuCi0gICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM1NAorICAgIC8vIENyZWF0ZSBhIHRp
bWVyIHdoZW4gZW50ZXJpbmcgdGhlIFJFQURZIHN0YXRlIHNvIHRoYXQgd2UgY2FuIGZyZWUgcmVz
b3VyY2VzIGlmIHdlIHN0YXkgZm9yIHRvbyBsb25nIG9uIFJFQURZLgorICAgIC8vIEFsc28gbGV0
cyByZW1vdmUgdGhlIHRpbWVyIGlmIHdlIHJlcXVlc3QgYSBzdGF0ZSBjaGFuZ2UgZm9yIGFueSBz
dGF0ZSBvdGhlciB0aGFuIFJFQURZLiBTZWUgYWxzbyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE3MzU0CiAgICAgaWYgKG5ld1N0YXRlID09IEdTVF9TVEFURV9SRUFE
WSAmJiAhbV9yZWFkeVRpbWVySGFuZGxlci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIC8vIE1heCBp
bnRlcnZhbCBpbiBzZWNvbmRzIHRvIHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1hbnVhbAot
ICAgICAgICAvLyBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMuCisgICAgICAgIC8vIE1heCBpbnRlcnZh
bCBpbiBzZWNvbmRzIHRvIHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1hbnVhbCBzdGF0ZSBj
aGFuZ2UgcmVxdWVzdHMuCiAgICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHJlYWR5U3RhdGVU
aW1lckRlbGF5IHsgMV9taW4gfTsKICAgICAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdGFydE9u
ZVNob3QocmVhZHlTdGF0ZVRpbWVyRGVsYXkpOwogICAgIH0gZWxzZSBpZiAobmV3U3RhdGUgIT0g
R1NUX1NUQVRFX1JFQURZKQpAQCAtMTI0OSw3ICsxMjMxLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQogCiAgICAgQVNTRVJUKG1faXNM
ZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7CiAKLSAgICBnaW50IG51bVRyYWNrcyA9
IDA7CisgICAgdW5zaWduZWQgbnVtVHJhY2tzID0gMDsKICAgICBib29sIHVzZU1lZGlhU291cmNl
ID0gaXNNZWRpYVNvdXJjZSgpOwogICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNv
dXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKICAgICBnX29iamVjdF9n
ZXQoZWxlbWVudCwgIm4tdmlkZW8iLCAmbnVtVHJhY2tzLCBudWxscHRyKTsKQEAgLTEyNzIsMTQg
KzEyNTQsMTQgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVmlkZW8oKQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIFZlY3RvcjxTdHJpbmc+
IHZhbGlkVmlkZW9TdHJlYW1zOwotICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsg
KytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7CiAg
ICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CiAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LXZpZGVvLXBhZCIsIGksICZwYWQub3V0UHRyKCksIG51
bGxwdHIpOwogICAgICAgICBBU1NFUlQocGFkKTsKIAogICAgICAgICBTdHJpbmcgc3RyZWFtSWQg
PSAiViIgKyBTdHJpbmc6Om51bWJlcihpKTsKICAgICAgICAgdmFsaWRWaWRlb1N0cmVhbXMuYXBw
ZW5kKHN0cmVhbUlkKTsKLSAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50PihtX3ZpZGVv
VHJhY2tzLnNpemUoKSkpIHsKKyAgICAgICAgaWYgKGkgPCBtX3ZpZGVvVHJhY2tzLnNpemUoKSkg
ewogICAgICAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGlu
Z1RyYWNrID0gbV92aWRlb1RyYWNrcy5nZXQoc3RyZWFtSWQpOwogICAgICAgICAgICAgaWYgKGV4
aXN0aW5nVHJhY2spIHsKICAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChp
KTsKQEAgLTEzMjcsNyArMTMwOSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKIAogICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8
fCBpc01lZGlhU291cmNlKCkpOwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOworICAgIHVuc2ln
bmVkIG51bVRyYWNrcyA9IDA7CiAgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3Vy
Y2UoKTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJj
ZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CiAgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJu
LWF1ZGlvIiwgJm51bVRyYWNrcywgbnVsbHB0cik7CkBAIC0xMzQ2LDE0ICsxMzI4LDE0IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKIAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZEF1ZGlvU3Ry
ZWFtczsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgeworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewogICAgICAgICBHUmVmUHRy
PEdzdFBhZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBlbGluZS5n
ZXQoKSwgImdldC1hdWRpby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKICAgICAg
ICAgQVNTRVJUKHBhZCk7CiAKICAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIkEiICsgU3RyaW5n
OjpudW1iZXIoaSk7CiAgICAgICAgIHZhbGlkQXVkaW9TdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7
Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV9hdWRpb1RyYWNrcy5zaXplKCkp
KSB7CisgICAgICAgIGlmIChpIDwgbV9hdWRpb1RyYWNrcy5zaXplKCkpIHsKICAgICAgICAgICAg
IFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fYXVk
aW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7
CiAgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CkBAIC0xMzg5LDcg
KzEzNzEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVy
T2ZUZXh0KCkKIAogICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNl
KCkpOwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOworICAgIHVuc2lnbmVkIG51bVRyYWNrcyA9
IDA7CiAgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKICAgICBHc3RF
bGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlw
ZWxpbmUuZ2V0KCk7CiAgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJuLXRleHQiLCAmbnVtVHJh
Y2tzLCBudWxscHRyKTsKQEAgLTE0MDIsNyArMTM4NCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQoKQogICAgIH0KIAogICAgIFZlY3RvcjxT
dHJpbmc+IHZhbGlkVGV4dFN0cmVhbXM7Ci0gICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJh
Y2tzOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kp
IHsKICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKICAgICAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQtdGV4dC1wYWQiLCBpLCAmcGFkLm91dFB0cigp
LCBudWxscHRyKTsKICAgICAgICAgQVNTRVJUKHBhZCk7CkBAIC0xNDE0LDcgKzEzOTYsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKICAg
ICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlQiICsgU3RyaW5nOjpudW1iZXIoaSk7CiAKICAgICAg
ICAgdmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwotICAgICAgICBpZiAoaSA8IHN0
YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkpKSB7CisgICAgICAgIGlmIChpIDwg
bV90ZXh0VHJhY2tzLnNpemUoKSkgewogICAgICAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFj
a1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX3RleHRUcmFja3MuZ2V0KHN0cmVh
bUlkKTsKICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7CiAgICAgICAgICAgICAgICAg
ZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CkBAIC0xNDY5LDcgKzE0NTEsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZSgpCiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmaWxsVGltZXJGaXJlZCgpCiB7Ci0gICAgaWYgKG1fZXJy
b3JPY2N1cmVkKSB7CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikgewogICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBBbiBlcnJvciBvY2N1cnJlZCwgZGlz
YWJsaW5nIHRoZSBmaWxsIHRpbWVyIik7CiAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTUxMSw3ICsxNDkzLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3
b3IKIHsKICAgICBHU1RfV0FSTklORygiTG9hZGluZyBmYWlsZWQsIGVycm9yOiAlcyIsIGNvbnZl
cnRFbnVtZXJhdGlvblRvU3RyaW5nKG5ldHdvcmtFcnJvcikudXRmOCgpLmRhdGEoKSk7CiAKLSAg
ICBtX2Vycm9yT2NjdXJlZCA9IHRydWU7CisgICAgbV9kaWRFcnJvck9jY3VyID0gdHJ1ZTsKICAg
ICBpZiAoZm9yY2VOb3RpZmljYXRpb25zIHx8IG1fbmV0d29ya1N0YXRlICE9IG5ldHdvcmtFcnJv
cikgewogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IG5ldHdvcmtFcnJvcjsKICAgICAgICAgbV9w
bGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKQEAgLTE1NTQsOCArMTUzNiw4IEBAIEdzdEVs
ZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9TaW5rKCkgY29uc3QKIAog
TWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigp
IGNvbnN0CiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiaXNFbmRSZWFjaGVk
OiAlcywgc2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lzRW5k
UmVhY2hlZCksIGJvb2xGb3JQcmludGluZyhtX3NlZWtpbmcpLCBtX3NlZWtUaW1lLnRvU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIG1fc2Vla2luZykK
KyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJpc0VuZFJlYWNoZWQ6ICVzLCBzZWVr
aW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNFbmRSZWFjaGVkKSwg
Ym9vbEZvclByaW50aW5nKG1faXNTZWVraW5nKSwgbV9zZWVrVGltZS50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGlmIChtX2lzRW5kUmVhY2hlZCAmJiBtX2lzU2Vla2luZykKICAgICAg
ICAgcmV0dXJuIG1fc2Vla1RpbWU7CiAKICAgICAvLyBUaGlzIGNvbnN0YW50IHNob3VsZCByZW1h
aW4gbG93ZXIgdGhhbiBIVE1MTWVkaWFFbGVtZW50J3MgbWF4VGltZXVwZGF0ZUV2ZW50RnJlcXVl
bmN5LgpAQCAtMTU3NSwxMCArMTU1NywxMSBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uKCkgY29uc3QKICAgICAgICAgZ3N0X3F1ZXJ5X3Bh
cnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwogICAgIGdzdF9xdWVyeV91bnJlZihx
dWVyeSk7CiAKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJQb3NpdGlvbiAlIiBH
U1RfVElNRV9GT1JNQVQgIiwgY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbjog
JXMiLCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSwgYm9vbEZvclByaW50aW5nKG1fY2FuRmFsbEJh
Y2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbikpOworICAgIEdzdENsb2NrVGltZSBnc3RyZWFt
ZXJQb3NpdGlvbiA9IHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4ocG9zaXRpb24pOworICAgIEdT
VF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgIlBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCAi
LCBjYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uOiAlcyIsIEdTVF9USU1FX0FS
R1MoZ3N0cmVhbWVyUG9zaXRpb24pLCBib29sRm9yUHJpbnRpbmcobV9jYW5GYWxsQmFja1RvTGFz
dEZpbmlzaGVkU2Vla1Bvc2l0aW9uKSk7CiAKICAgICBNZWRpYVRpbWUgcGxheWJhY2tQb3NpdGlv
biA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICBHc3RDbG9ja1RpbWUgZ3N0cmVhbWVyUG9z
aXRpb24gPSBzdGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKTsKKwogICAgIGlmIChH
U1RfQ0xPQ0tfVElNRV9JU19WQUxJRChnc3RyZWFtZXJQb3NpdGlvbikpCiAgICAgICAgIHBsYXli
YWNrUG9zaXRpb24gPSBNZWRpYVRpbWUoZ3N0cmVhbWVyUG9zaXRpb24sIEdTVF9TRUNPTkQpOwog
ICAgIGVsc2UgaWYgKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbikKQEAg
LTE2NTQsNiArMTYzNyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFi
bGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5CiAgICAgICAgICAgICBz
ZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VW5r
bm93bjoKKyAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTcwNSw3ICsxNjg5LDcgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcygpCiAgICAgICAgICAgICBHU1RfV0FS
TklORygiVW5rbm93biB0cmFjayB0eXBlIGZvdW5kIGZvciBzdHJlYW0gJXMiLCBzdHJlYW1JZC51
dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKLSAgICBpZiAoKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlk
ZW8pIHx8IChvbGRIYXNBdWRpbyAhPSBtX2hhc0F1ZGlvKSkKKyAgICBpZiAob2xkSGFzVmlkZW8g
IT0gbV9oYXNWaWRlbyB8fCBvbGRIYXNBdWRpbyAhPSBtX2hhc0F1ZGlvKQogICAgICAgICBtX3Bs
YXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7CiAKICAgICBpZiAobV9oYXNWaWRlbykKQEAg
LTE3NjUsNyArMTc0OSw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5k
bGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBjb25zdCBnY2hhciogY29udGV4dFR5cGU7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2Vf
Y29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250ZXh0VHlwZSk7CisgICAgaWYgKCFnc3RfbWVzc2Fn
ZV9wYXJzZV9jb250ZXh0X3R5cGUobWVzc2FnZSwgJmNvbnRleHRUeXBlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkhhbmRs
aW5nICVzIG5lZWQtY29udGV4dCBtZXNzYWdlIGZvciAlcyIsIGNvbnRleHRUeXBlLCBHU1RfTUVT
U0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7CiAKICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlw
ZSwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FKSkgewpAQCAtMTgyNCw3
ICsxODEwLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNN
ZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3Nl
dChjb250ZXh0U3RydWN0dXJlLCAiZGVjcnlwdGlvbi1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5H
LCBwcmVmZXJyZWRLZXlTeXN0ZW1VdWlkLCBudWxscHRyKTsKICAgICAgICAgICAgIGdzdF9lbGVt
ZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSksIGNv
bnRleHQuZ2V0KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJD
RE0gaW5zdGFuY2Ugbm90IGluaXRpYWxpemFlZCIpOworICAgICAgICAgICAgR1NUX1dBUk5JTkco
IkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC0xOTQ5LDcgKzE5MzUsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKIH0KICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dM
KQogCi0vLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRlbworLy8gUmV0dXJucyB0aGUgc2l6
ZSBvZiB0aGUgdmlkZW8uCiBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpu
YXR1cmFsU2l6ZSgpIGNvbnN0CiB7CiAjaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCkBAIC0x
OTg3LDEwICsxOTczLDggQEAgRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bmF0dXJhbFNpemUoKSBjb25zdAogICAgIGlmICghY2FwcykKICAgICAgICAgcmV0dXJuIEZsb2F0
U2l6ZSgpOwogCi0gICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRh
dGEuIFNlZQotICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9p
ZD01OTY1NzEKLSAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUgdHJhbnNmb3JtYXRpb24gbWF0
cml4LiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTk2MzI2CisgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRh
dGEuIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NTcx
CisgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gU2Vl
IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYKIAogICAg
IC8vIEdldCB0aGUgdmlkZW8gUEFSIGFuZCBvcmlnaW5hbCBzaXplLCBpZiB0aGlzIGZhaWxzIHRo
ZQogICAgIC8vIHZpZGVvLXNpbmsgaGFzIGxpa2VseSBub3QgeWV0IG5lZ290aWF0ZWQgaXRzIGNh
cHMuCkBAIC0yMDAyLDcgKzE5ODYsNyBAQCBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
CiAgICAgLy8gV2hlbiB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgaWYgdGhlIHZpZGVv
IGlzIHRhZ2dlZCBhcyByb3RhdGVkIDkwIG9yIDI3MCBkZWdyZWVzLCBzd2FwIHdpZHRoIGFuZCBo
ZWlnaHQuCi0gICAgaWYgKG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgeworICAgIGlmICht
X2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpIHsKICAgICAgICAgaWYgKG1fdmlkZW9Tb3VyY2VP
cmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKQogICAgICAgICAgICAgb3JpZ2luYWxTaXpl
ID0gb3JpZ2luYWxTaXplLnRyYW5zcG9zZWRTaXplKCk7CiAgICAgfQpAQCAtMjAyMSwxOSArMjAw
NSwxOSBAQCBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6
ZSgpIGNvbnN0CiAgICAgZGlzcGxheUhlaWdodCAvPSBkaXNwbGF5QXNwZWN0UmF0aW9HQ0Q7CiAK
ICAgICAvLyBBcHBseSBEQVIgdG8gb3JpZ2luYWwgdmlkZW8gc2l6ZS4gVGhpcyBpcyB0aGUgc2Ft
ZSBiZWhhdmlvciBhcyBpbiB4dmltYWdlc2luaydzIHNldGNhcHMgZnVuY3Rpb24uCi0gICAgZ3Vp
bnQ2NCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAgdWludDY0X3Qgd2lkdGggPSAwLCBoZWln
aHQgPSAwOwogICAgIGlmICghKG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAlIGRpc3BsYXlIZWlnaHQp
KSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIktlZXBpbmcgdmlkZW8g
b3JpZ2luYWwgaGVpZ2h0Iik7CiAgICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxl
X2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7
Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIGhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKTsKICAgICB9IGVs
c2UgaWYgKCEob3JpZ2luYWxTaXplLndpZHRoKCkgJSBkaXNwbGF5V2lkdGgpKSB7CiAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgd2lk
dGgiKTsKICAgICAgICAgaGVpZ2h0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5h
bFNpemUud2lkdGgoKSwgZGlzcGxheUhlaWdodCwgZGlzcGxheVdpZHRoKTsKLSAgICAgICAgd2lk
dGggPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUud2lkdGgoKSk7CisgICAgICAg
IHdpZHRoID0gb3JpZ2luYWxTaXplLndpZHRoKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQXBwcm94aW1hdGluZyB3aGlsZSBrZWVwaW5nIG9y
aWdpbmFsIHZpZGVvIGhlaWdodCIpOwogICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9z
Y2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWln
aHQpOwotICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUu
aGVpZ2h0KCkpOworICAgICAgICBoZWlnaHQgPSBvcmlnaW5hbFNpemUuaGVpZ2h0KCk7CiAgICAg
fQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTmF0dXJhbCBzaXplOiAlIiBH
X0dVSU5UNjRfRk9STUFUICJ4JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2lkdGgsIGhlaWdodCk7CkBA
IC0yMTY3LDcgKzIxNTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFu
ZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVs
aW5lKCksICJNZXNzYWdlICVzIHJlY2VpdmVkIGZyb20gZWxlbWVudCAlcyIsIEdTVF9NRVNTQUdF
X1RZUEVfTkFNRShtZXNzYWdlKSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwogICAg
IHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgewogICAgIGNhc2UgR1NUX01FU1NB
R0VfRVJST1I6Ci0gICAgICAgIGlmIChtX3Jlc2V0UGlwZWxpbmUgfHwgIW1fbWlzc2luZ1BsdWdp
bkNhbGxiYWNrcy5pc0VtcHR5KCkgfHwgbV9lcnJvck9jY3VyZWQpCisgICAgICAgIGlmIChtX3No
b3VsZFJlc2V0UGlwZWxpbmUgfHwgIW1fbWlzc2luZ1BsdWdpbkNhbGxiYWNrcy5pc0VtcHR5KCkg
fHwgbV9kaWRFcnJvck9jY3VyKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGdzdF9tZXNz
YWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIub3V0UHRyKCksICZkZWJ1Zy5vdXRQdHIoKSk7
CiAgICAgICAgIEdTVF9FUlJPUigiRXJyb3IgJWQ6ICVzICh1cmw9JXMpIiwgZXJyLT5jb2RlLCBl
cnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjE4Miw5ICsy
MTY2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2Uo
R3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIu
Z2V0KCksIEdTVF9SRVNPVVJDRV9FUlJPUiwgR1NUX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCkp
CiAgICAgICAgICAgICBlcnJvciA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKICAgICAgICAg
ZWxzZSBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NU
X1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCkpIHsKLSAgICAgICAgICAgIC8vIExldCB0aGUg
bWVkaWFQbGF5ZXJDbGllbnQgaGFuZGxlIHRoZSBzdHJlYW0gZXJyb3IsIGluCi0gICAgICAgICAg
ICAvLyB0aGlzIGNhc2UgdGhlIEhUTUxNZWRpYUVsZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZAot
ICAgICAgICAgICAgLy8gZXZlbnQuCisgICAgICAgICAgICAvLyBMZXQgdGhlIG1lZGlhUGxheWVy
Q2xpZW50IGhhbmRsZSB0aGUgc3RyZWFtIGVycm9yLCBpbiB0aGlzIGNhc2UgdGhlIEhUTUxNZWRp
YUVsZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZCBldmVudC4KICAgICAgICAgICAgIEdTVF9FUlJP
UigiRGVjb2RlIGVycm9yLCBsZXQgdGhlIE1lZGlhIGVsZW1lbnQgZW1pdCBhIHN0YWxsZWQgZXZl
bnQuIik7CiAgICAgICAgICAgICBtX2xvYWRpbmdTdGFsbGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMjE5Nyw3ICsyMTc5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgaWYgKGF0
dGVtcHROZXh0TG9jYXRpb24pCiAgICAgICAgICAgICBpc3N1ZUVycm9yID0gIWxvYWROZXh0TG9j
YXRpb24oKTsKICAgICAgICAgaWYgKGlzc3VlRXJyb3IpIHsKLSAgICAgICAgICAgIG1fZXJyb3JP
Y2N1cmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZGlkRXJyb3JPY2N1ciA9IHRydWU7CiAgICAg
ICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gZXJyb3IpIHsKICAgICAgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IGVycm9yOwogICAgICAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3Jr
U3RhdGVDaGFuZ2VkKCk7CkBAIC0yMjA4LDEyICsyMTkwLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAg
ICAgIGRpZEVuZCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0FTWU5D
X0RPTkU6Ci0gICAgICAgIGlmICghbWVzc2FnZVNvdXJjZUlzUGxheWJpbiB8fCBtX2RlbGF5aW5n
TG9hZCkKKyAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5YmluIHx8IG1faXNEZWxheWlu
Z0xvYWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgYXN5bmNTdGF0ZUNoYW5nZURvbmUo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOiB7
Ci0gICAgICAgIGlmICghbWVzc2FnZVNvdXJjZUlzUGxheWJpbiB8fCBtX2RlbGF5aW5nTG9hZCkK
KyAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5YmluIHx8IG1faXNEZWxheWluZ0xvYWQp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CiAKQEAgLTI0NTMs
MTUgKzI0MzUsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZUJ1
ZmZlcmluZ1N0YXR1cyhHc3RCdWZmZXJpbmdNb2RlIG1vZGUsIGQKIHsKICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBtb2RlOiAlcywgc3RhdHVzOiAlZiUlIiwg
ZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JVRkZFUklOR19NT0RFLCBtb2RlKS5kYXRhKCksIHBlcmNl
bnRhZ2UpOwogCi0gICAgbV9kb3dubG9hZEZpbmlzaGVkID0gcGVyY2VudGFnZSA9PSAxMDA7Ci0g
ICAgbV9idWZmZXJpbmcgPSAhbV9kb3dubG9hZEZpbmlzaGVkOworICAgIG1fZGlkRG93bmxvYWRG
aW5pc2ggPSBwZXJjZW50YWdlID09IDEwMDsKKyAgICBtX2lzQnVmZmVyaW5nID0gIW1fZGlkRG93
bmxvYWRGaW5pc2g7CiAKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEdTVF9CVUZGRVJJ
TkdfU1RSRUFNOiB7CiAgICAgICAgIHVwZGF0ZU1heFRpbWVMb2FkZWQocGVyY2VudGFnZSk7CiAK
ICAgICAgICAgbV9idWZmZXJpbmdQZXJjZW50YWdlID0gcGVyY2VudGFnZTsKLSAgICAgICAgaWYg
KG1fZG93bmxvYWRGaW5pc2hlZCkKKyAgICAgICAgaWYgKG1fZGlkRG93bmxvYWRGaW5pc2gpCiAg
ICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKIAogICAgICAgICBicmVhazsKQEAgLTI0NzEsNyAr
MjQ1Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJp
bmdTdGF0dXMoR3N0QnVmZmVyaW5nTW9kZSBtb2RlLCBkCiAKICAgICAgICAgLy8gTWVkaWEgaXMg
bm93IGZ1bGx5IGxvYWRlZC4gSXQgd2lsbCBwbGF5IGV2ZW4gaWYgbmV0d29yayBjb25uZWN0aW9u
IGlzCiAgICAgICAgIC8vIGN1dC4gQnVmZmVyaW5nIGlzIGRvbmUsIHJlbW92ZSB0aGUgZmlsbCBz
b3VyY2UgZnJvbSB0aGUgbWFpbiBsb29wLgotICAgICAgICBpZiAobV9kb3dubG9hZEZpbmlzaGVk
KQorICAgICAgICBpZiAobV9kaWREb3dubG9hZEZpbmlzaCkKICAgICAgICAgICAgIG1fZmlsbFRp
bWVyLnN0b3AoKTsKIAogICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKQEAgLTI0OTEsNyArMjQ3Myw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzTXBlZ1RzU2VjdGlv
bihHc3RNcGVndHNTZWN0aW9uKiBzZWN0aW9uCiAgICAgaWYgKHNlY3Rpb24tPnNlY3Rpb25fdHlw
ZSA9PSBHU1RfTVBFR1RTX1NFQ1RJT05fUE1UKSB7CiAgICAgICAgIGNvbnN0IEdzdE1wZWd0c1BN
VCogcG10ID0gZ3N0X21wZWd0c19zZWN0aW9uX2dldF9wbXQoc2VjdGlvbik7CiAgICAgICAgIG1f
bWV0YWRhdGFUcmFja3MuY2xlYXIoKTsKLSAgICAgICAgZm9yIChndWludCBpID0gMDsgaSA8IHBt
dC0+c3RyZWFtcy0+bGVuOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEdzdE1wZWd0c1BN
VFN0cmVhbSogc3RyZWFtID0gc3RhdGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzUE1UU3RyZWFtKj4o
Z19wdHJfYXJyYXlfaW5kZXgocG10LT5zdHJlYW1zLCBpKSk7CiAgICAgICAgICAgICBpZiAoc3Ry
ZWFtLT5zdHJlYW1fdHlwZSA9PSAweDA1IHx8IHN0cmVhbS0+c3RyZWFtX3R5cGUgPj0gMHg4MCkg
ewogICAgICAgICAgICAgICAgIEF0b21TdHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc3RyZWFt
LT5waWQpOwpAQCAtMjUxMCw5ICsyNDkyLDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnByb2Nlc3NNcGVnVHNTZWN0aW9uKEdzdE1wZWd0c1NlY3Rpb24qIHNlY3Rpb24KICAg
ICAgICAgICAgICAgICAvLyBleHByZXNzZWQgaW4gaGV4YWRlY2ltYWwgdXNpbmcgdXBwZXJjYXNl
IEFTQ0lJIGhleCBkaWdpdHMuCiAgICAgICAgICAgICAgICAgU3RyaW5nIGluYmFuZE1ldGFkYXRh
VHJhY2tEaXNwYXRjaFR5cGU7CiAgICAgICAgICAgICAgICAgYXBwZW5kVW5zaWduZWRBc0hleEZp
eGVkU2l6ZShzdHJlYW0tPnN0cmVhbV90eXBlLCBpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hU
eXBlLCAyKTsKLSAgICAgICAgICAgICAgICBmb3IgKGd1aW50IGogPSAwOyBqIDwgc3RyZWFtLT5k
ZXNjcmlwdG9ycy0+bGVuOyArK2opIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlwdG9ycy0+bGVuOyArK2opIHsKICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR3N0TXBlZ3RzRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHN0YXRpY19jYXN0
PGNvbnN0IEdzdE1wZWd0c0Rlc2NyaXB0b3IqPihnX3B0cl9hcnJheV9pbmRleChzdHJlYW0tPmRl
c2NyaXB0b3JzLCBqKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoZ3VpbnQgayA9IDA7IGsg
PCBkZXNjcmlwdG9yLT5sZW5ndGg7ICsraykKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBrID0gMDsgayA8IGRlc2NyaXB0b3ItPmxlbmd0aDsgKytrKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGRlc2NyaXB0b3ItPmRhdGFba10sIGluYmFuZE1ldGFk
YXRhVHJhY2tEaXNwYXRjaFR5cGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB0cmFjay0+c2V0SW5CYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZShpbmJhbmRNZXRhZGF0
YVRyYWNrRGlzcGF0Y2hUeXBlKTsKQEAgLTI1NjIsMTAgKzI1NDQsMTIgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShHc3RUb2NF
bnRyeSogZW50cnkKIAogICAgIGdpbnQ2NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7CiAgICAgZ3N0
X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyhlbnRyeSwgJnN0YXJ0LCAmc3RvcCk7CisK
KyAgICB1aW50MzJfdCB0cnVuY2F0ZWRHc3RTZWNvbmQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
R1NUX1NFQ09ORCk7CiAgICAgaWYgKHN0YXJ0ICE9IC0xKQotICAgICAgICBjdWUtPnNldFN0YXJ0
VGltZShNZWRpYVRpbWUoc3RhcnQsIEdTVF9TRUNPTkQpKTsKKyAgICAgICAgY3VlLT5zZXRTdGFy
dFRpbWUoTWVkaWFUaW1lKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXJ0KSwgdHJ1bmNhdGVkR3N0
U2Vjb25kKSk7CiAgICAgaWYgKHN0b3AgIT0gLTEpCi0gICAgICAgIGN1ZS0+c2V0RW5kVGltZShN
ZWRpYVRpbWUoc3RvcCwgR1NUX1NFQ09ORCkpOworICAgICAgICBjdWUtPnNldEVuZFRpbWUoTWVk
aWFUaW1lKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0b3ApLCB0cnVuY2F0ZWRHc3RTZWNvbmQpKTsK
IAogICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdG9jX2VudHJ5X2dldF90YWdzKGVudHJ5KTsK
ICAgICBpZiAodGFncykgewpAQCAtMjY2MywxNSArMjY0NywxNSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VPbGREb3dubG9hZEZpbGVzKGNvbnN0IGNoYXIqIGRvd25s
b2FkRmlsZQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNo
YW5nZURvbmUoKQogewotICAgIGlmICghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkKKyAg
ICBpZiAoIW1fcGlwZWxpbmUgfHwgbV9kaWRFcnJvck9jY3VyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9zZWVraW5nKSB7Ci0gICAgICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpCisgICAg
aWYgKG1faXNTZWVraW5nKSB7CisgICAgICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpCiAgICAgICAg
ICAgICB1cGRhdGVTdGF0ZXMoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2Vla2VkIHRvICVzIiwgdG9TdHJpbmcobV9z
ZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsK
KyAgICAgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7CiAgICAgICAgICAgICBtX2NhY2hlZFBv
c2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogICAgICAgICAgICAgaWYgKG1fdGlt
ZU9mT3ZlcmxhcHBpbmdTZWVrICE9IG1fc2Vla1RpbWUgJiYgbV90aW1lT2ZPdmVybGFwcGluZ1Nl
ZWsuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgc2VlayhtX3RpbWVPZk92ZXJsYXBwaW5n
U2Vlayk7CkBAIC0yNjkxLDE2ICsyNjc1LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjphc3luY1N0YXRlQ2hhbmdlRG9uZSgpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9waXBlbGlu
ZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLSAgICBH
c3RTdGF0ZSBwZW5kaW5nOwotICAgIEdzdFN0YXRlIHN0YXRlOworICAgIEdzdFN0YXRlIHBlbmRp
bmcsIHN0YXRlOwogICAgIGJvb2wgc3RhdGVSZWFsbHlDaGFuZ2VkID0gZmFsc2U7CiAKICAgICBH
c3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0
ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7
CkBAIC0yNzIwLDkgKzI3MDAsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
dXBkYXRlU3RhdGVzKCkKICAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIG1fY3VycmVudFN0
YXRlID09IEdTVF9TVEFURV9SRUFEWSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1f
cmVzZXRQaXBlbGluZSA9IG1fY3VycmVudFN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWTsKKyAgICAg
ICAgbV9zaG91bGRSZXNldFBpcGVsaW5lID0gbV9jdXJyZW50U3RhdGUgPD0gR1NUX1NUQVRFX1JF
QURZOwogCi0gICAgICAgIGJvb2wgZGlkQnVmZmVyaW5nID0gbV9idWZmZXJpbmc7CisgICAgICAg
IGJvb2wgZGlkQnVmZmVyaW5nID0gbV9pc0J1ZmZlcmluZzsKIAogICAgICAgICAvLyBVcGRhdGUg
cmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgogICAgICAgICBzd2l0Y2ggKG1fY3VycmVudFN0YXRl
KSB7CkBAIC0yNzM2LDE3ICsyNzE2LDE3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR1NU
X1NUQVRFX1BBVVNFRDoKICAgICAgICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKLSAgICAgICAg
ICAgIGlmIChtX2J1ZmZlcmluZykgeworICAgICAgICAgICAgaWYgKG1faXNCdWZmZXJpbmcpIHsK
ICAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgewogICAg
ICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5n
XSBDb21wbGV0ZS4iKTsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXJpbmcgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgbV9pc0J1ZmZlcmluZyA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVkID8gTWVk
aWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBtX2RpZERvd25sb2FkRmluaXNoID8gTWVkaWFQbGF5ZXI6Oklk
bGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnRE
YXRhOwogICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpM
b2FkaW5nOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3du
bG9hZEZpbmlzaGVkKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZGlkRG93bmxvYWRGaW5p
c2gpIHsKICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVu
b3VnaERhdGE7CiAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGVkOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI3NjIsMjUgKzI3NDIsMjUgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAKICAgICAgICAg
Ly8gU3luYyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgogICAgICAgICBpZiAobV9jdXJyZW50U3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJ
bml0aWFsaXplZCkgeworICAgICAgICAgICAgaWYgKCFtX2FyZVZvbHVtZUFuZE11dGVJbml0aWFs
aXplZCkgewogICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CiAg
ICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgICAgICAgICAgICAgbV92
b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fYXJlVm9s
dW1lQW5kTXV0ZUluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKGRpZEJ1ZmZlcmluZyAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxh
eWJhY2tSYXRlKSB7CisgICAgICAgICAgICBpZiAoZGlkQnVmZmVyaW5nICYmICFtX2lzQnVmZmVy
aW5nICYmICFtX2lzUGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gUmVzdGFydGluZyBwbGF5
YmFjay4iKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9Q
TEFZSU5HKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRTdGF0
ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgewotICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKIAotICAgICAgICAgICAgaWYgKChtX2J1
ZmZlcmluZyAmJiAhaXNMaXZlU3RyZWFtKCkpIHx8ICFtX3BsYXliYWNrUmF0ZSkgeworICAgICAg
ICAgICAgaWYgKChtX2lzQnVmZmVyaW5nICYmICFpc0xpdmVTdHJlYW0oKSkgfHwgIW1fcGxheWJh
Y2tSYXRlKSB7CiAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
W0J1ZmZlcmluZ10gUGF1c2luZyBzdHJlYW0gZm9yIGJ1ZmZlcmluZy4iKTsKICAgICAgICAgICAg
ICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIG1faXNQYXVzZWQgPSB0cnVlOwogCiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIk9sZCBzdGF0ZTogJXMsIG5ldyBzdGF0ZTogJXMgKHJlcXVlc3RlZDogJXMpIiwgZ3N0
X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9vbGRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9yZXF1
ZXN0ZWRTdGF0ZSkpOwogICAgICAgICBpZiAobV9yZXF1ZXN0ZWRTdGF0ZSA9PSBHU1RfU1RBVEVf
UEFVU0VEICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKQEAgLTI4MDUs
NyArMjc4NSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0
ZXMoKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRToK
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRmFpbHVyZTogU3RhdGU6ICVz
LCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRl
KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotICAgICAgICAvLyBDaGFu
Z2UgZmFpbGVkCisgICAgICAgIC8vIENoYW5nZSBmYWlsZWQuCiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiTm8gcHJlcm9sbDogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUocGVuZGluZykpOwpAQCAtMjgxOCwxMSArMjc5OCwxMSBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKICAgICAgICAgZWxzZSBpZiAobV9j
dXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewogICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgICAgICAgICAgbV9wYXVzZWQg
PSB0cnVlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBp
ZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAgICAgICBtX3Bh
dXNlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwogCi0gICAgICAg
IGlmICghbV9wYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCisgICAgICAgIGlmICghbV9pc1BhdXNl
ZCAmJiBtX3BsYXliYWNrUmF0ZSkKICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NU
X1NUQVRFX1BMQVlJTkcpOwogCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6
OkxvYWRpbmc7CkBAIC0yODQ4LDExICsyODI4LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogCiAgICAgaWYgKGdldFN0YXRlUmVzdWx0ID09IEdT
VF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBtX2N1cnJlbnRTdGF0ZSA+PSBHU1RfU1RBVEVfUEFV
U0VEKSB7CiAgICAgICAgIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOwotICAgICAgICBpZiAobV9zZWVr
SXNQZW5kaW5nKSB7CisgICAgICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpIHsKICAgICAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBjb21taXR0aW5nIHBlbmRpbmcg
c2VlayB0byAlcyIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgbV9zZWVrSXNQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBtX3NlZWtpbmcgPSBk
b1NlZWsobV9zZWVrVGltZSwgbV9wbGF5ZXItPnJhdGUoKSwgc3RhdGljX2Nhc3Q8R3N0U2Vla0Zs
YWdzPihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSkpOwotICAg
ICAgICAgICAgaWYgKCFtX3NlZWtpbmcpIHsKKyAgICAgICAgICAgIG1faXNTZWVrUGVuZGluZyA9
IGZhbHNlOworICAgICAgICAgICAgbV9pc1NlZWtpbmcgPSBkb1NlZWsobV9zZWVrVGltZSwgbV9w
bGF5ZXItPnJhdGUoKSwgc3RhdGljX2Nhc3Q8R3N0U2Vla0ZsYWdzPihHU1RfU0VFS19GTEFHX0ZM
VVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSkpOworICAgICAgICAgICAgaWYgKCFtX2lzU2Vl
a2luZykgewogICAgICAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6Omlu
dmFsaWRUaW1lKCk7CiAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiW1NlZWtdIHNlZWtpbmcgdG8gJXMgZmFpbGVkIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgICAgICB9CkBAIC0yODg2LDcgKzI4NjYsNyBAQCBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRMb2NhdGlvbigpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEdWYWx1ZSogbG9jYXRpb25zID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfdmFsdWUobV9tZWRpYUxvY2F0aW9ucywgImxvY2F0aW9ucyIpOwotICAgIGNvbnN0IGdj
aGFyKiBuZXdMb2NhdGlvbiA9IG51bGxwdHI7CisgICAgY29uc3QgY2hhciogbmV3TG9jYXRpb24g
PSBudWxscHRyOwogCiAgICAgaWYgKCFsb2NhdGlvbnMpIHsKICAgICAgICAgLy8gRmFsbGJhY2sg
b24gbmV3LWxvY2F0aW9uIHN0cmluZy4KQEAgLTI5NDMsNyArMjkyMyw3IEBAIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKCkKICAgICAgICAgICAgIG1f
cGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogCiAgICAgICAgICAgICAvLyBSZXNldCBwaXBl
bGluZSBzdGF0ZS4KLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IHRydWU7CisgICAgICAg
ICAgICBtX3Nob3VsZFJlc2V0UGlwZWxpbmUgPSB0cnVlOwogCiAgICAgICAgICAgICBHc3RTdGF0
ZSBzdGF0ZTsKICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdl
dCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwpAQCAtMjk2OSw3ICsyOTQ5LDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCiAgICAgLy8gcG9zaXRpb24gaXMgbm90
IGFsd2F5cyByZXBvcnRlZCBhcyAwIGZvciBpbnN0YW5jZS4KICAgICBtX2NhY2hlZFBvc2l0aW9u
ID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogICAgIE1lZGlhVGltZSBub3cgPSBjdXJyZW50
TWVkaWFUaW1lKCk7Ci0gICAgaWYgKG5vdyA+IE1lZGlhVGltZTo6emVyb1RpbWUoKSAmJiAhbV9z
ZWVraW5nKSB7CisgICAgaWYgKG5vdyA+IE1lZGlhVGltZTo6emVyb1RpbWUoKSAmJiAhbV9pc1Nl
ZWtpbmcpIHsKICAgICAgICAgbV9jYWNoZWREdXJhdGlvbiA9IG5vdzsKICAgICAgICAgbV9wbGF5
ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwogICAgIH0KQEAgLTI5NzcsOSArMjk1Nyw5IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRFbmQoKQogICAgIG1faXNFbmRSZWFjaGVk
ID0gdHJ1ZTsKIAogICAgIGlmICghbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVySXNMb29w
aW5nKCkpIHsKLSAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICBtX2lzUGF1c2VkID0g
dHJ1ZTsKICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwotICAg
ICAgICBtX2Rvd25sb2FkRmluaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgbV9kaWREb3dubG9hZEZp
bmlzaCA9IGZhbHNlOwogICAgIH0KICAgICB0aW1lQ2hhbmdlZCgpOwogfQpAQCAtMzAzMiw3ICsz
MDEyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZURvd25sb2Fk
QnVmZmVyaW5nRmxhZygpCiAgICAgdW5zaWduZWQgZmxhZ0Rvd25sb2FkID0gZ2V0R3N0UGxheUZs
YWcoImRvd25sb2FkIik7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHN0b3AgZG93bmxvYWRp
bmcgaWYgd2UgYWxyZWFkeSBzdGFydGVkIGl0LgotICAgIGlmIChmbGFncyAmIGZsYWdEb3dubG9h
ZCAmJiBtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcgJiYgIW1fcmVzZXRQ
aXBlbGluZSkgeworICAgIGlmIChmbGFncyAmIGZsYWdEb3dubG9hZCAmJiBtX3JlYWR5U3RhdGUg
PiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcgJiYgIW1fc2hvdWxkUmVzZXRQaXBlbGluZSkgewog
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJEb3dubG9hZCBhbHJlYWR5IHN0
YXJ0ZWQsIG5vdCBzdGFydGluZyBhZ2FpbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MzA1MSw3ICszMDMxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0
ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBpcGVs
aW5lTmFtZSkKIHsKLSAgICBjb25zdCBnY2hhciogcGxheWJpbk5hbWUgPSAicGxheWJpbiI7Cisg
ICAgY29uc3QgY2hhciogcGxheWJpbk5hbWUgPSAicGxheWJpbiI7CiAKICAgICAvLyBNU0UgZG9l
c24ndCBzdXBwb3J0IHBsYXliaW4zLiBNZWRpYXN0cmVhbSByZXF1aXJlcyBwbGF5YmluMy4gUmVn
dWxhcgogICAgIC8vIHBsYXliYWNrIGNhbiB1c2UgcGxheWJpbjMgb24tZGVtYW5kIHdpdGggdGhl
IFdFQktJVF9HU1RfVVNFX1BMQVlCSU4zCkBAIC0zMDc0LDggKzMwNTQsNiBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJgogCiAgICAgbV9pc0xlZ2FjeVBsYXliaW4gPSAhZ19zdHJjbXAwKHBsYXli
aW5OYW1lLCAicGxheWJpbiIpOwogCi0gICAgLy8gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCkg
cmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbwotICAgIC8vIHdlIHNob3VsZCBub3QgYWRv
cHQuCiAgICAgc3RhdGljIEF0b21pYzx1aW50MzJfdD4gcGlwZWxpbmVJZDsKICAgICBzZXRQaXBl
bGluZShnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UocGxheWJpbk5hbWUsCiAgICAgICAgIChwaXBl
bGluZU5hbWUuaXNFbXB0eSgpID8gbWFrZVN0cmluZygibWVkaWEtcGxheWVyLSIsIHBpcGVsaW5l
SWQuZXhjaGFuZ2VBZGQoMSkpIDogcGlwZWxpbmVOYW1lKS51dGY4KCkuZGF0YSgpKSk7CkBAIC0z
MTQxLDcgKzMxMTksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
R1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJgogCiAgICAgY29uZmlndXJl
UGxheVNpbmsoKTsKIAotICAgIGlmIChtX3ByZXNlcnZlc1BpdGNoKSB7CisgICAgaWYgKG1fc2hv
dWxkUHJlc2VydmVQaXRjaCkgewogICAgICAgICBHc3RFbGVtZW50KiBzY2FsZSA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgic2NhbGV0ZW1wbyIsIG51bGxwdHIpOwogCiAgICAgICAgIGlmICgh
c2NhbGUpCkBAIC0zMTUwLDcgKzMxMjgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJgogICAg
ICAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1maWx0ZXIiLCBz
Y2FsZSwgbnVsbHB0cik7CiAgICAgfQogCi0gICAgaWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxl
cmF0ZWQpIHsKKyAgICBpZiAoIW1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCkgewogICAgICAg
ICAvLyBJZiBub3QgdXNpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcsIGxldCBHU3RyZWFtZXIg
aGFuZGxlCiAgICAgICAgIC8vIHRoZSBpbWFnZS1vcmllbnRhdGlvbiB0YWcuCiAgICAgICAgIEdz
dEVsZW1lbnQqIHZpZGVvRmxpcCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9mbGlw
IiwgbnVsbHB0cik7CkBAIC0zMTk1LDcgKzMxNzMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cmVhZHlUaW1lckZpcmVkKCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKIHsKLSAgICBtX3Jl
bmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQgPSBtX3BsYXllciAmJiBtX3BsYXllci0+Y2xpZW50KCku
bWVkaWFQbGF5ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpOworICAgIG1fY2FuUmVu
ZGVyaW5nQmVBY2NlbGVyYXRlZCA9IG1fcGxheWVyICYmIG1fcGxheWVyLT5jbGllbnQoKS5tZWRp
YVBsYXllckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7CiB9CiAKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCkBAIC0zMjQzLDcgKzMyMjEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKQogICAgICAgICAgICAgaWYg
KCFwcm94eS5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFr
ZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29k
ZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsICFtX3VzaW5nRmFsbGJhY2tWaWRlb1Np
bmspOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZy
YW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQo
KSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsICFtX2lzVXNp
bmdGYWxsYmFja1ZpZGVvU2luayk7CiAKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXI7CiAgICAgICAgICAgICBp
ZiAoZnJhbWVIb2xkZXItPmhhc01hcHBlZFRleHR1cmVzKCkpIHsKQEAgLTMyODUsMjMgKzMyNjMs
MjMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQoKQogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKiBz
YW1wbGUpCiB7Ci0gICAgYm9vbCB0cmlnZ2VyUmVzaXplOworICAgIGJvb2wgc2hvdWxkVHJpZ2dl
clJlc2l6ZTsKICAgICB7CiAgICAgICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9z
YW1wbGVNdXRleCk7Ci0gICAgICAgIHRyaWdnZXJSZXNpemUgPSAhbV9zYW1wbGU7CisgICAgICAg
IHNob3VsZFRyaWdnZXJSZXNpemUgPSAhbV9zYW1wbGU7CiAgICAgICAgIG1fc2FtcGxlID0gc2Ft
cGxlOwogICAgIH0KIAotICAgIGlmICh0cmlnZ2VyUmVzaXplKSB7CisgICAgaWYgKHNob3VsZFRy
aWdnZXJSZXNpemUpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRmly
c3Qgc2FtcGxlIHJlYWNoZWQgdGhlIHNpbmssIHRyaWdnZXJpbmcgdmlkZW8gZGltZW5zaW9ucyB1
cGRhdGUiKTsKICAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRp
b246OlNpemVDaGFuZ2VkLCBbdGhpc10gewogICAgICAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFu
Z2VkKCk7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFj
Y2VsZXJhdGVkKSB7CisgICAgaWYgKCFtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpIHsKICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kcmF3TXV0ZXgpOwotICAgICAgICBpZiAobV9kZXN0
cm95aW5nKQorICAgICAgICBpZiAobV9pc0JlaW5nRGVzdHJveWVkKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKICAgICAgICAgbV9k
cmF3Q29uZGl0aW9uLndhaXQobV9kcmF3TXV0ZXgpOwpAQCAtMzMwOSw3ICszMjg3LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSog
c2FtcGxlKQogICAgIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICBpZiAobV91
c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKSB7CisgICAgaWYgKG1faXNVc2luZ0ZhbGxiYWNrVmlkZW9T
aW5rKSB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2RyYXdNdXRleCk7CiAgICAgICAgIGF1
dG8gcHJveHlPcGVyYXRpb24gPQogICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHkmIHByb3h5KQpAQCAtMzM0NSwxMCArMzMyMywxMCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsUmVwYWludChib29sIGRlc3Ryb3lpbmcpCiAg
ICAgLy8KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCB3aGVuIGRlc3Ryb3lpbmcg
dGhlIHBsYXllciAoZGVzdHJveWluZyBwYXJhbWV0ZXIgaXMgdHJ1ZSksIHRvIHJlbGVhc2UgdGhl
IGdzdHJlYW1lciB0aHJlYWQgZnJvbQogICAgIC8vIG1fZHJhd0NvbmRpdGlvbiBhbmQgdG8gZW5z
dXJlIHRoYXQgbmV3IHRyaWdnZXJSZXBhaW50IGNhbGxzIHdvbid0IHdhaXQgb24gbV9kcmF3Q29u
ZGl0aW9uLgotICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKSB7CisgICAgaWYg
KCFtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9kcmF3TXV0ZXgpOwogICAgICAgICBtX2RyYXdUaW1lci5zdG9wKCk7Ci0gICAgICAgIG1f
ZGVzdHJveWluZyA9IGRlc3Ryb3lpbmc7CisgICAgICAgIG1faXNCZWluZ0Rlc3Ryb3llZCA9IGRl
c3Ryb3lpbmc7CiAgICAgICAgIG1fZHJhd0NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICB9CiB9
CkBAIC0zNDQ0LDkgKzM0MjIsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogICAgICAgICAg
ICAgbV9jb2xvckNvbnZlcnRJbnB1dENhcHMgPSBjYXBzOwogICAgICAgICAgICAgbV9jb2xvckNv
bnZlcnRPdXRwdXRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkoY2FwcykpOwogI2lmIEdf
QllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBm
b3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdC
QSIgOiAiQkdSeCI7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1Rf
VklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiQkdSeCI7CiAjZWxz
ZQotICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZvcm1hdFN0cmluZyA9IEdTVF9WSURFT19JTkZP
X0hBU19BTFBIQSgmdmlkZW9JbmZvKSA/ICJSR0JBIiA6ICJSR0J4IjsKKyAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGZvcm1hdFN0cmluZyA9IEdTVF9WSURFT19JTkZPX0hBU19BTFBIQSgmdmlkZW9J
bmZvKSA/ICJSR0JBIiA6ICJSR0J4IjsKICNlbmRpZgogICAgICAgICAgICAgZ3N0X2NhcHNfc2V0
X3NpbXBsZShtX2NvbG9yQ29udmVydE91dHB1dENhcHMuZ2V0KCksICJmb3JtYXQiLCBHX1RZUEVf
U1RSSU5HLCBmb3JtYXRTdHJpbmcsIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKCFnc3RfZ2xf
Y29sb3JfY29udmVydF9zZXRfY2FwcyhtX2NvbG9yQ29udmVydC5nZXQoKSwgY2FwcywgbV9jb2xv
ckNvbnZlcnRPdXRwdXRDYXBzLmdldCgpKSkKQEAgLTM0NjcsNyArMzQ0NSw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKCFnc3RJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29udGV4dC5kcmF3SW1hZ2UoZ3N0SW1hZ2UtPmltYWdlKCksIHJlY3QsIGdzdEltYWdlLT5y
ZWN0KCksIHsgQ29tcG9zaXRlQ29weSwgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkID8gbV92
aWRlb1NvdXJjZU9yaWVudGF0aW9uIDogSW1hZ2VPcmllbnRhdGlvbigpIH0pOworICAgIGNvbnRl
eHQuZHJhd0ltYWdlKGdzdEltYWdlLT5pbWFnZSgpLCByZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7
IENvbXBvc2l0ZUNvcHksIG1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3Vy
Y2VPcmllbnRhdGlvbiA6IEltYWdlT3JpZW50YXRpb24oKSB9KTsKIH0KIAogI2lmIFVTRShHU1RS
RUFNRVJfR0wpCkBAIC0zNDc1LDcgKzM0NTMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udAog
ewogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKIAotICAgIGlmIChtX3VzaW5nRmFsbGJhY2tW
aWRlb1NpbmspCisgICAgaWYgKG1faXNVc2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKQEAgLTM1MDcsNyArMzQ4
NSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb3B5VmlkZW9UZXh0dXJl
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250CiBOYXRpdmVJbWFnZVB0ciBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6Om5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKQogewogI2lmIFVT
RShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAobV91c2lu
Z0ZhbGxiYWNrVmlkZW9TaW5rKQorICAgIGlmIChtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luaykK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRM
b2NrKG1fc2FtcGxlTXV0ZXgpOwpAQCAtMzYzMyw3ICszNjExLDcgQEAgR3N0RWxlbWVudCogTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHTEFwcFNpbmsoKQogCiBHc3RFbGVtZW50
KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2lua0dMKCkKIHsKLSAg
ICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOworICAgIGJvb2wgcmVzdWx0ID0gVFJVRTsKICAgICBH
c3RFbGVtZW50KiB2aWRlb1NpbmsgPSBnc3RfYmluX25ldyhudWxscHRyKTsKICAgICBHc3RFbGVt
ZW50KiB1cGxvYWQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2FkIiwgbnVsbHB0
cik7CiAgICAgR3N0RWxlbWVudCogY29sb3Jjb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJnbGNvbG9yY29udmVydCIsIG51bGxwdHIpOwpAQCAtMzc2NywxMiArMzc0NSwxMiBAQCBH
c3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luaygp
CiAjZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgaWYgKG1fcmVuZGVyaW5nQ2Fu
QmVBY2NlbGVyYXRlZCkKKyAgICBpZiAobV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKQogICAg
ICAgICBtX3ZpZGVvU2luayA9IGNyZWF0ZVZpZGVvU2lua0dMKCk7CiAjZW5kaWYKIAogICAgIGlm
ICghbV92aWRlb1NpbmspIHsKLSAgICAgICAgbV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rID0gdHJ1
ZTsKKyAgICAgICAgbV9pc1VzaW5nRmFsbGJhY2tWaWRlb1NpbmsgPSB0cnVlOwogICAgICAgICBt
X3ZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05ldygpOwogICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FM
TEJBQ0socmVwYWludENhbGxiYWNrKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX3ZpZGVvU2luay5nZXQoKSwgInJlcGFpbnQtY2FuY2VsbGVkIiwgR19DQUxMQkFD
SyhyZXBhaW50Q2FuY2VsbGVkQ2FsbGJhY2spLCB0aGlzKTsKQEAgLTM4MjYsNyArMzgwNCw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRTdHJlYW1Wb2x1bWVFbGVtZW50
KEdzdFN0cmVhbVZvbHVtZSogdm9sdW1lCiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdAogewotICAgIGd1aW50NjQgZGVjb2Rl
ZEZyYW1lcyA9IDA7CisgICAgdWludDY0X3QgZGVjb2RlZEZyYW1lcyA9IDA7CiAgICAgaWYgKG1f
ZnBzU2luaykKICAgICAgICAgZ19vYmplY3RfZ2V0KG1fZnBzU2luay5nZXQoKSwgImZyYW1lcy1y
ZW5kZXJlZCIsICZkZWNvZGVkRnJhbWVzLCBudWxscHRyKTsKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGRlY29kZWRGcmFtZXMpOwpAQCAtMzgzNCw3ICszODEyLDcgQEAgdW5zaWdu
ZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0
CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHJvcHBlZEZyYW1lQ291
bnQoKSBjb25zdAogewotICAgIGd1aW50NjQgZnJhbWVzRHJvcHBlZCA9IDA7CisgICAgdWludDY0
X3QgZnJhbWVzRHJvcHBlZCA9IDA7CiAgICAgaWYgKG1fZnBzU2luaykKICAgICAgICAgZ19vYmpl
Y3RfZ2V0KG1fZnBzU2luay5nZXQoKSwgImZyYW1lcy1kcm9wcGVkIiwgJmZyYW1lc0Ryb3BwZWQs
IG51bGxwdHIpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWVzRHJvcHBl
ZCk7CkBAIC0zOTMyLDggKzM5MTAsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYgaW5zdAogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbElu
c3RhbmNlKCkKIHsKLSAgICBib29sIGV2ZW50SGFuZGxlZCA9IGdzdF9lbGVtZW50X3NlbmRfZXZl
bnQocGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25ld19jdXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dO
U1RSRUFNX09PQiwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImF0dGVtcHQtdG8tZGVjcnlwdCIp
KSk7Ci0gICAgR1NUX0RFQlVHKCJhdHRlbXB0aW5nIHRvIGRlY3J5cHQsIGV2ZW50IGhhbmRsZWQg
JXMiLCBib29sRm9yUHJpbnRpbmcoZXZlbnRIYW5kbGVkKSk7CisgICAgYm9vbCB3YXNFdmVudEhh
bmRsZWQgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KHBpcGVsaW5lKCksIGdzdF9ldmVudF9uZXdf
Y3VzdG9tKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0IsIGdzdF9zdHJ1Y3R1cmVfbmV3
X2VtcHR5KCJhdHRlbXB0LXRvLWRlY3J5cHQiKSkpOworICAgIEdTVF9ERUJVRygiYXR0ZW1wdGlu
ZyB0byBkZWNyeXB0LCBldmVudCBoYW5kbGVkICVzIiwgYm9vbEZvclByaW50aW5nKHdhc0V2ZW50
SGFuZGxlZCkpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
UHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKQEAgLTM5NTIsMTUgKzM5MzAsMTUgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVByb3RlY3Rpb25FdmVudChH
c3RFdmVudCogZXZlbnQpCiAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoe2V2ZW50
S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkoYm9vbCB3YWl0aW5nRm9yS2V5KQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkoYm9vbCBpc1dhaXRpbmdG
b3JLZXkpCiB7CiAgICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVzIGRpZCBub3QgY2hhbmdlIG9y
IGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9yZSBidXQgdGhlcmUgYXJlIHN0
aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0UoIndhaXRpbmdGb3JLZXkgJXMs
IG1fd2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGluZyh3YWl0aW5nRm9yS2V5KSwgYm9v
bEZvclByaW50aW5nKG1fd2FpdGluZ0ZvcktleSkpOwotICAgIGlmICh3YWl0aW5nRm9yS2V5ID09
IG1fd2FpdGluZ0ZvcktleSB8fCAoIXdhaXRpbmdGb3JLZXkgJiYgdGhpcy0+d2FpdGluZ0Zvcktl
eSgpKSkKKyAgICBHU1RfVFJBQ0UoImlzV2FpdGluZ0ZvcktleSAlcywgbV9pc1dhaXRpbmdGb3JL
ZXkgJXMiLCBib29sRm9yUHJpbnRpbmcoaXNXYWl0aW5nRm9yS2V5KSwgYm9vbEZvclByaW50aW5n
KG1faXNXYWl0aW5nRm9yS2V5KSk7CisgICAgaWYgKGlzV2FpdGluZ0ZvcktleSA9PSBtX2lzV2Fp
dGluZ0ZvcktleSB8fCAoIWlzV2FpdGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dhaXRpbmdGb3JLZXkgPSB3YWl0aW5nRm9yS2V5
OwotICAgIEdTVF9ERUJVRygid2FpdGluZyBmb3Iga2V5IGNoYW5nZWQgJXMiLCBib29sRm9yUHJp
bnRpbmcobV93YWl0aW5nRm9yS2V5KSk7CisgICAgbV9pc1dhaXRpbmdGb3JLZXkgPSBpc1dhaXRp
bmdGb3JLZXk7CisgICAgR1NUX0RFQlVHKCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAlcyIsIGJv
b2xGb3JQcmludGluZyhtX2lzV2FpdGluZ0ZvcktleSkpOwogICAgIG1fcGxheWVyLT53YWl0aW5n
Rm9yS2V5Q2hhbmdlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgKaW5kZXggMmFkYjBmZjAyMmRhMzUzM2RlNmFiOTZjMDY4OGE5M2NkYjAwYWNl
Mi4uOWM4MDNlOGFlNzI2ZWQzN2VhY2IyMTk3ZDA5ZTdkZGM1ZjJkNGUxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMTQ1LDcgKzE0NSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHBsYXkoKSBvdmVycmlkZTsKICAgICB2b2lkIHBhdXNlKCkgb3Zl
cnJpZGU7CiAgICAgYm9vbCBwYXVzZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHNlZWtp
bmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NlZWtpbmc7IH0KKyAgICBib29sIHNlZWtp
bmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lzU2Vla2luZzsgfQogICAgIHZvaWQgc2Vl
ayhjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIE1lZGlhVGltZSBwbGF0Zm9ybUR1
cmF0aW9uKCkgY29uc3Q7CkBAIC0zMjQsOSArMzI0LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRp
YyB2b2lkIHZvbHVtZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
KTsKICAgICBzdGF0aWMgdm9pZCBtdXRlQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciopOwogCi0gICAgLy8gRklYTUU6IFdoZXJlIGlzIHRoaXMgdXNlZD8KLSAgICB2
b2lkIGhhbmRsZVBsdWdpbkluc3RhbGxlclJlc3VsdChHc3RJbnN0YWxsUGx1Z2luc1JldHVybik7
Ci0KICAgICB2b2lkIHJlYWR5VGltZXJGaXJlZCgpOwogCiAgICAgdm9pZCBub3RpZnlQbGF5ZXJP
ZlZpZGVvKCk7CkBAIC0zNjUsMjIgKzM2MiwyMiBAQCBwcm90ZWN0ZWQ6CiAgICAgbXV0YWJsZSBN
ZWRpYVRpbWUgbV9jYWNoZWRQb3NpdGlvbjsKICAgICBtdXRhYmxlIE1lZGlhVGltZSBtX2NhY2hl
ZER1cmF0aW9uOwogICAgIGJvb2wgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0
aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fY2hhbmdpbmdSYXRlIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fZG93bmxvYWRGaW5pc2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2Vycm9yT2NjdXJl
ZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQ2hhbmdpbmdSYXRlIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fZGlkRG93bmxvYWRGaW5pc2ggeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRFcnJvck9j
Y3VyIHsgZmFsc2UgfTsKICAgICBtdXRhYmxlIGJvb2wgbV9pc0VuZFJlYWNoZWQgeyBmYWxzZSB9
OwogICAgIG11dGFibGUgYm9vbCBtX2lzU3RyZWFtaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
cGF1c2VkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9pc1BhdXNlZCB7IHRydWUgfTsKICAgICBmbG9h
dCBtX3BsYXliYWNrUmF0ZSB7IDEgfTsKICAgICBHc3RTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKICAg
ICBHc3RTdGF0ZSBtX29sZFN0YXRlOwogICAgIEdzdFN0YXRlIG1fcmVxdWVzdGVkU3RhdGUgeyBH
U1RfU1RBVEVfVk9JRF9QRU5ESU5HIH07Ci0gICAgYm9vbCBtX3Jlc2V0UGlwZWxpbmUgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9zZWVraW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2Vla0lzUGVu
ZGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Nob3VsZFJlc2V0UGlwZWxpbmUgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc1NlZWtpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1NlZWtQZW5k
aW5nIHsgZmFsc2UgfTsKICAgICBNZWRpYVRpbWUgbV9zZWVrVGltZTsKICAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IG1fc291cmNlIHsgbnVsbHB0ciB9OwotICAgIGJvb2wgbV92b2x1bWVBbmRNdXRl
SW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9hcmVWb2x1bWVBbmRNdXRlSW5pdGlh
bGl6ZWQgeyBmYWxzZSB9OwogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAgIFRleHR1
cmVNYXBwZXJHTDo6RmxhZ3MgbV90ZXh0dXJlTWFwcGVyRmxhZ3M7CkBAIC0zOTgsMTAgKzM5NSwx
MCBAQCBwcm90ZWN0ZWQ6CiAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2FtcGxlOwogCiAgICAg
bXV0YWJsZSBGbG9hdFNpemUgbV92aWRlb1NpemU7Ci0gICAgYm9vbCBtX3VzaW5nRmFsbGJhY2tW
aWRlb1NpbmsgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVk
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNVc2luZ0ZhbGxiYWNrVmlkZW9TaW5rIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCB7IGZhbHNlIH07CiAKLSAg
ICBib29sIG1fZGVzdHJveWluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQmVpbmdEZXN0cm95
ZWQgeyBmYWxzZSB9OwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAgICBHUmVmUHRyPEdzdEdM
Q29udGV4dD4gbV9nbENvbnRleHQ7CkBAIC00MjQsNyArNDIxLDcgQEAgcHJvdGVjdGVkOgogICAg
IExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8vIEd1YXJkcyBhY2Nlc3MgdG8gbV9oYW5kbGVkUHJv
dGVjdGlvbkV2ZW50cy4KICAgICBIYXNoU2V0PHVpbnQzMl90PiBtX2hhbmRsZWRQcm90ZWN0aW9u
RXZlbnRzOwogCi0gICAgYm9vbCBtX3dhaXRpbmdGb3JLZXkgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9pc1dhaXRpbmdGb3JLZXkgeyBmYWxzZSB9OwogI2VuZGlmCiAKICAgICBPcHRpb25hbDxHc3RW
aWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92aWRlb0RlY29kZXJQbGF0Zm9ybTsKQEAgLTQ5MywxNCAr
NDkwLDE0IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBHc3RTdHJ1Y3R1cmUqIG1fbWVkaWFMb2Nh
dGlvbnMgeyBudWxscHRyIH07CiAgICAgaW50IG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCB7
IDAgfTsKLSAgICBib29sIG1fcGxheWJhY2tSYXRlUGF1c2UgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9pc1BsYXliYWNrUmF0ZVBhdXNlZCB7IGZhbHNlIH07CiAgICAgTWVkaWFUaW1lIG1fdGltZU9m
T3ZlcmxhcHBpbmdTZWVrOwogICAgIGZsb2F0IG1fbGFzdFBsYXliYWNrUmF0ZSB7IDEgfTsKICAg
ICBUaW1lciBtX2ZpbGxUaW1lcjsKICAgICBNZWRpYVRpbWUgbV9tYXhUaW1lTG9hZGVkOwogICAg
IGJvb2wgbV9sb2FkaW5nU3RhbGxlZCB7IGZhbHNlIH07CiAgICAgTWVkaWFQbGF5ZXI6OlByZWxv
YWQgbV9wcmVsb2FkOwotICAgIGJvb2wgbV9kZWxheWluZ0xvYWQgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pc0RlbGF5aW5nTG9hZCB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9t
YXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOwogICAgIGJvb2wgbV9oYXNWaWRl
byB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0F1ZGlvIHsgZmFsc2UgfTsKQEAgLTUxNSwxMSAr
NTEyLDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwogI2VuZGlmCiAjZW5kaWYKLSAgICBib29sIG1f
YnVmZmVyaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNCdWZmZXJpbmcgeyBmYWxzZSB9Owog
ICAgIGludCBtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UgeyAwIH07CiAgICAgbXV0YWJsZSB1bnNpZ25l
ZCBsb25nIGxvbmcgbV90b3RhbEJ5dGVzIHsgMCB9OwogICAgIFVSTCBtX3VybDsKLSAgICBib29s
IG1fcHJlc2VydmVzUGl0Y2ggeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRQcmVzZXJ2ZVBp
dGNoIHsgZmFsc2UgfTsKICAgICBtdXRhYmxlIE9wdGlvbmFsPFNlY29uZHM+IG1fbGFzdFF1ZXJ5
VGltZTsKICAgICBib29sIG1faXNMZWdhY3lQbGF5YmluOwogICAgIEdSZWZQdHI8R3N0U3RyZWFt
Q29sbGVjdGlvbj4gbV9zdHJlYW1Db2xsZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCmluZGV4IGU2ODgwZDk4ZTdm
Y2FkMWQwNTNmODRlZDM4YTZmZDgxOThkZTdiODYuLjI1ZDg0MzE2YTZkN2QyZWZmYjNjMGY0ODk3
NGY3MWU0MjU4OTRkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKQEAgLTEzMiwxMyArMTMyLDE0IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRp
YVNvdXJjZVByaXZhdGVDCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpw
YXVzZSgpCiB7Ci0gICAgbV9wYXVzZWQgPSB0cnVlOworICAgIC8vIEZJWE1FOiBTaG91bGQgbm90
IG5lZWQgZGlyZWN0IGFjY2VzcyB0byB0aGlzIG1lbWJlci4gVGhpcyBvdmVycmlkZSBpcyBwcm9i
YWJseSBub3QgbmVlZGVkLgorICAgIG1faXNQYXVzZWQgPSB0cnVlOwogICAgIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKTsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdAogewotICAgIGlmIChV
TkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkpCisgICAgaWYgKFVOTElLRUxZ
KCFtX3BpcGVsaW5lIHx8IG1fZGlkRXJyb3JPY2N1cikpCiAgICAgICAgIHJldHVybiBNZWRpYVRp
bWUoKTsKIAogICAgIHJldHVybiBtX21lZGlhVGltZUR1cmF0aW9uOwpAQCAtMTQ2LDcgKzE0Nyw3
IEBAIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uTWVk
aWFUaW1lKCkgY29uc3QKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNl
ZWsoY29uc3QgTWVkaWFUaW1lJiB0aW1lKQogewotICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGlu
ZSB8fCBtX2Vycm9yT2NjdXJlZCkpCisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1f
ZGlkRXJyb3JPY2N1cikpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdTVF9JTkZPKCJbU2Vla10g
c2VlayBhdHRlbXB0IHRvICVzIHNlY3MiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsK
QEAgLTE1NCw3ICsxNTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
c2Vlayhjb25zdCBNZWRpYVRpbWUmIHRpbWUpCiAgICAgLy8gQXZvaWQgdXNlbGVzcyBzZWVraW5n
LgogICAgIE1lZGlhVGltZSBjdXJyZW50ID0gY3VycmVudE1lZGlhVGltZSgpOwogICAgIGlmICh0
aW1lID09IGN1cnJlbnQpIHsKLSAgICAgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIGlmICgh
bV9pc1NlZWtpbmcpCiAgICAgICAgICAgICB0aW1lQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTYyLDcgKzE2Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgdGltZSkKICAgICBpZiAoaXNMaXZlU3RyZWFt
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3NlZWtpbmcgJiYgbV9zZWVrSXNQZW5k
aW5nKSB7CisgICAgaWYgKG1faXNTZWVraW5nICYmIG1faXNTZWVrUGVuZGluZykgewogICAgICAg
ICBtX3NlZWtUaW1lID0gdGltZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3OSw3ICsx
ODAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vlayhjb25zdCBN
ZWRpYVRpbWUmIHRpbWUpCiAgICAgfQogCiAgICAgbV9pc0VuZFJlYWNoZWQgPSBmYWxzZTsKLSAg
ICBHU1RfREVCVUcoIm1fc2Vla2luZz0lcywgbV9zZWVrVGltZT0lcyIsIGJvb2xGb3JQcmludGlu
ZyhtX3NlZWtpbmcpLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICBH
U1RfREVCVUcoIm1faXNTZWVraW5nPSVzLCBtX3NlZWtUaW1lPSVzIiwgYm9vbEZvclByaW50aW5n
KG1faXNTZWVraW5nKSwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CiB9CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjb25maWd1cmVQbGF5U2luaygp
CkBAIC0yMzIsNyArMjMzLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmRvU2VlaygpCiAgICAgR3N0U2Vla0ZsYWdzIHNlZWtUeXBlID0gc3RhdGljX2Nhc3Q8R3N0U2Vl
a0ZsYWdzPihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSk7CiAK
ICAgICAvLyBBbHdheXMgbW92ZSB0byBzZWVraW5nIHN0YXRlIHRvIHJlcG9ydCBjb3JyZWN0ICdj
dXJyZW50VGltZScgd2hpbGUgcGVuZGluZyBmb3IgYWN0dWFsIHNlZWsgdG8gY29tcGxldGUuCi0g
ICAgbV9zZWVraW5nID0gdHJ1ZTsKKyAgICBtX2lzU2Vla2luZyA9IHRydWU7CiAKICAgICAvLyBD
aGVjayBpZiBwbGF5YmFjayBwaXBlbGluZSBpcyByZWFkeSBmb3Igc2Vlay4KICAgICBHc3RTdGF0
ZSBzdGF0ZSwgbmV3U3RhdGU7CkBAIC0yNDAsNyArMjQxLDcgQEAgYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OmRvU2VlaygpCiAgICAgaWYgKGdldFN0YXRlUmVzdWx0ID09IEdT
VF9TVEFURV9DSEFOR0VfRkFJTFVSRSB8fCBnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hB
TkdFX05PX1BSRVJPTEwpIHsKICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gY2Fubm90IHNlZWss
IGN1cnJlbnQgc3RhdGUgY2hhbmdlIGlzICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3Jl
dHVybl9nZXRfbmFtZShnZXRTdGF0ZVJlc3VsdCkpOwogICAgICAgICB3ZWJLaXRNZWRpYVNyY1Nl
dFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7
Ci0gICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNl
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICgoZ2V0U3RhdGVSZXN1bHQg
PT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQwpAQCAtMjYyLDE5ICsyNjMsMTkgQEAgYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmRvU2VlaygpCiAKICAgICAgICAgR1NUX0RFQlVH
KCJbU2Vla10gRGVsYXlpbmcgdGhlIHNlZWs6ICVzIiwgcmVhc29uLmRhdGEoKSk7CiAKLSAgICAg
ICAgbV9zZWVrSXNQZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gdHJ1
ZTsKIAogICAgICAgICBpZiAobV9pc0VuZFJlYWNoZWQpIHsKICAgICAgICAgICAgIEdTVF9ERUJV
RygiW1NlZWtdIHJlc2V0IHBpcGVsaW5lIik7Ci0gICAgICAgICAgICBtX3Jlc2V0UGlwZWxpbmUg
PSB0cnVlOwotICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgICAgICBtX3No
b3VsZFJlc2V0UGlwZWxpbmUgPSB0cnVlOworICAgICAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxz
ZTsKICAgICAgICAgICAgIGlmICghY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VE
KSkKICAgICAgICAgICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpFbXB0eSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zZWVraW5nID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBtX2lzU2Vla2luZyA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1
cm4gbV9zZWVraW5nOworICAgICAgICByZXR1cm4gbV9pc1NlZWtpbmc7CiAgICAgfQogCiAgICAg
Ly8gU3RvcCBhY2NlcHRpbmcgbmV3IHNhbXBsZXMgdW50aWwgYWN0dWFsIHNlZWsgaXMgZmluaXNo
ZWQuCkBAIC0zMDAsNyArMzAxLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OmRvU2VlaygpCiAgICAgICAgIGlmIChzZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hB
TkdFX0ZBSUxVUkUpIHsKICAgICAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIENhbm5vdCBzZWVr
LCBmYWlsZWQgdG8gcGF1c2UgcGxheWJhY2sgcGlwZWxpbmUuIik7CiAgICAgICAgICAgICB3ZWJL
aXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdl
dCgpKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAg
IG1faXNTZWVraW5nID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKQEAg
LTMxNCw3ICszMTUsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9T
ZWVrKCkKICAgICAgICAgbV9tZWRpYVNvdXJjZS0+bW9uaXRvclNvdXJjZUJ1ZmZlcnMoKTsKICAg
ICAgICAgQVNTRVJUKG1fbXNlU2Vla0NvbXBsZXRlZCk7CiAgICAgICAgIC8vIE5vdGU6IHNlZWtD
b21wbGV0ZWQgd2lsbCByZWN1cnNpdmVseSBjYWxsIHVzLgotICAgICAgICByZXR1cm4gbV9zZWVr
aW5nOworICAgICAgICByZXR1cm4gbV9pc1NlZWtpbmc7CiAgICAgfQogCiAgICAgR1NUX0RFQlVH
KCJXZSBjYW4gc2VlayBub3ciKTsKQEAgLTMzNyw3ICszMzgsNyBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkKICAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSBm
YWxzZTsKICAgICBpZiAoIWdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQoKSwgcmF0ZSwg
R1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tU
aW1lKHN0YXJ0VGltZSksIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShlbmRUaW1l
KSkpIHsKICAgICAgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01F
RElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUpOwotICAgICAgICBtX3NlZWtpbmcgPSBmYWxz
ZTsKKyAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKICAgICAgICAgbV9nc3RTZWVrQ29tcGxl
dGVkID0gdHJ1ZTsKICAgICAgICAgR1NUX0RFQlVHKCJkb1NlZWsoKTogZ3N0X2VsZW1lbnRfc2Vl
aygpIGZhaWxlZCwgcmV0dXJuaW5nIGZhbHNlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTM1MCw3ICszNTEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9T
ZWVrKCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heWJlRmluaXNo
U2VlaygpCiB7Ci0gICAgaWYgKCFtX3NlZWtpbmcgfHwgIW1fbXNlU2Vla0NvbXBsZXRlZCB8fCAh
bV9nc3RTZWVrQ29tcGxldGVkKQorICAgIGlmICghbV9pc1NlZWtpbmcgfHwgIW1fbXNlU2Vla0Nv
bXBsZXRlZCB8fCAhbV9nc3RTZWVrQ29tcGxldGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBH
c3RTdGF0ZSBzdGF0ZSwgbmV3U3RhdGU7CkBAIC0zNjIsOSArMzYzLDkgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heWJlRmluaXNoU2VlaygpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAobV9zZWVrSXNQZW5kaW5nKSB7CisgICAgaWYgKG1faXNTZWVr
UGVuZGluZykgewogICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDb21taXR0aW5nIHBlbmRpbmcg
c2VlayB0byAlcyIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICBtX3NlZWtJc1BlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gZmFs
c2U7CiAgICAgICAgIGlmICghZG9TZWVrKCkpIHsKICAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJb
U2Vla10gU2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCku
ZGF0YSgpKTsKICAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCk7CkBAIC0zNzUsNyArMzc2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6Om1heWJlRmluaXNoU2VlaygpCiAgICAgR1NUX0RFQlVHKCJbU2Vla10gU2Vla2Vk
IHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICB3ZWJL
aXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdl
dCgpKSwgdHJ1ZSk7Ci0gICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgbV9pc1NlZWtpbmcgPSBm
YWxzZTsKICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwog
ICAgIC8vIFRoZSBwaXBlbGluZSBjYW4gc3RpbGwgaGF2ZSBhIHBlbmRpbmcgc3RhdGUuIEluIHRo
aXMgY2FzZSBhIHBvc2l0aW9uIHF1ZXJ5IHdpbGwgZmFpbC4KICAgICAvLyBSaWdodCBub3cgd2Ug
Y2FuIHVzZSBtX3NlZWtUaW1lIGFzIGEgZmFsbGJhY2suCkBAIC0zOTAsNyArMzkxLDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiAK
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVraW5nKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9zZWVraW5nOworICAgIHJldHVybiBtX2lzU2Vla2luZzsKIH0KIAogLy8g
RklYTUU6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBtYW5hZ2VzIHRoZSBSZWFkeVN0YXRl
IG9uIGl0cyBvd24uIFdlIHNob3VsZG4ndCBjaGFuZ2UgaXQgbWFudWFsbHkuCkBAIC00MjgsNyAr
NDI5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldFJlYWR5U3Rh
dGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHkKIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OndhaXRGb3JTZWVrQ29tcGxldGVkKCkKIHsKLSAgICBpZiAoIW1fc2Vl
a2luZykKKyAgICBpZiAoIW1faXNTZWVraW5nKQogICAgICAgICByZXR1cm47CiAKICAgICBHU1Rf
REVCVUcoIldhaXRpbmcgZm9yIE1TRSBzZWVrIGNvbXBsZXRlZCIpOwpAQCAtNDc5LDcgKzQ4MCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VTZXR1cChHc3RF
bGVtZW50KiBzb3VyY2VFbGVtZW50KQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6dXBkYXRlU3RhdGVzKCkKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwg
bV9lcnJvck9jY3VyZWQpKQorICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2RpZEVy
cm9yT2NjdXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOwpAQCAtNDk4LDggKzQ5OSw4IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMoKQogICAg
ICAgICBpZiAobV9pc0VuZFJlYWNoZWQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gKHN0YXRlIDw9IEdT
VF9TVEFURV9SRUFEWSk7Ci0gICAgICAgIGlmIChtX3Jlc2V0UGlwZWxpbmUpCisgICAgICAgIG1f
c2hvdWxkUmVzZXRQaXBlbGluZSA9IChzdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkpOworICAgICAg
ICBpZiAobV9zaG91bGRSZXNldFBpcGVsaW5lKQogICAgICAgICAgICAgbV9tZWRpYVRpbWVEdXJh
dGlvbiA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAogICAgICAgICAvLyBVcGRhdGUgcmVhZHkg
YW5kIG5ldHdvcmsgc3RhdGVzLgpAQCAtNTM4LDI1ICs1MzksMjUgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygpCiAKICAgICAgICAgLy8gU3luYyBz
dGF0ZXMgd2hlcmUgbmVlZGVkLgogICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNF
RCkgewotICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgeworICAg
ICAgICAgICAgaWYgKCFtX2FyZVZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgewogICAgICAgICAg
ICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CiAgICAgICAgICAgICAgICAgbm90
aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgICAgICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxp
emVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFzZWVraW5nKCkg
JiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAgICBpZiAoIXNlZWtp
bmcoKSAmJiAhbV9pc1BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkgewogICAgICAgICAgICAgICAg
IEdTVF9ERUJVRygiW0J1ZmZlcmluZ10gUmVzdGFydGluZyBwbGF5YmFjay4iKTsKICAgICAgICAg
ICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgewot
ICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNQYXVzZWQgPSBm
YWxzZTsKIAogICAgICAgICAgICAgaWYgKCFtX3BsYXliYWNrUmF0ZSkgewogICAgICAgICAgICAg
ICAgIEdTVF9ERUJVRygiW0J1ZmZlcmluZ10gUGF1c2luZyBzdHJlYW0gZm9yIGJ1ZmZlcmluZy4i
KTsKICAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQp
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fcGF1c2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgIG1faXNQYXVzZWQgPSB0cnVlOwogCiAgICAgICAgIGlmIChtX3Jl
cXVlc3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BB
VVNFRCkgewogICAgICAgICAgICAgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7CkBA
IC01ODUsMTEgKzU4NiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
dXBkYXRlU3RhdGVzKCkKICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFV
U0VEKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3Vn
aERhdGE7CiAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFk
eVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAg
ICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0g
R1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgICAg
ICAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwogCi0gICAgICAgIGlmICghbV9wYXVzZWQgJiYgbV9w
bGF5YmFja1JhdGUpCisgICAgICAgIGlmICghbV9pc1BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkK
ICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogCiAg
ICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CkBAIC02MjAsMTAg
KzYyMSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3Rh
dGVzKCkKIH0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3luY1N0YXRl
Q2hhbmdlRG9uZSgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JP
Y2N1cmVkKSkKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9kaWRFcnJvck9jY3Vy
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Vla2luZykKKyAgICBpZiAobV9pc1Nl
ZWtpbmcpCiAgICAgICAgIG1heWJlRmluaXNoU2VlaygpOwogICAgIGVsc2UKICAgICAgICAgdXBk
YXRlU3RhdGVzKCk7CkBAIC03NzQsNyArNzc1LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CiAKIE1lZGlhVGltZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heE1lZGlhVGltZVNlZWthYmxlKCkgY29u
c3QKIHsKLSAgICBpZiAoVU5MSUtFTFkobV9lcnJvck9jY3VyZWQpKQorICAgIGlmIChVTkxJS0VM
WShtX2RpZEVycm9yT2NjdXIpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgp
OwogCiAgICAgR1NUX0RFQlVHKCJtYXhNZWRpYVRpbWVTZWVrYWJsZSIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJj
ZUNsaWVudEdTdHJlYW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcAppbmRleCBm
YWU3NGY0YmE0YzE3OTFkYzY1ZTUzNWZlZmYzMzNmNDJmMDZjMzM0Li5jMDk3Y2EzZTE2NzE3ZDg4
YjdiNDg2YTIyZWNiYTQ1ZDA4ZWMzZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcApAQCAtMTYzLDcgKzE2Myw4IEBAIHZv
aWQgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6OmZsdXNoKEF0b21TdHJpbmcgdHJhY2tJ
ZCkKICAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CiAKICAgICAvLyBUaGlzIGlzIG9u
bHkgZm9yIG9uLXRoZS1mbHkgcmVlbnF1ZXVlcyBhZnRlciBhcHBlbmRzLiBXaGVuIHNlZWtpbmcs
IHRoZSBzZWVrIHdpbGwgZG8gaXRzIG93biBmbHVzaC4KLSAgICBpZiAoIW1fcGxheWVyUHJpdmF0
ZS5tX3NlZWtpbmcpCisgICAgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgdG91Y2hpbmcgcHJpdmF0
ZSBwYXJ0cy4KKyAgICBpZiAoIW1fcGxheWVyUHJpdmF0ZS5tX2lzU2Vla2luZykKICAgICAgICAg
bV9wbGF5ZXJQcml2YXRlLm1fcGxheWJhY2tQaXBlbGluZS0+Zmx1c2godHJhY2tJZCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384461</attachid>
            <date>2019-11-28 10:07:06 -0800</date>
            <delta_ts>2019-11-29 01:40:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204617-20191128180705.patch</filename>
            <type>text/plain</type>
            <size>89654</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyOTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDI2NjdiNjE0N2VmZGM2
MjFlZmRhYjlkMWNmM2RiNjRkMGRmZDM2Ni4uZTQzYzJiZTNhOTJlZGQ2ZTY1MWVjZjJmNGQzYjky
ZWU5MTUzNWMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDE5LTExLTI4ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgc3R5bGUgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDYxNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvbGxvdy11cCBjb21taXQgdG8gYnVn
IDIwNDM1MiBhZGRyZXNzaW5nIHN0eWxlIGlzc3VlcyBpbiB0aGUKKyAgICAgICAgZXhpc3Rpbmcg
cGxheWVyIGNvZGUuIFRoZSBtYWluIGlzc3VlcyBhZGRyZXNzZWQgYXJlIG5hbWluZworICAgICAg
ICB2aW9sYXRpb25zLCBhZGRpbmcgZmluYWwgdG8gdHlwZXMgbm90IG92ZXJyaWRkZW4gYW5kIG9y
Z2FuaXppbmcKKyAgICAgICAgYmV0dGVyIHRoZSBzY29wZSBvZiBuYW1lcyBpbiB0aGUgY2xhc3Nl
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJlcGFyZVRvUGxheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNlZWspOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVQbGF5
YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpjdXJyZW50TWVkaWFUaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1lU2Vl
a2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVs
aW5lU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojpub3RpZnlQbGF5ZXJPZlZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpp
c011dGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6Y29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVUcmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNr
cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZVN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bmF0dXJhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzTXBlZ1RzU2Vj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBy
b2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZURv
d25sb2FkQnVmZmVyaW5nRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5TYXZlTWVkaWFEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YWNjZWxlcmF0ZWRSZW5kZXJp
bmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsUmVwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRv
UGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1vdmllTG9hZFR5cGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVWaWRlb1Npbmsp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkZWNvZGVk
RnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmRyb3BwZWRGcmFtZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3Rh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0
V2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwaXBlbGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhUGxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNMaXZlU3RyZWFt
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpz
ZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
ZG9TZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6bWF5YmVGaW5pc2hTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6c2Vla2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRGb3JTZWVrQ29tcGxldGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNT
dGF0ZUNoYW5nZURvbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjptYXhNZWRpYVRpbWVTZWVrYWJsZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyTVNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlQ2xp
ZW50R1N0cmVhbWVyTVNFOjpmbHVzaCk6CisKIDIwMTktMTEtMjggIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFkanVzdCB0aGUgbGluZSdzIGlz
LXZpc3VhbGx5LWVtcHR5IHN0YXR1cyBhZnRlciB0cmltbWluZyB0aGUgdHJhaWxpbmcgd2hpdGVz
cGFjZSBjb250ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwCmluZGV4IDU3OWVkOTlmMTczM2QyZDgxZDcwMzdjMzA5NTA1YWRlMWZkNTcyMjIuLjNl
NzBhMzZkNmQ1MDNmMTc2NDM3OWJlMjYxZjA5NjdiOWI5ZGI5MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zMzYsOSArMzM2LDEyIEBA
IHByaXZhdGU6CiB9OwogI2VuZGlmCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojppbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCitzdGF0aWMgdm9pZCBpbml0aWFsaXplRGVidWdD
YXRlZ29yeSgpCiB7Ci0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3Bs
YXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwgIldlYktpdCBtZWRpYSBwbGF5ZXIi
KTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0
X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwgIldlYktpdCBtZWRp
YSBwbGF5ZXIiKTsKKyAgICB9KTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikKQEAgLTQ5Nyw3
ICs1MDAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZEZ1bGwoY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgInByZWxvYWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcobV9w
cmVsb2FkKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9wcmVsb2FkID09IE1lZGlhUGxheWVy
OjpOb25lKSB7CiAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiRGVsYXlpbmcg
bG9hZC4iKTsKLSAgICAgICAgbV9kZWxheWluZ0xvYWQgPSB0cnVlOworICAgICAgICBtX2lzRGVs
YXlpbmdMb2FkID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBSZXNldCBuZXR3b3JrIGFuZCByZWFk
eSBzdGF0ZXMuIFRob3NlIHdpbGwgYmUgc2V0IHByb3Blcmx5IG9uY2UKQEAgLTUwNiwxMCArNTA5
LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChjb25zdCBT
dHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
CiAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Ci0gICAgbV92b2x1bWVBbmRNdXRl
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtX2FyZVZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9
IGZhbHNlOwogICAgIG1faGFzVGFpbnRlZE9yaWdpbiA9IFdURjo6bnVsbG9wdDsKIAotICAgIGlm
ICghbV9kZWxheWluZ0xvYWQpCisgICAgaWYgKCFtX2lzRGVsYXlpbmdMb2FkKQogICAgICAgICBj
b21taXRMb2FkKCk7CiB9CiAKQEAgLTU0MSwxOSArNTQ0LDYgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0pCiB9CiAjZW5k
aWYKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExvYWQoKQotewot
ICAgIEFTU0VSVCghbV9kZWxheWluZ0xvYWQpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIkNvbW1pdHRpbmcgbG9hZC4iKTsKLQotICAgIC8vIEdTdHJlYW1lciBuZWVkcyB0byBo
YXZlIHRoZSBwaXBlbGluZSBzZXQgdG8gYSBwYXVzZWQgc3RhdGUgdG8KLSAgICAvLyBzdGFydCBw
cm92aWRpbmcgYW55dGhpbmcgdXNlZnVsLgotICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NU
QVRFX1BBVVNFRCk7Ci0KLSAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKLSAgICB1
cGRhdGVTdGF0ZXMoKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNh
bmNlbExvYWQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2Fk
aW5nIHx8IG1fbmV0d29ya1N0YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpCkBAIC01NjcsOCAr
NTU3LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByZXBhcmVUb1BsYXko
KQogewogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlByZXBhcmUgdG8gcGxheSIp
OwogICAgIG1fcHJlbG9hZCA9IE1lZGlhUGxheWVyOjpBdXRvOwotICAgIGlmIChtX2RlbGF5aW5n
TG9hZCkgewotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOworICAgIGlmIChtX2lzRGVs
YXlpbmdMb2FkKSB7CisgICAgICAgIG1faXNEZWxheWluZ0xvYWQgPSBmYWxzZTsKICAgICAgICAg
Y29tbWl0TG9hZCgpOwogICAgIH0KIH0KQEAgLTU3NiwxMyArNTY2LDEzIEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KCkKIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwbGF5KCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tSYXRlKSB7Ci0g
ICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSB0cnVlOworICAgICAgICBtX2lzUGxheWJhY2tS
YXRlUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChjaGFu
Z2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKSkgewogICAgICAgICBtX2lzRW5kUmVh
Y2hlZCA9IGZhbHNlOwotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOworICAgICAgICBt
X2lzRGVsYXlpbmdMb2FkID0gZmFsc2U7CiAgICAgICAgIG1fcHJlbG9hZCA9IE1lZGlhUGxheWVy
OjpBdXRvOwogICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKICAgICAgICAg
R1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5Iik7CkBAIC01OTIsNyArNTgyLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXkoKQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKQogewotICAgIG1fcGxheWJhY2tSYXRlUGF1c2Ug
PSBmYWxzZTsKKyAgICBtX2lzUGxheWJhY2tSYXRlUGF1c2VkID0gZmFsc2U7CiAgICAgR3N0U3Rh
dGUgY3VycmVudFN0YXRlLCBwZW5kaW5nU3RhdGU7CiAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRl
KG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nU3RhdGUsIDApOwogICAg
IGlmIChjdXJyZW50U3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmdTdGF0ZSA8PSBH
U1RfU1RBVEVfUEFVU0VEKQpAQCAtNjE0LDcgKzYwNCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwYXVzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgeworICAgIGlmIChtX2lzUGxheWJhY2tS
YXRlUGF1c2VkKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXli
YWNrIHJhdGUgaXMgMCwgc2ltdWxhdGluZyBQQVVTRUQgc3RhdGUiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KQEAgLTYzMywxMiArNjIzLDggQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRl
LAogCiAgICAgaWYgKHJhdGUgPCAwKSB7CiAgICAgICAgIHN0YXJ0VGltZSA9IE1lZGlhVGltZTo6
emVyb1RpbWUoKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGF0IGJlZ2lubmluZyBvZiBtZWRpYSwg
c3RhcnQgZnJvbSB0aGUgZW5kIHRvCi0gICAgICAgIC8vIGF2b2lkIGltbWVkaWF0ZSBFT1MuCi0g
ICAgICAgIGlmIChwb3NpdGlvbiA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAgICAgICAg
IGVuZFRpbWUgPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBlbmRUaW1lID0gcG9zaXRpb247CisgICAgICAgIC8vIElmIHdlIGFyZSBhdCBiZWdpbm5pbmcg
b2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0byBhdm9pZCBpbW1lZGlhdGUgRU9TLgorICAg
ICAgICBlbmRUaW1lID0gcG9zaXRpb24gPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkgPyBkdXJhdGlv
bk1lZGlhVGltZSgpIDogcG9zaXRpb247CiAgICAgfQogCiAgICAgaWYgKCFyYXRlKQpAQCAtNjUw
LDEwICs2MzYsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG9TZWVrKGNv
bnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAKIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1lKQogewotICAg
IGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZXJyb3JPY2N1
cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNlZWsgYXR0
ZW1wdCB0byAlcyIsIHRvU3RyaW5nKG1lZGlhVGltZSkudXRmOCgpLmRhdGEoKSk7CkBAIC02NjYs
MTYgKzY0OSwxNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25z
dCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogICAgIE1lZGlhVGltZSB0aW1lID0gc3RkOjptaW4o
bWVkaWFUaW1lLCBkdXJhdGlvbk1lZGlhVGltZSgpKTsKIAotICAgIGlmIChpc0xpdmVTdHJlYW0o
KSkgeworICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJbU2Vla10gTGl2ZSBzdHJlYW0gc2VlayB1bmhhbmRsZWQiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiW1Nl
ZWtdIHNlZWtpbmcgdG8gJXMiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKIAotICAg
IGlmIChtX3NlZWtpbmcpIHsKKyAgICBpZiAobV9pc1NlZWtpbmcpIHsKICAgICAgICAgbV90aW1l
T2ZPdmVybGFwcGluZ1NlZWsgPSB0aW1lOwotICAgICAgICBpZiAobV9zZWVrSXNQZW5kaW5nKSB7
CisgICAgICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpIHsKICAgICAgICAgICAgIG1fc2Vla1RpbWUg
PSB0aW1lOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02ODgsMTAgKzY3MSwx
MCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25zdCBNZWRpYVRp
bWUmIG1lZGlhVGltZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoZ2V0U3RhdGVS
ZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyB8fCBzdGF0ZSA8IEdTVF9TVEFURV9QQVVT
RUQgfHwgbV9pc0VuZFJlYWNoZWQpIHsKLSAgICAgICAgbV9zZWVrSXNQZW5kaW5nID0gdHJ1ZTsK
KyAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gdHJ1ZTsKICAgICAgICAgaWYgKG1faXNFbmRSZWFj
aGVkKSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10g
cmVzZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IHRydWU7Cisg
ICAgICAgICAgICBtX3Nob3VsZFJlc2V0UGlwZWxpbmUgPSB0cnVlOwogICAgICAgICAgICAgaWYg
KCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQogICAgICAgICAgICAgICAg
IGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKICAgICAgICAgfQpAQCAtNzAzLDIw
ICs2ODYsMjAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNlZWsoY29uc3Qg
TWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3NlZWtpbmcg
PSB0cnVlOworICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKICAgICBtX3NlZWtUaW1lID0gdGltZTsK
ICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6dXBkYXRlUGxheWJhY2tSYXRlKCkKIHsKLSAgICBpZiAoIW1fY2hhbmdpbmdS
YXRlKQorICAgIGlmICghbV9pc0NoYW5naW5nUmF0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
R1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJTZXQgUmF0ZSB0byAlZiIsIG1fcGxheWJhY2tS
YXRlKTsKIAogICAgIC8vIE11dGUgdGhlIHNvdW5kIGlmIHRoZSBwbGF5YmFjayByYXRlIGlzIG5l
Z2F0aXZlIG9yIHRvbyBleHRyZW1lIGFuZCBhdWRpbyBwaXRjaCBpcyBub3QgYWRqdXN0ZWQuCi0g
ICAgYm9vbCBtdXRlID0gbV9wbGF5YmFja1JhdGUgPD0gMCB8fCAoIW1fcHJlc2VydmVzUGl0Y2gg
JiYgKG1fcGxheWJhY2tSYXRlIDwgMC44IHx8IG1fcGxheWJhY2tSYXRlID4gMikpOworICAgIGJv
b2wgbXV0ZSA9IG1fcGxheWJhY2tSYXRlIDw9IDAgfHwgKCFtX3Nob3VsZFByZXNlcnZlUGl0Y2gg
JiYgKG1fcGxheWJhY2tSYXRlIDwgMC44IHx8IG1fcGxheWJhY2tSYXRlID4gMikpOwogCiAgICAg
R1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksIG11dGUgPyAiTmVlZCB0byBtdXRlIGF1ZGlvIiA6
ICJEbyBub3QgbmVlZCB0byBtdXRlIGF1ZGlvIik7CiAKQEAgLTcyOCw0MyArNzExLDE5IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVQbGF5YmFja1JhdGUoKQogICAg
ICAgICBHU1RfRVJST1IoIlNldCByYXRlIHRvICVmIGZhaWxlZCIsIG1fcGxheWJhY2tSYXRlKTsK
ICAgICB9CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgewotICAgICAgICBHc3RTdGF0
ZSBzdGF0ZTsKLSAgICAgICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBpZiAobV9pc1BsYXliYWNr
UmF0ZVBhdXNlZCkgeworICAgICAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsKIAogICAgICAg
ICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGlu
ZywgMCk7CiAgICAgICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUExBWUlORyAmJiBwZW5kaW5n
ICE9IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShH
U1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSBmYWxzZTsK
KyAgICAgICAgbV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IGZhbHNlOwogICAgIH0KIAotICAgIG1f
Y2hhbmdpbmdSYXRlID0gZmFsc2U7CisgICAgbV9pc0NoYW5naW5nUmF0ZSA9IGZhbHNlOwogICAg
IG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGlw
ZWxpbmUpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0KLSAgICBH
U1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBwaXBlbGluZSBz
dGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkpKTsKLSAgICBpZiAobV9l
cnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0K
LSAgICAvLyBUaGUgZHVyYXRpb24gcXVlcnkgd291bGQgZmFpbCBvbiBhIG5vdC1wcmVyb2xsZWQg
cGlwZWxpbmUuCi0gICAgaWYgKEdTVF9TVEFURShtX3BpcGVsaW5lLmdldCgpKSA8IEdTVF9TVEFU
RV9QQVVTRUQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0KLSAg
ICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKLSAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0
aW9uKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJmR1cmF0aW9uKSB8fCAhR1NU
X0NMT0NLX1RJTUVfSVNfVkFMSUQoZHVyYXRpb24pKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIlRpbWUgZHVyYXRpb24gcXVlcnkgZmFpbGVkIGZvciAlcyIsIG1fdXJs
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjpwb3Np
dGl2ZUluZmluaXRlVGltZSgpOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5l
KCksICJEdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTKGR1cmF0aW9u
KSk7Ci0gICAgcmV0dXJuIE1lZGlhVGltZShkdXJhdGlvbiwgR1NUX1NFQ09ORCk7Ci19Ci0KIE1l
ZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVkaWFUaW1lKCkg
Y29uc3QKIHsKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJDYWNoZWQgZHVyYXRp
b246ICVzIiwgbV9jYWNoZWREdXJhdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpAQCAt
NzgyLDExICs3NDEsMTEgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGlwZWxp
bmUgfHwgbV9lcnJvck9jY3VyZWQpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1fZGlkRXJyb3JP
Y2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKIAotICAgIEdT
VF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgInNlZWtpbmc6ICVzLCBzZWVrVGltZTogJXMiLCBi
b29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50b1N0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgIGlmIChtX3NlZWtpbmcpCisgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGlu
ZSgpLCAic2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lzU2Vl
a2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9p
c1NlZWtpbmcpCiAgICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwogCiAgICAgcmV0dXJuIHBsYXli
YWNrUG9zaXRpb24oKTsKQEAgLTc5NCwzNiArNzUzLDM2IEBAIE1lZGlhVGltZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdAogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZShmbG9hdCByYXRlKQogewotICAgIC8vIEhp
Z2hlciByYXRlIGNhdXNlcyBjcmFzaC4KLSAgICByYXRlID0gY2xhbXBUbyhyYXRlLCAtMjAuMCwg
MjAuMCk7CisgICAgZmxvYXQgcmF0ZUNsYW1wZWQgPSBjbGFtcFRvKHJhdGUsIC0yMC4wLCAyMC4w
KTsKKyAgICBpZiAocmF0ZUNsYW1wZWQgIT0gcmF0ZSkKKyAgICAgICAgR1NUX1dBUk5JTkcoIkNs
YW1waW5nIG9yaWdpbmFsIHJhdGUgKCVmKSB0byBbLTIwLCAyMF0gKCVmKSwgaGlnaGVyIHJhdGVz
IGNhdXNlIGNyYXNoZXMiLCByYXRlLCByYXRlQ2xhbXBlZCk7CiAKICAgICAvLyBBdm9pZCB1c2Vs
ZXNzIHBsYXliYWNrIHJhdGUgdXBkYXRlLgotICAgIGlmIChtX3BsYXliYWNrUmF0ZSA9PSByYXRl
KSB7Ci0gICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhhdCB1cHBlciBsYXllcnMgd2VyZSBub3Rp
ZmllZCBpZiByYXRlIHdhcyBzZXQKKyAgICBpZiAobV9wbGF5YmFja1JhdGUgPT0gcmF0ZUNsYW1w
ZWQpIHsKKyAgICAgICAgLy8gQW5kIG1ha2Ugc3VyZSB0aGF0IHVwcGVyIGxheWVycyB3ZXJlIG5v
dGlmaWVkIGlmIHJhdGUgd2FzIHNldC4KIAotICAgICAgICBpZiAoIW1fY2hhbmdpbmdSYXRlICYm
IG1fcGxheWVyLT5yYXRlKCkgIT0gbV9wbGF5YmFja1JhdGUpCisgICAgICAgIGlmICghbV9pc0No
YW5naW5nUmF0ZSAmJiBtX3BsYXllci0+cmF0ZSgpICE9IG1fcGxheWJhY2tSYXRlKQogICAgICAg
ICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpIHsKLSAgICAgICAgLy8gbm90aWZ5IHVwcGVyIGxheWVy
cyB0aGF0IHdlIGNhbm5vdCBoYW5kbGUgcGFzc2VkIHJhdGUuCi0gICAgICAgIG1fY2hhbmdpbmdS
YXRlID0gZmFsc2U7CisgICAgaWYgKG1faXNMaXZlU3RyZWFtKSB7CisgICAgICAgIC8vIE5vdGlm
eSB1cHBlciBsYXllcnMgdGhhdCB3ZSBjYW5ub3QgaGFuZGxlIHBhc3NlZCByYXRlLgorICAgICAg
ICBtX2lzQ2hhbmdpbmdSYXRlID0gZmFsc2U7CiAgICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdl
ZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAg
R3N0U3RhdGUgcGVuZGluZzsKKyAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsKIAotICAgIG1f
cGxheWJhY2tSYXRlID0gcmF0ZTsKLSAgICBtX2NoYW5naW5nUmF0ZSA9IHRydWU7CisgICAgbV9w
bGF5YmFja1JhdGUgPSByYXRlQ2xhbXBlZDsKKyAgICBtX2lzQ2hhbmdpbmdSYXRlID0gdHJ1ZTsK
IAogICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZw
ZW5kaW5nLCAwKTsKIAotICAgIGlmICghcmF0ZSkgewotICAgICAgICBtX2NoYW5naW5nUmF0ZSA9
IGZhbHNlOwotICAgICAgICBtX3BsYXliYWNrUmF0ZVBhdXNlID0gdHJ1ZTsKKyAgICBpZiAoIXJh
dGVDbGFtcGVkKSB7CisgICAgICAgIG1faXNDaGFuZ2luZ1JhdGUgPSBmYWxzZTsKKyAgICAgICAg
bV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IHRydWU7CiAgICAgICAgIGlmIChzdGF0ZSAhPSBHU1Rf
U1RBVEVfUEFVU0VEICYmIHBlbmRpbmcgIT0gR1NUX1NUQVRFX1BBVVNFRCkKICAgICAgICAgICAg
IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTg0MywyMCArODAyLDIwIEBAIGRvdWJsZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnJhdGUoKSBjb25zdAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJl
c2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKIHsKLSAgICBtX3ByZXNlcnZlc1BpdGNo
ID0gcHJlc2VydmVzUGl0Y2g7CisgICAgbV9zaG91bGRQcmVzZXJ2ZVBpdGNoID0gcHJlc2VydmVz
UGl0Y2g7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2Fk
KE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWQpCiB7CiAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiU2V0dGluZyBwcmVsb2FkIHRvICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9T
dHJpbmcocHJlbG9hZCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKHByZWxvYWQgPT0gTWVkaWFQ
bGF5ZXI6OkF1dG8gJiYgaXNMaXZlU3RyZWFtKCkpCisgICAgaWYgKHByZWxvYWQgPT0gTWVkaWFQ
bGF5ZXI6OkF1dG8gJiYgbV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
cHJlbG9hZCA9IHByZWxvYWQ7CiAgICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCk7CiAK
LSAgICBpZiAobV9kZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25l
KSB7Ci0gICAgICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7CisgICAgaWYgKG1faXNEZWxheWlu
Z0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25lKSB7CisgICAgICAgIG1faXNE
ZWxheWluZ0xvYWQgPSBmYWxzZTsKICAgICAgICAgY29tbWl0TG9hZCgpOwogICAgIH0KIH0KQEAg
LTg2NCw3ICs4MjMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJl
bG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQogc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZmZXJlZCgpIGNv
bnN0CiB7CiAgICAgYXV0byB0aW1lUmFuZ2VzID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5n
ZXM+KCk7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IGlzTGl2ZVN0cmVhbSgpKQorICAgIGlm
IChtX2RpZEVycm9yT2NjdXIgfHwgbV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJldHVybiB0aW1l
UmFuZ2VzOwogCiAgICAgTWVkaWFUaW1lIG1lZGlhRHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGlt
ZSgpOwpAQCAtODc2LDggKzgzNSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5n
ZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQoKSBjb25zCiAgICAgaWYg
KCFnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0gICAgZ3VpbnQgbnVtQnVmZmVyaW5nUmFuZ2VzID0g
Z3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMocXVlcnkuZ2V0KCkpOwotICAgIGZvciAo
Z3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bUJ1ZmZlcmluZ1JhbmdlczsgaW5kZXgrKykgewor
ICAgIHVuc2lnbmVkIG51bUJ1ZmZlcmluZ1JhbmdlcyA9IGdzdF9xdWVyeV9nZXRfbl9idWZmZXJp
bmdfcmFuZ2VzKHF1ZXJ5LmdldCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBudW1CdWZmZXJpbmdSYW5nZXM7IGluZGV4KyspIHsKICAgICAgICAgZ2ludDY0IHJhbmdl
U3RhcnQgPSAwLCByYW5nZVN0b3AgPSAwOwogICAgICAgICBpZiAoZ3N0X3F1ZXJ5X3BhcnNlX250
aF9idWZmZXJpbmdfcmFuZ2UocXVlcnkuZ2V0KCksIGluZGV4LCAmcmFuZ2VTdGFydCwgJnJhbmdl
U3RvcCkpIHsKICAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0VGltZSA9IGdzdF91dGlsX3VpbnQ2
NF9zY2FsZV9pbnRfcm91bmQodG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSwgcmFu
Z2VTdGFydCwgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCk7CkBAIC04ODYsOCArODQ1LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpidWZmZXJlZCgpIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEZhbGxiYWNr
IHRvIHRoZSBtb3JlIGdlbmVyYWwgbWF4VGltZUxvYWRlZCgpIGlmIG5vIHJhbmdlIGhhcwotICAg
IC8vIGJlZW4gZm91bmQuCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIG1vcmUgZ2VuZXJhbCBtYXhU
aW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzIGJlZW4gZm91bmQuCiAgICAgaWYgKCF0aW1lUmFu
Z2VzLT5sZW5ndGgoKSkgewogICAgICAgICBNZWRpYVRpbWUgbG9hZGVkID0gbWF4VGltZUxvYWRl
ZCgpOwogICAgICAgICBpZiAobG9hZGVkLmlzVmFsaWQoKSAmJiBsb2FkZWQpCkBAIC04OTksMTYg
Kzg1NywxNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29ucwogCiBNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7Ci0gICAg
R1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywgaXNMaXZlU3Ry
ZWFtOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9yT2NjdXJlZCksIGJvb2xGb3JQcmludGlu
Zyhpc0xpdmVTdHJlYW0oKSkpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICBHU1RfVFJB
Q0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBpc0xpdmVTdHJlYW06ICVz
IiwgYm9vbEZvclByaW50aW5nKG1fZGlkRXJyb3JPY2N1ciksIGJvb2xGb3JQcmludGluZyhtX2lz
TGl2ZVN0cmVhbSkpOworICAgIGlmIChtX2RpZEVycm9yT2NjdXIpCiAgICAgICAgIHJldHVybiBN
ZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCisgICAgaWYg
KG1faXNMaXZlU3RyZWFtKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwog
CiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhNZWRpYVRpbWVTZWVrYWJsZSwgZHVyYXRpb246
ICVzIiwgdG9TdHJpbmcoZHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOwotICAgIC8vIGluZmluaXRl
IGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAgLy8gSW5maW5pdGUgZHVyYXRpb24gbWVh
bnMgbGl2ZSBzdHJlYW0uCiAgICAgaWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZpbml0ZSgpKQog
ICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCkBAIC05MTcsNyArODc1LDcg
QEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1lU2Vl
a2FibGUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpt
YXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQpCisgICAgaWYg
KG1fZGlkRXJyb3JPY2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsK
IAogICAgIE1lZGlhVGltZSBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7CkBAIC05MjksNyArODg3
LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4VGltZUxvYWRl
ZCgpIGNvbnN0CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRMb2FkaW5n
UHJvZ3Jlc3MoKSBjb25zdAogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCB8fCBtX2xvYWRpbmdT
dGFsbGVkKQorICAgIGlmIChtX2RpZEVycm9yT2NjdXIgfHwgbV9sb2FkaW5nU3RhbGxlZCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNl
LmdldCgpKSkgewpAQCAtOTUyLDI5ICs5MTAsMjIgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0CiAKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25zdAogewotICAg
IGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICBpZiAobV9kaWRFcnJvck9jY3VyIHx8ICFtX3NvdXJj
ZSB8fCBtX2lzTGl2ZVN0cmVhbSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAobV90b3Rh
bEJ5dGVzKQogICAgICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwogCi0gICAgaWYgKCFtX3NvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCi0gICAgICAg
IHJldHVybiAwOwotCiAgICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfQllURVM7CiAgICAg
Z2ludDY0IGxlbmd0aCA9IDA7CiAgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1f
c291cmNlLmdldCgpLCBmbXQsICZsZW5ndGgpKSB7CiAgICAgICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0aCk7CiAgICAg
ICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3Ro
KTsKLSAgICAgICAgbV9pc1N0cmVhbWluZyA9ICFsZW5ndGg7CisgICAgICAgIG1faXNMaXZlU3Ry
ZWFtID0gIWxlbmd0aDsKICAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKICAgICB9CiAKLSAg
ICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBwYWRzIG1hbnVhbGx5LgotICAg
IC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02
Mzg3NDkKKyAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBwYWRzIG1hbnVh
bGx5LiBTZWUgYWxzbyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjM4NzQ5CiAgICAgR3N0SXRlcmF0b3IqIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19w
YWRzKG1fc291cmNlLmdldCgpKTsKICAgICBib29sIGRvbmUgPSBmYWxzZTsKICAgICB3aGlsZSAo
IWRvbmUpIHsKQEAgLTEwMDQsNyArOTU1LDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygpIGNvbnN0CiAKICAgICBHU1RfSU5GT19P
QkpFQ1QocGlwZWxpbmUoKSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgp
OwogICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVu
Z3RoKTsKLSAgICBtX2lzU3RyZWFtaW5nID0gIWxlbmd0aDsKKyAgICBtX2lzTGl2ZVN0cmVhbSA9
ICFsZW5ndGg7CiAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIH0KIApAQCAtMTEyOSw4ICsxMDgw
LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5lU3Rh
dGUoR3N0U3RhdGUgbmV3U3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fcGlwZWxpbmUpOwogCi0gICAg
R3N0U3RhdGUgY3VycmVudFN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7CisgICAgR3N0U3Rh
dGUgY3VycmVudFN0YXRlLCBwZW5kaW5nOwogCiAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1f
cGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsKICAgICBpZiAoY3Vy
cmVudFN0YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsKQEAgLTExNDcs
MTMgKzEwOTcsMTAgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBp
cGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBw
YXVzZWRPclBsYXlpbmcgJiYgc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlM
VVJFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBDcmVhdGUgYSB0aW1lciB3aGVu
IGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJlc291cmNlcwot
ICAgIC8vIGlmIHdlIHN0YXkgZm9yIHRvbyBsb25nIG9uIFJFQURZLgotICAgIC8vIEFsc28gbGV0
cyByZW1vdmUgdGhlIHRpbWVyIGlmIHdlIHJlcXVlc3QgYSBzdGF0ZSBjaGFuZ2UgZm9yIGFueSBz
dGF0ZSBvdGhlciB0aGFuIFJFQURZLgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczNTQKKyAgICAvLyBDcmVhdGUgYSB0aW1lciB3aGVu
IGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJlc291cmNlcyBp
ZiB3ZSBzdGF5IGZvciB0b28gbG9uZyBvbiBSRUFEWS4KKyAgICAvLyBBbHNvIGxldHMgcmVtb3Zl
IHRoZSB0aW1lciBpZiB3ZSByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlIGZvciBhbnkgc3RhdGUgb3Ro
ZXIgdGhhbiBSRUFEWS4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNzM1NAogICAgIGlmIChuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkgJiYgIW1f
cmVhZHlUaW1lckhhbmRsZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAvLyBNYXggaW50ZXJ2YWwg
aW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwKLSAgICAgICAg
Ly8gc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgorICAgICAgICAvLyBNYXggaW50ZXJ2YWwgaW4gc2Vj
b25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwgc3RhdGUgY2hhbmdlIHJl
cXVlc3RzLgogICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyByZWFkeVN0YXRlVGltZXJEZWxh
eSB7IDFfbWluIH07CiAgICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3RhcnRPbmVTaG90KHJl
YWR5U3RhdGVUaW1lckRlbGF5KTsKICAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9IEdTVF9TVEFU
RV9SRUFEWSkKQEAgLTEyMDQsNyArMTE1MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKIAogICAgIEFTU0VSVChtX2lzTGVnYWN5UGxh
eWJpbiB8fCBpc01lZGlhU291cmNlKCkpOwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOworICAg
IHVuc2lnbmVkIG51bVRyYWNrcyA9IDA7CiAgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVk
aWFTb3VyY2UoKTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBt
X3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CiAgICAgZ19vYmplY3RfZ2V0KGVsZW1l
bnQsICJuLXZpZGVvIiwgJm51bVRyYWNrcywgbnVsbHB0cik7CkBAIC0xMjI3LDE0ICsxMTc0LDE0
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVv
KCkKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFZp
ZGVvU3RyZWFtczsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewogICAgICAgICBH
UmVmUHRyPEdzdFBhZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBl
bGluZS5nZXQoKSwgImdldC12aWRlby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsK
ICAgICAgICAgQVNTRVJUKHBhZCk7CiAKICAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlYiICsg
U3RyaW5nOjpudW1iZXIoaSk7CiAgICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFwcGVuZChzdHJl
YW1JZCk7Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRlb1RyYWNrcy5z
aXplKCkpKSB7CisgICAgICAgIGlmIChpIDwgbV92aWRlb1RyYWNrcy5zaXplKCkpIHsKICAgICAg
ICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9
IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKICAgICAgICAgICAgIGlmIChleGlzdGluZ1Ry
YWNrKSB7CiAgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CkBAIC0x
MjgyLDcgKzEyMjksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5
UGxheWVyT2ZBdWRpbygpCiAKICAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRp
YVNvdXJjZSgpKTsKIAotICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICB1bnNpZ25lZCBudW1U
cmFja3MgPSAwOwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CiAg
ICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkg
OiBtX3BpcGVsaW5lLmdldCgpOwogICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi1hdWRpbyIs
ICZudW1UcmFja3MsIG51bGxwdHIpOwpAQCAtMTMwMSwxNCArMTI0OCwxNCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRBdWRpb1N0cmVhbXM7Ci0g
ICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+
IHBhZDsKICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJn
ZXQtYXVkaW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CiAgICAgICAgIEFTU0VS
VChwYWQpOwogCiAgICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJBIiArIFN0cmluZzo6bnVtYmVy
KGkpOwogICAgICAgICB2YWxpZEF1ZGlvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwotICAgICAg
ICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgpKSkgeworICAg
ICAgICBpZiAoaSA8IG1fYXVkaW9UcmFja3Muc2l6ZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8
QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX2F1ZGlvVHJhY2tz
LmdldChzdHJlYW1JZCk7CiAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewogICAgICAg
ICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwpAQCAtMTM0NCw3ICsxMjkxLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCgp
CiAKICAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRpYVNvdXJjZSgpKTsKIAot
ICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICB1bnNpZ25lZCBudW1UcmFja3MgPSAwOwogICAg
IGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CiAgICAgR3N0RWxlbWVudCog
ZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdl
dCgpOwogICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi10ZXh0IiwgJm51bVRyYWNrcywgbnVs
bHB0cik7CkBAIC0xMzU3LDcgKzEzMDQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKICAgICB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiB2
YWxpZFRleHRTdHJlYW1zOwotICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytp
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7CiAgICAg
ICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CiAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSht
X3BpcGVsaW5lLmdldCgpLCAiZ2V0LXRleHQtcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0
cik7CiAgICAgICAgIEFTU0VSVChwYWQpOwpAQCAtMTM2OSw3ICsxMzE2LDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCgpCiAgICAgICAgIFN0
cmluZyBzdHJlYW1JZCA9ICJUIiArIFN0cmluZzo6bnVtYmVyKGkpOwogCiAgICAgICAgIHZhbGlk
VGV4dFN0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKLSAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2Fz
dDxnaW50PihtX3RleHRUcmFja3Muc2l6ZSgpKSkgeworICAgICAgICBpZiAoaSA8IG1fdGV4dFRy
YWNrcy5zaXplKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
R1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV90ZXh0VHJhY2tzLmdldChzdHJlYW1JZCk7CiAg
ICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewogICAgICAgICAgICAgICAgIGV4aXN0aW5n
VHJhY2stPnNldEluZGV4KGkpOwpAQCAtMTQyMiw5ICsxMzY5LDU2IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlKCkKIH0KICNlbmRpZgogCitNZWRpYVRp
bWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCk7CisKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3Vy
ZWQ6ICVzLCBwaXBlbGluZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9kaWRFcnJvck9j
Y3VyKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NUX1NUQVRFKG1fcGlwZWxpbmUuZ2V0
KCkpKSk7CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikKKyAgICAgICAgcmV0dXJuIE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKTsKKworICAgIC8vIFRoZSBkdXJhdGlvbiBxdWVyeSB3b3VsZCBmYWls
IG9uIGEgbm90LXByZXJvbGxlZCBwaXBlbGluZS4KKyAgICBpZiAoR1NUX1NUQVRFKG1fcGlwZWxp
bmUuZ2V0KCkpIDwgR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKTsKKworICAgIGludDY0X3QgZHVyYXRpb24gPSAwOworICAgIGlmICghZ3N0
X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9waXBlbGluZS5nZXQoKSwgR1NUX0ZPUk1BVF9USU1F
LCAmZHVyYXRpb24pIHx8ICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChkdXJhdGlvbikpIHsKKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVGltZSBkdXJhdGlvbiBxdWVyeSBm
YWlsZWQgZm9yICVzIiwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CisgICAgfQorCisgICAgR1NU
X0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIkR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdT
VF9USU1FX0FSR1MoZHVyYXRpb24pKTsKKyAgICByZXR1cm4gTWVkaWFUaW1lKGR1cmF0aW9uLCBH
U1RfU0VDT05EKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzTXV0
ZWQoKSBjb25zdAoreworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBnYm9vbGVhbiBpc011dGVkOworICAgIGdfb2JqZWN0X2dldChtX3ZvbHVt
ZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJmlzTXV0ZWQsIG51bGxwdHIpOworICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAiUGxheWVyIGlzIG11dGVkOiAlcyIsIGJvb2xGb3JQcmludGlu
ZyghIWlzTXV0ZWQpKTsKKyAgICByZXR1cm4gaXNNdXRlZDsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExvYWQoKQoreworICAgIEFTU0VSVCghbV9pc0RlbGF5
aW5nTG9hZCk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ29tbWl0dGluZyBs
b2FkLiIpOworCisgICAgLy8gR1N0cmVhbWVyIG5lZWRzIHRvIGhhdmUgdGhlIHBpcGVsaW5lIHNl
dCB0byBhIHBhdXNlZCBzdGF0ZSB0bworICAgIC8vIHN0YXJ0IHByb3ZpZGluZyBhbnl0aGluZyB1
c2VmdWwuCisgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKTsKKworICAg
IHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOworICAgIHVwZGF0ZVN0YXRlcygpOworfQor
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZmlsbFRpbWVyRmlyZWQoKQogewot
ICAgIGlmIChtX2Vycm9yT2NjdXJlZCkgeworICAgIGlmIChtX2RpZEVycm9yT2NjdXIpIHsKICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gQW4gZXJyb3Ig
b2NjdXJyZWQsIGRpc2FibGluZyB0aGUgZmlsbCB0aW1lciIpOwogICAgICAgICBtX2ZpbGxUaW1l
ci5zdG9wKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NjYsNyArMTQ2MCw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGUgbmV0d29yCiB7CiAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgZmFpbGVkLCBlcnJv
cjogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhuZXR3b3JrRXJyb3IpLnV0ZjgoKS5k
YXRhKCkpOwogCi0gICAgbV9lcnJvck9jY3VyZWQgPSB0cnVlOworICAgIG1fZGlkRXJyb3JPY2N1
ciA9IHRydWU7CiAgICAgaWYgKGZvcmNlTm90aWZpY2F0aW9ucyB8fCBtX25ldHdvcmtTdGF0ZSAh
PSBuZXR3b3JrRXJyb3IpIHsKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBuZXR3b3JrRXJyb3I7
CiAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0xNTA5LDggKzE1
MDMsOCBAQCBHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvU2lu
aygpIGNvbnN0CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXli
YWNrUG9zaXRpb24oKSBjb25zdAogewotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwg
ImlzRW5kUmVhY2hlZDogJXMsIHNlZWtpbmc6ICVzLCBzZWVrVGltZTogJXMiLCBib29sRm9yUHJp
bnRpbmcobV9pc0VuZFJlYWNoZWQpLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVr
VGltZS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX2lzRW5kUmVhY2hlZCAm
JiBtX3NlZWtpbmcpCisgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiaXNFbmRSZWFj
aGVkOiAlcywgc2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lz
RW5kUmVhY2hlZCksIGJvb2xGb3JQcmludGluZyhtX2lzU2Vla2luZyksIG1fc2Vla1RpbWUudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9pc0VuZFJlYWNoZWQgJiYgbV9pc1Nl
ZWtpbmcpCiAgICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwogCiAgICAgLy8gVGhpcyBjb25zdGFu
dCBzaG91bGQgcmVtYWluIGxvd2VyIHRoYW4gSFRNTE1lZGlhRWxlbWVudCdzIG1heFRpbWV1cGRh
dGVFdmVudEZyZXF1ZW5jeS4KQEAgLTE1MzAsMTAgKzE1MjQsMTEgQEAgTWVkaWFUaW1lIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0CiAgICAgICAg
IGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKICAgICBnc3Rf
cXVlcnlfdW5yZWYocXVlcnkpOwogCi0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAi
UG9zaXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICIsIGNhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRT
ZWVrUG9zaXRpb246ICVzIiwgR1NUX1RJTUVfQVJHUyhwb3NpdGlvbiksIGJvb2xGb3JQcmludGlu
ZyhtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pKTsKKyAgICBHc3RDbG9j
a1RpbWUgZ3N0cmVhbWVyUG9zaXRpb24gPSBzdGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0
aW9uKTsKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJQb3NpdGlvbiAlIiBHU1Rf
VElNRV9GT1JNQVQgIiwgY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbjogJXMi
LCBHU1RfVElNRV9BUkdTKGdzdHJlYW1lclBvc2l0aW9uKSwgYm9vbEZvclByaW50aW5nKG1fY2Fu
RmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbikpOwogCiAgICAgTWVkaWFUaW1lIHBs
YXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgR3N0Q2xvY2tUaW1l
IGdzdHJlYW1lclBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihwb3NpdGlvbik7
CisKICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZ3N0cmVhbWVyUG9zaXRpb24pKQog
ICAgICAgICBwbGF5YmFja1Bvc2l0aW9uID0gTWVkaWFUaW1lKGdzdHJlYW1lclBvc2l0aW9uLCBH
U1RfU0VDT05EKTsKICAgICBlbHNlIGlmIChtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVr
UG9zaXRpb24pCkBAIC0xNjA5LDYgKzE2MDQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeQog
ICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0cmVhbUlk
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpU
cmFja1R5cGU6OlVua25vd246CisgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE2NjAsNyArMTY1Niw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MoKQogICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gdHJhY2sgdHlwZSBmb3VuZCBmb3Igc3RyZWFtICVz
Iiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCi0gICAgaWYgKChvbGRIYXNWaWRl
byAhPSBtX2hhc1ZpZGVvKSB8fCAob2xkSGFzQXVkaW8gIT0gbV9oYXNBdWRpbykpCisgICAgaWYg
KG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8gfHwgb2xkSGFzQXVkaW8gIT0gbV9oYXNBdWRpbykK
ICAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOwogCiAgICAgaWYgKG1f
aGFzVmlkZW8pCkBAIC0xNzIwLDcgKzE3MTYsOSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgZ2NoYXIqIGNvbnRleHRUeXBlOwotICAgIGdzdF9t
ZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4dFR5cGUpOworICAgIGlm
ICghZ3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250ZXh0VHlwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIkhhbmRsaW5nICVzIG5lZWQtY29udGV4dCBtZXNzYWdlIGZvciAlcyIsIGNvbnRleHRUeXBl
LCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7CiAKICAgICBpZiAoIWdfc3RyY21wMChj
b250ZXh0VHlwZSwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FKSkgewpA
QCAtMTc3MSw3ICsxNzY5LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omhh
bmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiZGVjcnlwdGlvbi1zeXN0ZW0taWQiLCBHX1RZ
UEVfU1RSSU5HLCBwcmVmZXJyZWRLZXlTeXN0ZW1VdWlkLCBudWxscHRyKTsKICAgICAgICAgICAg
IGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKEdTVF9NRVNTQUdFX1NSQyhtZXNz
YWdlKSksIGNvbnRleHQuZ2V0KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEdTVF9X
QVJOSU5HKCJDRE0gaW5zdGFuY2Ugbm90IGluaXRpYWxpemFlZCIpOworICAgICAgICAgICAgR1NU
X1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0xNzgxLDcgKzE3NzksNyBAQCBib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZpZGVvCisv
LyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRlby4KIEZsb2F0U2l6ZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKIHsKICNpZiBVU0UoR1NUUkVBTUVS
X0hPTEVQVU5DSCkKQEAgLTE4MTksMTAgKzE4MTcsOCBAQCBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAgICAgaWYgKCFjYXBzKQogICAg
ICAgICByZXR1cm4gRmxvYXRTaXplKCk7CiAKLSAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUg
Y2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlCi0gICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5v
cmcvc2hvd19idWcuY2dpP2lkPTU5NjU3MQotICAgIC8vIFRPRE86IGhhbmRsZSBwb3NzaWJsZSB0
cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFNlZQotICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUu
b3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUg
Y2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3df
YnVnLmNnaT9pZD01OTY1NzEKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4LiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dp
P2lkPTU5NjMyNgogCiAgICAgLy8gR2V0IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdpbmFsIHNpemUs
IGlmIHRoaXMgZmFpbHMgdGhlCiAgICAgLy8gdmlkZW8tc2luayBoYXMgbGlrZWx5IG5vdCB5ZXQg
bmVnb3RpYXRlZCBpdHMgY2Fwcy4KQEAgLTE4MzQsNyArMTgzMCw3IEBAIEZsb2F0U2l6ZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKIAogI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkKICAgICAvLyBXaGVuIHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nLCBpZiB0aGUgdmlkZW8gaXMgdGFnZ2VkIGFzIHJvdGF0ZWQgOTAgb3IgMjcwIGRlZ3JlZXMs
IHN3YXAgd2lkdGggYW5kIGhlaWdodC4KLSAgICBpZiAobV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJh
dGVkKSB7CisgICAgaWYgKG1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCkgewogICAgICAgICBp
ZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCiAgICAgICAg
ICAgICBvcmlnaW5hbFNpemUgPSBvcmlnaW5hbFNpemUudHJhbnNwb3NlZFNpemUoKTsKICAgICB9
CkBAIC0xODUzLDE5ICsxODQ5LDE5IEBAIEZsb2F0U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKICAgICBkaXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlB
c3BlY3RSYXRpb0dDRDsKIAogICAgIC8vIEFwcGx5IERBUiB0byBvcmlnaW5hbCB2aWRlbyBzaXpl
LiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBm
dW5jdGlvbi4KLSAgICBndWludDY0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAgICB1aW50NjRf
dCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CiAgICAgaWYgKCEob3JpZ2luYWxTaXplLmhlaWdodCgp
ICUgZGlzcGxheUhlaWdodCkpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKICAgICAgICAgd2lkdGggPSBnc3Rf
dXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRo
LCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4o
b3JpZ2luYWxTaXplLmhlaWdodCgpKTsKKyAgICAgICAgaGVpZ2h0ID0gb3JpZ2luYWxTaXplLmhl
aWdodCgpOwogICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFNpemUud2lkdGgoKSAlIGRpc3BsYXlX
aWR0aCkpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiS2VlcGluZyB2
aWRlbyBvcmlnaW5hbCB3aWR0aCIpOwogICAgICAgICBoZWlnaHQgPSBnc3RfdXRpbF91aW50NjRf
c2NhbGVfaW50KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5V2lk
dGgpOwotICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS53
aWR0aCgpKTsKKyAgICAgICAgd2lkdGggPSBvcmlnaW5hbFNpemUud2lkdGgoKTsKICAgICB9IGVs
c2UgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJBcHByb3hpbWF0aW5n
IHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7CiAgICAgICAgIHdpZHRoID0g
Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlX
aWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50
NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGhlaWdodCA9IG9yaWdpbmFsU2l6
ZS5oZWlnaHQoKTsKICAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJO
YXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRfRk9STUFULCB3
aWR0aCwgaGVpZ2h0KTsKQEAgLTE5MjMsMzMgKzE5MTksMTMgQEAgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlKCkgY29uc3QKICAg
ICByZXR1cm4gbV9yZWFkeVN0YXRlOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2l6ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNl
dE11dGVkKGJvb2wgc2hvdWxkTXV0ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0TXV0ZWQoYm9vbCBtdXRlKQotewot
ICAgIGlmICghbV92b2x1bWVFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGN1
cnJlbnRWYWx1ZSA9IG11dGVkKCk7Ci0gICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBtdXRlKQorICAg
IGlmICghbV92b2x1bWVFbGVtZW50IHx8IHNob3VsZE11dGUgPT0gaXNNdXRlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldCBtdXRlZCB0
byAlcyIsIHRvU3RyaW5nKG11dGUpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0X3NldCht
X3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgbXV0ZSwgbnVsbHB0cik7Ci19Ci0KLWJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3ZvbHVtZUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdib29sZWFuIG11
dGVkOwotICAgIGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJm11
dGVkLCBudWxscHRyKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXllciBp
cyBtdXRlZDogJXMiLCB0b1N0cmluZyhzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpLnV0ZjgoKS5k
YXRhKCkpOwotICAgIHJldHVybiBtdXRlZDsKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgIk11dGVkPyAlcyIsIGJvb2xGb3JQcmludGluZyhzaG91bGRNdXRlKSk7CisgICAgZ19vYmpl
Y3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBzaG91bGRNdXRlLCBudWxscHRy
KTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9m
TXV0ZSgpCkBAIC0xOTk5LDcgKzE5NzUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIEdTVF9MT0dfT0JK
RUNUKHBpcGVsaW5lKCksICJNZXNzYWdlICVzIHJlY2VpdmVkIGZyb20gZWxlbWVudCAlcyIsIEdT
VF9NRVNTQUdFX1RZUEVfTkFNRShtZXNzYWdlKSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2Fn
ZSkpOwogICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgewogICAgIGNhc2Ug
R1NUX01FU1NBR0VfRVJST1I6Ci0gICAgICAgIGlmIChtX3Jlc2V0UGlwZWxpbmUgfHwgIW1fbWlz
c2luZ1BsdWdpbkNhbGxiYWNrcy5pc0VtcHR5KCkgfHwgbV9lcnJvck9jY3VyZWQpCisgICAgICAg
IGlmIChtX3Nob3VsZFJlc2V0UGlwZWxpbmUgfHwgIW1fbWlzc2luZ1BsdWdpbkNhbGxiYWNrcy5p
c0VtcHR5KCkgfHwgbV9kaWRFcnJvck9jY3VyKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIub3V0UHRyKCksICZkZWJ1Zy5v
dXRQdHIoKSk7CiAgICAgICAgIEdTVF9FUlJPUigiRXJyb3IgJWQ6ICVzICh1cmw9JXMpIiwgZXJy
LT5jb2RlLCBlcnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpAQCAt
MjAxNCw5ICsxOTkwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0
Y2hlcyhlcnIuZ2V0KCksIEdTVF9SRVNPVVJDRV9FUlJPUiwgR1NUX1JFU09VUkNFX0VSUk9SX05P
VF9GT1VORCkpCiAgICAgICAgICAgICBlcnJvciA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsK
ICAgICAgICAgZWxzZSBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9F
UlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCkpIHsKLSAgICAgICAgICAgIC8v
IExldCB0aGUgbWVkaWFQbGF5ZXJDbGllbnQgaGFuZGxlIHRoZSBzdHJlYW0gZXJyb3IsIGluCi0g
ICAgICAgICAgICAvLyB0aGlzIGNhc2UgdGhlIEhUTUxNZWRpYUVsZW1lbnQgd2lsbCBlbWl0IGEg
c3RhbGxlZAotICAgICAgICAgICAgLy8gZXZlbnQuCisgICAgICAgICAgICAvLyBMZXQgdGhlIG1l
ZGlhUGxheWVyQ2xpZW50IGhhbmRsZSB0aGUgc3RyZWFtIGVycm9yLCBpbiB0aGlzIGNhc2UgdGhl
IEhUTUxNZWRpYUVsZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZCBldmVudC4KICAgICAgICAgICAg
IEdTVF9FUlJPUigiRGVjb2RlIGVycm9yLCBsZXQgdGhlIE1lZGlhIGVsZW1lbnQgZW1pdCBhIHN0
YWxsZWQgZXZlbnQuIik7CiAgICAgICAgICAgICBtX2xvYWRpbmdTdGFsbGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMjAyOSw3ICsyMDAzLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAg
ICAgaWYgKGF0dGVtcHROZXh0TG9jYXRpb24pCiAgICAgICAgICAgICBpc3N1ZUVycm9yID0gIWxv
YWROZXh0TG9jYXRpb24oKTsKICAgICAgICAgaWYgKGlzc3VlRXJyb3IpIHsKLSAgICAgICAgICAg
IG1fZXJyb3JPY2N1cmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZGlkRXJyb3JPY2N1ciA9IHRy
dWU7CiAgICAgICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gZXJyb3IpIHsKICAgICAgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IGVycm9yOwogICAgICAgICAgICAgICAgIG1fcGxheWVy
LT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0yMDQwLDEyICsyMDE0LDEyIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UpCiAgICAgICAgIGRpZEVuZCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNT
QUdFX0FTWU5DX0RPTkU6Ci0gICAgICAgIGlmICghbWVzc2FnZVNvdXJjZUlzUGxheWJpbiB8fCBt
X2RlbGF5aW5nTG9hZCkKKyAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5YmluIHx8IG1f
aXNEZWxheWluZ0xvYWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgYXN5bmNTdGF0ZUNo
YW5nZURvbmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9TVEFURV9D
SEFOR0VEOiB7Ci0gICAgICAgIGlmICghbWVzc2FnZVNvdXJjZUlzUGxheWJpbiB8fCBtX2RlbGF5
aW5nTG9hZCkKKyAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5YmluIHx8IG1faXNEZWxh
eWluZ0xvYWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CiAK
QEAgLTIxNzYsOCArMjE1MCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFpc1JhbmdlUmVxdWVzdCkg
ewotICAgICAgICAgICAgICAgICAgICBtX2lzU3RyZWFtaW5nID0gIWNvbnRlbnRMZW5ndGg7Ci0g
ICAgICAgICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFt
IGRldGVjdGVkIiwgbV9pc1N0cmVhbWluZyA/ICJMaXZlIiA6ICJOb24tbGl2ZSIpOworICAgICAg
ICAgICAgICAgICAgICBtX2lzTGl2ZVN0cmVhbSA9ICFjb250ZW50TGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbSBkZXRlY3Rl
ZCIsIG1faXNMaXZlU3RyZWFtID8gIkxpdmUiIDogIk5vbi1saXZlIik7CiAgICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KQEAgLTIyODUsMTUgKzIyNTksMTUgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhHc3RCdWZmZXJpbmdNb2RlIG1v
ZGUsIGQKIHsKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBt
b2RlOiAlcywgc3RhdHVzOiAlZiUlIiwgZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JVRkZFUklOR19N
T0RFLCBtb2RlKS5kYXRhKCksIHBlcmNlbnRhZ2UpOwogCi0gICAgbV9kb3dubG9hZEZpbmlzaGVk
ID0gcGVyY2VudGFnZSA9PSAxMDA7Ci0gICAgbV9idWZmZXJpbmcgPSAhbV9kb3dubG9hZEZpbmlz
aGVkOworICAgIG1fZGlkRG93bmxvYWRGaW5pc2ggPSBwZXJjZW50YWdlID09IDEwMDsKKyAgICBt
X2lzQnVmZmVyaW5nID0gIW1fZGlkRG93bmxvYWRGaW5pc2g7CiAKICAgICBzd2l0Y2ggKG1vZGUp
IHsKICAgICBjYXNlIEdTVF9CVUZGRVJJTkdfU1RSRUFNOiB7CiAgICAgICAgIHVwZGF0ZU1heFRp
bWVMb2FkZWQocGVyY2VudGFnZSk7CiAKICAgICAgICAgbV9idWZmZXJpbmdQZXJjZW50YWdlID0g
cGVyY2VudGFnZTsKLSAgICAgICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKKyAgICAgICAgaWYg
KG1fZGlkRG93bmxvYWRGaW5pc2gpCiAgICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKIAogICAg
ICAgICBicmVhazsKQEAgLTIzMDMsNyArMjI3Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMoR3N0QnVmZmVyaW5nTW9kZSBtb2RlLCBk
CiAKICAgICAgICAgLy8gTWVkaWEgaXMgbm93IGZ1bGx5IGxvYWRlZC4gSXQgd2lsbCBwbGF5IGV2
ZW4gaWYgbmV0d29yayBjb25uZWN0aW9uIGlzCiAgICAgICAgIC8vIGN1dC4gQnVmZmVyaW5nIGlz
IGRvbmUsIHJlbW92ZSB0aGUgZmlsbCBzb3VyY2UgZnJvbSB0aGUgbWFpbiBsb29wLgotICAgICAg
ICBpZiAobV9kb3dubG9hZEZpbmlzaGVkKQorICAgICAgICBpZiAobV9kaWREb3dubG9hZEZpbmlz
aCkKICAgICAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKIAogICAgICAgICB1cGRhdGVTdGF0
ZXMoKTsKQEAgLTIzMjMsNyArMjI5Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpwcm9jZXNzTXBlZ1RzU2VjdGlvbihHc3RNcGVndHNTZWN0aW9uKiBzZWN0aW9uCiAgICAg
aWYgKHNlY3Rpb24tPnNlY3Rpb25fdHlwZSA9PSBHU1RfTVBFR1RTX1NFQ1RJT05fUE1UKSB7CiAg
ICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVCogcG10ID0gZ3N0X21wZWd0c19zZWN0aW9uX2dldF9w
bXQoc2VjdGlvbik7CiAgICAgICAgIG1fbWV0YWRhdGFUcmFja3MuY2xlYXIoKTsKLSAgICAgICAg
Zm9yIChndWludCBpID0gMDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kpIHsKICAgICAg
ICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVFN0cmVhbSogc3RyZWFtID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR3N0TXBlZ3RzUE1UU3RyZWFtKj4oZ19wdHJfYXJyYXlfaW5kZXgocG10LT5zdHJlYW1zLCBp
KSk7CiAgICAgICAgICAgICBpZiAoc3RyZWFtLT5zdHJlYW1fdHlwZSA9PSAweDA1IHx8IHN0cmVh
bS0+c3RyZWFtX3R5cGUgPj0gMHg4MCkgewogICAgICAgICAgICAgICAgIEF0b21TdHJpbmcgcGlk
ID0gU3RyaW5nOjpudW1iZXIoc3RyZWFtLT5waWQpOwpAQCAtMjM0Miw5ICsyMzE2LDkgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NNcGVnVHNTZWN0aW9uKEdzdE1w
ZWd0c1NlY3Rpb24qIHNlY3Rpb24KICAgICAgICAgICAgICAgICAvLyBleHByZXNzZWQgaW4gaGV4
YWRlY2ltYWwgdXNpbmcgdXBwZXJjYXNlIEFTQ0lJIGhleCBkaWdpdHMuCiAgICAgICAgICAgICAg
ICAgU3RyaW5nIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGU7CiAgICAgICAgICAgICAg
ICAgYXBwZW5kVW5zaWduZWRBc0hleEZpeGVkU2l6ZShzdHJlYW0tPnN0cmVhbV90eXBlLCBpbmJh
bmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlLCAyKTsKLSAgICAgICAgICAgICAgICBmb3IgKGd1
aW50IGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlwdG9ycy0+bGVuOyArK2opIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlwdG9ycy0+bGVu
OyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0TXBlZ3RzRGVzY3JpcHRvciog
ZGVzY3JpcHRvciA9IHN0YXRpY19jYXN0PGNvbnN0IEdzdE1wZWd0c0Rlc2NyaXB0b3IqPihnX3B0
cl9hcnJheV9pbmRleChzdHJlYW0tPmRlc2NyaXB0b3JzLCBqKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoZ3VpbnQgayA9IDA7IGsgPCBkZXNjcmlwdG9yLT5sZW5ndGg7ICsraykKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlc2NyaXB0b3ItPmxlbmd0
aDsgKytrKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGRlc2NyaXB0
b3ItPmRhdGFba10sIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB0cmFjay0+c2V0SW5CYW5kTWV0YWRhdGFUcmFja0Rp
c3BhdGNoVHlwZShpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKTsKQEAgLTIzOTQsMTAg
KzIzNjgsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJs
ZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSogZW50cnkKIAogICAgIGdpbnQ2NCBzdGFydCA9
IC0xLCBzdG9wID0gLTE7CiAgICAgZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyhl
bnRyeSwgJnN0YXJ0LCAmc3RvcCk7CisKKyAgICB1aW50MzJfdCB0cnVuY2F0ZWRHc3RTZWNvbmQg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oR1NUX1NFQ09ORCk7CiAgICAgaWYgKHN0YXJ0ICE9IC0x
KQotICAgICAgICBjdWUtPnNldFN0YXJ0VGltZShNZWRpYVRpbWUoc3RhcnQsIEdTVF9TRUNPTkQp
KTsKKyAgICAgICAgY3VlLT5zZXRTdGFydFRpbWUoTWVkaWFUaW1lKHN0YXRpY19jYXN0PGludDY0
X3Q+KHN0YXJ0KSwgdHJ1bmNhdGVkR3N0U2Vjb25kKSk7CiAgICAgaWYgKHN0b3AgIT0gLTEpCi0g
ICAgICAgIGN1ZS0+c2V0RW5kVGltZShNZWRpYVRpbWUoc3RvcCwgR1NUX1NFQ09ORCkpOworICAg
ICAgICBjdWUtPnNldEVuZFRpbWUoTWVkaWFUaW1lKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0b3Ap
LCB0cnVuY2F0ZWRHc3RTZWNvbmQpKTsKIAogICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdG9j
X2VudHJ5X2dldF90YWdzKGVudHJ5KTsKICAgICBpZiAodGFncykgewpAQCAtMjQ5NSwxNSArMjQ3
MSwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VPbGREb3dubG9h
ZEZpbGVzKGNvbnN0IGNoYXIqIGRvd25sb2FkRmlsZQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQogewotICAgIGlmICghbV9waXBlbGlu
ZSB8fCBtX2Vycm9yT2NjdXJlZCkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgbV9kaWRFcnJvck9j
Y3VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zZWVraW5nKSB7Ci0gICAgICAgIGlm
IChtX3NlZWtJc1BlbmRpbmcpCisgICAgaWYgKG1faXNTZWVraW5nKSB7CisgICAgICAgIGlmICht
X2lzU2Vla1BlbmRpbmcpCiAgICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2Vl
a2VkIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7
CiAgICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
OwogICAgICAgICAgICAgaWYgKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrICE9IG1fc2Vla1RpbWUg
JiYgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWsuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICAg
c2VlayhtX3RpbWVPZk92ZXJsYXBwaW5nU2Vlayk7CkBAIC0yNTIzLDE2ICsyNDk5LDEyIEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphc3luY1N0YXRlQ2hhbmdlRG9uZSgpCiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogewotICAg
IGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZXJyb3JPY2N1
cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0g
bV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0
ZSA9IG1fcmVhZHlTdGF0ZTsKLSAgICBHc3RTdGF0ZSBwZW5kaW5nOwotICAgIEdzdFN0YXRlIHN0
YXRlOworICAgIEdzdFN0YXRlIHBlbmRpbmcsIHN0YXRlOwogICAgIGJvb2wgc3RhdGVSZWFsbHlD
aGFuZ2VkID0gZmFsc2U7CiAKICAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3Vs
dCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZwZW5k
aW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7CkBAIC0yNTUyLDkgKzI1MjQsOSBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgaWYgKG1faXNF
bmRSZWFjaGVkICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IG1fY3VycmVudFN0YXRlIDw9
IEdTVF9TVEFURV9SRUFEWTsKKyAgICAgICAgbV9zaG91bGRSZXNldFBpcGVsaW5lID0gbV9jdXJy
ZW50U3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZOwogCi0gICAgICAgIGJvb2wgZGlkQnVmZmVyaW5n
ID0gbV9idWZmZXJpbmc7CisgICAgICAgIGJvb2wgZGlkQnVmZmVyaW5nID0gbV9pc0J1ZmZlcmlu
ZzsKIAogICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgogICAgICAg
ICBzd2l0Y2ggKG1fY3VycmVudFN0YXRlKSB7CkBAIC0yNTY4LDE3ICsyNTQwLDE3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKICAgICAgICAgY2FzZSBHU1Rf
U1RBVEVfUExBWUlORzoKLSAgICAgICAgICAgIGlmIChtX2J1ZmZlcmluZykgeworICAgICAgICAg
ICAgaWYgKG1faXNCdWZmZXJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJpbmdQ
ZXJjZW50YWdlID09IDEwMCkgewogICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBDb21wbGV0ZS4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9idWZmZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9pc0J1ZmZlcmlu
ZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
bV9kb3dubG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKKyAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBtX2RpZERvd25sb2Fk
RmluaXNoID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOwogICAgICAgICAgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fZGlkRG93bmxvYWRGaW5pc2gpIHsKICAgICAgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAgICAgICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAg
LTI1OTQsMjUgKzI1NjYsMjUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVw
ZGF0ZVN0YXRlcygpCiAKICAgICAgICAgLy8gU3luYyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgogICAg
ICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICAg
ICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgeworICAgICAgICAgICAgaWYgKCFt
X2FyZVZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgewogICAgICAgICAgICAgICAgIG5vdGlmeVBs
YXllck9mVm9sdW1lQ2hhbmdlKCk7CiAgICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRl
KCk7Ci0gICAgICAgICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIG1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGRpZEJ1ZmZlcmluZyAmJiAhbV9idWZmZXJp
bmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAgICBpZiAoZGlk
QnVmZmVyaW5nICYmICFtX2lzQnVmZmVyaW5nICYmICFtX2lzUGF1c2VkICYmIG1fcGxheWJhY2tS
YXRlKSB7CiAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1
ZmZlcmluZ10gUmVzdGFydGluZyBwbGF5YmFjay4iKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VQ
aXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgewotICAgICAg
ICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNQYXVzZWQgPSBmYWxzZTsK
IAotICAgICAgICAgICAgaWYgKChtX2J1ZmZlcmluZyAmJiAhaXNMaXZlU3RyZWFtKCkpIHx8ICFt
X3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgaWYgKChtX2lzQnVmZmVyaW5nICYmIG1faXNM
aXZlU3RyZWFtKSB8fCAhbV9wbGF5YmFja1JhdGUpIHsKICAgICAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVm
ZmVyaW5nLiIpOwogICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRF
X1BBVVNFRCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9w
YXVzZWQgPSB0cnVlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAKICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiT2xkIHN0YXRlOiAlcywgbmV3IHN0YXRlOiAl
cyAocmVxdWVzdGVkOiAlcykiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX29sZFN0YXRl
KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShtX3JlcXVlc3RlZFN0YXRlKSk7CiAgICAgICAgIGlmIChtX3JlcXVl
c3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbV9jdXJyZW50U3RhdGUgPT0gR1NUX1NU
QVRFX1BBVVNFRCkgewpAQCAtMjYzNywyNCArMjYwOSwyNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
U1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIkZhaWx1cmU6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0
ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBl
bmRpbmcpKTsKLSAgICAgICAgLy8gQ2hhbmdlIGZhaWxlZAorICAgICAgICAvLyBDaGFuZ2UgZmFp
bGVkLgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJP
TEw6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5vIHByZXJvbGw6IFN0
YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJl
bnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKIAogICAgICAg
ICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQQVVTRUQgd2l0aG91dCBwcmVyb2xsaW5nLgotICAg
ICAgICBtX2lzU3RyZWFtaW5nID0gdHJ1ZTsKKyAgICAgICAgbV9pc0xpdmVTdHJlYW0gPSB0cnVl
OwogICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKIAogICAgICAgICBpZiAo
bV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQogICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwogICAgICAgICBlbHNlIGlmIChtX2N1cnJl
bnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgICAgICAgICBtX3BhdXNlZCA9IHRy
dWU7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmICht
X2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICAgICAgIG1fcGF1c2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gZmFsc2U7CiAKLSAgICAgICAgaWYg
KCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkKKyAgICAgICAgaWYgKCFtX2lzUGF1c2VkICYm
IG1fcGxheWJhY2tSYXRlKQogICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RB
VEVfUExBWUlORyk7CiAKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKQEAgLTI2ODAsMTEgKzI2NTIsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAKICAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NU
QVRFX0NIQU5HRV9TVUNDRVNTICYmIG1fY3VycmVudFN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQp
IHsKICAgICAgICAgdXBkYXRlUGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIGlmIChtX3NlZWtJc1Bl
bmRpbmcpIHsKKyAgICAgICAgaWYgKG1faXNTZWVrUGVuZGluZykgewogICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIGNvbW1pdHRpbmcgcGVuZGluZyBzZWVr
IHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBtX3NlZWtJc1BlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fc2Vla2luZyA9IGRvU2Vl
ayhtX3NlZWtUaW1lLCBtX3BsYXllci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+
KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7Ci0gICAgICAg
ICAgICBpZiAoIW1fc2Vla2luZykgeworICAgICAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gZmFs
c2U7CisgICAgICAgICAgICBtX2lzU2Vla2luZyA9IGRvU2VlayhtX3NlZWtUaW1lLCBtX3BsYXll
ci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0gg
fCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7CisgICAgICAgICAgICBpZiAoIW1faXNTZWVraW5n
KSB7CiAgICAgICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKTsKICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJb
U2Vla10gc2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCku
ZGF0YSgpKTsKICAgICAgICAgICAgIH0KQEAgLTI3MTgsNyArMjY5MCw3IEBAIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbnMgPSBnc3Rfc3RydWN0dXJlX2dl
dF92YWx1ZShtX21lZGlhTG9jYXRpb25zLCAibG9jYXRpb25zIik7Ci0gICAgY29uc3QgZ2NoYXIq
IG5ld0xvY2F0aW9uID0gbnVsbHB0cjsKKyAgICBjb25zdCBjaGFyKiBuZXdMb2NhdGlvbiA9IG51
bGxwdHI7CiAKICAgICBpZiAoIWxvY2F0aW9ucykgewogICAgICAgICAvLyBGYWxsYmFjayBvbiBu
ZXctbG9jYXRpb24gc3RyaW5nLgpAQCAtMjc3NSw3ICsyNzQ3LDcgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24oKQogICAgICAgICAgICAgbV9wbGF5
ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAKICAgICAgICAgICAgIC8vIFJlc2V0IHBpcGVsaW5l
IHN0YXRlLgotICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKKyAgICAgICAgICAg
IG1fc2hvdWxkUmVzZXRQaXBlbGluZSA9IHRydWU7CiAKICAgICAgICAgICAgIEdzdFN0YXRlIHN0
YXRlOwogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
ICZzdGF0ZSwgbnVsbHB0ciwgMCk7CkBAIC0yODAxLDcgKzI3NzMsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKCkKICAgICAvLyBwb3NpdGlvbiBpcyBub3QgYWx3
YXlzIHJlcG9ydGVkIGFzIDAgZm9yIGluc3RhbmNlLgogICAgIG1fY2FjaGVkUG9zaXRpb24gPSBN
ZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAgICAgTWVkaWFUaW1lIG5vdyA9IGN1cnJlbnRNZWRp
YVRpbWUoKTsKLSAgICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmICFtX3NlZWtp
bmcpIHsKKyAgICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmICFtX2lzU2Vla2lu
ZykgewogICAgICAgICBtX2NhY2hlZER1cmF0aW9uID0gbm93OwogICAgICAgICBtX3BsYXllci0+
ZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgfQpAQCAtMjgwOSw5ICsyNzgxLDkgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCiAgICAgbV9pc0VuZFJlYWNoZWQgPSB0
cnVlOwogCiAgICAgaWYgKCFtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc0xvb3Bpbmco
KSkgewotICAgICAgICBtX3BhdXNlZCA9IHRydWU7CisgICAgICAgIG1faXNQYXVzZWQgPSB0cnVl
OwogICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgICAg
IG1fZG93bmxvYWRGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICBtX2RpZERvd25sb2FkRmluaXNo
ID0gZmFsc2U7CiAgICAgfQogICAgIHRpbWVDaGFuZ2VkKCk7CiB9CkBAIC0yODY0LDEyICsyODM2
LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVEb3dubG9hZEJ1
ZmZlcmluZ0ZsYWcoKQogICAgIHVuc2lnbmVkIGZsYWdEb3dubG9hZCA9IGdldEdzdFBsYXlGbGFn
KCJkb3dubG9hZCIpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdG9wIGRvd25sb2FkaW5n
IGlmIHdlIGFscmVhZHkgc3RhcnRlZCBpdC4KLSAgICBpZiAoZmxhZ3MgJiBmbGFnRG93bmxvYWQg
JiYgbV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFtX3Jlc2V0UGlw
ZWxpbmUpIHsKKyAgICBpZiAoZmxhZ3MgJiBmbGFnRG93bmxvYWQgJiYgbV9yZWFkeVN0YXRlID4g
TWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFtX3Nob3VsZFJlc2V0UGlwZWxpbmUpIHsKICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRG93bmxvYWQgYWxyZWFkeSBzdGFy
dGVkLCBub3Qgc3RhcnRpbmcgYWdhaW4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGJvb2wgc2hvdWxkRG93bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVsb2FkID09IE1l
ZGlhUGxheWVyOjpBdXRvOworICAgIGJvb2wgc2hvdWxkRG93bmxvYWQgPSAhbV9pc0xpdmVTdHJl
YW0gJiYgbV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpBdXRvOwogICAgIGlmIChzaG91bGREb3du
bG9hZCkgewogICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVuYWJsaW5nIG9u
LWRpc2sgYnVmZmVyaW5nIik7CiAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgp
LCAiZmxhZ3MiLCBmbGFncyB8IGZsYWdEb3dubG9hZCwgbnVsbHB0cik7CkBAIC0yODgzLDcgKzI4
NTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRG93bmxvYWRC
dWZmZXJpbmdGbGFnKCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGlwZWxpbmVOYW1lKQog
ewotICAgIGNvbnN0IGdjaGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKKyAgICBjb25zdCBj
aGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKIAogICAgIC8vIE1TRSBkb2Vzbid0IHN1cHBv
cnQgcGxheWJpbjMuIE1lZGlhc3RyZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1bGFyCiAgICAg
Ly8gcGxheWJhY2sgY2FuIHVzZSBwbGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUgV0VCS0lUX0dT
VF9VU0VfUExBWUJJTjMKQEAgLTI5MDYsOCArMjg3OCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJp
bmcmCiAKICAgICBtX2lzTGVnYWN5UGxheWJpbiA9ICFnX3N0cmNtcDAocGxheWJpbk5hbWUsICJw
bGF5YmluIik7CiAKLSAgICAvLyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSByZXR1cm5zIGEg
ZmxvYXRpbmcgcmVmZXJlbmNlIHNvCi0gICAgLy8gd2Ugc2hvdWxkIG5vdCBhZG9wdC4KICAgICBz
dGF0aWMgQXRvbWljPHVpbnQzMl90PiBwaXBlbGluZUlkOwogICAgIHNldFBpcGVsaW5lKGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZShwbGF5YmluTmFtZSwKICAgICAgICAgKHBpcGVsaW5lTmFtZS5p
c0VtcHR5KCkgPyBtYWtlU3RyaW5nKCJtZWRpYS1wbGF5ZXItIiwgcGlwZWxpbmVJZC5leGNoYW5n
ZUFkZCgxKSkgOiBwaXBlbGluZU5hbWUpLnV0ZjgoKS5kYXRhKCkpKTsKQEAgLTI5NzMsNyArMjk0
Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5Qmlu
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAKICAgICBjb25maWd1cmVQbGF5U2luaygp
OwogCi0gICAgaWYgKG1fcHJlc2VydmVzUGl0Y2gpIHsKKyAgICBpZiAobV9zaG91bGRQcmVzZXJ2
ZVBpdGNoKSB7CiAgICAgICAgIEdzdEVsZW1lbnQqIHNjYWxlID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJzY2FsZXRlbXBvIiwgbnVsbHB0cik7CiAKICAgICAgICAgaWYgKCFzY2FsZSkKQEAg
LTI5ODIsNyArMjk1Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAgICAgICAgICAgICBn
X29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWZpbHRlciIsIHNjYWxlLCBudWxs
cHRyKTsKICAgICB9CiAKLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgewor
ICAgIGlmICghbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKSB7CiAgICAgICAgIC8vIElmIG5v
dCB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgbGV0IEdTdHJlYW1lciBoYW5kbGUKICAg
ICAgICAgLy8gdGhlIGltYWdlLW9yaWVudGF0aW9uIHRhZy4KICAgICAgICAgR3N0RWxlbWVudCog
dmlkZW9GbGlwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb2ZsaXAiLCBudWxscHRy
KTsKQEAgLTMwMDcsNyArMjk3Nyw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpkaWRQYXNzQ09SU0FjY2Vzc0NoZWNrKCkgY29uc3QKIAogYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNhblNhdmVNZWRpYURhdGEoKSBjb25zdAogewotICAgIGlmIChpc0xpdmVT
dHJlYW0oKSkKKyAgICBpZiAobV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChtX3VybC5pc0xvY2FsRmlsZSgpKQpAQCAtMzAyNyw3ICsyOTk3LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZCgpCiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hh
bmdlZCgpCiB7Ci0gICAgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkID0gbV9wbGF5ZXIgJiYg
bV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQoKTsKKyAgICBtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQgPSBtX3BsYXllciAmJiBtX3Bs
YXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgp
OwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQpAQCAtMzA3NSw3ICszMDQ1LDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hUZXh0dXJlVG9Db21wb3NpdG9y
KCkKICAgICAgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVy
PiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUu
Z2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZsYWdzLCAhbV91
c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RW
aWRlb0ZyYW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhv
bGRlcj4obV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1h
cHBlckZsYWdzLCAhbV9pc1VzaW5nRmFsbGJhY2tWaWRlb1NpbmspOwogCiAgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVm
ZmVyOwogICAgICAgICAgICAgaWYgKGZyYW1lSG9sZGVyLT5oYXNNYXBwZWRUZXh0dXJlcygpKSB7
CkBAIC0zMTE3LDIzICszMDg3LDIzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpyZXBhaW50KCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJS
ZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQogewotICAgIGJvb2wgdHJpZ2dlclJlc2l6ZTsKKyAg
ICBib29sIHNob3VsZFRyaWdnZXJSZXNpemU7CiAgICAgewogICAgICAgICBhdXRvIHNhbXBsZUxv
Y2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotICAgICAgICB0cmlnZ2VyUmVzaXplID0g
IW1fc2FtcGxlOworICAgICAgICBzaG91bGRUcmlnZ2VyUmVzaXplID0gIW1fc2FtcGxlOwogICAg
ICAgICBtX3NhbXBsZSA9IHNhbXBsZTsKICAgICB9CiAKLSAgICBpZiAodHJpZ2dlclJlc2l6ZSkg
eworICAgIGlmIChzaG91bGRUcmlnZ2VyUmVzaXplKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkZpcnN0IHNhbXBsZSByZWFjaGVkIHRoZSBzaW5rLCB0cmlnZ2VyaW5n
IHZpZGVvIGRpbWVuc2lvbnMgdXBkYXRlIik7CiAgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShN
YWluVGhyZWFkTm90aWZpY2F0aW9uOjpTaXplQ2hhbmdlZCwgW3RoaXNdIHsKICAgICAgICAgICAg
IG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAo
IW1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgeworICAgIGlmICghbV9jYW5SZW5kZXJpbmdC
ZUFjY2VsZXJhdGVkKSB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4KTsK
LSAgICAgICAgaWYgKG1fZGVzdHJveWluZykKKyAgICAgICAgaWYgKG1faXNCZWluZ0Rlc3Ryb3ll
ZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kcmF3VGltZXIuc3RhcnRPbmVTaG90
KDBfcyk7CiAgICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1fZHJhd011dGV4KTsKQEAgLTMx
NDEsNyArMzExMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2Vy
UmVwYWludChHc3RTYW1wbGUqIHNhbXBsZSkKICAgICB9CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykgeworICAgIGlmIChtX2lz
VXNpbmdGYWxsYmFja1ZpZGVvU2luaykgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9kcmF3
TXV0ZXgpOwogICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KICAgICAgICAgICAgIFt0aGlz
XShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKQEAgLTMxNzcsMTAgKzMx
NDcsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhbmNlbFJlcGFpbnQo
Ym9vbCBkZXN0cm95aW5nKQogICAgIC8vCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVz
ZWQgd2hlbiBkZXN0cm95aW5nIHRoZSBwbGF5ZXIgKGRlc3Ryb3lpbmcgcGFyYW1ldGVyIGlzIHRy
dWUpLCB0byByZWxlYXNlIHRoZSBnc3RyZWFtZXIgdGhyZWFkIGZyb20KICAgICAvLyBtX2RyYXdD
b25kaXRpb24gYW5kIHRvIGVuc3VyZSB0aGF0IG5ldyB0cmlnZ2VyUmVwYWludCBjYWxscyB3b24n
dCB3YWl0IG9uIG1fZHJhd0NvbmRpdGlvbi4KLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2Nl
bGVyYXRlZCkgeworICAgIGlmICghbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKSB7CiAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4KTsKICAgICAgICAgbV9kcmF3VGltZXIu
c3RvcCgpOwotICAgICAgICBtX2Rlc3Ryb3lpbmcgPSBkZXN0cm95aW5nOworICAgICAgICBtX2lz
QmVpbmdEZXN0cm95ZWQgPSBkZXN0cm95aW5nOwogICAgICAgICBtX2RyYXdDb25kaXRpb24ubm90
aWZ5T25lKCk7CiAgICAgfQogfQpAQCAtMzI2Miw5ICszMjMyLDkgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWMKICAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0SW5wdXRDYXBzID0gY2FwczsKICAg
ICAgICAgICAgIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19j
b3B5KGNhcHMpKTsKICNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0gICAgICAg
ICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhB
KCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIkJHUngiOworICAgICAgICAgICAgY29uc3QgY2hhciog
Zm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pID8gIlJH
QkEiIDogIkJHUngiOwogI2Vsc2UKLSAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBmb3JtYXRTdHJp
bmcgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiUkdC
eCI7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5G
T19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiUkdCeCI7CiAjZW5kaWYKICAgICAg
ICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUobV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzLmdldCgp
LCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgZm9ybWF0U3RyaW5nLCBudWxscHRyKTsKICAgICAg
ICAgICAgIGlmICghZ3N0X2dsX2NvbG9yX2NvbnZlcnRfc2V0X2NhcHMobV9jb2xvckNvbnZlcnQu
Z2V0KCksIGNhcHMsIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSkpCkBAIC0zMjg1LDcg
KzMyNTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogICAgIGlmICghZ3N0SW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQuZHJhd0ltYWdlKGdzdEltYWdlLT5pbWFnZSgp
LCByZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7IENvbXBvc2l0ZUNvcHksIG1fcmVuZGVyaW5nQ2Fu
QmVBY2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA6IEltYWdlT3JpZW50YXRp
b24oKSB9KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShnc3RJbWFnZS0+aW1hZ2UoKSwgcmVjdCwg
Z3N0SW1hZ2UtPnJlY3QoKSwgeyBDb21wb3NpdGVDb3B5LCBtX2NhblJlbmRlcmluZ0JlQWNjZWxl
cmF0ZWQgPyBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gOiBJbWFnZU9yaWVudGF0aW9uKCkgfSk7
CiB9CiAKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQpAQCAtMzI5Myw3ICszMjYzLDcgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4
dHVyZShHcmFwaGljc0NvbnQKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAKLSAgICBp
ZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQorICAgIGlmIChtX2lzVXNpbmdGYWxsYmFja1Zp
ZGVvU2luaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHByZW11bHRpcGx5QWxw
aGEpCkBAIC0zMzI1LDcgKzMyOTUsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udAogTmF0aXZl
SW1hZ2VQdHIgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRUaW1lKCkKIHsKICNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykKKyAgICBpZiAobV9pc1VzaW5n
RmFsbGJhY2tWaWRlb1NpbmspCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBz
YW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKQEAgLTM0MDYsNyArMzM3Niw3
IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bW92aWVMb2FkVHlwZSgpIGNvbnN0CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVBs
YXllcjo6SGF2ZU5vdGhpbmcpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6VW5rbm93bjsK
IAotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKKyAgICBpZiAobV9pc0xpdmVTdHJlYW0pCiAgICAg
ICAgIHJldHVybiBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKIAogICAgIHJldHVybiBNZWRpYVBs
YXllcjo6RG93bmxvYWQ7CkBAIC0zNDg0LDEyICszNDU0LDEyIEBAIEdzdEVsZW1lbnQqIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rKCkKICNlbmRpZgogCiAjaWYg
VVNFKEdTVFJFQU1FUl9HTCkKLSAgICBpZiAobV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKQor
ICAgIGlmIChtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1fdmlkZW9TaW5r
ID0gY3JlYXRlVmlkZW9TaW5rR0woKTsKICNlbmRpZgogCiAgICAgaWYgKCFtX3ZpZGVvU2luaykg
ewotICAgICAgICBtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmsgPSB0cnVlOworICAgICAgICBtX2lz
VXNpbmdGYWxsYmFja1ZpZGVvU2luayA9IHRydWU7CiAgICAgICAgIG1fdmlkZW9TaW5rID0gd2Vi
a2l0VmlkZW9TaW5rTmV3KCk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Zp
ZGVvU2luay5nZXQoKSwgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyhyZXBhaW50Q2Fs
bGJhY2spLCB0aGlzKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdmlkZW9T
aW5rLmdldCgpLCAicmVwYWludC1jYW5jZWxsZWQiLCBHX0NBTExCQUNLKHJlcGFpbnRDYW5jZWxs
ZWRDYWxsYmFjayksIHRoaXMpOwpAQCAtMzU0Myw3ICszNTEzLDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9sdW1l
KiB2b2x1bWUKIAogdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkZWNvZGVk
RnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgZ3VpbnQ2NCBkZWNvZGVkRnJhbWVzID0gMDsKKyAg
ICB1aW50NjRfdCBkZWNvZGVkRnJhbWVzID0gMDsKICAgICBpZiAobV9mcHNTaW5rKQogICAgICAg
ICBnX29iamVjdF9nZXQobV9mcHNTaW5rLmdldCgpLCAiZnJhbWVzLXJlbmRlcmVkIiwgJmRlY29k
ZWRGcmFtZXMsIG51bGxwdHIpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVj
b2RlZEZyYW1lcyk7CkBAIC0zNTUxLDcgKzM1MjEsNyBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmRlY29kZWRGcmFtZUNvdW50KCkgY29uc3QKIAogdW5zaWduZWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0g
ICAgZ3VpbnQ2NCBmcmFtZXNEcm9wcGVkID0gMDsKKyAgICB1aW50NjRfdCBmcmFtZXNEcm9wcGVk
ID0gMDsKICAgICBpZiAobV9mcHNTaW5rKQogICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5r
LmdldCgpLCAiZnJhbWVzLWRyb3BwZWQiLCAmZnJhbWVzRHJvcHBlZCwgbnVsbHB0cik7CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcmFtZXNEcm9wcGVkKTsKQEAgLTM2NDksOCAr
MzYxOSw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdHRlbXB0VG9EZWNy
eXB0V2l0aEluc3RhbmNlKENETUluc3RhbmNlJiBpbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKQogewotICAg
IGJvb2wgZXZlbnRIYW5kbGVkID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudChwaXBlbGluZSgpLCBn
c3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09CLCBnc3Rf
c3RydWN0dXJlX25ld19lbXB0eSgiYXR0ZW1wdC10by1kZWNyeXB0IikpKTsKLSAgICBHU1RfREVC
VUcoImF0dGVtcHRpbmcgdG8gZGVjcnlwdCwgZXZlbnQgaGFuZGxlZCAlcyIsIGJvb2xGb3JQcmlu
dGluZyhldmVudEhhbmRsZWQpKTsKKyAgICBib29sIHdhc0V2ZW50SGFuZGxlZCA9IGdzdF9lbGVt
ZW50X3NlbmRfZXZlbnQocGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25ld19jdXN0b20oR1NUX0VWRU5U
X0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImF0dGVtcHQt
dG8tZGVjcnlwdCIpKSk7CisgICAgR1NUX0RFQlVHKCJhdHRlbXB0aW5nIHRvIGRlY3J5cHQsIGV2
ZW50IGhhbmRsZWQgJXMiLCBib29sRm9yUHJpbnRpbmcod2FzRXZlbnRIYW5kbGVkKSk7CiB9CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVQcm90ZWN0aW9uRXZlbnQo
R3N0RXZlbnQqIGV2ZW50KQpAQCAtMzY2OSwxNSArMzYzOSwxNSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkK
ICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBp
bml0RGF0YX0pOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2Fp
dGluZ0ZvcktleShib29sIHdhaXRpbmdGb3JLZXkpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIGlzV2FpdGluZ0ZvcktleSkKIHsKICAgICAv
LyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ugb3IgaWYgd2UgYXJlIHJlcXVl
c3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2FpdGluZyBkZWNy
eXB0b3JzLgotICAgIEdTVF9UUkFDRSgid2FpdGluZ0ZvcktleSAlcywgbV93YWl0aW5nRm9yS2V5
ICVzIiwgYm9vbEZvclByaW50aW5nKHdhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV93
YWl0aW5nRm9yS2V5KSk7Ci0gICAgaWYgKHdhaXRpbmdGb3JLZXkgPT0gbV93YWl0aW5nRm9yS2V5
IHx8ICghd2FpdGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQorICAgIEdTVF9U
UkFDRSgiaXNXYWl0aW5nRm9yS2V5ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQ
cmludGluZyhpc1dhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JL
ZXkpKTsKKyAgICBpZiAoaXNXYWl0aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICgh
aXNXYWl0aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fd2FpdGluZ0ZvcktleSA9IHdhaXRpbmdGb3JLZXk7Ci0gICAgR1NUX0RFQlVH
KCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAlcyIsIGJvb2xGb3JQcmludGluZyhtX3dhaXRpbmdG
b3JLZXkpKTsKKyAgICBtX2lzV2FpdGluZ0ZvcktleSA9IGlzV2FpdGluZ0ZvcktleTsKKyAgICBH
U1RfREVCVUcoIndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1f
aXNXYWl0aW5nRm9yS2V5KSk7CiAgICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRl
eCAyNzkwZWMzZGI1ZGE5M2NkNjg5ZTIzYmMyOWMyZDUzZjE3YThlM2JiLi4yY2E4NmQ0ZGZiZDMy
YjM5ODZlZDMxYzQ5NGJmNGFiOWU4NDVjNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0xMjAsMTcgKzEyMCwxNCBAQCBjbGFzcyBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
LCBwdWJsaWMgQwogewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KCk7Ci0KICAgICBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIoKTsKIAotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7
CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZXh0ZW5kZWRTdXBwb3J0c1R5
cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYsIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUpOwogCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1faGFzVmlkZW87IH0KLSAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9oYXNBdWRpbzsgfQotCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1faGFzVmlkZW87IH0KKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9oYXNBdWRpbzsgfQogICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcgJnVybCkgb3ZlcnJp
ZGU7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5n
JiB1cmwsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopIG92ZXJyaWRlOwpAQCAtMTM4LDgxICsx
MzUsNTcgQEAgcHVibGljOgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgdm9pZCBsb2Fk
KE1lZGlhU3RyZWFtUHJpdmF0ZSYpIG92ZXJyaWRlOwogI2VuZGlmCi0gICAgdm9pZCBjb21taXRM
b2FkKCk7Ci0gICAgdm9pZCBjYW5jZWxMb2FkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHByZXBh
cmVUb1BsYXkoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGNhbmNlbExvYWQoKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb1BsYXkoKSBmaW5hbDsKKyAg
ICB2b2lkIHBsYXkoKSBmaW5hbDsKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBwYXVzZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHNlZWtpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3NlZWtpbmc7IH0KKyAgICBib29sIHBhdXNlZCgpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNTZWVraW5n
OyB9CiAgICAgdm9pZCBzZWVrKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwotCi0gICAgTWVk
aWFUaW1lIHBsYXRmb3JtRHVyYXRpb24oKSBjb25zdDsKLQogICAgIHZvaWQgc2V0UmF0ZShmbG9h
dCkgb3ZlcnJpZGU7Ci0gICAgZG91YmxlIHJhdGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFByZXNlcnZlc1BpdGNoKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UHJlbG9hZChN
ZWRpYVBsYXllcjo6UHJlbG9hZCkgb3ZlcnJpZGU7Ci0KKyAgICBkb3VibGUgcmF0ZSgpIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgZmluYWw7IAorICAgIHZv
aWQgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCkgZmluYWw7CiAgICAgRmxvYXRTaXpl
IG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldFZvbHVtZShmbG9hdCkg
b3ZlcnJpZGU7Ci0gICAgZmxvYXQgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IHNldE11dGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgbXV0ZWQoKSBjb25zdDsKLQotICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgc2V0
U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaXplQ2hhbmdlZCgpOwot
CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOworICAgIGZsb2F0IHZvbHVtZSgpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7CisgICAgTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdCBmaW5hbDsKKyAgICBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikg
ZmluYWw7CiAgICAgLy8gUHJlZmVyIE1lZGlhVGltZSBiYXNlZCBtZXRob2RzIG92ZXIgZmxvYXQg
YmFzZWQuCi0KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGR1
cmF0aW9uTWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9Ci0gICAgZG91YmxlIGR1cmF0aW9uRG91Ymxl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0RvdWJsZSgp
OyB9Ci0gICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50TWVk
aWFUaW1lKCkudG9GbG9hdCgpOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lRG91YmxlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gY3VycmVudE1lZGlhVGltZSgpLnRvRG91YmxlKCk7IH0KKyAg
ICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGR1cmF0aW9uTWVkaWFUaW1l
KCkudG9GbG9hdCgpOyB9CisgICAgZG91YmxlIGR1cmF0aW9uRG91YmxlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0RvdWJsZSgpOyB9CisgICAgTWVkaWFUaW1l
IGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Q7CisgICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9CisgICAgZG91
YmxlIGN1cnJlbnRUaW1lRG91YmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gY3VycmVudE1lZGlh
VGltZSgpLnRvRG91YmxlKCk7IH0KICAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1
ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZWVrKGZsb2F0IHRpbWUpIG92ZXJy
aWRlIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhGbG9hdCh0aW1lKSk7IH0KLSAgICB2b2lk
IHNlZWtEb3VibGUoZG91YmxlIHRpbWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0
ZVdpdGhEb3VibGUodGltZSkpOyB9Ci0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxvYXQoKTsgfQor
ICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lKSBmaW5hbCB7IHNlZWsoTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRmxvYXQodGltZSkpOyB9CisgICAgdm9pZCBzZWVrRG91YmxlKGRvdWJsZSB0aW1lKSBmaW5h
bCB7IHNlZWsoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpKTsgfQorICAgIGZsb2F0
IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1heE1lZGlhVGltZVNlZWth
YmxlKCkudG9GbG9hdCgpOyB9CiAgICAgTWVkaWFUaW1lIG1heE1lZGlhVGltZVNlZWthYmxlKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgZG91YmxlIG1pblRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1pbk1lZGlhVGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9Ci0gICAgTWVk
aWFUaW1lIG1pbk1lZGlhVGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTWVk
aWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0KLSAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcygpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgT3B0aW9uYWw8Ym9vbD4gd291bGRUYWludE9yaWdpbihjb25zdCBTZWN1cml0
eU9yaWdpbiYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaW11bGF0ZUF1ZGlvSW50ZXJy
dXB0aW9uKCkgb3ZlcnJpZGU7Ci0KKyAgICBkb3VibGUgbWluVGltZVNlZWthYmxlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbWluTWVkaWFUaW1lU2Vla2FibGUoKS50b0Zsb2F0KCk7IH0KKyAgICBN
ZWRpYVRpbWUgbWluTWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBNZWRp
YVRpbWU6Onplcm9UaW1lKCk7IH0KKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0
IGZpbmFsOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzKCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IGZpbmFsOworICAgIE9w
dGlvbmFsPGJvb2w+IHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mKSBjb25z
dCBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKSBmaW5hbDsKICNp
ZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNl
UHJvdmlkZXIoKSBvdmVycmlkZTsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJj
ZVByb3ZpZGVyKCkgZmluYWw7CiAjZW5kaWYKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVu
KCkgY29uc3QgZmluYWw7CisgICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2Fk
VHlwZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBkZWNvZGVkRnJhbWVDb3Vu
dCgpIGNvbnN0IGZpbmFsOworICAgIHVuc2lnbmVkIGRyb3BwZWRGcmFtZUNvdW50KCkgY29uc3Qg
ZmluYWw7CisgICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QgZmluYWw7
CisgICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QgZmluYWw7CiAKLSAg
ICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTWVkaWFQ
bGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXI7IH0K
LQotICAgIHVuc2lnbmVkIGRlY29kZWRGcmFtZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dW5zaWduZWQgZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB1bnNpZ25l
ZCBhdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB1bnNpZ25lZCB2
aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgYWNjZWxl
cmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGFjY2VsZXJh
dGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgZmluYWw7CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRl
OwpAQCAtMjI1LDI5ICsxOTgsMjMgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoRU5D
UllQVEVEX01FRElBKQotICAgIHZvaWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgaGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50Kik7Ci0gICAg
dmlydHVhbCB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOworICAgIHZv
aWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYpIGZpbmFsOworICAgIHZvaWQgY2Rt
SW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYpIGZpbmFsOwogICAgIHZvaWQgYXR0ZW1wdFRv
RGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOwotICAgIHZvaWQgaW5pdGlh
bGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7Ci0gICAgdm9pZCBzZXRXYWl0aW5n
Rm9yS2V5KGJvb2wpOwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSgpIGNvbnN0IG92ZXJyaWRlOwot
I2VuZGlmCisgICAgYm9vbCB3YWl0aW5nRm9yS2V5KCkgY29uc3QgZmluYWw7CiAKLSAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUg
ZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYs
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUpOworICAgIHZvaWQgaGFuZGxlUHJvdGVjdGlvbkV2
ZW50KEdzdEV2ZW50Kik7CisjZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAgICAgYm9v
bCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2b2lkIHNldFZp
ZGVvU291cmNlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbik7Ci0gICAgR3N0RWxlbWVudCog
cGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CiAgICAgdm9pZCBl
bmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUsIHVuc2lnbmVk
IGluZGV4KTsKIAogICAgIC8vIEFwcGVuZCBwaXBlbGluZSBpbnRlcmZhY2UKKyAgICAvLyBGSVhN
RTogVXNlIHRoZSBjbGllbnQgaW50ZXJmYWNlIHBhdHRlcm4sIEFwcGVuZFBpcGVsaW5lIGRvZXMg
bm90IG5lZWQgdGhlIGZ1bGwgaW50ZXJmYWNlIHRvIHRoaXMgY2xhc3MganVzdCBmb3IgdGhlc2Ug
dHdvIGZ1bmN0aW9ucy4KICAgICBib29sIGhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqKTsK
ICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwogCkBAIC0yNzAsMTUgKzIzNywx
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkID0gMSA8PCA3
CiAgICAgfTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCB7IHJldHVy
biBtX2lzU3RyZWFtaW5nOyB9Ci0gICAgTWVkaWFUaW1lIG1heFRpbWVMb2FkZWQoKSBjb25zdDsK
KyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworI2lmIEVOQUJMRShFTkNSWVBURURfTUVE
SUEpCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlT
eXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZv
aWQgZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVNldHVwKEdzdEVs
ZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgY29uZmlndXJlUGxheVNpbmsoKSB7IH0KICAgICB2
aXJ0dWFsIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSk7CiAKLQogI2lmIFVTRShH
U1RSRUFNRVJfSE9MRVBVTkNIKQogICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUhvbGVQdW5jaFZpZGVv
U2luaygpOwogICAgIHZvaWQgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKQEAgLTI5MiwxMCAr
MjYwLDEwIEBAIHByb3RlY3RlZDoKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgdm9p
ZCBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOwogI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQg
c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5l
ZWRlZCgpIGZpbmFsOwogI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZO
ZWVkZWQoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eT4gcHJveHkoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQo
KSBmaW5hbDsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTMxNyw5ICsyODUsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgc3RhdGljIHZvaWQgdm9sdW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciopOwogICAgIHN0YXRpYyB2b2lkIG11dGVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CiAKLSAgICAvLyBGSVhNRTogV2hlcmUgaXMgdGhpcyB1
c2VkPwotICAgIHZvaWQgaGFuZGxlUGx1Z2luSW5zdGFsbGVyUmVzdWx0KEdzdEluc3RhbGxQbHVn
aW5zUmV0dXJuKTsKLQogICAgIHZvaWQgcmVhZHlUaW1lckZpcmVkKCk7CiAKICAgICB2b2lkIG5v
dGlmeVBsYXllck9mVmlkZW8oKTsKQEAgLTM1OCwyMiArMzIzLDIyIEBAIHByb3RlY3RlZDoKICAg
ICBtdXRhYmxlIE1lZGlhVGltZSBtX2NhY2hlZFBvc2l0aW9uOwogICAgIG11dGFibGUgTWVkaWFU
aW1lIG1fY2FjaGVkRHVyYXRpb247CiAgICAgYm9vbCBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNo
ZWRTZWVrUG9zaXRpb24geyBmYWxzZSB9OwotICAgIGJvb2wgbV9jaGFuZ2luZ1JhdGUgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9kb3dubG9hZEZpbmlzaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
ZXJyb3JPY2N1cmVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNDaGFuZ2luZ1JhdGUgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9kaWREb3dubG9hZEZpbmlzaCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2RpZEVycm9yT2NjdXIgeyBmYWxzZSB9OwogICAgIG11dGFibGUgYm9vbCBtX2lzRW5kUmVhY2hl
ZCB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBib29sIG1faXNTdHJlYW1pbmcgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9wYXVzZWQgeyB0cnVlIH07CisgICAgbXV0YWJsZSBib29sIG1faXNMaXZlU3Ry
ZWFtIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQYXVzZWQgeyB0cnVlIH07CiAgICAgZmxvYXQg
bV9wbGF5YmFja1JhdGUgeyAxIH07CiAgICAgR3N0U3RhdGUgbV9jdXJyZW50U3RhdGU7CiAgICAg
R3N0U3RhdGUgbV9vbGRTdGF0ZTsKICAgICBHc3RTdGF0ZSBtX3JlcXVlc3RlZFN0YXRlIHsgR1NU
X1NUQVRFX1ZPSURfUEVORElORyB9OwotICAgIGJvb2wgbV9yZXNldFBpcGVsaW5lIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1fc2Vla2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3NlZWtJc1BlbmRp
bmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRSZXNldFBpcGVsaW5lIHsgZmFsc2UgfTsK
KyAgICBib29sIG1faXNTZWVraW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNTZWVrUGVuZGlu
ZyB7IGZhbHNlIH07CiAgICAgTWVkaWFUaW1lIG1fc2Vla1RpbWU7CiAgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBtX3NvdXJjZSB7IG51bGxwdHIgfTsKLSAgICBib29sIG1fdm9sdW1lQW5kTXV0ZUlu
aXRpYWxpemVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxp
emVkIHsgZmFsc2UgfTsKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICBUZXh0dXJl
TWFwcGVyR0w6OkZsYWdzIG1fdGV4dHVyZU1hcHBlckZsYWdzOwpAQCAtMzkxLDEwICszNTYsMTAg
QEAgcHJvdGVjdGVkOgogICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsKIAogICAgIG11
dGFibGUgRmxvYXRTaXplIG1fdmlkZW9TaXplOwotICAgIGJvb2wgbV91c2luZ0ZhbGxiYWNrVmlk
ZW9TaW5rIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luayB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQgeyBmYWxzZSB9OwogCi0gICAg
Ym9vbCBtX2Rlc3Ryb3lpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0JlaW5nRGVzdHJveWVk
IHsgZmFsc2UgfTsKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4gbV92aWRlb1RleHR1cmVDb3BpZXI7CkBAIC00
MTIsMTcgKzM3NywyMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsg
Ly8gR3VhcmRzIGFjY2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAgIEhhc2hT
ZXQ8dWludDMyX3Q+IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CiAKLSAgICBib29sIG1fd2Fp
dGluZ0ZvcktleSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvcktleSB7IGZhbHNl
IH07CiAjZW5kaWYKIAogICAgIE9wdGlvbmFsPEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtPiBtX3Zp
ZGVvRGVjb2RlclBsYXRmb3JtOwogCiBwcml2YXRlOgorICAgIE1lZGlhVGltZSBtYXhUaW1lTG9h
ZGVkKCkgY29uc3Q7CisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBt
X3BpcGVsaW5lLmdldCgpOyB9CisgICAgdm9pZCBzZXRWaWRlb1NvdXJjZU9yaWVudGF0aW9uKElt
YWdlT3JpZW50YXRpb24pOworICAgIE1lZGlhVGltZSBwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3Q7
CisgICAgYm9vbCBpc011dGVkKCkgY29uc3Q7CisgICAgdm9pZCBjb21taXRMb2FkKCk7CiAgICAg
dm9pZCBmaWxsVGltZXJGaXJlZCgpOwotCiAgICAgdm9pZCBkaWRFbmQoKTsKIAotCiAgICAgR3N0
RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCk7CiAgICAgR3N0RWxlbWVudCogY3JlYXRlQXVkaW9T
aW5rKCk7CiAgICAgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3Q7CkBAIC00NzUsMjAgKzQ0
NCwyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVHJhY2tzKCk7CiAgICAgdm9pZCBjbGVh
clRyYWNrcygpOwogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICB2b2lkIGF0dGVt
cHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOworICAgIHZvaWQgaW5pdGlhbGl6YXRpb25E
YXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7CisgICAgdm9pZCBzZXRXYWl0aW5nRm9yS2V5KGJv
b2wpOworI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBtX3RleHRBcHBTaW5rOwogICAgIEdSZWZQdHI8R3N0UGFkPiBtX3RleHRBcHBTaW5r
UGFkOwogI2VuZGlmCiAgICAgR3N0U3RydWN0dXJlKiBtX21lZGlhTG9jYXRpb25zIHsgbnVsbHB0
ciB9OwogICAgIGludCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXggeyAwIH07Ci0gICAgYm9v
bCBtX3BsYXliYWNrUmF0ZVBhdXNlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQbGF5YmFja1Jh
dGVQYXVzZWQgeyBmYWxzZSB9OwogICAgIE1lZGlhVGltZSBtX3RpbWVPZk92ZXJsYXBwaW5nU2Vl
azsKICAgICBmbG9hdCBtX2xhc3RQbGF5YmFja1JhdGUgeyAxIH07CiAgICAgVGltZXIgbV9maWxs
VGltZXI7CiAgICAgTWVkaWFUaW1lIG1fbWF4VGltZUxvYWRlZDsKICAgICBib29sIG1fbG9hZGlu
Z1N0YWxsZWQgeyBmYWxzZSB9OwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1fcHJlbG9hZDsK
LSAgICBib29sIG1fZGVsYXlpbmdMb2FkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNEZWxheWlu
Z0xvYWQgeyBmYWxzZSB9OwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fbWF4VGltZUxvYWRlZEF0
TGFzdERpZExvYWRpbmdQcm9ncmVzczsKICAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9oYXNBdWRpbyB7IGZhbHNlIH07CkBAIC01MDMsMTEgKzQ3OCwxMSBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRm
b3JtTGF5ZXJQcm94eTsKICNlbmRpZgogI2VuZGlmCi0gICAgYm9vbCBtX2J1ZmZlcmluZyB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lzQnVmZmVyaW5nIHsgZmFsc2UgfTsKICAgICBpbnQgbV9idWZm
ZXJpbmdQZXJjZW50YWdlIHsgMCB9OwogICAgIG11dGFibGUgdW5zaWduZWQgbG9uZyBsb25nIG1f
dG90YWxCeXRlcyB7IDAgfTsKICAgICBVUkwgbV91cmw7Ci0gICAgYm9vbCBtX3ByZXNlcnZlc1Bp
dGNoIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hvdWxkUHJlc2VydmVQaXRjaCB7IGZhbHNlIH07
CiAgICAgbXV0YWJsZSBPcHRpb25hbDxTZWNvbmRzPiBtX2xhc3RRdWVyeVRpbWU7CiAgICAgYm9v
bCBtX2lzTGVnYWN5UGxheWJpbjsKICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IG1f
c3RyZWFtQ29sbGVjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCBlNjg4MGQ5OGU3ZmNhZDFkMDUzZjg0ZWQz
OGE2ZmQ4MTk4ZGU3Yjg2Li5kYzI0NWI0N2RlM2RlNzJmYWMyMzY3MmU1ZjZlZmQ0YjM3NjI5YjRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuY3BwCkBAIC0xMzIsMTMgKzEzMiwxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgTWVkaWFTb3VyY2VQcml2YXRl
QwogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cGF1c2UoKQogewotICAg
IG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBuZWVkIGRpcmVjdCBh
Y2Nlc3MgdG8gdGhpcyBtZW1iZXIuIFRoaXMgb3ZlcnJpZGUgaXMgcHJvYmFibHkgbm90IG5lZWRl
ZC4KKyAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnBhdXNlKCk7CiB9CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlw
ZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQorICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8
fCBtX2RpZEVycm9yT2NjdXIpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lKCk7CiAKICAgICBy
ZXR1cm4gbV9tZWRpYVRpbWVEdXJhdGlvbjsKQEAgLTE0Niw3ICsxNDcsNyBAQCBNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0
CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNvbnN0IE1lZGlh
VGltZSYgdGltZSkKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9j
Y3VyZWQpKQorICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIp
KQogICAgICAgICByZXR1cm47CiAKICAgICBHU1RfSU5GTygiW1NlZWtdIHNlZWsgYXR0ZW1wdCB0
byAlcyBzZWNzIiwgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7CkBAIC0xNTQsMTUgKzE1
NSwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vlayhjb25zdCBN
ZWRpYVRpbWUmIHRpbWUpCiAgICAgLy8gQXZvaWQgdXNlbGVzcyBzZWVraW5nLgogICAgIE1lZGlh
VGltZSBjdXJyZW50ID0gY3VycmVudE1lZGlhVGltZSgpOwogICAgIGlmICh0aW1lID09IGN1cnJl
bnQpIHsKLSAgICAgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIGlmICghbV9pc1NlZWtpbmcp
CiAgICAgICAgICAgICB0aW1lQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1fc2Vla2luZyAmJiBtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICBp
ZiAobV9pc1NlZWtpbmcgJiYgbV9pc1NlZWtQZW5kaW5nKSB7CiAgICAgICAgIG1fc2Vla1RpbWUg
PSB0aW1lOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTc5LDcgKzE4MCw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgdGlt
ZSkKICAgICB9CiAKICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwotICAgIEdTVF9ERUJVRygi
bV9zZWVraW5nPSVzLCBtX3NlZWtUaW1lPSVzIiwgYm9vbEZvclByaW50aW5nKG1fc2Vla2luZyks
IHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9ERUJVRygibV9p
c1NlZWtpbmc9JXMsIG1fc2Vla1RpbWU9JXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1NlZWtpbmcp
LCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNvbmZpZ3VyZVBsYXlTaW5rKCkKQEAgLTIzMiw3ICsy
MzMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkKICAg
ICBHc3RTZWVrRmxhZ3Mgc2Vla1R5cGUgPSBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9T
RUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKTsKIAogICAgIC8vIEFsd2F5
cyBtb3ZlIHRvIHNlZWtpbmcgc3RhdGUgdG8gcmVwb3J0IGNvcnJlY3QgJ2N1cnJlbnRUaW1lJyB3
aGlsZSBwZW5kaW5nIGZvciBhY3R1YWwgc2VlayB0byBjb21wbGV0ZS4KLSAgICBtX3NlZWtpbmcg
PSB0cnVlOworICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKIAogICAgIC8vIENoZWNrIGlmIHBsYXli
YWNrIHBpcGVsaW5lIGlzIHJlYWR5IGZvciBzZWVrLgogICAgIEdzdFN0YXRlIHN0YXRlLCBuZXdT
dGF0ZTsKQEAgLTI0MCw3ICsyNDEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6ZG9TZWVrKCkKICAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5H
RV9GQUlMVVJFIHx8IGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9M
TCkgewogICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBjYW5ub3Qgc2VlaywgY3VycmVudCBzdGF0
ZSBjaGFuZ2UgaXMgJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1l
KGdldFN0YXRlUmVzdWx0KSk7CiAgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1w
bGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKLSAgICAgICAgbV9z
ZWVraW5nID0gZmFsc2U7CisgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVf
Q0hBTkdFX0FTWU5DCkBAIC0yNjIsMTkgKzI2MywxOSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkKIAogICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBEZWxh
eWluZyB0aGUgc2VlazogJXMiLCByZWFzb24uZGF0YSgpKTsKIAotICAgICAgICBtX3NlZWtJc1Bl
bmRpbmcgPSB0cnVlOworICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSB0cnVlOwogCiAgICAgICAg
IGlmIChtX2lzRW5kUmVhY2hlZCkgewogICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gcmVz
ZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IHRydWU7Ci0gICAg
ICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fc2hvdWxkUmVzZXRQaXBl
bGluZSA9IHRydWU7CisgICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwogICAgICAgICAg
ICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQogICAgICAgICAg
ICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgIG1f
aXNTZWVraW5nID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtX3NlZWtpbmc7
CisgICAgICAgIHJldHVybiBtX2lzU2Vla2luZzsKICAgICB9CiAKICAgICAvLyBTdG9wIGFjY2Vw
dGluZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwgc2VlayBpcyBmaW5pc2hlZC4KQEAgLTMwMCw3
ICszMDEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkK
ICAgICAgICAgaWYgKHNldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkg
ewogICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gQ2Fubm90IHNlZWssIGZhaWxlZCB0byBw
YXVzZSBwbGF5YmFjayBwaXBlbGluZS4iKTsKICAgICAgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0
UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsK
LSAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1NlZWtpbmcg
PSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOwpAQCAtMzE0LDcgKzMxNSw3
IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWsoKQogICAgICAg
ICBtX21lZGlhU291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOwogICAgICAgICBBU1NFUlQo
bV9tc2VTZWVrQ29tcGxldGVkKTsKICAgICAgICAgLy8gTm90ZTogc2Vla0NvbXBsZXRlZCB3aWxs
IHJlY3Vyc2l2ZWx5IGNhbGwgdXMuCi0gICAgICAgIHJldHVybiBtX3NlZWtpbmc7CisgICAgICAg
IHJldHVybiBtX2lzU2Vla2luZzsKICAgICB9CiAKICAgICBHU1RfREVCVUcoIldlIGNhbiBzZWVr
IG5vdyIpOwpAQCAtMzM3LDcgKzMzOCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpkb1NlZWsoKQogICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IGZhbHNlOwogICAgIGlm
ICghZ3N0X2VsZW1lbnRfc2VlayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJ
TUUsIHNlZWtUeXBlLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoc3RhcnRUaW1l
KSwgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKSkgewogICAgICAg
ICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291
cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICBt
X2lzU2Vla2luZyA9IGZhbHNlOwogICAgICAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOwog
ICAgICAgICBHU1RfREVCVUcoImRvU2VlaygpOiBnc3RfZWxlbWVudF9zZWVrKCkgZmFpbGVkLCBy
ZXR1cm5pbmcgZmFsc2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzUwLDcgKzM1MSw3
IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWsoKQogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKCkKIHsKLSAg
ICBpZiAoIW1fc2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxldGVkIHx8ICFtX2dzdFNlZWtDb21w
bGV0ZWQpCisgICAgaWYgKCFtX2lzU2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxldGVkIHx8ICFt
X2dzdFNlZWtDb21wbGV0ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdzdFN0YXRlIHN0YXRl
LCBuZXdTdGF0ZTsKQEAgLTM2Miw5ICszNjMsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICBpZiAobV9pc1NlZWtQZW5kaW5nKSB7CiAg
ICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIENvbW1pdHRpbmcgcGVuZGluZyBzZWVrIHRvICVzIiwg
dG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fc2Vla0lzUGVu
ZGluZyA9IGZhbHNlOworICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSBmYWxzZTsKICAgICAgICAg
aWYgKCFkb1NlZWsoKSkgewogICAgICAgICAgICAgR1NUX1dBUk5JTkcoIltTZWVrXSBTZWVraW5n
IHRvICVzIGZhaWxlZCIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKQEAg
LTM3NSw3ICszNzYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5
YmVGaW5pc2hTZWVrKCkKICAgICBHU1RfREVCVUcoIltTZWVrXSBTZWVrZWQgdG8gJXMiLCB0b1N0
cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHdlYktpdE1lZGlhU3JjU2V0
UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsK
LSAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwogICAgIG1f
Y2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAgICAgLy8gVGhlIHBp
cGVsaW5lIGNhbiBzdGlsbCBoYXZlIGEgcGVuZGluZyBzdGF0ZS4gSW4gdGhpcyBjYXNlIGEgcG9z
aXRpb24gcXVlcnkgd2lsbCBmYWlsLgogICAgIC8vIFJpZ2h0IG5vdyB3ZSBjYW4gdXNlIG1fc2Vl
a1RpbWUgYXMgYSBmYWxsYmFjay4KQEAgLTM5MCw3ICszOTEsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlUGxheWJhY2tSYXRlKCkKIAogYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtpbmcoKSBjb25zdAogewotICAgIHJldHVybiBt
X3NlZWtpbmc7CisgICAgcmV0dXJuIG1faXNTZWVraW5nOwogfQogCiAvLyBGSVhNRTogTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyIG1hbmFnZXMgdGhlIFJlYWR5U3RhdGUgb24gaXRzIG93bi4g
V2Ugc2hvdWxkbid0IGNoYW5nZSBpdCBtYW51YWxseS4KQEAgLTQyOCw3ICs0MjksNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSByZWFkeQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQogewotICAgIGlmICghbV9zZWVraW5nKQorICAgIGlm
ICghbV9pc1NlZWtpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdTVF9ERUJVRygiV2FpdGlu
ZyBmb3IgTVNFIHNlZWsgY29tcGxldGVkIik7CkBAIC00NzksNyArNDgwLDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJj
ZUVsZW1lbnQpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVT
dGF0ZXMoKQogewotICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJl
ZCkpCisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZGlkRXJyb3JPY2N1cikpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29y
a1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CkBAIC00OTgsOCArNDk5LDggQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAgIGlmIChtX2lz
RW5kUmVhY2hlZCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCiAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSAoc3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZ
KTsKLSAgICAgICAgaWYgKG1fcmVzZXRQaXBlbGluZSkKKyAgICAgICAgbV9zaG91bGRSZXNldFBp
cGVsaW5lID0gKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSk7CisgICAgICAgIGlmIChtX3Nob3Vs
ZFJlc2V0UGlwZWxpbmUpCiAgICAgICAgICAgICBtX21lZGlhVGltZUR1cmF0aW9uID0gTWVkaWFU
aW1lOjp6ZXJvVGltZSgpOwogCiAgICAgICAgIC8vIFVwZGF0ZSByZWFkeSBhbmQgbmV0d29yayBz
dGF0ZXMuCkBAIC01MzgsMjUgKzUzOSwyNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKIAogICAgICAgICAvLyBTeW5jIHN0YXRlcyB3aGVyZSBu
ZWVkZWQuCiAgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICBpZiAo
IW1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgbm90aWZ5
UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICBub3RpZnlQbGF5ZXJPZk11
dGUoKTsKLSAgICAgICAgICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgbV9hcmVWb2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXNlZWtpbmcoKSAmJiAhbV9wYXVzZWQg
JiYgbV9wbGF5YmFja1JhdGUpIHsKKyAgICAgICAgICAgIGlmICghc2Vla2luZygpICYmICFtX2lz
UGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJb
QnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOwogICAgICAgICAgICAgICAgIGNoYW5n
ZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0gICAgICAgICAgICBt
X3BhdXNlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwogCiAgICAg
ICAgICAgICBpZiAoIW1fcGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAgR1NUX0RFQlVH
KCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOwogICAgICAgICAg
ICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAg
ICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fcmVxdWVzdGVkU3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAg
ICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKQEAgLTU3Nyw3ICs1Nzgs
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkK
ICAgICAgICAgR1NUX0RFQlVHKCJObyBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShwZW5kaW5nKSk7CiAKICAgICAgICAgLy8gTGl2ZSBwaXBlbGluZXMgZ28gaW4gUEFVU0VE
IHdpdGhvdXQgcHJlcm9sbGluZy4KLSAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRydWU7CisgICAg
ICAgIG1faXNMaXZlU3RyZWFtID0gdHJ1ZTsKIAogICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NU
QVRFX1JFQURZKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmc7CkBAIC01ODUsMTEgKzU4NiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBH
U1RfU1RBVEVfUEFVU0VEKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUVub3VnaERhdGE7CiAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0l
cyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAgbV9wYXVzZWQg
PSB0cnVlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBp
ZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAgICAgICBtX3BhdXNlZCA9IGZh
bHNlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwogCi0gICAgICAgIGlmICghbV9w
YXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCisgICAgICAgIGlmICghbV9pc1BhdXNlZCAmJiBtX3Bs
YXliYWNrUmF0ZSkKICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BM
QVlJTkcpOwogCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7
CkBAIC02MjAsMTAgKzYyMSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6dXBkYXRlU3RhdGVzKCkKIH0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojphc3luY1N0YXRlQ2hhbmdlRG9uZSgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5l
IHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9k
aWRFcnJvck9jY3VyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Vla2luZykKKyAg
ICBpZiAobV9pc1NlZWtpbmcpCiAgICAgICAgIG1heWJlRmluaXNoU2VlaygpOwogICAgIGVsc2UK
ICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CkBAIC03NzQsNyArNzc1LDcgQEAgTWVkaWFUaW1lIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CiAK
IE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heE1lZGlhVGltZVNl
ZWthYmxlKCkgY29uc3QKIHsKLSAgICBpZiAoVU5MSUtFTFkobV9lcnJvck9jY3VyZWQpKQorICAg
IGlmIChVTkxJS0VMWShtX2RpZEVycm9yT2NjdXIpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1l
Ojp6ZXJvVGltZSgpOwogCiAgICAgR1NUX0RFQlVHKCJtYXhNZWRpYVRpbWVTZWVrYWJsZSIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
LmgKaW5kZXggM2JjYzBmZGJhMzg4M2FlZWM2ZTJlMjY1ODVlYWM4Y2JiZTBkNGVhZS4uOWIzMzMw
NWY3ZjExNmRhYzkxYzY0MWM0ODQ1OTNiZTdhODMwNzM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCkBAIC01NCw3ICs1NCw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCkgb3Zl
cnJpZGUgeyB9OwogCi0gICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlQ2xpZW50
R1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuY3BwCmluZGV4IGZhZTc0ZjRi
YTRjMTc5MWRjNjVlNTM1ZmVmZjMzM2Y0MmYwNmMzMzQuLmMwOTdjYTNlMTY3MTdkODhiN2I0ODZh
MjJlY2JhNDVkMDhlYzNkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFT
b3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuY3BwCkBAIC0xNjMsNyArMTYzLDggQEAgdm9pZCBNZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6Zmx1c2goQXRvbVN0cmluZyB0cmFja0lkKQogICAg
IEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKIAogICAgIC8vIFRoaXMgaXMgb25seSBmb3Ig
b24tdGhlLWZseSByZWVucXVldWVzIGFmdGVyIGFwcGVuZHMuIFdoZW4gc2Vla2luZywgdGhlIHNl
ZWsgd2lsbCBkbyBpdHMgb3duIGZsdXNoLgotICAgIGlmICghbV9wbGF5ZXJQcml2YXRlLm1fc2Vl
a2luZykKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBiZSB0b3VjaGluZyBwcml2YXRlIHBhcnRz
LgorICAgIGlmICghbV9wbGF5ZXJQcml2YXRlLm1faXNTZWVraW5nKQogICAgICAgICBtX3BsYXll
clByaXZhdGUubV9wbGF5YmFja1BpcGVsaW5lLT5mbHVzaCh0cmFja0lkKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384490</attachid>
            <date>2019-11-29 01:41:03 -0800</date>
            <delta_ts>2019-11-29 09:47:22 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204617-20191129094101.patch</filename>
            <type>text/plain</type>
            <size>90913</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyOTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDI2NjdiNjE0N2VmZGM2
MjFlZmRhYjlkMWNmM2RiNjRkMGRmZDM2Ni4uZDdiZDc2MjU3MjRmYTg2ZGE0MWZiYWFlMWNkNTQ5
ODQzYWFhN2U4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDE5LTExLTI4ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgc3R5bGUgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDYxNworCisgICAgICAgIFJldmll
d2VkIGJ5IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgIEZvbGxvdy11cCBjb21t
aXQgdG8gYnVnIDIwNDM1MiBhZGRyZXNzaW5nIHN0eWxlIGlzc3VlcyBpbiB0aGUKKyAgICAgICAg
ZXhpc3RpbmcgcGxheWVyIGNvZGUuIFRoZSBtYWluIGlzc3VlcyBhZGRyZXNzZWQgYXJlIG5hbWlu
ZworICAgICAgICB2aW9sYXRpb25zLCBhZGRpbmcgZmluYWwgdG8gdHlwZXMgbm90IG92ZXJyaWRk
ZW4gYW5kIG9yZ2FuaXppbmcKKyAgICAgICAgYmV0dGVyIHRoZSBzY29wZSBvZiBuYW1lcyBpbiB0
aGUgY2xhc3Nlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJlcGFyZVRv
UGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1
cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVk
aWFUaW1lU2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNo
YW5nZVBpcGVsaW5lU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3Jt
RHVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjppc011dGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVw
ZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZVN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNz
TXBlZ1RzU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmRpZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5TYXZlTWVkaWFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YWNjZWxlcmF0
ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsUmVwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1vdmllTG9hZFR5cGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVW
aWRlb1NpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpkZWNvZGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRyb3BwZWRGcmFtZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhM
b2NhbEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpt
dXRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwaXBlbGluZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhUGxheWVyIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNM
aXZlU3RyZWFtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25NZWRp
YVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6ZG9TZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRGb3JTZWVrQ29tcGxldGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRl
U3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjptYXhNZWRpYVRpbWVTZWVrYWJsZSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01l
ZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjpmbHVzaCk6CisKIDIwMTktMTEtMjggIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFkanVzdCB0aGUg
bGluZSdzIGlzLXZpc3VhbGx5LWVtcHR5IHN0YXR1cyBhZnRlciB0cmltbWluZyB0aGUgdHJhaWxp
bmcgd2hpdGVzcGFjZSBjb250ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IDU3OWVkOTlmMTczM2QyZDgxZDcwMzdjMzA5NTA1YWRlMWZk
NTcyMjIuLjg4NDk0MTJhYWI0MWQyZTc4NTUyMjVkZTZhYmVkMjE4ZDBlYzlhZWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zMzYsOSAr
MzM2LDEyIEBAIHByaXZhdGU6CiB9OwogI2VuZGlmCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCitzdGF0aWMgdm9pZCBpbml0aWFs
aXplRGVidWdDYXRlZ29yeSgpCiB7Ci0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0
X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwgIldlYktpdCBtZWRp
YSBwbGF5ZXIiKTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lO
SVQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwgIldl
YktpdCBtZWRpYSBwbGF5ZXIiKTsKKyAgICB9KTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikK
QEAgLTQ5Nyw3ICs1MDAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9h
ZEZ1bGwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgInByZWxvYWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9T
dHJpbmcobV9wcmVsb2FkKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9wcmVsb2FkID09IE1l
ZGlhUGxheWVyOjpOb25lKSB7CiAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAi
RGVsYXlpbmcgbG9hZC4iKTsKLSAgICAgICAgbV9kZWxheWluZ0xvYWQgPSB0cnVlOworICAgICAg
ICBtX2lzRGVsYXlpbmdMb2FkID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBSZXNldCBuZXR3b3Jr
IGFuZCByZWFkeSBzdGF0ZXMuIFRob3NlIHdpbGwgYmUgc2V0IHByb3Blcmx5IG9uY2UKQEAgLTUw
NiwxMCArNTA5LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVs
bChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmc7CiAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Ci0gICAgbV92b2x1
bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtX2FyZVZvbHVtZUFuZE11dGVJbml0
aWFsaXplZCA9IGZhbHNlOwogICAgIG1faGFzVGFpbnRlZE9yaWdpbiA9IFdURjo6bnVsbG9wdDsK
IAotICAgIGlmICghbV9kZWxheWluZ0xvYWQpCisgICAgaWYgKCFtX2lzRGVsYXlpbmdMb2FkKQog
ICAgICAgICBjb21taXRMb2FkKCk7CiB9CiAKQEAgLTU0MSwxOSArNTQ0LDYgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0p
CiB9CiAjZW5kaWYKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExv
YWQoKQotewotICAgIEFTU0VSVCghbV9kZWxheWluZ0xvYWQpOwotICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkNvbW1pdHRpbmcgbG9hZC4iKTsKLQotICAgIC8vIEdTdHJlYW1lciBu
ZWVkcyB0byBoYXZlIHRoZSBwaXBlbGluZSBzZXQgdG8gYSBwYXVzZWQgc3RhdGUgdG8KLSAgICAv
LyBzdGFydCBwcm92aWRpbmcgYW55dGhpbmcgdXNlZnVsLgotICAgIGNoYW5nZVBpcGVsaW5lU3Rh
dGUoR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWco
KTsKLSAgICB1cGRhdGVTdGF0ZXMoKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNhbmNlbExvYWQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxh
eWVyOjpMb2FkaW5nIHx8IG1fbmV0d29ya1N0YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpCkBA
IC01NjcsOCArNTU3LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByZXBh
cmVUb1BsYXkoKQogewogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlByZXBhcmUg
dG8gcGxheSIpOwogICAgIG1fcHJlbG9hZCA9IE1lZGlhUGxheWVyOjpBdXRvOwotICAgIGlmICht
X2RlbGF5aW5nTG9hZCkgewotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOworICAgIGlm
IChtX2lzRGVsYXlpbmdMb2FkKSB7CisgICAgICAgIG1faXNEZWxheWluZ0xvYWQgPSBmYWxzZTsK
ICAgICAgICAgY29tbWl0TG9hZCgpOwogICAgIH0KIH0KQEAgLTU3NiwxMyArNTY2LDEzIEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KCkKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5KCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tS
YXRlKSB7Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSB0cnVlOworICAgICAgICBtX2lz
UGxheWJhY2tSYXRlUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKSkgewogICAgICAgICBt
X2lzRW5kUmVhY2hlZCA9IGZhbHNlOwotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOwor
ICAgICAgICBtX2lzRGVsYXlpbmdMb2FkID0gZmFsc2U7CiAgICAgICAgIG1fcHJlbG9hZCA9IE1l
ZGlhUGxheWVyOjpBdXRvOwogICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsK
ICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5Iik7CkBAIC01OTIsNyAr
NTgyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXkoKQogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKQogewotICAgIG1fcGxheWJhY2tS
YXRlUGF1c2UgPSBmYWxzZTsKKyAgICBtX2lzUGxheWJhY2tSYXRlUGF1c2VkID0gZmFsc2U7CiAg
ICAgR3N0U3RhdGUgY3VycmVudFN0YXRlLCBwZW5kaW5nU3RhdGU7CiAgICAgZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nU3RhdGUs
IDApOwogICAgIGlmIChjdXJyZW50U3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmdT
dGF0ZSA8PSBHU1RfU1RBVEVfUEFVU0VEKQpAQCAtNjE0LDcgKzYwNCw3IEBAIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgeworICAgIGlmIChtX2lz
UGxheWJhY2tSYXRlUGF1c2VkKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIlBsYXliYWNrIHJhdGUgaXMgMCwgc2ltdWxhdGluZyBQQVVTRUQgc3RhdGUiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTYzMywxMiArNjIzLDggQEAgYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBm
bG9hdCByYXRlLAogCiAgICAgaWYgKHJhdGUgPCAwKSB7CiAgICAgICAgIHN0YXJ0VGltZSA9IE1l
ZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGF0IGJlZ2lubmluZyBv
ZiBtZWRpYSwgc3RhcnQgZnJvbSB0aGUgZW5kIHRvCi0gICAgICAgIC8vIGF2b2lkIGltbWVkaWF0
ZSBFT1MuCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAg
ICAgICAgICAgIGVuZFRpbWUgPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlbmRUaW1lID0gcG9zaXRpb247CisgICAgICAgIC8vIElmIHdlIGFyZSBhdCBi
ZWdpbm5pbmcgb2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0byBhdm9pZCBpbW1lZGlhdGUg
RU9TLgorICAgICAgICBlbmRUaW1lID0gcG9zaXRpb24gPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkg
PyBkdXJhdGlvbk1lZGlhVGltZSgpIDogcG9zaXRpb247CiAgICAgfQogCiAgICAgaWYgKCFyYXRl
KQpAQCAtNjUwLDEwICs2MzYsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1l
KQogewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
ZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtd
IHNlZWsgYXR0ZW1wdCB0byAlcyIsIHRvU3RyaW5nKG1lZGlhVGltZSkudXRmOCgpLmRhdGEoKSk7
CkBAIC02NjYsMTYgKzY0OSwxNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2Vlayhjb25zdCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogICAgIE1lZGlhVGltZSB0aW1lID0g
c3RkOjptaW4obWVkaWFUaW1lLCBkdXJhdGlvbk1lZGlhVGltZSgpKTsKIAotICAgIGlmIChpc0xp
dmVTdHJlYW0oKSkgeworICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkgewogICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gTGl2ZSBzdHJlYW0gc2VlayB1bmhhbmRsZWQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiW1NlZWtdIHNlZWtpbmcgdG8gJXMiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgp
KTsKIAotICAgIGlmIChtX3NlZWtpbmcpIHsKKyAgICBpZiAobV9pc1NlZWtpbmcpIHsKICAgICAg
ICAgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWsgPSB0aW1lOwotICAgICAgICBpZiAobV9zZWVrSXNQ
ZW5kaW5nKSB7CisgICAgICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpIHsKICAgICAgICAgICAgIG1f
c2Vla1RpbWUgPSB0aW1lOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02ODgs
MTAgKzY3MSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25z
dCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
Z2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyB8fCBzdGF0ZSA8IEdTVF9T
VEFURV9QQVVTRUQgfHwgbV9pc0VuZFJlYWNoZWQpIHsKLSAgICAgICAgbV9zZWVrSXNQZW5kaW5n
ID0gdHJ1ZTsKKyAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gdHJ1ZTsKICAgICAgICAgaWYgKG1f
aXNFbmRSZWFjaGVkKSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJbU2Vla10gcmVzZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9
IHRydWU7CisgICAgICAgICAgICBtX3Nob3VsZFJlc2V0UGlwZWxpbmUgPSB0cnVlOwogICAgICAg
ICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQogICAgICAg
ICAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKICAgICAgICAgfQpA
QCAtNzAzLDIwICs2ODYsMjAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNl
ZWsoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X3NlZWtpbmcgPSB0cnVlOworICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKICAgICBtX3NlZWtUaW1l
ID0gdGltZTsKICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwogfQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlUGxheWJhY2tSYXRlKCkKIHsKLSAgICBpZiAoIW1f
Y2hhbmdpbmdSYXRlKQorICAgIGlmICghbV9pc0NoYW5naW5nUmF0ZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJTZXQgUmF0ZSB0byAlZiIsIG1f
cGxheWJhY2tSYXRlKTsKIAogICAgIC8vIE11dGUgdGhlIHNvdW5kIGlmIHRoZSBwbGF5YmFjayBy
YXRlIGlzIG5lZ2F0aXZlIG9yIHRvbyBleHRyZW1lIGFuZCBhdWRpbyBwaXRjaCBpcyBub3QgYWRq
dXN0ZWQuCi0gICAgYm9vbCBtdXRlID0gbV9wbGF5YmFja1JhdGUgPD0gMCB8fCAoIW1fcHJlc2Vy
dmVzUGl0Y2ggJiYgKG1fcGxheWJhY2tSYXRlIDwgMC44IHx8IG1fcGxheWJhY2tSYXRlID4gMikp
OworICAgIGJvb2wgbXV0ZSA9IG1fcGxheWJhY2tSYXRlIDw9IDAgfHwgKCFtX3Nob3VsZFByZXNl
cnZlUGl0Y2ggJiYgKG1fcGxheWJhY2tSYXRlIDwgMC44IHx8IG1fcGxheWJhY2tSYXRlID4gMikp
OwogCiAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksIG11dGUgPyAiTmVlZCB0byBtdXRl
IGF1ZGlvIiA6ICJEbyBub3QgbmVlZCB0byBtdXRlIGF1ZGlvIik7CiAKQEAgLTcyOCw0MyArNzEx
LDE5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVQbGF5YmFja1Jh
dGUoKQogICAgICAgICBHU1RfRVJST1IoIlNldCByYXRlIHRvICVmIGZhaWxlZCIsIG1fcGxheWJh
Y2tSYXRlKTsKICAgICB9CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgewotICAgICAg
ICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICAgICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBpZiAobV9p
c1BsYXliYWNrUmF0ZVBhdXNlZCkgeworICAgICAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsK
IAogICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRl
LCAmcGVuZGluZywgMCk7CiAgICAgICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUExBWUlORyAm
JiBwZW5kaW5nICE9IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAgICAgY2hhbmdlUGlwZWxp
bmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2Ug
PSBmYWxzZTsKKyAgICAgICAgbV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IGZhbHNlOwogICAgIH0K
IAotICAgIG1fY2hhbmdpbmdSYXRlID0gZmFsc2U7CisgICAgbV9pc0NoYW5naW5nUmF0ZSA9IGZh
bHNlOwogICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7
Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBw
aXBlbGluZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkpKTsKLSAg
ICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCk7Ci0KLSAgICAvLyBUaGUgZHVyYXRpb24gcXVlcnkgd291bGQgZmFpbCBvbiBhIG5vdC1w
cmVyb2xsZWQgcGlwZWxpbmUuCi0gICAgaWYgKEdTVF9TVEFURShtX3BpcGVsaW5lLmdldCgpKSA8
IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCk7Ci0KLSAgICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKLSAgICBpZiAoIWdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJmR1cmF0aW9u
KSB8fCAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZHVyYXRpb24pKSB7Ci0gICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRpbWUgZHVyYXRpb24gcXVlcnkgZmFpbGVkIGZvciAl
cyIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gTWVkaWFU
aW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNU
KHBpcGVsaW5lKCksICJEdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdT
KGR1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIE1lZGlhVGltZShkdXJhdGlvbiwgR1NUX1NFQ09ORCk7
Ci19Ci0KIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVk
aWFUaW1lKCkgY29uc3QKIHsKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJDYWNo
ZWQgZHVyYXRpb246ICVzIiwgbV9jYWNoZWREdXJhdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwpAQCAtNzgyLDExICs3NDEsMTEgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1f
ZGlkRXJyb3JPY2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsK
IAotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgInNlZWtpbmc6ICVzLCBzZWVrVGlt
ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX3NlZWtpbmcpCisgICAgR1NUX1RSQUNFX09CSkVD
VChwaXBlbGluZSgpLCAic2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGlu
ZyhtX2lzU2Vla2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBpZiAobV9pc1NlZWtpbmcpCiAgICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwogCiAgICAgcmV0
dXJuIHBsYXliYWNrUG9zaXRpb24oKTsKQEAgLTc5NCwzNiArNzUzLDM2IEBAIE1lZGlhVGltZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdAogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZShmbG9hdCByYXRlKQogewot
ICAgIC8vIEhpZ2hlciByYXRlIGNhdXNlcyBjcmFzaC4KLSAgICByYXRlID0gY2xhbXBUbyhyYXRl
LCAtMjAuMCwgMjAuMCk7CisgICAgZmxvYXQgcmF0ZUNsYW1wZWQgPSBjbGFtcFRvKHJhdGUsIC0y
MC4wLCAyMC4wKTsKKyAgICBpZiAocmF0ZUNsYW1wZWQgIT0gcmF0ZSkKKyAgICAgICAgR1NUX1dB
Uk5JTkcoIkNsYW1waW5nIG9yaWdpbmFsIHJhdGUgKCVmKSB0byBbLTIwLCAyMF0gKCVmKSwgaGln
aGVyIHJhdGVzIGNhdXNlIGNyYXNoZXMiLCByYXRlLCByYXRlQ2xhbXBlZCk7CiAKICAgICAvLyBB
dm9pZCB1c2VsZXNzIHBsYXliYWNrIHJhdGUgdXBkYXRlLgotICAgIGlmIChtX3BsYXliYWNrUmF0
ZSA9PSByYXRlKSB7Ci0gICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhhdCB1cHBlciBsYXllcnMg
d2VyZSBub3RpZmllZCBpZiByYXRlIHdhcyBzZXQKKyAgICBpZiAobV9wbGF5YmFja1JhdGUgPT0g
cmF0ZUNsYW1wZWQpIHsKKyAgICAgICAgLy8gQW5kIG1ha2Ugc3VyZSB0aGF0IHVwcGVyIGxheWVy
cyB3ZXJlIG5vdGlmaWVkIGlmIHJhdGUgd2FzIHNldC4KIAotICAgICAgICBpZiAoIW1fY2hhbmdp
bmdSYXRlICYmIG1fcGxheWVyLT5yYXRlKCkgIT0gbV9wbGF5YmFja1JhdGUpCisgICAgICAgIGlm
ICghbV9pc0NoYW5naW5nUmF0ZSAmJiBtX3BsYXllci0+cmF0ZSgpICE9IG1fcGxheWJhY2tSYXRl
KQogICAgICAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpIHsKLSAgICAgICAgLy8gbm90aWZ5IHVw
cGVyIGxheWVycyB0aGF0IHdlIGNhbm5vdCBoYW5kbGUgcGFzc2VkIHJhdGUuCi0gICAgICAgIG1f
Y2hhbmdpbmdSYXRlID0gZmFsc2U7CisgICAgaWYgKG1faXNMaXZlU3RyZWFtKSB7CisgICAgICAg
IC8vIE5vdGlmeSB1cHBlciBsYXllcnMgdGhhdCB3ZSBjYW5ub3QgaGFuZGxlIHBhc3NlZCByYXRl
LgorICAgICAgICBtX2lzQ2hhbmdpbmdSYXRlID0gZmFsc2U7CiAgICAgICAgIG1fcGxheWVyLT5y
YXRlQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR3N0U3RhdGUgc3Rh
dGU7Ci0gICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsK
IAotICAgIG1fcGxheWJhY2tSYXRlID0gcmF0ZTsKLSAgICBtX2NoYW5naW5nUmF0ZSA9IHRydWU7
CisgICAgbV9wbGF5YmFja1JhdGUgPSByYXRlQ2xhbXBlZDsKKyAgICBtX2lzQ2hhbmdpbmdSYXRl
ID0gdHJ1ZTsKIAogICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAm
c3RhdGUsICZwZW5kaW5nLCAwKTsKIAotICAgIGlmICghcmF0ZSkgewotICAgICAgICBtX2NoYW5n
aW5nUmF0ZSA9IGZhbHNlOwotICAgICAgICBtX3BsYXliYWNrUmF0ZVBhdXNlID0gdHJ1ZTsKKyAg
ICBpZiAoIXJhdGVDbGFtcGVkKSB7CisgICAgICAgIG1faXNDaGFuZ2luZ1JhdGUgPSBmYWxzZTsK
KyAgICAgICAgbV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IHRydWU7CiAgICAgICAgIGlmIChzdGF0
ZSAhPSBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmcgIT0gR1NUX1NUQVRFX1BBVVNFRCkKICAg
ICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTg0MywyMCArODAyLDIwIEBAIGRvdWJsZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnJhdGUoKSBjb25zdAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKIHsKLSAgICBtX3ByZXNl
cnZlc1BpdGNoID0gcHJlc2VydmVzUGl0Y2g7CisgICAgbV9zaG91bGRQcmVzZXJ2ZVBpdGNoID0g
cHJlc2VydmVzUGl0Y2g7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWQpCiB7CiAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBwcmVsb2FkIHRvICVzIiwgY29udmVydEVudW1l
cmF0aW9uVG9TdHJpbmcocHJlbG9hZCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKHByZWxvYWQg
PT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgaXNMaXZlU3RyZWFtKCkpCisgICAgaWYgKHByZWxvYWQg
PT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgbV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcHJlbG9hZCA9IHByZWxvYWQ7CiAgICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdG
bGFnKCk7CiAKLSAgICBpZiAobV9kZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxh
eWVyOjpOb25lKSB7Ci0gICAgICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7CisgICAgaWYgKG1f
aXNEZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25lKSB7CisgICAg
ICAgIG1faXNEZWxheWluZ0xvYWQgPSBmYWxzZTsKICAgICAgICAgY29tbWl0TG9hZCgpOwogICAg
IH0KIH0KQEAgLTg2NCw3ICs4MjMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQogc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZm
ZXJlZCgpIGNvbnN0CiB7CiAgICAgYXV0byB0aW1lUmFuZ2VzID0gbWFrZVVuaXF1ZTxQbGF0Zm9y
bVRpbWVSYW5nZXM+KCk7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IGlzTGl2ZVN0cmVhbSgp
KQorICAgIGlmIChtX2RpZEVycm9yT2NjdXIgfHwgbV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJl
dHVybiB0aW1lUmFuZ2VzOwogCiAgICAgTWVkaWFUaW1lIG1lZGlhRHVyYXRpb24gPSBkdXJhdGlv
bk1lZGlhVGltZSgpOwpAQCAtODc2LDggKzgzNSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQoKSBjb25z
CiAgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQo
KSkpCiAgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0gICAgZ3VpbnQgbnVtQnVmZmVyaW5n
UmFuZ2VzID0gZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMocXVlcnkuZ2V0KCkpOwot
ICAgIGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bUJ1ZmZlcmluZ1JhbmdlczsgaW5k
ZXgrKykgeworICAgIHVuc2lnbmVkIG51bUJ1ZmZlcmluZ1JhbmdlcyA9IGdzdF9xdWVyeV9nZXRf
bl9idWZmZXJpbmdfcmFuZ2VzKHF1ZXJ5LmdldCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBudW1CdWZmZXJpbmdSYW5nZXM7IGluZGV4KyspIHsKICAgICAgICAgZ2lu
dDY0IHJhbmdlU3RhcnQgPSAwLCByYW5nZVN0b3AgPSAwOwogICAgICAgICBpZiAoZ3N0X3F1ZXJ5
X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UocXVlcnkuZ2V0KCksIGluZGV4LCAmcmFuZ2VTdGFy
dCwgJnJhbmdlU3RvcCkpIHsKICAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0VGltZSA9IGdzdF91
dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQodG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0
aW9uKSwgcmFuZ2VTdGFydCwgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCk7CkBAIC04ODYsOCArODQ1
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpidWZmZXJlZCgpIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBtb3JlIGdlbmVyYWwgbWF4VGltZUxvYWRlZCgpIGlmIG5vIHJhbmdl
IGhhcwotICAgIC8vIGJlZW4gZm91bmQuCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIG1vcmUgZ2Vu
ZXJhbCBtYXhUaW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzIGJlZW4gZm91bmQuCiAgICAgaWYg
KCF0aW1lUmFuZ2VzLT5sZW5ndGgoKSkgewogICAgICAgICBNZWRpYVRpbWUgbG9hZGVkID0gbWF4
VGltZUxvYWRlZCgpOwogICAgICAgICBpZiAobG9hZGVkLmlzVmFsaWQoKSAmJiBsb2FkZWQpCkBA
IC04OTksMTYgKzg1NywxNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29ucwogCiBNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0
CiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywg
aXNMaXZlU3RyZWFtOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9yT2NjdXJlZCksIGJvb2xG
b3JQcmludGluZyhpc0xpdmVTdHJlYW0oKSkpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBpc0xpdmVT
dHJlYW06ICVzIiwgYm9vbEZvclByaW50aW5nKG1fZGlkRXJyb3JPY2N1ciksIGJvb2xGb3JQcmlu
dGluZyhtX2lzTGl2ZVN0cmVhbSkpOworICAgIGlmIChtX2RpZEVycm9yT2NjdXIpCiAgICAgICAg
IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkp
CisgICAgaWYgKG1faXNMaXZlU3RyZWFtKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJv
VGltZSgpOwogCiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsK
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhNZWRpYVRpbWVTZWVrYWJsZSwg
ZHVyYXRpb246ICVzIiwgdG9TdHJpbmcoZHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOwotICAgIC8v
IGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAgLy8gSW5maW5pdGUgZHVy
YXRpb24gbWVhbnMgbGl2ZSBzdHJlYW0uCiAgICAgaWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZp
bml0ZSgpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCkBAIC05MTcs
NyArODc1LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVk
aWFUaW1lU2Vla2FibGUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQp
CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVy
b1RpbWUoKTsKIAogICAgIE1lZGlhVGltZSBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7CkBAIC05
MjksNyArODg3LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4
VGltZUxvYWRlZCgpIGNvbnN0CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
aWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCB8fCBt
X2xvYWRpbmdTdGFsbGVkKQorICAgIGlmIChtX2RpZEVycm9yT2NjdXIgfHwgbV9sb2FkaW5nU3Rh
bGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFdFQktJVF9JU19XRUJfU1JD
KG1fc291cmNlLmdldCgpKSkgewpAQCAtOTUyLDI5ICs5MTAsMjIgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0CiAKIHVuc2lnbmVk
IGxvbmcgbG9uZyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25z
dAogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICBpZiAobV9kaWRFcnJvck9jY3VyIHx8
ICFtX3NvdXJjZSB8fCBtX2lzTGl2ZVN0cmVhbSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBp
ZiAobV90b3RhbEJ5dGVzKQogICAgICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwogCi0gICAgaWYg
KCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCiAgICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfQllU
RVM7CiAgICAgZ2ludDY0IGxlbmd0aCA9IDA7CiAgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1
cmF0aW9uKG1fc291cmNlLmdldCgpLCBmbXQsICZsZW5ndGgpKSB7CiAgICAgICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0
aCk7CiAgICAgICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4obGVuZ3RoKTsKLSAgICAgICAgbV9pc1N0cmVhbWluZyA9ICFsZW5ndGg7CisgICAgICAgIG1f
aXNMaXZlU3RyZWFtID0gIWxlbmd0aDsKICAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKICAg
ICB9CiAKLSAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBwYWRzIG1hbnVh
bGx5LgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mzg3NDkKKyAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBw
YWRzIG1hbnVhbGx5LiBTZWUgYWxzbyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NzQ5CiAgICAgR3N0SXRlcmF0b3IqIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVy
YXRlX3NyY19wYWRzKG1fc291cmNlLmdldCgpKTsKICAgICBib29sIGRvbmUgPSBmYWxzZTsKICAg
ICB3aGlsZSAoIWRvbmUpIHsKQEAgLTEwMDQsNyArOTU1LDcgQEAgdW5zaWduZWQgbG9uZyBsb25n
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygpIGNvbnN0CiAKICAgICBH
U1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFU
LCBsZW5ndGgpOwogICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4obGVuZ3RoKTsKLSAgICBtX2lzU3RyZWFtaW5nID0gIWxlbmd0aDsKKyAgICBtX2lzTGl2
ZVN0cmVhbSA9ICFsZW5ndGg7CiAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIH0KIApAQCAtMTEy
OSw4ICsxMDgwLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBp
cGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fcGlwZWxpbmUp
OwogCi0gICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7Cisg
ICAgR3N0U3RhdGUgY3VycmVudFN0YXRlLCBwZW5kaW5nOwogCiAgICAgZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsKICAg
ICBpZiAoY3VycmVudFN0YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsK
QEAgLTExNDcsMTMgKzEwOTcsMTAgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiAgICAgaWYgKGN1cnJlbnRT
dGF0ZSAhPSBwYXVzZWRPclBsYXlpbmcgJiYgc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NI
QU5HRV9GQUlMVVJFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBDcmVhdGUgYSB0
aW1lciB3aGVuIGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJl
c291cmNlcwotICAgIC8vIGlmIHdlIHN0YXkgZm9yIHRvbyBsb25nIG9uIFJFQURZLgotICAgIC8v
IEFsc28gbGV0cyByZW1vdmUgdGhlIHRpbWVyIGlmIHdlIHJlcXVlc3QgYSBzdGF0ZSBjaGFuZ2Ug
Zm9yIGFueSBzdGF0ZSBvdGhlciB0aGFuIFJFQURZLgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczNTQKKyAgICAvLyBDcmVhdGUgYSB0
aW1lciB3aGVuIGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJl
c291cmNlcyBpZiB3ZSBzdGF5IGZvciB0b28gbG9uZyBvbiBSRUFEWS4KKyAgICAvLyBBbHNvIGxl
dHMgcmVtb3ZlIHRoZSB0aW1lciBpZiB3ZSByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlIGZvciBhbnkg
c3RhdGUgb3RoZXIgdGhhbiBSRUFEWS4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNzM1NAogICAgIGlmIChuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUkVB
RFkgJiYgIW1fcmVhZHlUaW1lckhhbmRsZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAvLyBNYXgg
aW50ZXJ2YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwK
LSAgICAgICAgLy8gc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgorICAgICAgICAvLyBNYXggaW50ZXJ2
YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwgc3RhdGUg
Y2hhbmdlIHJlcXVlc3RzLgogICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyByZWFkeVN0YXRl
VGltZXJEZWxheSB7IDFfbWluIH07CiAgICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3RhcnRP
bmVTaG90KHJlYWR5U3RhdGVUaW1lckRlbGF5KTsKICAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9
IEdTVF9TVEFURV9SRUFEWSkKQEAgLTExOTcsMTcgKzExNDQsMzcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnN5bmNPbkNsb2NrKGJvb2wgc3luYykKICAgICBzZXRTeW5jT25D
bG9jayhhdWRpb1NpbmsoKSwgc3luYyk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKK2VudW0gTWVkaWFUeXBlIHsKKyAgICBWaWRl
bywgQXVkaW8sIFRleHQKK307Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2YoTWVkaWFUeXBlIG1lZGlhVHlwZSkKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1f
cGlwZWxpbmUgfHwgIW1fc291cmNlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1f
aXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7CiAKLSAgICBnaW50IG51bVRyYWNr
cyA9IDA7CisgICAgY29uc3QgY2hhciAqbWVkaWFUeXBlOworICAgIGNvbnN0IGNoYXIgKnNvdXJj
ZVR5cGU7CisgICAgc3dpdGNoIChtZWRpYVR5cGUpIHsKKyAgICBjYXNlIE1lZGlhVHlwZTo6Vmlk
ZW86CisgICAgICAgIG1lZGlhVHlwZSA9ICJ2aWRlbyI7CisgICAgICAgIHNvdXJjZVR5cGUgPSAi
bi12aWRlbyI7ICAgICAgICAKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVR5cGU6OkF1
ZGlvOgorICAgICAgICBtZWRpYVR5cGUgPSAiYXVkaW8iOworICAgICAgICBzb3VyY2VUeXBlID0g
Im4tYXVkaW8iOyAgICAgICAgCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFUeXBlOjpU
ZXh0OgorICAgICAgICBtZWRpYVR5cGUgPSAidGV4dCI7CisgICAgICAgIHNvdXJjZVR5cGUgPSAi
bi10ZXh0IjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVHJhY2tz
ID0gMDsKICAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwogICAgIEdz
dEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9w
aXBlbGluZS5nZXQoKTsKLSAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgIm4tdmlkZW8iLCAmbnVt
VHJhY2tzLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgc291cmNlVHlwZSwg
Jm51bVRyYWNrcywgbnVsbHB0cik7CiAKICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
Ik1lZGlhIGhhcyAlZCB2aWRlbyB0cmFja3MiLCBudW1UcmFja3MpOwogCkBAIC0xMjI3LDE0ICsx
MTk0LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJP
ZlZpZGVvKCkKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBWZWN0b3I8U3RyaW5nPiB2
YWxpZFZpZGVvU3RyZWFtczsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsr
aSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewogICAg
ICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9waXBlbGluZS5nZXQoKSwgImdldC12aWRlby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxs
cHRyKTsKICAgICAgICAgQVNTRVJUKHBhZCk7CiAKICAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0g
IlYiICsgU3RyaW5nOjpudW1iZXIoaSk7CiAgICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFwcGVu
ZChzdHJlYW1JZCk7Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRlb1Ry
YWNrcy5zaXplKCkpKSB7CisgICAgICAgIGlmIChpIDwgbV92aWRlb1RyYWNrcy5zaXplKCkpIHsK
ICAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdU
cmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKICAgICAgICAgICAgIGlmIChleGlz
dGluZ1RyYWNrKSB7CiAgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7
CkBAIC0xMjU1LDYgKzEyMjIsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mVmlkZW8oKQogICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXll
ckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCit7Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewogICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90
aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlZpZGVvQ2Fwc0NoYW5nZWQsIFtwbGF5ZXJdIHsK
QEAgLTEyODIsNyArMTI1Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpu
b3RpZnlQbGF5ZXJPZkF1ZGlvKCkKIAogICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBp
c01lZGlhU291cmNlKCkpOwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOworICAgIHVuc2lnbmVk
IG51bVRyYWNrcyA9IDA7CiAgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2Uo
KTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5n
ZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CiAgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJuLWF1
ZGlvIiwgJm51bVRyYWNrcywgbnVsbHB0cik7CkBAIC0xMzAxLDE0ICsxMjcyLDE0IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKIAogI2lm
IEVOQUJMRShWSURFT19UUkFDSykKICAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZEF1ZGlvU3RyZWFt
czsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgeworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewogICAgICAgICBHUmVmUHRyPEdz
dFBhZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBlbGluZS5nZXQo
KSwgImdldC1hdWRpby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKICAgICAgICAg
QVNTRVJUKHBhZCk7CiAKICAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIkEiICsgU3RyaW5nOjpu
dW1iZXIoaSk7CiAgICAgICAgIHZhbGlkQXVkaW9TdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7Ci0g
ICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV9hdWRpb1RyYWNrcy5zaXplKCkpKSB7
CisgICAgICAgIGlmIChpIDwgbV9hdWRpb1RyYWNrcy5zaXplKCkpIHsKICAgICAgICAgICAgIFJl
ZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fYXVkaW9U
cmFja3MuZ2V0KHN0cmVhbUlkKTsKICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7CiAg
ICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CkBAIC0xMzQ0LDcgKzEz
MTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZU
ZXh0KCkKIAogICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkp
OwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOworICAgIHVuc2lnbmVkIG51bVRyYWNrcyA9IDA7
CiAgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKICAgICBHc3RFbGVt
ZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxp
bmUuZ2V0KCk7CiAgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJuLXRleHQiLCAmbnVtVHJhY2tz
LCBudWxscHRyKTsKQEAgLTEzNTcsNyArMTMyOCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQoKQogICAgIH0KIAogICAgIFZlY3RvcjxTdHJp
bmc+IHZhbGlkVGV4dFN0cmVhbXM7Ci0gICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tz
OyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsK
ICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQtdGV4dC1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBu
dWxscHRyKTsKICAgICAgICAgQVNTRVJUKHBhZCk7CkBAIC0xMzY5LDcgKzEzNDAsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKICAgICAg
ICAgU3RyaW5nIHN0cmVhbUlkID0gIlQiICsgU3RyaW5nOjpudW1iZXIoaSk7CiAKICAgICAgICAg
dmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwotICAgICAgICBpZiAoaSA8IHN0YXRp
Y19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkpKSB7CisgICAgICAgIGlmIChpIDwgbV90
ZXh0VHJhY2tzLnNpemUoKSkgewogICAgICAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1By
aXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX3RleHRUcmFja3MuZ2V0KHN0cmVhbUlk
KTsKICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7CiAgICAgICAgICAgICAgICAgZXhp
c3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CkBAIC0xNDIyLDkgKzEzOTMsNTYgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1RleHRTYW1wbGUoKQogfQogI2VuZGlmCiAKK01l
ZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24oKSBj
b25zdAoreworICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKTsKKworICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImVycm9y
T2NjdXJlZDogJXMsIHBpcGVsaW5lIHN0YXRlOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2RpZEVy
cm9yT2NjdXIpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGlu
ZS5nZXQoKSkpKTsKKyAgICBpZiAobV9kaWRFcnJvck9jY3VyKQorICAgICAgICByZXR1cm4gTWVk
aWFUaW1lOjppbnZhbGlkVGltZSgpOworCisgICAgLy8gVGhlIGR1cmF0aW9uIHF1ZXJ5IHdvdWxk
IGZhaWwgb24gYSBub3QtcHJlcm9sbGVkIHBpcGVsaW5lLgorICAgIGlmIChHU1RfU1RBVEUobV9w
aXBlbGluZS5nZXQoKSkgPCBHU1RfU1RBVEVfUEFVU0VEKQorICAgICAgICByZXR1cm4gTWVkaWFU
aW1lOjppbnZhbGlkVGltZSgpOworCisgICAgaW50NjRfdCBkdXJhdGlvbiA9IDA7CisgICAgaWYg
KCFnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3BpcGVsaW5lLmdldCgpLCBHU1RfRk9STUFU
X1RJTUUsICZkdXJhdGlvbikgfHwgIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEKGR1cmF0aW9uKSkg
eworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJUaW1lIGR1cmF0aW9uIHF1
ZXJ5IGZhaWxlZCBmb3IgJXMiLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKTsKKyAgICB9CisKKyAg
ICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiRHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1B
VCwgR1NUX1RJTUVfQVJHUyhkdXJhdGlvbikpOworICAgIHJldHVybiBNZWRpYVRpbWUoZHVyYXRp
b24sIEdTVF9TRUNPTkQpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aXNNdXRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGdib29sZWFuIGlzTXV0ZWQ7CisgICAgZ19vYmplY3RfZ2V0KG1f
dm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCAmaXNNdXRlZCwgbnVsbHB0cik7CisgICAgR1NU
X0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5ZXIgaXMgbXV0ZWQ6ICVzIiwgYm9vbEZvclBy
aW50aW5nKCEhaXNNdXRlZCkpOworICAgIHJldHVybiBpc011dGVkOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29tbWl0TG9hZCgpCit7CisgICAgQVNTRVJUKCFtX2lz
RGVsYXlpbmdMb2FkKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDb21taXR0
aW5nIGxvYWQuIik7CisKKyAgICAvLyBHU3RyZWFtZXIgbmVlZHMgdG8gaGF2ZSB0aGUgcGlwZWxp
bmUgc2V0IHRvIGEgcGF1c2VkIHN0YXRlIHRvCisgICAgLy8gc3RhcnQgcHJvdmlkaW5nIGFueXRo
aW5nIHVzZWZ1bC4KKyAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOwor
CisgICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCk7CisgICAgdXBkYXRlU3RhdGVzKCk7
Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmaWxsVGltZXJGaXJlZCgp
CiB7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkKSB7CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikg
ewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBBbiBl
cnJvciBvY2N1cnJlZCwgZGlzYWJsaW5nIHRoZSBmaWxsIHRpbWVyIik7CiAgICAgICAgIG1fZmls
bFRpbWVyLnN0b3AoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Niw3ICsxNDg0LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSBuZXR3b3IKIHsKICAgICBHU1RfV0FSTklORygiTG9hZGluZyBmYWlsZWQs
IGVycm9yOiAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG5ldHdvcmtFcnJvcikudXRm
OCgpLmRhdGEoKSk7CiAKLSAgICBtX2Vycm9yT2NjdXJlZCA9IHRydWU7CisgICAgbV9kaWRFcnJv
ck9jY3VyID0gdHJ1ZTsKICAgICBpZiAoZm9yY2VOb3RpZmljYXRpb25zIHx8IG1fbmV0d29ya1N0
YXRlICE9IG5ldHdvcmtFcnJvcikgewogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IG5ldHdvcmtF
cnJvcjsKICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKQEAgLTE1MDks
OCArMTUyNyw4IEBAIEdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVk
aW9TaW5rKCkgY29uc3QKIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGlu
ZSgpLCAiaXNFbmRSZWFjaGVkOiAlcywgc2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xG
b3JQcmludGluZyhtX2lzRW5kUmVhY2hlZCksIGJvb2xGb3JQcmludGluZyhtX3NlZWtpbmcpLCBt
X3NlZWtUaW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKG1faXNFbmRSZWFj
aGVkICYmIG1fc2Vla2luZykKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJpc0Vu
ZFJlYWNoZWQ6ICVzLCBzZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50aW5n
KG1faXNFbmRSZWFjaGVkKSwgYm9vbEZvclByaW50aW5nKG1faXNTZWVraW5nKSwgbV9zZWVrVGlt
ZS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX2lzRW5kUmVhY2hlZCAmJiBt
X2lzU2Vla2luZykKICAgICAgICAgcmV0dXJuIG1fc2Vla1RpbWU7CiAKICAgICAvLyBUaGlzIGNv
bnN0YW50IHNob3VsZCByZW1haW4gbG93ZXIgdGhhbiBIVE1MTWVkaWFFbGVtZW50J3MgbWF4VGlt
ZXVwZGF0ZUV2ZW50RnJlcXVlbmN5LgpAQCAtMTUzMCwxMCArMTU0OCwxMSBAQCBNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uKCkgY29uc3QKICAg
ICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwogICAg
IGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CiAKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5l
KCksICJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgY2FuRmFsbEJhY2tUb0xhc3RGaW5p
c2hlZFNlZWtQb3NpdGlvbjogJXMiLCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSwgYm9vbEZvclBy
aW50aW5nKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbikpOworICAgIEdz
dENsb2NrVGltZSBnc3RyZWFtZXJQb3NpdGlvbiA9IHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4o
cG9zaXRpb24pOworICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgIlBvc2l0aW9uICUi
IEdTVF9USU1FX0ZPUk1BVCAiLCBjYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9u
OiAlcyIsIEdTVF9USU1FX0FSR1MoZ3N0cmVhbWVyUG9zaXRpb24pLCBib29sRm9yUHJpbnRpbmco
bV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uKSk7CiAKICAgICBNZWRpYVRp
bWUgcGxheWJhY2tQb3NpdGlvbiA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICBHc3RDbG9j
a1RpbWUgZ3N0cmVhbWVyUG9zaXRpb24gPSBzdGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0
aW9uKTsKKwogICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChnc3RyZWFtZXJQb3NpdGlv
bikpCiAgICAgICAgIHBsYXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWUoZ3N0cmVhbWVyUG9zaXRp
b24sIEdTVF9TRUNPTkQpOwogICAgIGVsc2UgaWYgKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hl
ZFNlZWtQb3NpdGlvbikKQEAgLTE2MDksNiArMTYyOCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjplbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFj
a1R5CiAgICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFZpZGVvU3Ry
ZWFtSWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6OlRyYWNrVHlwZTo6VW5rbm93bjoKKyAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTY2MCw3ICsxNjgw
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcygpCiAg
ICAgICAgICAgICBHU1RfV0FSTklORygiVW5rbm93biB0cmFjayB0eXBlIGZvdW5kIGZvciBzdHJl
YW0gJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKLSAgICBpZiAoKG9sZEhh
c1ZpZGVvICE9IG1faGFzVmlkZW8pIHx8IChvbGRIYXNBdWRpbyAhPSBtX2hhc0F1ZGlvKSkKKyAg
ICBpZiAob2xkSGFzVmlkZW8gIT0gbV9oYXNWaWRlbyB8fCBvbGRIYXNBdWRpbyAhPSBtX2hhc0F1
ZGlvKQogICAgICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7CiAKICAgICBp
ZiAobV9oYXNWaWRlbykKQEAgLTE3MjAsNyArMTc0MCw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBnY2hhciogY29udGV4dFR5cGU7Ci0gICAg
Z3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250ZXh0VHlwZSk7Cisg
ICAgaWYgKCFnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGUobWVzc2FnZSwgJmNvbnRleHRU
eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiSGFuZGxpbmcgJXMgbmVlZC1jb250ZXh0IG1lc3NhZ2UgZm9yICVzIiwgY29udGV4
dFR5cGUsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKIAogICAgIGlmICghZ19zdHJj
bXAwKGNvbnRleHRUeXBlLCBXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUp
KSB7CkBAIC0xNzcxLDcgKzE3OTMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIGdz
dF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIs
IEdfVFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwogICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JD
KG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
R1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6YWVkIik7CisgICAgICAgICAg
ICBHU1RfV0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFsaXplZCIpOwogCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE3ODEsNyArMTgwMyw3IEBAIGJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdl
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlk
ZW8KKy8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZpZGVvLgogRmxvYXRTaXplIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogewogI2lmIFVTRShHU1RS
RUFNRVJfSE9MRVBVTkNIKQpAQCAtMTgxOSwxMCArMTg0MSw4IEBAIEZsb2F0U2l6ZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKICAgICBpZiAoIWNhcHMp
CiAgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKIAotICAgIC8vIFRPRE86IGhhbmRsZSBwb3Nz
aWJsZSBjbGVhbiBhcGVydHVyZSBkYXRhLiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdu
b21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NTcxCi0gICAgLy8gVE9ETzogaGFuZGxlIHBvc3Np
YmxlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gU2VlCi0gICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5n
bm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjMyNgorICAgIC8vIFRPRE86IGhhbmRsZSBwb3Nz
aWJsZSBjbGVhbiBhcGVydHVyZSBkYXRhLiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcv
c2hvd19idWcuY2dpP2lkPTU5NjU3MQorICAgIC8vIFRPRE86IGhhbmRsZSBwb3NzaWJsZSB0cmFu
c2Zvcm1hdGlvbiBtYXRyaXguIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTk2MzI2CiAKICAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2luYWwg
c2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKICAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtlbHkgbm90
IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgpAQCAtMTgzNCw3ICsxODU0LDcgQEAgRmxvYXRTaXpl
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogCiAjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgY29t
cG9zaXRpbmcsIGlmIHRoZSB2aWRlbyBpcyB0YWdnZWQgYXMgcm90YXRlZCA5MCBvciAyNzAgZGVn
cmVlcywgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0LgotICAgIGlmIChtX3JlbmRlcmluZ0NhbkJlQWNj
ZWxlcmF0ZWQpIHsKKyAgICBpZiAobV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKSB7CiAgICAg
ICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkKICAg
ICAgICAgICAgIG9yaWdpbmFsU2l6ZSA9IG9yaWdpbmFsU2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwog
ICAgIH0KQEAgLTE4NTMsMTkgKzE4NzMsMTkgQEAgRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogICAgIGRpc3BsYXlIZWlnaHQgLz0gZGlz
cGxheUFzcGVjdFJhdGlvR0NEOwogCiAgICAgLy8gQXBwbHkgREFSIHRvIG9yaWdpbmFsIHZpZGVv
IHNpemUuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaW4geHZpbWFnZXNpbmsncyBzZXRj
YXBzIGZ1bmN0aW9uLgotICAgIGd1aW50NjQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIHVp
bnQ2NF90IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKICAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVp
Z2h0KCkgJSBkaXNwbGF5SGVpZ2h0KSkgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIGhlaWdodCIpOwogICAgICAgICB3aWR0aCA9
IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5
V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwotICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWlu
dDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOworICAgICAgICBoZWlnaHQgPSBvcmlnaW5hbFNp
emUuaGVpZ2h0KCk7CiAgICAgfSBlbHNlIGlmICghKG9yaWdpbmFsU2l6ZS53aWR0aCgpICUgZGlz
cGxheVdpZHRoKSkgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJLZWVw
aW5nIHZpZGVvIG9yaWdpbmFsIHdpZHRoIik7CiAgICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3Vp
bnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3Bs
YXlXaWR0aCk7Ci0gICAgICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxT
aXplLndpZHRoKCkpOworICAgICAgICB3aWR0aCA9IG9yaWdpbmFsU2l6ZS53aWR0aCgpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkFwcHJveGlt
YXRpbmcgd2hpbGUga2VlcGluZyBvcmlnaW5hbCB2aWRlbyBoZWlnaHQiKTsKICAgICAgICAgd2lk
dGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlz
cGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8
Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKKyAgICAgICAgaGVpZ2h0ID0gb3JpZ2lu
YWxTaXplLmhlaWdodCgpOwogICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIk5hdHVyYWwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JN
QVQsIHdpZHRoLCBoZWlnaHQpOwpAQCAtMTkyMywzMyArMTk0MywxMyBAQCBNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5U3RhdGUoKSBjb25z
dAogICAgIHJldHVybiBtX3JlYWR5U3RhdGU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzaXplQ2hhbmdlZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0TXV0ZWQoYm9vbCBzaG91bGRNdXRlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZChib29sIG11dGUp
Ci17Ci0gICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQpCisgICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQg
fHwgc2hvdWxkTXV0ZSA9PSBpc011dGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wg
Y3VycmVudFZhbHVlID0gbXV0ZWQoKTsKLSAgICBpZiAoY3VycmVudFZhbHVlID09IG11dGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiU2V0IG11
dGVkIHRvICVzIiwgdG9TdHJpbmcobXV0ZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19vYmplY3Rf
c2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBtdXRlLCBudWxscHRyKTsKLX0KLQot
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om11dGVkKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZ2Jvb2xl
YW4gbXV0ZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUi
LCAmbXV0ZWQsIG51bGxwdHIpOwotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiUGxh
eWVyIGlzIG11dGVkOiAlcyIsIHRvU3RyaW5nKHN0YXRpY19jYXN0PGJvb2w+KG11dGVkKSkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIG11dGVkOworICAgIEdTVF9JTkZPX09CSkVDVChwaXBl
bGluZSgpLCAiTXV0ZWQ/ICVzIiwgYm9vbEZvclByaW50aW5nKHNob3VsZE11dGUpKTsKKyAgICBn
X29iamVjdF9zZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsIHNob3VsZE11dGUsIG51
bGxwdHIpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxh
eWVyT2ZNdXRlKCkKQEAgLTE5OTksNyArMTk5OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgR1NUX0xP
R19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lc3NhZ2UgJXMgcmVjZWl2ZWQgZnJvbSBlbGVtZW50ICVz
IiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpLCBHU1RfTUVTU0FHRV9TUkNfTkFNRSht
ZXNzYWdlKSk7CiAgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CiAgICAg
Y2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICAgICAgaWYgKG1fcmVzZXRQaXBlbGluZSB8fCAh
bV9taXNzaW5nUGx1Z2luQ2FsbGJhY2tzLmlzRW1wdHkoKSB8fCBtX2Vycm9yT2NjdXJlZCkKKyAg
ICAgICAgaWYgKG1fc2hvdWxkUmVzZXRQaXBlbGluZSB8fCAhbV9taXNzaW5nUGx1Z2luQ2FsbGJh
Y2tzLmlzRW1wdHkoKSB8fCBtX2RpZEVycm9yT2NjdXIpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIoKSwgJmRl
YnVnLm91dFB0cigpKTsKICAgICAgICAgR1NUX0VSUk9SKCJFcnJvciAlZDogJXMgKHVybD0lcyki
LCBlcnItPmNvZGUsIGVyci0+bWVzc2FnZSwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CkBAIC0yMDE0LDkgKzIwMTQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAgICAgfHwgZ19lcnJv
cl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1JFU09VUkNFX0VSUk9SLCBHU1RfUkVTT1VSQ0VfRVJS
T1JfTk9UX0ZPVU5EKSkKICAgICAgICAgICAgIGVycm9yID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVy
cm9yOwogICAgICAgICBlbHNlIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RS
RUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX1RZUEVfTk9UX0ZPVU5EKSkgewotICAgICAgICAg
ICAgLy8gTGV0IHRoZSBtZWRpYVBsYXllckNsaWVudCBoYW5kbGUgdGhlIHN0cmVhbSBlcnJvciwg
aW4KLSAgICAgICAgICAgIC8vIHRoaXMgY2FzZSB0aGUgSFRNTE1lZGlhRWxlbWVudCB3aWxsIGVt
aXQgYSBzdGFsbGVkCi0gICAgICAgICAgICAvLyBldmVudC4KKyAgICAgICAgICAgIC8vIExldCB0
aGUgbWVkaWFQbGF5ZXJDbGllbnQgaGFuZGxlIHRoZSBzdHJlYW0gZXJyb3IsIGluIHRoaXMgY2Fz
ZSB0aGUgSFRNTE1lZGlhRWxlbWVudCB3aWxsIGVtaXQgYSBzdGFsbGVkIGV2ZW50LgogICAgICAg
ICAgICAgR1NUX0VSUk9SKCJEZWNvZGUgZXJyb3IsIGxldCB0aGUgTWVkaWEgZWxlbWVudCBlbWl0
IGEgc3RhbGxlZCBldmVudC4iKTsKICAgICAgICAgICAgIG1fbG9hZGluZ1N0YWxsZWQgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDI5LDcgKzIwMjcsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQog
ICAgICAgICBpZiAoYXR0ZW1wdE5leHRMb2NhdGlvbikKICAgICAgICAgICAgIGlzc3VlRXJyb3Ig
PSAhbG9hZE5leHRMb2NhdGlvbigpOwogICAgICAgICBpZiAoaXNzdWVFcnJvcikgewotICAgICAg
ICAgICAgbV9lcnJvck9jY3VyZWQgPSB0cnVlOworICAgICAgICAgICAgbV9kaWRFcnJvck9jY3Vy
ID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBlcnJvcikgewogICAg
ICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gZXJyb3I7CiAgICAgICAgICAgICAgICAgbV9w
bGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKQEAgLTIwNDAsMTIgKzIwMzgsMTIgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSog
bWVzc2FnZSkKICAgICAgICAgZGlkRW5kKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NU
X01FU1NBR0VfQVNZTkNfRE9ORToKLSAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5Ymlu
IHx8IG1fZGVsYXlpbmdMb2FkKQorICAgICAgICBpZiAoIW1lc3NhZ2VTb3VyY2VJc1BsYXliaW4g
fHwgbV9pc0RlbGF5aW5nTG9hZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBhc3luY1N0
YXRlQ2hhbmdlRG9uZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX1NU
QVRFX0NIQU5HRUQ6IHsKLSAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5YmluIHx8IG1f
ZGVsYXlpbmdMb2FkKQorICAgICAgICBpZiAoIW1lc3NhZ2VTb3VyY2VJc1BsYXliaW4gfHwgbV9p
c0RlbGF5aW5nTG9hZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB1cGRhdGVTdGF0ZXMo
KTsKIApAQCAtMjE3Niw4ICsyMTc0LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIWlzUmFuZ2VSZXF1
ZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faXNTdHJlYW1pbmcgPSAhY29udGVudExlbmd0
aDsKLSAgICAgICAgICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICIlcyBz
dHJlYW0gZGV0ZWN0ZWQiLCBtX2lzU3RyZWFtaW5nID8gIkxpdmUiIDogIk5vbi1saXZlIik7Cisg
ICAgICAgICAgICAgICAgICAgIG1faXNMaXZlU3RyZWFtID0gIWNvbnRlbnRMZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtIGRl
dGVjdGVkIiwgbV9pc0xpdmVTdHJlYW0gPyAiTGl2ZSIgOiAiTm9uLWxpdmUiKTsKICAgICAgICAg
ICAgICAgICAgICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtMjI4NSwxNSArMjI4MywxNSBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlQnVmZmVyaW5nU3RhdHVzKEdzdEJ1ZmZlcmluZ01v
ZGUgbW9kZSwgZAogewogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJp
bmddIG1vZGU6ICVzLCBzdGF0dXM6ICVmJSUiLCBlbnVtVG9TdHJpbmcoR1NUX1RZUEVfQlVGRkVS
SU5HX01PREUsIG1vZGUpLmRhdGEoKSwgcGVyY2VudGFnZSk7CiAKLSAgICBtX2Rvd25sb2FkRmlu
aXNoZWQgPSBwZXJjZW50YWdlID09IDEwMDsKLSAgICBtX2J1ZmZlcmluZyA9ICFtX2Rvd25sb2Fk
RmluaXNoZWQ7CisgICAgbV9kaWREb3dubG9hZEZpbmlzaCA9IHBlcmNlbnRhZ2UgPT0gMTAwOwor
ICAgIG1faXNCdWZmZXJpbmcgPSAhbV9kaWREb3dubG9hZEZpbmlzaDsKIAogICAgIHN3aXRjaCAo
bW9kZSkgewogICAgIGNhc2UgR1NUX0JVRkZFUklOR19TVFJFQU06IHsKICAgICAgICAgdXBkYXRl
TWF4VGltZUxvYWRlZChwZXJjZW50YWdlKTsKIAogICAgICAgICBtX2J1ZmZlcmluZ1BlcmNlbnRh
Z2UgPSBwZXJjZW50YWdlOwotICAgICAgICBpZiAobV9kb3dubG9hZEZpbmlzaGVkKQorICAgICAg
ICBpZiAobV9kaWREb3dubG9hZEZpbmlzaCkKICAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOwog
CiAgICAgICAgIGJyZWFrOwpAQCAtMjMwMyw3ICsyMzAxLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhHc3RCdWZmZXJpbmdNb2RlIG1v
ZGUsIGQKIAogICAgICAgICAvLyBNZWRpYSBpcyBub3cgZnVsbHkgbG9hZGVkLiBJdCB3aWxsIHBs
YXkgZXZlbiBpZiBuZXR3b3JrIGNvbm5lY3Rpb24gaXMKICAgICAgICAgLy8gY3V0LiBCdWZmZXJp
bmcgaXMgZG9uZSwgcmVtb3ZlIHRoZSBmaWxsIHNvdXJjZSBmcm9tIHRoZSBtYWluIGxvb3AuCi0g
ICAgICAgIGlmIChtX2Rvd25sb2FkRmluaXNoZWQpCisgICAgICAgIGlmIChtX2RpZERvd25sb2Fk
RmluaXNoKQogICAgICAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOwogCiAgICAgICAgIHVwZGF0
ZVN0YXRlcygpOwpAQCAtMjMyMyw3ICsyMzIxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnByb2Nlc3NNcGVnVHNTZWN0aW9uKEdzdE1wZWd0c1NlY3Rpb24qIHNlY3Rpb24K
ICAgICBpZiAoc2VjdGlvbi0+c2VjdGlvbl90eXBlID09IEdTVF9NUEVHVFNfU0VDVElPTl9QTVQp
IHsKICAgICAgICAgY29uc3QgR3N0TXBlZ3RzUE1UKiBwbXQgPSBnc3RfbXBlZ3RzX3NlY3Rpb25f
Z2V0X3BtdChzZWN0aW9uKTsKICAgICAgICAgbV9tZXRhZGF0YVRyYWNrcy5jbGVhcigpOwotICAg
ICAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgcG10LT5zdHJlYW1zLT5sZW47ICsraSkgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG10LT5zdHJlYW1zLT5sZW47ICsraSkgewog
ICAgICAgICAgICAgY29uc3QgR3N0TXBlZ3RzUE1UU3RyZWFtKiBzdHJlYW0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHc3RNcGVndHNQTVRTdHJlYW0qPihnX3B0cl9hcnJheV9pbmRleChwbXQtPnN0cmVh
bXMsIGkpKTsKICAgICAgICAgICAgIGlmIChzdHJlYW0tPnN0cmVhbV90eXBlID09IDB4MDUgfHwg
c3RyZWFtLT5zdHJlYW1fdHlwZSA+PSAweDgwKSB7CiAgICAgICAgICAgICAgICAgQXRvbVN0cmlu
ZyBwaWQgPSBTdHJpbmc6Om51bWJlcihzdHJlYW0tPnBpZCk7CkBAIC0yMzQyLDkgKzIzNDAsOSBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc01wZWdUc1NlY3Rpb24o
R3N0TXBlZ3RzU2VjdGlvbiogc2VjdGlvbgogICAgICAgICAgICAgICAgIC8vIGV4cHJlc3NlZCBp
biBoZXhhZGVjaW1hbCB1c2luZyB1cHBlcmNhc2UgQVNDSUkgaGV4IGRpZ2l0cy4KICAgICAgICAg
ICAgICAgICBTdHJpbmcgaW5iYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZTsKICAgICAgICAg
ICAgICAgICBhcHBlbmRVbnNpZ25lZEFzSGV4Rml4ZWRTaXplKHN0cmVhbS0+c3RyZWFtX3R5cGUs
IGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUsIDIpOwotICAgICAgICAgICAgICAgIGZv
ciAoZ3VpbnQgaiA9IDA7IGogPCBzdHJlYW0tPmRlc2NyaXB0b3JzLT5sZW47ICsraikgeworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzdHJlYW0tPmRlc2NyaXB0b3Jz
LT5sZW47ICsraikgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RNcGVndHNEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yID0gc3RhdGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzRGVzY3JpcHRvcio+
KGdfcHRyX2FycmF5X2luZGV4KHN0cmVhbS0+ZGVzY3JpcHRvcnMsIGopKTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChndWludCBrID0gMDsgayA8IGRlc2NyaXB0b3ItPmxlbmd0aDsgKytrKQor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGVzY3JpcHRvci0+
bGVuZ3RoOyArK2spCiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoZGVz
Y3JpcHRvci0+ZGF0YVtrXSwgaW5iYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRJbkJhbmRNZXRhZGF0YVRy
YWNrRGlzcGF0Y2hUeXBlKGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOwpAQCAtMjM5
NCwxMCArMjM5MiwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vz
c1RhYmxlT2ZDb250ZW50c0VudHJ5KEdzdFRvY0VudHJ5KiBlbnRyeQogCiAgICAgZ2ludDY0IHN0
YXJ0ID0gLTEsIHN0b3AgPSAtMTsKICAgICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3Rp
bWVzKGVudHJ5LCAmc3RhcnQsICZzdG9wKTsKKworICAgIHVpbnQzMl90IHRydW5jYXRlZEdzdFNl
Y29uZCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihHU1RfU0VDT05EKTsKICAgICBpZiAoc3RhcnQg
IT0gLTEpCi0gICAgICAgIGN1ZS0+c2V0U3RhcnRUaW1lKE1lZGlhVGltZShzdGFydCwgR1NUX1NF
Q09ORCkpOworICAgICAgICBjdWUtPnNldFN0YXJ0VGltZShNZWRpYVRpbWUoc3RhdGljX2Nhc3Q8
aW50NjRfdD4oc3RhcnQpLCB0cnVuY2F0ZWRHc3RTZWNvbmQpKTsKICAgICBpZiAoc3RvcCAhPSAt
MSkKLSAgICAgICAgY3VlLT5zZXRFbmRUaW1lKE1lZGlhVGltZShzdG9wLCBHU1RfU0VDT05EKSk7
CisgICAgICAgIGN1ZS0+c2V0RW5kVGltZShNZWRpYVRpbWUoc3RhdGljX2Nhc3Q8aW50NjRfdD4o
c3RvcCksIHRydW5jYXRlZEdzdFNlY29uZCkpOwogCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdz
dF90b2NfZW50cnlfZ2V0X3RhZ3MoZW50cnkpOwogICAgIGlmICh0YWdzKSB7CkBAIC0yNDk1LDE1
ICsyNDk1LDE1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9sZERv
d25sb2FkRmlsZXMoY29uc3QgY2hhciogZG93bmxvYWRGaWxlCiAKIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjphc3luY1N0YXRlQ2hhbmdlRG9uZSgpCiB7Ci0gICAgaWYgKCFtX3Bp
cGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVy
cm9yT2NjdXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3NlZWtpbmcpIHsKLSAgICAg
ICAgaWYgKG1fc2Vla0lzUGVuZGluZykKKyAgICBpZiAobV9pc1NlZWtpbmcpIHsKKyAgICAgICAg
aWYgKG1faXNTZWVrUGVuZGluZykKICAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVr
XSBzZWVrZWQgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1NlZWtpbmcgPSBm
YWxzZTsKICAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCk7CiAgICAgICAgICAgICBpZiAobV90aW1lT2ZPdmVybGFwcGluZ1NlZWsgIT0gbV9zZWVr
VGltZSAmJiBtX3RpbWVPZk92ZXJsYXBwaW5nU2Vlay5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAg
ICAgICBzZWVrKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrKTsKQEAgLTI1MjMsMTYgKzI1MjMsMTIg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25l
KCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiB7
Ci0gICAgaWYgKCFtX3BpcGVsaW5lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9lcnJv
ck9jY3VyZWQpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1fZGlkRXJyb3JPY2N1cikKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3Rh
dGUgPSBtX25ldHdvcmtTdGF0ZTsKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFk
eVN0YXRlID0gbV9yZWFkeVN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7Ci0gICAgR3N0U3Rh
dGUgc3RhdGU7CisgICAgR3N0U3RhdGUgcGVuZGluZywgc3RhdGU7CiAgICAgYm9vbCBzdGF0ZVJl
YWxseUNoYW5nZWQgPSBmYWxzZTsKIAogICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRl
UmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwg
JnBlbmRpbmcsIDI1MCAqIEdTVF9OU0VDT05EKTsKQEAgLTI1NTIsOSArMjU0OCw5IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICBpZiAo
bV9pc0VuZFJlYWNoZWQgJiYgbV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gbV9jdXJyZW50U3Rh
dGUgPD0gR1NUX1NUQVRFX1JFQURZOworICAgICAgICBtX3Nob3VsZFJlc2V0UGlwZWxpbmUgPSBt
X2N1cnJlbnRTdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFk7CiAKLSAgICAgICAgYm9vbCBkaWRCdWZm
ZXJpbmcgPSBtX2J1ZmZlcmluZzsKKyAgICAgICAgYm9vbCBkaWRCdWZmZXJpbmcgPSBtX2lzQnVm
ZmVyaW5nOwogCiAgICAgICAgIC8vIFVwZGF0ZSByZWFkeSBhbmQgbmV0d29yayBzdGF0ZXMuCiAg
ICAgICAgIHN3aXRjaCAobV9jdXJyZW50U3RhdGUpIHsKQEAgLTI1NjgsMTcgKzI1NjQsMTcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBHU1RfU1RBVEVfUEFVU0VEOgogICAgICAgICBjYXNl
IEdTVF9TVEFURV9QTEFZSU5HOgotICAgICAgICAgICAgaWYgKG1fYnVmZmVyaW5nKSB7CisgICAg
ICAgICAgICBpZiAobV9pc0J1ZmZlcmluZykgewogICAgICAgICAgICAgICAgIGlmIChtX2J1ZmZl
cmluZ1BlcmNlbnRhZ2UgPT0gMTAwKSB7CiAgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIENvbXBsZXRlLiIpOwotICAgICAgICAgICAg
ICAgICAgICBtX2J1ZmZlcmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX2lzQnVm
ZmVyaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBtX2Rvd25sb2FkRmluaXNoZWQgPyBNZWRpYVBsYXllcjo6SWRsZSA6IE1lZGlhUGxheWVy
OjpMb2FkaW5nOworICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IG1fZGlkRG93
bmxvYWRGaW5pc2ggPyBNZWRpYVBsYXllcjo6SWRsZSA6IE1lZGlhUGxheWVyOjpMb2FkaW5nOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7CiAgICAgICAgICAgICAgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX2Rvd25sb2FkRmluaXNoZWQpIHsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9kaWREb3dubG9hZEZpbmlzaCkgewogICAgICAgICAgICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKICAgICAgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CiAgICAgICAgICAgICB9IGVsc2Ug
ewpAQCAtMjU5NCwyNSArMjU5MCwyNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dXBkYXRlU3RhdGVzKCkKIAogICAgICAgICAvLyBTeW5jIHN0YXRlcyB3aGVyZSBuZWVkZWQu
CiAgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICBp
ZiAoIW1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgbm90
aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICBub3RpZnlQbGF5ZXJP
Zk11dGUoKTsKLSAgICAgICAgICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgbV9hcmVWb2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVl
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoZGlkQnVmZmVyaW5nICYmICFtX2J1
ZmZlcmluZyAmJiAhbV9wYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpIHsKKyAgICAgICAgICAgIGlm
IChkaWRCdWZmZXJpbmcgJiYgIW1faXNCdWZmZXJpbmcgJiYgIW1faXNQYXVzZWQgJiYgbV9wbGF5
YmFja1JhdGUpIHsKICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOwogICAgICAgICAgICAgICAgIGNo
YW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0g
ICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZh
bHNlOwogCi0gICAgICAgICAgICBpZiAoKG1fYnVmZmVyaW5nICYmICFpc0xpdmVTdHJlYW0oKSkg
fHwgIW1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAgICBpZiAoKG1faXNCdWZmZXJpbmcgJiYg
bV9pc0xpdmVTdHJlYW0pIHx8ICFtX3BsYXliYWNrUmF0ZSkgewogICAgICAgICAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFBhdXNpbmcgc3RyZWFtIGZv
ciBidWZmZXJpbmcuIik7CiAgICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1Rf
U1RBVEVfUEFVU0VEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX3BhdXNlZCA9IHRydWU7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKIAogICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJPbGQgc3RhdGU6ICVzLCBuZXcgc3Rh
dGU6ICVzIChyZXF1ZXN0ZWQ6ICVzKSIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fb2xk
U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKG1fcmVxdWVzdGVkU3RhdGUpKTsKICAgICAgICAgaWYgKG1f
cmVxdWVzdGVkU3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBH
U1RfU1RBVEVfUEFVU0VEKSB7CkBAIC0yNjM3LDI0ICsyNjMzLDI0IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICBicmVhazsKICAgICBj
YXNlIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRToKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiRmFpbHVyZTogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUocGVuZGluZykpOwotICAgICAgICAvLyBDaGFuZ2UgZmFpbGVkCisgICAgICAgIC8vIENoYW5n
ZSBmYWlsZWQuCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9f
UFJFUk9MTDoKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm8gcHJlcm9s
bDogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1f
Y3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwogCiAg
ICAgICAgIC8vIExpdmUgcGlwZWxpbmVzIGdvIGluIFBBVVNFRCB3aXRob3V0IHByZXJvbGxpbmcu
Ci0gICAgICAgIG1faXNTdHJlYW1pbmcgPSB0cnVlOworICAgICAgICBtX2lzTGl2ZVN0cmVhbSA9
IHRydWU7CiAgICAgICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOwogCiAgICAgICAg
IGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCiAgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CiAgICAgICAgIGVsc2UgaWYgKG1f
Y3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKICAgICAgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICAgICAgICAgIG1fcGF1c2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1faXNQYXVzZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2Ug
aWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQotICAgICAgICAgICAgbV9w
YXVzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKIAotICAgICAg
ICBpZiAoIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKQorICAgICAgICBpZiAoIW1faXNQYXVz
ZWQgJiYgbV9wbGF5YmFja1JhdGUpCiAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdT
VF9TVEFURV9QTEFZSU5HKTsKIAogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVy
OjpMb2FkaW5nOwpAQCAtMjY4MCwxMSArMjY3NiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKIAogICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBH
U1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgbV9jdXJyZW50U3RhdGUgPj0gR1NUX1NUQVRFX1BB
VVNFRCkgewogICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKLSAgICAgICAgaWYgKG1fc2Vl
a0lzUGVuZGluZykgeworICAgICAgICBpZiAobV9pc1NlZWtQZW5kaW5nKSB7CiAgICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gY29tbWl0dGluZyBwZW5kaW5n
IHNlZWsgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIG1fc2Vla0lzUGVuZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgbV9zZWVraW5nID0g
ZG9TZWVrKG1fc2Vla1RpbWUsIG1fcGxheWVyLT5yYXRlKCksIHN0YXRpY19jYXN0PEdzdFNlZWtG
bGFncz4oR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpKTsKLSAg
ICAgICAgICAgIGlmICghbV9zZWVraW5nKSB7CisgICAgICAgICAgICBtX2lzU2Vla1BlbmRpbmcg
PSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNTZWVraW5nID0gZG9TZWVrKG1fc2Vla1RpbWUsIG1f
cGxheWVyLT5yYXRlKCksIHN0YXRpY19jYXN0PEdzdFNlZWtGbGFncz4oR1NUX1NFRUtfRkxBR19G
TFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpKTsKKyAgICAgICAgICAgIGlmICghbV9pc1Nl
ZWtpbmcpIHsKICAgICAgICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpOwogICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIltTZWVrXSBzZWVraW5nIHRvICVzIGZhaWxlZCIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgfQpAQCAtMjcxOCw3ICsyNzE0LDcgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24oKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBHVmFsdWUqIGxvY2F0aW9ucyA9IGdzdF9zdHJ1Y3R1
cmVfZ2V0X3ZhbHVlKG1fbWVkaWFMb2NhdGlvbnMsICJsb2NhdGlvbnMiKTsKLSAgICBjb25zdCBn
Y2hhciogbmV3TG9jYXRpb24gPSBudWxscHRyOworICAgIGNvbnN0IGNoYXIqIG5ld0xvY2F0aW9u
ID0gbnVsbHB0cjsKIAogICAgIGlmICghbG9jYXRpb25zKSB7CiAgICAgICAgIC8vIEZhbGxiYWNr
IG9uIG5ldy1sb2NhdGlvbiBzdHJpbmcuCkBAIC0yNzc1LDcgKzI3NzEsNyBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRMb2NhdGlvbigpCiAgICAgICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKIAogICAgICAgICAgICAgLy8gUmVzZXQgcGlw
ZWxpbmUgc3RhdGUuCi0gICAgICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSB0cnVlOworICAgICAg
ICAgICAgbV9zaG91bGRSZXNldFBpcGVsaW5lID0gdHJ1ZTsKIAogICAgICAgICAgICAgR3N0U3Rh
dGUgc3RhdGU7CiAgICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgJnN0YXRlLCBudWxscHRyLCAwKTsKQEAgLTI4MDEsNyArMjc5Nyw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRFbmQoKQogICAgIC8vIHBvc2l0aW9uIGlzIG5v
dCBhbHdheXMgcmVwb3J0ZWQgYXMgMCBmb3IgaW5zdGFuY2UuCiAgICAgbV9jYWNoZWRQb3NpdGlv
biA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKICAgICBNZWRpYVRpbWUgbm93ID0gY3VycmVu
dE1lZGlhVGltZSgpOwotICAgIGlmIChub3cgPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkgJiYgIW1f
c2Vla2luZykgeworICAgIGlmIChub3cgPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkgJiYgIW1faXNT
ZWVraW5nKSB7CiAgICAgICAgIG1fY2FjaGVkRHVyYXRpb24gPSBub3c7CiAgICAgICAgIG1fcGxh
eWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKICAgICB9CkBAIC0yODA5LDkgKzI4MDUsOSBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKCkKICAgICBtX2lzRW5kUmVhY2hl
ZCA9IHRydWU7CiAKICAgICBpZiAoIW1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllcklzTG9v
cGluZygpKSB7Ci0gICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgbV9pc1BhdXNlZCA9
IHRydWU7CiAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsKLSAg
ICAgICAgbV9kb3dubG9hZEZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgIG1fZGlkRG93bmxvYWRG
aW5pc2ggPSBmYWxzZTsKICAgICB9CiAgICAgdGltZUNoYW5nZWQoKTsKIH0KQEAgLTI4NjQsMTIg
KzI4NjAsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZURvd25s
b2FkQnVmZmVyaW5nRmxhZygpCiAgICAgdW5zaWduZWQgZmxhZ0Rvd25sb2FkID0gZ2V0R3N0UGxh
eUZsYWcoImRvd25sb2FkIik7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHN0b3AgZG93bmxv
YWRpbmcgaWYgd2UgYWxyZWFkeSBzdGFydGVkIGl0LgotICAgIGlmIChmbGFncyAmIGZsYWdEb3du
bG9hZCAmJiBtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcgJiYgIW1fcmVz
ZXRQaXBlbGluZSkgeworICAgIGlmIChmbGFncyAmIGZsYWdEb3dubG9hZCAmJiBtX3JlYWR5U3Rh
dGUgPiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcgJiYgIW1fc2hvdWxkUmVzZXRQaXBlbGluZSkg
ewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJEb3dubG9hZCBhbHJlYWR5
IHN0YXJ0ZWQsIG5vdCBzdGFydGluZyBhZ2FpbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYm9vbCBzaG91bGREb3dubG9hZCA9ICFpc0xpdmVTdHJlYW0oKSAmJiBtX3ByZWxvYWQg
PT0gTWVkaWFQbGF5ZXI6OkF1dG87CisgICAgYm9vbCBzaG91bGREb3dubG9hZCA9ICFtX2lzTGl2
ZVN0cmVhbSAmJiBtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG87CiAgICAgaWYgKHNob3Vs
ZERvd25sb2FkKSB7CiAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiRW5hYmxp
bmcgb24tZGlzayBidWZmZXJpbmciKTsKICAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUu
Z2V0KCksICJmbGFncyIsIGZsYWdzIHwgZmxhZ0Rvd25sb2FkLCBudWxscHRyKTsKQEAgLTI4ODMs
NyArMjg3OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVEb3du
bG9hZEJ1ZmZlcmluZ0ZsYWcoKQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwaXBlbGluZU5h
bWUpCiB7Ci0gICAgY29uc3QgZ2NoYXIqIHBsYXliaW5OYW1lID0gInBsYXliaW4iOworICAgIGNv
bnN0IGNoYXIqIHBsYXliaW5OYW1lID0gInBsYXliaW4iOwogCiAgICAgLy8gTVNFIGRvZXNuJ3Qg
c3VwcG9ydCBwbGF5YmluMy4gTWVkaWFzdHJlYW0gcmVxdWlyZXMgcGxheWJpbjMuIFJlZ3VsYXIK
ICAgICAvLyBwbGF5YmFjayBjYW4gdXNlIHBsYXliaW4zIG9uLWRlbWFuZCB3aXRoIHRoZSBXRUJL
SVRfR1NUX1VTRV9QTEFZQklOMwpAQCAtMjkwNiw4ICsyOTAyLDYgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYKIAogICAgIG1faXNMZWdhY3lQbGF5YmluID0gIWdfc3RyY21wMChwbGF5YmluTmFt
ZSwgInBsYXliaW4iKTsKIAotICAgIC8vIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgpIHJldHVy
bnMgYSBmbG9hdGluZyByZWZlcmVuY2Ugc28KLSAgICAvLyB3ZSBzaG91bGQgbm90IGFkb3B0Lgog
ICAgIHN0YXRpYyBBdG9taWM8dWludDMyX3Q+IHBpcGVsaW5lSWQ7CiAgICAgc2V0UGlwZWxpbmUo
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKHBsYXliaW5OYW1lLAogICAgICAgICAocGlwZWxpbmVO
YW1lLmlzRW1wdHkoKSA/IG1ha2VTdHJpbmcoIm1lZGlhLXBsYXllci0iLCBwaXBlbGluZUlkLmV4
Y2hhbmdlQWRkKDEpKSA6IHBpcGVsaW5lTmFtZSkudXRmOCgpLmRhdGEoKSkpOwpAQCAtMjk3Myw3
ICsyOTY3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBs
YXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYKIAogICAgIGNvbmZpZ3VyZVBsYXlT
aW5rKCk7CiAKLSAgICBpZiAobV9wcmVzZXJ2ZXNQaXRjaCkgeworICAgIGlmIChtX3Nob3VsZFBy
ZXNlcnZlUGl0Y2gpIHsKICAgICAgICAgR3N0RWxlbWVudCogc2NhbGUgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoInNjYWxldGVtcG8iLCBudWxscHRyKTsKIAogICAgICAgICBpZiAoIXNjYWxl
KQpAQCAtMjk4Miw3ICsyOTc2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYKICAgICAgICAg
ICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tZmlsdGVyIiwgc2NhbGUs
IG51bGxwdHIpOwogICAgIH0KIAotICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVk
KSB7CisgICAgaWYgKCFtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpIHsKICAgICAgICAgLy8g
SWYgbm90IHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLCBsZXQgR1N0cmVhbWVyIGhhbmRs
ZQogICAgICAgICAvLyB0aGUgaW1hZ2Utb3JpZW50YXRpb24gdGFnLgogICAgICAgICBHc3RFbGVt
ZW50KiB2aWRlb0ZsaXAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInZpZGVvZmxpcCIsIG51
bGxwdHIpOwpAQCAtMzAwNyw3ICszMDAxLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmRpZFBhc3NDT1JTQWNjZXNzQ2hlY2soKSBjb25zdAogCiBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1lZGlhRGF0YSgpIGNvbnN0CiB7Ci0gICAgaWYgKGlz
TGl2ZVN0cmVhbSgpKQorICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKG1fdXJsLmlzTG9jYWxGaWxlKCkpCkBAIC0zMDI3LDcgKzMwMjEsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlUaW1lckZpcmVkKCkKIAog
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3Rh
dGVDaGFuZ2VkKCkKIHsKLSAgICBtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQgPSBtX3BsYXll
ciAmJiBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCgpOworICAgIG1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCA9IG1fcGxheWVyICYm
IG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkKCk7CiB9CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCkBAIC0zMDc1LDcgKzMwNjks
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVzaFRleHR1cmVUb0NvbXBv
c2l0b3IoKQogICAgICAgICAgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVI
b2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3Nh
bXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3Ms
ICFtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0Zy
YW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0
dXJlTWFwcGVyRmxhZ3MsICFtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luayk7CiAKICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5
ZXJCdWZmZXI7CiAgICAgICAgICAgICBpZiAoZnJhbWVIb2xkZXItPmhhc01hcHBlZFRleHR1cmVz
KCkpIHsKQEAgLTMxMTcsMjMgKzMxMTEsMjMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnJlcGFpbnQoKQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dHJp
Z2dlclJlcGFpbnQoR3N0U2FtcGxlKiBzYW1wbGUpCiB7Ci0gICAgYm9vbCB0cmlnZ2VyUmVzaXpl
OworICAgIGJvb2wgc2hvdWxkVHJpZ2dlclJlc2l6ZTsKICAgICB7CiAgICAgICAgIGF1dG8gc2Ft
cGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0gICAgICAgIHRyaWdnZXJSZXNp
emUgPSAhbV9zYW1wbGU7CisgICAgICAgIHNob3VsZFRyaWdnZXJSZXNpemUgPSAhbV9zYW1wbGU7
CiAgICAgICAgIG1fc2FtcGxlID0gc2FtcGxlOwogICAgIH0KIAotICAgIGlmICh0cmlnZ2VyUmVz
aXplKSB7CisgICAgaWYgKHNob3VsZFRyaWdnZXJSZXNpemUpIHsKICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiRmlyc3Qgc2FtcGxlIHJlYWNoZWQgdGhlIHNpbmssIHRyaWdn
ZXJpbmcgdmlkZW8gZGltZW5zaW9ucyB1cGRhdGUiKTsKICAgICAgICAgbV9ub3RpZmllci0+bm90
aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlNpemVDaGFuZ2VkLCBbdGhpc10gewogICAgICAg
ICAgICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAg
IGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKSB7CisgICAgaWYgKCFtX2NhblJlbmRl
cmluZ0JlQWNjZWxlcmF0ZWQpIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kcmF3TXV0
ZXgpOwotICAgICAgICBpZiAobV9kZXN0cm95aW5nKQorICAgICAgICBpZiAobV9pc0JlaW5nRGVz
dHJveWVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2RyYXdUaW1lci5zdGFydE9u
ZVNob3QoMF9zKTsKICAgICAgICAgbV9kcmF3Q29uZGl0aW9uLndhaXQobV9kcmF3TXV0ZXgpOwpA
QCAtMzE0MSw3ICszMTM1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRy
aWdnZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQogICAgIH0KIAogI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKLSAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKSB7CisgICAgaWYg
KG1faXNVc2luZ0ZhbGxiYWNrVmlkZW9TaW5rKSB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9jayht
X2RyYXdNdXRleCk7CiAgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQogICAgICAgICAgICAg
W3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQpAQCAtMzE3Nywx
MCArMzE3MSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsUmVw
YWludChib29sIGRlc3Ryb3lpbmcpCiAgICAgLy8KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFs
c28gdXNlZCB3aGVuIGRlc3Ryb3lpbmcgdGhlIHBsYXllciAoZGVzdHJveWluZyBwYXJhbWV0ZXIg
aXMgdHJ1ZSksIHRvIHJlbGVhc2UgdGhlIGdzdHJlYW1lciB0aHJlYWQgZnJvbQogICAgIC8vIG1f
ZHJhd0NvbmRpdGlvbiBhbmQgdG8gZW5zdXJlIHRoYXQgbmV3IHRyaWdnZXJSZXBhaW50IGNhbGxz
IHdvbid0IHdhaXQgb24gbV9kcmF3Q29uZGl0aW9uLgotICAgIGlmICghbV9yZW5kZXJpbmdDYW5C
ZUFjY2VsZXJhdGVkKSB7CisgICAgaWYgKCFtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpIHsK
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kcmF3TXV0ZXgpOwogICAgICAgICBtX2RyYXdU
aW1lci5zdG9wKCk7Ci0gICAgICAgIG1fZGVzdHJveWluZyA9IGRlc3Ryb3lpbmc7CisgICAgICAg
IG1faXNCZWluZ0Rlc3Ryb3llZCA9IGRlc3Ryb3lpbmc7CiAgICAgICAgIG1fZHJhd0NvbmRpdGlv
bi5ub3RpZnlPbmUoKTsKICAgICB9CiB9CkBAIC0zMjYyLDkgKzMyNTYsOSBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlYwogICAgICAgICAgICAgbV9jb2xvckNvbnZlcnRJbnB1dENhcHMgPSBjYXBz
OwogICAgICAgICAgICAgbV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzID0gYWRvcHRHUmVmKGdzdF9j
YXBzX2NvcHkoY2FwcykpOwogI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSAg
ICAgICAgICAgIGNvbnN0IGdjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19IQVNf
QUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiQkdSeCI7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBmb3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykg
PyAiUkdCQSIgOiAiQkdSeCI7CiAjZWxzZQotICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZvcm1h
dFN0cmluZyA9IEdTVF9WSURFT19JTkZPX0hBU19BTFBIQSgmdmlkZW9JbmZvKSA/ICJSR0JBIiA6
ICJSR0J4IjsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdFN0cmluZyA9IEdTVF9WSURF
T19JTkZPX0hBU19BTFBIQSgmdmlkZW9JbmZvKSA/ICJSR0JBIiA6ICJSR0J4IjsKICNlbmRpZgog
ICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2NvbG9yQ29udmVydE91dHB1dENhcHMu
Z2V0KCksICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBmb3JtYXRTdHJpbmcsIG51bGxwdHIpOwog
ICAgICAgICAgICAgaWYgKCFnc3RfZ2xfY29sb3JfY29udmVydF9zZXRfY2FwcyhtX2NvbG9yQ29u
dmVydC5nZXQoKSwgY2FwcywgbV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzLmdldCgpKSkKQEAgLTMy
ODUsNyArMzI3OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYWludChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKCFnc3RJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4dC5kcmF3SW1hZ2UoZ3N0SW1hZ2UtPmlt
YWdlKCksIHJlY3QsIGdzdEltYWdlLT5yZWN0KCksIHsgQ29tcG9zaXRlQ29weSwgbV9yZW5kZXJp
bmdDYW5CZUFjY2VsZXJhdGVkID8gbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uIDogSW1hZ2VPcmll
bnRhdGlvbigpIH0pOworICAgIGNvbnRleHQuZHJhd0ltYWdlKGdzdEltYWdlLT5pbWFnZSgpLCBy
ZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7IENvbXBvc2l0ZUNvcHksIG1fY2FuUmVuZGVyaW5nQmVB
Y2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA6IEltYWdlT3JpZW50YXRpb24o
KSB9KTsKIH0KIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCkBAIC0zMjkzLDcgKzMyODcsNyBAQCBi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udAogewogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKIAot
ICAgIGlmIChtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspCisgICAgaWYgKG1faXNVc2luZ0ZhbGxi
YWNrVmlkZW9TaW5rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocHJlbXVsdGlw
bHlBbHBoYSkKQEAgLTMzMjUsNyArMzMxOSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250CiBO
YXRpdmVJbWFnZVB0ciBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdGl2ZUltYWdlRm9y
Q3VycmVudFRpbWUoKQogewogI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLSAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQorICAgIGlmIChtX2lz
VXNpbmdGYWxsYmFja1ZpZGVvU2luaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBh
dXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwpAQCAtMzQwNiw3ICsz
NDAwLDcgQEAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKICAgICBpZiAobV9yZWFkeVN0YXRlID09IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpVbmtu
b3duOwogCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkK
ICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOwogCiAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyOjpEb3dubG9hZDsKQEAgLTM0ODQsMTIgKzM0NzgsMTIgQEAgR3N0RWxlbWVudCog
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVWaWRlb1NpbmsoKQogI2VuZGlmCiAK
ICNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGlmIChtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0
ZWQpCisgICAgaWYgKG1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCkKICAgICAgICAgbV92aWRl
b1NpbmsgPSBjcmVhdGVWaWRlb1NpbmtHTCgpOwogI2VuZGlmCiAKICAgICBpZiAoIW1fdmlkZW9T
aW5rKSB7Ci0gICAgICAgIG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayA9IHRydWU7CisgICAgICAg
IG1faXNVc2luZ0ZhbGxiYWNrVmlkZW9TaW5rID0gdHJ1ZTsKICAgICAgICAgbV92aWRlb1Npbmsg
PSB3ZWJraXRWaWRlb1NpbmtOZXcoKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKHJlcGFp
bnRDYWxsYmFjayksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92
aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LWNhbmNlbGxlZCIsIEdfQ0FMTEJBQ0socmVwYWludENh
bmNlbGxlZENhbGxiYWNrKSwgdGhpcyk7CkBAIC0zNTQzLDcgKzM1MzcsNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJlYW1W
b2x1bWUqIHZvbHVtZQogCiB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRl
Y29kZWRGcmFtZUNvdW50KCkgY29uc3QKIHsKLSAgICBndWludDY0IGRlY29kZWRGcmFtZXMgPSAw
OworICAgIHVpbnQ2NF90IGRlY29kZWRGcmFtZXMgPSAwOwogICAgIGlmIChtX2Zwc1NpbmspCiAg
ICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmsuZ2V0KCksICJmcmFtZXMtcmVuZGVyZWQiLCAm
ZGVjb2RlZEZyYW1lcywgbnVsbHB0cik7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihkZWNvZGVkRnJhbWVzKTsKQEAgLTM1NTEsNyArMzU0NSw3IEBAIHVuc2lnbmVkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdAogCiB1bnNpZ25l
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRyb3BwZWRGcmFtZUNvdW50KCkgY29uc3QK
IHsKLSAgICBndWludDY0IGZyYW1lc0Ryb3BwZWQgPSAwOworICAgIHVpbnQ2NF90IGZyYW1lc0Ry
b3BwZWQgPSAwOwogICAgIGlmIChtX2Zwc1NpbmspCiAgICAgICAgIGdfb2JqZWN0X2dldChtX2Zw
c1NpbmsuZ2V0KCksICJmcmFtZXMtZHJvcHBlZCIsICZmcmFtZXNEcm9wcGVkLCBudWxscHRyKTsK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lc0Ryb3BwZWQpOwpAQCAtMzY0
OSw4ICszNjQzLDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF0dGVtcHRU
b0RlY3J5cHRXaXRoSW5zdGFuY2UoQ0RNSW5zdGFuY2UmIGluc3QKIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpCiB7
Ci0gICAgYm9vbCBldmVudEhhbmRsZWQgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KHBpcGVsaW5l
KCksIGdzdF9ldmVudF9uZXdfY3VzdG9tKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0Is
IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhdHRlbXB0LXRvLWRlY3J5cHQiKSkpOwotICAgIEdT
VF9ERUJVRygiYXR0ZW1wdGluZyB0byBkZWNyeXB0LCBldmVudCBoYW5kbGVkICVzIiwgYm9vbEZv
clByaW50aW5nKGV2ZW50SGFuZGxlZCkpOworICAgIGJvb2wgd2FzRXZlbnRIYW5kbGVkID0gZ3N0
X2VsZW1lbnRfc2VuZF9ldmVudChwaXBlbGluZSgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1Rf
RVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09CLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXR0
ZW1wdC10by1kZWNyeXB0IikpKTsKKyAgICBHU1RfREVCVUcoImF0dGVtcHRpbmcgdG8gZGVjcnlw
dCwgZXZlbnQgaGFuZGxlZCAlcyIsIGJvb2xGb3JQcmludGluZyh3YXNFdmVudEhhbmRsZWQpKTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVByb3RlY3Rpb25F
dmVudChHc3RFdmVudCogZXZlbnQpCkBAIC0zNjY5LDE1ICszNjYzLDE1IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVQcm90ZWN0aW9uRXZlbnQoR3N0RXZlbnQqIGV2
ZW50KQogICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKHtldmVudEtleVN5c3RlbVVV
SUQsIGluaXREYXRhfSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRXYWl0aW5nRm9yS2V5KGJvb2wgd2FpdGluZ0ZvcktleSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KGJvb2wgaXNXYWl0aW5nRm9yS2V5KQogewog
ICAgIC8vIFdlIGJhaWwgb3V0IGlmIHZhbHVlcyBkaWQgbm90IGNoYW5nZSBvciBpZiB3ZSBhcmUg
cmVxdWVzdGVkIHRvIG5vdCB3YWl0IGFueW1vcmUgYnV0IHRoZXJlIGFyZSBzdGlsbCB3YWl0aW5n
IGRlY3J5cHRvcnMuCi0gICAgR1NUX1RSQUNFKCJ3YWl0aW5nRm9yS2V5ICVzLCBtX3dhaXRpbmdG
b3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmcod2FpdGluZ0ZvcktleSksIGJvb2xGb3JQcmludGlu
ZyhtX3dhaXRpbmdGb3JLZXkpKTsKLSAgICBpZiAod2FpdGluZ0ZvcktleSA9PSBtX3dhaXRpbmdG
b3JLZXkgfHwgKCF3YWl0aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCisgICAg
R1NUX1RSQUNFKCJpc1dhaXRpbmdGb3JLZXkgJXMsIG1faXNXYWl0aW5nRm9yS2V5ICVzIiwgYm9v
bEZvclByaW50aW5nKGlzV2FpdGluZ0ZvcktleSksIGJvb2xGb3JQcmludGluZyhtX2lzV2FpdGlu
Z0ZvcktleSkpOworICAgIGlmIChpc1dhaXRpbmdGb3JLZXkgPT0gbV9pc1dhaXRpbmdGb3JLZXkg
fHwgKCFpc1dhaXRpbmdGb3JLZXkgJiYgdGhpcy0+d2FpdGluZ0ZvcktleSgpKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV93YWl0aW5nRm9yS2V5ID0gd2FpdGluZ0ZvcktleTsKLSAgICBHU1Rf
REVCVUcoIndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1fd2Fp
dGluZ0ZvcktleSkpOworICAgIG1faXNXYWl0aW5nRm9yS2V5ID0gaXNXYWl0aW5nRm9yS2V5Owor
ICAgIEdTVF9ERUJVRygid2FpdGluZyBmb3Iga2V5IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRp
bmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKICAgICBtX3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5n
ZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CmluZGV4IDI3OTBlYzNkYjVkYTkzY2Q2ODllMjNiYzI5YzJkNTNmMTdhOGUzYmIuLjJjYTg2ZDRk
ZmJkMzJiMzk4NmVkMzFjNDk0YmY0YWI5ZTg0NWM1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTEyMCwxNyArMTIwLDE0IEBAIGNsYXNzIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRl
cmZhY2UsIHB1YmxpYyBDCiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKLQogICAgIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcihNZWRpYVBsYXllciopOwogICAgIHZpcnR1YWwgfk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpOwogCi0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUo
KTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0
cmFyKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBleHRlbmRlZFN1cHBv
cnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiwgTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSk7CiAKLSAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9oYXNWaWRlbzsgfQotICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2hhc0F1ZGlvOyB9Ci0KKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9oYXNWaWRlbzsgfQorICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2hhc0F1ZGlvOyB9CiAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyAmdXJsKSBv
dmVycmlkZTsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIHZvaWQgbG9hZChjb25zdCBT
dHJpbmcmIHVybCwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kikgb3ZlcnJpZGU7CkBAIC0xMzgs
ODEgKzEzNSw1NyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICB2b2lk
IGxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJikgb3ZlcnJpZGU7CiAjZW5kaWYKLSAgICB2b2lkIGNv
bW1pdExvYWQoKTsKLSAgICB2b2lkIGNhbmNlbExvYWQoKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
cHJlcGFyZVRvUGxheSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOworICAg
IHZvaWQgY2FuY2VsTG9hZCgpIGZpbmFsOworICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpIGZpbmFs
OworICAgIHZvaWQgcGxheSgpIGZpbmFsOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKLSAg
ICBib29sIHBhdXNlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc2Vla2luZygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2Vla2luZzsgfQorICAgIGJvb2wgcGF1c2VkKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1Nl
ZWtpbmc7IH0KICAgICB2b2lkIHNlZWsoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7Ci0KLSAg
ICBNZWRpYVRpbWUgcGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0OwotCiAgICAgdm9pZCBzZXRSYXRl
KGZsb2F0KSBvdmVycmlkZTsKLSAgICBkb3VibGUgcmF0ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQcmVs
b2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkKSBvdmVycmlkZTsKLQorICAgIGRvdWJsZSByYXRlKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKSBmaW5hbDsgCisg
ICAgdm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkKSBmaW5hbDsKICAgICBGbG9h
dFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0Vm9sdW1lKGZs
b2F0KSBvdmVycmlkZTsKLSAgICBmbG9hdCB2b2x1bWUoKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBtdXRlZCgpIGNvbnN0Owot
Ci0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIHNldFZpc2libGUoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9p
ZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNpemVDaGFuZ2Vk
KCk7Ci0KKyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCkgZmluYWw7CisgICAgZmxvYXQgdm9sdW1l
KCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRNdXRlZChib29sKSBmaW5hbDsKKyAgICBNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IGZpbmFsOworICAgIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IHNldFZpc2libGUoYm9vbCkgZmluYWwgeyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNp
emUmKSBmaW5hbDsKICAgICAvLyBQcmVmZXIgTWVkaWFUaW1lIGJhc2VkIG1ldGhvZHMgb3ZlciBm
bG9hdCBiYXNlZC4KLQotICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KLSAgICBkb3VibGUgZHVyYXRpb25E
b3VibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgpLnRvRG91
YmxlKCk7IH0KLSAgICBNZWRpYVRpbWUgZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGN1cnJl
bnRNZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWVEb3VibGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsg
fQorICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZHVyYXRpb25NZWRp
YVRpbWUoKS50b0Zsb2F0KCk7IH0KKyAgICBkb3VibGUgZHVyYXRpb25Eb3VibGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgpLnRvRG91YmxlKCk7IH0KKyAgICBNZWRp
YVRpbWUgZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdDsKKyAgICBmbG9hdCBjdXJyZW50VGltZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGN1cnJlbnRNZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KKyAg
ICBkb3VibGUgY3VycmVudFRpbWVEb3VibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBjdXJyZW50
TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsgfQogICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1l
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdl
cz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNlZWsoZmxvYXQgdGltZSkg
b3ZlcnJpZGUgeyBzZWVrKE1lZGlhVGltZTo6Y3JlYXRlV2l0aEZsb2F0KHRpbWUpKTsgfQotICAg
IHZvaWQgc2Vla0RvdWJsZShkb3VibGUgdGltZSkgb3ZlcnJpZGUgeyBzZWVrKE1lZGlhVGltZTo6
Y3JlYXRlV2l0aERvdWJsZSh0aW1lKSk7IH0KLQotICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1heE1lZGlhVGltZVNlZWthYmxlKCkudG9GbG9hdCgp
OyB9CisgICAgdm9pZCBzZWVrKGZsb2F0IHRpbWUpIGZpbmFsIHsgc2VlayhNZWRpYVRpbWU6OmNy
ZWF0ZVdpdGhGbG9hdCh0aW1lKSk7IH0KKyAgICB2b2lkIHNlZWtEb3VibGUoZG91YmxlIHRpbWUp
IGZpbmFsIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUodGltZSkpOyB9CisgICAg
ZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbWF4TWVkaWFUaW1l
U2Vla2FibGUoKS50b0Zsb2F0KCk7IH0KICAgICBNZWRpYVRpbWUgbWF4TWVkaWFUaW1lU2Vla2Fi
bGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBkb3VibGUgbWluVGltZVNlZWthYmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbWluTWVkaWFUaW1lU2Vla2FibGUoKS50b0Zsb2F0KCk7IH0KLSAg
ICBNZWRpYVRpbWUgbWluTWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KLQotICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNz
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXMoKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25z
dCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxib29sPiB3b3VsZFRhaW50T3JpZ2luKGNvbnN0IFNl
Y3VyaXR5T3JpZ2luJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNpbXVsYXRlQXVkaW9J
bnRlcnJ1cHRpb24oKSBvdmVycmlkZTsKLQorICAgIGRvdWJsZSBtaW5UaW1lU2Vla2FibGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxvYXQoKTsgfQor
ICAgIE1lZGlhVGltZSBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IE1lZGlhVGltZTo6emVyb1RpbWUoKTsgfQorICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkg
Y29uc3QgZmluYWw7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXMoKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgZmluYWw7Cisg
ICAgT3B0aW9uYWw8Ym9vbD4gd291bGRUYWludE9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiYp
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigpIGZpbmFs
OwogI2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9T
b3VyY2VQcm92aWRlcigpIG92ZXJyaWRlOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlv
U291cmNlUHJvdmlkZXIoKSBmaW5hbDsKICNlbmRpZgorICAgIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0Z1bGxz
Y3JlZW4oKSBjb25zdCBmaW5hbDsKKyAgICBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3Zp
ZUxvYWRUeXBlKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGRlY29kZWRGcmFt
ZUNvdW50KCkgY29uc3QgZmluYWw7CisgICAgdW5zaWduZWQgZHJvcHBlZEZyYW1lQ291bnQoKSBj
b25zdCBmaW5hbDsKKyAgICB1bnNpZ25lZCBhdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBm
aW5hbDsKKyAgICB1bnNpZ25lZCB2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBmaW5hbDsK
IAotICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBN
ZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXll
cjsgfQotCi0gICAgdW5zaWduZWQgZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVu
c2lnbmVkIGF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2ln
bmVkIHZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBh
Y2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgYWNj
ZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBmaW5hbDsKIAogI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3Zl
cnJpZGU7CkBAIC0yMjUsMjkgKzE5OCwyMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUEpCi0gICAgdm9pZCBjZG1JbnN0YW5jZUF0dGFjaGVkKENETUluc3Rh
bmNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3RhbmNl
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoYW5kbGVQcm90ZWN0aW9uRXZlbnQoR3N0RXZlbnQqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7Cisg
ICAgdm9pZCBjZG1JbnN0YW5jZUF0dGFjaGVkKENETUluc3RhbmNlJikgZmluYWw7CisgICAgdm9p
ZCBjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3RhbmNlJikgZmluYWw7CiAgICAgdm9pZCBhdHRl
bXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKENETUluc3RhbmNlJikgZmluYWw7Ci0gICAgdm9pZCBp
bml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsKLSAgICB2b2lkIHNldFdh
aXRpbmdGb3JLZXkoYm9vbCk7Ci0gICAgYm9vbCB3YWl0aW5nRm9yS2V5KCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0jZW5kaWYKKyAgICBib29sIHdhaXRpbmdGb3JLZXkoKSBjb25zdCBmaW5hbDsKIAotICAg
IHN0YXRpYyBib29sIHN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRz
VHlwZSBleHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0
ZXJzJiwgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSk7CisgICAgdm9pZCBoYW5kbGVQcm90ZWN0
aW9uRXZlbnQoR3N0RXZlbnQqKTsKKyNlbmRpZgogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAg
ICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVu
dW0sIEdDM0RlbnVtLCBib29sLCBib29sKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZvaWQg
c2V0VmlkZW9Tb3VyY2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uKTsKLSAgICBHc3RFbGVt
ZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KICAgICB2
b2lkIGVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgdW5z
aWduZWQgaW5kZXgpOwogCiAgICAgLy8gQXBwZW5kIHBpcGVsaW5lIGludGVyZmFjZQorICAgIC8v
IEZJWE1FOiBVc2UgdGhlIGNsaWVudCBpbnRlcmZhY2UgcGF0dGVybiwgQXBwZW5kUGlwZWxpbmUg
ZG9lcyBub3QgbmVlZCB0aGUgZnVsbCBpbnRlcmZhY2UgdG8gdGhpcyBjbGFzcyBqdXN0IGZvciB0
aGVzZSB0d28gZnVuY3Rpb25zLgogICAgIGJvb2wgaGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2Fn
ZSopOwogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7CiAKQEAgLTI3MCwxNSAr
MjM3LDE2IEBAIHByb3RlY3RlZDoKICAgICAgICAgU3RyZWFtQ29sbGVjdGlvbkNoYW5nZWQgPSAx
IDw8IDcKICAgICB9OwogCi0gICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTdHJlYW1pbmc7IH0KLSAgICBNZWRpYVRpbWUgbWF4VGltZUxvYWRlZCgpIGNv
bnN0OworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcm
IGtleVN5c3RlbSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisjZW5kaWYKIAogICAgIHZpcnR1
YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc291cmNlU2V0dXAo
R3N0RWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKTsKIAotCiAjaWYg
VVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCiAgICAgR3N0RWxlbWVudCogY3JlYXRlSG9sZVB1bmNo
VmlkZW9TaW5rKCk7CiAgICAgdm9pZCBwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpOwpAQCAtMjky
LDEwICsyNjAsMTAgQEAgcHJvdGVjdGVkOgogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAg
ICB2b2lkIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7CiAjaWYgVVNFKE5JQ09TSUEpCi0gICAg
dm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzd2FwQnVmZmVy
c0lmTmVlZGVkKCkgZmluYWw7CiAjZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5PiBwcm94eSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5l
ZWRlZCgpIGZpbmFsOwogI2VuZGlmCiAjZW5kaWYKIApAQCAtMzE3LDkgKzI4NSw2IEBAIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCB2b2x1bWVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKik7CiAgICAgc3RhdGljIHZvaWQgbXV0ZUNoYW5nZWRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKIAotICAgIC8vIEZJWE1FOiBXaGVyZSBpcyB0
aGlzIHVzZWQ/Ci0gICAgdm9pZCBoYW5kbGVQbHVnaW5JbnN0YWxsZXJSZXN1bHQoR3N0SW5zdGFs
bFBsdWdpbnNSZXR1cm4pOwotCiAgICAgdm9pZCByZWFkeVRpbWVyRmlyZWQoKTsKIAogICAgIHZv
aWQgbm90aWZ5UGxheWVyT2ZWaWRlbygpOwpAQCAtMzU4LDIyICszMjMsMjIgQEAgcHJvdGVjdGVk
OgogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fY2FjaGVkUG9zaXRpb247CiAgICAgbXV0YWJsZSBN
ZWRpYVRpbWUgbV9jYWNoZWREdXJhdGlvbjsKICAgICBib29sIG1fY2FuRmFsbEJhY2tUb0xhc3RG
aW5pc2hlZFNlZWtQb3NpdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2NoYW5naW5nUmF0ZSB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2Rvd25sb2FkRmluaXNoZWQgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9lcnJvck9jY3VyZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0NoYW5naW5nUmF0ZSB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2RpZERvd25sb2FkRmluaXNoIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fZGlkRXJyb3JPY2N1ciB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBib29sIG1faXNFbmRS
ZWFjaGVkIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIGJvb2wgbV9pc1N0cmVhbWluZyB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX3BhdXNlZCB7IHRydWUgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9pc0xp
dmVTdHJlYW0geyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1BhdXNlZCB7IHRydWUgfTsKICAgICBm
bG9hdCBtX3BsYXliYWNrUmF0ZSB7IDEgfTsKICAgICBHc3RTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsK
ICAgICBHc3RTdGF0ZSBtX29sZFN0YXRlOwogICAgIEdzdFN0YXRlIG1fcmVxdWVzdGVkU3RhdGUg
eyBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HIH07Ci0gICAgYm9vbCBtX3Jlc2V0UGlwZWxpbmUgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9zZWVraW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2Vla0lz
UGVuZGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Nob3VsZFJlc2V0UGlwZWxpbmUgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9pc1NlZWtpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1NlZWtQ
ZW5kaW5nIHsgZmFsc2UgfTsKICAgICBNZWRpYVRpbWUgbV9zZWVrVGltZTsKICAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fc291cmNlIHsgbnVsbHB0ciB9OwotICAgIGJvb2wgbV92b2x1bWVBbmRN
dXRlSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9hcmVWb2x1bWVBbmRNdXRlSW5p
dGlhbGl6ZWQgeyBmYWxzZSB9OwogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAgIFRl
eHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV90ZXh0dXJlTWFwcGVyRmxhZ3M7CkBAIC0zOTEsMTAgKzM1
NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2FtcGxlOwogCiAg
ICAgbXV0YWJsZSBGbG9hdFNpemUgbV92aWRlb1NpemU7Ci0gICAgYm9vbCBtX3VzaW5nRmFsbGJh
Y2tWaWRlb1NpbmsgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJh
dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNVc2luZ0ZhbGxiYWNrVmlkZW9TaW5rIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCB7IGZhbHNlIH07CiAK
LSAgICBib29sIG1fZGVzdHJveWluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQmVpbmdEZXN0
cm95ZWQgeyBmYWxzZSB9OwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPiBtX3ZpZGVvVGV4dHVyZUNvcGllcjsK
QEAgLTQxMiwxNyArMzc3LDIxIEBAIHByb3RlY3RlZDoKICAgICBMb2NrIG1fcHJvdGVjdGlvbk11
dGV4OyAvLyBHdWFyZHMgYWNjZXNzIHRvIG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuCiAgICAg
SGFzaFNldDx1aW50MzJfdD4gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50czsKIAotICAgIGJvb2wg
bV93YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNXYWl0aW5nRm9yS2V5IHsg
ZmFsc2UgfTsKICNlbmRpZgogCiAgICAgT3B0aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+
IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm07CiAKIHByaXZhdGU6CisgICAgTWVkaWFUaW1lIG1heFRp
bWVMb2FkZWQoKSBjb25zdDsKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFZpZGVvU291cmNlT3JpZW50YXRp
b24oSW1hZ2VPcmllbnRhdGlvbik7CisgICAgTWVkaWFUaW1lIHBsYXRmb3JtRHVyYXRpb24oKSBj
b25zdDsKKyAgICBib29sIGlzTXV0ZWQoKSBjb25zdDsKKyAgICB2b2lkIGNvbW1pdExvYWQoKTsK
ICAgICB2b2lkIGZpbGxUaW1lckZpcmVkKCk7Ci0KICAgICB2b2lkIGRpZEVuZCgpOwogCi0KICAg
ICBHc3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmsoKTsKICAgICBHc3RFbGVtZW50KiBjcmVhdGVB
dWRpb1NpbmsoKTsKICAgICBHc3RFbGVtZW50KiBhdWRpb1NpbmsoKSBjb25zdDsKQEAgLTQ3NSwy
MCArNDQ0LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVUcmFja3MoKTsKICAgICB2b2lk
IGNsZWFyVHJhY2tzKCk7CiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIHZvaWQg
YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7CisgICAgdm9pZCBpbml0aWFsaXph
dGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsKKyAgICB2b2lkIHNldFdhaXRpbmdGb3JL
ZXkoYm9vbCk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fdGV4dEFwcFNpbms7CiAgICAgR1JlZlB0cjxHc3RQYWQ+IG1fdGV4dEFw
cFNpbmtQYWQ7CiAjZW5kaWYKICAgICBHc3RTdHJ1Y3R1cmUqIG1fbWVkaWFMb2NhdGlvbnMgeyBu
dWxscHRyIH07CiAgICAgaW50IG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCB7IDAgfTsKLSAg
ICBib29sIG1fcGxheWJhY2tSYXRlUGF1c2UgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1BsYXli
YWNrUmF0ZVBhdXNlZCB7IGZhbHNlIH07CiAgICAgTWVkaWFUaW1lIG1fdGltZU9mT3ZlcmxhcHBp
bmdTZWVrOwogICAgIGZsb2F0IG1fbGFzdFBsYXliYWNrUmF0ZSB7IDEgfTsKICAgICBUaW1lciBt
X2ZpbGxUaW1lcjsKICAgICBNZWRpYVRpbWUgbV9tYXhUaW1lTG9hZGVkOwogICAgIGJvb2wgbV9s
b2FkaW5nU3RhbGxlZCB7IGZhbHNlIH07CiAgICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQgbV9wcmVs
b2FkOwotICAgIGJvb2wgbV9kZWxheWluZ0xvYWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0Rl
bGF5aW5nTG9hZCB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9tYXhUaW1lTG9h
ZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOwogICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2hhc0F1ZGlvIHsgZmFsc2UgfTsKQEAgLTUwMywxMSArNDc4LDExIEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1f
cGxhdGZvcm1MYXllclByb3h5OwogI2VuZGlmCiAjZW5kaWYKLSAgICBib29sIG1fYnVmZmVyaW5n
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNCdWZmZXJpbmcgeyBmYWxzZSB9OwogICAgIGludCBt
X2J1ZmZlcmluZ1BlcmNlbnRhZ2UgeyAwIH07CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBsb25nIGxv
bmcgbV90b3RhbEJ5dGVzIHsgMCB9OwogICAgIFVSTCBtX3VybDsKLSAgICBib29sIG1fcHJlc2Vy
dmVzUGl0Y2ggeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRQcmVzZXJ2ZVBpdGNoIHsgZmFs
c2UgfTsKICAgICBtdXRhYmxlIE9wdGlvbmFsPFNlY29uZHM+IG1fbGFzdFF1ZXJ5VGltZTsKICAg
ICBib29sIG1faXNMZWdhY3lQbGF5YmluOwogICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlv
bj4gbV9zdHJlYW1Db2xsZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCmluZGV4IGU2ODgwZDk4ZTdmY2FkMWQwNTNm
ODRlZDM4YTZmZDgxOThkZTdiODYuLmRjMjQ1YjQ3ZGUzZGU3MmZhYzIzNjcyZTVmNmVmZDRiMzc2
MjliNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRS5jcHAKQEAgLTEzMiwxMyArMTMyLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVBy
aXZhdGVDCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpwYXVzZSgpCiB7
Ci0gICAgbV9wYXVzZWQgPSB0cnVlOworICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IG5lZWQgZGly
ZWN0IGFjY2VzcyB0byB0aGlzIG1lbWJlci4gVGhpcyBvdmVycmlkZSBpcyBwcm9iYWJseSBub3Qg
bmVlZGVkLgorICAgIG1faXNQYXVzZWQgPSB0cnVlOwogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cGF1c2UoKTsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdAogewotICAgIGlmIChVTkxJS0VMWSgh
bV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkpCisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVs
aW5lIHx8IG1fZGlkRXJyb3JPY2N1cikpCiAgICAgICAgIHJldHVybiBNZWRpYVRpbWUoKTsKIAog
ICAgIHJldHVybiBtX21lZGlhVGltZUR1cmF0aW9uOwpAQCAtMTQ2LDcgKzE0Nyw3IEBAIE1lZGlh
VGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uTWVkaWFUaW1lKCkg
Y29uc3QKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWsoY29uc3Qg
TWVkaWFUaW1lJiB0aW1lKQogewotICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2Vy
cm9yT2NjdXJlZCkpCisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZGlkRXJyb3JP
Y2N1cikpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdTVF9JTkZPKCJbU2Vla10gc2VlayBhdHRl
bXB0IHRvICVzIHNlY3MiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKQEAgLTE1NCwx
NSArMTU1LDE1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNv
bnN0IE1lZGlhVGltZSYgdGltZSkKICAgICAvLyBBdm9pZCB1c2VsZXNzIHNlZWtpbmcuCiAgICAg
TWVkaWFUaW1lIGN1cnJlbnQgPSBjdXJyZW50TWVkaWFUaW1lKCk7CiAgICAgaWYgKHRpbWUgPT0g
Y3VycmVudCkgewotICAgICAgICBpZiAoIW1fc2Vla2luZykKKyAgICAgICAgaWYgKCFtX2lzU2Vl
a2luZykKICAgICAgICAgICAgIHRpbWVDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCisgICAgaWYgKG1faXNMaXZlU3RyZWFtKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zZWVraW5nICYmIG1fc2Vla0lzUGVuZGluZykgewor
ICAgIGlmIChtX2lzU2Vla2luZyAmJiBtX2lzU2Vla1BlbmRpbmcpIHsKICAgICAgICAgbV9zZWVr
VGltZSA9IHRpbWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzksNyArMTgwLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWsoY29uc3QgTWVkaWFUaW1l
JiB0aW1lKQogICAgIH0KIAogICAgIG1faXNFbmRSZWFjaGVkID0gZmFsc2U7Ci0gICAgR1NUX0RF
QlVHKCJtX3NlZWtpbmc9JXMsIG1fc2Vla1RpbWU9JXMiLCBib29sRm9yUHJpbnRpbmcobV9zZWVr
aW5nKSwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CisgICAgR1NUX0RFQlVH
KCJtX2lzU2Vla2luZz0lcywgbV9zZWVrVGltZT0lcyIsIGJvb2xGb3JQcmludGluZyhtX2lzU2Vl
a2luZyksIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y29uZmlndXJlUGxheVNpbmsoKQpAQCAtMjMy
LDcgKzIzMyw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWso
KQogICAgIEdzdFNlZWtGbGFncyBzZWVrVHlwZSA9IHN0YXRpY19jYXN0PEdzdFNlZWtGbGFncz4o
R1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpOwogCiAgICAgLy8g
QWx3YXlzIG1vdmUgdG8gc2Vla2luZyBzdGF0ZSB0byByZXBvcnQgY29ycmVjdCAnY3VycmVudFRp
bWUnIHdoaWxlIHBlbmRpbmcgZm9yIGFjdHVhbCBzZWVrIHRvIGNvbXBsZXRlLgotICAgIG1fc2Vl
a2luZyA9IHRydWU7CisgICAgbV9pc1NlZWtpbmcgPSB0cnVlOwogCiAgICAgLy8gQ2hlY2sgaWYg
cGxheWJhY2sgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNlZWsuCiAgICAgR3N0U3RhdGUgc3RhdGUs
IG5ld1N0YXRlOwpAQCAtMjQwLDcgKzI0MSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpkb1NlZWsoKQogICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVf
Q0hBTkdFX0ZBSUxVUkUgfHwgZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19Q
UkVST0xMKSB7CiAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIGNhbm5vdCBzZWVrLCBjdXJyZW50
IHN0YXRlIGNoYW5nZSBpcyAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0
X25hbWUoZ2V0U3RhdGVSZXN1bHQpKTsKICAgICAgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZv
clNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUpOwotICAgICAg
ICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoKGdldFN0YXRlUmVzdWx0ID09IEdTVF9T
VEFURV9DSEFOR0VfQVNZTkMKQEAgLTI2MiwxOSArMjYzLDE5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWsoKQogCiAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtd
IERlbGF5aW5nIHRoZSBzZWVrOiAlcyIsIHJlYXNvbi5kYXRhKCkpOwogCi0gICAgICAgIG1fc2Vl
a0lzUGVuZGluZyA9IHRydWU7CisgICAgICAgIG1faXNTZWVrUGVuZGluZyA9IHRydWU7CiAKICAg
ICAgICAgaWYgKG1faXNFbmRSZWFjaGVkKSB7CiAgICAgICAgICAgICBHU1RfREVCVUcoIltTZWVr
XSByZXNldCBwaXBlbGluZSIpOwotICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsK
LSAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgbV9zaG91bGRSZXNl
dFBpcGVsaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7CiAgICAg
ICAgICAgICBpZiAoIWNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCkpCiAgICAg
ICAgICAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6RW1wdHkpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc2Vla2luZyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgbV9pc1NlZWtpbmcgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1fc2Vl
a2luZzsKKyAgICAgICAgcmV0dXJuIG1faXNTZWVraW5nOwogICAgIH0KIAogICAgIC8vIFN0b3Ag
YWNjZXB0aW5nIG5ldyBzYW1wbGVzIHVudGlsIGFjdHVhbCBzZWVrIGlzIGZpbmlzaGVkLgpAQCAt
MzAwLDcgKzMwMSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1Nl
ZWsoKQogICAgICAgICBpZiAoc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlM
VVJFKSB7CiAgICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDYW5ub3Qgc2VlaywgZmFpbGVk
IHRvIHBhdXNlIHBsYXliYWNrIHBpcGVsaW5lLiIpOwogICAgICAgICAgICAgd2ViS2l0TWVkaWFT
cmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRy
dWUpOwotICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgICAgICBtX2lzU2Vl
a2luZyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CkBAIC0zMTQsNyAr
MzE1LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmRvU2VlaygpCiAg
ICAgICAgIG1fbWVkaWFTb3VyY2UtPm1vbml0b3JTb3VyY2VCdWZmZXJzKCk7CiAgICAgICAgIEFT
U0VSVChtX21zZVNlZWtDb21wbGV0ZWQpOwogICAgICAgICAvLyBOb3RlOiBzZWVrQ29tcGxldGVk
IHdpbGwgcmVjdXJzaXZlbHkgY2FsbCB1cy4KLSAgICAgICAgcmV0dXJuIG1fc2Vla2luZzsKKyAg
ICAgICAgcmV0dXJuIG1faXNTZWVraW5nOwogICAgIH0KIAogICAgIEdTVF9ERUJVRygiV2UgY2Fu
IHNlZWsgbm93Iik7CkBAIC0zMzcsNyArMzM4LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OmRvU2VlaygpCiAgICAgbV9nc3RTZWVrQ29tcGxldGVkID0gZmFsc2U7CiAg
ICAgaWYgKCFnc3RfZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JN
QVRfVElNRSwgc2Vla1R5cGUsIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShzdGFy
dFRpbWUpLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoZW5kVGltZSkpKSB7CiAg
ICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMo
bV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKLSAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAg
ICAgIG1faXNTZWVraW5nID0gZmFsc2U7CiAgICAgICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IHRy
dWU7CiAgICAgICAgIEdTVF9ERUJVRygiZG9TZWVrKCk6IGdzdF9lbGVtZW50X3NlZWsoKSBmYWls
ZWQsIHJldHVybmluZyBmYWxzZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTAsNyAr
MzUxLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmRvU2VlaygpCiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWsoKQog
ewotICAgIGlmICghbV9zZWVraW5nIHx8ICFtX21zZVNlZWtDb21wbGV0ZWQgfHwgIW1fZ3N0U2Vl
a0NvbXBsZXRlZCkKKyAgICBpZiAoIW1faXNTZWVraW5nIHx8ICFtX21zZVNlZWtDb21wbGV0ZWQg
fHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3N0U3RhdGUg
c3RhdGUsIG5ld1N0YXRlOwpAQCAtMzYyLDkgKzM2Myw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWsoKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKG1fc2Vla0lzUGVuZGluZykgeworICAgIGlmIChtX2lzU2Vla1BlbmRpbmcp
IHsKICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gQ29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8g
JXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9zZWVr
SXNQZW5kaW5nID0gZmFsc2U7CisgICAgICAgIG1faXNTZWVrUGVuZGluZyA9IGZhbHNlOwogICAg
ICAgICBpZiAoIWRvU2VlaygpKSB7CiAgICAgICAgICAgICBHU1RfV0FSTklORygiW1NlZWtdIFNl
ZWtpbmcgdG8gJXMgZmFpbGVkIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
OwpAQCAtMzc1LDcgKzM3Niw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjptYXliZUZpbmlzaFNlZWsoKQogICAgIEdTVF9ERUJVRygiW1NlZWtdIFNlZWtlZCB0byAlcyIs
IHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgd2ViS2l0TWVkaWFT
cmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRy
dWUpOwotICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgIG1faXNTZWVraW5nID0gZmFsc2U7CiAg
ICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKICAgICAvLyBU
aGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhhdmUgYSBwZW5kaW5nIHN0YXRlLiBJbiB0aGlzIGNhc2Ug
YSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZhaWwuCiAgICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2Ug
bV9zZWVrVGltZSBhcyBhIGZhbGxiYWNrLgpAQCAtMzkwLDcgKzM5MSw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUoKQogCiBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2luZygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fc2Vla2luZzsKKyAgICByZXR1cm4gbV9pc1NlZWtpbmc7CiB9CiAKIC8vIEZJWE1FOiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgbWFuYWdlcyB0aGUgUmVhZHlTdGF0ZSBvbiBpdHMg
b3duLiBXZSBzaG91bGRuJ3QgY2hhbmdlIGl0IG1hbnVhbGx5LgpAQCAtNDI4LDcgKzQyOSw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZXRSZWFkeVN0YXRlKE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCiB7Ci0gICAgaWYgKCFtX3NlZWtpbmcpCisg
ICAgaWYgKCFtX2lzU2Vla2luZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgR1NUX0RFQlVHKCJX
YWl0aW5nIGZvciBNU0Ugc2VlayBjb21wbGV0ZWQiKTsKQEAgLTQ3OSw3ICs0ODAsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c291cmNlU2V0dXAoR3N0RWxlbWVudCog
c291cmNlRWxlbWVudCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVw
ZGF0ZVN0YXRlcygpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JP
Y2N1cmVkKSkKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9kaWRFcnJvck9jY3Vy
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGRO
ZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKQEAgLTQ5OCw4ICs0OTksOCBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgaWYg
KG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IChzdGF0ZSA8PSBHU1RfU1RBVEVf
UkVBRFkpOwotICAgICAgICBpZiAobV9yZXNldFBpcGVsaW5lKQorICAgICAgICBtX3Nob3VsZFJl
c2V0UGlwZWxpbmUgPSAoc3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZKTsKKyAgICAgICAgaWYgKG1f
c2hvdWxkUmVzZXRQaXBlbGluZSkKICAgICAgICAgICAgIG1fbWVkaWFUaW1lRHVyYXRpb24gPSBN
ZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKICAgICAgICAgLy8gVXBkYXRlIHJlYWR5IGFuZCBuZXR3
b3JrIHN0YXRlcy4KQEAgLTUzOCwyNSArNTM5LDI1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMoKQogCiAgICAgICAgIC8vIFN5bmMgc3RhdGVzIHdo
ZXJlIG5lZWRlZC4KICAgICAgICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAg
ICAgICAgICAgIGlmICghbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAg
IGlmICghbV9hcmVWb2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgICAgICBu
b3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOwogICAgICAgICAgICAgICAgIG5vdGlmeVBsYXll
ck9mTXV0ZSgpOwotICAgICAgICAgICAgICAgIG1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2FyZVZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9IHRy
dWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghc2Vla2luZygpICYmICFtX3Bh
dXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgaWYgKCFzZWVraW5nKCkgJiYg
IW1faXNQYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpIHsKICAgICAgICAgICAgICAgICBHU1RfREVC
VUcoIltCdWZmZXJpbmddIFJlc3RhcnRpbmcgcGxheWJhY2suIik7CiAgICAgICAgICAgICAgICAg
Y2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKLSAgICAgICAg
ICAgIG1fcGF1c2VkID0gZmFsc2U7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gZmFsc2U7CiAK
ICAgICAgICAgICAgIGlmICghbV9wbGF5YmFja1JhdGUpIHsKICAgICAgICAgICAgICAgICBHU1Rf
REVCVUcoIltCdWZmZXJpbmddIFBhdXNpbmcgc3RyZWFtIGZvciBidWZmZXJpbmcuIik7CiAgICAg
ICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3BhdXNlZCA9IHRydWU7Cisg
ICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKIAogICAgICAgICBpZiAobV9yZXF1ZXN0ZWRT
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYmIHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsK
ICAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUgPSB0cnVlOwpAQCAtNTc3LDcg
KzU3OCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0
ZXMoKQogICAgICAgICBHU1RfREVCVUcoIk5vIHByZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzog
JXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKHBlbmRpbmcpKTsKIAogICAgICAgICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQ
QVVTRUQgd2l0aG91dCBwcmVyb2xsaW5nLgotICAgICAgICBtX2lzU3RyZWFtaW5nID0gdHJ1ZTsK
KyAgICAgICAgbV9pc0xpdmVTdHJlYW0gPSB0cnVlOwogCiAgICAgICAgIGlmIChzdGF0ZSA9PSBH
U1RfU1RBVEVfUkVBRFkpIHsKICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpIYXZlTm90aGluZzsKQEAgLTU4NSwxMSArNTg2LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICB9IGVsc2UgaWYgKHN0YXRl
ID09IEdTVF9TVEFURV9QQVVTRUQpIHsKICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0
YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgICAgICBtX3Bh
dXNlZCA9IHRydWU7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgfSBl
bHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICAgICAgIG1fcGF1c2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gZmFsc2U7CiAKLSAgICAgICAgaWYg
KCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkKKyAgICAgICAgaWYgKCFtX2lzUGF1c2VkICYm
IG1fcGxheWJhY2tSYXRlKQogICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RB
VEVfUExBWUlORyk7CiAKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKQEAgLTYyMCwxMCArNjIxLDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjp1cGRhdGVTdGF0ZXMoKQogfQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlw
ZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQorICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8
fCBtX2RpZEVycm9yT2NjdXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zZWVraW5n
KQorICAgIGlmIChtX2lzU2Vla2luZykKICAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7CiAgICAg
ZWxzZQogICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKQEAgLTc3NCw3ICs3NzUsNyBAQCBNZWRpYVRp
bWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjdXJyZW50TWVkaWFUaW1lKCkgY29u
c3QKIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF4TWVkaWFU
aW1lU2Vla2FibGUoKSBjb25zdAogewotICAgIGlmIChVTkxJS0VMWShtX2Vycm9yT2NjdXJlZCkp
CisgICAgaWYgKFVOTElLRUxZKG1fZGlkRXJyb3JPY2N1cikpCiAgICAgICAgIHJldHVybiBNZWRp
YVRpbWU6Onplcm9UaW1lKCk7CiAKICAgICBHU1RfREVCVUcoIm1heE1lZGlhVGltZVNlZWthYmxl
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0UuaAppbmRleCAzYmNjMGZkYmEzODgzYWVlYzZlMmUyNjU4NWVhYzhjYmJlMGQ0ZWFlLi45
YjMzMzA1ZjdmMTE2ZGFjOTFjNjQxYzQ4NDU5M2JlN2E4MzA3MzVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTU0LDcg
KzU0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWco
KSBvdmVycmlkZSB7IH07CiAKLSAgICBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgTWVkaWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUoKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VD
bGllbnRHU3RyZWFtZXJNU0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRS5jcHAKaW5kZXggZmFl
NzRmNGJhNGMxNzkxZGM2NWU1MzVmZWZmMzMzZjQyZjA2YzMzNC4uYzA5N2NhM2UxNjcxN2Q4OGI3
YjQ4NmEyMmVjYmE0NWQwOGVjM2QzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9N
ZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRS5jcHAKQEAgLTE2Myw3ICsxNjMsOCBAQCB2b2lk
IE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjpmbHVzaChBdG9tU3RyaW5nIHRyYWNrSWQp
CiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwogCiAgICAgLy8gVGhpcyBpcyBvbmx5
IGZvciBvbi10aGUtZmx5IHJlZW5xdWV1ZXMgYWZ0ZXIgYXBwZW5kcy4gV2hlbiBzZWVraW5nLCB0
aGUgc2VlayB3aWxsIGRvIGl0cyBvd24gZmx1c2guCi0gICAgaWYgKCFtX3BsYXllclByaXZhdGUu
bV9zZWVraW5nKQorICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGJlIHRvdWNoaW5nIHByaXZhdGUg
cGFydHMuCisgICAgaWYgKCFtX3BsYXllclByaXZhdGUubV9pc1NlZWtpbmcpCiAgICAgICAgIG1f
cGxheWVyUHJpdmF0ZS5tX3BsYXliYWNrUGlwZWxpbmUtPmZsdXNoKHRyYWNrSWQpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384516</attachid>
            <date>2019-11-29 09:47:26 -0800</date>
            <delta_ts>2019-11-29 11:44:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204617-20191129174724.patch</filename>
            <type>text/plain</type>
            <size>89663</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyOTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDI2NjdiNjE0N2VmZGM2
MjFlZmRhYjlkMWNmM2RiNjRkMGRmZDM2Ni4uZDdiZDc2MjU3MjRmYTg2ZGE0MWZiYWFlMWNkNTQ5
ODQzYWFhN2U4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDE5LTExLTI4ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgc3R5bGUgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDYxNworCisgICAgICAgIFJldmll
d2VkIGJ5IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgIEZvbGxvdy11cCBjb21t
aXQgdG8gYnVnIDIwNDM1MiBhZGRyZXNzaW5nIHN0eWxlIGlzc3VlcyBpbiB0aGUKKyAgICAgICAg
ZXhpc3RpbmcgcGxheWVyIGNvZGUuIFRoZSBtYWluIGlzc3VlcyBhZGRyZXNzZWQgYXJlIG5hbWlu
ZworICAgICAgICB2aW9sYXRpb25zLCBhZGRpbmcgZmluYWwgdG8gdHlwZXMgbm90IG92ZXJyaWRk
ZW4gYW5kIG9yZ2FuaXppbmcKKyAgICAgICAgYmV0dGVyIHRoZSBzY29wZSBvZiBuYW1lcyBpbiB0
aGUgY2xhc3Nlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJlcGFyZVRv
UGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1
cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVk
aWFUaW1lU2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNo
YW5nZVBpcGVsaW5lU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3Jt
RHVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjppc011dGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVw
ZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZVN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNz
TXBlZ1RzU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmRpZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5TYXZlTWVkaWFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YWNjZWxlcmF0
ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsUmVwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1vdmllTG9hZFR5cGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVW
aWRlb1NpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpkZWNvZGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRyb3BwZWRGcmFtZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhM
b2NhbEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpt
dXRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwaXBlbGluZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhUGxheWVyIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNM
aXZlU3RyZWFtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25NZWRp
YVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6ZG9TZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRGb3JTZWVrQ29tcGxldGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRl
U3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjptYXhNZWRpYVRpbWVTZWVrYWJsZSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01l
ZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjpmbHVzaCk6CisKIDIwMTktMTEtMjggIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFkanVzdCB0aGUg
bGluZSdzIGlzLXZpc3VhbGx5LWVtcHR5IHN0YXR1cyBhZnRlciB0cmltbWluZyB0aGUgdHJhaWxp
bmcgd2hpdGVzcGFjZSBjb250ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IDU3OWVkOTlmMTczM2QyZDgxZDcwMzdjMzA5NTA1YWRlMWZk
NTcyMjIuLjNlNzBhMzZkNmQ1MDNmMTc2NDM3OWJlMjYxZjA5NjdiOWI5ZGI5MjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zMzYsOSAr
MzM2LDEyIEBAIHByaXZhdGU6CiB9OwogI2VuZGlmCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCitzdGF0aWMgdm9pZCBpbml0aWFs
aXplRGVidWdDYXRlZ29yeSgpCiB7Ci0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0
X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwgIldlYktpdCBtZWRp
YSBwbGF5ZXIiKTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lO
SVQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwgIldl
YktpdCBtZWRpYSBwbGF5ZXIiKTsKKyAgICB9KTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikK
QEAgLTQ5Nyw3ICs1MDAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9h
ZEZ1bGwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgInByZWxvYWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9T
dHJpbmcobV9wcmVsb2FkKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9wcmVsb2FkID09IE1l
ZGlhUGxheWVyOjpOb25lKSB7CiAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAi
RGVsYXlpbmcgbG9hZC4iKTsKLSAgICAgICAgbV9kZWxheWluZ0xvYWQgPSB0cnVlOworICAgICAg
ICBtX2lzRGVsYXlpbmdMb2FkID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBSZXNldCBuZXR3b3Jr
IGFuZCByZWFkeSBzdGF0ZXMuIFRob3NlIHdpbGwgYmUgc2V0IHByb3Blcmx5IG9uY2UKQEAgLTUw
NiwxMCArNTA5LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVs
bChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmc7CiAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Ci0gICAgbV92b2x1
bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtX2FyZVZvbHVtZUFuZE11dGVJbml0
aWFsaXplZCA9IGZhbHNlOwogICAgIG1faGFzVGFpbnRlZE9yaWdpbiA9IFdURjo6bnVsbG9wdDsK
IAotICAgIGlmICghbV9kZWxheWluZ0xvYWQpCisgICAgaWYgKCFtX2lzRGVsYXlpbmdMb2FkKQog
ICAgICAgICBjb21taXRMb2FkKCk7CiB9CiAKQEAgLTU0MSwxOSArNTQ0LDYgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0p
CiB9CiAjZW5kaWYKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExv
YWQoKQotewotICAgIEFTU0VSVCghbV9kZWxheWluZ0xvYWQpOwotICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkNvbW1pdHRpbmcgbG9hZC4iKTsKLQotICAgIC8vIEdTdHJlYW1lciBu
ZWVkcyB0byBoYXZlIHRoZSBwaXBlbGluZSBzZXQgdG8gYSBwYXVzZWQgc3RhdGUgdG8KLSAgICAv
LyBzdGFydCBwcm92aWRpbmcgYW55dGhpbmcgdXNlZnVsLgotICAgIGNoYW5nZVBpcGVsaW5lU3Rh
dGUoR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWco
KTsKLSAgICB1cGRhdGVTdGF0ZXMoKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNhbmNlbExvYWQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxh
eWVyOjpMb2FkaW5nIHx8IG1fbmV0d29ya1N0YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpCkBA
IC01NjcsOCArNTU3LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByZXBh
cmVUb1BsYXkoKQogewogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlByZXBhcmUg
dG8gcGxheSIpOwogICAgIG1fcHJlbG9hZCA9IE1lZGlhUGxheWVyOjpBdXRvOwotICAgIGlmICht
X2RlbGF5aW5nTG9hZCkgewotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOworICAgIGlm
IChtX2lzRGVsYXlpbmdMb2FkKSB7CisgICAgICAgIG1faXNEZWxheWluZ0xvYWQgPSBmYWxzZTsK
ICAgICAgICAgY29tbWl0TG9hZCgpOwogICAgIH0KIH0KQEAgLTU3NiwxMyArNTY2LDEzIEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KCkKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5KCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tS
YXRlKSB7Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSB0cnVlOworICAgICAgICBtX2lz
UGxheWJhY2tSYXRlUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKSkgewogICAgICAgICBt
X2lzRW5kUmVhY2hlZCA9IGZhbHNlOwotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOwor
ICAgICAgICBtX2lzRGVsYXlpbmdMb2FkID0gZmFsc2U7CiAgICAgICAgIG1fcHJlbG9hZCA9IE1l
ZGlhUGxheWVyOjpBdXRvOwogICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsK
ICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5Iik7CkBAIC01OTIsNyAr
NTgyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXkoKQogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKQogewotICAgIG1fcGxheWJhY2tS
YXRlUGF1c2UgPSBmYWxzZTsKKyAgICBtX2lzUGxheWJhY2tSYXRlUGF1c2VkID0gZmFsc2U7CiAg
ICAgR3N0U3RhdGUgY3VycmVudFN0YXRlLCBwZW5kaW5nU3RhdGU7CiAgICAgZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nU3RhdGUs
IDApOwogICAgIGlmIChjdXJyZW50U3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmdT
dGF0ZSA8PSBHU1RfU1RBVEVfUEFVU0VEKQpAQCAtNjE0LDcgKzYwNCw3IEBAIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgeworICAgIGlmIChtX2lz
UGxheWJhY2tSYXRlUGF1c2VkKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIlBsYXliYWNrIHJhdGUgaXMgMCwgc2ltdWxhdGluZyBQQVVTRUQgc3RhdGUiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTYzMywxMiArNjIzLDggQEAgYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBm
bG9hdCByYXRlLAogCiAgICAgaWYgKHJhdGUgPCAwKSB7CiAgICAgICAgIHN0YXJ0VGltZSA9IE1l
ZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGF0IGJlZ2lubmluZyBv
ZiBtZWRpYSwgc3RhcnQgZnJvbSB0aGUgZW5kIHRvCi0gICAgICAgIC8vIGF2b2lkIGltbWVkaWF0
ZSBFT1MuCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAg
ICAgICAgICAgIGVuZFRpbWUgPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlbmRUaW1lID0gcG9zaXRpb247CisgICAgICAgIC8vIElmIHdlIGFyZSBhdCBi
ZWdpbm5pbmcgb2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0byBhdm9pZCBpbW1lZGlhdGUg
RU9TLgorICAgICAgICBlbmRUaW1lID0gcG9zaXRpb24gPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkg
PyBkdXJhdGlvbk1lZGlhVGltZSgpIDogcG9zaXRpb247CiAgICAgfQogCiAgICAgaWYgKCFyYXRl
KQpAQCAtNjUwLDEwICs2MzYsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1l
KQogewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
ZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtd
IHNlZWsgYXR0ZW1wdCB0byAlcyIsIHRvU3RyaW5nKG1lZGlhVGltZSkudXRmOCgpLmRhdGEoKSk7
CkBAIC02NjYsMTYgKzY0OSwxNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2Vlayhjb25zdCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogICAgIE1lZGlhVGltZSB0aW1lID0g
c3RkOjptaW4obWVkaWFUaW1lLCBkdXJhdGlvbk1lZGlhVGltZSgpKTsKIAotICAgIGlmIChpc0xp
dmVTdHJlYW0oKSkgeworICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkgewogICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gTGl2ZSBzdHJlYW0gc2VlayB1bmhhbmRsZWQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiW1NlZWtdIHNlZWtpbmcgdG8gJXMiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgp
KTsKIAotICAgIGlmIChtX3NlZWtpbmcpIHsKKyAgICBpZiAobV9pc1NlZWtpbmcpIHsKICAgICAg
ICAgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWsgPSB0aW1lOwotICAgICAgICBpZiAobV9zZWVrSXNQ
ZW5kaW5nKSB7CisgICAgICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpIHsKICAgICAgICAgICAgIG1f
c2Vla1RpbWUgPSB0aW1lOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02ODgs
MTAgKzY3MSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25z
dCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
Z2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyB8fCBzdGF0ZSA8IEdTVF9T
VEFURV9QQVVTRUQgfHwgbV9pc0VuZFJlYWNoZWQpIHsKLSAgICAgICAgbV9zZWVrSXNQZW5kaW5n
ID0gdHJ1ZTsKKyAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gdHJ1ZTsKICAgICAgICAgaWYgKG1f
aXNFbmRSZWFjaGVkKSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJbU2Vla10gcmVzZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9
IHRydWU7CisgICAgICAgICAgICBtX3Nob3VsZFJlc2V0UGlwZWxpbmUgPSB0cnVlOwogICAgICAg
ICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQogICAgICAg
ICAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKICAgICAgICAgfQpA
QCAtNzAzLDIwICs2ODYsMjAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNl
ZWsoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X3NlZWtpbmcgPSB0cnVlOworICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKICAgICBtX3NlZWtUaW1l
ID0gdGltZTsKICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwogfQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlUGxheWJhY2tSYXRlKCkKIHsKLSAgICBpZiAoIW1f
Y2hhbmdpbmdSYXRlKQorICAgIGlmICghbV9pc0NoYW5naW5nUmF0ZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJTZXQgUmF0ZSB0byAlZiIsIG1f
cGxheWJhY2tSYXRlKTsKIAogICAgIC8vIE11dGUgdGhlIHNvdW5kIGlmIHRoZSBwbGF5YmFjayBy
YXRlIGlzIG5lZ2F0aXZlIG9yIHRvbyBleHRyZW1lIGFuZCBhdWRpbyBwaXRjaCBpcyBub3QgYWRq
dXN0ZWQuCi0gICAgYm9vbCBtdXRlID0gbV9wbGF5YmFja1JhdGUgPD0gMCB8fCAoIW1fcHJlc2Vy
dmVzUGl0Y2ggJiYgKG1fcGxheWJhY2tSYXRlIDwgMC44IHx8IG1fcGxheWJhY2tSYXRlID4gMikp
OworICAgIGJvb2wgbXV0ZSA9IG1fcGxheWJhY2tSYXRlIDw9IDAgfHwgKCFtX3Nob3VsZFByZXNl
cnZlUGl0Y2ggJiYgKG1fcGxheWJhY2tSYXRlIDwgMC44IHx8IG1fcGxheWJhY2tSYXRlID4gMikp
OwogCiAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksIG11dGUgPyAiTmVlZCB0byBtdXRl
IGF1ZGlvIiA6ICJEbyBub3QgbmVlZCB0byBtdXRlIGF1ZGlvIik7CiAKQEAgLTcyOCw0MyArNzEx
LDE5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVQbGF5YmFja1Jh
dGUoKQogICAgICAgICBHU1RfRVJST1IoIlNldCByYXRlIHRvICVmIGZhaWxlZCIsIG1fcGxheWJh
Y2tSYXRlKTsKICAgICB9CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgewotICAgICAg
ICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICAgICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBpZiAobV9p
c1BsYXliYWNrUmF0ZVBhdXNlZCkgeworICAgICAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsK
IAogICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRl
LCAmcGVuZGluZywgMCk7CiAgICAgICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUExBWUlORyAm
JiBwZW5kaW5nICE9IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAgICAgY2hhbmdlUGlwZWxp
bmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2Ug
PSBmYWxzZTsKKyAgICAgICAgbV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IGZhbHNlOwogICAgIH0K
IAotICAgIG1fY2hhbmdpbmdSYXRlID0gZmFsc2U7CisgICAgbV9pc0NoYW5naW5nUmF0ZSA9IGZh
bHNlOwogICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7
Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBw
aXBlbGluZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkpKTsKLSAg
ICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCk7Ci0KLSAgICAvLyBUaGUgZHVyYXRpb24gcXVlcnkgd291bGQgZmFpbCBvbiBhIG5vdC1w
cmVyb2xsZWQgcGlwZWxpbmUuCi0gICAgaWYgKEdTVF9TVEFURShtX3BpcGVsaW5lLmdldCgpKSA8
IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCk7Ci0KLSAgICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKLSAgICBpZiAoIWdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJmR1cmF0aW9u
KSB8fCAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZHVyYXRpb24pKSB7Ci0gICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRpbWUgZHVyYXRpb24gcXVlcnkgZmFpbGVkIGZvciAl
cyIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gTWVkaWFU
aW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNU
KHBpcGVsaW5lKCksICJEdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdT
KGR1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIE1lZGlhVGltZShkdXJhdGlvbiwgR1NUX1NFQ09ORCk7
Ci19Ci0KIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVk
aWFUaW1lKCkgY29uc3QKIHsKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJDYWNo
ZWQgZHVyYXRpb246ICVzIiwgbV9jYWNoZWREdXJhdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwpAQCAtNzgyLDExICs3NDEsMTEgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1f
ZGlkRXJyb3JPY2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsK
IAotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgInNlZWtpbmc6ICVzLCBzZWVrVGlt
ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX3NlZWtpbmcpCisgICAgR1NUX1RSQUNFX09CSkVD
VChwaXBlbGluZSgpLCAic2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGlu
ZyhtX2lzU2Vla2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBpZiAobV9pc1NlZWtpbmcpCiAgICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwogCiAgICAgcmV0
dXJuIHBsYXliYWNrUG9zaXRpb24oKTsKQEAgLTc5NCwzNiArNzUzLDM2IEBAIE1lZGlhVGltZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdAogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZShmbG9hdCByYXRlKQogewot
ICAgIC8vIEhpZ2hlciByYXRlIGNhdXNlcyBjcmFzaC4KLSAgICByYXRlID0gY2xhbXBUbyhyYXRl
LCAtMjAuMCwgMjAuMCk7CisgICAgZmxvYXQgcmF0ZUNsYW1wZWQgPSBjbGFtcFRvKHJhdGUsIC0y
MC4wLCAyMC4wKTsKKyAgICBpZiAocmF0ZUNsYW1wZWQgIT0gcmF0ZSkKKyAgICAgICAgR1NUX1dB
Uk5JTkcoIkNsYW1waW5nIG9yaWdpbmFsIHJhdGUgKCVmKSB0byBbLTIwLCAyMF0gKCVmKSwgaGln
aGVyIHJhdGVzIGNhdXNlIGNyYXNoZXMiLCByYXRlLCByYXRlQ2xhbXBlZCk7CiAKICAgICAvLyBB
dm9pZCB1c2VsZXNzIHBsYXliYWNrIHJhdGUgdXBkYXRlLgotICAgIGlmIChtX3BsYXliYWNrUmF0
ZSA9PSByYXRlKSB7Ci0gICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhhdCB1cHBlciBsYXllcnMg
d2VyZSBub3RpZmllZCBpZiByYXRlIHdhcyBzZXQKKyAgICBpZiAobV9wbGF5YmFja1JhdGUgPT0g
cmF0ZUNsYW1wZWQpIHsKKyAgICAgICAgLy8gQW5kIG1ha2Ugc3VyZSB0aGF0IHVwcGVyIGxheWVy
cyB3ZXJlIG5vdGlmaWVkIGlmIHJhdGUgd2FzIHNldC4KIAotICAgICAgICBpZiAoIW1fY2hhbmdp
bmdSYXRlICYmIG1fcGxheWVyLT5yYXRlKCkgIT0gbV9wbGF5YmFja1JhdGUpCisgICAgICAgIGlm
ICghbV9pc0NoYW5naW5nUmF0ZSAmJiBtX3BsYXllci0+cmF0ZSgpICE9IG1fcGxheWJhY2tSYXRl
KQogICAgICAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpIHsKLSAgICAgICAgLy8gbm90aWZ5IHVw
cGVyIGxheWVycyB0aGF0IHdlIGNhbm5vdCBoYW5kbGUgcGFzc2VkIHJhdGUuCi0gICAgICAgIG1f
Y2hhbmdpbmdSYXRlID0gZmFsc2U7CisgICAgaWYgKG1faXNMaXZlU3RyZWFtKSB7CisgICAgICAg
IC8vIE5vdGlmeSB1cHBlciBsYXllcnMgdGhhdCB3ZSBjYW5ub3QgaGFuZGxlIHBhc3NlZCByYXRl
LgorICAgICAgICBtX2lzQ2hhbmdpbmdSYXRlID0gZmFsc2U7CiAgICAgICAgIG1fcGxheWVyLT5y
YXRlQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR3N0U3RhdGUgc3Rh
dGU7Ci0gICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsK
IAotICAgIG1fcGxheWJhY2tSYXRlID0gcmF0ZTsKLSAgICBtX2NoYW5naW5nUmF0ZSA9IHRydWU7
CisgICAgbV9wbGF5YmFja1JhdGUgPSByYXRlQ2xhbXBlZDsKKyAgICBtX2lzQ2hhbmdpbmdSYXRl
ID0gdHJ1ZTsKIAogICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAm
c3RhdGUsICZwZW5kaW5nLCAwKTsKIAotICAgIGlmICghcmF0ZSkgewotICAgICAgICBtX2NoYW5n
aW5nUmF0ZSA9IGZhbHNlOwotICAgICAgICBtX3BsYXliYWNrUmF0ZVBhdXNlID0gdHJ1ZTsKKyAg
ICBpZiAoIXJhdGVDbGFtcGVkKSB7CisgICAgICAgIG1faXNDaGFuZ2luZ1JhdGUgPSBmYWxzZTsK
KyAgICAgICAgbV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IHRydWU7CiAgICAgICAgIGlmIChzdGF0
ZSAhPSBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmcgIT0gR1NUX1NUQVRFX1BBVVNFRCkKICAg
ICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTg0MywyMCArODAyLDIwIEBAIGRvdWJsZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnJhdGUoKSBjb25zdAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKIHsKLSAgICBtX3ByZXNl
cnZlc1BpdGNoID0gcHJlc2VydmVzUGl0Y2g7CisgICAgbV9zaG91bGRQcmVzZXJ2ZVBpdGNoID0g
cHJlc2VydmVzUGl0Y2g7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWQpCiB7CiAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBwcmVsb2FkIHRvICVzIiwgY29udmVydEVudW1l
cmF0aW9uVG9TdHJpbmcocHJlbG9hZCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKHByZWxvYWQg
PT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgaXNMaXZlU3RyZWFtKCkpCisgICAgaWYgKHByZWxvYWQg
PT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgbV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcHJlbG9hZCA9IHByZWxvYWQ7CiAgICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdG
bGFnKCk7CiAKLSAgICBpZiAobV9kZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxh
eWVyOjpOb25lKSB7Ci0gICAgICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7CisgICAgaWYgKG1f
aXNEZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25lKSB7CisgICAg
ICAgIG1faXNEZWxheWluZ0xvYWQgPSBmYWxzZTsKICAgICAgICAgY29tbWl0TG9hZCgpOwogICAg
IH0KIH0KQEAgLTg2NCw3ICs4MjMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQogc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZm
ZXJlZCgpIGNvbnN0CiB7CiAgICAgYXV0byB0aW1lUmFuZ2VzID0gbWFrZVVuaXF1ZTxQbGF0Zm9y
bVRpbWVSYW5nZXM+KCk7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IGlzTGl2ZVN0cmVhbSgp
KQorICAgIGlmIChtX2RpZEVycm9yT2NjdXIgfHwgbV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJl
dHVybiB0aW1lUmFuZ2VzOwogCiAgICAgTWVkaWFUaW1lIG1lZGlhRHVyYXRpb24gPSBkdXJhdGlv
bk1lZGlhVGltZSgpOwpAQCAtODc2LDggKzgzNSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQoKSBjb25z
CiAgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQo
KSkpCiAgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0gICAgZ3VpbnQgbnVtQnVmZmVyaW5n
UmFuZ2VzID0gZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMocXVlcnkuZ2V0KCkpOwot
ICAgIGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bUJ1ZmZlcmluZ1JhbmdlczsgaW5k
ZXgrKykgeworICAgIHVuc2lnbmVkIG51bUJ1ZmZlcmluZ1JhbmdlcyA9IGdzdF9xdWVyeV9nZXRf
bl9idWZmZXJpbmdfcmFuZ2VzKHF1ZXJ5LmdldCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBudW1CdWZmZXJpbmdSYW5nZXM7IGluZGV4KyspIHsKICAgICAgICAgZ2lu
dDY0IHJhbmdlU3RhcnQgPSAwLCByYW5nZVN0b3AgPSAwOwogICAgICAgICBpZiAoZ3N0X3F1ZXJ5
X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UocXVlcnkuZ2V0KCksIGluZGV4LCAmcmFuZ2VTdGFy
dCwgJnJhbmdlU3RvcCkpIHsKICAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0VGltZSA9IGdzdF91
dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQodG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0
aW9uKSwgcmFuZ2VTdGFydCwgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCk7CkBAIC04ODYsOCArODQ1
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpidWZmZXJlZCgpIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBtb3JlIGdlbmVyYWwgbWF4VGltZUxvYWRlZCgpIGlmIG5vIHJhbmdl
IGhhcwotICAgIC8vIGJlZW4gZm91bmQuCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIG1vcmUgZ2Vu
ZXJhbCBtYXhUaW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzIGJlZW4gZm91bmQuCiAgICAgaWYg
KCF0aW1lUmFuZ2VzLT5sZW5ndGgoKSkgewogICAgICAgICBNZWRpYVRpbWUgbG9hZGVkID0gbWF4
VGltZUxvYWRlZCgpOwogICAgICAgICBpZiAobG9hZGVkLmlzVmFsaWQoKSAmJiBsb2FkZWQpCkBA
IC04OTksMTYgKzg1NywxNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29ucwogCiBNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0
CiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywg
aXNMaXZlU3RyZWFtOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9yT2NjdXJlZCksIGJvb2xG
b3JQcmludGluZyhpc0xpdmVTdHJlYW0oKSkpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBpc0xpdmVT
dHJlYW06ICVzIiwgYm9vbEZvclByaW50aW5nKG1fZGlkRXJyb3JPY2N1ciksIGJvb2xGb3JQcmlu
dGluZyhtX2lzTGl2ZVN0cmVhbSkpOworICAgIGlmIChtX2RpZEVycm9yT2NjdXIpCiAgICAgICAg
IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkp
CisgICAgaWYgKG1faXNMaXZlU3RyZWFtKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJv
VGltZSgpOwogCiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsK
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhNZWRpYVRpbWVTZWVrYWJsZSwg
ZHVyYXRpb246ICVzIiwgdG9TdHJpbmcoZHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOwotICAgIC8v
IGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAgLy8gSW5maW5pdGUgZHVy
YXRpb24gbWVhbnMgbGl2ZSBzdHJlYW0uCiAgICAgaWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZp
bml0ZSgpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCkBAIC05MTcs
NyArODc1LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVk
aWFUaW1lU2Vla2FibGUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQp
CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVy
b1RpbWUoKTsKIAogICAgIE1lZGlhVGltZSBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7CkBAIC05
MjksNyArODg3LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4
VGltZUxvYWRlZCgpIGNvbnN0CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
aWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCB8fCBt
X2xvYWRpbmdTdGFsbGVkKQorICAgIGlmIChtX2RpZEVycm9yT2NjdXIgfHwgbV9sb2FkaW5nU3Rh
bGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFdFQktJVF9JU19XRUJfU1JD
KG1fc291cmNlLmdldCgpKSkgewpAQCAtOTUyLDI5ICs5MTAsMjIgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0CiAKIHVuc2lnbmVk
IGxvbmcgbG9uZyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25z
dAogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICBpZiAobV9kaWRFcnJvck9jY3VyIHx8
ICFtX3NvdXJjZSB8fCBtX2lzTGl2ZVN0cmVhbSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBp
ZiAobV90b3RhbEJ5dGVzKQogICAgICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwogCi0gICAgaWYg
KCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCiAgICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfQllU
RVM7CiAgICAgZ2ludDY0IGxlbmd0aCA9IDA7CiAgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1
cmF0aW9uKG1fc291cmNlLmdldCgpLCBmbXQsICZsZW5ndGgpKSB7CiAgICAgICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0
aCk7CiAgICAgICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4obGVuZ3RoKTsKLSAgICAgICAgbV9pc1N0cmVhbWluZyA9ICFsZW5ndGg7CisgICAgICAgIG1f
aXNMaXZlU3RyZWFtID0gIWxlbmd0aDsKICAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKICAg
ICB9CiAKLSAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBwYWRzIG1hbnVh
bGx5LgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mzg3NDkKKyAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBw
YWRzIG1hbnVhbGx5LiBTZWUgYWxzbyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NzQ5CiAgICAgR3N0SXRlcmF0b3IqIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVy
YXRlX3NyY19wYWRzKG1fc291cmNlLmdldCgpKTsKICAgICBib29sIGRvbmUgPSBmYWxzZTsKICAg
ICB3aGlsZSAoIWRvbmUpIHsKQEAgLTEwMDQsNyArOTU1LDcgQEAgdW5zaWduZWQgbG9uZyBsb25n
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygpIGNvbnN0CiAKICAgICBH
U1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFU
LCBsZW5ndGgpOwogICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4obGVuZ3RoKTsKLSAgICBtX2lzU3RyZWFtaW5nID0gIWxlbmd0aDsKKyAgICBtX2lzTGl2
ZVN0cmVhbSA9ICFsZW5ndGg7CiAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIH0KIApAQCAtMTEy
OSw4ICsxMDgwLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBp
cGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fcGlwZWxpbmUp
OwogCi0gICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7Cisg
ICAgR3N0U3RhdGUgY3VycmVudFN0YXRlLCBwZW5kaW5nOwogCiAgICAgZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsKICAg
ICBpZiAoY3VycmVudFN0YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsK
QEAgLTExNDcsMTMgKzEwOTcsMTAgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiAgICAgaWYgKGN1cnJlbnRT
dGF0ZSAhPSBwYXVzZWRPclBsYXlpbmcgJiYgc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NI
QU5HRV9GQUlMVVJFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBDcmVhdGUgYSB0
aW1lciB3aGVuIGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJl
c291cmNlcwotICAgIC8vIGlmIHdlIHN0YXkgZm9yIHRvbyBsb25nIG9uIFJFQURZLgotICAgIC8v
IEFsc28gbGV0cyByZW1vdmUgdGhlIHRpbWVyIGlmIHdlIHJlcXVlc3QgYSBzdGF0ZSBjaGFuZ2Ug
Zm9yIGFueSBzdGF0ZSBvdGhlciB0aGFuIFJFQURZLgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczNTQKKyAgICAvLyBDcmVhdGUgYSB0
aW1lciB3aGVuIGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJl
c291cmNlcyBpZiB3ZSBzdGF5IGZvciB0b28gbG9uZyBvbiBSRUFEWS4KKyAgICAvLyBBbHNvIGxl
dHMgcmVtb3ZlIHRoZSB0aW1lciBpZiB3ZSByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlIGZvciBhbnkg
c3RhdGUgb3RoZXIgdGhhbiBSRUFEWS4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNzM1NAogICAgIGlmIChuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUkVB
RFkgJiYgIW1fcmVhZHlUaW1lckhhbmRsZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAvLyBNYXgg
aW50ZXJ2YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwK
LSAgICAgICAgLy8gc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgorICAgICAgICAvLyBNYXggaW50ZXJ2
YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwgc3RhdGUg
Y2hhbmdlIHJlcXVlc3RzLgogICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyByZWFkeVN0YXRl
VGltZXJEZWxheSB7IDFfbWluIH07CiAgICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3RhcnRP
bmVTaG90KHJlYWR5U3RhdGVUaW1lckRlbGF5KTsKICAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9
IEdTVF9TVEFURV9SRUFEWSkKQEAgLTEyMDQsNyArMTE1MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKIAogICAgIEFTU0VSVChtX2lz
TGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOwogCi0gICAgZ2ludCBudW1UcmFja3Mg
PSAwOworICAgIHVuc2lnbmVkIG51bVRyYWNrcyA9IDA7CiAgICAgYm9vbCB1c2VNZWRpYVNvdXJj
ZSA9IGlzTWVkaWFTb3VyY2UoKTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFT
b3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CiAgICAgZ19vYmplY3Rf
Z2V0KGVsZW1lbnQsICJuLXZpZGVvIiwgJm51bVRyYWNrcywgbnVsbHB0cik7CkBAIC0xMjI3LDE0
ICsxMTc0LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5
ZXJPZlZpZGVvKCkKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBWZWN0b3I8U3RyaW5n
PiB2YWxpZFZpZGVvU3RyZWFtczsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7
ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewog
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV9waXBlbGluZS5nZXQoKSwgImdldC12aWRlby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBu
dWxscHRyKTsKICAgICAgICAgQVNTRVJUKHBhZCk7CiAKICAgICAgICAgU3RyaW5nIHN0cmVhbUlk
ID0gIlYiICsgU3RyaW5nOjpudW1iZXIoaSk7CiAgICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFw
cGVuZChzdHJlYW1JZCk7Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRl
b1RyYWNrcy5zaXplKCkpKSB7CisgICAgICAgIGlmIChpIDwgbV92aWRlb1RyYWNrcy5zaXplKCkp
IHsKICAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3Rp
bmdUcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKICAgICAgICAgICAgIGlmIChl
eGlzdGluZ1RyYWNrKSB7CiAgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgo
aSk7CkBAIC0xMjgyLDcgKzEyMjksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCiAKICAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4g
fHwgaXNNZWRpYVNvdXJjZSgpKTsKIAotICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICB1bnNp
Z25lZCBudW1UcmFja3MgPSAwOwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291
cmNlKCk7CiAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3Vy
Y2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOwogICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAi
bi1hdWRpbyIsICZudW1UcmFja3MsIG51bGxwdHIpOwpAQCAtMTMwMSwxNCArMTI0OCwxNCBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRBdWRpb1N0
cmVhbXM7Ci0gICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKICAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZDsKICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUu
Z2V0KCksICJnZXQtYXVkaW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CiAgICAg
ICAgIEFTU0VSVChwYWQpOwogCiAgICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJBIiArIFN0cmlu
Zzo6bnVtYmVyKGkpOwogICAgICAgICB2YWxpZEF1ZGlvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQp
OwotICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgp
KSkgeworICAgICAgICBpZiAoaSA8IG1fYXVkaW9UcmFja3Muc2l6ZSgpKSB7CiAgICAgICAgICAg
ICBSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX2F1
ZGlvVHJhY2tzLmdldChzdHJlYW1JZCk7CiAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykg
ewogICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwpAQCAtMTM0NCw3
ICsxMjkxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVGV4dCgpCiAKICAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRpYVNvdXJj
ZSgpKTsKIAotICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICB1bnNpZ25lZCBudW1UcmFja3Mg
PSAwOwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CiAgICAgR3N0
RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3Bp
cGVsaW5lLmdldCgpOwogICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi10ZXh0IiwgJm51bVRy
YWNrcywgbnVsbHB0cik7CkBAIC0xMzU3LDcgKzEzMDQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKICAgICB9CiAKICAgICBWZWN0b3I8
U3RyaW5nPiB2YWxpZFRleHRTdHJlYW1zOwotICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRy
YWNrczsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytp
KSB7CiAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CiAgICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LXRleHQtcGFkIiwgaSwgJnBhZC5vdXRQdHIo
KSwgbnVsbHB0cik7CiAgICAgICAgIEFTU0VSVChwYWQpOwpAQCAtMTM2OSw3ICsxMzE2LDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCgpCiAg
ICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJUIiArIFN0cmluZzo6bnVtYmVyKGkpOwogCiAgICAg
ICAgIHZhbGlkVGV4dFN0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKLSAgICAgICAgaWYgKGkgPCBz
dGF0aWNfY2FzdDxnaW50PihtX3RleHRUcmFja3Muc2l6ZSgpKSkgeworICAgICAgICBpZiAoaSA8
IG1fdGV4dFRyYWNrcy5zaXplKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV90ZXh0VHJhY2tzLmdldChzdHJl
YW1JZCk7CiAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewogICAgICAgICAgICAgICAg
IGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwpAQCAtMTQyMiw5ICsxMzY5LDU2IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlKCkKIH0KICNlbmRpZgog
CitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUR1cmF0aW9u
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAgICAgIHJldHVybiBNZWRpYVRp
bWU6OmludmFsaWRUaW1lKCk7CisKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJl
cnJvck9jY3VyZWQ6ICVzLCBwaXBlbGluZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9k
aWRFcnJvck9jY3VyKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NUX1NUQVRFKG1fcGlw
ZWxpbmUuZ2V0KCkpKSk7CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikKKyAgICAgICAgcmV0dXJu
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIC8vIFRoZSBkdXJhdGlvbiBxdWVyeSB3
b3VsZCBmYWlsIG9uIGEgbm90LXByZXJvbGxlZCBwaXBlbGluZS4KKyAgICBpZiAoR1NUX1NUQVRF
KG1fcGlwZWxpbmUuZ2V0KCkpIDwgR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgcmV0dXJuIE1l
ZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGludDY0X3QgZHVyYXRpb24gPSAwOworICAg
IGlmICghZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9waXBlbGluZS5nZXQoKSwgR1NUX0ZP
Uk1BVF9USU1FLCAmZHVyYXRpb24pIHx8ICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChkdXJhdGlv
bikpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVGltZSBkdXJhdGlv
biBxdWVyeSBmYWlsZWQgZm9yICVzIiwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CisgICAgfQor
CisgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIkR1cmF0aW9uOiAlIiBHU1RfVElNRV9G
T1JNQVQsIEdTVF9USU1FX0FSR1MoZHVyYXRpb24pKTsKKyAgICByZXR1cm4gTWVkaWFUaW1lKGR1
cmF0aW9uLCBHU1RfU0VDT05EKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmlzTXV0ZWQoKSBjb25zdAoreworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBnYm9vbGVhbiBpc011dGVkOworICAgIGdfb2JqZWN0X2dl
dChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJmlzTXV0ZWQsIG51bGxwdHIpOworICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiUGxheWVyIGlzIG11dGVkOiAlcyIsIGJvb2xG
b3JQcmludGluZyghIWlzTXV0ZWQpKTsKKyAgICByZXR1cm4gaXNNdXRlZDsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExvYWQoKQoreworICAgIEFTU0VSVCgh
bV9pc0RlbGF5aW5nTG9hZCk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ29t
bWl0dGluZyBsb2FkLiIpOworCisgICAgLy8gR1N0cmVhbWVyIG5lZWRzIHRvIGhhdmUgdGhlIHBp
cGVsaW5lIHNldCB0byBhIHBhdXNlZCBzdGF0ZSB0bworICAgIC8vIHN0YXJ0IHByb3ZpZGluZyBh
bnl0aGluZyB1c2VmdWwuCisgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VE
KTsKKworICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOworICAgIHVwZGF0ZVN0YXRl
cygpOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZmlsbFRpbWVyRmly
ZWQoKQogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkgeworICAgIGlmIChtX2RpZEVycm9yT2Nj
dXIpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10g
QW4gZXJyb3Igb2NjdXJyZWQsIGRpc2FibGluZyB0aGUgZmlsbCB0aW1lciIpOwogICAgICAgICBt
X2ZpbGxUaW1lci5zdG9wKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NjYsNyArMTQ2MCw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkaW5nRmFpbGVkKE1lZGlhUGxh
eWVyOjpOZXR3b3JrU3RhdGUgbmV0d29yCiB7CiAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgZmFp
bGVkLCBlcnJvcjogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhuZXR3b3JrRXJyb3Ip
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgbV9lcnJvck9jY3VyZWQgPSB0cnVlOworICAgIG1fZGlk
RXJyb3JPY2N1ciA9IHRydWU7CiAgICAgaWYgKGZvcmNlTm90aWZpY2F0aW9ucyB8fCBtX25ldHdv
cmtTdGF0ZSAhPSBuZXR3b3JrRXJyb3IpIHsKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBuZXR3
b3JrRXJyb3I7CiAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0x
NTA5LDggKzE1MDMsOCBAQCBHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmF1ZGlvU2luaygpIGNvbnN0CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnBsYXliYWNrUG9zaXRpb24oKSBjb25zdAogewotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlw
ZWxpbmUoKSwgImlzRW5kUmVhY2hlZDogJXMsIHNlZWtpbmc6ICVzLCBzZWVrVGltZTogJXMiLCBi
b29sRm9yUHJpbnRpbmcobV9pc0VuZFJlYWNoZWQpLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5n
KSwgbV9zZWVrVGltZS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX2lzRW5k
UmVhY2hlZCAmJiBtX3NlZWtpbmcpCisgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAi
aXNFbmRSZWFjaGVkOiAlcywgc2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmlu
dGluZyhtX2lzRW5kUmVhY2hlZCksIGJvb2xGb3JQcmludGluZyhtX2lzU2Vla2luZyksIG1fc2Vl
a1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9pc0VuZFJlYWNoZWQg
JiYgbV9pc1NlZWtpbmcpCiAgICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwogCiAgICAgLy8gVGhp
cyBjb25zdGFudCBzaG91bGQgcmVtYWluIGxvd2VyIHRoYW4gSFRNTE1lZGlhRWxlbWVudCdzIG1h
eFRpbWV1cGRhdGVFdmVudEZyZXF1ZW5jeS4KQEAgLTE1MzAsMTAgKzE1MjQsMTEgQEAgTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0
CiAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsK
ICAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwogCi0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBl
bGluZSgpLCAiUG9zaXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICIsIGNhbkZhbGxCYWNrVG9MYXN0
RmluaXNoZWRTZWVrUG9zaXRpb246ICVzIiwgR1NUX1RJTUVfQVJHUyhwb3NpdGlvbiksIGJvb2xG
b3JQcmludGluZyhtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pKTsKKyAg
ICBHc3RDbG9ja1RpbWUgZ3N0cmVhbWVyUG9zaXRpb24gPSBzdGF0aWNfY2FzdDxHc3RDbG9ja1Rp
bWU+KHBvc2l0aW9uKTsKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJQb3NpdGlv
biAlIiBHU1RfVElNRV9GT1JNQVQgIiwgY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3Np
dGlvbjogJXMiLCBHU1RfVElNRV9BUkdTKGdzdHJlYW1lclBvc2l0aW9uKSwgYm9vbEZvclByaW50
aW5nKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbikpOwogCiAgICAgTWVk
aWFUaW1lIHBsYXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgR3N0
Q2xvY2tUaW1lIGdzdHJlYW1lclBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihw
b3NpdGlvbik7CisKICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZ3N0cmVhbWVyUG9z
aXRpb24pKQogICAgICAgICBwbGF5YmFja1Bvc2l0aW9uID0gTWVkaWFUaW1lKGdzdHJlYW1lclBv
c2l0aW9uLCBHU1RfU0VDT05EKTsKICAgICBlbHNlIGlmIChtX2NhbkZhbGxCYWNrVG9MYXN0Rmlu
aXNoZWRTZWVrUG9zaXRpb24pCkBAIC0xNjA5LDYgKzE2MDQsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6
VHJhY2tUeQogICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRl
b1N0cmVhbUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0
cmVhbWVyOjpUcmFja1R5cGU6OlVua25vd246CisgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE2NjAsNyAr
MTY1Niw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3Mo
KQogICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gdHJhY2sgdHlwZSBmb3VuZCBmb3Ig
c3RyZWFtICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCi0gICAgaWYgKChv
bGRIYXNWaWRlbyAhPSBtX2hhc1ZpZGVvKSB8fCAob2xkSGFzQXVkaW8gIT0gbV9oYXNBdWRpbykp
CisgICAgaWYgKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8gfHwgb2xkSGFzQXVkaW8gIT0gbV9o
YXNBdWRpbykKICAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOwogCiAg
ICAgaWYgKG1faGFzVmlkZW8pCkBAIC0xNzIwLDcgKzE3MTYsOSBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgZ2NoYXIqIGNvbnRleHRUeXBlOwot
ICAgIGdzdF9tZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4dFR5cGUp
OworICAgIGlmICghZ3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250
ZXh0VHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkhhbmRsaW5nICVzIG5lZWQtY29udGV4dCBtZXNzYWdlIGZvciAlcyIsIGNv
bnRleHRUeXBlLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7CiAKICAgICBpZiAoIWdf
c3RyY21wMChjb250ZXh0VHlwZSwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9O
QU1FKSkgewpAQCAtMTc3MSw3ICsxNzY5LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiZGVjcnlwdGlvbi1zeXN0ZW0t
aWQiLCBHX1RZUEVfU1RSSU5HLCBwcmVmZXJyZWRLZXlTeXN0ZW1VdWlkLCBudWxscHRyKTsKICAg
ICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKEdTVF9NRVNTQUdF
X1NSQyhtZXNzYWdlKSksIGNvbnRleHQuZ2V0KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIEdTVF9XQVJOSU5HKCJDRE0gaW5zdGFuY2Ugbm90IGluaXRpYWxpemFlZCIpOworICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNzgxLDcgKzE3NzksNyBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhl
IHZpZGVvCisvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRlby4KIEZsb2F0U2l6ZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKIHsKICNpZiBVU0Uo
R1NUUkVBTUVSX0hPTEVQVU5DSCkKQEAgLTE4MTksMTAgKzE4MTcsOCBAQCBGbG9hdFNpemUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAgICAgaWYgKCFj
YXBzKQogICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CiAKLSAgICAvLyBUT0RPOiBoYW5kbGUg
cG9zc2libGUgY2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlCi0gICAgLy8gaHR0cHM6Ly9idWd6aWxs
YS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjU3MQotICAgIC8vIFRPRE86IGhhbmRsZSBw
b3NzaWJsZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFNlZQotICAgIC8vIGh0dHBzOi8vYnVnemls
bGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYKKyAgICAvLyBUT0RPOiBoYW5kbGUg
cG9zc2libGUgY2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUu
b3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUg
dHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hv
d19idWcuY2dpP2lkPTU5NjMyNgogCiAgICAgLy8gR2V0IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdp
bmFsIHNpemUsIGlmIHRoaXMgZmFpbHMgdGhlCiAgICAgLy8gdmlkZW8tc2luayBoYXMgbGlrZWx5
IG5vdCB5ZXQgbmVnb3RpYXRlZCBpdHMgY2Fwcy4KQEAgLTE4MzQsNyArMTgzMCw3IEBAIEZsb2F0
U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKIAog
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICAvLyBXaGVuIHVzaW5nIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nLCBpZiB0aGUgdmlkZW8gaXMgdGFnZ2VkIGFzIHJvdGF0ZWQgOTAgb3IgMjcw
IGRlZ3JlZXMsIHN3YXAgd2lkdGggYW5kIGhlaWdodC4KLSAgICBpZiAobV9yZW5kZXJpbmdDYW5C
ZUFjY2VsZXJhdGVkKSB7CisgICAgaWYgKG1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCkgewog
ICAgICAgICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkp
CiAgICAgICAgICAgICBvcmlnaW5hbFNpemUgPSBvcmlnaW5hbFNpemUudHJhbnNwb3NlZFNpemUo
KTsKICAgICB9CkBAIC0xODUzLDE5ICsxODQ5LDE5IEBAIEZsb2F0U2l6ZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKICAgICBkaXNwbGF5SGVpZ2h0IC89
IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKIAogICAgIC8vIEFwcGx5IERBUiB0byBvcmlnaW5hbCB2
aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mg
c2V0Y2FwcyBmdW5jdGlvbi4KLSAgICBndWludDY0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAg
ICB1aW50NjRfdCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CiAgICAgaWYgKCEob3JpZ2luYWxTaXpl
LmhlaWdodCgpICUgZGlzcGxheUhlaWdodCkpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKICAgICAgICAgd2lk
dGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlz
cGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8
Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKKyAgICAgICAgaGVpZ2h0ID0gb3JpZ2lu
YWxTaXplLmhlaWdodCgpOwogICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFNpemUud2lkdGgoKSAl
IGRpc3BsYXlXaWR0aCkpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
S2VlcGluZyB2aWRlbyBvcmlnaW5hbCB3aWR0aCIpOwogICAgICAgICBoZWlnaHQgPSBnc3RfdXRp
bF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0LCBk
aXNwbGF5V2lkdGgpOwotICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdp
bmFsU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgd2lkdGggPSBvcmlnaW5hbFNpemUud2lkdGgoKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJBcHBy
b3hpbWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7CiAgICAgICAg
IHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCks
IGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19j
YXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGhlaWdodCA9IG9y
aWdpbmFsU2l6ZS5oZWlnaHQoKTsKICAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRf
Rk9STUFULCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTE5MjMsMzMgKzE5MTksMTMgQEAgTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlKCkg
Y29uc3QKICAgICByZXR1cm4gbV9yZWFkeVN0YXRlOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnNldE11dGVkKGJvb2wgc2hvdWxkTXV0ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0TXV0ZWQoYm9vbCBt
dXRlKQotewotICAgIGlmICghbV92b2x1bWVFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBib29sIGN1cnJlbnRWYWx1ZSA9IG11dGVkKCk7Ci0gICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBt
dXRlKQorICAgIGlmICghbV92b2x1bWVFbGVtZW50IHx8IHNob3VsZE11dGUgPT0gaXNNdXRlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlNl
dCBtdXRlZCB0byAlcyIsIHRvU3RyaW5nKG11dGUpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2Jq
ZWN0X3NldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgbXV0ZSwgbnVsbHB0cik7Ci19
Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdi
b29sZWFuIG11dGVkOwotICAgIGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJt
dXRlIiwgJm11dGVkLCBudWxscHRyKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
IlBsYXllciBpcyBtdXRlZDogJXMiLCB0b1N0cmluZyhzdGF0aWNfY2FzdDxib29sPihtdXRlZCkp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBtdXRlZDsKKyAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIk11dGVkPyAlcyIsIGJvb2xGb3JQcmludGluZyhzaG91bGRNdXRlKSk7Cisg
ICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBzaG91bGRNdXRl
LCBudWxscHRyKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVBsYXllck9mTXV0ZSgpCkBAIC0xOTk5LDcgKzE5NzUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIEdT
VF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJNZXNzYWdlICVzIHJlY2VpdmVkIGZyb20gZWxlbWVu
dCAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNzYWdlKSwgR1NUX01FU1NBR0VfU1JDX05B
TUUobWVzc2FnZSkpOwogICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgewog
ICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgICAgIGlmIChtX3Jlc2V0UGlwZWxpbmUg
fHwgIW1fbWlzc2luZ1BsdWdpbkNhbGxiYWNrcy5pc0VtcHR5KCkgfHwgbV9lcnJvck9jY3VyZWQp
CisgICAgICAgIGlmIChtX3Nob3VsZFJlc2V0UGlwZWxpbmUgfHwgIW1fbWlzc2luZ1BsdWdpbkNh
bGxiYWNrcy5pc0VtcHR5KCkgfHwgbV9kaWRFcnJvck9jY3VyKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIub3V0UHRyKCks
ICZkZWJ1Zy5vdXRQdHIoKSk7CiAgICAgICAgIEdTVF9FUlJPUigiRXJyb3IgJWQ6ICVzICh1cmw9
JXMpIiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwpAQCAtMjAxNCw5ICsxOTkwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIHx8IGdf
ZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9SRVNPVVJDRV9FUlJPUiwgR1NUX1JFU09VUkNF
X0VSUk9SX05PVF9GT1VORCkpCiAgICAgICAgICAgICBlcnJvciA9IE1lZGlhUGxheWVyOjpGb3Jt
YXRFcnJvcjsKICAgICAgICAgZWxzZSBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NU
X1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCkpIHsKLSAgICAg
ICAgICAgIC8vIExldCB0aGUgbWVkaWFQbGF5ZXJDbGllbnQgaGFuZGxlIHRoZSBzdHJlYW0gZXJy
b3IsIGluCi0gICAgICAgICAgICAvLyB0aGlzIGNhc2UgdGhlIEhUTUxNZWRpYUVsZW1lbnQgd2ls
bCBlbWl0IGEgc3RhbGxlZAotICAgICAgICAgICAgLy8gZXZlbnQuCisgICAgICAgICAgICAvLyBM
ZXQgdGhlIG1lZGlhUGxheWVyQ2xpZW50IGhhbmRsZSB0aGUgc3RyZWFtIGVycm9yLCBpbiB0aGlz
IGNhc2UgdGhlIEhUTUxNZWRpYUVsZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZCBldmVudC4KICAg
ICAgICAgICAgIEdTVF9FUlJPUigiRGVjb2RlIGVycm9yLCBsZXQgdGhlIE1lZGlhIGVsZW1lbnQg
ZW1pdCBhIHN0YWxsZWQgZXZlbnQuIik7CiAgICAgICAgICAgICBtX2xvYWRpbmdTdGFsbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjAyOSw3ICsyMDAzLDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2Fn
ZSkKICAgICAgICAgaWYgKGF0dGVtcHROZXh0TG9jYXRpb24pCiAgICAgICAgICAgICBpc3N1ZUVy
cm9yID0gIWxvYWROZXh0TG9jYXRpb24oKTsKICAgICAgICAgaWYgKGlzc3VlRXJyb3IpIHsKLSAg
ICAgICAgICAgIG1fZXJyb3JPY2N1cmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZGlkRXJyb3JP
Y2N1ciA9IHRydWU7CiAgICAgICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gZXJyb3IpIHsK
ICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IGVycm9yOwogICAgICAgICAgICAgICAg
IG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0yMDQwLDEyICsyMDE0LDEyIEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpCiAgICAgICAgIGRpZEVuZCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkU6Ci0gICAgICAgIGlmICghbWVzc2FnZVNvdXJjZUlzUGxh
eWJpbiB8fCBtX2RlbGF5aW5nTG9hZCkKKyAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5
YmluIHx8IG1faXNEZWxheWluZ0xvYWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgYXN5
bmNTdGF0ZUNoYW5nZURvbmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfTUVTU0FH
RV9TVEFURV9DSEFOR0VEOiB7Ci0gICAgICAgIGlmICghbWVzc2FnZVNvdXJjZUlzUGxheWJpbiB8
fCBtX2RlbGF5aW5nTG9hZCkKKyAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5YmluIHx8
IG1faXNEZWxheWluZ0xvYWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgdXBkYXRlU3Rh
dGVzKCk7CiAKQEAgLTIxNzYsOCArMjE1MCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFpc1Jhbmdl
UmVxdWVzdCkgewotICAgICAgICAgICAgICAgICAgICBtX2lzU3RyZWFtaW5nID0gIWNvbnRlbnRM
ZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAi
JXMgc3RyZWFtIGRldGVjdGVkIiwgbV9pc1N0cmVhbWluZyA/ICJMaXZlIiA6ICJOb24tbGl2ZSIp
OworICAgICAgICAgICAgICAgICAgICBtX2lzTGl2ZVN0cmVhbSA9ICFjb250ZW50TGVuZ3RoOwor
ICAgICAgICAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVh
bSBkZXRlY3RlZCIsIG1faXNMaXZlU3RyZWFtID8gIkxpdmUiIDogIk5vbi1saXZlIik7CiAgICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIyODUsMTUgKzIyNTksMTUgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhHc3RCdWZmZXJp
bmdNb2RlIG1vZGUsIGQKIHsKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVm
ZmVyaW5nXSBtb2RlOiAlcywgc3RhdHVzOiAlZiUlIiwgZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JV
RkZFUklOR19NT0RFLCBtb2RlKS5kYXRhKCksIHBlcmNlbnRhZ2UpOwogCi0gICAgbV9kb3dubG9h
ZEZpbmlzaGVkID0gcGVyY2VudGFnZSA9PSAxMDA7Ci0gICAgbV9idWZmZXJpbmcgPSAhbV9kb3du
bG9hZEZpbmlzaGVkOworICAgIG1fZGlkRG93bmxvYWRGaW5pc2ggPSBwZXJjZW50YWdlID09IDEw
MDsKKyAgICBtX2lzQnVmZmVyaW5nID0gIW1fZGlkRG93bmxvYWRGaW5pc2g7CiAKICAgICBzd2l0
Y2ggKG1vZGUpIHsKICAgICBjYXNlIEdTVF9CVUZGRVJJTkdfU1RSRUFNOiB7CiAgICAgICAgIHVw
ZGF0ZU1heFRpbWVMb2FkZWQocGVyY2VudGFnZSk7CiAKICAgICAgICAgbV9idWZmZXJpbmdQZXJj
ZW50YWdlID0gcGVyY2VudGFnZTsKLSAgICAgICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKKyAg
ICAgICAgaWYgKG1fZGlkRG93bmxvYWRGaW5pc2gpCiAgICAgICAgICAgICB1cGRhdGVTdGF0ZXMo
KTsKIAogICAgICAgICBicmVhazsKQEAgLTIzMDMsNyArMjI3Nyw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMoR3N0QnVmZmVyaW5nTW9k
ZSBtb2RlLCBkCiAKICAgICAgICAgLy8gTWVkaWEgaXMgbm93IGZ1bGx5IGxvYWRlZC4gSXQgd2ls
bCBwbGF5IGV2ZW4gaWYgbmV0d29yayBjb25uZWN0aW9uIGlzCiAgICAgICAgIC8vIGN1dC4gQnVm
ZmVyaW5nIGlzIGRvbmUsIHJlbW92ZSB0aGUgZmlsbCBzb3VyY2UgZnJvbSB0aGUgbWFpbiBsb29w
LgotICAgICAgICBpZiAobV9kb3dubG9hZEZpbmlzaGVkKQorICAgICAgICBpZiAobV9kaWREb3du
bG9hZEZpbmlzaCkKICAgICAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKIAogICAgICAgICB1
cGRhdGVTdGF0ZXMoKTsKQEAgLTIzMjMsNyArMjI5Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwcm9jZXNzTXBlZ1RzU2VjdGlvbihHc3RNcGVndHNTZWN0aW9uKiBzZWN0
aW9uCiAgICAgaWYgKHNlY3Rpb24tPnNlY3Rpb25fdHlwZSA9PSBHU1RfTVBFR1RTX1NFQ1RJT05f
UE1UKSB7CiAgICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVCogcG10ID0gZ3N0X21wZWd0c19zZWN0
aW9uX2dldF9wbXQoc2VjdGlvbik7CiAgICAgICAgIG1fbWV0YWRhdGFUcmFja3MuY2xlYXIoKTsK
LSAgICAgICAgZm9yIChndWludCBpID0gMDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kp
IHsKICAgICAgICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVFN0cmVhbSogc3RyZWFtID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzUE1UU3RyZWFtKj4oZ19wdHJfYXJyYXlfaW5kZXgocG10LT5z
dHJlYW1zLCBpKSk7CiAgICAgICAgICAgICBpZiAoc3RyZWFtLT5zdHJlYW1fdHlwZSA9PSAweDA1
IHx8IHN0cmVhbS0+c3RyZWFtX3R5cGUgPj0gMHg4MCkgewogICAgICAgICAgICAgICAgIEF0b21T
dHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc3RyZWFtLT5waWQpOwpAQCAtMjM0Miw5ICsyMzE2
LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NNcGVnVHNTZWN0
aW9uKEdzdE1wZWd0c1NlY3Rpb24qIHNlY3Rpb24KICAgICAgICAgICAgICAgICAvLyBleHByZXNz
ZWQgaW4gaGV4YWRlY2ltYWwgdXNpbmcgdXBwZXJjYXNlIEFTQ0lJIGhleCBkaWdpdHMuCiAgICAg
ICAgICAgICAgICAgU3RyaW5nIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGU7CiAgICAg
ICAgICAgICAgICAgYXBwZW5kVW5zaWduZWRBc0hleEZpeGVkU2l6ZShzdHJlYW0tPnN0cmVhbV90
eXBlLCBpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlLCAyKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKGd1aW50IGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlwdG9ycy0+bGVuOyArK2opIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlw
dG9ycy0+bGVuOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0TXBlZ3RzRGVz
Y3JpcHRvciogZGVzY3JpcHRvciA9IHN0YXRpY19jYXN0PGNvbnN0IEdzdE1wZWd0c0Rlc2NyaXB0
b3IqPihnX3B0cl9hcnJheV9pbmRleChzdHJlYW0tPmRlc2NyaXB0b3JzLCBqKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoZ3VpbnQgayA9IDA7IGsgPCBkZXNjcmlwdG9yLT5sZW5ndGg7ICsr
aykKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlc2NyaXB0
b3ItPmxlbmd0aDsgKytrKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4
KGRlc2NyaXB0b3ItPmRhdGFba10sIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0cmFjay0+c2V0SW5CYW5kTWV0YWRh
dGFUcmFja0Rpc3BhdGNoVHlwZShpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKTsKQEAg
LTIzOTQsMTAgKzIzNjgsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBy
b2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSogZW50cnkKIAogICAgIGdpbnQ2
NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7CiAgICAgZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3Rv
cF90aW1lcyhlbnRyeSwgJnN0YXJ0LCAmc3RvcCk7CisKKyAgICB1aW50MzJfdCB0cnVuY2F0ZWRH
c3RTZWNvbmQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oR1NUX1NFQ09ORCk7CiAgICAgaWYgKHN0
YXJ0ICE9IC0xKQotICAgICAgICBjdWUtPnNldFN0YXJ0VGltZShNZWRpYVRpbWUoc3RhcnQsIEdT
VF9TRUNPTkQpKTsKKyAgICAgICAgY3VlLT5zZXRTdGFydFRpbWUoTWVkaWFUaW1lKHN0YXRpY19j
YXN0PGludDY0X3Q+KHN0YXJ0KSwgdHJ1bmNhdGVkR3N0U2Vjb25kKSk7CiAgICAgaWYgKHN0b3Ag
IT0gLTEpCi0gICAgICAgIGN1ZS0+c2V0RW5kVGltZShNZWRpYVRpbWUoc3RvcCwgR1NUX1NFQ09O
RCkpOworICAgICAgICBjdWUtPnNldEVuZFRpbWUoTWVkaWFUaW1lKHN0YXRpY19jYXN0PGludDY0
X3Q+KHN0b3ApLCB0cnVuY2F0ZWRHc3RTZWNvbmQpKTsKIAogICAgIEdzdFRhZ0xpc3QqIHRhZ3Mg
PSBnc3RfdG9jX2VudHJ5X2dldF90YWdzKGVudHJ5KTsKICAgICBpZiAodGFncykgewpAQCAtMjQ5
NSwxNSArMjQ3MSwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VP
bGREb3dubG9hZEZpbGVzKGNvbnN0IGNoYXIqIGRvd25sb2FkRmlsZQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQogewotICAgIGlmICgh
bV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgbV9k
aWRFcnJvck9jY3VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zZWVraW5nKSB7Ci0g
ICAgICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpCisgICAgaWYgKG1faXNTZWVraW5nKSB7CisgICAg
ICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpCiAgICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJb
U2Vla10gc2Vla2VkIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNTZWVraW5n
ID0gZmFsc2U7CiAgICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOwogICAgICAgICAgICAgaWYgKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrICE9IG1f
c2Vla1RpbWUgJiYgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWsuaXNWYWxpZCgpKSB7CiAgICAgICAg
ICAgICAgICAgc2VlayhtX3RpbWVPZk92ZXJsYXBwaW5nU2Vlayk7CkBAIC0yNTIzLDE2ICsyNDk5
LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphc3luY1N0YXRlQ2hhbmdl
RG9uZSgpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMo
KQogewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
ZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29y
a1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xk
UmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLSAgICBHc3RTdGF0ZSBwZW5kaW5nOwotICAgIEdz
dFN0YXRlIHN0YXRlOworICAgIEdzdFN0YXRlIHBlbmRpbmcsIHN0YXRlOwogICAgIGJvb2wgc3Rh
dGVSZWFsbHlDaGFuZ2VkID0gZmFsc2U7CiAKICAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRT
dGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3Rh
dGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7CkBAIC0yNTUyLDkgKzI1MjQsOSBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAg
aWYgKG1faXNFbmRSZWFjaGVkICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkK
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IG1fY3VycmVu
dFN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWTsKKyAgICAgICAgbV9zaG91bGRSZXNldFBpcGVsaW5l
ID0gbV9jdXJyZW50U3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZOwogCi0gICAgICAgIGJvb2wgZGlk
QnVmZmVyaW5nID0gbV9idWZmZXJpbmc7CisgICAgICAgIGJvb2wgZGlkQnVmZmVyaW5nID0gbV9p
c0J1ZmZlcmluZzsKIAogICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVz
LgogICAgICAgICBzd2l0Y2ggKG1fY3VycmVudFN0YXRlKSB7CkBAIC0yNTY4LDE3ICsyNTQwLDE3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKICAgICAgICAg
Y2FzZSBHU1RfU1RBVEVfUExBWUlORzoKLSAgICAgICAgICAgIGlmIChtX2J1ZmZlcmluZykgewor
ICAgICAgICAgICAgaWYgKG1faXNCdWZmZXJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAobV9i
dWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgewogICAgICAgICAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBDb21wbGV0ZS4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9idWZmZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9p
c0J1ZmZlcmluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBs
YXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBtX2Rp
ZERvd25sb2FkRmluaXNoID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGlu
ZzsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOwogICAgICAgICAgICAgICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fZGlkRG93bmxvYWRGaW5pc2gpIHsKICAgICAgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAgICAgICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwogICAgICAgICAgICAgfSBl
bHNlIHsKQEAgLTI1OTQsMjUgKzI1NjYsMjUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAKICAgICAgICAgLy8gU3luYyBzdGF0ZXMgd2hlcmUgbmVl
ZGVkLgogICAgICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewot
ICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgeworICAgICAgICAg
ICAgaWYgKCFtX2FyZVZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgewogICAgICAgICAgICAgICAg
IG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CiAgICAgICAgICAgICAgICAgbm90aWZ5UGxh
eWVyT2ZNdXRlKCk7Ci0gICAgICAgICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIG1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkID0g
dHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGRpZEJ1ZmZlcmluZyAmJiAh
bV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAg
ICBpZiAoZGlkQnVmZmVyaW5nICYmICFtX2lzQnVmZmVyaW5nICYmICFtX2lzUGF1c2VkICYmIG1f
cGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiW0J1ZmZlcmluZ10gUmVzdGFydGluZyBwbGF5YmFjay4iKTsKICAgICAgICAgICAgICAg
ICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykg
ewotICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNQYXVzZWQg
PSBmYWxzZTsKIAotICAgICAgICAgICAgaWYgKChtX2J1ZmZlcmluZyAmJiAhaXNMaXZlU3RyZWFt
KCkpIHx8ICFtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgaWYgKChtX2lzQnVmZmVyaW5n
ICYmIG1faXNMaXZlU3RyZWFtKSB8fCAhbV9wbGF5YmFja1JhdGUpIHsKICAgICAgICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVh
bSBmb3IgYnVmZmVyaW5nLiIpOwogICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUo
R1NUX1NUQVRFX1BBVVNFRCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAK
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiT2xkIHN0YXRlOiAlcywgbmV3
IHN0YXRlOiAlcyAocmVxdWVzdGVkOiAlcykiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSht
X29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX3JlcXVlc3RlZFN0YXRlKSk7CiAgICAgICAgIGlm
IChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbV9jdXJyZW50U3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCkgewpAQCAtMjYzNywyNCArMjYwOSwyNCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CiAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkZhaWx1cmU6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKHBlbmRpbmcpKTsKLSAgICAgICAgLy8gQ2hhbmdlIGZhaWxlZAorICAgICAgICAvLyBD
aGFuZ2UgZmFpbGVkLgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdF
X05PX1BSRVJPTEw6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5vIHBy
ZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFt
ZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsK
IAogICAgICAgICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQQVVTRUQgd2l0aG91dCBwcmVyb2xs
aW5nLgotICAgICAgICBtX2lzU3RyZWFtaW5nID0gdHJ1ZTsKKyAgICAgICAgbV9pc0xpdmVTdHJl
YW0gPSB0cnVlOwogICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKIAogICAg
ICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQogICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwogICAgICAgICBlbHNlIGlm
IChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgICAgICAgICBtX3Bh
dXNlZCA9IHRydWU7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgfSBl
bHNlIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICAgICAg
IG1fcGF1c2VkID0gZmFsc2U7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gZmFsc2U7CiAKLSAg
ICAgICAgaWYgKCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkKKyAgICAgICAgaWYgKCFtX2lz
UGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKQogICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0
ZShHU1RfU1RBVEVfUExBWUlORyk7CiAKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6TG9hZGluZzsKQEAgLTI2ODAsMTEgKzI2NTIsMTEgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAKICAgICBpZiAoZ2V0U3RhdGVSZXN1bHQg
PT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIG1fY3VycmVudFN0YXRlID49IEdTVF9TVEFU
RV9QQVVTRUQpIHsKICAgICAgICAgdXBkYXRlUGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIGlmICht
X3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgaWYgKG1faXNTZWVrUGVuZGluZykgewogICAgICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIGNvbW1pdHRpbmcgcGVu
ZGluZyBzZWVrIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBtX3NlZWtJc1BlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fc2Vla2lu
ZyA9IGRvU2VlayhtX3NlZWtUaW1lLCBtX3BsYXllci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxHc3RT
ZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7
Ci0gICAgICAgICAgICBpZiAoIW1fc2Vla2luZykgeworICAgICAgICAgICAgbV9pc1NlZWtQZW5k
aW5nID0gZmFsc2U7CisgICAgICAgICAgICBtX2lzU2Vla2luZyA9IGRvU2VlayhtX3NlZWtUaW1l
LCBtX3BsYXllci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZM
QUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7CisgICAgICAgICAgICBpZiAoIW1f
aXNTZWVraW5nKSB7CiAgICAgICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKTsKICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJbU2Vla10gc2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1l
KS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIH0KQEAgLTI3MTgsNyArMjY5MCw3IEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbnMgPSBnc3Rfc3Ry
dWN0dXJlX2dldF92YWx1ZShtX21lZGlhTG9jYXRpb25zLCAibG9jYXRpb25zIik7Ci0gICAgY29u
c3QgZ2NoYXIqIG5ld0xvY2F0aW9uID0gbnVsbHB0cjsKKyAgICBjb25zdCBjaGFyKiBuZXdMb2Nh
dGlvbiA9IG51bGxwdHI7CiAKICAgICBpZiAoIWxvY2F0aW9ucykgewogICAgICAgICAvLyBGYWxs
YmFjayBvbiBuZXctbG9jYXRpb24gc3RyaW5nLgpAQCAtMjc3NSw3ICsyNzQ3LDcgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24oKQogICAgICAgICAg
ICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAKICAgICAgICAgICAgIC8vIFJlc2V0
IHBpcGVsaW5lIHN0YXRlLgotICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG1fc2hvdWxkUmVzZXRQaXBlbGluZSA9IHRydWU7CiAKICAgICAgICAgICAgIEdz
dFN0YXRlIHN0YXRlOwogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7CkBAIC0yODAxLDcgKzI3NzMsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKCkKICAgICAvLyBwb3NpdGlvbiBp
cyBub3QgYWx3YXlzIHJlcG9ydGVkIGFzIDAgZm9yIGluc3RhbmNlLgogICAgIG1fY2FjaGVkUG9z
aXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAgICAgTWVkaWFUaW1lIG5vdyA9IGN1
cnJlbnRNZWRpYVRpbWUoKTsKLSAgICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYm
ICFtX3NlZWtpbmcpIHsKKyAgICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmICFt
X2lzU2Vla2luZykgewogICAgICAgICBtX2NhY2hlZER1cmF0aW9uID0gbm93OwogICAgICAgICBt
X3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgfQpAQCAtMjgwOSw5ICsyNzgxLDkgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCiAgICAgbV9pc0VuZFJl
YWNoZWQgPSB0cnVlOwogCiAgICAgaWYgKCFtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJ
c0xvb3BpbmcoKSkgewotICAgICAgICBtX3BhdXNlZCA9IHRydWU7CisgICAgICAgIG1faXNQYXVz
ZWQgPSB0cnVlOwogICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7
Ci0gICAgICAgIG1fZG93bmxvYWRGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICBtX2RpZERvd25s
b2FkRmluaXNoID0gZmFsc2U7CiAgICAgfQogICAgIHRpbWVDaGFuZ2VkKCk7CiB9CkBAIC0yODY0
LDEyICsyODM2LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVE
b3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKQogICAgIHVuc2lnbmVkIGZsYWdEb3dubG9hZCA9IGdldEdz
dFBsYXlGbGFnKCJkb3dubG9hZCIpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdG9wIGRv
d25sb2FkaW5nIGlmIHdlIGFscmVhZHkgc3RhcnRlZCBpdC4KLSAgICBpZiAoZmxhZ3MgJiBmbGFn
RG93bmxvYWQgJiYgbV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFt
X3Jlc2V0UGlwZWxpbmUpIHsKKyAgICBpZiAoZmxhZ3MgJiBmbGFnRG93bmxvYWQgJiYgbV9yZWFk
eVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFtX3Nob3VsZFJlc2V0UGlwZWxp
bmUpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRG93bmxvYWQgYWxy
ZWFkeSBzdGFydGVkLCBub3Qgc3RhcnRpbmcgYWdhaW4iKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGJvb2wgc2hvdWxkRG93bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVs
b2FkID09IE1lZGlhUGxheWVyOjpBdXRvOworICAgIGJvb2wgc2hvdWxkRG93bmxvYWQgPSAhbV9p
c0xpdmVTdHJlYW0gJiYgbV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpBdXRvOwogICAgIGlmIChz
aG91bGREb3dubG9hZCkgewogICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVu
YWJsaW5nIG9uLWRpc2sgYnVmZmVyaW5nIik7CiAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVs
aW5lLmdldCgpLCAiZmxhZ3MiLCBmbGFncyB8IGZsYWdEb3dubG9hZCwgbnVsbHB0cik7CkBAIC0y
ODgzLDcgKzI4NTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
RG93bmxvYWRCdWZmZXJpbmdGbGFnKCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGlwZWxp
bmVOYW1lKQogewotICAgIGNvbnN0IGdjaGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKKyAg
ICBjb25zdCBjaGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKIAogICAgIC8vIE1TRSBkb2Vz
bid0IHN1cHBvcnQgcGxheWJpbjMuIE1lZGlhc3RyZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1
bGFyCiAgICAgLy8gcGxheWJhY2sgY2FuIHVzZSBwbGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUg
V0VCS0lUX0dTVF9VU0VfUExBWUJJTjMKQEAgLTI5MDYsOCArMjg3OCw2IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmCiAKICAgICBtX2lzTGVnYWN5UGxheWJpbiA9ICFnX3N0cmNtcDAocGxheWJp
bk5hbWUsICJwbGF5YmluIik7CiAKLSAgICAvLyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSBy
ZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJlbmNlIHNvCi0gICAgLy8gd2Ugc2hvdWxkIG5vdCBhZG9w
dC4KICAgICBzdGF0aWMgQXRvbWljPHVpbnQzMl90PiBwaXBlbGluZUlkOwogICAgIHNldFBpcGVs
aW5lKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShwbGF5YmluTmFtZSwKICAgICAgICAgKHBpcGVs
aW5lTmFtZS5pc0VtcHR5KCkgPyBtYWtlU3RyaW5nKCJtZWRpYS1wbGF5ZXItIiwgcGlwZWxpbmVJ
ZC5leGNoYW5nZUFkZCgxKSkgOiBwaXBlbGluZU5hbWUpLnV0ZjgoKS5kYXRhKCkpKTsKQEAgLTI5
NzMsNyArMjk0Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVH
U1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAKICAgICBjb25maWd1cmVQ
bGF5U2luaygpOwogCi0gICAgaWYgKG1fcHJlc2VydmVzUGl0Y2gpIHsKKyAgICBpZiAobV9zaG91
bGRQcmVzZXJ2ZVBpdGNoKSB7CiAgICAgICAgIEdzdEVsZW1lbnQqIHNjYWxlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJzY2FsZXRlbXBvIiwgbnVsbHB0cik7CiAKICAgICAgICAgaWYgKCFz
Y2FsZSkKQEAgLTI5ODIsNyArMjk1Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAgICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWZpbHRlciIsIHNj
YWxlLCBudWxscHRyKTsKICAgICB9CiAKLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVy
YXRlZCkgeworICAgIGlmICghbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKSB7CiAgICAgICAg
IC8vIElmIG5vdCB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgbGV0IEdTdHJlYW1lciBo
YW5kbGUKICAgICAgICAgLy8gdGhlIGltYWdlLW9yaWVudGF0aW9uIHRhZy4KICAgICAgICAgR3N0
RWxlbWVudCogdmlkZW9GbGlwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb2ZsaXAi
LCBudWxscHRyKTsKQEAgLTMwMDcsNyArMjk3Nyw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpkaWRQYXNzQ09SU0FjY2Vzc0NoZWNrKCkgY29uc3QKIAogYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNhblNhdmVNZWRpYURhdGEoKSBjb25zdAogewotICAgIGlm
IChpc0xpdmVTdHJlYW0oKSkKKyAgICBpZiAobV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChtX3VybC5pc0xvY2FsRmlsZSgpKQpAQCAtMzAyNyw3ICsyOTk3
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZCgp
CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVyYXRlZFJlbmRlcmlu
Z1N0YXRlQ2hhbmdlZCgpCiB7Ci0gICAgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkID0gbV9w
bGF5ZXIgJiYgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQoKTsKKyAgICBtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQgPSBtX3BsYXll
ciAmJiBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCgpOwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQpAQCAtMzA3NSw3ICsz
MDQ1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hUZXh0dXJlVG9D
b21wb3NpdG9yKCkKICAgICAgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0Zy
YW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4o
bV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZs
YWdzLCAhbV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0Vmlk
ZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1f
dGV4dHVyZU1hcHBlckZsYWdzLCAhbV9pc1VzaW5nRmFsbGJhY2tWaWRlb1NpbmspOwogCiAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+
IGxheWVyQnVmZmVyOwogICAgICAgICAgICAgaWYgKGZyYW1lSG9sZGVyLT5oYXNNYXBwZWRUZXh0
dXJlcygpKSB7CkBAIC0zMTE3LDIzICszMDg3LDIzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpyZXBhaW50KCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQogewotICAgIGJvb2wgdHJpZ2dlclJl
c2l6ZTsKKyAgICBib29sIHNob3VsZFRyaWdnZXJSZXNpemU7CiAgICAgewogICAgICAgICBhdXRv
IHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotICAgICAgICB0cmlnZ2Vy
UmVzaXplID0gIW1fc2FtcGxlOworICAgICAgICBzaG91bGRUcmlnZ2VyUmVzaXplID0gIW1fc2Ft
cGxlOwogICAgICAgICBtX3NhbXBsZSA9IHNhbXBsZTsKICAgICB9CiAKLSAgICBpZiAodHJpZ2dl
clJlc2l6ZSkgeworICAgIGlmIChzaG91bGRUcmlnZ2VyUmVzaXplKSB7CiAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkZpcnN0IHNhbXBsZSByZWFjaGVkIHRoZSBzaW5rLCB0
cmlnZ2VyaW5nIHZpZGVvIGRpbWVuc2lvbnMgdXBkYXRlIik7CiAgICAgICAgIG1fbm90aWZpZXIt
Pm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpTaXplQ2hhbmdlZCwgW3RoaXNdIHsKICAg
ICAgICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOwogICAgICAgICB9KTsKICAgICB9CiAK
LSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgeworICAgIGlmICghbV9jYW5S
ZW5kZXJpbmdCZUFjY2VsZXJhdGVkKSB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJh
d011dGV4KTsKLSAgICAgICAgaWYgKG1fZGVzdHJveWluZykKKyAgICAgICAgaWYgKG1faXNCZWlu
Z0Rlc3Ryb3llZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kcmF3VGltZXIuc3Rh
cnRPbmVTaG90KDBfcyk7CiAgICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1fZHJhd011dGV4
KTsKQEAgLTMxNDEsNyArMzExMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUqIHNhbXBsZSkKICAgICB9CiAKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykgeworICAg
IGlmIChtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luaykgewogICAgICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9kcmF3TXV0ZXgpOwogICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KICAgICAgICAg
ICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKQEAgLTMx
NzcsMTAgKzMxNDcsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhbmNl
bFJlcGFpbnQoYm9vbCBkZXN0cm95aW5nKQogICAgIC8vCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBhbHNvIHVzZWQgd2hlbiBkZXN0cm95aW5nIHRoZSBwbGF5ZXIgKGRlc3Ryb3lpbmcgcGFyYW1l
dGVyIGlzIHRydWUpLCB0byByZWxlYXNlIHRoZSBnc3RyZWFtZXIgdGhyZWFkIGZyb20KICAgICAv
LyBtX2RyYXdDb25kaXRpb24gYW5kIHRvIGVuc3VyZSB0aGF0IG5ldyB0cmlnZ2VyUmVwYWludCBj
YWxscyB3b24ndCB3YWl0IG9uIG1fZHJhd0NvbmRpdGlvbi4KLSAgICBpZiAoIW1fcmVuZGVyaW5n
Q2FuQmVBY2NlbGVyYXRlZCkgeworICAgIGlmICghbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVk
KSB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4KTsKICAgICAgICAgbV9k
cmF3VGltZXIuc3RvcCgpOwotICAgICAgICBtX2Rlc3Ryb3lpbmcgPSBkZXN0cm95aW5nOworICAg
ICAgICBtX2lzQmVpbmdEZXN0cm95ZWQgPSBkZXN0cm95aW5nOwogICAgICAgICBtX2RyYXdDb25k
aXRpb24ubm90aWZ5T25lKCk7CiAgICAgfQogfQpAQCAtMzI2Miw5ICszMjMyLDkgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0SW5wdXRDYXBzID0g
Y2FwczsKICAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19jb3B5KGNhcHMpKTsKICNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFO
Ci0gICAgICAgICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9f
SEFTX0FMUEhBKCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIkJHUngiOworICAgICAgICAgICAgY29u
c3QgY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0lu
Zm8pID8gIlJHQkEiIDogIkJHUngiOwogI2Vsc2UKLSAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBm
b3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdC
QSIgOiAiUkdCeCI7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1Rf
VklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiUkdCeCI7CiAjZW5k
aWYKICAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUobV9jb2xvckNvbnZlcnRPdXRwdXRD
YXBzLmdldCgpLCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgZm9ybWF0U3RyaW5nLCBudWxscHRy
KTsKICAgICAgICAgICAgIGlmICghZ3N0X2dsX2NvbG9yX2NvbnZlcnRfc2V0X2NhcHMobV9jb2xv
ckNvbnZlcnQuZ2V0KCksIGNhcHMsIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSkpCkBA
IC0zMjg1LDcgKzMyNTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogICAgIGlmICghZ3N0
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQuZHJhd0ltYWdlKGdzdEltYWdl
LT5pbWFnZSgpLCByZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7IENvbXBvc2l0ZUNvcHksIG1fcmVu
ZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA6IEltYWdl
T3JpZW50YXRpb24oKSB9KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShnc3RJbWFnZS0+aW1hZ2Uo
KSwgcmVjdCwgZ3N0SW1hZ2UtPnJlY3QoKSwgeyBDb21wb3NpdGVDb3B5LCBtX2NhblJlbmRlcmlu
Z0JlQWNjZWxlcmF0ZWQgPyBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gOiBJbWFnZU9yaWVudGF0
aW9uKCkgfSk7CiB9CiAKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQpAQCAtMzI5Myw3ICszMjYzLDcg
QEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnQKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7
CiAKLSAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQorICAgIGlmIChtX2lzVXNpbmdG
YWxsYmFja1ZpZGVvU2luaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHByZW11
bHRpcGx5QWxwaGEpCkBAIC0zMzI1LDcgKzMyOTUsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dAogTmF0aXZlSW1hZ2VQdHIgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRUaW1lKCkKIHsKICNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykKKyAgICBpZiAo
bV9pc1VzaW5nRmFsbGJhY2tWaWRlb1NpbmspCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKQEAgLTM0MDYs
NyArMzM3Niw3IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bW92aWVMb2FkVHlwZSgpIGNvbnN0CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6
VW5rbm93bjsKIAotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKKyAgICBpZiAobV9pc0xpdmVTdHJl
YW0pCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKIAogICAgIHJldHVy
biBNZWRpYVBsYXllcjo6RG93bmxvYWQ7CkBAIC0zNDg0LDEyICszNDU0LDEyIEBAIEdzdEVsZW1l
bnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rKCkKICNlbmRp
ZgogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBpZiAobV9yZW5kZXJpbmdDYW5CZUFjY2Vs
ZXJhdGVkKQorICAgIGlmIChtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1f
dmlkZW9TaW5rID0gY3JlYXRlVmlkZW9TaW5rR0woKTsKICNlbmRpZgogCiAgICAgaWYgKCFtX3Zp
ZGVvU2luaykgewotICAgICAgICBtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmsgPSB0cnVlOworICAg
ICAgICBtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luayA9IHRydWU7CiAgICAgICAgIG1fdmlkZW9T
aW5rID0gd2Via2l0VmlkZW9TaW5rTmV3KCk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX3ZpZGVvU2luay5nZXQoKSwgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyhy
ZXBhaW50Q2FsbGJhY2spLCB0aGlzKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1jYW5jZWxsZWQiLCBHX0NBTExCQUNLKHJlcGFp
bnRDYW5jZWxsZWRDYWxsYmFjayksIHRoaXMpOwpAQCAtMzU0Myw3ICszNTEzLDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3Ry
ZWFtVm9sdW1lKiB2b2x1bWUKIAogdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgZ3VpbnQ2NCBkZWNvZGVkRnJhbWVz
ID0gMDsKKyAgICB1aW50NjRfdCBkZWNvZGVkRnJhbWVzID0gMDsKICAgICBpZiAobV9mcHNTaW5r
KQogICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5rLmdldCgpLCAiZnJhbWVzLXJlbmRlcmVk
IiwgJmRlY29kZWRGcmFtZXMsIG51bGxwdHIpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZGVjb2RlZEZyYW1lcyk7CkBAIC0zNTUxLDcgKzM1MjEsNyBAQCB1bnNpZ25lZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRlY29kZWRGcmFtZUNvdW50KCkgY29uc3QKIAogdW5z
aWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3VudCgpIGNv
bnN0CiB7Ci0gICAgZ3VpbnQ2NCBmcmFtZXNEcm9wcGVkID0gMDsKKyAgICB1aW50NjRfdCBmcmFt
ZXNEcm9wcGVkID0gMDsKICAgICBpZiAobV9mcHNTaW5rKQogICAgICAgICBnX29iamVjdF9nZXQo
bV9mcHNTaW5rLmdldCgpLCAiZnJhbWVzLWRyb3BwZWQiLCAmZnJhbWVzRHJvcHBlZCwgbnVsbHB0
cik7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcmFtZXNEcm9wcGVkKTsKQEAg
LTM2NDksOCArMzYxOSw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdHRl
bXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKENETUluc3RhbmNlJiBpbnN0CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2Uo
KQogewotICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudChwaXBl
bGluZSgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1f
T09CLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXR0ZW1wdC10by1kZWNyeXB0IikpKTsKLSAg
ICBHU1RfREVCVUcoImF0dGVtcHRpbmcgdG8gZGVjcnlwdCwgZXZlbnQgaGFuZGxlZCAlcyIsIGJv
b2xGb3JQcmludGluZyhldmVudEhhbmRsZWQpKTsKKyAgICBib29sIHdhc0V2ZW50SGFuZGxlZCA9
IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQocGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25ld19jdXN0b20o
R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHko
ImF0dGVtcHQtdG8tZGVjcnlwdCIpKSk7CisgICAgR1NUX0RFQlVHKCJhdHRlbXB0aW5nIHRvIGRl
Y3J5cHQsIGV2ZW50IGhhbmRsZWQgJXMiLCBib29sRm9yUHJpbnRpbmcod2FzRXZlbnRIYW5kbGVk
KSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVQcm90ZWN0
aW9uRXZlbnQoR3N0RXZlbnQqIGV2ZW50KQpAQCAtMzY2OSwxNSArMzYzOSwxNSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50
KiBldmVudCkKICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0
ZW1VVUlELCBpbml0RGF0YX0pOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0V2FpdGluZ0ZvcktleShib29sIHdhaXRpbmdGb3JLZXkpCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIGlzV2FpdGluZ0ZvcktleSkK
IHsKICAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ugb3IgaWYgd2Ug
YXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2Fp
dGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgid2FpdGluZ0ZvcktleSAlcywgbV93YWl0
aW5nRm9yS2V5ICVzIiwgYm9vbEZvclByaW50aW5nKHdhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJp
bnRpbmcobV93YWl0aW5nRm9yS2V5KSk7Ci0gICAgaWYgKHdhaXRpbmdGb3JLZXkgPT0gbV93YWl0
aW5nRm9yS2V5IHx8ICghd2FpdGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQor
ICAgIEdTVF9UUkFDRSgiaXNXYWl0aW5nRm9yS2V5ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIs
IGJvb2xGb3JQcmludGluZyhpc1dhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dh
aXRpbmdGb3JLZXkpKTsKKyAgICBpZiAoaXNXYWl0aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9y
S2V5IHx8ICghaXNXYWl0aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fd2FpdGluZ0ZvcktleSA9IHdhaXRpbmdGb3JLZXk7Ci0gICAg
R1NUX0RFQlVHKCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAlcyIsIGJvb2xGb3JQcmludGluZyht
X3dhaXRpbmdGb3JLZXkpKTsKKyAgICBtX2lzV2FpdGluZ0ZvcktleSA9IGlzV2FpdGluZ0Zvcktl
eTsKKyAgICBHU1RfREVCVUcoIndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclBy
aW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7CiAgICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlD
aGFuZ2VkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAppbmRleCAyNzkwZWMzZGI1ZGE5M2NkNjg5ZTIzYmMyOWMyZDUzZjE3YThlM2JiLi4yY2E4
NmQ0ZGZiZDMyYjM5ODZlZDMxYzQ5NGJmNGFiOWU4NDVjNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0xMjAsMTcgKzEyMCwxNCBAQCBjbGFz
cyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRl
SW50ZXJmYWNlLCBwdWJsaWMgQwogewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KCk7Ci0KICAgICBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIH5N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKTsKIAotICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlKCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhcik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZXh0ZW5kZWRT
dXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYsIE1lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUpOwogCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1faGFzVmlkZW87IH0KLSAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9oYXNBdWRpbzsgfQotCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faGFzVmlkZW87IH0KKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9oYXNBdWRpbzsgfQogICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcgJnVy
bCkgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICB2b2lkIGxvYWQoY29u
c3QgU3RyaW5nJiB1cmwsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopIG92ZXJyaWRlOwpAQCAt
MTM4LDgxICsxMzUsNTcgQEAgcHVibGljOgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
dm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSYpIG92ZXJyaWRlOwogI2VuZGlmCi0gICAgdm9p
ZCBjb21taXRMb2FkKCk7Ci0gICAgdm9pZCBjYW5jZWxMb2FkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHByZXBhcmVUb1BsYXkoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXkoKSBvdmVycmlkZTsK
KyAgICB2b2lkIGNhbmNlbExvYWQoKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb1BsYXkoKSBm
aW5hbDsKKyAgICB2b2lkIHBsYXkoKSBmaW5hbDsKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBwYXVzZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHNlZWtpbmcoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NlZWtpbmc7IH0KKyAgICBib29sIHBhdXNlZCgpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
aXNTZWVraW5nOyB9CiAgICAgdm9pZCBzZWVrKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwot
Ci0gICAgTWVkaWFUaW1lIHBsYXRmb3JtRHVyYXRpb24oKSBjb25zdDsKLQogICAgIHZvaWQgc2V0
UmF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgZG91YmxlIHJhdGUoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCkgb3ZlcnJpZGU7Ci0KKyAgICBkb3VibGUgcmF0
ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgZmluYWw7
IAorICAgIHZvaWQgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCkgZmluYWw7CiAgICAg
RmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldFZvbHVt
ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgZmxvYXQgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHNldE11dGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgbXV0ZWQoKSBjb25z
dDsKLQotICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaXplQ2hh
bmdlZCgpOwotCisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOworICAgIGZsb2F0IHZv
bHVtZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7CisgICAg
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdCBmaW5hbDsKKyAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBzZXRWaXNpYmxlKGJvb2wpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJ
bnRTaXplJikgZmluYWw7CiAgICAgLy8gUHJlZmVyIE1lZGlhVGltZSBiYXNlZCBtZXRob2RzIG92
ZXIgZmxvYXQgYmFzZWQuCi0KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGR1cmF0aW9uTWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9Ci0gICAgZG91YmxlIGR1cmF0
aW9uRG91YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50
b0RvdWJsZSgpOyB9Ci0gICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBj
dXJyZW50TWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lRG91
YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY3VycmVudE1lZGlhVGltZSgpLnRvRG91Ymxl
KCk7IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGR1cmF0aW9u
TWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9CisgICAgZG91YmxlIGR1cmF0aW9uRG91YmxlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0RvdWJsZSgpOyB9CisgICAg
TWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Q7CisgICAgZmxvYXQgY3VycmVudFRp
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9
CisgICAgZG91YmxlIGN1cnJlbnRUaW1lRG91YmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gY3Vy
cmVudE1lZGlhVGltZSgpLnRvRG91YmxlKCk7IH0KICAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlh
VGltZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVS
YW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZWVrKGZsb2F0IHRp
bWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhGbG9hdCh0aW1lKSk7IH0K
LSAgICB2b2lkIHNlZWtEb3VibGUoZG91YmxlIHRpbWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRp
bWU6OmNyZWF0ZVdpdGhEb3VibGUodGltZSkpOyB9Ci0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2Fi
bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxv
YXQoKTsgfQorICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lKSBmaW5hbCB7IHNlZWsoTWVkaWFUaW1l
OjpjcmVhdGVXaXRoRmxvYXQodGltZSkpOyB9CisgICAgdm9pZCBzZWVrRG91YmxlKGRvdWJsZSB0
aW1lKSBmaW5hbCB7IHNlZWsoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpKTsgfQor
ICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1heE1lZGlh
VGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9CiAgICAgTWVkaWFUaW1lIG1heE1lZGlhVGltZVNl
ZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgZG91YmxlIG1pblRpbWVTZWVrYWJsZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1pbk1lZGlhVGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9
Ci0gICAgTWVkaWFUaW1lIG1pbk1lZGlhVGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0KLSAgICBib29sIGRpZExvYWRpbmdQcm9n
cmVzcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVz
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8Ym9vbD4gd291bGRUYWludE9yaWdpbihjb25z
dCBTZWN1cml0eU9yaWdpbiYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaW11bGF0ZUF1
ZGlvSW50ZXJydXB0aW9uKCkgb3ZlcnJpZGU7Ci0KKyAgICBkb3VibGUgbWluVGltZVNlZWthYmxl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbWluTWVkaWFUaW1lU2Vla2FibGUoKS50b0Zsb2F0KCk7
IH0KKyAgICBNZWRpYVRpbWUgbWluTWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVz
cygpIGNvbnN0IGZpbmFsOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzKCkgY29u
c3QgZmluYWw7CisgICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IGZpbmFs
OworICAgIE9wdGlvbmFsPGJvb2w+IHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmln
aW4mKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKSBm
aW5hbDsKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1
ZGlvU291cmNlUHJvdmlkZXIoKSBvdmVycmlkZTsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBh
dWRpb1NvdXJjZVByb3ZpZGVyKCkgZmluYWw7CiAjZW5kaWYKKyAgICB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QgZmluYWw7CisgICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUg
bW92aWVMb2FkVHlwZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBkZWNvZGVk
RnJhbWVDb3VudCgpIGNvbnN0IGZpbmFsOworICAgIHVuc2lnbmVkIGRyb3BwZWRGcmFtZUNvdW50
KCkgY29uc3QgZmluYWw7CisgICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29u
c3QgZmluYWw7CisgICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QgZmlu
YWw7CiAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9w
bGF5ZXI7IH0KLQotICAgIHVuc2lnbmVkIGRlY29kZWRGcmFtZUNvdW50KCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdW5zaWduZWQgZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB1bnNpZ25lZCBhdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB1
bnNpZ25lZCB2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZv
aWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgZmluYWw7CiAKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlOwpAQCAtMjI1LDI5ICsxOTgsMjMgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIHZvaWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1J
bnN0YW5jZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0
YW5jZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgaGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgp
OworICAgIHZvaWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYpIGZpbmFsOworICAg
IHZvaWQgY2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYpIGZpbmFsOwogICAgIHZvaWQg
YXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOwotICAgIHZv
aWQgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7Ci0gICAgdm9pZCBz
ZXRXYWl0aW5nRm9yS2V5KGJvb2wpOwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSgpIGNvbnN0IG92
ZXJyaWRlOwotI2VuZGlmCisgICAgYm9vbCB3YWl0aW5nRm9yS2V5KCkgY29uc3QgZmluYWw7CiAK
LSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFy
YW1ldGVycyYsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUpOworICAgIHZvaWQgaGFuZGxlUHJv
dGVjdGlvbkV2ZW50KEdzdEV2ZW50Kik7CisjZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wp
CiAgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdD
M0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2
b2lkIHNldFZpZGVvU291cmNlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbik7Ci0gICAgR3N0
RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CiAg
ICAgdm9pZCBlbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUs
IHVuc2lnbmVkIGluZGV4KTsKIAogICAgIC8vIEFwcGVuZCBwaXBlbGluZSBpbnRlcmZhY2UKKyAg
ICAvLyBGSVhNRTogVXNlIHRoZSBjbGllbnQgaW50ZXJmYWNlIHBhdHRlcm4sIEFwcGVuZFBpcGVs
aW5lIGRvZXMgbm90IG5lZWQgdGhlIGZ1bGwgaW50ZXJmYWNlIHRvIHRoaXMgY2xhc3MganVzdCBm
b3IgdGhlc2UgdHdvIGZ1bmN0aW9ucy4KICAgICBib29sIGhhbmRsZVN5bmNNZXNzYWdlKEdzdE1l
c3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwogCkBAIC0yNzAs
MTUgKzIzNywxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmVhbUNvbGxlY3Rpb25DaGFuZ2Vk
ID0gMSA8PCA3CiAgICAgfTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25z
dCB7IHJldHVybiBtX2lzU3RyZWFtaW5nOyB9Ci0gICAgTWVkaWFUaW1lIG1heFRpbWVMb2FkZWQo
KSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3Ry
aW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworI2VuZGlmCiAKICAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVNl
dHVwKEdzdEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgY29uZmlndXJlUGxheVNpbmsoKSB7
IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSk7CiAKLQog
I2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQogICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUhvbGVQ
dW5jaFZpZGVvU2luaygpOwogICAgIHZvaWQgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKQEAg
LTI5MiwxMCArMjYwLDEwIEBAIHByb3RlY3RlZDoKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
CiAgICAgdm9pZCBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOwogI2lmIFVTRShOSUNPU0lBKQot
ICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpIGZpbmFsOwogI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHN3YXBCdWZmZXJz
SWZOZWVkZWQoKSBmaW5hbDsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTMxNyw5ICsyODUsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdm9sdW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciopOwogICAgIHN0YXRpYyB2b2lkIG11dGVDaGFuZ2VkQ2FsbGJh
Y2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CiAKLSAgICAvLyBGSVhNRTogV2hlcmUg
aXMgdGhpcyB1c2VkPwotICAgIHZvaWQgaGFuZGxlUGx1Z2luSW5zdGFsbGVyUmVzdWx0KEdzdElu
c3RhbGxQbHVnaW5zUmV0dXJuKTsKLQogICAgIHZvaWQgcmVhZHlUaW1lckZpcmVkKCk7CiAKICAg
ICB2b2lkIG5vdGlmeVBsYXllck9mVmlkZW8oKTsKQEAgLTM1OCwyMiArMzIzLDIyIEBAIHByb3Rl
Y3RlZDoKICAgICBtdXRhYmxlIE1lZGlhVGltZSBtX2NhY2hlZFBvc2l0aW9uOwogICAgIG11dGFi
bGUgTWVkaWFUaW1lIG1fY2FjaGVkRHVyYXRpb247CiAgICAgYm9vbCBtX2NhbkZhbGxCYWNrVG9M
YXN0RmluaXNoZWRTZWVrUG9zaXRpb24geyBmYWxzZSB9OwotICAgIGJvb2wgbV9jaGFuZ2luZ1Jh
dGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9kb3dubG9hZEZpbmlzaGVkIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fZXJyb3JPY2N1cmVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNDaGFuZ2luZ1Jh
dGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWREb3dubG9hZEZpbmlzaCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2RpZEVycm9yT2NjdXIgeyBmYWxzZSB9OwogICAgIG11dGFibGUgYm9vbCBtX2lz
RW5kUmVhY2hlZCB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBib29sIG1faXNTdHJlYW1pbmcgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9wYXVzZWQgeyB0cnVlIH07CisgICAgbXV0YWJsZSBib29sIG1f
aXNMaXZlU3RyZWFtIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQYXVzZWQgeyB0cnVlIH07CiAg
ICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAxIH07CiAgICAgR3N0U3RhdGUgbV9jdXJyZW50U3Rh
dGU7CiAgICAgR3N0U3RhdGUgbV9vbGRTdGF0ZTsKICAgICBHc3RTdGF0ZSBtX3JlcXVlc3RlZFN0
YXRlIHsgR1NUX1NUQVRFX1ZPSURfUEVORElORyB9OwotICAgIGJvb2wgbV9yZXNldFBpcGVsaW5l
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2Vla2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nl
ZWtJc1BlbmRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRSZXNldFBpcGVsaW5lIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNTZWVraW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNT
ZWVrUGVuZGluZyB7IGZhbHNlIH07CiAgICAgTWVkaWFUaW1lIG1fc2Vla1RpbWU7CiAgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJjZSB7IG51bGxwdHIgfTsKLSAgICBib29sIG1fdm9sdW1l
QW5kTXV0ZUluaXRpYWxpemVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYXJlVm9sdW1lQW5kTXV0
ZUluaXRpYWxpemVkIHsgZmFsc2UgfTsKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAg
ICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fdGV4dHVyZU1hcHBlckZsYWdzOwpAQCAtMzkxLDEw
ICszNTYsMTAgQEAgcHJvdGVjdGVkOgogICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsK
IAogICAgIG11dGFibGUgRmxvYXRTaXplIG1fdmlkZW9TaXplOwotICAgIGJvb2wgbV91c2luZ0Zh
bGxiYWNrVmlkZW9TaW5rIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVuZGVyaW5nQ2FuQmVBY2Nl
bGVyYXRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luayB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQgeyBmYWxzZSB9
OwogCi0gICAgYm9vbCBtX2Rlc3Ryb3lpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0JlaW5n
RGVzdHJveWVkIHsgZmFsc2UgfTsKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4gbV92aWRlb1RleHR1cmVDb3Bp
ZXI7CkBAIC00MTIsMTcgKzM3NywyMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTG9jayBtX3Byb3RlY3Rp
b25NdXRleDsgLy8gR3VhcmRzIGFjY2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgog
ICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CiAKLSAgICBi
b29sIG1fd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2FpdGluZ0Zvcktl
eSB7IGZhbHNlIH07CiAjZW5kaWYKIAogICAgIE9wdGlvbmFsPEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtPiBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtOwogCiBwcml2YXRlOgorICAgIE1lZGlhVGltZSBt
YXhUaW1lTG9hZGVkKCkgY29uc3Q7CisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7
IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CisgICAgdm9pZCBzZXRWaWRlb1NvdXJjZU9yaWVu
dGF0aW9uKEltYWdlT3JpZW50YXRpb24pOworICAgIE1lZGlhVGltZSBwbGF0Zm9ybUR1cmF0aW9u
KCkgY29uc3Q7CisgICAgYm9vbCBpc011dGVkKCkgY29uc3Q7CisgICAgdm9pZCBjb21taXRMb2Fk
KCk7CiAgICAgdm9pZCBmaWxsVGltZXJGaXJlZCgpOwotCiAgICAgdm9pZCBkaWRFbmQoKTsKIAot
CiAgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCk7CiAgICAgR3N0RWxlbWVudCogY3Jl
YXRlQXVkaW9TaW5rKCk7CiAgICAgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3Q7CkBAIC00
NzUsMjAgKzQ0NCwyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVHJhY2tzKCk7CiAgICAg
dm9pZCBjbGVhclRyYWNrcygpOwogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICB2
b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOworICAgIHZvaWQgaW5pdGlh
bGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7CisgICAgdm9pZCBzZXRXYWl0aW5n
Rm9yS2V5KGJvb2wpOworI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBtX3RleHRBcHBTaW5rOwogICAgIEdSZWZQdHI8R3N0UGFkPiBtX3Rl
eHRBcHBTaW5rUGFkOwogI2VuZGlmCiAgICAgR3N0U3RydWN0dXJlKiBtX21lZGlhTG9jYXRpb25z
IHsgbnVsbHB0ciB9OwogICAgIGludCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXggeyAwIH07
Ci0gICAgYm9vbCBtX3BsYXliYWNrUmF0ZVBhdXNlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQ
bGF5YmFja1JhdGVQYXVzZWQgeyBmYWxzZSB9OwogICAgIE1lZGlhVGltZSBtX3RpbWVPZk92ZXJs
YXBwaW5nU2VlazsKICAgICBmbG9hdCBtX2xhc3RQbGF5YmFja1JhdGUgeyAxIH07CiAgICAgVGlt
ZXIgbV9maWxsVGltZXI7CiAgICAgTWVkaWFUaW1lIG1fbWF4VGltZUxvYWRlZDsKICAgICBib29s
IG1fbG9hZGluZ1N0YWxsZWQgeyBmYWxzZSB9OwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1f
cHJlbG9hZDsKLSAgICBib29sIG1fZGVsYXlpbmdMb2FkIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aXNEZWxheWluZ0xvYWQgeyBmYWxzZSB9OwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fbWF4VGlt
ZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKICAgICBib29sIG1faGFzVmlkZW8geyBm
YWxzZSB9OwogICAgIGJvb2wgbV9oYXNBdWRpbyB7IGZhbHNlIH07CkBAIC01MDMsMTEgKzQ3OCwx
MSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKICNlbmRpZgogI2VuZGlmCi0gICAgYm9vbCBtX2J1ZmZl
cmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQnVmZmVyaW5nIHsgZmFsc2UgfTsKICAgICBp
bnQgbV9idWZmZXJpbmdQZXJjZW50YWdlIHsgMCB9OwogICAgIG11dGFibGUgdW5zaWduZWQgbG9u
ZyBsb25nIG1fdG90YWxCeXRlcyB7IDAgfTsKICAgICBVUkwgbV91cmw7Ci0gICAgYm9vbCBtX3By
ZXNlcnZlc1BpdGNoIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hvdWxkUHJlc2VydmVQaXRjaCB7
IGZhbHNlIH07CiAgICAgbXV0YWJsZSBPcHRpb25hbDxTZWNvbmRzPiBtX2xhc3RRdWVyeVRpbWU7
CiAgICAgYm9vbCBtX2lzTGVnYWN5UGxheWJpbjsKICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxl
Y3Rpb24+IG1fc3RyZWFtQ29sbGVjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCBlNjg4MGQ5OGU3ZmNhZDFk
MDUzZjg0ZWQzOGE2ZmQ4MTk4ZGU3Yjg2Li5kYzI0NWI0N2RlM2RlNzJmYWMyMzY3MmU1ZjZlZmQ0
YjM3NjI5YjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UuY3BwCkBAIC0xMzIsMTMgKzEzMiwxNCBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgTWVkaWFTb3Vy
Y2VQcml2YXRlQwogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cGF1c2Uo
KQogewotICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBuZWVk
IGRpcmVjdCBhY2Nlc3MgdG8gdGhpcyBtZW1iZXIuIFRoaXMgb3ZlcnJpZGUgaXMgcHJvYmFibHkg
bm90IG5lZWRlZC4KKyAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnBhdXNlKCk7CiB9CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKIHsKLSAgICBpZiAoVU5MSUtF
TFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQorICAgIGlmIChVTkxJS0VMWSghbV9w
aXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lKCk7
CiAKICAgICByZXR1cm4gbV9tZWRpYVRpbWVEdXJhdGlvbjsKQEAgLTE0Niw3ICsxNDcsNyBAQCBN
ZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlhVGlt
ZSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNv
bnN0IE1lZGlhVGltZSYgdGltZSkKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwg
bV9lcnJvck9jY3VyZWQpKQorICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2RpZEVy
cm9yT2NjdXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBHU1RfSU5GTygiW1NlZWtdIHNlZWsg
YXR0ZW1wdCB0byAlcyBzZWNzIiwgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7CkBAIC0x
NTQsMTUgKzE1NSwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vl
ayhjb25zdCBNZWRpYVRpbWUmIHRpbWUpCiAgICAgLy8gQXZvaWQgdXNlbGVzcyBzZWVraW5nLgog
ICAgIE1lZGlhVGltZSBjdXJyZW50ID0gY3VycmVudE1lZGlhVGltZSgpOwogICAgIGlmICh0aW1l
ID09IGN1cnJlbnQpIHsKLSAgICAgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIGlmICghbV9p
c1NlZWtpbmcpCiAgICAgICAgICAgICB0aW1lQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Vla2luZyAmJiBtX3NlZWtJc1BlbmRpbmcp
IHsKKyAgICBpZiAobV9pc1NlZWtpbmcgJiYgbV9pc1NlZWtQZW5kaW5nKSB7CiAgICAgICAgIG1f
c2Vla1RpbWUgPSB0aW1lOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTc5LDcgKzE4MCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNvbnN0IE1lZGlh
VGltZSYgdGltZSkKICAgICB9CiAKICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwotICAgIEdT
VF9ERUJVRygibV9zZWVraW5nPSVzLCBtX3NlZWtUaW1lPSVzIiwgYm9vbEZvclByaW50aW5nKG1f
c2Vla2luZyksIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9E
RUJVRygibV9pc1NlZWtpbmc9JXMsIG1fc2Vla1RpbWU9JXMiLCBib29sRm9yUHJpbnRpbmcobV9p
c1NlZWtpbmcpLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNvbmZpZ3VyZVBsYXlTaW5rKCkKQEAg
LTIzMiw3ICsyMzMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9T
ZWVrKCkKICAgICBHc3RTZWVrRmxhZ3Mgc2Vla1R5cGUgPSBzdGF0aWNfY2FzdDxHc3RTZWVrRmxh
Z3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKTsKIAogICAg
IC8vIEFsd2F5cyBtb3ZlIHRvIHNlZWtpbmcgc3RhdGUgdG8gcmVwb3J0IGNvcnJlY3QgJ2N1cnJl
bnRUaW1lJyB3aGlsZSBwZW5kaW5nIGZvciBhY3R1YWwgc2VlayB0byBjb21wbGV0ZS4KLSAgICBt
X3NlZWtpbmcgPSB0cnVlOworICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKIAogICAgIC8vIENoZWNr
IGlmIHBsYXliYWNrIHBpcGVsaW5lIGlzIHJlYWR5IGZvciBzZWVrLgogICAgIEdzdFN0YXRlIHN0
YXRlLCBuZXdTdGF0ZTsKQEAgLTI0MCw3ICsyNDEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkKICAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NU
QVRFX0NIQU5HRV9GQUlMVVJFIHx8IGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
Tk9fUFJFUk9MTCkgewogICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBjYW5ub3Qgc2VlaywgY3Vy
cmVudCBzdGF0ZSBjaGFuZ2UgaXMgJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJu
X2dldF9uYW1lKGdldFN0YXRlUmVzdWx0KSk7CiAgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVh
ZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKLSAg
ICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKChnZXRTdGF0ZVJlc3VsdCA9PSBH
U1RfU1RBVEVfQ0hBTkdFX0FTWU5DCkBAIC0yNjIsMTkgKzI2MywxOSBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkKIAogICAgICAgICBHU1RfREVCVUcoIltT
ZWVrXSBEZWxheWluZyB0aGUgc2VlazogJXMiLCByZWFzb24uZGF0YSgpKTsKIAotICAgICAgICBt
X3NlZWtJc1BlbmRpbmcgPSB0cnVlOworICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSB0cnVlOwog
CiAgICAgICAgIGlmIChtX2lzRW5kUmVhY2hlZCkgewogICAgICAgICAgICAgR1NUX0RFQlVHKCJb
U2Vla10gcmVzZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IHRy
dWU7Ci0gICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fc2hvdWxk
UmVzZXRQaXBlbGluZSA9IHRydWU7CisgICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwog
ICAgICAgICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQog
ICAgICAgICAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgICAgICAg
ICAgICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBt
X3NlZWtpbmc7CisgICAgICAgIHJldHVybiBtX2lzU2Vla2luZzsKICAgICB9CiAKICAgICAvLyBT
dG9wIGFjY2VwdGluZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwgc2VlayBpcyBmaW5pc2hlZC4K
QEAgLTMwMCw3ICszMDEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
ZG9TZWVrKCkKICAgICAgICAgaWYgKHNldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
RkFJTFVSRSkgewogICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gQ2Fubm90IHNlZWssIGZh
aWxlZCB0byBwYXVzZSBwbGF5YmFjayBwaXBlbGluZS4iKTsKICAgICAgICAgICAgIHdlYktpdE1l
ZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkp
LCB0cnVlKTsKLSAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgbV9p
c1NlZWtpbmcgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOwpAQCAtMzE0
LDcgKzMxNSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWso
KQogICAgICAgICBtX21lZGlhU291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOwogICAgICAg
ICBBU1NFUlQobV9tc2VTZWVrQ29tcGxldGVkKTsKICAgICAgICAgLy8gTm90ZTogc2Vla0NvbXBs
ZXRlZCB3aWxsIHJlY3Vyc2l2ZWx5IGNhbGwgdXMuCi0gICAgICAgIHJldHVybiBtX3NlZWtpbmc7
CisgICAgICAgIHJldHVybiBtX2lzU2Vla2luZzsKICAgICB9CiAKICAgICBHU1RfREVCVUcoIldl
IGNhbiBzZWVrIG5vdyIpOwpAQCAtMzM3LDcgKzMzOCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWsoKQogICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IGZhbHNl
OwogICAgIGlmICghZ3N0X2VsZW1lbnRfc2VlayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1Rf
Rk9STUFUX1RJTUUsIHNlZWtUeXBlLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUo
c3RhcnRUaW1lKSwgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKSkg
ewogICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFf
U1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwor
ICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwogICAgICAgICBtX2dzdFNlZWtDb21wbGV0ZWQg
PSB0cnVlOwogICAgICAgICBHU1RfREVCVUcoImRvU2VlaygpOiBnc3RfZWxlbWVudF9zZWVrKCkg
ZmFpbGVkLCByZXR1cm5pbmcgZmFsc2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzUw
LDcgKzM1MSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWso
KQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVr
KCkKIHsKLSAgICBpZiAoIW1fc2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxldGVkIHx8ICFtX2dz
dFNlZWtDb21wbGV0ZWQpCisgICAgaWYgKCFtX2lzU2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxl
dGVkIHx8ICFtX2dzdFNlZWtDb21wbGV0ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdzdFN0
YXRlIHN0YXRlLCBuZXdTdGF0ZTsKQEAgLTM2Miw5ICszNjMsOSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICBpZiAobV9pc1NlZWtQZW5k
aW5nKSB7CiAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIENvbW1pdHRpbmcgcGVuZGluZyBzZWVr
IHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1f
c2Vla0lzUGVuZGluZyA9IGZhbHNlOworICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSBmYWxzZTsK
ICAgICAgICAgaWYgKCFkb1NlZWsoKSkgewogICAgICAgICAgICAgR1NUX1dBUk5JTkcoIltTZWVr
XSBTZWVraW5nIHRvICVzIGZhaWxlZCIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRp
bWUoKTsKQEAgLTM3NSw3ICszNzYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6bWF5YmVGaW5pc2hTZWVrKCkKICAgICBHU1RfREVCVUcoIltTZWVrXSBTZWVrZWQgdG8g
JXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHdlYktpdE1l
ZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkp
LCB0cnVlKTsKLSAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICBtX2lzU2Vla2luZyA9IGZhbHNl
OwogICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAgICAg
Ly8gVGhlIHBpcGVsaW5lIGNhbiBzdGlsbCBoYXZlIGEgcGVuZGluZyBzdGF0ZS4gSW4gdGhpcyBj
YXNlIGEgcG9zaXRpb24gcXVlcnkgd2lsbCBmYWlsLgogICAgIC8vIFJpZ2h0IG5vdyB3ZSBjYW4g
dXNlIG1fc2Vla1RpbWUgYXMgYSBmYWxsYmFjay4KQEAgLTM5MCw3ICszOTEsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlUGxheWJhY2tSYXRlKCkKIAogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtpbmcoKSBjb25zdAogewotICAg
IHJldHVybiBtX3NlZWtpbmc7CisgICAgcmV0dXJuIG1faXNTZWVraW5nOwogfQogCiAvLyBGSVhN
RTogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIG1hbmFnZXMgdGhlIFJlYWR5U3RhdGUgb24g
aXRzIG93bi4gV2Ugc2hvdWxkbid0IGNoYW5nZSBpdCBtYW51YWxseS4KQEAgLTQyOCw3ICs0Mjks
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQogewotICAgIGlmICghbV9zZWVraW5n
KQorICAgIGlmICghbV9pc1NlZWtpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdTVF9ERUJV
RygiV2FpdGluZyBmb3IgTVNFIHNlZWsgY29tcGxldGVkIik7CkBAIC00NzksNyArNDgwLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZVNldHVwKEdzdEVsZW1l
bnQqIHNvdXJjZUVsZW1lbnQpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojp1cGRhdGVTdGF0ZXMoKQogewotICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2Vy
cm9yT2NjdXJlZCkpCisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZGlkRXJyb3JP
Y2N1cikpCiAgICAgICAgIHJldHVybjsKIAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
b2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CkBAIC00OTgsOCArNDk5LDggQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAg
IGlmIChtX2lzRW5kUmVhY2hlZCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSAoc3RhdGUgPD0gR1NUX1NU
QVRFX1JFQURZKTsKLSAgICAgICAgaWYgKG1fcmVzZXRQaXBlbGluZSkKKyAgICAgICAgbV9zaG91
bGRSZXNldFBpcGVsaW5lID0gKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSk7CisgICAgICAgIGlm
IChtX3Nob3VsZFJlc2V0UGlwZWxpbmUpCiAgICAgICAgICAgICBtX21lZGlhVGltZUR1cmF0aW9u
ID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCiAgICAgICAgIC8vIFVwZGF0ZSByZWFkeSBhbmQg
bmV0d29yayBzdGF0ZXMuCkBAIC01MzgsMjUgKzUzOSwyNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKIAogICAgICAgICAvLyBTeW5jIHN0YXRl
cyB3aGVyZSBuZWVkZWQuCiAgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CisgICAgICAg
ICAgICBpZiAoIW1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CiAgICAgICAgICAgICAg
ICAgbm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICBub3RpZnlQ
bGF5ZXJPZk11dGUoKTsKLSAgICAgICAgICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9hcmVWb2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQg
PSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXNlZWtpbmcoKSAmJiAh
bV9wYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpIHsKKyAgICAgICAgICAgIGlmICghc2Vla2luZygp
ICYmICFtX2lzUGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAgR1NU
X0RFQlVHKCJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOwogICAgICAgICAgICAg
ICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0gICAg
ICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNl
OwogCiAgICAgICAgICAgICBpZiAoIW1fcGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAg
R1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOwog
ICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVl
OworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fcmVxdWVz
dGVkU3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VE
KSB7CiAgICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKQEAgLTU3
Nyw3ICs1NzgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRl
U3RhdGVzKCkKICAgICAgICAgR1NUX0RFQlVHKCJObyBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CiAKICAgICAgICAgLy8gTGl2ZSBwaXBlbGluZXMgZ28g
aW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KLSAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRy
dWU7CisgICAgICAgIG1faXNMaXZlU3RyZWFtID0gdHJ1ZTsKIAogICAgICAgICBpZiAoc3RhdGUg
PT0gR1NUX1NUQVRFX1JFQURZKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZU5vdGhpbmc7CkBAIC01ODUsMTEgKzU4NiwxMSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgfSBlbHNlIGlmIChz
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVh
ZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAg
bV9wYXVzZWQgPSB0cnVlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAgICAgICBtX3Bh
dXNlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwogCi0gICAgICAg
IGlmICghbV9wYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCisgICAgICAgIGlmICghbV9pc1BhdXNl
ZCAmJiBtX3BsYXliYWNrUmF0ZSkKICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NU
X1NUQVRFX1BMQVlJTkcpOwogCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6
OkxvYWRpbmc7CkBAIC02MjAsMTAgKzYyMSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKIH0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjphc3luY1N0YXRlQ2hhbmdlRG9uZSgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFt
X3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxp
bmUgfHwgbV9kaWRFcnJvck9jY3VyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Vl
a2luZykKKyAgICBpZiAobV9pc1NlZWtpbmcpCiAgICAgICAgIG1heWJlRmluaXNoU2VlaygpOwog
ICAgIGVsc2UKICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CkBAIC03NzQsNyArNzc1LDcgQEAgTWVk
aWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVudE1lZGlhVGltZSgp
IGNvbnN0CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heE1l
ZGlhVGltZVNlZWthYmxlKCkgY29uc3QKIHsKLSAgICBpZiAoVU5MSUtFTFkobV9lcnJvck9jY3Vy
ZWQpKQorICAgIGlmIChVTkxJS0VMWShtX2RpZEVycm9yT2NjdXIpKQogICAgICAgICByZXR1cm4g
TWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCiAgICAgR1NUX0RFQlVHKCJtYXhNZWRpYVRpbWVTZWVr
YWJsZSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmgKaW5kZXggM2JjYzBmZGJhMzg4M2FlZWM2ZTJlMjY1ODVlYWM4Y2JiZTBkNGVh
ZS4uOWIzMzMwNWY3ZjExNmRhYzkxYzY0MWM0ODQ1OTNiZTdhODMwNzM1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCkBAIC01
NCw3ICs1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdG
bGFnKCkgb3ZlcnJpZGUgeyB9OwogCi0gICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291
cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuY3BwCmluZGV4
IGZhZTc0ZjRiYTRjMTc5MWRjNjVlNTM1ZmVmZjMzM2Y0MmYwNmMzMzQuLmMwOTdjYTNlMTY3MTdk
ODhiN2I0ODZhMjJlY2JhNDVkMDhlYzNkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJN
U0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuY3BwCkBAIC0xNjMsNyArMTYzLDggQEAg
dm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6Zmx1c2goQXRvbVN0cmluZyB0cmFj
a0lkKQogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKIAogICAgIC8vIFRoaXMgaXMg
b25seSBmb3Igb24tdGhlLWZseSByZWVucXVldWVzIGFmdGVyIGFwcGVuZHMuIFdoZW4gc2Vla2lu
ZywgdGhlIHNlZWsgd2lsbCBkbyBpdHMgb3duIGZsdXNoLgotICAgIGlmICghbV9wbGF5ZXJQcml2
YXRlLm1fc2Vla2luZykKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBiZSB0b3VjaGluZyBwcml2
YXRlIHBhcnRzLgorICAgIGlmICghbV9wbGF5ZXJQcml2YXRlLm1faXNTZWVraW5nKQogICAgICAg
ICBtX3BsYXllclByaXZhdGUubV9wbGF5YmFja1BpcGVsaW5lLT5mbHVzaCh0cmFja0lkKTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384521</attachid>
            <date>2019-11-29 11:44:46 -0800</date>
            <delta_ts>2019-11-29 12:27:16 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204617-20191129194445.patch</filename>
            <type>text/plain</type>
            <size>89663</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyOTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDI2NjdiNjE0N2VmZGM2
MjFlZmRhYjlkMWNmM2RiNjRkMGRmZDM2Ni4uZDdiZDc2MjU3MjRmYTg2ZGE0MWZiYWFlMWNkNTQ5
ODQzYWFhN2U4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDE5LTExLTI4ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgc3R5bGUgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDYxNworCisgICAgICAgIFJldmll
d2VkIGJ5IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgIEZvbGxvdy11cCBjb21t
aXQgdG8gYnVnIDIwNDM1MiBhZGRyZXNzaW5nIHN0eWxlIGlzc3VlcyBpbiB0aGUKKyAgICAgICAg
ZXhpc3RpbmcgcGxheWVyIGNvZGUuIFRoZSBtYWluIGlzc3VlcyBhZGRyZXNzZWQgYXJlIG5hbWlu
ZworICAgICAgICB2aW9sYXRpb25zLCBhZGRpbmcgZmluYWwgdG8gdHlwZXMgbm90IG92ZXJyaWRk
ZW4gYW5kIG9yZ2FuaXppbmcKKyAgICAgICAgYmV0dGVyIHRoZSBzY29wZSBvZiBuYW1lcyBpbiB0
aGUgY2xhc3Nlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRGdWxsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJlcGFyZVRv
UGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1
cGRhdGVQbGF5YmFja1JhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVk
aWFUaW1lU2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNo
YW5nZVBpcGVsaW5lU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3Jt
RHVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjppc011dGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVw
ZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZVN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNz
TXBlZ1RzU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmRpZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5TYXZlTWVkaWFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YWNjZWxlcmF0
ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsUmVwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1vdmllTG9hZFR5cGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVW
aWRlb1NpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpkZWNvZGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRyb3BwZWRGcmFtZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhM
b2NhbEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpt
dXRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwaXBlbGluZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhUGxheWVyIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNM
aXZlU3RyZWFtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25NZWRp
YVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpzZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6ZG9TZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndhaXRGb3JTZWVrQ29tcGxldGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRl
U3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjptYXhNZWRpYVRpbWVTZWVrYWJsZSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01l
ZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjpmbHVzaCk6CisKIDIwMTktMTEtMjggIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFkanVzdCB0aGUg
bGluZSdzIGlzLXZpc3VhbGx5LWVtcHR5IHN0YXR1cyBhZnRlciB0cmltbWluZyB0aGUgdHJhaWxp
bmcgd2hpdGVzcGFjZSBjb250ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IDU3OWVkOTlmMTczM2QyZDgxZDcwMzdjMzA5NTA1YWRlMWZk
NTcyMjIuLjNlNzBhMzZkNmQ1MDNmMTc2NDM3OWJlMjYxZjA5NjdiOWI5ZGI5MjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zMzYsOSAr
MzM2LDEyIEBAIHByaXZhdGU6CiB9OwogI2VuZGlmCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCitzdGF0aWMgdm9pZCBpbml0aWFs
aXplRGVidWdDYXRlZ29yeSgpCiB7Ci0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0
X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwgIldlYktpdCBtZWRp
YSBwbGF5ZXIiKTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lO
SVQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVyIiwgMCwgIldl
YktpdCBtZWRpYSBwbGF5ZXIiKTsKKyAgICB9KTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikK
QEAgLTQ5Nyw3ICs1MDAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9h
ZEZ1bGwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgInByZWxvYWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9T
dHJpbmcobV9wcmVsb2FkKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9wcmVsb2FkID09IE1l
ZGlhUGxheWVyOjpOb25lKSB7CiAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAi
RGVsYXlpbmcgbG9hZC4iKTsKLSAgICAgICAgbV9kZWxheWluZ0xvYWQgPSB0cnVlOworICAgICAg
ICBtX2lzRGVsYXlpbmdMb2FkID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBSZXNldCBuZXR3b3Jr
IGFuZCByZWFkeSBzdGF0ZXMuIFRob3NlIHdpbGwgYmUgc2V0IHByb3Blcmx5IG9uY2UKQEAgLTUw
NiwxMCArNTA5LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVs
bChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmc7CiAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Ci0gICAgbV92b2x1
bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtX2FyZVZvbHVtZUFuZE11dGVJbml0
aWFsaXplZCA9IGZhbHNlOwogICAgIG1faGFzVGFpbnRlZE9yaWdpbiA9IFdURjo6bnVsbG9wdDsK
IAotICAgIGlmICghbV9kZWxheWluZ0xvYWQpCisgICAgaWYgKCFtX2lzRGVsYXlpbmdMb2FkKQog
ICAgICAgICBjb21taXRMb2FkKCk7CiB9CiAKQEAgLTU0MSwxOSArNTQ0LDYgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlJiBzdHJlYW0p
CiB9CiAjZW5kaWYKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExv
YWQoKQotewotICAgIEFTU0VSVCghbV9kZWxheWluZ0xvYWQpOwotICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkNvbW1pdHRpbmcgbG9hZC4iKTsKLQotICAgIC8vIEdTdHJlYW1lciBu
ZWVkcyB0byBoYXZlIHRoZSBwaXBlbGluZSBzZXQgdG8gYSBwYXVzZWQgc3RhdGUgdG8KLSAgICAv
LyBzdGFydCBwcm92aWRpbmcgYW55dGhpbmcgdXNlZnVsLgotICAgIGNoYW5nZVBpcGVsaW5lU3Rh
dGUoR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWco
KTsKLSAgICB1cGRhdGVTdGF0ZXMoKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNhbmNlbExvYWQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxh
eWVyOjpMb2FkaW5nIHx8IG1fbmV0d29ya1N0YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpCkBA
IC01NjcsOCArNTU3LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByZXBh
cmVUb1BsYXkoKQogewogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlByZXBhcmUg
dG8gcGxheSIpOwogICAgIG1fcHJlbG9hZCA9IE1lZGlhUGxheWVyOjpBdXRvOwotICAgIGlmICht
X2RlbGF5aW5nTG9hZCkgewotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOworICAgIGlm
IChtX2lzRGVsYXlpbmdMb2FkKSB7CisgICAgICAgIG1faXNEZWxheWluZ0xvYWQgPSBmYWxzZTsK
ICAgICAgICAgY29tbWl0TG9hZCgpOwogICAgIH0KIH0KQEAgLTU3NiwxMyArNTY2LDEzIEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KCkKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5KCkKIHsKICAgICBpZiAoIW1fcGxheWJhY2tS
YXRlKSB7Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSB0cnVlOworICAgICAgICBtX2lz
UGxheWJhY2tSYXRlUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKSkgewogICAgICAgICBt
X2lzRW5kUmVhY2hlZCA9IGZhbHNlOwotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOwor
ICAgICAgICBtX2lzRGVsYXlpbmdMb2FkID0gZmFsc2U7CiAgICAgICAgIG1fcHJlbG9hZCA9IE1l
ZGlhUGxheWVyOjpBdXRvOwogICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsK
ICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5Iik7CkBAIC01OTIsNyAr
NTgyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXkoKQogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKQogewotICAgIG1fcGxheWJhY2tS
YXRlUGF1c2UgPSBmYWxzZTsKKyAgICBtX2lzUGxheWJhY2tSYXRlUGF1c2VkID0gZmFsc2U7CiAg
ICAgR3N0U3RhdGUgY3VycmVudFN0YXRlLCBwZW5kaW5nU3RhdGU7CiAgICAgZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nU3RhdGUs
IDApOwogICAgIGlmIChjdXJyZW50U3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmdT
dGF0ZSA8PSBHU1RfU1RBVEVfUEFVU0VEKQpAQCAtNjE0LDcgKzYwNCw3IEBAIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgeworICAgIGlmIChtX2lz
UGxheWJhY2tSYXRlUGF1c2VkKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIlBsYXliYWNrIHJhdGUgaXMgMCwgc2ltdWxhdGluZyBQQVVTRUQgc3RhdGUiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTYzMywxMiArNjIzLDggQEAgYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBm
bG9hdCByYXRlLAogCiAgICAgaWYgKHJhdGUgPCAwKSB7CiAgICAgICAgIHN0YXJ0VGltZSA9IE1l
ZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGF0IGJlZ2lubmluZyBv
ZiBtZWRpYSwgc3RhcnQgZnJvbSB0aGUgZW5kIHRvCi0gICAgICAgIC8vIGF2b2lkIGltbWVkaWF0
ZSBFT1MuCi0gICAgICAgIGlmIChwb3NpdGlvbiA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAg
ICAgICAgICAgIGVuZFRpbWUgPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlbmRUaW1lID0gcG9zaXRpb247CisgICAgICAgIC8vIElmIHdlIGFyZSBhdCBi
ZWdpbm5pbmcgb2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0byBhdm9pZCBpbW1lZGlhdGUg
RU9TLgorICAgICAgICBlbmRUaW1lID0gcG9zaXRpb24gPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkg
PyBkdXJhdGlvbk1lZGlhVGltZSgpIDogcG9zaXRpb247CiAgICAgfQogCiAgICAgaWYgKCFyYXRl
KQpAQCAtNjUwLDEwICs2MzYsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1l
KQogewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
ZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtd
IHNlZWsgYXR0ZW1wdCB0byAlcyIsIHRvU3RyaW5nKG1lZGlhVGltZSkudXRmOCgpLmRhdGEoKSk7
CkBAIC02NjYsMTYgKzY0OSwxNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2Vlayhjb25zdCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogICAgIE1lZGlhVGltZSB0aW1lID0g
c3RkOjptaW4obWVkaWFUaW1lLCBkdXJhdGlvbk1lZGlhVGltZSgpKTsKIAotICAgIGlmIChpc0xp
dmVTdHJlYW0oKSkgeworICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkgewogICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gTGl2ZSBzdHJlYW0gc2VlayB1bmhhbmRsZWQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiW1NlZWtdIHNlZWtpbmcgdG8gJXMiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgp
KTsKIAotICAgIGlmIChtX3NlZWtpbmcpIHsKKyAgICBpZiAobV9pc1NlZWtpbmcpIHsKICAgICAg
ICAgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWsgPSB0aW1lOwotICAgICAgICBpZiAobV9zZWVrSXNQ
ZW5kaW5nKSB7CisgICAgICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpIHsKICAgICAgICAgICAgIG1f
c2Vla1RpbWUgPSB0aW1lOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02ODgs
MTAgKzY3MSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25z
dCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
Z2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyB8fCBzdGF0ZSA8IEdTVF9T
VEFURV9QQVVTRUQgfHwgbV9pc0VuZFJlYWNoZWQpIHsKLSAgICAgICAgbV9zZWVrSXNQZW5kaW5n
ID0gdHJ1ZTsKKyAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gdHJ1ZTsKICAgICAgICAgaWYgKG1f
aXNFbmRSZWFjaGVkKSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJbU2Vla10gcmVzZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9
IHRydWU7CisgICAgICAgICAgICBtX3Nob3VsZFJlc2V0UGlwZWxpbmUgPSB0cnVlOwogICAgICAg
ICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQogICAgICAg
ICAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKICAgICAgICAgfQpA
QCAtNzAzLDIwICs2ODYsMjAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNl
ZWsoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X3NlZWtpbmcgPSB0cnVlOworICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKICAgICBtX3NlZWtUaW1l
ID0gdGltZTsKICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwogfQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlUGxheWJhY2tSYXRlKCkKIHsKLSAgICBpZiAoIW1f
Y2hhbmdpbmdSYXRlKQorICAgIGlmICghbV9pc0NoYW5naW5nUmF0ZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJTZXQgUmF0ZSB0byAlZiIsIG1f
cGxheWJhY2tSYXRlKTsKIAogICAgIC8vIE11dGUgdGhlIHNvdW5kIGlmIHRoZSBwbGF5YmFjayBy
YXRlIGlzIG5lZ2F0aXZlIG9yIHRvbyBleHRyZW1lIGFuZCBhdWRpbyBwaXRjaCBpcyBub3QgYWRq
dXN0ZWQuCi0gICAgYm9vbCBtdXRlID0gbV9wbGF5YmFja1JhdGUgPD0gMCB8fCAoIW1fcHJlc2Vy
dmVzUGl0Y2ggJiYgKG1fcGxheWJhY2tSYXRlIDwgMC44IHx8IG1fcGxheWJhY2tSYXRlID4gMikp
OworICAgIGJvb2wgbXV0ZSA9IG1fcGxheWJhY2tSYXRlIDw9IDAgfHwgKCFtX3Nob3VsZFByZXNl
cnZlUGl0Y2ggJiYgKG1fcGxheWJhY2tSYXRlIDwgMC44IHx8IG1fcGxheWJhY2tSYXRlID4gMikp
OwogCiAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksIG11dGUgPyAiTmVlZCB0byBtdXRl
IGF1ZGlvIiA6ICJEbyBub3QgbmVlZCB0byBtdXRlIGF1ZGlvIik7CiAKQEAgLTcyOCw0MyArNzEx
LDE5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVQbGF5YmFja1Jh
dGUoKQogICAgICAgICBHU1RfRVJST1IoIlNldCByYXRlIHRvICVmIGZhaWxlZCIsIG1fcGxheWJh
Y2tSYXRlKTsKICAgICB9CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgewotICAgICAg
ICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICAgICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBpZiAobV9p
c1BsYXliYWNrUmF0ZVBhdXNlZCkgeworICAgICAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsK
IAogICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRl
LCAmcGVuZGluZywgMCk7CiAgICAgICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUExBWUlORyAm
JiBwZW5kaW5nICE9IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAgICAgY2hhbmdlUGlwZWxp
bmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2Ug
PSBmYWxzZTsKKyAgICAgICAgbV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IGZhbHNlOwogICAgIH0K
IAotICAgIG1fY2hhbmdpbmdSYXRlID0gZmFsc2U7CisgICAgbV9pc0NoYW5naW5nUmF0ZSA9IGZh
bHNlOwogICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7
Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBw
aXBlbGluZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkpKTsKLSAg
ICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCk7Ci0KLSAgICAvLyBUaGUgZHVyYXRpb24gcXVlcnkgd291bGQgZmFpbCBvbiBhIG5vdC1w
cmVyb2xsZWQgcGlwZWxpbmUuCi0gICAgaWYgKEdTVF9TVEFURShtX3BpcGVsaW5lLmdldCgpKSA8
IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCk7Ci0KLSAgICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKLSAgICBpZiAoIWdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJmR1cmF0aW9u
KSB8fCAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZHVyYXRpb24pKSB7Ci0gICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRpbWUgZHVyYXRpb24gcXVlcnkgZmFpbGVkIGZvciAl
cyIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gTWVkaWFU
aW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNU
KHBpcGVsaW5lKCksICJEdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdT
KGR1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIE1lZGlhVGltZShkdXJhdGlvbiwgR1NUX1NFQ09ORCk7
Ci19Ci0KIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVk
aWFUaW1lKCkgY29uc3QKIHsKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJDYWNo
ZWQgZHVyYXRpb246ICVzIiwgbV9jYWNoZWREdXJhdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwpAQCAtNzgyLDExICs3NDEsMTEgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1f
ZGlkRXJyb3JPY2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsK
IAotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgInNlZWtpbmc6ICVzLCBzZWVrVGlt
ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX3NlZWtpbmcpCisgICAgR1NUX1RSQUNFX09CSkVD
VChwaXBlbGluZSgpLCAic2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGlu
ZyhtX2lzU2Vla2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBpZiAobV9pc1NlZWtpbmcpCiAgICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwogCiAgICAgcmV0
dXJuIHBsYXliYWNrUG9zaXRpb24oKTsKQEAgLTc5NCwzNiArNzUzLDM2IEBAIE1lZGlhVGltZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdAogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZShmbG9hdCByYXRlKQogewot
ICAgIC8vIEhpZ2hlciByYXRlIGNhdXNlcyBjcmFzaC4KLSAgICByYXRlID0gY2xhbXBUbyhyYXRl
LCAtMjAuMCwgMjAuMCk7CisgICAgZmxvYXQgcmF0ZUNsYW1wZWQgPSBjbGFtcFRvKHJhdGUsIC0y
MC4wLCAyMC4wKTsKKyAgICBpZiAocmF0ZUNsYW1wZWQgIT0gcmF0ZSkKKyAgICAgICAgR1NUX1dB
Uk5JTkcoIkNsYW1waW5nIG9yaWdpbmFsIHJhdGUgKCVmKSB0byBbLTIwLCAyMF0gKCVmKSwgaGln
aGVyIHJhdGVzIGNhdXNlIGNyYXNoZXMiLCByYXRlLCByYXRlQ2xhbXBlZCk7CiAKICAgICAvLyBB
dm9pZCB1c2VsZXNzIHBsYXliYWNrIHJhdGUgdXBkYXRlLgotICAgIGlmIChtX3BsYXliYWNrUmF0
ZSA9PSByYXRlKSB7Ci0gICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhhdCB1cHBlciBsYXllcnMg
d2VyZSBub3RpZmllZCBpZiByYXRlIHdhcyBzZXQKKyAgICBpZiAobV9wbGF5YmFja1JhdGUgPT0g
cmF0ZUNsYW1wZWQpIHsKKyAgICAgICAgLy8gQW5kIG1ha2Ugc3VyZSB0aGF0IHVwcGVyIGxheWVy
cyB3ZXJlIG5vdGlmaWVkIGlmIHJhdGUgd2FzIHNldC4KIAotICAgICAgICBpZiAoIW1fY2hhbmdp
bmdSYXRlICYmIG1fcGxheWVyLT5yYXRlKCkgIT0gbV9wbGF5YmFja1JhdGUpCisgICAgICAgIGlm
ICghbV9pc0NoYW5naW5nUmF0ZSAmJiBtX3BsYXllci0+cmF0ZSgpICE9IG1fcGxheWJhY2tSYXRl
KQogICAgICAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpIHsKLSAgICAgICAgLy8gbm90aWZ5IHVw
cGVyIGxheWVycyB0aGF0IHdlIGNhbm5vdCBoYW5kbGUgcGFzc2VkIHJhdGUuCi0gICAgICAgIG1f
Y2hhbmdpbmdSYXRlID0gZmFsc2U7CisgICAgaWYgKG1faXNMaXZlU3RyZWFtKSB7CisgICAgICAg
IC8vIE5vdGlmeSB1cHBlciBsYXllcnMgdGhhdCB3ZSBjYW5ub3QgaGFuZGxlIHBhc3NlZCByYXRl
LgorICAgICAgICBtX2lzQ2hhbmdpbmdSYXRlID0gZmFsc2U7CiAgICAgICAgIG1fcGxheWVyLT5y
YXRlQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR3N0U3RhdGUgc3Rh
dGU7Ci0gICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsK
IAotICAgIG1fcGxheWJhY2tSYXRlID0gcmF0ZTsKLSAgICBtX2NoYW5naW5nUmF0ZSA9IHRydWU7
CisgICAgbV9wbGF5YmFja1JhdGUgPSByYXRlQ2xhbXBlZDsKKyAgICBtX2lzQ2hhbmdpbmdSYXRl
ID0gdHJ1ZTsKIAogICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAm
c3RhdGUsICZwZW5kaW5nLCAwKTsKIAotICAgIGlmICghcmF0ZSkgewotICAgICAgICBtX2NoYW5n
aW5nUmF0ZSA9IGZhbHNlOwotICAgICAgICBtX3BsYXliYWNrUmF0ZVBhdXNlID0gdHJ1ZTsKKyAg
ICBpZiAoIXJhdGVDbGFtcGVkKSB7CisgICAgICAgIG1faXNDaGFuZ2luZ1JhdGUgPSBmYWxzZTsK
KyAgICAgICAgbV9pc1BsYXliYWNrUmF0ZVBhdXNlZCA9IHRydWU7CiAgICAgICAgIGlmIChzdGF0
ZSAhPSBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmcgIT0gR1NUX1NUQVRFX1BBVVNFRCkKICAg
ICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTg0MywyMCArODAyLDIwIEBAIGRvdWJsZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnJhdGUoKSBjb25zdAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKIHsKLSAgICBtX3ByZXNl
cnZlc1BpdGNoID0gcHJlc2VydmVzUGl0Y2g7CisgICAgbV9zaG91bGRQcmVzZXJ2ZVBpdGNoID0g
cHJlc2VydmVzUGl0Y2g7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWQpCiB7CiAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBwcmVsb2FkIHRvICVzIiwgY29udmVydEVudW1l
cmF0aW9uVG9TdHJpbmcocHJlbG9hZCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKHByZWxvYWQg
PT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgaXNMaXZlU3RyZWFtKCkpCisgICAgaWYgKHByZWxvYWQg
PT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgbV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcHJlbG9hZCA9IHByZWxvYWQ7CiAgICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdG
bGFnKCk7CiAKLSAgICBpZiAobV9kZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxh
eWVyOjpOb25lKSB7Ci0gICAgICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7CisgICAgaWYgKG1f
aXNEZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25lKSB7CisgICAg
ICAgIG1faXNEZWxheWluZ0xvYWQgPSBmYWxzZTsKICAgICAgICAgY29tbWl0TG9hZCgpOwogICAg
IH0KIH0KQEAgLTg2NCw3ICs4MjMsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQogc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZm
ZXJlZCgpIGNvbnN0CiB7CiAgICAgYXV0byB0aW1lUmFuZ2VzID0gbWFrZVVuaXF1ZTxQbGF0Zm9y
bVRpbWVSYW5nZXM+KCk7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IGlzTGl2ZVN0cmVhbSgp
KQorICAgIGlmIChtX2RpZEVycm9yT2NjdXIgfHwgbV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJl
dHVybiB0aW1lUmFuZ2VzOwogCiAgICAgTWVkaWFUaW1lIG1lZGlhRHVyYXRpb24gPSBkdXJhdGlv
bk1lZGlhVGltZSgpOwpAQCAtODc2LDggKzgzNSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQoKSBjb25z
CiAgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQo
KSkpCiAgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0gICAgZ3VpbnQgbnVtQnVmZmVyaW5n
UmFuZ2VzID0gZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMocXVlcnkuZ2V0KCkpOwot
ICAgIGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bUJ1ZmZlcmluZ1JhbmdlczsgaW5k
ZXgrKykgeworICAgIHVuc2lnbmVkIG51bUJ1ZmZlcmluZ1JhbmdlcyA9IGdzdF9xdWVyeV9nZXRf
bl9idWZmZXJpbmdfcmFuZ2VzKHF1ZXJ5LmdldCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBudW1CdWZmZXJpbmdSYW5nZXM7IGluZGV4KyspIHsKICAgICAgICAgZ2lu
dDY0IHJhbmdlU3RhcnQgPSAwLCByYW5nZVN0b3AgPSAwOwogICAgICAgICBpZiAoZ3N0X3F1ZXJ5
X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UocXVlcnkuZ2V0KCksIGluZGV4LCAmcmFuZ2VTdGFy
dCwgJnJhbmdlU3RvcCkpIHsKICAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0VGltZSA9IGdzdF91
dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQodG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0
aW9uKSwgcmFuZ2VTdGFydCwgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCk7CkBAIC04ODYsOCArODQ1
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpidWZmZXJlZCgpIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBtb3JlIGdlbmVyYWwgbWF4VGltZUxvYWRlZCgpIGlmIG5vIHJhbmdl
IGhhcwotICAgIC8vIGJlZW4gZm91bmQuCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIG1vcmUgZ2Vu
ZXJhbCBtYXhUaW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzIGJlZW4gZm91bmQuCiAgICAgaWYg
KCF0aW1lUmFuZ2VzLT5sZW5ndGgoKSkgewogICAgICAgICBNZWRpYVRpbWUgbG9hZGVkID0gbWF4
VGltZUxvYWRlZCgpOwogICAgICAgICBpZiAobG9hZGVkLmlzVmFsaWQoKSAmJiBsb2FkZWQpCkBA
IC04OTksMTYgKzg1NywxNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29ucwogCiBNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0
CiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywg
aXNMaXZlU3RyZWFtOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9yT2NjdXJlZCksIGJvb2xG
b3JQcmludGluZyhpc0xpdmVTdHJlYW0oKSkpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBpc0xpdmVT
dHJlYW06ICVzIiwgYm9vbEZvclByaW50aW5nKG1fZGlkRXJyb3JPY2N1ciksIGJvb2xGb3JQcmlu
dGluZyhtX2lzTGl2ZVN0cmVhbSkpOworICAgIGlmIChtX2RpZEVycm9yT2NjdXIpCiAgICAgICAg
IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkp
CisgICAgaWYgKG1faXNMaXZlU3RyZWFtKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJv
VGltZSgpOwogCiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsK
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhNZWRpYVRpbWVTZWVrYWJsZSwg
ZHVyYXRpb246ICVzIiwgdG9TdHJpbmcoZHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOwotICAgIC8v
IGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAgLy8gSW5maW5pdGUgZHVy
YXRpb24gbWVhbnMgbGl2ZSBzdHJlYW0uCiAgICAgaWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZp
bml0ZSgpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCkBAIC05MTcs
NyArODc1LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVk
aWFUaW1lU2Vla2FibGUoKSBjb25zdAogCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQp
CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikKICAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVy
b1RpbWUoKTsKIAogICAgIE1lZGlhVGltZSBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7CkBAIC05
MjksNyArODg3LDcgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4
VGltZUxvYWRlZCgpIGNvbnN0CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
aWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCB8fCBt
X2xvYWRpbmdTdGFsbGVkKQorICAgIGlmIChtX2RpZEVycm9yT2NjdXIgfHwgbV9sb2FkaW5nU3Rh
bGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFdFQktJVF9JU19XRUJfU1JD
KG1fc291cmNlLmdldCgpKSkgewpAQCAtOTUyLDI5ICs5MTAsMjIgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0CiAKIHVuc2lnbmVk
IGxvbmcgbG9uZyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25z
dAogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICBpZiAobV9kaWRFcnJvck9jY3VyIHx8
ICFtX3NvdXJjZSB8fCBtX2lzTGl2ZVN0cmVhbSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBp
ZiAobV90b3RhbEJ5dGVzKQogICAgICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwogCi0gICAgaWYg
KCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCiAgICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfQllU
RVM7CiAgICAgZ2ludDY0IGxlbmd0aCA9IDA7CiAgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1
cmF0aW9uKG1fc291cmNlLmdldCgpLCBmbXQsICZsZW5ndGgpKSB7CiAgICAgICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0
aCk7CiAgICAgICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4obGVuZ3RoKTsKLSAgICAgICAgbV9pc1N0cmVhbWluZyA9ICFsZW5ndGg7CisgICAgICAgIG1f
aXNMaXZlU3RyZWFtID0gIWxlbmd0aDsKICAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKICAg
ICB9CiAKLSAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBwYWRzIG1hbnVh
bGx5LgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mzg3NDkKKyAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBw
YWRzIG1hbnVhbGx5LiBTZWUgYWxzbyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NzQ5CiAgICAgR3N0SXRlcmF0b3IqIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVy
YXRlX3NyY19wYWRzKG1fc291cmNlLmdldCgpKTsKICAgICBib29sIGRvbmUgPSBmYWxzZTsKICAg
ICB3aGlsZSAoIWRvbmUpIHsKQEAgLTEwMDQsNyArOTU1LDcgQEAgdW5zaWduZWQgbG9uZyBsb25n
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygpIGNvbnN0CiAKICAgICBH
U1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFU
LCBsZW5ndGgpOwogICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4obGVuZ3RoKTsKLSAgICBtX2lzU3RyZWFtaW5nID0gIWxlbmd0aDsKKyAgICBtX2lzTGl2
ZVN0cmVhbSA9ICFsZW5ndGg7CiAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIH0KIApAQCAtMTEy
OSw4ICsxMDgwLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBp
cGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fcGlwZWxpbmUp
OwogCi0gICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7Cisg
ICAgR3N0U3RhdGUgY3VycmVudFN0YXRlLCBwZW5kaW5nOwogCiAgICAgZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsKICAg
ICBpZiAoY3VycmVudFN0YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsK
QEAgLTExNDcsMTMgKzEwOTcsMTAgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiAgICAgaWYgKGN1cnJlbnRT
dGF0ZSAhPSBwYXVzZWRPclBsYXlpbmcgJiYgc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NI
QU5HRV9GQUlMVVJFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBDcmVhdGUgYSB0
aW1lciB3aGVuIGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJl
c291cmNlcwotICAgIC8vIGlmIHdlIHN0YXkgZm9yIHRvbyBsb25nIG9uIFJFQURZLgotICAgIC8v
IEFsc28gbGV0cyByZW1vdmUgdGhlIHRpbWVyIGlmIHdlIHJlcXVlc3QgYSBzdGF0ZSBjaGFuZ2Ug
Zm9yIGFueSBzdGF0ZSBvdGhlciB0aGFuIFJFQURZLgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczNTQKKyAgICAvLyBDcmVhdGUgYSB0
aW1lciB3aGVuIGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJl
c291cmNlcyBpZiB3ZSBzdGF5IGZvciB0b28gbG9uZyBvbiBSRUFEWS4KKyAgICAvLyBBbHNvIGxl
dHMgcmVtb3ZlIHRoZSB0aW1lciBpZiB3ZSByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlIGZvciBhbnkg
c3RhdGUgb3RoZXIgdGhhbiBSRUFEWS4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNzM1NAogICAgIGlmIChuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUkVB
RFkgJiYgIW1fcmVhZHlUaW1lckhhbmRsZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAvLyBNYXgg
aW50ZXJ2YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwK
LSAgICAgICAgLy8gc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgorICAgICAgICAvLyBNYXggaW50ZXJ2
YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwgc3RhdGUg
Y2hhbmdlIHJlcXVlc3RzLgogICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyByZWFkeVN0YXRl
VGltZXJEZWxheSB7IDFfbWluIH07CiAgICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3RhcnRP
bmVTaG90KHJlYWR5U3RhdGVUaW1lckRlbGF5KTsKICAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9
IEdTVF9TVEFURV9SRUFEWSkKQEAgLTEyMDQsNyArMTE1MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKIAogICAgIEFTU0VSVChtX2lz
TGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOwogCi0gICAgZ2ludCBudW1UcmFja3Mg
PSAwOworICAgIHVuc2lnbmVkIG51bVRyYWNrcyA9IDA7CiAgICAgYm9vbCB1c2VNZWRpYVNvdXJj
ZSA9IGlzTWVkaWFTb3VyY2UoKTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFT
b3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CiAgICAgZ19vYmplY3Rf
Z2V0KGVsZW1lbnQsICJuLXZpZGVvIiwgJm51bVRyYWNrcywgbnVsbHB0cik7CkBAIC0xMjI3LDE0
ICsxMTc0LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5
ZXJPZlZpZGVvKCkKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBWZWN0b3I8U3RyaW5n
PiB2YWxpZFZpZGVvU3RyZWFtczsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7
ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewog
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV9waXBlbGluZS5nZXQoKSwgImdldC12aWRlby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBu
dWxscHRyKTsKICAgICAgICAgQVNTRVJUKHBhZCk7CiAKICAgICAgICAgU3RyaW5nIHN0cmVhbUlk
ID0gIlYiICsgU3RyaW5nOjpudW1iZXIoaSk7CiAgICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFw
cGVuZChzdHJlYW1JZCk7Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRl
b1RyYWNrcy5zaXplKCkpKSB7CisgICAgICAgIGlmIChpIDwgbV92aWRlb1RyYWNrcy5zaXplKCkp
IHsKICAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3Rp
bmdUcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKICAgICAgICAgICAgIGlmIChl
eGlzdGluZ1RyYWNrKSB7CiAgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgo
aSk7CkBAIC0xMjgyLDcgKzEyMjksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCiAKICAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4g
fHwgaXNNZWRpYVNvdXJjZSgpKTsKIAotICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICB1bnNp
Z25lZCBudW1UcmFja3MgPSAwOwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291
cmNlKCk7CiAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3Vy
Y2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOwogICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAi
bi1hdWRpbyIsICZudW1UcmFja3MsIG51bGxwdHIpOwpAQCAtMTMwMSwxNCArMTI0OCwxNCBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRBdWRpb1N0
cmVhbXM7Ci0gICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKICAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZDsKICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUu
Z2V0KCksICJnZXQtYXVkaW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CiAgICAg
ICAgIEFTU0VSVChwYWQpOwogCiAgICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJBIiArIFN0cmlu
Zzo6bnVtYmVyKGkpOwogICAgICAgICB2YWxpZEF1ZGlvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQp
OwotICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgp
KSkgeworICAgICAgICBpZiAoaSA8IG1fYXVkaW9UcmFja3Muc2l6ZSgpKSB7CiAgICAgICAgICAg
ICBSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX2F1
ZGlvVHJhY2tzLmdldChzdHJlYW1JZCk7CiAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykg
ewogICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwpAQCAtMTM0NCw3
ICsxMjkxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVGV4dCgpCiAKICAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRpYVNvdXJj
ZSgpKTsKIAotICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICB1bnNpZ25lZCBudW1UcmFja3Mg
PSAwOwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CiAgICAgR3N0
RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3Bp
cGVsaW5lLmdldCgpOwogICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi10ZXh0IiwgJm51bVRy
YWNrcywgbnVsbHB0cik7CkBAIC0xMzU3LDcgKzEzMDQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKICAgICB9CiAKICAgICBWZWN0b3I8
U3RyaW5nPiB2YWxpZFRleHRTdHJlYW1zOwotICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRy
YWNrczsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytp
KSB7CiAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CiAgICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LXRleHQtcGFkIiwgaSwgJnBhZC5vdXRQdHIo
KSwgbnVsbHB0cik7CiAgICAgICAgIEFTU0VSVChwYWQpOwpAQCAtMTM2OSw3ICsxMzE2LDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCgpCiAg
ICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJUIiArIFN0cmluZzo6bnVtYmVyKGkpOwogCiAgICAg
ICAgIHZhbGlkVGV4dFN0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKLSAgICAgICAgaWYgKGkgPCBz
dGF0aWNfY2FzdDxnaW50PihtX3RleHRUcmFja3Muc2l6ZSgpKSkgeworICAgICAgICBpZiAoaSA8
IG1fdGV4dFRyYWNrcy5zaXplKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV90ZXh0VHJhY2tzLmdldChzdHJl
YW1JZCk7CiAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewogICAgICAgICAgICAgICAg
IGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwpAQCAtMTQyMiw5ICsxMzY5LDU2IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlKCkKIH0KICNlbmRpZgog
CitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUR1cmF0aW9u
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAgICAgIHJldHVybiBNZWRpYVRp
bWU6OmludmFsaWRUaW1lKCk7CisKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJl
cnJvck9jY3VyZWQ6ICVzLCBwaXBlbGluZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9k
aWRFcnJvck9jY3VyKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NUX1NUQVRFKG1fcGlw
ZWxpbmUuZ2V0KCkpKSk7CisgICAgaWYgKG1fZGlkRXJyb3JPY2N1cikKKyAgICAgICAgcmV0dXJu
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIC8vIFRoZSBkdXJhdGlvbiBxdWVyeSB3
b3VsZCBmYWlsIG9uIGEgbm90LXByZXJvbGxlZCBwaXBlbGluZS4KKyAgICBpZiAoR1NUX1NUQVRF
KG1fcGlwZWxpbmUuZ2V0KCkpIDwgR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgcmV0dXJuIE1l
ZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGludDY0X3QgZHVyYXRpb24gPSAwOworICAg
IGlmICghZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9waXBlbGluZS5nZXQoKSwgR1NUX0ZP
Uk1BVF9USU1FLCAmZHVyYXRpb24pIHx8ICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChkdXJhdGlv
bikpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVGltZSBkdXJhdGlv
biBxdWVyeSBmYWlsZWQgZm9yICVzIiwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CisgICAgfQor
CisgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIkR1cmF0aW9uOiAlIiBHU1RfVElNRV9G
T1JNQVQsIEdTVF9USU1FX0FSR1MoZHVyYXRpb24pKTsKKyAgICByZXR1cm4gTWVkaWFUaW1lKGR1
cmF0aW9uLCBHU1RfU0VDT05EKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmlzTXV0ZWQoKSBjb25zdAoreworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBnYm9vbGVhbiBpc011dGVkOworICAgIGdfb2JqZWN0X2dl
dChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJmlzTXV0ZWQsIG51bGxwdHIpOworICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiUGxheWVyIGlzIG11dGVkOiAlcyIsIGJvb2xG
b3JQcmludGluZyghIWlzTXV0ZWQpKTsKKyAgICByZXR1cm4gaXNNdXRlZDsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExvYWQoKQoreworICAgIEFTU0VSVCgh
bV9pc0RlbGF5aW5nTG9hZCk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ29t
bWl0dGluZyBsb2FkLiIpOworCisgICAgLy8gR1N0cmVhbWVyIG5lZWRzIHRvIGhhdmUgdGhlIHBp
cGVsaW5lIHNldCB0byBhIHBhdXNlZCBzdGF0ZSB0bworICAgIC8vIHN0YXJ0IHByb3ZpZGluZyBh
bnl0aGluZyB1c2VmdWwuCisgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VE
KTsKKworICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOworICAgIHVwZGF0ZVN0YXRl
cygpOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZmlsbFRpbWVyRmly
ZWQoKQogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkgeworICAgIGlmIChtX2RpZEVycm9yT2Nj
dXIpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10g
QW4gZXJyb3Igb2NjdXJyZWQsIGRpc2FibGluZyB0aGUgZmlsbCB0aW1lciIpOwogICAgICAgICBt
X2ZpbGxUaW1lci5zdG9wKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NjYsNyArMTQ2MCw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkaW5nRmFpbGVkKE1lZGlhUGxh
eWVyOjpOZXR3b3JrU3RhdGUgbmV0d29yCiB7CiAgICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgZmFp
bGVkLCBlcnJvcjogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhuZXR3b3JrRXJyb3Ip
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgbV9lcnJvck9jY3VyZWQgPSB0cnVlOworICAgIG1fZGlk
RXJyb3JPY2N1ciA9IHRydWU7CiAgICAgaWYgKGZvcmNlTm90aWZpY2F0aW9ucyB8fCBtX25ldHdv
cmtTdGF0ZSAhPSBuZXR3b3JrRXJyb3IpIHsKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBuZXR3
b3JrRXJyb3I7CiAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0x
NTA5LDggKzE1MDMsOCBAQCBHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmF1ZGlvU2luaygpIGNvbnN0CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnBsYXliYWNrUG9zaXRpb24oKSBjb25zdAogewotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlw
ZWxpbmUoKSwgImlzRW5kUmVhY2hlZDogJXMsIHNlZWtpbmc6ICVzLCBzZWVrVGltZTogJXMiLCBi
b29sRm9yUHJpbnRpbmcobV9pc0VuZFJlYWNoZWQpLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5n
KSwgbV9zZWVrVGltZS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX2lzRW5k
UmVhY2hlZCAmJiBtX3NlZWtpbmcpCisgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAi
aXNFbmRSZWFjaGVkOiAlcywgc2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmlu
dGluZyhtX2lzRW5kUmVhY2hlZCksIGJvb2xGb3JQcmludGluZyhtX2lzU2Vla2luZyksIG1fc2Vl
a1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9pc0VuZFJlYWNoZWQg
JiYgbV9pc1NlZWtpbmcpCiAgICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwogCiAgICAgLy8gVGhp
cyBjb25zdGFudCBzaG91bGQgcmVtYWluIGxvd2VyIHRoYW4gSFRNTE1lZGlhRWxlbWVudCdzIG1h
eFRpbWV1cGRhdGVFdmVudEZyZXF1ZW5jeS4KQEAgLTE1MzAsMTAgKzE1MjQsMTEgQEAgTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0
CiAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsK
ICAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwogCi0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBl
bGluZSgpLCAiUG9zaXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICIsIGNhbkZhbGxCYWNrVG9MYXN0
RmluaXNoZWRTZWVrUG9zaXRpb246ICVzIiwgR1NUX1RJTUVfQVJHUyhwb3NpdGlvbiksIGJvb2xG
b3JQcmludGluZyhtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pKTsKKyAg
ICBHc3RDbG9ja1RpbWUgZ3N0cmVhbWVyUG9zaXRpb24gPSBzdGF0aWNfY2FzdDxHc3RDbG9ja1Rp
bWU+KHBvc2l0aW9uKTsKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJQb3NpdGlv
biAlIiBHU1RfVElNRV9GT1JNQVQgIiwgY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3Np
dGlvbjogJXMiLCBHU1RfVElNRV9BUkdTKGdzdHJlYW1lclBvc2l0aW9uKSwgYm9vbEZvclByaW50
aW5nKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbikpOwogCiAgICAgTWVk
aWFUaW1lIHBsYXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgR3N0
Q2xvY2tUaW1lIGdzdHJlYW1lclBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihw
b3NpdGlvbik7CisKICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZ3N0cmVhbWVyUG9z
aXRpb24pKQogICAgICAgICBwbGF5YmFja1Bvc2l0aW9uID0gTWVkaWFUaW1lKGdzdHJlYW1lclBv
c2l0aW9uLCBHU1RfU0VDT05EKTsKICAgICBlbHNlIGlmIChtX2NhbkZhbGxCYWNrVG9MYXN0Rmlu
aXNoZWRTZWVrUG9zaXRpb24pCkBAIC0xNjA5LDYgKzE2MDQsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6
VHJhY2tUeQogICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRl
b1N0cmVhbUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0
cmVhbWVyOjpUcmFja1R5cGU6OlVua25vd246CisgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE2NjAsNyAr
MTY1Niw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3Mo
KQogICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gdHJhY2sgdHlwZSBmb3VuZCBmb3Ig
c3RyZWFtICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCi0gICAgaWYgKChv
bGRIYXNWaWRlbyAhPSBtX2hhc1ZpZGVvKSB8fCAob2xkSGFzQXVkaW8gIT0gbV9oYXNBdWRpbykp
CisgICAgaWYgKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8gfHwgb2xkSGFzQXVkaW8gIT0gbV9o
YXNBdWRpbykKICAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOwogCiAg
ICAgaWYgKG1faGFzVmlkZW8pCkBAIC0xNzIwLDcgKzE3MTYsOSBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgZ2NoYXIqIGNvbnRleHRUeXBlOwot
ICAgIGdzdF9tZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4dFR5cGUp
OworICAgIGlmICghZ3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250
ZXh0VHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkhhbmRsaW5nICVzIG5lZWQtY29udGV4dCBtZXNzYWdlIGZvciAlcyIsIGNv
bnRleHRUeXBlLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7CiAKICAgICBpZiAoIWdf
c3RyY21wMChjb250ZXh0VHlwZSwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9O
QU1FKSkgewpAQCAtMTc3MSw3ICsxNzY5LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiZGVjcnlwdGlvbi1zeXN0ZW0t
aWQiLCBHX1RZUEVfU1RSSU5HLCBwcmVmZXJyZWRLZXlTeXN0ZW1VdWlkLCBudWxscHRyKTsKICAg
ICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKEdTVF9NRVNTQUdF
X1NSQyhtZXNzYWdlKSksIGNvbnRleHQuZ2V0KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIEdTVF9XQVJOSU5HKCJDRE0gaW5zdGFuY2Ugbm90IGluaXRpYWxpemFlZCIpOworICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNzgxLDcgKzE3NzksNyBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhl
IHZpZGVvCisvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRlby4KIEZsb2F0U2l6ZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKIHsKICNpZiBVU0Uo
R1NUUkVBTUVSX0hPTEVQVU5DSCkKQEAgLTE4MTksMTAgKzE4MTcsOCBAQCBGbG9hdFNpemUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAgICAgaWYgKCFj
YXBzKQogICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CiAKLSAgICAvLyBUT0RPOiBoYW5kbGUg
cG9zc2libGUgY2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlCi0gICAgLy8gaHR0cHM6Ly9idWd6aWxs
YS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjU3MQotICAgIC8vIFRPRE86IGhhbmRsZSBw
b3NzaWJsZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFNlZQotICAgIC8vIGh0dHBzOi8vYnVnemls
bGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYKKyAgICAvLyBUT0RPOiBoYW5kbGUg
cG9zc2libGUgY2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUu
b3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUg
dHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hv
d19idWcuY2dpP2lkPTU5NjMyNgogCiAgICAgLy8gR2V0IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdp
bmFsIHNpemUsIGlmIHRoaXMgZmFpbHMgdGhlCiAgICAgLy8gdmlkZW8tc2luayBoYXMgbGlrZWx5
IG5vdCB5ZXQgbmVnb3RpYXRlZCBpdHMgY2Fwcy4KQEAgLTE4MzQsNyArMTgzMCw3IEBAIEZsb2F0
U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKIAog
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICAvLyBXaGVuIHVzaW5nIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nLCBpZiB0aGUgdmlkZW8gaXMgdGFnZ2VkIGFzIHJvdGF0ZWQgOTAgb3IgMjcw
IGRlZ3JlZXMsIHN3YXAgd2lkdGggYW5kIGhlaWdodC4KLSAgICBpZiAobV9yZW5kZXJpbmdDYW5C
ZUFjY2VsZXJhdGVkKSB7CisgICAgaWYgKG1fY2FuUmVuZGVyaW5nQmVBY2NlbGVyYXRlZCkgewog
ICAgICAgICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkp
CiAgICAgICAgICAgICBvcmlnaW5hbFNpemUgPSBvcmlnaW5hbFNpemUudHJhbnNwb3NlZFNpemUo
KTsKICAgICB9CkBAIC0xODUzLDE5ICsxODQ5LDE5IEBAIEZsb2F0U2l6ZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKICAgICBkaXNwbGF5SGVpZ2h0IC89
IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKIAogICAgIC8vIEFwcGx5IERBUiB0byBvcmlnaW5hbCB2
aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mg
c2V0Y2FwcyBmdW5jdGlvbi4KLSAgICBndWludDY0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAg
ICB1aW50NjRfdCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CiAgICAgaWYgKCEob3JpZ2luYWxTaXpl
LmhlaWdodCgpICUgZGlzcGxheUhlaWdodCkpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKICAgICAgICAgd2lk
dGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlz
cGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8
Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKKyAgICAgICAgaGVpZ2h0ID0gb3JpZ2lu
YWxTaXplLmhlaWdodCgpOwogICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFNpemUud2lkdGgoKSAl
IGRpc3BsYXlXaWR0aCkpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
S2VlcGluZyB2aWRlbyBvcmlnaW5hbCB3aWR0aCIpOwogICAgICAgICBoZWlnaHQgPSBnc3RfdXRp
bF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0LCBk
aXNwbGF5V2lkdGgpOwotICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdp
bmFsU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgd2lkdGggPSBvcmlnaW5hbFNpemUud2lkdGgoKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJBcHBy
b3hpbWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7CiAgICAgICAg
IHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCks
IGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19j
YXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGhlaWdodCA9IG9y
aWdpbmFsU2l6ZS5oZWlnaHQoKTsKICAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRf
Rk9STUFULCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTE5MjMsMzMgKzE5MTksMTMgQEAgTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlKCkg
Y29uc3QKICAgICByZXR1cm4gbV9yZWFkeVN0YXRlOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnNldE11dGVkKGJvb2wgc2hvdWxkTXV0ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0TXV0ZWQoYm9vbCBt
dXRlKQotewotICAgIGlmICghbV92b2x1bWVFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBib29sIGN1cnJlbnRWYWx1ZSA9IG11dGVkKCk7Ci0gICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBt
dXRlKQorICAgIGlmICghbV92b2x1bWVFbGVtZW50IHx8IHNob3VsZE11dGUgPT0gaXNNdXRlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlNl
dCBtdXRlZCB0byAlcyIsIHRvU3RyaW5nKG11dGUpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2Jq
ZWN0X3NldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgbXV0ZSwgbnVsbHB0cik7Ci19
Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdi
b29sZWFuIG11dGVkOwotICAgIGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJt
dXRlIiwgJm11dGVkLCBudWxscHRyKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
IlBsYXllciBpcyBtdXRlZDogJXMiLCB0b1N0cmluZyhzdGF0aWNfY2FzdDxib29sPihtdXRlZCkp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBtdXRlZDsKKyAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIk11dGVkPyAlcyIsIGJvb2xGb3JQcmludGluZyhzaG91bGRNdXRlKSk7Cisg
ICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBzaG91bGRNdXRl
LCBudWxscHRyKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVBsYXllck9mTXV0ZSgpCkBAIC0xOTk5LDcgKzE5NzUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIEdT
VF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJNZXNzYWdlICVzIHJlY2VpdmVkIGZyb20gZWxlbWVu
dCAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNzYWdlKSwgR1NUX01FU1NBR0VfU1JDX05B
TUUobWVzc2FnZSkpOwogICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgewog
ICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgICAgIGlmIChtX3Jlc2V0UGlwZWxpbmUg
fHwgIW1fbWlzc2luZ1BsdWdpbkNhbGxiYWNrcy5pc0VtcHR5KCkgfHwgbV9lcnJvck9jY3VyZWQp
CisgICAgICAgIGlmIChtX3Nob3VsZFJlc2V0UGlwZWxpbmUgfHwgIW1fbWlzc2luZ1BsdWdpbkNh
bGxiYWNrcy5pc0VtcHR5KCkgfHwgbV9kaWRFcnJvck9jY3VyKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIub3V0UHRyKCks
ICZkZWJ1Zy5vdXRQdHIoKSk7CiAgICAgICAgIEdTVF9FUlJPUigiRXJyb3IgJWQ6ICVzICh1cmw9
JXMpIiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwpAQCAtMjAxNCw5ICsxOTkwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIHx8IGdf
ZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9SRVNPVVJDRV9FUlJPUiwgR1NUX1JFU09VUkNF
X0VSUk9SX05PVF9GT1VORCkpCiAgICAgICAgICAgICBlcnJvciA9IE1lZGlhUGxheWVyOjpGb3Jt
YXRFcnJvcjsKICAgICAgICAgZWxzZSBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NU
X1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCkpIHsKLSAgICAg
ICAgICAgIC8vIExldCB0aGUgbWVkaWFQbGF5ZXJDbGllbnQgaGFuZGxlIHRoZSBzdHJlYW0gZXJy
b3IsIGluCi0gICAgICAgICAgICAvLyB0aGlzIGNhc2UgdGhlIEhUTUxNZWRpYUVsZW1lbnQgd2ls
bCBlbWl0IGEgc3RhbGxlZAotICAgICAgICAgICAgLy8gZXZlbnQuCisgICAgICAgICAgICAvLyBM
ZXQgdGhlIG1lZGlhUGxheWVyQ2xpZW50IGhhbmRsZSB0aGUgc3RyZWFtIGVycm9yLCBpbiB0aGlz
IGNhc2UgdGhlIEhUTUxNZWRpYUVsZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZCBldmVudC4KICAg
ICAgICAgICAgIEdTVF9FUlJPUigiRGVjb2RlIGVycm9yLCBsZXQgdGhlIE1lZGlhIGVsZW1lbnQg
ZW1pdCBhIHN0YWxsZWQgZXZlbnQuIik7CiAgICAgICAgICAgICBtX2xvYWRpbmdTdGFsbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjAyOSw3ICsyMDAzLDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2Fn
ZSkKICAgICAgICAgaWYgKGF0dGVtcHROZXh0TG9jYXRpb24pCiAgICAgICAgICAgICBpc3N1ZUVy
cm9yID0gIWxvYWROZXh0TG9jYXRpb24oKTsKICAgICAgICAgaWYgKGlzc3VlRXJyb3IpIHsKLSAg
ICAgICAgICAgIG1fZXJyb3JPY2N1cmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZGlkRXJyb3JP
Y2N1ciA9IHRydWU7CiAgICAgICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gZXJyb3IpIHsK
ICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IGVycm9yOwogICAgICAgICAgICAgICAg
IG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0yMDQwLDEyICsyMDE0LDEyIEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpCiAgICAgICAgIGRpZEVuZCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkU6Ci0gICAgICAgIGlmICghbWVzc2FnZVNvdXJjZUlzUGxh
eWJpbiB8fCBtX2RlbGF5aW5nTG9hZCkKKyAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5
YmluIHx8IG1faXNEZWxheWluZ0xvYWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgYXN5
bmNTdGF0ZUNoYW5nZURvbmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfTUVTU0FH
RV9TVEFURV9DSEFOR0VEOiB7Ci0gICAgICAgIGlmICghbWVzc2FnZVNvdXJjZUlzUGxheWJpbiB8
fCBtX2RlbGF5aW5nTG9hZCkKKyAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5YmluIHx8
IG1faXNEZWxheWluZ0xvYWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgdXBkYXRlU3Rh
dGVzKCk7CiAKQEAgLTIxNzYsOCArMjE1MCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFpc1Jhbmdl
UmVxdWVzdCkgewotICAgICAgICAgICAgICAgICAgICBtX2lzU3RyZWFtaW5nID0gIWNvbnRlbnRM
ZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAi
JXMgc3RyZWFtIGRldGVjdGVkIiwgbV9pc1N0cmVhbWluZyA/ICJMaXZlIiA6ICJOb24tbGl2ZSIp
OworICAgICAgICAgICAgICAgICAgICBtX2lzTGl2ZVN0cmVhbSA9ICFjb250ZW50TGVuZ3RoOwor
ICAgICAgICAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVh
bSBkZXRlY3RlZCIsIG1faXNMaXZlU3RyZWFtID8gIkxpdmUiIDogIk5vbi1saXZlIik7CiAgICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIyODUsMTUgKzIyNTksMTUgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhHc3RCdWZmZXJp
bmdNb2RlIG1vZGUsIGQKIHsKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVm
ZmVyaW5nXSBtb2RlOiAlcywgc3RhdHVzOiAlZiUlIiwgZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JV
RkZFUklOR19NT0RFLCBtb2RlKS5kYXRhKCksIHBlcmNlbnRhZ2UpOwogCi0gICAgbV9kb3dubG9h
ZEZpbmlzaGVkID0gcGVyY2VudGFnZSA9PSAxMDA7Ci0gICAgbV9idWZmZXJpbmcgPSAhbV9kb3du
bG9hZEZpbmlzaGVkOworICAgIG1fZGlkRG93bmxvYWRGaW5pc2ggPSBwZXJjZW50YWdlID09IDEw
MDsKKyAgICBtX2lzQnVmZmVyaW5nID0gIW1fZGlkRG93bmxvYWRGaW5pc2g7CiAKICAgICBzd2l0
Y2ggKG1vZGUpIHsKICAgICBjYXNlIEdTVF9CVUZGRVJJTkdfU1RSRUFNOiB7CiAgICAgICAgIHVw
ZGF0ZU1heFRpbWVMb2FkZWQocGVyY2VudGFnZSk7CiAKICAgICAgICAgbV9idWZmZXJpbmdQZXJj
ZW50YWdlID0gcGVyY2VudGFnZTsKLSAgICAgICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKKyAg
ICAgICAgaWYgKG1fZGlkRG93bmxvYWRGaW5pc2gpCiAgICAgICAgICAgICB1cGRhdGVTdGF0ZXMo
KTsKIAogICAgICAgICBicmVhazsKQEAgLTIzMDMsNyArMjI3Nyw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMoR3N0QnVmZmVyaW5nTW9k
ZSBtb2RlLCBkCiAKICAgICAgICAgLy8gTWVkaWEgaXMgbm93IGZ1bGx5IGxvYWRlZC4gSXQgd2ls
bCBwbGF5IGV2ZW4gaWYgbmV0d29yayBjb25uZWN0aW9uIGlzCiAgICAgICAgIC8vIGN1dC4gQnVm
ZmVyaW5nIGlzIGRvbmUsIHJlbW92ZSB0aGUgZmlsbCBzb3VyY2UgZnJvbSB0aGUgbWFpbiBsb29w
LgotICAgICAgICBpZiAobV9kb3dubG9hZEZpbmlzaGVkKQorICAgICAgICBpZiAobV9kaWREb3du
bG9hZEZpbmlzaCkKICAgICAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKIAogICAgICAgICB1
cGRhdGVTdGF0ZXMoKTsKQEAgLTIzMjMsNyArMjI5Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwcm9jZXNzTXBlZ1RzU2VjdGlvbihHc3RNcGVndHNTZWN0aW9uKiBzZWN0
aW9uCiAgICAgaWYgKHNlY3Rpb24tPnNlY3Rpb25fdHlwZSA9PSBHU1RfTVBFR1RTX1NFQ1RJT05f
UE1UKSB7CiAgICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVCogcG10ID0gZ3N0X21wZWd0c19zZWN0
aW9uX2dldF9wbXQoc2VjdGlvbik7CiAgICAgICAgIG1fbWV0YWRhdGFUcmFja3MuY2xlYXIoKTsK
LSAgICAgICAgZm9yIChndWludCBpID0gMDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kp
IHsKICAgICAgICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVFN0cmVhbSogc3RyZWFtID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzUE1UU3RyZWFtKj4oZ19wdHJfYXJyYXlfaW5kZXgocG10LT5z
dHJlYW1zLCBpKSk7CiAgICAgICAgICAgICBpZiAoc3RyZWFtLT5zdHJlYW1fdHlwZSA9PSAweDA1
IHx8IHN0cmVhbS0+c3RyZWFtX3R5cGUgPj0gMHg4MCkgewogICAgICAgICAgICAgICAgIEF0b21T
dHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc3RyZWFtLT5waWQpOwpAQCAtMjM0Miw5ICsyMzE2
LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NNcGVnVHNTZWN0
aW9uKEdzdE1wZWd0c1NlY3Rpb24qIHNlY3Rpb24KICAgICAgICAgICAgICAgICAvLyBleHByZXNz
ZWQgaW4gaGV4YWRlY2ltYWwgdXNpbmcgdXBwZXJjYXNlIEFTQ0lJIGhleCBkaWdpdHMuCiAgICAg
ICAgICAgICAgICAgU3RyaW5nIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGU7CiAgICAg
ICAgICAgICAgICAgYXBwZW5kVW5zaWduZWRBc0hleEZpeGVkU2l6ZShzdHJlYW0tPnN0cmVhbV90
eXBlLCBpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlLCAyKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKGd1aW50IGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlwdG9ycy0+bGVuOyArK2opIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlw
dG9ycy0+bGVuOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0TXBlZ3RzRGVz
Y3JpcHRvciogZGVzY3JpcHRvciA9IHN0YXRpY19jYXN0PGNvbnN0IEdzdE1wZWd0c0Rlc2NyaXB0
b3IqPihnX3B0cl9hcnJheV9pbmRleChzdHJlYW0tPmRlc2NyaXB0b3JzLCBqKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoZ3VpbnQgayA9IDA7IGsgPCBkZXNjcmlwdG9yLT5sZW5ndGg7ICsr
aykKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlc2NyaXB0
b3ItPmxlbmd0aDsgKytrKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4
KGRlc2NyaXB0b3ItPmRhdGFba10sIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0cmFjay0+c2V0SW5CYW5kTWV0YWRh
dGFUcmFja0Rpc3BhdGNoVHlwZShpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKTsKQEAg
LTIzOTQsMTAgKzIzNjgsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBy
b2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSogZW50cnkKIAogICAgIGdpbnQ2
NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7CiAgICAgZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3Rv
cF90aW1lcyhlbnRyeSwgJnN0YXJ0LCAmc3RvcCk7CisKKyAgICB1aW50MzJfdCB0cnVuY2F0ZWRH
c3RTZWNvbmQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oR1NUX1NFQ09ORCk7CiAgICAgaWYgKHN0
YXJ0ICE9IC0xKQotICAgICAgICBjdWUtPnNldFN0YXJ0VGltZShNZWRpYVRpbWUoc3RhcnQsIEdT
VF9TRUNPTkQpKTsKKyAgICAgICAgY3VlLT5zZXRTdGFydFRpbWUoTWVkaWFUaW1lKHN0YXRpY19j
YXN0PGludDY0X3Q+KHN0YXJ0KSwgdHJ1bmNhdGVkR3N0U2Vjb25kKSk7CiAgICAgaWYgKHN0b3Ag
IT0gLTEpCi0gICAgICAgIGN1ZS0+c2V0RW5kVGltZShNZWRpYVRpbWUoc3RvcCwgR1NUX1NFQ09O
RCkpOworICAgICAgICBjdWUtPnNldEVuZFRpbWUoTWVkaWFUaW1lKHN0YXRpY19jYXN0PGludDY0
X3Q+KHN0b3ApLCB0cnVuY2F0ZWRHc3RTZWNvbmQpKTsKIAogICAgIEdzdFRhZ0xpc3QqIHRhZ3Mg
PSBnc3RfdG9jX2VudHJ5X2dldF90YWdzKGVudHJ5KTsKICAgICBpZiAodGFncykgewpAQCAtMjQ5
NSwxNSArMjQ3MSwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VP
bGREb3dubG9hZEZpbGVzKGNvbnN0IGNoYXIqIGRvd25sb2FkRmlsZQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQogewotICAgIGlmICgh
bV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgbV9k
aWRFcnJvck9jY3VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zZWVraW5nKSB7Ci0g
ICAgICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpCisgICAgaWYgKG1faXNTZWVraW5nKSB7CisgICAg
ICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpCiAgICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJb
U2Vla10gc2Vla2VkIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNTZWVraW5n
ID0gZmFsc2U7CiAgICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOwogICAgICAgICAgICAgaWYgKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrICE9IG1f
c2Vla1RpbWUgJiYgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWsuaXNWYWxpZCgpKSB7CiAgICAgICAg
ICAgICAgICAgc2VlayhtX3RpbWVPZk92ZXJsYXBwaW5nU2Vlayk7CkBAIC0yNTIzLDE2ICsyNDk5
LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphc3luY1N0YXRlQ2hhbmdl
RG9uZSgpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMo
KQogewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
ZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29y
a1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xk
UmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLSAgICBHc3RTdGF0ZSBwZW5kaW5nOwotICAgIEdz
dFN0YXRlIHN0YXRlOworICAgIEdzdFN0YXRlIHBlbmRpbmcsIHN0YXRlOwogICAgIGJvb2wgc3Rh
dGVSZWFsbHlDaGFuZ2VkID0gZmFsc2U7CiAKICAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRT
dGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3Rh
dGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7CkBAIC0yNTUyLDkgKzI1MjQsOSBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAg
aWYgKG1faXNFbmRSZWFjaGVkICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkK
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IG1fY3VycmVu
dFN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWTsKKyAgICAgICAgbV9zaG91bGRSZXNldFBpcGVsaW5l
ID0gbV9jdXJyZW50U3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZOwogCi0gICAgICAgIGJvb2wgZGlk
QnVmZmVyaW5nID0gbV9idWZmZXJpbmc7CisgICAgICAgIGJvb2wgZGlkQnVmZmVyaW5nID0gbV9p
c0J1ZmZlcmluZzsKIAogICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVz
LgogICAgICAgICBzd2l0Y2ggKG1fY3VycmVudFN0YXRlKSB7CkBAIC0yNTY4LDE3ICsyNTQwLDE3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKICAgICAgICAg
Y2FzZSBHU1RfU1RBVEVfUExBWUlORzoKLSAgICAgICAgICAgIGlmIChtX2J1ZmZlcmluZykgewor
ICAgICAgICAgICAgaWYgKG1faXNCdWZmZXJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAobV9i
dWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgewogICAgICAgICAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBDb21wbGV0ZS4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9idWZmZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9p
c0J1ZmZlcmluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBs
YXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBtX2Rp
ZERvd25sb2FkRmluaXNoID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGlu
ZzsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOwogICAgICAgICAgICAgICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fZGlkRG93bmxvYWRGaW5pc2gpIHsKICAgICAgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAgICAgICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwogICAgICAgICAgICAgfSBl
bHNlIHsKQEAgLTI1OTQsMjUgKzI1NjYsMjUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAKICAgICAgICAgLy8gU3luYyBzdGF0ZXMgd2hlcmUgbmVl
ZGVkLgogICAgICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewot
ICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgeworICAgICAgICAg
ICAgaWYgKCFtX2FyZVZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgewogICAgICAgICAgICAgICAg
IG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CiAgICAgICAgICAgICAgICAgbm90aWZ5UGxh
eWVyT2ZNdXRlKCk7Ci0gICAgICAgICAgICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIG1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkID0g
dHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGRpZEJ1ZmZlcmluZyAmJiAh
bV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CisgICAgICAgICAg
ICBpZiAoZGlkQnVmZmVyaW5nICYmICFtX2lzQnVmZmVyaW5nICYmICFtX2lzUGF1c2VkICYmIG1f
cGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiW0J1ZmZlcmluZ10gUmVzdGFydGluZyBwbGF5YmFjay4iKTsKICAgICAgICAgICAgICAg
ICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykg
ewotICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faXNQYXVzZWQg
PSBmYWxzZTsKIAotICAgICAgICAgICAgaWYgKChtX2J1ZmZlcmluZyAmJiAhaXNMaXZlU3RyZWFt
KCkpIHx8ICFtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgaWYgKChtX2lzQnVmZmVyaW5n
ICYmIG1faXNMaXZlU3RyZWFtKSB8fCAhbV9wbGF5YmFja1JhdGUpIHsKICAgICAgICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVh
bSBmb3IgYnVmZmVyaW5nLiIpOwogICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUo
R1NUX1NUQVRFX1BBVVNFRCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAK
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiT2xkIHN0YXRlOiAlcywgbmV3
IHN0YXRlOiAlcyAocmVxdWVzdGVkOiAlcykiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSht
X29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX3JlcXVlc3RlZFN0YXRlKSk7CiAgICAgICAgIGlm
IChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbV9jdXJyZW50U3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCkgewpAQCAtMjYzNywyNCArMjYwOSwyNCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CiAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkZhaWx1cmU6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKHBlbmRpbmcpKTsKLSAgICAgICAgLy8gQ2hhbmdlIGZhaWxlZAorICAgICAgICAvLyBD
aGFuZ2UgZmFpbGVkLgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdF
X05PX1BSRVJPTEw6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5vIHBy
ZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFt
ZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsK
IAogICAgICAgICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQQVVTRUQgd2l0aG91dCBwcmVyb2xs
aW5nLgotICAgICAgICBtX2lzU3RyZWFtaW5nID0gdHJ1ZTsKKyAgICAgICAgbV9pc0xpdmVTdHJl
YW0gPSB0cnVlOwogICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKIAogICAg
ICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQogICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwogICAgICAgICBlbHNlIGlm
IChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgICAgICAgICBtX3Bh
dXNlZCA9IHRydWU7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgfSBl
bHNlIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICAgICAg
IG1fcGF1c2VkID0gZmFsc2U7CisgICAgICAgICAgICBtX2lzUGF1c2VkID0gZmFsc2U7CiAKLSAg
ICAgICAgaWYgKCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkKKyAgICAgICAgaWYgKCFtX2lz
UGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKQogICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0
ZShHU1RfU1RBVEVfUExBWUlORyk7CiAKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6TG9hZGluZzsKQEAgLTI2ODAsMTEgKzI2NTIsMTEgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAKICAgICBpZiAoZ2V0U3RhdGVSZXN1bHQg
PT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIG1fY3VycmVudFN0YXRlID49IEdTVF9TVEFU
RV9QQVVTRUQpIHsKICAgICAgICAgdXBkYXRlUGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIGlmICht
X3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgaWYgKG1faXNTZWVrUGVuZGluZykgewogICAgICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIGNvbW1pdHRpbmcgcGVu
ZGluZyBzZWVrIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBtX3NlZWtJc1BlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fc2Vla2lu
ZyA9IGRvU2VlayhtX3NlZWtUaW1lLCBtX3BsYXllci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxHc3RT
ZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7
Ci0gICAgICAgICAgICBpZiAoIW1fc2Vla2luZykgeworICAgICAgICAgICAgbV9pc1NlZWtQZW5k
aW5nID0gZmFsc2U7CisgICAgICAgICAgICBtX2lzU2Vla2luZyA9IGRvU2VlayhtX3NlZWtUaW1l
LCBtX3BsYXllci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZM
QUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7CisgICAgICAgICAgICBpZiAoIW1f
aXNTZWVraW5nKSB7CiAgICAgICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKTsKICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJbU2Vla10gc2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1l
KS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIH0KQEAgLTI3MTgsNyArMjY5MCw3IEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbnMgPSBnc3Rfc3Ry
dWN0dXJlX2dldF92YWx1ZShtX21lZGlhTG9jYXRpb25zLCAibG9jYXRpb25zIik7Ci0gICAgY29u
c3QgZ2NoYXIqIG5ld0xvY2F0aW9uID0gbnVsbHB0cjsKKyAgICBjb25zdCBjaGFyKiBuZXdMb2Nh
dGlvbiA9IG51bGxwdHI7CiAKICAgICBpZiAoIWxvY2F0aW9ucykgewogICAgICAgICAvLyBGYWxs
YmFjayBvbiBuZXctbG9jYXRpb24gc3RyaW5nLgpAQCAtMjc3NSw3ICsyNzQ3LDcgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24oKQogICAgICAgICAg
ICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAKICAgICAgICAgICAgIC8vIFJlc2V0
IHBpcGVsaW5lIHN0YXRlLgotICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG1fc2hvdWxkUmVzZXRQaXBlbGluZSA9IHRydWU7CiAKICAgICAgICAgICAgIEdz
dFN0YXRlIHN0YXRlOwogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7CkBAIC0yODAxLDcgKzI3NzMsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKCkKICAgICAvLyBwb3NpdGlvbiBp
cyBub3QgYWx3YXlzIHJlcG9ydGVkIGFzIDAgZm9yIGluc3RhbmNlLgogICAgIG1fY2FjaGVkUG9z
aXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAgICAgTWVkaWFUaW1lIG5vdyA9IGN1
cnJlbnRNZWRpYVRpbWUoKTsKLSAgICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYm
ICFtX3NlZWtpbmcpIHsKKyAgICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmICFt
X2lzU2Vla2luZykgewogICAgICAgICBtX2NhY2hlZER1cmF0aW9uID0gbm93OwogICAgICAgICBt
X3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgfQpAQCAtMjgwOSw5ICsyNzgxLDkgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCiAgICAgbV9pc0VuZFJl
YWNoZWQgPSB0cnVlOwogCiAgICAgaWYgKCFtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJ
c0xvb3BpbmcoKSkgewotICAgICAgICBtX3BhdXNlZCA9IHRydWU7CisgICAgICAgIG1faXNQYXVz
ZWQgPSB0cnVlOwogICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7
Ci0gICAgICAgIG1fZG93bmxvYWRGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICBtX2RpZERvd25s
b2FkRmluaXNoID0gZmFsc2U7CiAgICAgfQogICAgIHRpbWVDaGFuZ2VkKCk7CiB9CkBAIC0yODY0
LDEyICsyODM2LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVE
b3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKQogICAgIHVuc2lnbmVkIGZsYWdEb3dubG9hZCA9IGdldEdz
dFBsYXlGbGFnKCJkb3dubG9hZCIpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdG9wIGRv
d25sb2FkaW5nIGlmIHdlIGFscmVhZHkgc3RhcnRlZCBpdC4KLSAgICBpZiAoZmxhZ3MgJiBmbGFn
RG93bmxvYWQgJiYgbV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFt
X3Jlc2V0UGlwZWxpbmUpIHsKKyAgICBpZiAoZmxhZ3MgJiBmbGFnRG93bmxvYWQgJiYgbV9yZWFk
eVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFtX3Nob3VsZFJlc2V0UGlwZWxp
bmUpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRG93bmxvYWQgYWxy
ZWFkeSBzdGFydGVkLCBub3Qgc3RhcnRpbmcgYWdhaW4iKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGJvb2wgc2hvdWxkRG93bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVs
b2FkID09IE1lZGlhUGxheWVyOjpBdXRvOworICAgIGJvb2wgc2hvdWxkRG93bmxvYWQgPSAhbV9p
c0xpdmVTdHJlYW0gJiYgbV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpBdXRvOwogICAgIGlmIChz
aG91bGREb3dubG9hZCkgewogICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVu
YWJsaW5nIG9uLWRpc2sgYnVmZmVyaW5nIik7CiAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVs
aW5lLmdldCgpLCAiZmxhZ3MiLCBmbGFncyB8IGZsYWdEb3dubG9hZCwgbnVsbHB0cik7CkBAIC0y
ODgzLDcgKzI4NTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
RG93bmxvYWRCdWZmZXJpbmdGbGFnKCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGlwZWxp
bmVOYW1lKQogewotICAgIGNvbnN0IGdjaGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKKyAg
ICBjb25zdCBjaGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKIAogICAgIC8vIE1TRSBkb2Vz
bid0IHN1cHBvcnQgcGxheWJpbjMuIE1lZGlhc3RyZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1
bGFyCiAgICAgLy8gcGxheWJhY2sgY2FuIHVzZSBwbGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUg
V0VCS0lUX0dTVF9VU0VfUExBWUJJTjMKQEAgLTI5MDYsOCArMjg3OCw2IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmCiAKICAgICBtX2lzTGVnYWN5UGxheWJpbiA9ICFnX3N0cmNtcDAocGxheWJp
bk5hbWUsICJwbGF5YmluIik7CiAKLSAgICAvLyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSBy
ZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJlbmNlIHNvCi0gICAgLy8gd2Ugc2hvdWxkIG5vdCBhZG9w
dC4KICAgICBzdGF0aWMgQXRvbWljPHVpbnQzMl90PiBwaXBlbGluZUlkOwogICAgIHNldFBpcGVs
aW5lKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShwbGF5YmluTmFtZSwKICAgICAgICAgKHBpcGVs
aW5lTmFtZS5pc0VtcHR5KCkgPyBtYWtlU3RyaW5nKCJtZWRpYS1wbGF5ZXItIiwgcGlwZWxpbmVJ
ZC5leGNoYW5nZUFkZCgxKSkgOiBwaXBlbGluZU5hbWUpLnV0ZjgoKS5kYXRhKCkpKTsKQEAgLTI5
NzMsNyArMjk0Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVH
U1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAKICAgICBjb25maWd1cmVQ
bGF5U2luaygpOwogCi0gICAgaWYgKG1fcHJlc2VydmVzUGl0Y2gpIHsKKyAgICBpZiAobV9zaG91
bGRQcmVzZXJ2ZVBpdGNoKSB7CiAgICAgICAgIEdzdEVsZW1lbnQqIHNjYWxlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJzY2FsZXRlbXBvIiwgbnVsbHB0cik7CiAKICAgICAgICAgaWYgKCFz
Y2FsZSkKQEAgLTI5ODIsNyArMjk1Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAgICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWZpbHRlciIsIHNj
YWxlLCBudWxscHRyKTsKICAgICB9CiAKLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVy
YXRlZCkgeworICAgIGlmICghbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVkKSB7CiAgICAgICAg
IC8vIElmIG5vdCB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgbGV0IEdTdHJlYW1lciBo
YW5kbGUKICAgICAgICAgLy8gdGhlIGltYWdlLW9yaWVudGF0aW9uIHRhZy4KICAgICAgICAgR3N0
RWxlbWVudCogdmlkZW9GbGlwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb2ZsaXAi
LCBudWxscHRyKTsKQEAgLTMwMDcsNyArMjk3Nyw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpkaWRQYXNzQ09SU0FjY2Vzc0NoZWNrKCkgY29uc3QKIAogYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNhblNhdmVNZWRpYURhdGEoKSBjb25zdAogewotICAgIGlm
IChpc0xpdmVTdHJlYW0oKSkKKyAgICBpZiAobV9pc0xpdmVTdHJlYW0pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChtX3VybC5pc0xvY2FsRmlsZSgpKQpAQCAtMzAyNyw3ICsyOTk3
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZCgp
CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVyYXRlZFJlbmRlcmlu
Z1N0YXRlQ2hhbmdlZCgpCiB7Ci0gICAgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkID0gbV9w
bGF5ZXIgJiYgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQoKTsKKyAgICBtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQgPSBtX3BsYXll
ciAmJiBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCgpOwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQpAQCAtMzA3NSw3ICsz
MDQ1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hUZXh0dXJlVG9D
b21wb3NpdG9yKCkKICAgICAgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0Zy
YW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4o
bV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZs
YWdzLCAhbV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0Vmlk
ZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1f
dGV4dHVyZU1hcHBlckZsYWdzLCAhbV9pc1VzaW5nRmFsbGJhY2tWaWRlb1NpbmspOwogCiAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+
IGxheWVyQnVmZmVyOwogICAgICAgICAgICAgaWYgKGZyYW1lSG9sZGVyLT5oYXNNYXBwZWRUZXh0
dXJlcygpKSB7CkBAIC0zMTE3LDIzICszMDg3LDIzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpyZXBhaW50KCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQogewotICAgIGJvb2wgdHJpZ2dlclJl
c2l6ZTsKKyAgICBib29sIHNob3VsZFRyaWdnZXJSZXNpemU7CiAgICAgewogICAgICAgICBhdXRv
IHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotICAgICAgICB0cmlnZ2Vy
UmVzaXplID0gIW1fc2FtcGxlOworICAgICAgICBzaG91bGRUcmlnZ2VyUmVzaXplID0gIW1fc2Ft
cGxlOwogICAgICAgICBtX3NhbXBsZSA9IHNhbXBsZTsKICAgICB9CiAKLSAgICBpZiAodHJpZ2dl
clJlc2l6ZSkgeworICAgIGlmIChzaG91bGRUcmlnZ2VyUmVzaXplKSB7CiAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkZpcnN0IHNhbXBsZSByZWFjaGVkIHRoZSBzaW5rLCB0
cmlnZ2VyaW5nIHZpZGVvIGRpbWVuc2lvbnMgdXBkYXRlIik7CiAgICAgICAgIG1fbm90aWZpZXIt
Pm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpTaXplQ2hhbmdlZCwgW3RoaXNdIHsKICAg
ICAgICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOwogICAgICAgICB9KTsKICAgICB9CiAK
LSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgeworICAgIGlmICghbV9jYW5S
ZW5kZXJpbmdCZUFjY2VsZXJhdGVkKSB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJh
d011dGV4KTsKLSAgICAgICAgaWYgKG1fZGVzdHJveWluZykKKyAgICAgICAgaWYgKG1faXNCZWlu
Z0Rlc3Ryb3llZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kcmF3VGltZXIuc3Rh
cnRPbmVTaG90KDBfcyk7CiAgICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1fZHJhd011dGV4
KTsKQEAgLTMxNDEsNyArMzExMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUqIHNhbXBsZSkKICAgICB9CiAKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykgeworICAg
IGlmIChtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luaykgewogICAgICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9kcmF3TXV0ZXgpOwogICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KICAgICAgICAg
ICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKQEAgLTMx
NzcsMTAgKzMxNDcsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhbmNl
bFJlcGFpbnQoYm9vbCBkZXN0cm95aW5nKQogICAgIC8vCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBhbHNvIHVzZWQgd2hlbiBkZXN0cm95aW5nIHRoZSBwbGF5ZXIgKGRlc3Ryb3lpbmcgcGFyYW1l
dGVyIGlzIHRydWUpLCB0byByZWxlYXNlIHRoZSBnc3RyZWFtZXIgdGhyZWFkIGZyb20KICAgICAv
LyBtX2RyYXdDb25kaXRpb24gYW5kIHRvIGVuc3VyZSB0aGF0IG5ldyB0cmlnZ2VyUmVwYWludCBj
YWxscyB3b24ndCB3YWl0IG9uIG1fZHJhd0NvbmRpdGlvbi4KLSAgICBpZiAoIW1fcmVuZGVyaW5n
Q2FuQmVBY2NlbGVyYXRlZCkgeworICAgIGlmICghbV9jYW5SZW5kZXJpbmdCZUFjY2VsZXJhdGVk
KSB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4KTsKICAgICAgICAgbV9k
cmF3VGltZXIuc3RvcCgpOwotICAgICAgICBtX2Rlc3Ryb3lpbmcgPSBkZXN0cm95aW5nOworICAg
ICAgICBtX2lzQmVpbmdEZXN0cm95ZWQgPSBkZXN0cm95aW5nOwogICAgICAgICBtX2RyYXdDb25k
aXRpb24ubm90aWZ5T25lKCk7CiAgICAgfQogfQpAQCAtMzI2Miw5ICszMjMyLDkgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0SW5wdXRDYXBzID0g
Y2FwczsKICAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19jb3B5KGNhcHMpKTsKICNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFO
Ci0gICAgICAgICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9f
SEFTX0FMUEhBKCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIkJHUngiOworICAgICAgICAgICAgY29u
c3QgY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0lu
Zm8pID8gIlJHQkEiIDogIkJHUngiOwogI2Vsc2UKLSAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBm
b3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdC
QSIgOiAiUkdCeCI7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1Rf
VklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiUkdCeCI7CiAjZW5k
aWYKICAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUobV9jb2xvckNvbnZlcnRPdXRwdXRD
YXBzLmdldCgpLCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgZm9ybWF0U3RyaW5nLCBudWxscHRy
KTsKICAgICAgICAgICAgIGlmICghZ3N0X2dsX2NvbG9yX2NvbnZlcnRfc2V0X2NhcHMobV9jb2xv
ckNvbnZlcnQuZ2V0KCksIGNhcHMsIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSkpCkBA
IC0zMjg1LDcgKzMyNTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogICAgIGlmICghZ3N0
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQuZHJhd0ltYWdlKGdzdEltYWdl
LT5pbWFnZSgpLCByZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7IENvbXBvc2l0ZUNvcHksIG1fcmVu
ZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA6IEltYWdl
T3JpZW50YXRpb24oKSB9KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShnc3RJbWFnZS0+aW1hZ2Uo
KSwgcmVjdCwgZ3N0SW1hZ2UtPnJlY3QoKSwgeyBDb21wb3NpdGVDb3B5LCBtX2NhblJlbmRlcmlu
Z0JlQWNjZWxlcmF0ZWQgPyBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gOiBJbWFnZU9yaWVudGF0
aW9uKCkgfSk7CiB9CiAKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQpAQCAtMzI5Myw3ICszMjYzLDcg
QEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnQKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7
CiAKLSAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQorICAgIGlmIChtX2lzVXNpbmdG
YWxsYmFja1ZpZGVvU2luaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHByZW11
bHRpcGx5QWxwaGEpCkBAIC0zMzI1LDcgKzMyOTUsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dAogTmF0aXZlSW1hZ2VQdHIgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRUaW1lKCkKIHsKICNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykKKyAgICBpZiAo
bV9pc1VzaW5nRmFsbGJhY2tWaWRlb1NpbmspCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKQEAgLTM0MDYs
NyArMzM3Niw3IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bW92aWVMb2FkVHlwZSgpIGNvbnN0CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6
VW5rbm93bjsKIAotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKKyAgICBpZiAobV9pc0xpdmVTdHJl
YW0pCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKIAogICAgIHJldHVy
biBNZWRpYVBsYXllcjo6RG93bmxvYWQ7CkBAIC0zNDg0LDEyICszNDU0LDEyIEBAIEdzdEVsZW1l
bnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rKCkKICNlbmRp
ZgogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBpZiAobV9yZW5kZXJpbmdDYW5CZUFjY2Vs
ZXJhdGVkKQorICAgIGlmIChtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1f
dmlkZW9TaW5rID0gY3JlYXRlVmlkZW9TaW5rR0woKTsKICNlbmRpZgogCiAgICAgaWYgKCFtX3Zp
ZGVvU2luaykgewotICAgICAgICBtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmsgPSB0cnVlOworICAg
ICAgICBtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luayA9IHRydWU7CiAgICAgICAgIG1fdmlkZW9T
aW5rID0gd2Via2l0VmlkZW9TaW5rTmV3KCk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX3ZpZGVvU2luay5nZXQoKSwgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyhy
ZXBhaW50Q2FsbGJhY2spLCB0aGlzKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1jYW5jZWxsZWQiLCBHX0NBTExCQUNLKHJlcGFp
bnRDYW5jZWxsZWRDYWxsYmFjayksIHRoaXMpOwpAQCAtMzU0Myw3ICszNTEzLDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3Ry
ZWFtVm9sdW1lKiB2b2x1bWUKIAogdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgZ3VpbnQ2NCBkZWNvZGVkRnJhbWVz
ID0gMDsKKyAgICB1aW50NjRfdCBkZWNvZGVkRnJhbWVzID0gMDsKICAgICBpZiAobV9mcHNTaW5r
KQogICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5rLmdldCgpLCAiZnJhbWVzLXJlbmRlcmVk
IiwgJmRlY29kZWRGcmFtZXMsIG51bGxwdHIpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZGVjb2RlZEZyYW1lcyk7CkBAIC0zNTUxLDcgKzM1MjEsNyBAQCB1bnNpZ25lZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRlY29kZWRGcmFtZUNvdW50KCkgY29uc3QKIAogdW5z
aWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3VudCgpIGNv
bnN0CiB7Ci0gICAgZ3VpbnQ2NCBmcmFtZXNEcm9wcGVkID0gMDsKKyAgICB1aW50NjRfdCBmcmFt
ZXNEcm9wcGVkID0gMDsKICAgICBpZiAobV9mcHNTaW5rKQogICAgICAgICBnX29iamVjdF9nZXQo
bV9mcHNTaW5rLmdldCgpLCAiZnJhbWVzLWRyb3BwZWQiLCAmZnJhbWVzRHJvcHBlZCwgbnVsbHB0
cik7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcmFtZXNEcm9wcGVkKTsKQEAg
LTM2NDksOCArMzYxOSw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdHRl
bXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKENETUluc3RhbmNlJiBpbnN0CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2Uo
KQogewotICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudChwaXBl
bGluZSgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1f
T09CLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXR0ZW1wdC10by1kZWNyeXB0IikpKTsKLSAg
ICBHU1RfREVCVUcoImF0dGVtcHRpbmcgdG8gZGVjcnlwdCwgZXZlbnQgaGFuZGxlZCAlcyIsIGJv
b2xGb3JQcmludGluZyhldmVudEhhbmRsZWQpKTsKKyAgICBib29sIHdhc0V2ZW50SGFuZGxlZCA9
IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQocGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25ld19jdXN0b20o
R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHko
ImF0dGVtcHQtdG8tZGVjcnlwdCIpKSk7CisgICAgR1NUX0RFQlVHKCJhdHRlbXB0aW5nIHRvIGRl
Y3J5cHQsIGV2ZW50IGhhbmRsZWQgJXMiLCBib29sRm9yUHJpbnRpbmcod2FzRXZlbnRIYW5kbGVk
KSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVQcm90ZWN0
aW9uRXZlbnQoR3N0RXZlbnQqIGV2ZW50KQpAQCAtMzY2OSwxNSArMzYzOSwxNSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50
KiBldmVudCkKICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0
ZW1VVUlELCBpbml0RGF0YX0pOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0V2FpdGluZ0ZvcktleShib29sIHdhaXRpbmdGb3JLZXkpCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIGlzV2FpdGluZ0ZvcktleSkK
IHsKICAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ugb3IgaWYgd2Ug
YXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2Fp
dGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgid2FpdGluZ0ZvcktleSAlcywgbV93YWl0
aW5nRm9yS2V5ICVzIiwgYm9vbEZvclByaW50aW5nKHdhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJp
bnRpbmcobV93YWl0aW5nRm9yS2V5KSk7Ci0gICAgaWYgKHdhaXRpbmdGb3JLZXkgPT0gbV93YWl0
aW5nRm9yS2V5IHx8ICghd2FpdGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQor
ICAgIEdTVF9UUkFDRSgiaXNXYWl0aW5nRm9yS2V5ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIs
IGJvb2xGb3JQcmludGluZyhpc1dhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dh
aXRpbmdGb3JLZXkpKTsKKyAgICBpZiAoaXNXYWl0aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9y
S2V5IHx8ICghaXNXYWl0aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fd2FpdGluZ0ZvcktleSA9IHdhaXRpbmdGb3JLZXk7Ci0gICAg
R1NUX0RFQlVHKCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAlcyIsIGJvb2xGb3JQcmludGluZyht
X3dhaXRpbmdGb3JLZXkpKTsKKyAgICBtX2lzV2FpdGluZ0ZvcktleSA9IGlzV2FpdGluZ0Zvcktl
eTsKKyAgICBHU1RfREVCVUcoIndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclBy
aW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7CiAgICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlD
aGFuZ2VkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAppbmRleCAyNzkwZWMzZGI1ZGE5M2NkNjg5ZTIzYmMyOWMyZDUzZjE3YThlM2JiLi4yY2E4
NmQ0ZGZiZDMyYjM5ODZlZDMxYzQ5NGJmNGFiOWU4NDVjNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0xMjAsMTcgKzEyMCwxNCBAQCBjbGFz
cyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRl
SW50ZXJmYWNlLCBwdWJsaWMgQwogewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KCk7Ci0KICAgICBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIH5N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKTsKIAotICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlKCk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhcik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZXh0ZW5kZWRT
dXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYsIE1lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUpOwogCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1faGFzVmlkZW87IH0KLSAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9oYXNBdWRpbzsgfQotCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faGFzVmlkZW87IH0KKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9oYXNBdWRpbzsgfQogICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcgJnVy
bCkgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICB2b2lkIGxvYWQoY29u
c3QgU3RyaW5nJiB1cmwsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopIG92ZXJyaWRlOwpAQCAt
MTM4LDgxICsxMzUsNTcgQEAgcHVibGljOgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
dm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSYpIG92ZXJyaWRlOwogI2VuZGlmCi0gICAgdm9p
ZCBjb21taXRMb2FkKCk7Ci0gICAgdm9pZCBjYW5jZWxMb2FkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHByZXBhcmVUb1BsYXkoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXkoKSBvdmVycmlkZTsK
KyAgICB2b2lkIGNhbmNlbExvYWQoKSBmaW5hbDsKKyAgICB2b2lkIHByZXBhcmVUb1BsYXkoKSBm
aW5hbDsKKyAgICB2b2lkIHBsYXkoKSBmaW5hbDsKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBwYXVzZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHNlZWtpbmcoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NlZWtpbmc7IH0KKyAgICBib29sIHBhdXNlZCgpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
aXNTZWVraW5nOyB9CiAgICAgdm9pZCBzZWVrKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwot
Ci0gICAgTWVkaWFUaW1lIHBsYXRmb3JtRHVyYXRpb24oKSBjb25zdDsKLQogICAgIHZvaWQgc2V0
UmF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgZG91YmxlIHJhdGUoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCkgb3ZlcnJpZGU7Ci0KKyAgICBkb3VibGUgcmF0
ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgZmluYWw7
IAorICAgIHZvaWQgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCkgZmluYWw7CiAgICAg
RmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldFZvbHVt
ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgZmxvYXQgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHNldE11dGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgbXV0ZWQoKSBjb25z
dDsKLQotICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaXplQ2hh
bmdlZCgpOwotCisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOworICAgIGZsb2F0IHZv
bHVtZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgZmluYWw7CisgICAg
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdCBmaW5hbDsKKyAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBzZXRWaXNpYmxlKGJvb2wpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJ
bnRTaXplJikgZmluYWw7CiAgICAgLy8gUHJlZmVyIE1lZGlhVGltZSBiYXNlZCBtZXRob2RzIG92
ZXIgZmxvYXQgYmFzZWQuCi0KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGR1cmF0aW9uTWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9Ci0gICAgZG91YmxlIGR1cmF0
aW9uRG91YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50
b0RvdWJsZSgpOyB9Ci0gICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBj
dXJyZW50TWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lRG91
YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY3VycmVudE1lZGlhVGltZSgpLnRvRG91Ymxl
KCk7IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGR1cmF0aW9u
TWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9CisgICAgZG91YmxlIGR1cmF0aW9uRG91YmxlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0RvdWJsZSgpOyB9CisgICAg
TWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Q7CisgICAgZmxvYXQgY3VycmVudFRp
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9
CisgICAgZG91YmxlIGN1cnJlbnRUaW1lRG91YmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gY3Vy
cmVudE1lZGlhVGltZSgpLnRvRG91YmxlKCk7IH0KICAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlh
VGltZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVS
YW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZWVrKGZsb2F0IHRp
bWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhGbG9hdCh0aW1lKSk7IH0K
LSAgICB2b2lkIHNlZWtEb3VibGUoZG91YmxlIHRpbWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRp
bWU6OmNyZWF0ZVdpdGhEb3VibGUodGltZSkpOyB9Ci0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2Fi
bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxv
YXQoKTsgfQorICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lKSBmaW5hbCB7IHNlZWsoTWVkaWFUaW1l
OjpjcmVhdGVXaXRoRmxvYXQodGltZSkpOyB9CisgICAgdm9pZCBzZWVrRG91YmxlKGRvdWJsZSB0
aW1lKSBmaW5hbCB7IHNlZWsoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpKTsgfQor
ICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1heE1lZGlh
VGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9CiAgICAgTWVkaWFUaW1lIG1heE1lZGlhVGltZVNl
ZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgZG91YmxlIG1pblRpbWVTZWVrYWJsZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1pbk1lZGlhVGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9
Ci0gICAgTWVkaWFUaW1lIG1pbk1lZGlhVGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0KLSAgICBib29sIGRpZExvYWRpbmdQcm9n
cmVzcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVz
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8Ym9vbD4gd291bGRUYWludE9yaWdpbihjb25z
dCBTZWN1cml0eU9yaWdpbiYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaW11bGF0ZUF1
ZGlvSW50ZXJydXB0aW9uKCkgb3ZlcnJpZGU7Ci0KKyAgICBkb3VibGUgbWluVGltZVNlZWthYmxl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbWluTWVkaWFUaW1lU2Vla2FibGUoKS50b0Zsb2F0KCk7
IH0KKyAgICBNZWRpYVRpbWUgbWluTWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVz
cygpIGNvbnN0IGZpbmFsOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzKCkgY29u
c3QgZmluYWw7CisgICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IGZpbmFs
OworICAgIE9wdGlvbmFsPGJvb2w+IHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmln
aW4mKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKSBm
aW5hbDsKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1
ZGlvU291cmNlUHJvdmlkZXIoKSBvdmVycmlkZTsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBh
dWRpb1NvdXJjZVByb3ZpZGVyKCkgZmluYWw7CiAjZW5kaWYKKyAgICB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QgZmluYWw7CisgICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUg
bW92aWVMb2FkVHlwZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBkZWNvZGVk
RnJhbWVDb3VudCgpIGNvbnN0IGZpbmFsOworICAgIHVuc2lnbmVkIGRyb3BwZWRGcmFtZUNvdW50
KCkgY29uc3QgZmluYWw7CisgICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29u
c3QgZmluYWw7CisgICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QgZmlu
YWw7CiAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9w
bGF5ZXI7IH0KLQotICAgIHVuc2lnbmVkIGRlY29kZWRGcmFtZUNvdW50KCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdW5zaWduZWQgZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB1bnNpZ25lZCBhdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB1
bnNpZ25lZCB2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZv
aWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgZmluYWw7CiAKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlOwpAQCAtMjI1LDI5ICsxOTgsMjMgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIHZvaWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1J
bnN0YW5jZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0
YW5jZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgaGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgp
OworICAgIHZvaWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYpIGZpbmFsOworICAg
IHZvaWQgY2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYpIGZpbmFsOwogICAgIHZvaWQg
YXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOwotICAgIHZv
aWQgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7Ci0gICAgdm9pZCBz
ZXRXYWl0aW5nRm9yS2V5KGJvb2wpOwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSgpIGNvbnN0IG92
ZXJyaWRlOwotI2VuZGlmCisgICAgYm9vbCB3YWl0aW5nRm9yS2V5KCkgY29uc3QgZmluYWw7CiAK
LSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFy
YW1ldGVycyYsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUpOworICAgIHZvaWQgaGFuZGxlUHJv
dGVjdGlvbkV2ZW50KEdzdEV2ZW50Kik7CisjZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wp
CiAgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdD
M0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2
b2lkIHNldFZpZGVvU291cmNlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbik7Ci0gICAgR3N0
RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CiAg
ICAgdm9pZCBlbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUs
IHVuc2lnbmVkIGluZGV4KTsKIAogICAgIC8vIEFwcGVuZCBwaXBlbGluZSBpbnRlcmZhY2UKKyAg
ICAvLyBGSVhNRTogVXNlIHRoZSBjbGllbnQgaW50ZXJmYWNlIHBhdHRlcm4sIEFwcGVuZFBpcGVs
aW5lIGRvZXMgbm90IG5lZWQgdGhlIGZ1bGwgaW50ZXJmYWNlIHRvIHRoaXMgY2xhc3MganVzdCBm
b3IgdGhlc2UgdHdvIGZ1bmN0aW9ucy4KICAgICBib29sIGhhbmRsZVN5bmNNZXNzYWdlKEdzdE1l
c3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwogCkBAIC0yNzAs
MTUgKzIzNywxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmVhbUNvbGxlY3Rpb25DaGFuZ2Vk
ID0gMSA8PCA3CiAgICAgfTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25z
dCB7IHJldHVybiBtX2lzU3RyZWFtaW5nOyB9Ci0gICAgTWVkaWFUaW1lIG1heFRpbWVMb2FkZWQo
KSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3Ry
aW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworI2VuZGlmCiAKICAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVNl
dHVwKEdzdEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgY29uZmlndXJlUGxheVNpbmsoKSB7
IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSk7CiAKLQog
I2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQogICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUhvbGVQ
dW5jaFZpZGVvU2luaygpOwogICAgIHZvaWQgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKQEAg
LTI5MiwxMCArMjYwLDEwIEBAIHByb3RlY3RlZDoKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
CiAgICAgdm9pZCBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOwogI2lmIFVTRShOSUNPU0lBKQot
ICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpIGZpbmFsOwogI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHN3YXBCdWZmZXJz
SWZOZWVkZWQoKSBmaW5hbDsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTMxNyw5ICsyODUsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdm9sdW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciopOwogICAgIHN0YXRpYyB2b2lkIG11dGVDaGFuZ2VkQ2FsbGJh
Y2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CiAKLSAgICAvLyBGSVhNRTogV2hlcmUg
aXMgdGhpcyB1c2VkPwotICAgIHZvaWQgaGFuZGxlUGx1Z2luSW5zdGFsbGVyUmVzdWx0KEdzdElu
c3RhbGxQbHVnaW5zUmV0dXJuKTsKLQogICAgIHZvaWQgcmVhZHlUaW1lckZpcmVkKCk7CiAKICAg
ICB2b2lkIG5vdGlmeVBsYXllck9mVmlkZW8oKTsKQEAgLTM1OCwyMiArMzIzLDIyIEBAIHByb3Rl
Y3RlZDoKICAgICBtdXRhYmxlIE1lZGlhVGltZSBtX2NhY2hlZFBvc2l0aW9uOwogICAgIG11dGFi
bGUgTWVkaWFUaW1lIG1fY2FjaGVkRHVyYXRpb247CiAgICAgYm9vbCBtX2NhbkZhbGxCYWNrVG9M
YXN0RmluaXNoZWRTZWVrUG9zaXRpb24geyBmYWxzZSB9OwotICAgIGJvb2wgbV9jaGFuZ2luZ1Jh
dGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9kb3dubG9hZEZpbmlzaGVkIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fZXJyb3JPY2N1cmVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNDaGFuZ2luZ1Jh
dGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWREb3dubG9hZEZpbmlzaCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2RpZEVycm9yT2NjdXIgeyBmYWxzZSB9OwogICAgIG11dGFibGUgYm9vbCBtX2lz
RW5kUmVhY2hlZCB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBib29sIG1faXNTdHJlYW1pbmcgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9wYXVzZWQgeyB0cnVlIH07CisgICAgbXV0YWJsZSBib29sIG1f
aXNMaXZlU3RyZWFtIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQYXVzZWQgeyB0cnVlIH07CiAg
ICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAxIH07CiAgICAgR3N0U3RhdGUgbV9jdXJyZW50U3Rh
dGU7CiAgICAgR3N0U3RhdGUgbV9vbGRTdGF0ZTsKICAgICBHc3RTdGF0ZSBtX3JlcXVlc3RlZFN0
YXRlIHsgR1NUX1NUQVRFX1ZPSURfUEVORElORyB9OwotICAgIGJvb2wgbV9yZXNldFBpcGVsaW5l
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2Vla2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nl
ZWtJc1BlbmRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRSZXNldFBpcGVsaW5lIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNTZWVraW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNT
ZWVrUGVuZGluZyB7IGZhbHNlIH07CiAgICAgTWVkaWFUaW1lIG1fc2Vla1RpbWU7CiAgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJjZSB7IG51bGxwdHIgfTsKLSAgICBib29sIG1fdm9sdW1l
QW5kTXV0ZUluaXRpYWxpemVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYXJlVm9sdW1lQW5kTXV0
ZUluaXRpYWxpemVkIHsgZmFsc2UgfTsKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAg
ICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fdGV4dHVyZU1hcHBlckZsYWdzOwpAQCAtMzkxLDEw
ICszNTYsMTAgQEAgcHJvdGVjdGVkOgogICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsK
IAogICAgIG11dGFibGUgRmxvYXRTaXplIG1fdmlkZW9TaXplOwotICAgIGJvb2wgbV91c2luZ0Zh
bGxiYWNrVmlkZW9TaW5rIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVuZGVyaW5nQ2FuQmVBY2Nl
bGVyYXRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVXNpbmdGYWxsYmFja1ZpZGVvU2luayB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2NhblJlbmRlcmluZ0JlQWNjZWxlcmF0ZWQgeyBmYWxzZSB9
OwogCi0gICAgYm9vbCBtX2Rlc3Ryb3lpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0JlaW5n
RGVzdHJveWVkIHsgZmFsc2UgfTsKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4gbV92aWRlb1RleHR1cmVDb3Bp
ZXI7CkBAIC00MTIsMTcgKzM3NywyMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTG9jayBtX3Byb3RlY3Rp
b25NdXRleDsgLy8gR3VhcmRzIGFjY2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgog
ICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CiAKLSAgICBi
b29sIG1fd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzV2FpdGluZ0Zvcktl
eSB7IGZhbHNlIH07CiAjZW5kaWYKIAogICAgIE9wdGlvbmFsPEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtPiBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtOwogCiBwcml2YXRlOgorICAgIE1lZGlhVGltZSBt
YXhUaW1lTG9hZGVkKCkgY29uc3Q7CisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7
IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CisgICAgdm9pZCBzZXRWaWRlb1NvdXJjZU9yaWVu
dGF0aW9uKEltYWdlT3JpZW50YXRpb24pOworICAgIE1lZGlhVGltZSBwbGF0Zm9ybUR1cmF0aW9u
KCkgY29uc3Q7CisgICAgYm9vbCBpc011dGVkKCkgY29uc3Q7CisgICAgdm9pZCBjb21taXRMb2Fk
KCk7CiAgICAgdm9pZCBmaWxsVGltZXJGaXJlZCgpOwotCiAgICAgdm9pZCBkaWRFbmQoKTsKIAot
CiAgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCk7CiAgICAgR3N0RWxlbWVudCogY3Jl
YXRlQXVkaW9TaW5rKCk7CiAgICAgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3Q7CkBAIC00
NzUsMjAgKzQ0NCwyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVHJhY2tzKCk7CiAgICAg
dm9pZCBjbGVhclRyYWNrcygpOwogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICB2
b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOworICAgIHZvaWQgaW5pdGlh
bGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7CisgICAgdm9pZCBzZXRXYWl0aW5n
Rm9yS2V5KGJvb2wpOworI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBtX3RleHRBcHBTaW5rOwogICAgIEdSZWZQdHI8R3N0UGFkPiBtX3Rl
eHRBcHBTaW5rUGFkOwogI2VuZGlmCiAgICAgR3N0U3RydWN0dXJlKiBtX21lZGlhTG9jYXRpb25z
IHsgbnVsbHB0ciB9OwogICAgIGludCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXggeyAwIH07
Ci0gICAgYm9vbCBtX3BsYXliYWNrUmF0ZVBhdXNlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQ
bGF5YmFja1JhdGVQYXVzZWQgeyBmYWxzZSB9OwogICAgIE1lZGlhVGltZSBtX3RpbWVPZk92ZXJs
YXBwaW5nU2VlazsKICAgICBmbG9hdCBtX2xhc3RQbGF5YmFja1JhdGUgeyAxIH07CiAgICAgVGlt
ZXIgbV9maWxsVGltZXI7CiAgICAgTWVkaWFUaW1lIG1fbWF4VGltZUxvYWRlZDsKICAgICBib29s
IG1fbG9hZGluZ1N0YWxsZWQgeyBmYWxzZSB9OwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1f
cHJlbG9hZDsKLSAgICBib29sIG1fZGVsYXlpbmdMb2FkIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aXNEZWxheWluZ0xvYWQgeyBmYWxzZSB9OwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fbWF4VGlt
ZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKICAgICBib29sIG1faGFzVmlkZW8geyBm
YWxzZSB9OwogICAgIGJvb2wgbV9oYXNBdWRpbyB7IGZhbHNlIH07CkBAIC01MDMsMTEgKzQ3OCwx
MSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKICNlbmRpZgogI2VuZGlmCi0gICAgYm9vbCBtX2J1ZmZl
cmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQnVmZmVyaW5nIHsgZmFsc2UgfTsKICAgICBp
bnQgbV9idWZmZXJpbmdQZXJjZW50YWdlIHsgMCB9OwogICAgIG11dGFibGUgdW5zaWduZWQgbG9u
ZyBsb25nIG1fdG90YWxCeXRlcyB7IDAgfTsKICAgICBVUkwgbV91cmw7Ci0gICAgYm9vbCBtX3By
ZXNlcnZlc1BpdGNoIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hvdWxkUHJlc2VydmVQaXRjaCB7
IGZhbHNlIH07CiAgICAgbXV0YWJsZSBPcHRpb25hbDxTZWNvbmRzPiBtX2xhc3RRdWVyeVRpbWU7
CiAgICAgYm9vbCBtX2lzTGVnYWN5UGxheWJpbjsKICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxl
Y3Rpb24+IG1fc3RyZWFtQ29sbGVjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCBlNjg4MGQ5OGU3ZmNhZDFk
MDUzZjg0ZWQzOGE2ZmQ4MTk4ZGU3Yjg2Li5kYzI0NWI0N2RlM2RlNzJmYWMyMzY3MmU1ZjZlZmQ0
YjM3NjI5YjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UuY3BwCkBAIC0xMzIsMTMgKzEzMiwxNCBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgTWVkaWFTb3Vy
Y2VQcml2YXRlQwogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cGF1c2Uo
KQogewotICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBuZWVk
IGRpcmVjdCBhY2Nlc3MgdG8gdGhpcyBtZW1iZXIuIFRoaXMgb3ZlcnJpZGUgaXMgcHJvYmFibHkg
bm90IG5lZWRlZC4KKyAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnBhdXNlKCk7CiB9CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKIHsKLSAgICBpZiAoVU5MSUtF
TFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQorICAgIGlmIChVTkxJS0VMWSghbV9w
aXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpKQogICAgICAgICByZXR1cm4gTWVkaWFUaW1lKCk7
CiAKICAgICByZXR1cm4gbV9tZWRpYVRpbWVEdXJhdGlvbjsKQEAgLTE0Niw3ICsxNDcsNyBAQCBN
ZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlhVGlt
ZSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNv
bnN0IE1lZGlhVGltZSYgdGltZSkKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwg
bV9lcnJvck9jY3VyZWQpKQorICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2RpZEVy
cm9yT2NjdXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBHU1RfSU5GTygiW1NlZWtdIHNlZWsg
YXR0ZW1wdCB0byAlcyBzZWNzIiwgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7CkBAIC0x
NTQsMTUgKzE1NSwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vl
ayhjb25zdCBNZWRpYVRpbWUmIHRpbWUpCiAgICAgLy8gQXZvaWQgdXNlbGVzcyBzZWVraW5nLgog
ICAgIE1lZGlhVGltZSBjdXJyZW50ID0gY3VycmVudE1lZGlhVGltZSgpOwogICAgIGlmICh0aW1l
ID09IGN1cnJlbnQpIHsKLSAgICAgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIGlmICghbV9p
c1NlZWtpbmcpCiAgICAgICAgICAgICB0aW1lQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Vla2luZyAmJiBtX3NlZWtJc1BlbmRpbmcp
IHsKKyAgICBpZiAobV9pc1NlZWtpbmcgJiYgbV9pc1NlZWtQZW5kaW5nKSB7CiAgICAgICAgIG1f
c2Vla1RpbWUgPSB0aW1lOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTc5LDcgKzE4MCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNvbnN0IE1lZGlh
VGltZSYgdGltZSkKICAgICB9CiAKICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwotICAgIEdT
VF9ERUJVRygibV9zZWVraW5nPSVzLCBtX3NlZWtUaW1lPSVzIiwgYm9vbEZvclByaW50aW5nKG1f
c2Vla2luZyksIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9E
RUJVRygibV9pc1NlZWtpbmc9JXMsIG1fc2Vla1RpbWU9JXMiLCBib29sRm9yUHJpbnRpbmcobV9p
c1NlZWtpbmcpLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNvbmZpZ3VyZVBsYXlTaW5rKCkKQEAg
LTIzMiw3ICsyMzMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9T
ZWVrKCkKICAgICBHc3RTZWVrRmxhZ3Mgc2Vla1R5cGUgPSBzdGF0aWNfY2FzdDxHc3RTZWVrRmxh
Z3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKTsKIAogICAg
IC8vIEFsd2F5cyBtb3ZlIHRvIHNlZWtpbmcgc3RhdGUgdG8gcmVwb3J0IGNvcnJlY3QgJ2N1cnJl
bnRUaW1lJyB3aGlsZSBwZW5kaW5nIGZvciBhY3R1YWwgc2VlayB0byBjb21wbGV0ZS4KLSAgICBt
X3NlZWtpbmcgPSB0cnVlOworICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKIAogICAgIC8vIENoZWNr
IGlmIHBsYXliYWNrIHBpcGVsaW5lIGlzIHJlYWR5IGZvciBzZWVrLgogICAgIEdzdFN0YXRlIHN0
YXRlLCBuZXdTdGF0ZTsKQEAgLTI0MCw3ICsyNDEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkKICAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NU
QVRFX0NIQU5HRV9GQUlMVVJFIHx8IGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
Tk9fUFJFUk9MTCkgewogICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBjYW5ub3Qgc2VlaywgY3Vy
cmVudCBzdGF0ZSBjaGFuZ2UgaXMgJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJu
X2dldF9uYW1lKGdldFN0YXRlUmVzdWx0KSk7CiAgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVh
ZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKLSAg
ICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKChnZXRTdGF0ZVJlc3VsdCA9PSBH
U1RfU1RBVEVfQ0hBTkdFX0FTWU5DCkBAIC0yNjIsMTkgKzI2MywxOSBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkKIAogICAgICAgICBHU1RfREVCVUcoIltT
ZWVrXSBEZWxheWluZyB0aGUgc2VlazogJXMiLCByZWFzb24uZGF0YSgpKTsKIAotICAgICAgICBt
X3NlZWtJc1BlbmRpbmcgPSB0cnVlOworICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSB0cnVlOwog
CiAgICAgICAgIGlmIChtX2lzRW5kUmVhY2hlZCkgewogICAgICAgICAgICAgR1NUX0RFQlVHKCJb
U2Vla10gcmVzZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IHRy
dWU7Ci0gICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fc2hvdWxk
UmVzZXRQaXBlbGluZSA9IHRydWU7CisgICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwog
ICAgICAgICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQog
ICAgICAgICAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgICAgICAg
ICAgICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBt
X3NlZWtpbmc7CisgICAgICAgIHJldHVybiBtX2lzU2Vla2luZzsKICAgICB9CiAKICAgICAvLyBT
dG9wIGFjY2VwdGluZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwgc2VlayBpcyBmaW5pc2hlZC4K
QEAgLTMwMCw3ICszMDEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
ZG9TZWVrKCkKICAgICAgICAgaWYgKHNldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
RkFJTFVSRSkgewogICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gQ2Fubm90IHNlZWssIGZh
aWxlZCB0byBwYXVzZSBwbGF5YmFjayBwaXBlbGluZS4iKTsKICAgICAgICAgICAgIHdlYktpdE1l
ZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkp
LCB0cnVlKTsKLSAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgbV9p
c1NlZWtpbmcgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOwpAQCAtMzE0
LDcgKzMxNSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWso
KQogICAgICAgICBtX21lZGlhU291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOwogICAgICAg
ICBBU1NFUlQobV9tc2VTZWVrQ29tcGxldGVkKTsKICAgICAgICAgLy8gTm90ZTogc2Vla0NvbXBs
ZXRlZCB3aWxsIHJlY3Vyc2l2ZWx5IGNhbGwgdXMuCi0gICAgICAgIHJldHVybiBtX3NlZWtpbmc7
CisgICAgICAgIHJldHVybiBtX2lzU2Vla2luZzsKICAgICB9CiAKICAgICBHU1RfREVCVUcoIldl
IGNhbiBzZWVrIG5vdyIpOwpAQCAtMzM3LDcgKzMzOCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWsoKQogICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IGZhbHNl
OwogICAgIGlmICghZ3N0X2VsZW1lbnRfc2VlayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1Rf
Rk9STUFUX1RJTUUsIHNlZWtUeXBlLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUo
c3RhcnRUaW1lKSwgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKSkg
ewogICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFf
U1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwor
ICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwogICAgICAgICBtX2dzdFNlZWtDb21wbGV0ZWQg
PSB0cnVlOwogICAgICAgICBHU1RfREVCVUcoImRvU2VlaygpOiBnc3RfZWxlbWVudF9zZWVrKCkg
ZmFpbGVkLCByZXR1cm5pbmcgZmFsc2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzUw
LDcgKzM1MSw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWso
KQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVr
KCkKIHsKLSAgICBpZiAoIW1fc2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxldGVkIHx8ICFtX2dz
dFNlZWtDb21wbGV0ZWQpCisgICAgaWYgKCFtX2lzU2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxl
dGVkIHx8ICFtX2dzdFNlZWtDb21wbGV0ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdzdFN0
YXRlIHN0YXRlLCBuZXdTdGF0ZTsKQEAgLTM2Miw5ICszNjMsOSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICBpZiAobV9pc1NlZWtQZW5k
aW5nKSB7CiAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIENvbW1pdHRpbmcgcGVuZGluZyBzZWVr
IHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1f
c2Vla0lzUGVuZGluZyA9IGZhbHNlOworICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSBmYWxzZTsK
ICAgICAgICAgaWYgKCFkb1NlZWsoKSkgewogICAgICAgICAgICAgR1NUX1dBUk5JTkcoIltTZWVr
XSBTZWVraW5nIHRvICVzIGZhaWxlZCIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRp
bWUoKTsKQEAgLTM3NSw3ICszNzYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6bWF5YmVGaW5pc2hTZWVrKCkKICAgICBHU1RfREVCVUcoIltTZWVrXSBTZWVrZWQgdG8g
JXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHdlYktpdE1l
ZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkp
LCB0cnVlKTsKLSAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICBtX2lzU2Vla2luZyA9IGZhbHNl
OwogICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAgICAg
Ly8gVGhlIHBpcGVsaW5lIGNhbiBzdGlsbCBoYXZlIGEgcGVuZGluZyBzdGF0ZS4gSW4gdGhpcyBj
YXNlIGEgcG9zaXRpb24gcXVlcnkgd2lsbCBmYWlsLgogICAgIC8vIFJpZ2h0IG5vdyB3ZSBjYW4g
dXNlIG1fc2Vla1RpbWUgYXMgYSBmYWxsYmFjay4KQEAgLTM5MCw3ICszOTEsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlUGxheWJhY2tSYXRlKCkKIAogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtpbmcoKSBjb25zdAogewotICAg
IHJldHVybiBtX3NlZWtpbmc7CisgICAgcmV0dXJuIG1faXNTZWVraW5nOwogfQogCiAvLyBGSVhN
RTogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIG1hbmFnZXMgdGhlIFJlYWR5U3RhdGUgb24g
aXRzIG93bi4gV2Ugc2hvdWxkbid0IGNoYW5nZSBpdCBtYW51YWxseS4KQEAgLTQyOCw3ICs0Mjks
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQogewotICAgIGlmICghbV9zZWVraW5n
KQorICAgIGlmICghbV9pc1NlZWtpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdTVF9ERUJV
RygiV2FpdGluZyBmb3IgTVNFIHNlZWsgY29tcGxldGVkIik7CkBAIC00NzksNyArNDgwLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZVNldHVwKEdzdEVsZW1l
bnQqIHNvdXJjZUVsZW1lbnQpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojp1cGRhdGVTdGF0ZXMoKQogewotICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2Vy
cm9yT2NjdXJlZCkpCisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZGlkRXJyb3JP
Y2N1cikpCiAgICAgICAgIHJldHVybjsKIAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
b2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CkBAIC00OTgsOCArNDk5LDggQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAg
IGlmIChtX2lzRW5kUmVhY2hlZCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSAoc3RhdGUgPD0gR1NUX1NU
QVRFX1JFQURZKTsKLSAgICAgICAgaWYgKG1fcmVzZXRQaXBlbGluZSkKKyAgICAgICAgbV9zaG91
bGRSZXNldFBpcGVsaW5lID0gKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSk7CisgICAgICAgIGlm
IChtX3Nob3VsZFJlc2V0UGlwZWxpbmUpCiAgICAgICAgICAgICBtX21lZGlhVGltZUR1cmF0aW9u
ID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCiAgICAgICAgIC8vIFVwZGF0ZSByZWFkeSBhbmQg
bmV0d29yayBzdGF0ZXMuCkBAIC01MzgsMjUgKzUzOSwyNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKIAogICAgICAgICAvLyBTeW5jIHN0YXRl
cyB3aGVyZSBuZWVkZWQuCiAgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CisgICAgICAg
ICAgICBpZiAoIW1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CiAgICAgICAgICAgICAg
ICAgbm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICBub3RpZnlQ
bGF5ZXJPZk11dGUoKTsKLSAgICAgICAgICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9hcmVWb2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQg
PSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXNlZWtpbmcoKSAmJiAh
bV9wYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpIHsKKyAgICAgICAgICAgIGlmICghc2Vla2luZygp
ICYmICFtX2lzUGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAgR1NU
X0RFQlVHKCJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOwogICAgICAgICAgICAg
ICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0gICAg
ICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNl
OwogCiAgICAgICAgICAgICBpZiAoIW1fcGxheWJhY2tSYXRlKSB7CiAgICAgICAgICAgICAgICAg
R1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOwog
ICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVl
OworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAKICAgICAgICAgaWYgKG1fcmVxdWVz
dGVkU3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VE
KSB7CiAgICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKQEAgLTU3
Nyw3ICs1NzgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRl
U3RhdGVzKCkKICAgICAgICAgR1NUX0RFQlVHKCJObyBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CiAKICAgICAgICAgLy8gTGl2ZSBwaXBlbGluZXMgZ28g
aW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KLSAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRy
dWU7CisgICAgICAgIG1faXNMaXZlU3RyZWFtID0gdHJ1ZTsKIAogICAgICAgICBpZiAoc3RhdGUg
PT0gR1NUX1NUQVRFX1JFQURZKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZU5vdGhpbmc7CkBAIC01ODUsMTEgKzU4NiwxMSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgfSBlbHNlIGlmIChz
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVh
ZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAg
bV9wYXVzZWQgPSB0cnVlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CiAgICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAgICAgICBtX3Bh
dXNlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwogCi0gICAgICAg
IGlmICghbV9wYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCisgICAgICAgIGlmICghbV9pc1BhdXNl
ZCAmJiBtX3BsYXliYWNrUmF0ZSkKICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NU
X1NUQVRFX1BMQVlJTkcpOwogCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6
OkxvYWRpbmc7CkBAIC02MjAsMTAgKzYyMSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKIH0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjphc3luY1N0YXRlQ2hhbmdlRG9uZSgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFt
X3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKSkKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxp
bmUgfHwgbV9kaWRFcnJvck9jY3VyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc2Vl
a2luZykKKyAgICBpZiAobV9pc1NlZWtpbmcpCiAgICAgICAgIG1heWJlRmluaXNoU2VlaygpOwog
ICAgIGVsc2UKICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CkBAIC03NzQsNyArNzc1LDcgQEAgTWVk
aWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVudE1lZGlhVGltZSgp
IGNvbnN0CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heE1l
ZGlhVGltZVNlZWthYmxlKCkgY29uc3QKIHsKLSAgICBpZiAoVU5MSUtFTFkobV9lcnJvck9jY3Vy
ZWQpKQorICAgIGlmIChVTkxJS0VMWShtX2RpZEVycm9yT2NjdXIpKQogICAgICAgICByZXR1cm4g
TWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCiAgICAgR1NUX0RFQlVHKCJtYXhNZWRpYVRpbWVTZWVr
YWJsZSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmgKaW5kZXggM2JjYzBmZGJhMzg4M2FlZWM2ZTJlMjY1ODVlYWM4Y2JiZTBkNGVh
ZS4uOWIzMzMwNWY3ZjExNmRhYzkxYzY0MWM0ODQ1OTNiZTdhODMwNzM1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCkBAIC01
NCw3ICs1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdG
bGFnKCkgb3ZlcnJpZGUgeyB9OwogCi0gICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291
cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuY3BwCmluZGV4
IGZhZTc0ZjRiYTRjMTc5MWRjNjVlNTM1ZmVmZjMzM2Y0MmYwNmMzMzQuLmMwOTdjYTNlMTY3MTdk
ODhiN2I0ODZhMjJlY2JhNDVkMDhlYzNkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJN
U0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuY3BwCkBAIC0xNjMsNyArMTYzLDggQEAg
dm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6Zmx1c2goQXRvbVN0cmluZyB0cmFj
a0lkKQogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKIAogICAgIC8vIFRoaXMgaXMg
b25seSBmb3Igb24tdGhlLWZseSByZWVucXVldWVzIGFmdGVyIGFwcGVuZHMuIFdoZW4gc2Vla2lu
ZywgdGhlIHNlZWsgd2lsbCBkbyBpdHMgb3duIGZsdXNoLgotICAgIGlmICghbV9wbGF5ZXJQcml2
YXRlLm1fc2Vla2luZykKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBiZSB0b3VjaGluZyBwcml2
YXRlIHBhcnRzLgorICAgIGlmICghbV9wbGF5ZXJQcml2YXRlLm1faXNTZWVraW5nKQogICAgICAg
ICBtX3BsYXllclByaXZhdGUubV9wbGF5YmFja1BpcGVsaW5lLT5mbHVzaCh0cmFja0lkKTsKIH0K
IAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>