<?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>155750</bug_id>
          
          <creation_ts>2016-03-22 08:05:05 -0700</creation_ts>
          <short_desc>[GTK] Add kinetic scrolling</short_desc>
          <delta_ts>2017-06-09 01:58:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</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>
          
          <blocked>159150</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrien Plazas">aplazas</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>andersca</cc>
    
    <cc>andrunko</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>carlosg</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>emanuele.aina</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1176974</commentid>
    <comment_count>0</comment_count>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-03-22 08:05:05 -0700</bug_when>
    <thetext>We should enable kinetic scrolling when using touch enabled input devices (touchpads, touchscreens...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176975</commentid>
    <comment_count>1</comment_count>
      <attachid>274652</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-03-22 08:06:14 -0700</bug_when>
    <thetext>Created attachment 274652
WIP patch

Any thought on this WIP implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177332</commentid>
    <comment_count>2</comment_count>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-03-23 05:26:08 -0700</bug_when>
    <thetext>What about replacing mentions to &apos;kinetic&apos; as &apos;inertial&apos; as kinetic scrolling was actually already implemented in WebKitGTK+, what this patch adds is inertial scrolling (which extends kinetic scrolling), if the second paragraph here is correct: https://en.wikipedia.org/wiki/Scrolling#Computing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179362</commentid>
    <comment_count>3</comment_count>
      <attachid>274652</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-03-31 01:29:24 -0700</bug_when>
    <thetext>Comment on attachment 274652
WIP patch

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

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:73
&gt; +

For this three functions you have space before the (), but not for others. I don&apos;t remember what is WebKit convention, but maybe you should try running check-webkit-style.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:131
&gt; +

extra new line?

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:138
&gt; +

extra new line?

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.h:77
&gt; +

Do you really want two new lines?

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1811
&gt; +//            return;

Do you mean to remove that code rather than just commenting it out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182104</commentid>
    <comment_count>4</comment_count>
      <attachid>274652</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-04-08 01:30:02 -0700</bug_when>
    <thetext>Comment on attachment 274652
WIP patch

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

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1811
&gt;&gt; +//            return;
&gt; 
&gt; Do you mean to remove that code rather than just commenting it out?

Actually I&apos;m not sure what to do about these lines: they prevent some important events notifying the beginning or the end of a scrolling sequence from continuing their way down in due time, making the inertial scrolling work imperfectly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182621</commentid>
    <comment_count>5</comment_count>
      <attachid>274652</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-11 00:55:46 -0700</bug_when>
    <thetext>Comment on attachment 274652
WIP patch

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

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:35
&gt; +static const double overshootFriction = 20;

This is only about kinetic scrolling for now, this patch doesn&apos;t really support overshot animations, so let&apos;s keep that out for now.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:50
&gt; +    , m_dx(orientation == HorizontalScrollbar ? step * multiplier : 0)
&gt; +    , m_dy(orientation == VerticalScrollbar ? step * multiplier : 0)

Do not use abbreviations for variables, use m_delatX, m_deltaY for example instead of m_dx, m_dy. Or even better FloatSize m_delta

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:54
&gt; +ScrollAnimationKinetic::KineticScrolling::KineticScrolling ()

Space between KineticScrolling and ()

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:59
&gt; +ScrollAnimationKinetic::KineticScrolling::KineticScrolling (double lower, double upper, double initialPosition, double initialVelocity)

Space between KineticScrolling and (

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:60
&gt; +    : m_phase(Phase::Decelerating)

This should be the only phase for now, since we only implement deceleration in this patch.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:63
&gt; +    , m_overshootWidth(0)

Initialize constant values in class declaration.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:64
&gt; +    , m_decelFriction(decelFriction)

Why do we need a member for a constant value?

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:67
&gt; +    , m_c1(0)
&gt; +    , m_c2(0)

Do not use abbreviations, and move initialization to the class declaration.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:69
&gt; +    , m_t(0)

Ditto.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:73
&gt; +    if(initialPosition &lt; lower)

Missing space between if and (

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:81
&gt; +        m_t = 0;

This is already 0

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:83
&gt; +        m_position = initialPosition;
&gt; +        m_velocity = initialVelocity;

And these also have their own initial values already.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:87
&gt; +bool ScrollAnimationKinetic::KineticScrolling::tick (double time_delta)

tick (-&gt; tick(
time_delta -&gt; timeDelta

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:93
&gt; +        double exp_part = exp (-m_decelFriction * m_t);

exp_part -&gt; whatever it stands for without _

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:150
&gt; +#if USE(REQUEST_ANIMATION_FRAME_TIMER)

Since this will be supported only by GTK+ for now, and you are not going to test the !REQUEST_ANIMATION_FRAME_TIMER case, let&apos;s get rid of this, and use always a timer.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:167
&gt; +    m_scrollHistory.append(ScrollEvent(orientation, step, multiplier, monotonicallyIncreasingTime()));

This can grow indefinitely, it seems GTK+ removes events older than a constant threshold (150ms). ScrollEvent doesn&apos;t really need both step and multiplier, so you can pass the delta directly, and the current time can also be obtained by the ScrollEvent constructor instead of passing it. But I don&apos;t think it&apos;s the current time what we want, but the event time.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:169
&gt; +    FloatPoint currentPosition = m_position;

This is not actually used, you can use m_position below, since you are not changing it.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:200
&gt; +void ScrollAnimationKinetic::setCurrentPosition(const FloatPoint&amp; p)

p -&gt; position

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:207
&gt; +void ScrollAnimationKinetic::startDeceleration() {

the { should be in the next line.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:214
&gt; +void ScrollAnimationKinetic::cancelDeceleration() {
&gt; +    stop();
&gt; +}

Do we need this?

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:230
&gt; +    double accum_dx = 0;
&gt; +    double accum_dy = 0;

Don&apos;t use abbreviations nor _

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:231
&gt; +    for (auto i = m_scrollHistory.begin(); i != m_scrollHistory.end(); i++) {

for (const auto&amp; scrollEvent : m_scrollHistory)
    scrollEvent.dx();

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:236
&gt; +    double first = m_scrollHistory.begin()-&gt;time();

You can use m_scrollHistory[0].time()

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:260
&gt; +    if (!m_scrollHistory.isEmpty())
&gt; +        initDeceleration();

initDeceleration already checks if scroll history is empty. I don&apos;t understand why the animation fire is starting the deceleration, I think it should be the other way around, startDeceleration should schedule the timer animation.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:266
&gt; +    if (m_horizontalData.tick(deltaToNextFrame))

Use animateScroll or decelerate instead of tick

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:31
&gt; +#if ENABLE(SMOOTH_SCROLLING)

This should not depend on SMOOTH_SCROLLING

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:35
&gt; +#if !ENABLE(REQUEST_ANIMATION_FRAME)
&gt; +#error &quot;SMOOTH_SCROLLING requires REQUEST_ANIMATION_FRAME to be enabled.&quot;
&gt; +#endif

Remove this also.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:58
&gt; +    class ScrollEvent {
&gt; +    public:
&gt; +        ScrollEvent(ScrollbarOrientation, float step, float multiplier, double time);
&gt; +        double time() const { return m_time; }
&gt; +        double dx() const { return m_dx; }
&gt; +        double dy() const { return m_dy; }
&gt; +
&gt; +    private:
&gt; +        double m_time;
&gt; +        double m_dx;
&gt; +        double m_dy;
&gt; +
&gt; +    };

This could probably be a struct

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:60
&gt; +    // KineticScrolling is a port of GtkKineticScrolling as of GTK+ 3.20, mimicking its API and its behavior.

We can mention in the cpp that the whole implementation is based on GTK+ code.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:97
&gt; +        Phase m_phase;
&gt; +        double m_lower;
&gt; +        double m_upper;
&gt; +        double m_overshootWidth;
&gt; +        double m_decelFriction;
&gt; +        double m_overshootFriction;
&gt; +
&gt; +        double m_c1;
&gt; +        double m_c2;
&gt; +        double m_equilibriumPosition;
&gt; +
&gt; +        double m_t;
&gt; +        double m_position;
&gt; +        double m_velocity;
&gt; +    };

And we don&apos;t probably need a class for this either.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:109
&gt; +    enum class Curve {
&gt; +        Linear,
&gt; +        Quadratic,
&gt; +        Cubic,
&gt; +        Quartic,
&gt; +        Bounce
&gt; +    };

Copy paste leftover, I guess.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:112
&gt; +    void updateVisibleLengths() override;

Since this is pure virtual, but unimplemented, you can add { } here instead of adding the empty implementation in the cpp file.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:115
&gt; +    void startDeceleration();
&gt; +    void cancelDeceleration();

These could be just start() and stop()

&gt; Source/WebCore/platform/ScrollAnimator.cpp:129
&gt; +#elif PLATFORM(GTK)
&gt; +    // GDK scroll stop events are used to notify that the scrolling came to an end and that deceleration can be triggered.
&gt; +    if (e.isStop()) {
&gt; +        startDeceleration();
&gt; +        return true;
&gt; +    }
&gt; +    else
&gt; +        cancelDeceleration();

We should override handleWheelEvent in ScrollAnimatorGtk and handle this there instead.

&gt; Source/WebCore/platform/ScrollAnimator.h:94
&gt; +    virtual void startDeceleration() { }
&gt; +    virtual void cancelDeceleration() { }

I don&apos;t think this belongs here, ScrollAnimatorGtk can start/stop its animations internally

&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:90
&gt; +#if GTK_CHECK_VERSION(3, 19, 7)
&gt; +    m_isStop = event-&gt;is_stop;
&gt; +#else
&gt; +    m_isStop = false;
&gt; +#endif

Hmm, I&apos;m surprised this depends on GTK+ 3.19, kinetic scrolling was supported before, there should be another way.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:80
&gt; +    if (m_kinetic_animation)

m_kinetic_animation -&gt; m_kineticAnimation

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:93
&gt; +    ensureKineticScrollingAnimation();

We don&apos;t need the ensure method here, since this is created unconditionally in the constructor.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:97
&gt; +    m_kinetic_animation-&gt;scroll(orientation, granularity, step, multiplier);
&gt; +
&gt;      if (!m_scrollableArea.scrollAnimatorEnabled() || granularity == ScrollByPrecisePixel)
&gt;          return ScrollAnimator::scroll(orientation, granularity, step, multiplier);

How does smooth and kinetic work together? I guess we should check if there&apos;s a deceleration in progress and only do the smooth when there isn&apos;t (if enabled, of course)

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:109
&gt;      if (m_animation)

We should rename this now to m_smoothAnimation

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:185
&gt; +#if GTK_CHECK_VERSION(3, 19, 7)
&gt; +    bool isStop = gdk_event_is_scroll_stop_event (event);
&gt; +#else
&gt; +    bool isStop = false;
&gt; +#endif

Maybe we can guess this, if direction is smooth and delta x = delta y = 0 then it&apos;s stop. Not sure that&apos;s always true, though.

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:92
&gt; +    scrollEvent-&gt;scroll.is_stop = false;

false -&gt; FALSE

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:111
&gt; +    scrollEvent-&gt;scroll.is_stop = false;

Ditto.

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:130
&gt; +    scrollEvent-&gt;scroll.is_stop = true;

Ditto.

&gt; Source/WebKit2/UIProcess/gtk/GestureController.h:74
&gt; +        void stopDrag(const GdkEvent*);

Shouldn&apos;t we use a swipe gesture instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183713</commentid>
    <comment_count>6</comment_count>
      <attachid>276397</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-04-14 07:45:48 -0700</bug_when>
    <thetext>Created attachment 276397
WIP patch

Fixed all (most?) of the comments except for turning KineticScrolling (now renamed as PerAxisData) into a struct.

I also fixed several other details and made the scrolling _really_ work as intended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183714</commentid>
    <comment_count>7</comment_count>
      <attachid>276397</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-04-14 07:57:08 -0700</bug_when>
    <thetext>Comment on attachment 276397
WIP patch

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

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:144
&gt; +    m_scrollHistory.append(ScrollEvent(orientation, step * multiplier, currentTime));

What about letting ScrollAnimatorGtk handle the scrolling history and passing the computed inertia to ScrollAnimationKinetic when triggering inertial scrolling? This may help using the velocity values from the swipe gesture directly.

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:218
&gt; +void GestureController::SwipeGesture::swipe(SwipeGesture* swipeGesture, double x, double y, GtkGesture* gesture)

x and y (which should probably be named velocityX and velocityY) could (should?) be used to trigger inertial scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186898</commentid>
    <comment_count>8</comment_count>
      <attachid>276397</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-25 03:24:24 -0700</bug_when>
    <thetext>Comment on attachment 276397
WIP patch

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

Some general comments only for now.

&gt; Source/WTF/wtf/FeatureDefines.h:320
&gt; +#if !defined(ENABLE_KINETIC_SCROLLING)
&gt; +#define ENABLE_KINETIC_SCROLLING 1
&gt; +#endif

We don&apos;t need any compile option for this, just add the ScrollAnimationKinetic.cpp to the GTK compilation.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:87
&gt; +ScrollAnimationKinetic::PerAxisData::PerAxisData()
&gt; +    : PerAxisData(0, 0, 0, 0)
&gt; +{
&gt; +}

Initialize the members when declared in the header file and remove the explicit constructor

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:96
&gt; +    , m_equilibriumPosition(0)
&gt; +    , m_t(0)

Initialize constant values in the header when declared.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:104
&gt; +    m_t += timeDelta;

Do not use abbreviations for members, what does t mean?

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:138
&gt; +    if (animationTimerActive())
&gt; +        stop();

stop already checks if the animation is active.

&gt;&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:144
&gt;&gt; +    m_scrollHistory.append(ScrollEvent(orientation, step * multiplier, currentTime));
&gt; 
&gt; What about letting ScrollAnimatorGtk handle the scrolling history and passing the computed inertia to ScrollAnimationKinetic when triggering inertial scrolling? This may help using the velocity values from the swipe gesture directly.

Sounds good.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:165
&gt; +void ScrollAnimationKinetic::serviceAnimation()

serviceAnimation comes from RAf when not using a timer, but we are using a timer. See ScrollAnimatorSmooth, we are not actually using serviceAnimation in GTK port.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:172
&gt; +    FloatPoint accumDelta(0, 0);

The default constructor already initializes its member to 0, so you don&apos;t need (0, 0);

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:186
&gt; +    if (velocity == FloatPoint(0, 0))

Ditto.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:196
&gt; +    animationTimerFired();

I&apos;m not sure I understand this, serviceAnimation should be equivalent to animationTimerFired().

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:228
&gt; +void ScrollAnimationKinetic::startNextTimer(double delay)
&gt; +{
&gt; +    m_animationTimer.startOneShot(delay);
&gt; +}

We have this in ScrollAnimationSmooth because we support RAF without the timer option, but in this case we can just use m_animationTimer.startOneShot(delay) directly.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:233
&gt; +bool ScrollAnimationKinetic::animationTimerActive() const
&gt; +{
&gt; +    return m_animationTimer.isActive();
&gt; +}

Ditto.

&gt;&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:218
&gt;&gt; +void GestureController::SwipeGesture::swipe(SwipeGesture* swipeGesture, double x, double y, GtkGesture* gesture)
&gt; 
&gt; x and y (which should probably be named velocityX and velocityY) could (should?) be used to trigger inertial scrolling.

Indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187669</commentid>
    <comment_count>9</comment_count>
      <attachid>276397</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-04-26 23:56:43 -0700</bug_when>
    <thetext>Comment on attachment 276397
WIP patch

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

&gt;&gt; Source/WTF/wtf/FeatureDefines.h:320
&gt;&gt; +#endif
&gt; 
&gt; We don&apos;t need any compile option for this, just add the ScrollAnimationKinetic.cpp to the GTK compilation.

Do you mean I should:
- remove the changes made to Source/WebCore/PlatformGTK.cmake and instead
- add platform/ScrollAnimationKinetic.cpp to either &quot;list(APPEND WebCore_SOURCES&quot; or &quot;list(APPEND WebCorePlatformGTK_SOURCES...&quot; in Source/WebCore/PlatformGTK.cmake and
- remove any mention to ENABLE(KINETIC_SCROLLING)?

If yes, to which list should I add ScrollAnimationKinetic.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187722</commentid>
    <comment_count>10</comment_count>
      <attachid>277468</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-04-27 05:50:10 -0700</bug_when>
    <thetext>Created attachment 277468
WIP patch

This patch uses the velocity from the swiping gesture to trigger the inertial scrolling, the scroll animator computes the velocity (previously the animation was doing it) when a &quot;stop&quot; event triggers the inertial scrolling, the &quot;KINETIC_SCROLLING&quot; guard has been removed and lots of smaller fixes as been introduced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187735</commentid>
    <comment_count>11</comment_count>
      <attachid>277468</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-27 06:41:38 -0700</bug_when>
    <thetext>Comment on attachment 277468
WIP patch

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

Some more general comments

&gt; Source/WebCore/platform/PlatformWheelEvent.h:32
&gt; +#if PLATFORM(GTK)
&gt; +#include &quot;FloatPoint.h&quot;
&gt; +#endif

Don&apos;t use platform ifdefs to include cross-platform headers, just include the header if it&apos;s really needed.

&gt; Source/WebCore/platform/PlatformWheelEvent.h:73
&gt; +    enum PlatformWheelEventPhase {
&gt; +        PlatformWheelEventPhaseNone        = 0,
&gt; +        PlatformWheelEventPhaseStop        = 1 &lt;&lt; 0,
&gt; +        PlatformWheelEventPhaseSwipe       = 1 &lt;&lt; 1,

Do not line up this enum with the previous one. I wonder if we could reuse the cocoa enum even if we don&apos;t use all the flags, or are they too different?

&gt; Source/WebCore/platform/PlatformWheelEvent.h:95
&gt; +            , m_phase(PlatformWheelEventPhaseNone)

Initialize this below when the member is delcared and you don&apos;t need to do this in every constructor.

&gt; Source/WebCore/platform/PlatformWheelEvent.h:96
&gt; +            , m_swipeVelocity(FloatPoint())

This is not needed

&gt; Source/WebCore/platform/PlatformWheelEvent.h:120
&gt; +            , m_phase(PlatformWheelEventPhaseNone)
&gt; +            , m_swipeVelocity(FloatPoint())

Ditto.

&gt; Source/WebCore/platform/PlatformWheelEvent.h:182
&gt; +        FloatPoint swipeVelocity() const { return m_swipeVelocity; }

This should return a const reference instead of a copy.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:112
&gt; +    , m_horizontalData(0, 0, 0, 0)
&gt; +    , m_verticalData(0, 0, 0, 0)

These are not needed.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:123
&gt; +    return true;

Why is this empty now?

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:142
&gt; +    if (velocity == FloatPoint())

I would do if (!velocity.x() &amp;&amp; !velocity.y()) instead of creating a zero FloatPoint just to compare it.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:53
&gt; +    // FIXME Should this be moved to the initializer list even if it&apos;s a bit complex?

I think it&apos;s fine here in the body.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:55
&gt; +        updatePosition(FloatPoint(position));

You should move the position, updatePosition(WTFMove(position));

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:59
&gt; +#if ENABLE(SMOOTH_SCROLLING)
&gt; +        if (m_smoothAnimation)
&gt; +            m_smoothAnimation-&gt;setCurrentPosition(position);
&gt; +#endif

Maybe updatePosition() should set the current position on both animations to keep everything in sync whenever the position is updated?

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:111
&gt; +const FloatPoint ScrollAnimatorGtk::computeVelocity()

Since we are returning a new FloatPoint, why making it const?

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:131
&gt; +bool ScrollAnimatorGtk::handleWheelEvent(const PlatformWheelEvent&amp; e)

e -&gt; event

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:136
&gt; +        return e.timestamp() - event.timestamp() &gt; 150;

Use a global static const for this 150 instead of magic number.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.h:58
&gt; +
&gt; +#if ENABLE(SMOOTH_SCROLLING)
&gt; +    void ensureSmoothScrollingAnimation();
&gt;  #endif
&gt; +    const FloatPoint computeVelocity();
&gt; +
&gt; +    void updatePosition(FloatPoint&amp;&amp;);

Move this below after the virtual methods

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.h:93
&gt; +    std::function&lt;void(FloatPoint&amp;&amp;)&gt; m_positionChangedCallback;

What is this?

&gt; Source/WebKit2/Shared/WebEvent.h:223
&gt; +    WebCore::FloatPoint swipeVelocity() const { return m_swipeVelocity; }

This should return a const reference.

&gt; Source/WebKit2/Shared/WebEventConversion.cpp:162
&gt; +        m_phase = static_cast&lt;WebCore::PlatformWheelEventPhase&gt;(webEvent.phase());

We normally try to avoid casts to convert from/to enums, because it&apos;s very fragile in case any of the enum changes. Better use to/from conversion functions.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:195
&gt; +#if GTK_CHECK_VERSION(3, 19, 7)

Since 3.20 was already released, let&apos;s check for 3, 20, 0 better instead of using an unstable release number.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:199
&gt; +#elif GTK_CHECK_VERSION(3, 3, 18)

I think 3.6 is the minimum GTK+ version we support, so we don&apos;t need to check for 3.3 version.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1835
&gt; +#if PLATFORM(GTK)
&gt; +#if GTK_CHECK_VERSION(3, 19, 7)
&gt; +        bool isScrollStopEvent = gdk_event_is_scroll_stop_event(event.nativeEvent());
&gt; +#else
&gt; +        const GdkEventScroll&amp; scroll = event.nativeEvent()-&gt;scroll;
&gt; +        bool isScrollStopEvent = scroll.direction == GDK_SCROLL_SMOOTH &amp;&amp; scroll.delta_x &amp;&amp; scroll.delta_y;
&gt; +#endif
&gt; +        if (m_wheelEventQueue.size() &lt; wheelEventQueueSizeThreshold &amp;&amp; !isScrollStopEvent)
&gt; +            return;
&gt; +#else
&gt;          if (m_wheelEventQueue.size() &lt; wheelEventQueueSizeThreshold)
&gt;              return;
&gt; +#endif

We need a better way to handle this than this ifdef mess here :-) We could have a method in the page client, for example, to check if a given wheel event should never be discarded, with this implementation in the GTK+ page client and returning false for all other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187838</commentid>
    <comment_count>12</comment_count>
      <attachid>277468</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-04-27 11:20:20 -0700</bug_when>
    <thetext>Comment on attachment 277468
WIP patch

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

&gt;&gt; Source/WebCore/platform/PlatformWheelEvent.h:73
&gt;&gt; +        PlatformWheelEventPhaseSwipe       = 1 &lt;&lt; 1,
&gt; 
&gt; Do not line up this enum with the previous one. I wonder if we could reuse the cocoa enum even if we don&apos;t use all the flags, or are they too different?

What about using PlatformWheelEventPhaseEnded to represent both Stop and Swipe, the animator could then compute the velocity from the history if the one from the &quot;Ended&quot; event is 0:0.

&gt;&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:123
&gt;&gt; +    return true;
&gt; 
&gt; Why is this empty now?

I don&apos;t really know what to do about this one, a &quot;scroll&quot; method doesn&apos;t really make sense here as we don&apos;t feed this animation scrolling values but a position to scroll from and an inertia.

In previous patches it was used to store the event and compute the velocity from the history but it was suboptimal as we needed the timestamp of the event, which &quot;scroll&quot;&apos;s prototype don&apos;t allow us to have. This is now handled by the scroll animator which handles it better as it actually handles the raw events.

Also when using the velocity from the swipe gesture, &quot;scroll&quot; is completly useless.

&gt;&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:142
&gt;&gt; +    if (velocity == FloatPoint())
&gt; 
&gt; I would do if (!velocity.x() &amp;&amp; !velocity.y()) instead of creating a zero FloatPoint just to compare it.

What about adding a &quot;bool FloatPoint::isOrigin() const&quot; method? We could do  &quot;if (!velocity.isOrigin())&quot; instead, it would be more clear and avoid one method call.

We could also use it to check if we need to compute the velocity as I suggested in a previous comment.

&gt;&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:59
&gt;&gt; +#endif
&gt; 
&gt; Maybe updatePosition() should set the current position on both animations to keep everything in sync whenever the position is updated?

setCurrentPosition()&apos;s semantic on both animations is the one of a non animated jump (if I&apos;m correct), stopping the animation, so a callback from the inertial scrolling would instantaneously stop it. We would need a method to just set the position without stopping the animation, does it sound OK to you to add one?

&gt;&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.h:93
&gt;&gt; +    std::function&lt;void(FloatPoint&amp;&amp;)&gt; m_positionChangedCallback;
&gt; 
&gt; What is this?

A leftover from a test I forgot to remove.

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1835
&gt;&gt; +#endif
&gt; 
&gt; We need a better way to handle this than this ifdef mess here :-) We could have a method in the page client, for example, to check if a given wheel event should never be discarded, with this implementation in the GTK+ page client and returning false for all other ports.

Makes sense, thanks for the advice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188314</commentid>
    <comment_count>13</comment_count>
      <attachid>277635</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-04-28 11:12:55 -0700</bug_when>
    <thetext>Created attachment 277635
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201540</commentid>
    <comment_count>14</comment_count>
      <attachid>281091</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-11 01:35:47 -0700</bug_when>
    <thetext>Created attachment 281091
Add inertial scrolling to WebKitGTK+

Would you like me to split this patch into several smaller units to speed up the review process?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201855</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garnacho">carlosg</who>
    <bug_when>2016-06-13 09:27:56 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created attachment 281091 [details]
&gt; Add inertial scrolling to WebKitGTK+
&gt; 
&gt; Would you like me to split this patch into several smaller units to speed up
&gt; the review process?

There is no need, and apologies that it took this much long on my side... I&apos;m dropping some comments on the patch, but it actually looks quite good already to me. Maybe some of my comments get into code style, but take these with a pinch of salt though, I&apos;d trust more Carlos Garcia&apos;s opinion on those than mine :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201856</commentid>
    <comment_count>16</comment_count>
      <attachid>281091</attachid>
    <who name="Carlos Garnacho">carlosg</who>
    <bug_when>2016-06-13 09:28:11 -0700</bug_when>
    <thetext>Comment on attachment 281091
Add inertial scrolling to WebKitGTK+

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

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:71
&gt; +    return (x &gt; high) ? high : ((x &lt; low) ? low : x);

I&apos;d suggest here an assert for low &lt;= high. Shouldn&apos;t happen from reading the code, but IMO better to protect against values that&apos;d make this function not work as it&apos;d be expected.

&gt; Source/WebCore/platform/graphics/FloatPoint.h:124
&gt; +    bool isOrigin() const { return !m_x &amp;&amp; !m_y; }

I&apos;m usually a bit wary to use ! to check for floats/doubles being 0. Perhaps C++ will do the right thing here, but &apos;!&apos; suggests binary-level operation to me, which might not turn out as expected even if the number is smaller than FLT_EPSILON.

&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:93
&gt; +    m_phase = event-&gt;direction == GDK_SCROLL_SMOOTH &amp;&amp; !m_deltaX &amp;&amp; !m_deltaY ?

same comment here about checking for doubles being equal to 0.0.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:154
&gt; +    WebWheelEvent::Phase phase = event-&gt;scroll.direction == GDK_SCROLL_SMOOTH &amp;&amp; !deltaX &amp;&amp; !deltaY ?

same here with deltaX/Y :)

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:80
&gt; +void GestureController::DragGesture::startDrag(const GdkEvent* event)

It seems this file has now three functions that create a scroll event out of a touch event: this one, startMomentumScroll() a bit further in this patch, and handleDrag() already in code. Maybe a common helper function could be done for these 3?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202179</commentid>
    <comment_count>17</comment_count>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-14 07:54:08 -0700</bug_when>
    <thetext>About the several comments on floating point value: you&apos;re right it&apos;s cleaner to check that way, thanks!

&gt; &gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:80
&gt; &gt; +void GestureController::DragGesture::startDrag(const GdkEvent* event)
&gt; 
&gt; It seems this file has now three functions that create a scroll event out of
&gt; a touch event: this one, startMomentumScroll() a bit further in this patch,
&gt; and handleDrag() already in code. Maybe a common helper function could be
&gt; done for these 3?

I just added this:
static GUniquePtr&lt;GdkEvent&gt; newScrollEvent(const GdkEvent* event, double x, double y, double deltaX, double deltaY, gboolean isStop)
{
    GUniquePtr&lt;GdkEvent&gt; scrollEvent(gdk_event_new(GDK_SCROLL));
    scrollEvent-&gt;scroll.time = event-&gt;touch.time;
    scrollEvent-&gt;scroll.x = x;
    scrollEvent-&gt;scroll.y = y;
    scrollEvent-&gt;scroll.x_root = event-&gt;touch.x_root;
    scrollEvent-&gt;scroll.y_root = event-&gt;touch.y_root;
    scrollEvent-&gt;scroll.direction = GDK_SCROLL_SMOOTH;
    scrollEvent-&gt;scroll.delta_x = deltaX;
    scrollEvent-&gt;scroll.delta_y = deltaY;
    scrollEvent-&gt;scroll.state = event-&gt;touch.state;
#if GTK_CHECK_VERSION(3, 20, 0)
    scrollEvent-&gt;scroll.is_stop = isStop;
#endif
    return scrollEvent;
}

I&apos;ll soon (tomorrow?) publish a hopefully final version then, thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202549</commentid>
    <comment_count>18</comment_count>
      <attachid>281354</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-15 06:25:19 -0700</bug_when>
    <thetext>Created attachment 281354
[GTK] Add kinetic scrolling

This patch only has minor changes fixing the points raised by Carlos Garnacho and update the changelogs.

Should tests be added for this patch and are the changelogs good enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202550</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-15 06:26:54 -0700</bug_when>
    <thetext>Attachment 281354 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204041</commentid>
    <comment_count>20</comment_count>
      <attachid>281711</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2016-06-20 21:35:02 -0700</bug_when>
    <thetext>Created attachment 281711
Patch - new features + bugfix

I&apos;ve used this patch in an internal project and made some modifications that you may find useful. I am posting the updated patch without ChangeLogs, feel free to update it or let me know if you prefer if I do it.

The changes included in this patch (on top of latest one from Adrien):
- overshoot animations support (ScrollAnimationKinetic.cpp)
- bugfix for a crash when starting a drag while scrolling (GestureController.cpp)
- build fix for gtk &lt; 3.20 (PlatformWheelEventGtk.cpp)
- bugfix for gtk &lt; 3.20 to properly copy NativeWebWheelEvent (is_stop is not available in gtk &lt; 3.20 and the phase/momentumPhase were not being properly copied on the NativeWebWheelEvent copy constructor, making the page &quot;jump&quot; during scroll instead of starting momentum scroll - NativeWebWheelEventGtk.cpp)
- respect scrollbar policy (ScrollAnimationKinetic.cpp + ScrollAnimatorGtk.cpp)

That should be it, please let me know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204095</commentid>
    <comment_count>21</comment_count>
      <attachid>281354</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-21 03:15:36 -0700</bug_when>
    <thetext>Comment on attachment 281354
[GTK] Add kinetic scrolling

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

Sorry for the delay reviewing this. Looks quite good in general, but there are still several minor issues to solve. Also, please check the EWS after submitting a patch to make sure it builds.

&gt; Source/WebCore/platform/PlatformWheelEvent.h:168
&gt; +        bool useLatchedEventElement() const { return false; }
&gt; +        bool isEndOfNonMomentumScroll() const;
&gt; +        bool isTransitioningToMomentumScroll() const;

We should reorder what we share with cocoa instead of duplicating it

&gt; Source/WebCore/platform/PlatformWheelEvent.h:198
&gt; +#elif PLATFORM(GTK)
&gt; +        PlatformWheelEventPhase m_phase { PlatformWheelEventPhaseNone };
&gt; +        PlatformWheelEventPhase m_momentumPhase { PlatformWheelEventPhaseNone };
&gt;  #endif

Ditto.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:126
&gt; +bool ScrollAnimationKinetic::scroll(ScrollbarOrientation, ScrollGranularity, float, float)
&gt; +{
&gt; +    // This method isn&apos;t needed and shouldn&apos;t do anything as &apos;scroll&apos; isn&apos;t
&gt; +    // how this animation needs to be used, use &apos;start&apos; instead.
&gt; +    return true;
&gt; +}

We could move this to the header then, with the comment before the function, or even consider making scroll not pure virtual, I guess I assumed all animations would have to implement this when I added it.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:136
&gt; +    m_position = position;

I wonder if we really need to save the current position, since we are not actually scrolling, and the initial position is always passed to start()

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:152
&gt; +        m_position.x(), velocity.x());
&gt; +    m_verticalData = PerAxisData(m_scrollableArea.minimumScrollPosition().y(),
&gt; +        m_scrollableArea.maximumScrollPosition().y(),
&gt; +        m_position.y(), velocity.y());

We could use initialPosition.x(), initialPosition.y() here

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:173
&gt; +    m_position = FloatPoint(m_horizontalData.position(), m_verticalData.position());
&gt; +
&gt; +    m_notifyPositionChangedFunction(FloatPoint(m_position));

And pass the position directly to the callback

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:57
&gt; +        double m_lower { 0 };
&gt; +        double m_upper { 0 };
&gt; +
&gt; +        double m_coef1 { 0 };
&gt; +        double m_coef2 { 0 };
&gt; +
&gt; +        double m_elapsedTime { 0 };
&gt; +        double m_position { 0 };
&gt; +        double m_velocity { 0 };

We don&apos;t use m_ prefix for struct members.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:67
&gt; +    bool scroll(ScrollbarOrientation, ScrollGranularity, float step, float multiplier) override;
&gt; +    void stop() override;
&gt; +    void updateVisibleLengths() override { }
&gt; +    void setCurrentPosition(const FloatPoint&amp;) override;

I don&apos;t think these should be public.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:77
&gt; +    PerAxisData m_horizontalData { PerAxisData(0, 0, 0, 0) };
&gt; +    PerAxisData m_verticalData { PerAxisData(0, 0, 0, 0) };

You don&apos;t need to initialize these, all PerAxisData members are initialized.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:81
&gt; +

Extra line here.

&gt; Source/WebCore/platform/graphics/FloatPoint.h:125
&gt; +    bool isOrigin() const { return m_x == 0.0 &amp;&amp; m_y == 0.0; }
&gt; +

We don&apos;t compare to 0 in WebKit. I would leave this change to FloatPoint to a separate patch, since the rest of the patch is GTK+ specific, and just check x, y in the code. Also note that IntPoint has this methods as isZero(), so we should be consistent here.

&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:91
&gt; +    m_phase = event-&gt;is_stop ?
&gt; +        PlatformWheelEventPhaseEnded :
&gt; +        PlatformWheelEventPhaseChanged;

I don&apos;t understand this. When is it None then? Why is initially changed?

&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:93
&gt; +    m_phase = event-&gt;direction == GDK_SCROLL_SMOOTH &amp;&amp; m_deltaX == 0.0 &amp;&amp; m_deltaY = 0.0 ?

We don&apos;t compare to 0 in WebKit, see https://webkit.org/code-style-guidelines/#null-false-and-zero

&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:98
&gt; +    m_phase = PlatformWheelEventPhaseChanged;

Do we really need this? m_pahse is initialized in the header and will not be used in GTK+2 for sure.

&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:101
&gt; +    m_momentumPhase = PlatformWheelEventPhaseNone;

This is already None as initialized in the header.

&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:116
&gt; +    return isTransitioningToMomentumScroll() ? FloatPoint(m_wheelTicksX, m_wheelTicksY) : FloatPoint();

FloatPoint() -&gt; { }

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:79
&gt; +        updatePosition(FloatPoint(position));

updatePosition(WTFMove(position));

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:94
&gt; +#if ENABLE(SMOOTH_SCROLLING)
&gt;      if (!m_scrollableArea.scrollAnimatorEnabled() || granularity == ScrollByPrecisePixel)
&gt;          return ScrollAnimator::scroll(orientation, granularity, step, multiplier);
&gt;  
&gt;      ensureSmoothScrollingAnimation();
&gt; -    return m_animation-&gt;scroll(orientation, granularity, step, multiplier);
&gt; +    return m_smoothAnimation-&gt;scroll(orientation, granularity, step, multiplier);
&gt; +#else
&gt; +    return ScrollAnimator::scroll(orientation, granularity, step, multiplier);
&gt; +#endif

I think we could just keep this inside the #if ENABLE(SMOOTH_SCROLLING) as it was before, since you are not adding anything for non smooth scrolling.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:108
&gt; +    updatePosition(FloatPoint(position));

updatePosition(WTFMove(position));

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:114
&gt; +        return FloatPoint();

return { };

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:120
&gt; +        return FloatPoint();

Ditto.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:128
&gt; +    return FloatPoint(accumDelta.x() * -1000 / (last - first), accumDelta.y() * -1000 / (last - first));

And here you could also use { }

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:135
&gt; +    m_scrollHistory.removeAllMatching([&amp;] (PlatformWheelEvent&amp; otherEvent) -&gt; bool {

Capture explicitly event, instead of using &amp;

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:140
&gt; +        m_kineticAnimation-&gt;start(m_currentPosition, computeVelocity());

Don&apos;t we need to add the event to the history in this case too?

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:141
&gt; +

Extra line here.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:147
&gt; +

Ditto.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.h:34
&gt; +#include &quot;ScrollAnimationKinetic.h&quot;

Why do you need to include this in the header?

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.h:48
&gt; -#if ENABLE(SMOOTH_SCROLLING)
&gt;      bool scroll(ScrollbarOrientation, ScrollGranularity, float step, float multiplier) override;

scroll is still specific to smooth scrolling

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.h:81
&gt; +    std::unique_ptr&lt;ScrollAnimationKinetic&gt; m_kineticAnimation;

This should be ScrollAnimation not ScrollAnimationKinetic

&gt; Source/WebKit2/Shared/NativeWebWheelEvent.h:55
&gt; +    NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase);

Maybe instead of adding a new constructor we could add the phase parameters with default values

&gt; Source/WebKit2/Shared/WebEvent.h:218
&gt; +#elif PLATFORM(GTK)
&gt; +    Phase phase() const { return static_cast&lt;Phase&gt;(m_phase); }
&gt; +    Phase momentumPhase() const { return static_cast&lt;Phase&gt;(m_momentumPhase); }
&gt;  #endif

We should reorder things to share with coca, instead of duplicating.

&gt; Source/WebKit2/Shared/WebEvent.h:241
&gt; +#elif PLATFORM(GTK)
&gt; +    uint32_t m_phase { Phase::PhaseNone }; // Phase
&gt; +    uint32_t m_momentumPhase { Phase::PhaseNone }; // Phase
&gt;  #endif

Ditto. Comments here // Phase don&apos;t really add anything, so I would remove them.

&gt; Source/WebKit2/Shared/WebEventConversion.cpp:151
&gt; +#if PLATFORM(GTK)
&gt; +inline WebCore::PlatformWheelEventPhase&amp; operator|=(WebCore::PlatformWheelEventPhase&amp; self, WebCore::PlatformWheelEventPhase other)
&gt; +{
&gt; +    return self = static_cast&lt;WebCore::PlatformWheelEventPhase&gt;(self | other);
&gt; +}
&gt; +
&gt; +static WebCore::PlatformWheelEventPhase toPlatformWheeleventPhase(WebWheelEvent::Phase phase)
&gt; +{
&gt; +    WebCore::PlatformWheelEventPhase result = WebCore::PlatformWheelEventPhase::PlatformWheelEventPhaseNone;
&gt; +
&gt; +    if (phase &amp; WebWheelEvent::Phase::PhaseBegan)
&gt; +        result |= WebCore::PlatformWheelEventPhase::PlatformWheelEventPhaseBegan;
&gt; +    if (phase &amp; WebWheelEvent::Phase::PhaseStationary)
&gt; +        result |= WebCore::PlatformWheelEventPhase::PlatformWheelEventPhaseStationary;
&gt; +    if (phase &amp; WebWheelEvent::Phase::PhaseChanged)
&gt; +        result |= WebCore::PlatformWheelEventPhase::PlatformWheelEventPhaseChanged;
&gt; +    if (phase &amp; WebWheelEvent::Phase::PhaseEnded)
&gt; +        result |= WebCore::PlatformWheelEventPhase::PlatformWheelEventPhaseEnded;
&gt; +    if (phase &amp; WebWheelEvent::Phase::PhaseCancelled)
&gt; +        result |= WebCore::PlatformWheelEventPhase::PlatformWheelEventPhaseCancelled;
&gt; +    if (phase &amp; WebWheelEvent::Phase::PhaseMayBegin)
&gt; +        result |= WebCore::PlatformWheelEventPhase::PlatformWheelEventPhaseMayBegin;
&gt; +
&gt; +    return result;
&gt; +}
&gt; +#endif

I agree we shouldn&apos;t cast directly between WebKit and WebCore types, but this code should be shared with mac. Since they are casting, I suggest to share their current code for now to make this patch simpoler, and propose a new patch to do conversions instead of casts.

&gt; Source/WebKit2/Shared/WebEventConversion.cpp:191
&gt; +#elif PLATFORM(GTK)
&gt; +        m_phase = toPlatformWheeleventPhase(webEvent.phase());
&gt; +        m_momentumPhase = toPlatformWheeleventPhase(webEvent.momentumPhase());
&gt;  #endif

And then we could reuse this code too, instead of duplicate.

&gt; Source/WebKit2/Shared/WebWheelEvent.cpp:105
&gt; +#elif PLATFORM(GTK)
&gt; +    encoder &lt;&lt; m_phase;
&gt; +    encoder &lt;&lt; m_momentumPhase;
&gt;  #endif

Reorder things here too share the code with cocoa

&gt; Source/WebKit2/Shared/WebWheelEvent.cpp:139
&gt; +#elif PLATFORM(GTK)
&gt; +    if (!decoder.decode(t.m_phase))
&gt; +        return false;
&gt; +    if (!decoder.decode(t.m_momentumPhase))
&gt; +        return false;

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:165
&gt; +WebWheelEvent WebEventFactory::createWebWheelEvent(const GdkEvent* event, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase)

Here we could probably also keep a single method just with default values for the phases.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1819
&gt; -        if (m_wheelEventQueue.size() &lt; wheelEventQueueSizeThreshold)
&gt; +        if (m_wheelEventQueue.size() &lt; wheelEventQueueSizeThreshold &amp;&amp; canSkipWheelEvent(event))

m_wheelEventQueue.size() &lt; wheelEventQueueSizeThreshold is also a condition to skip wheel events. So, I would replace all this with just if (!shouldProcessWheelEventNow(event)) and move the condition to the function. Note that we are not actually skipping events, just queuing them to process them later when we have a batch. So, the main question is why we are doing this, and why this doesn&apos;t work for us in this case. Because maybe this is just a matter of using 0 as threshold for the GTK+ port, and we always process wheel events immediately.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1865
&gt; +#if !PLATFORM(GTK)
&gt; +bool WebPageProxy::canSkipWheelEvent(const WebWheelEvent&amp;)
&gt; +{
&gt; +    return true;
&gt; +}
&gt; +#endif

Since we are adding platform ifdefs in cross-platform code in any case here, I would keep the function common, checking the event queue size for all platforms, and then adding an #ifdef for GTK+, something like:

bool WebPageProxy::shouldProcessWheelEventNow(const WebWheelEvent&amp; event)
{
    if (m_wheelEventQueue.size() &gt;= wheelEventQueueSizeThreshold)
        return true;
#if PLATFORM(GTK)
return ....
#endif
}

Another way to avoid platform ifdefs here would be to add a method to WebWheelEvent, something like shouldBeProcessesImmediately or something like that, with a default implementation returning false, and a GTK+ implementation. I still don&apos;t understand the whole thing to propose any of the solution, though. In any case, we should explain this in the changelog and add a comment in the code as well.

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:80
&gt; -void GestureController::DragGesture::handleDrag(const GdkEvent* event, double x, double y)
&gt; +static GUniquePtr&lt;GdkEvent&gt; newScrollEvent(const GdkEvent* event, double x, double y, double deltaX, double deltaY, gboolean isStop)

use create instead of new</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204096</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-21 03:17:14 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created attachment 281711 [details]
&gt; Patch - new features + bugfix
&gt; 
&gt; I&apos;ve used this patch in an internal project and made some modifications that
&gt; you may find useful. I am posting the updated patch without ChangeLogs, feel
&gt; free to update it or let me know if you prefer if I do it.
&gt; 
&gt; The changes included in this patch (on top of latest one from Adrien):
&gt; - overshoot animations support (ScrollAnimationKinetic.cpp)
&gt; - bugfix for a crash when starting a drag while scrolling
&gt; (GestureController.cpp)
&gt; - build fix for gtk &lt; 3.20 (PlatformWheelEventGtk.cpp)
&gt; - bugfix for gtk &lt; 3.20 to properly copy NativeWebWheelEvent (is_stop is not
&gt; available in gtk &lt; 3.20 and the phase/momentumPhase were not being properly
&gt; copied on the NativeWebWheelEvent copy constructor, making the page &quot;jump&quot;
&gt; during scroll instead of starting momentum scroll -
&gt; NativeWebWheelEventGtk.cpp)
&gt; - respect scrollbar policy (ScrollAnimationKinetic.cpp +
&gt; ScrollAnimatorGtk.cpp)
&gt; 
&gt; That should be it, please let me know what you think.

Thanks! I think Adrien should include crashes and build fixes in his patch when submitting a new version and you should open a new bug depending on this one to add the overshooting support on top of Adrien&apos;s patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204129</commentid>
    <comment_count>23</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2016-06-21 07:06:32 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #20)
&gt; &gt; Created attachment 281711 [details]
&gt; &gt; Patch - new features + bugfix
&gt; &gt; 
&gt; &gt; I&apos;ve used this patch in an internal project and made some modifications that
&gt; &gt; you may find useful. I am posting the updated patch without ChangeLogs, feel
&gt; &gt; free to update it or let me know if you prefer if I do it.
&gt; &gt; 
&gt; &gt; The changes included in this patch (on top of latest one from Adrien):
&gt; &gt; - overshoot animations support (ScrollAnimationKinetic.cpp)
&gt; &gt; - bugfix for a crash when starting a drag while scrolling
&gt; &gt; (GestureController.cpp)
&gt; &gt; - build fix for gtk &lt; 3.20 (PlatformWheelEventGtk.cpp)
&gt; &gt; - bugfix for gtk &lt; 3.20 to properly copy NativeWebWheelEvent (is_stop is not
&gt; &gt; available in gtk &lt; 3.20 and the phase/momentumPhase were not being properly
&gt; &gt; copied on the NativeWebWheelEvent copy constructor, making the page &quot;jump&quot;
&gt; &gt; during scroll instead of starting momentum scroll -
&gt; &gt; NativeWebWheelEventGtk.cpp)
&gt; &gt; - respect scrollbar policy (ScrollAnimationKinetic.cpp +
&gt; &gt; ScrollAnimatorGtk.cpp)
&gt; &gt; 
&gt; &gt; That should be it, please let me know what you think.
&gt; 
&gt; Thanks! I think Adrien should include crashes and build fixes in his patch
&gt; when submitting a new version and you should open a new bug depending on
&gt; this one to add the overshooting support on top of Adrien&apos;s patch.

Yes, I talked to Adrien on IRC and I will file a new bug with the overshooting support once he has an updated/final patch here.
He will check about including the other fixes here in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204130</commentid>
    <comment_count>24</comment_count>
      <attachid>281354</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2016-06-21 07:08:58 -0700</bug_when>
    <thetext>Comment on attachment 281354
[GTK] Add kinetic scrolling

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

&gt;&gt; Source/WebKit2/Shared/NativeWebWheelEvent.h:55
&gt;&gt; +    NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase);
&gt; 
&gt; Maybe instead of adding a new constructor we could add the phase parameters with default values

I am not sure this would work as we need to pass the phase/momentumPhase when creating the events from GestureController. I even added a fix in my patch to make this work fine with gtk&lt;3.20 (is_stop issue when copying).

&gt;&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:165
&gt;&gt; +WebWheelEvent WebEventFactory::createWebWheelEvent(const GdkEvent* event, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase)
&gt; 
&gt; Here we could probably also keep a single method just with default values for the phases.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204156</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-21 08:50:54 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Comment on attachment 281354 [details]
&gt; [GTK] Add kinetic scrolling
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=281354&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/Shared/NativeWebWheelEvent.h:55
&gt; &gt;&gt; +    NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase);
&gt; &gt; 
&gt; &gt; Maybe instead of adding a new constructor we could add the phase parameters with default values
&gt; 
&gt; I am not sure this would work as we need to pass the phase/momentumPhase
&gt; when creating the events from GestureController. I even added a fix in my
&gt; patch to make this work fine with gtk&lt;3.20 (is_stop issue when copying).

And what is the problem? I&apos;m proposing to have a single constructor with the parameters having default values, but you can still call it with other values

&gt; &gt;&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:165
&gt; &gt;&gt; +WebWheelEvent WebEventFactory::createWebWheelEvent(const GdkEvent* event, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase)
&gt; &gt; 
&gt; &gt; Here we could probably also keep a single method just with default values for the phases.
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204165</commentid>
    <comment_count>26</comment_count>
      <attachid>281354</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2016-06-21 09:17:35 -0700</bug_when>
    <thetext>Comment on attachment 281354
[GTK] Add kinetic scrolling

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

&gt;&gt;&gt;&gt; Source/WebKit2/Shared/NativeWebWheelEvent.h:55
&gt;&gt;&gt;&gt; +    NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase);
&gt;&gt;&gt; 
&gt;&gt;&gt; Maybe instead of adding a new constructor we could add the phase parameters with default values
&gt;&gt; 
&gt;&gt; I am not sure this would work as we need to pass the phase/momentumPhase when creating the events from GestureController. I even added a fix in my patch to make this work fine with gtk&lt;3.20 (is_stop issue when copying).
&gt; 
&gt; And what is the problem? I&apos;m proposing to have a single constructor with the parameters having default values, but you can still call it with other values

Sorry, I misread you, I thought you were proposing to remove this constructor and just use default values :D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204792</commentid>
    <comment_count>27</comment_count>
      <attachid>281354</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-23 01:10:43 -0700</bug_when>
    <thetext>Comment on attachment 281354
[GTK] Add kinetic scrolling

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

&gt;&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:126
&gt;&gt; +}
&gt; 
&gt; We could move this to the header then, with the comment before the function, or even consider making scroll not pure virtual, I guess I assumed all animations would have to implement this when I added it.

I moved it to ScrollAnimation.h and made the method non-pure virtual.

&gt;&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:136
&gt;&gt; +    m_position = position;
&gt; 
&gt; I wonder if we really need to save the current position, since we are not actually scrolling, and the initial position is always passed to start()

I completely removed m_position,  made the method a non-pure virtual one doing nothing in ScrollAnimation.h.

I jut call stop() instead now.

&gt;&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:91
&gt;&gt; +        PlatformWheelEventPhaseChanged;
&gt; 
&gt; I don&apos;t understand this. When is it None then? Why is initially changed?

m_phase represent the phase of the regular scrolling, m_momentumPhase represent the phase of the momentum scrolling (it&apos;s the same in the Cocoa code). m_phase is None when we are not in a regular scrolling phase anymore (for example when we are in a momentum/inertial scrolling phase).

The event we are handling at this point can either represent a regular scrolling event in the scrolling phase (Changed) or it can represent the end of the regular scrolling session (Ended).

These info are then used by methods like isEndOfNonMomentumScroll() and isTransitioningToMomentumScroll() to determine the overall state of the scrolling.

&gt;&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:98
&gt;&gt; +    m_phase = PlatformWheelEventPhaseChanged;
&gt; 
&gt; Do we really need this? m_pahse is initialized in the header and will not be used in GTK+2 for sure.

I think we decided with mcatanzaro to add this GTK_API_VERSION_2 check, I don&apos;t remember what was the reason though.

If you are suggesting to set the default to &quot;Changed&quot; I&apos;m not sure it&apos;s a saner default than &quot;None&quot;, especially as we share this initialization with Cocoa.

&gt;&gt; Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp:116
&gt;&gt; +    return isTransitioningToMomentumScroll() ? FloatPoint(m_wheelTicksX, m_wheelTicksY) : FloatPoint();
&gt; 
&gt; FloatPoint() -&gt; { }

The compiler doesn&apos;t like it: error: initializer list cannot be used on the right hand side of operator &apos;?&apos;

&gt;&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:128
&gt;&gt; +    return FloatPoint(accumDelta.x() * -1000 / (last - first), accumDelta.y() * -1000 / (last - first));
&gt; 
&gt; And here you could also use { }

The compiler doesn&apos;t like this, I have two times this error, one per parameter of the initializer list:
error: non-constant-expression cannot be narrowed from type &apos;double&apos; to &apos;float&apos; in initializer list [-Wc++11-narrowing]

&gt;&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:140
&gt;&gt; +        m_kineticAnimation-&gt;start(m_currentPosition, computeVelocity());
&gt; 
&gt; Don&apos;t we need to add the event to the history in this case too?

No because these events&apos; delta are by definition in GTK+ always (0, 0). I added a comment.

&gt;&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.h:34
&gt;&gt; +#include &quot;ScrollAnimationKinetic.h&quot;
&gt; 
&gt; Why do you need to include this in the header?

I explicitly used ScrollAnimationKinetic in the header, I replaced it by ScrollAnimation as you prefer and hence removed this line.

&gt;&gt; Source/WebKit2/Shared/NativeWebWheelEvent.h:55
&gt;&gt; +    NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase);
&gt; 
&gt; Maybe instead of adding a new constructor we could add the phase parameters with default values

The only way I see to implement it would be to set the defaults of phase and momentumPhase to None, to add the code of NativeWebWheelEvent(GdkEvent*) at the beggining of NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase) and to execute it only if the phase and momentumPhase are both None.

It doesn&apos;t look very clean to me as an explicit call with both phases set to None would end up having phases guessed from the event, breaking the semantic of the explicit value pasing. It would also make NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase) exist (with momentumPhase being None) which we probably don&apos;t want.

We could also remove the NativeWebWheelEvent(GdkEvent*) construtor and copy its code to each of its call points but it doesn&apos;t sound really clean to me either (it looks like it&apos;s only called in gboolean webkitWebViewBaseScrollEvent(GtkWidget* widget, GdkEventScroll* event) but I may have searched wrongly).

Do you have better suggestions or is one of these good for reasons I didn&apos;t think about?

&gt;&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:165
&gt;&gt; +WebWheelEvent WebEventFactory::createWebWheelEvent(const GdkEvent* event, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase)
&gt; 
&gt; Here we could probably also keep a single method just with default values for the phases.

I&apos;m not sure how to do it cleanly (see a previous comment on NativeWebWheelEvent.h), would you mind explaining me how to do so?

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1819
&gt;&gt; +        if (m_wheelEventQueue.size() &lt; wheelEventQueueSizeThreshold &amp;&amp; canSkipWheelEvent(event))
&gt; 
&gt; m_wheelEventQueue.size() &lt; wheelEventQueueSizeThreshold is also a condition to skip wheel events. So, I would replace all this with just if (!shouldProcessWheelEventNow(event)) and move the condition to the function. Note that we are not actually skipping events, just queuing them to process them later when we have a batch. So, the main question is why we are doing this, and why this doesn&apos;t work for us in this case. Because maybe this is just a matter of using 0 as threshold for the GTK+ port, and we always process wheel events immediately.

I think it was a bit more sluggish when directly processing all the events but I have no data to prove it.

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1865
&gt;&gt; +#endif
&gt; 
&gt; Since we are adding platform ifdefs in cross-platform code in any case here, I would keep the function common, checking the event queue size for all platforms, and then adding an #ifdef for GTK+, something like:
&gt; 
&gt; bool WebPageProxy::shouldProcessWheelEventNow(const WebWheelEvent&amp; event)
&gt; {
&gt;     if (m_wheelEventQueue.size() &gt;= wheelEventQueueSizeThreshold)
&gt;         return true;
&gt; #if PLATFORM(GTK)
&gt; return ....
&gt; #endif
&gt; }
&gt; 
&gt; Another way to avoid platform ifdefs here would be to add a method to WebWheelEvent, something like shouldBeProcessesImmediately or something like that, with a default implementation returning false, and a GTK+ implementation. I still don&apos;t understand the whole thing to propose any of the solution, though. In any case, we should explain this in the changelog and add a comment in the code as well.

IIRC the goal was to avoid having events representing the end of a regular scrolling session, the beginning of a momentum scrolling one or the end of a momentum scrolling one to stay trapped in the queue if no further event come to fill it up, triggering its processing. These trapped events can prevent a momentum scrolling session to start or end correctly.

It would probably be easier/safer to check that no event is in a None or Changed phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205041</commentid>
    <comment_count>28</comment_count>
      <attachid>281962</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-23 23:58:49 -0700</bug_when>
    <thetext>Created attachment 281962
[GTK] Add kinetic scrolling

Potentially missing bits:
- using the &quot;Optional&lt;PerAxisData&gt;&quot; from Andre&apos;s patch
- improving the NativeWebWheelEvent construction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205042</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-24 00:02:34 -0700</bug_when>
    <thetext>Attachment 281962 did not pass style-queue:


ERROR: Source/WebCore/platform/ScrollAnimationKinetic.cpp:135:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ScrollAnimationKinetic.cpp:139:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205071</commentid>
    <comment_count>30</comment_count>
      <attachid>281975</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-24 07:01:30 -0700</bug_when>
    <thetext>Created attachment 281975
[GTK] Add kinetic scrolling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205074</commentid>
    <comment_count>31</comment_count>
      <attachid>281962</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2016-06-24 07:20:48 -0700</bug_when>
    <thetext>Comment on attachment 281962
[GTK] Add kinetic scrolling

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

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:161
&gt; +    m_notifyPositionChangedFunction(FloatPoint(m_horizontalData.position(), m_verticalData.position()));

Here you are using the horizonte/vertical data position, but on ::start you only set them if mayV/HScroll are true, meaning you may be reusing the data from another scrolling event (you only initialize the PerAxisData on the constructor). Also, you want to use the original position (on notifyPositionChanged) for a given direction (x/y) if that doesnt change (mayV/HScroll=false) during animation and most probably not invoke animateScroll on that direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205079</commentid>
    <comment_count>32</comment_count>
      <attachid>281977</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-24 08:42:43 -0700</bug_when>
    <thetext>Created attachment 281977
[GTK] Add kinetic scrolling

Potentially missing bits:
- improving the NativeWebWheelEvent construction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205088</commentid>
    <comment_count>33</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2016-06-24 09:04:32 -0700</bug_when>
    <thetext>Changes look good to me. See also bug 158531, which may affect changes here in the GestureController::handleEvent if it gets in before this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205530</commentid>
    <comment_count>34</comment_count>
      <attachid>281977</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-27 05:54:12 -0700</bug_when>
    <thetext>Comment on attachment 281977
[GTK] Add kinetic scrolling

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

Looks good to me, thanks! We just need a wk2 owner to approve the changes in WebPageProxy

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:74
&gt; +    Optional&lt;PerAxisData&gt; m_horizontalData { Nullopt };
&gt; +    Optional&lt;PerAxisData&gt; m_verticalData { Nullopt };

You don&apos;t need to initialize these, the constructor already sets is to Nullopt.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:60
&gt; +        updatePosition(WTFMove(position));
&gt; +#if ENABLE(SMOOTH_SCROLLING)
&gt; +        if (m_smoothAnimation)
&gt; +            m_smoothAnimation-&gt;setCurrentPosition(position);
&gt; +#endif

hmm, this is a problem now that I see it, this is using position after being moved. You can probably just change the order, and call updatePosition after setCurrentPosition

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:107
&gt; +#if ENABLE(SMOOTH_SCROLLING)
&gt; +    if (m_smoothAnimation)
&gt; +        m_smoothAnimation-&gt;setCurrentPosition(position);
&gt; +#endif
&gt; +
&gt; +    updatePosition(WTFMove(position));

like you do here

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1893
&gt; +bool WebPageProxy::shouldProcessWheelEventNow(const WebWheelEvent&amp; event)
&gt; +{
&gt; +#if PLATFORM(GTK)
&gt; +    // Don&apos;t queue events representing a non-trivial scrolling phase to
&gt; +    // avoid having them trapped in the queue, potentially preventing a
&gt; +    // scrolling session to beginning or end correctly.
&gt; +    // This is only needed by platforms whose WebWheelEvent has this phase
&gt; +    // information (Cocoa and GTK+) but Cocoa was fine without it.
&gt; +    if (event.phase() == WebWheelEvent::Phase::PhaseNone
&gt; +        || event.phase() == WebWheelEvent::Phase::PhaseChanged
&gt; +        || event.momentumPhase() == WebWheelEvent::Phase::PhaseNone
&gt; +        || event.momentumPhase() == WebWheelEvent::Phase::PhaseChanged)
&gt; +        return true;
&gt; +#else
&gt; +    UNUSED_PARAM(event);
&gt; +#endif
&gt; +    if (m_wheelEventQueue.size() &gt;= wheelEventQueueSizeThreshold)
&gt; +        return true;
&gt; +    return false;
&gt; +}

This is in cross-platform code, we need approval from a WebKit2 owner

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:1469
&gt; +    bool shouldProcessWheelEventNow(const WebWheelEvent&amp;);

This could probably be const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205531</commentid>
    <comment_count>35</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-27 05:56:18 -0700</bug_when>
    <thetext>Adding wk2 owners to the CC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205538</commentid>
    <comment_count>36</comment_count>
      <attachid>282126</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-27 06:44:07 -0700</bug_when>
    <thetext>Created attachment 282126
[GTK] Add kinetic scrolling

Fixed all the points noted by Carlos in the last comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205539</commentid>
    <comment_count>37</comment_count>
      <attachid>282127</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-27 06:49:23 -0700</bug_when>
    <thetext>Created attachment 282127
[GTK] Add kinetic scrolling

Add files missing in the last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205540</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-27 06:50:20 -0700</bug_when>
    <thetext>Attachment 282127 did not pass style-queue:


ERROR: Source/WebKit2/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205545</commentid>
    <comment_count>39</comment_count>
      <attachid>282129</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-27 07:10:08 -0700</bug_when>
    <thetext>Created attachment 282129
[GTK] Add kinetic scrolling

Bis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205559</commentid>
    <comment_count>40</comment_count>
      <attachid>282129</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-27 08:44:08 -0700</bug_when>
    <thetext>Comment on attachment 282129
[GTK] Add kinetic scrolling

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

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:74
&gt; +    Optional&lt;PerAxisData&gt; m_horizontalData { Nullopt };
&gt; +    Optional&lt;PerAxisData&gt; m_verticalData { Nullopt };

You don&apos;t need to initialize these, the constructor already sets is to Nullopt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205560</commentid>
    <comment_count>41</comment_count>
      <attachid>281711</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-27 08:44:58 -0700</bug_when>
    <thetext>Comment on attachment 281711
Patch - new features + bugfix

Let&apos;s handle new stuff in a different bug, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205569</commentid>
    <comment_count>42</comment_count>
      <attachid>282136</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-27 09:10:24 -0700</bug_when>
    <thetext>Created attachment 282136
[GTK] Add kinetic scrolling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205572</commentid>
    <comment_count>43</comment_count>
      <attachid>282137</attachid>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-27 09:18:46 -0700</bug_when>
    <thetext>Created attachment 282137
[GTK] Add kinetic scrolling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205583</commentid>
    <comment_count>44</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2016-06-27 10:04:16 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; Comment on attachment 281711 [details]
&gt; Patch - new features + bugfix
&gt; 
&gt; Let&apos;s handle new stuff in a different bug, please.

Yep, Adrien already applied the bugfixes on his patch and I will open a new bug for the overshoot support once this one is merged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205584</commentid>
    <comment_count>45</comment_count>
    <who name="Adrien Plazas">aplazas</who>
    <bug_when>2016-06-27 10:12:43 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #41)
&gt; &gt; Comment on attachment 281711 [details]
&gt; &gt; Patch - new features + bugfix
&gt; &gt; 
&gt; &gt; Let&apos;s handle new stuff in a different bug, please.
&gt; 
&gt; Yep, Adrien already applied the bugfixes on his patch and I will open a new
&gt; bug for the overshoot support once this one is merged.

I opened a bug depending on this one to properly convert the wheel event phases rather than casting them at you suggested to do so Carlos: https://bugs.webkit.org/show_bug.cgi?id=159150</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205921</commentid>
    <comment_count>46</comment_count>
      <attachid>282137</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-28 00:08:28 -0700</bug_when>
    <thetext>Comment on attachment 282137
[GTK] Add kinetic scrolling

This looks good to me. Please, WebKit2 owners, if cross-platform changes (WebPageProxy) look good to you, just cq+ the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248384</commentid>
    <comment_count>47</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-04 17:15:29 -0700</bug_when>
    <thetext>Looks like this got forgotten. Pinging WK2 owners!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270077</commentid>
    <comment_count>48</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-25 18:06:31 -0800</bug_when>
    <thetext>Six months is way more than enough time for owners to object, so I think we can safely cq+ now, but it&apos;s also way more than enough time for this to bitrot. Real shame this did not land and we seemingly forgot about it. Adrien, any chance you&apos;re interested in updating the patch...?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316526</commentid>
    <comment_count>49</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-07 10:07:12 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #48)
&gt; Six months is way more than enough time for owners to object, so I think we
&gt; can safely cq+ now, but it&apos;s also way more than enough time for this to
&gt; bitrot. Real shame this did not land and we seemingly forgot about it.
&gt; Adrien, any chance you&apos;re interested in updating the patch...?

How is the situation of this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316544</commentid>
    <comment_count>50</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-07 10:52:11 -0700</bug_when>
    <thetext>We need to rebase it on trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317248</commentid>
    <comment_count>51</comment_count>
      <attachid>312397</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-09 00:07:51 -0700</bug_when>
    <thetext>Created attachment 312397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317249</commentid>
    <comment_count>52</comment_count>
      <attachid>312397</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-09 00:10:14 -0700</bug_when>
    <thetext>Comment on attachment 312397
Patch

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

I&apos;ve just rebased this patch.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:68
&gt; +static const double decelFriction = 4;
&gt; +static const double frameRate = 60;
&gt; +static const Seconds tickTime = 1_s / frameRate;
&gt; +static const Seconds minimumTimerInterval { 1_ms };

Modernized. Using Seconds.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:89
&gt; +bool ScrollAnimationKinetic::PerAxisData::animateScroll(Seconds timeDelta)

Using Seconds.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.cpp:149
&gt; +    m_startTime = MonotonicTime::now() - tickTime / 2.;

One of my change is this. It looks that the previous patch does not set m_startTime in any place.

&gt; Source/WebCore/platform/ScrollAnimationKinetic.h:73
&gt; +    std::optional&lt;PerAxisData&gt; m_horizontalData;
&gt; +    std::optional&lt;PerAxisData&gt; m_verticalData;

Use std::optional instead of Optional.

&gt; Source/WebCore/platform/gtk/ScrollAnimatorGtk.cpp:44
&gt; +static const Seconds scrollCaptureThreshold { 150_ms };

Modernized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317274</commentid>
    <comment_count>53</comment_count>
      <attachid>312405</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-09 01:03:00 -0700</bug_when>
    <thetext>Created attachment 312405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317302</commentid>
    <comment_count>54</comment_count>
      <attachid>312405</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-09 01:53:42 -0700</bug_when>
    <thetext>Comment on attachment 312405
Patch

Thanks, I had forgotten this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317305</commentid>
    <comment_count>55</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-09 01:58:39 -0700</bug_when>
    <thetext>Committed r217971: &lt;http://trac.webkit.org/changeset/217971&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274652</attachid>
            <date>2016-03-22 08:06:14 -0700</date>
            <delta_ts>2016-04-14 07:45:48 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>33808</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZTZjODdiMi4uYmU4MDI1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTc4NSw2ICs3ODUsNyBAQCBzZXQoR09iamVjdERPTUJpbmRp
bmdzX0dJUl9IRUFERVJTICR7R09iamVjdERPTUJpbmRpbmdzX0dJUl9IRUFERVJTfSBQQVJFTlRf
U0NPUAogCiBpZiAoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcpCiAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5jcHAKICAgICApCiBlbmRp
ZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRl
eCAwMjliYjllLi4yNGY5YjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybVdoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaApAQCAtODIsNiArODIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICAsIG1fc2Nyb2xsQ291bnQoMCkKICAgICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGFYKDApCiAgICAgICAgICAgICAsIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGlu
Z0RlbHRhWSgwKQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAgICAgLCBtX2lzU3RvcChm
YWxzZSkKICNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTEwMyw2ICsxMDUsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fc2Nyb2xsQ291bnQoMCkKICAgICAg
ICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYKDApCiAgICAgICAgICAgICAs
IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSgwKQorI2VsaWYgUExBVEZPUk0oR1RLKQor
ICAgICAgICAgICAgLCBtX2lzU3RvcChmYWxzZSkKICNlbmRpZgogICAgICAgICB7CiAgICAgICAg
IH0KQEAgLTE2MCw2ICsxNjQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
c2hvdWxkQ29uc2lkZXJMYXRjaGluZygpIGNvbnN0OwogICAgICAgICBib29sIHNob3VsZFJlc2V0
TGF0Y2hpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc0VuZEdlc3R1cmUoKSBjb25zdDsKKyNl
bGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgYm9vbCBpc1N0b3AoKSBjb25zdCB7IHJl
dHVybiBtX2lzU3RvcDsgfQogI2Vsc2UKICAgICAgICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMTg1LDYgKzE5Miw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgbV9zY3JvbGxDb3VudDsKICAg
ICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYOwogICAgICAgICBmbG9h
dCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVk7CisjZWxpZiBQTEFURk9STShHVEspCisg
ICAgICAgIGJvb2wgbV9pc1N0b3A7CiAjZW5kaWYKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxM2Q3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApAQCAtMCwwICsxLDMw
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIgor
CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJl
YS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCitzdGF0aWMgY29uc3QgZG91Ymxl
IGRlY2VsRnJpY3Rpb24gPSA0Oworc3RhdGljIGNvbnN0IGRvdWJsZSBvdmVyc2hvb3RGcmljdGlv
biA9IDIwOworCitzdGF0aWMgY29uc3QgZG91YmxlIGZyYW1lUmF0ZSA9IDYwOworc3RhdGljIGNv
bnN0IGRvdWJsZSB0aWNrVGltZSA9IDEgLyBmcmFtZVJhdGU7CitzdGF0aWMgY29uc3QgZG91Ymxl
IG1pbmltdW1UaW1lckludGVydmFsID0gLjAwMTsKKworc3RhdGljIGlubGluZSBkb3VibGUgY2xh
bXAoZG91YmxlIHgsIGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSB7CisgICAgcmV0dXJuICh4ID4g
aGlnaCkgPyBoaWdoIDogKCh4IDwgbG93KSA/IGxvdyA6IHgpOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9sbEV2ZW50OjpTY3JvbGxFdmVu
dChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgc3RlcCwgZmxvYXQgbXVs
dGlwbGllciwgZG91YmxlIHRpbWUpCisgICAgOiBtX3RpbWUodGltZSkKKyAgICAsIG1fZHgob3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0ZXAgKiBtdWx0aXBsaWVyIDogMCkK
KyAgICAsIG1fZHkob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyBzdGVwICogbXVs
dGlwbGllciA6IDApCit7Cit9CisKK1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6OktpbmV0aWNTY3Jv
bGxpbmc6OktpbmV0aWNTY3JvbGxpbmcgKCkKKyAgICA6IEtpbmV0aWNTY3JvbGxpbmcoMCwgMCwg
MCwgMCkKK3sKK30KKworU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6S2luZXRpY1Njcm9sbGluZzo6
S2luZXRpY1Njcm9sbGluZyAoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0
aWFsUG9zaXRpb24sIGRvdWJsZSBpbml0aWFsVmVsb2NpdHkpCisgICAgOiBtX3BoYXNlKFBoYXNl
OjpEZWNlbGVyYXRpbmcpCisgICAgLCBtX2xvd2VyKGxvd2VyKQorICAgICwgbV91cHBlcih1cHBl
cikKKyAgICAsIG1fb3ZlcnNob290V2lkdGgoMCkKKyAgICAsIG1fZGVjZWxGcmljdGlvbihkZWNl
bEZyaWN0aW9uKQorICAgICwgbV9vdmVyc2hvb3RGcmljdGlvbihvdmVyc2hvb3RGcmljdGlvbikK
KyAgICAsIG1fYzEoMCkKKyAgICAsIG1fYzIoMCkKKyAgICAsIG1fZXF1aWxpYnJpdW1Qb3NpdGlv
bigwKQorICAgICwgbV90KDApCisgICAgLCBtX3Bvc2l0aW9uKGNsYW1wKGluaXRpYWxQb3NpdGlv
biwgbG93ZXIsIHVwcGVyKSkKKyAgICAsIG1fdmVsb2NpdHkoaW5pdGlhbFZlbG9jaXR5KQorewor
ICAgIGlmKGluaXRpYWxQb3NpdGlvbiA8IGxvd2VyKQorICAgICAgICBpbml0T3ZlcnNob290IChs
b3dlciwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsVmVsb2NpdHkpOworICAgIGVsc2UgaWYoaW5p
dGlhbFBvc2l0aW9uID4gdXBwZXIpCisgICAgICAgIGluaXRPdmVyc2hvb3QgKHVwcGVyLCBpbml0
aWFsUG9zaXRpb24sIGluaXRpYWxWZWxvY2l0eSk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGhh
c2UgPSBQaGFzZTo6RGVjZWxlcmF0aW5nOworICAgICAgICBtX2MxID0gaW5pdGlhbFZlbG9jaXR5
IC8gbV9kZWNlbEZyaWN0aW9uICsgaW5pdGlhbFBvc2l0aW9uOworICAgICAgICBtX2MyID0gLWlu
aXRpYWxWZWxvY2l0eSAvIG1fZGVjZWxGcmljdGlvbjsKKyAgICAgICAgbV90ID0gMDsKKyAgICAg
ICAgbV9wb3NpdGlvbiA9IGluaXRpYWxQb3NpdGlvbjsKKyAgICAgICAgbV92ZWxvY2l0eSA9IGlu
aXRpYWxWZWxvY2l0eTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6
S2luZXRpY1Njcm9sbGluZzo6dGljayAoZG91YmxlIHRpbWVfZGVsdGEpCit7CisgICAgc3dpdGNo
IChtX3BoYXNlKSB7CisgICAgY2FzZSBQaGFzZTo6RGVjZWxlcmF0aW5nOiB7CisgICAgICAgIG1f
dCArPSB0aW1lX2RlbHRhOworCisgICAgICAgIGRvdWJsZSBleHBfcGFydCA9IGV4cCAoLW1fZGVj
ZWxGcmljdGlvbiAqIG1fdCk7CisgICAgICAgIG1fcG9zaXRpb24gPSBtX2MxICsgbV9jMiAqIGV4
cF9wYXJ0OworICAgICAgICBtX3ZlbG9jaXR5ID0gLW1fZGVjZWxGcmljdGlvbiAqIG1fYzIgKiBl
eHBfcGFydDsKKworICAgICAgICBpZihtX3Bvc2l0aW9uIDwgbV9sb3dlcikKKyAgICAgICAgICAg
IGluaXRPdmVyc2hvb3QobV9sb3dlciwgbV9wb3NpdGlvbiwgbV92ZWxvY2l0eSk7CisgICAgICAg
IGVsc2UgaWYgKG1fcG9zaXRpb24gPiBtX3VwcGVyKQorICAgICAgICAgICAgaW5pdE92ZXJzaG9v
dChtX3VwcGVyLCBtX3Bvc2l0aW9uLCBtX3ZlbG9jaXR5KTsKKyAgICAgICAgZWxzZSBpZiAoZmFi
cyhtX3ZlbG9jaXR5KSA8IDEpIHsKKyAgICAgICAgICAgIG1fcGhhc2UgPSBQaGFzZTo6RmluaXNo
ZWQ7CisgICAgICAgICAgICBtX3Bvc2l0aW9uID0gcm91bmQobV9wb3NpdGlvbik7CisgICAgICAg
ICAgICBtX3ZlbG9jaXR5ID0gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIFBoYXNlOjpPdmVyc2hvb3Rpbmc6IHsKKyAgICAgICAgbV90ICs9IHRpbWVfZGVs
dGE7CisgICAgICAgIGRvdWJsZSBleHBfcGFydCA9IGV4cCgtbV9vdmVyc2hvb3RGcmljdGlvbiAv
IDIgKiBtX3QpOworICAgICAgICBkb3VibGUgcG9zID0gZXhwX3BhcnQgKiAobV9jMSArIG1fYzIg
KiBtX3QpOworCisgICAgICAgIGlmIChwb3MgPCBtX2xvd2VyIC0gNTAgfHwgcG9zID4gbV91cHBl
ciArIDUwKSB7CisgICAgICAgICAgICBwb3MgPSBjbGFtcCAocG9zLCBtX2xvd2VyIC0gNTAsIG1f
dXBwZXIgKyA1MCk7CisgICAgICAgICAgICBpbml0T3ZlcnNob290IChtX2VxdWlsaWJyaXVtUG9z
aXRpb24sIHBvcywgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92
ZWxvY2l0eSA9IG1fYzIgKiBleHBfcGFydCAtIG1fb3ZlcnNob290RnJpY3Rpb24gLyAyICogcG9z
OworCisgICAgICAgIG1fcG9zaXRpb24gPSBwb3MgKyBtX2VxdWlsaWJyaXVtUG9zaXRpb247CisK
KyAgICAgICAgaWYoZmFicyAocG9zKSA8IDAuMSkgeworICAgICAgICAgICAgbV9waGFzZSA9IFBo
YXNlOjpGaW5pc2hlZDsKKyAgICAgICAgICAgIG1fcG9zaXRpb24gPSBtX2VxdWlsaWJyaXVtUG9z
aXRpb247CisgICAgICAgICAgICBtX3ZlbG9jaXR5ID0gMDsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIFBoYXNlOjpGaW5pc2hlZDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIG1fcGhhc2UgIT0gUGhhc2U6OkZpbmlzaGVkOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OktpbmV0aWNTY3JvbGxpbmc6OmluaXRPdmVyc2hv
b3QoZG91YmxlIGVxdWlsaWJyaXVtUG9zaXRpb24sIGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRv
dWJsZSBpbml0aWFsVmVsb2NpdHkpCit7CisgICAgbV9waGFzZSA9IFBoYXNlOjpPdmVyc2hvb3Rp
bmc7CisgICAgbV9lcXVpbGlicml1bVBvc2l0aW9uID0gZXF1aWxpYnJpdW1Qb3NpdGlvbjsKKyAg
ICBtX2MxID0gaW5pdGlhbFBvc2l0aW9uIC0gbV9lcXVpbGlicml1bVBvc2l0aW9uOworICAgIG1f
YzIgPSBpbml0aWFsVmVsb2NpdHkgKyBtX292ZXJzaG9vdEZyaWN0aW9uIC8gMiAqIG1fYzE7Cisg
ICAgbV90ID0gMDsKK30KKworU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6U2Nyb2xsQW5pbWF0aW9u
S2luZXRpYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbikKKyAgICA6
IFNjcm9sbEFuaW1hdGlvbihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1fbm90aWZ5UG9zaXRpb25D
aGFuZ2VkRnVuY3Rpb24oV1RGTW92ZShub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbikpCisj
aWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorICAgICwgbV9hbmltYXRpb25U
aW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQp
CisjZWxzZQorICAgICwgbV9hbmltYXRpb25BY3RpdmUoZmFsc2UpCisjZW5kaWYKK3sKK30KKwor
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6flNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKQoreworfQor
Citib29sIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIpCit7CisgICAgaWYgKGFuaW1hdGlvblRpbWVyQWN0aXZlKCkpCisgICAgICAgIGNhbmNl
bERlY2VsZXJhdGlvbigpOworCisgICAgbV9zY3JvbGxIaXN0b3J5LmFwcGVuZChTY3JvbGxFdmVu
dChvcmllbnRhdGlvbiwgc3RlcCwgbXVsdGlwbGllciwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkpKTsKKworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gbV9wb3NpdGlvbjsK
KyAgICBGbG9hdFNpemUgZGVsdGE7CisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIGRlbHRhLnNldFdpZHRoKHN0ZXAgKiBtdWx0aXBsaWVyKTsKKyAg
ICBlbHNlCisgICAgICAgIGRlbHRhLnNldEhlaWdodChzdGVwICogbXVsdGlwbGllcik7CisKKyAg
ICBGbG9hdFBvaW50IG5ld1Bvc2l0aW9uID0gRmxvYXRQb2ludChjdXJyZW50UG9zaXRpb24gKyBk
ZWx0YSkuY29uc3RyYWluZWRCZXR3ZWVuKG1fc2Nyb2xsYWJsZUFyZWEubWluaW11bVNjcm9sbFBv
c2l0aW9uKCksIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAg
IGlmIChjdXJyZW50UG9zaXRpb24gPT0gbmV3UG9zaXRpb24pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1fcG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdG9wKCkKK3sKKyAgICBpZiAoYW5pbWF0
aW9uVGltZXJBY3RpdmUoKSkKKyAgICAgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7CisKKyNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCisgICAgbV9hbmltYXRpb25UaW1l
ci5zdG9wKCk7CisjZWxzZQorICAgIG1fYW5pbWF0aW9uQWN0aXZlID0gZmFsc2U7CisjZW5kaWYK
K30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjp1cGRhdGVWaXNpYmxlTGVuZ3Rocygp
Cit7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c2V0Q3VycmVudFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgc3RvcCgpOworICAgIG1fc2Nyb2xsSGlzdG9y
eS5jbGVhcigpOworICAgIG1fcG9zaXRpb24gPSBwOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlv
bktpbmV0aWM6OnN0YXJ0RGVjZWxlcmF0aW9uKCkgeworICAgIG1fc3RhcnRUaW1lID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSB0aWNrVGltZSAvIDI7CisgICAgYW5pbWF0aW9uVGlt
ZXJGaXJlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmNhbmNlbERlY2Vs
ZXJhdGlvbigpIHsKKyAgICBzdG9wKCk7Cit9CisKKyNpZiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX1RJTUVSKQordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzZXJ2aWNlQW5pbWF0
aW9uKCkKK3sKKyAgICBpZiAobV9hbmltYXRpb25BY3RpdmUpCisgICAgICAgIGFuaW1hdGlvblRp
bWVyRmlyZWQoKTsKK30KKyNlbmRpZgorCitib29sIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6Omlu
aXREZWNlbGVyYXRpb24oKQoreworICAgIGlmIChtX3Njcm9sbEhpc3RvcnkuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkb3VibGUgYWNjdW1fZHggPSAwOworICAgIGRv
dWJsZSBhY2N1bV9keSA9IDA7CisgICAgZm9yIChhdXRvIGkgPSBtX3Njcm9sbEhpc3RvcnkuYmVn
aW4oKTsgaSAhPSBtX3Njcm9sbEhpc3RvcnkuZW5kKCk7IGkrKykgeworICAgICAgICBhY2N1bV9k
eCArPSBpLT5keCgpOworICAgICAgICBhY2N1bV9keSArPSBpLT5keSgpOworICAgIH0KKworICAg
IGRvdWJsZSBmaXJzdCA9IG1fc2Nyb2xsSGlzdG9yeS5iZWdpbigpLT50aW1lKCk7CisgICAgZG91
YmxlIGxhc3QgPSBtX3Njcm9sbEhpc3RvcnkucmJlZ2luKCktPnRpbWUoKTsKKworICAgIGlmIChs
YXN0ID09IGZpcnN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkb3VibGUgdmVsb2Np
dHlfeCA9IGFjY3VtX2R4IC8gKGxhc3QgLSBmaXJzdCk7CisgICAgZG91YmxlIHZlbG9jaXR5X3kg
PSBhY2N1bV9keSAvIChsYXN0IC0gZmlyc3QpOworCisgICAgbV9ob3Jpem9udGFsRGF0YSA9IEtp
bmV0aWNTY3JvbGxpbmcobV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wb3NpdGlvbi54KCksIHZlbG9jaXR5X3gpOworICAgIG1fdmVy
dGljYWxEYXRhID0gS2luZXRpY1Njcm9sbGluZyhtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3Jv
bGxQb3NpdGlvbigpLnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zaXRpb24ueSgpLCB2ZWxvY2l0eV95KTsK
KworICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVhcigpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9uVGltZXJGaXJlZCgpCit7Cisg
ICAgaWYgKCFtX3Njcm9sbEhpc3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBpbml0RGVjZWxlcmF0
aW9uKCk7CisKKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKTsKKyAgICBkb3VibGUgZGVsdGFUb05leHRGcmFtZSA9IGNlaWwoKGN1cnJlbnRUaW1l
IC0gbV9zdGFydFRpbWUpICogZnJhbWVSYXRlKSAvIGZyYW1lUmF0ZSAtIChjdXJyZW50VGltZSAt
IG1fc3RhcnRUaW1lKTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRpb24gPSBmYWxzZTsKKyAg
ICBpZiAobV9ob3Jpem9udGFsRGF0YS50aWNrKGRlbHRhVG9OZXh0RnJhbWUpKQorICAgICAgICBj
b250aW51ZUFuaW1hdGlvbiA9IHRydWU7CisgICAgaWYgKG1fdmVydGljYWxEYXRhLnRpY2soZGVs
dGFUb05leHRGcmFtZSkpCisgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKKworICAg
IGlmIChjb250aW51ZUFuaW1hdGlvbikKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVf
VElNRVIpCisgICAgICAgIHN0YXJ0TmV4dFRpbWVyKHN0ZDo6bWF4KG1pbmltdW1UaW1lckludGVy
dmFsLCBkZWx0YVRvTmV4dEZyYW1lKSk7CisjZWxzZQorICAgICAgICBzdGFydE5leHRUaW1lcigp
OworICAgIGVsc2UKKyAgICAgICAgbV9hbmltYXRpb25BY3RpdmUgPSBmYWxzZTsKKyNlbmRpZgor
CisgICAgbV9wb3NpdGlvbiA9IEZsb2F0UG9pbnQobV9ob3Jpem9udGFsRGF0YS5wb3NpdGlvbigp
LCBtX3ZlcnRpY2FsRGF0YS5wb3NpdGlvbigpKTsKKworICAgIG1fbm90aWZ5UG9zaXRpb25DaGFu
Z2VkRnVuY3Rpb24oRmxvYXRQb2ludChtX3Bvc2l0aW9uKSk7Cit9CisKKyNpZiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfVElNRVIpCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0
YXJ0TmV4dFRpbWVyKGRvdWJsZSBkZWxheSkKK3sKKyAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0
T25lU2hvdChkZWxheSk7Cit9CisjZWxzZQordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpz
dGFydE5leHRUaW1lcigpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEuc2NoZWR1bGVBbmlt
YXRpb24oKSkKKyAgICAgICAgbV9hbmltYXRpb25BY3RpdmUgPSB0cnVlOworfQorI2VuZGlmCisK
K2Jvb2wgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9uVGltZXJBY3RpdmUoKSBjb25z
dAoreworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKKyAgICByZXR1cm4g
bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gbV9hbmltYXRp
b25BY3RpdmU7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMmU1ZjIzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1h
dGlvbktpbmV0aWNfaAorI2RlZmluZSBTY3JvbGxBbmltYXRpb25LaW5ldGljX2gKKworI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgorCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisK
KyNpZiAhRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorI2Vycm9yICJTTU9PVEhfU0NS
T0xMSU5HIHJlcXVpcmVzIFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FIHRvIGJlIGVuYWJsZWQuIgor
I2VuZGlmCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Ny
b2xsQW5pbWF0aW9uS2luZXRpYyBmaW5hbDogcHVibGljIFNjcm9sbEFuaW1hdGlvbiB7Citwcml2
YXRlOgorICAgIGNsYXNzIFNjcm9sbEV2ZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjcm9s
bEV2ZW50KFNjcm9sbGJhck9yaWVudGF0aW9uLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVy
LCBkb3VibGUgdGltZSk7CisgICAgICAgIGRvdWJsZSB0aW1lKCkgY29uc3QgeyByZXR1cm4gbV90
aW1lOyB9CisgICAgICAgIGRvdWJsZSBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KKyAgICAg
ICAgZG91YmxlIGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgZG91YmxlIG1fdGltZTsKKyAgICAgICAgZG91YmxlIG1fZHg7CisgICAgICAgIGRvdWJs
ZSBtX2R5OworCisgICAgfTsKKworICAgIC8vIEtpbmV0aWNTY3JvbGxpbmcgaXMgYSBwb3J0IG9m
IEd0a0tpbmV0aWNTY3JvbGxpbmcgYXMgb2YgR1RLKyAzLjIwLCBtaW1pY2tpbmcgaXRzIEFQSSBh
bmQgaXRzIGJlaGF2aW9yLgorICAgIGNsYXNzIEtpbmV0aWNTY3JvbGxpbmcgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgZW51bSBjbGFzcyBQaGFzZSB7CisgICAgICAgICAgICBEZWNlbGVyYXRpbmcs
CisgICAgICAgICAgICBPdmVyc2hvb3RpbmcsCisgICAgICAgICAgICBGaW5pc2hlZCwKKyAgICAg
ICAgfTsKKworICAgICAgICBLaW5ldGljU2Nyb2xsaW5nICgpOworICAgICAgICBLaW5ldGljU2Ny
b2xsaW5nIChkb3VibGUgbG93ZXIsIGRvdWJsZSB1cHBlciwgZG91YmxlIGluaXRpYWxfcG9zaXRp
b24sIGRvdWJsZSBpbml0aWFsX3ZlbG9jaXR5KTsKKworICAgICAgICBib29sIHRpY2sgKGRvdWJs
ZSB0aW1lX2RlbHRhKTsKKworICAgICAgICB2b2lkIHBvc2l0aW9uKGRvdWJsZSBwKSB7IG1fcG9z
aXRpb24gPSBwOyB9CisgICAgICAgIGRvdWJsZSBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KKyAgICAgICAgdm9pZCBzdGFydFRpbWUoZG91YmxlIHQpIHsgbV90ID0gdDsg
fQorICAgICAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV90OyB9CisgICAg
ICAgIHZvaWQgdmVsb2NpdHkoZG91YmxlIHYpIHsgbV92ZWxvY2l0eSA9IHY7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgaW5pdE92ZXJzaG9vdCAoZG91YmxlIGVxdWlsaWJyaXVtX3Bv
c2l0aW9uLCBkb3VibGUgaW5pdGlhbF9wb3NpdGlvbiwgZG91YmxlIGluaXRpYWxfdmVsb2NpdHkp
OworCisgICAgICAgIFBoYXNlIG1fcGhhc2U7CisgICAgICAgIGRvdWJsZSBtX2xvd2VyOworICAg
ICAgICBkb3VibGUgbV91cHBlcjsKKyAgICAgICAgZG91YmxlIG1fb3ZlcnNob290V2lkdGg7Cisg
ICAgICAgIGRvdWJsZSBtX2RlY2VsRnJpY3Rpb247CisgICAgICAgIGRvdWJsZSBtX292ZXJzaG9v
dEZyaWN0aW9uOworCisgICAgICAgIGRvdWJsZSBtX2MxOworICAgICAgICBkb3VibGUgbV9jMjsK
KyAgICAgICAgZG91YmxlIG1fZXF1aWxpYnJpdW1Qb3NpdGlvbjsKKworICAgICAgICBkb3VibGUg
bV90OworICAgICAgICBkb3VibGUgbV9wb3NpdGlvbjsKKyAgICAgICAgZG91YmxlIG1fdmVsb2Np
dHk7CisgICAgfTsKKworcHVibGljOgorICAgIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xs
YWJsZUFyZWEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKEZsb2F0UG9pbnQmJik+JiYgbm90aWZ5UG9z
aXRpb25DaGFuZ2VkRnVuY3Rpb24pOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdGlvbktpbmV0
aWMoKTsKKworICAgIGVudW0gY2xhc3MgQ3VydmUgeworICAgICAgICBMaW5lYXIsCisgICAgICAg
IFF1YWRyYXRpYywKKyAgICAgICAgQ3ViaWMsCisgICAgICAgIFF1YXJ0aWMsCisgICAgICAgIEJv
dW5jZQorICAgIH07CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEN1
cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGFy
dERlY2VsZXJhdGlvbigpOworICAgIHZvaWQgY2FuY2VsRGVjZWxlcmF0aW9uKCk7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRV9USU1FUikKKyAgICB2b2lkIHNlcnZpY2VBbmltYXRpb24oKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlcXVlc3RBbmltYXRpb25UaW1lckZpcmVkKCk7CisjZW5kaWYKKworI2lmIFVTRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKKyAgICB2b2lkIHN0YXJ0TmV4dFRpbWVyKGRv
dWJsZSBkZWxheSk7CisjZWxzZQorICAgIHZvaWQgc3RhcnROZXh0VGltZXIoKTsKKyNlbmRpZgor
ICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOworICAgIGJvb2wgYW5pbWF0aW9uVGltZXJB
Y3RpdmUoKSBjb25zdDsKKyAgICBib29sIGluaXREZWNlbGVyYXRpb24oKTsKKworICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5j
dGlvbjsKKworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBWZWN0b3I8U2Nyb2xsRXZl
bnQ+IG1fc2Nyb2xsSGlzdG9yeTsKKyAgICBLaW5ldGljU2Nyb2xsaW5nIG1faG9yaXpvbnRhbERh
dGE7CisgICAgS2luZXRpY1Njcm9sbGluZyBtX3ZlcnRpY2FsRGF0YTsKKworICAgIGRvdWJsZSBt
X3N0YXJ0VGltZSB7IDAgfTsKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIp
CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKyNlbHNlCisgICAgYm9vbCBtX2FuaW1hdGlv
bkFjdGl2ZSB7IGZhbHNlIH07CisjZW5kaWYKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjZW5kaWYgLy8gU2Nyb2xs
QW5pbWF0aW9uS2luZXRpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5jcHAKaW5kZXggYjc5YzQ5OS4uZDcwYjQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMTE5LDYgKzExOSwxNCBAQCBib29sIFNjcm9sbEFuaW1h
dG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKICAgICAv
LyBmb29sIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGludG8gYXR0ZW1wdGluZyB0byBoYW5kbGUgdGhl
IHNjcm9sbCwgdW5sZXNzIHdlIHRyZWF0IHRoZSBldmVudCBhcyBoYW5kbGVkIGhlcmUuCiAgICAg
aWYgKGUucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2luKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBHREsgc2Nyb2xsIHN0
b3AgZXZlbnRzIGFyZSB1c2VkIHRvIG5vdGlmeSB0aGF0IHRoZSBzY3JvbGxpbmcgY2FtZSB0byBh
biBlbmQgYW5kIHRoYXQgZGVjZWxlcmF0aW9uIGNhbiBiZSB0cmlnZ2VyZWQuCisgICAgaWYgKGUu
aXNTdG9wKCkpIHsKKyAgICAgICAgc3RhcnREZWNlbGVyYXRpb24oKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgY2FuY2VsRGVjZWxlcmF0aW9uKCk7CiAj
ZW5kaWYKIAogICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IG1fc2Nyb2xsYWJs
ZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKaW5kZXggZGQwZjNhNC4uYjI3ODIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC05MCw2ICs5MCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXJ2aWNl
U2Nyb2xsQW5pbWF0aW9ucygpIHsgfQogCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0RGVjZWxlcmF0
aW9uKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbERlY2VsZXJhdGlvbigpIHsgfQorCiAg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QgeyB9CiAgICAgdmly
dHVhbCB2b2lkIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggMTA0NWM0NC4uNmE1
ODQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hl
ZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
V2hlZWxFdmVudEd0ay5jcHAKQEAgLTgzLDYgKzgzLDEyIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6
UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlj
a3NYID0gbV9kZWx0YVg7CiAgICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMTksIDcpCisgICAgbV9pc1N0b3AgPSBldmVudC0+aXNfc3RvcDsK
KyNlbHNlCisgICAgbV9pc1N0b3AgPSBmYWxzZTsKKyNlbmRpZgorCiAgICAgbV9wb3NpdGlvbiA9
IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2
ZW50LT55KSk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGlu
dD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnlfcm9vdCkpOwogICAg
IG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCmluZGV4IGYwZDcyMTYu
LmZkMDM1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxB
bmltYXRvckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFu
aW1hdG9yR3RrLmNwcApAQCAtNTAsNiArNTAsNyBAQCBTY3JvbGxBbmltYXRvckd0azo6U2Nyb2xs
QW5pbWF0b3JHdGsoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xs
QW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRp
b25UaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yR3RrOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uVGltZXJGaXJlZCkKIHsKKyAgICBlbnN1cmVLaW5ldGljU2Nyb2xsaW5nQW5pbWF0aW9uKCk7
CiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgaWYgKHNjcm9sbGFibGVBcmVhLnNj
cm9sbEFuaW1hdG9yRW5hYmxlZCgpKQogICAgICAgICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmlt
YXRpb24oKTsKQEAgLTc0LDggKzc1LDI0IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3Vy
ZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpCiAgICAgbV9hbmltYXRpb24tPnNldEN1cnJlbnRQ
b3NpdGlvbihtX2N1cnJlbnRQb3NpdGlvbik7CiB9CiAKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6
OmVuc3VyZUtpbmV0aWNTY3JvbGxpbmdBbmltYXRpb24oKQoreworICAgIGlmIChtX2tpbmV0aWNf
YW5pbWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2tpbmV0aWNfYW5pbWF0aW9uID0g
c3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5ldGljPihtX3Njcm9sbGFibGVBcmVh
LCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAgIEZsb2F0U2l6ZSBkZWx0
YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247CisgICAgICAgIG1fY3VycmVudFBvc2l0
aW9uID0gV1RGTW92ZShwb3NpdGlvbik7CisgICAgICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChk
ZWx0YSk7CisgICAgfSk7CisgICAgbV9raW5ldGljX2FuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0
aW9uKG1fY3VycmVudFBvc2l0aW9uKTsKK30KKwogYm9vbCBTY3JvbGxBbmltYXRvckd0azo6c2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKIHsKKyAgICBlbnN1cmVL
aW5ldGljU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CisgICAgbV9raW5ldGljX2FuaW1hdGlvbi0+c2Ny
b2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisKICAgICBp
ZiAoIW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkgfHwgZ3JhbnVsYXJp
dHkgPT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAK
QEAgLTg2LDYgKzEwMyw5IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpCiB2b2lkIFNjcm9sbEFu
aW1hdG9yR3RrOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgb2Zmc2V0KQogewogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCwgdG9GbG9hdFNpemUobV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxPcmlnaW4oKSkpOworICAgIGlmIChtX2tpbmV0aWNfYW5pbWF0aW9uKQorICAg
ICAgICBtX2tpbmV0aWNfYW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOwor
CiAgICAgaWYgKG1fYW5pbWF0aW9uKQogICAgICAgICBtX2FuaW1hdGlvbi0+c2V0Q3VycmVudFBv
c2l0aW9uKHBvc2l0aW9uKTsKIApAQCAtOTYsMTMgKzExNiwzMiBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yR3RrOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYg
b2Zmc2V0KQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiB7
CisgICAgaWYgKG1fa2luZXRpY19hbmltYXRpb24pCisgICAgICAgIG1fa2luZXRpY19hbmltYXRp
b24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKICAgICBpZiAobV9hbmltYXRpb24pCiAgICAg
ICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogfQogI2VuZGlmCiAKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JHdGs6OnN0YXJ0RGVjZWxlcmF0aW9uKCkKK3sKKyAgICBlbnN1cmVL
aW5ldGljU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CisgICAgbV9raW5ldGljX2FuaW1hdGlvbi0+c3Rh
cnREZWNlbGVyYXRpb24oKTsKKworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpjYW5jZWxE
ZWNlbGVyYXRpb24oKQoreworICAgIGVuc3VyZUtpbmV0aWNTY3JvbGxpbmdBbmltYXRpb24oKTsK
KyAgICBtX2tpbmV0aWNfYW5pbWF0aW9uLT5jYW5jZWxEZWNlbGVyYXRpb24oKTsKKworfQorCiB2
b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKIHsKKyAgICBpZiAobV9raW5ldGljX2FuaW1hdGlvbikKKyAgICAgICAgbV9r
aW5ldGljX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNpZiBFTkFCTEUoU01P
T1RIX1NDUk9MTElORykKICAgICBpZiAobV9hbmltYXRpb24pCiAgICAgICAgIG1fYW5pbWF0aW9u
LT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwpAQCAtMTE4LDYgKzE1Nyw4IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQogeworICAgIGlmIChtX2tpbmV0aWNfYW5pbWF0aW9uKQorICAg
ICAgICBtX2tpbmV0aWNfYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2lmIEVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIGlmIChtX2FuaW1hdGlvbikKICAgICAgICAgbV9h
bmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCmluZGV4IDcwZTViNzMuLjlkY2VhYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCkBA
IC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFNjcm9sbEFuaW1hdG9yR3RrX2gKIAogI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDYgKzUxLDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7CiAjZW5k
aWYKIAorICAgIHZvaWQgc3RhcnREZWNlbGVyYXRpb24oKSBvdmVycmlkZTsKKyAgICB2b2lkIGNh
bmNlbERlY2VsZXJhdGlvbigpIG92ZXJyaWRlOworCiAgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEFkZEhvcml6b250YWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxsUmVtb3ZlVmVydGlj
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CkBAIC02OCwxMSArNzIsMTUgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOwogICAgIHZvaWQgdXBkYXRl
T3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7CiAKKyAgICB2b2lkIGVuc3VyZUtpbmV0aWNTY3Jv
bGxpbmdBbmltYXRpb24oKTsKKworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAg
dm9pZCBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTY3JvbGxBbmltYXRpb24+IG1fYW5pbWF0aW9uOwogI2VuZGlmCisgICAgc3RkOjp1bmlx
dWVfcHRyPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+IG1fa2luZXRpY19hbmltYXRpb247CiAgICAg
U2Nyb2xsYmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwogICAg
IFNjcm9sbGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07CiAgICAg
Ym9vbCBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkV2ZW50LmgKaW5kZXggNGJmYTBkOC4uOWY3ZmU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50
LmgKQEAgLTE5Niw2ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSwgTW9kaWZpZXJzLCBk
b3VibGUgdGltZXN0YW1wKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXZWJXaGVlbEV2ZW50
KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRh
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBib29s
IGRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSwgUGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2Us
IGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgdWludDMyX3Qgc2Nyb2xsQ291bnQsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhLCBNb2Rp
ZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIFdlYldo
ZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgYm9vbCBpc1N0
b3AsIEdyYW51bGFyaXR5LCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOwogI2VuZGlmCiAK
ICAgICBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KQEAgLTIxMCw2ICsyMTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQcmVj
aXNlU2Nyb2xsaW5nRGVsdGFzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQcmVjaXNlU2Nyb2xsaW5n
RGVsdGFzOyB9CiAgICAgdWludDMyX3Qgc2Nyb2xsQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbENvdW50OyB9CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB1bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YTsgfQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIGJvb2wgaXNTdG9wKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1N0b3A7IH0KICNlbmRpZgogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVu
dEVuY29kZXImKSBjb25zdDsKQEAgLTIzMCw2ICsyMzQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwogICAgIHVpbnQzMl90IG1fc2Nyb2xsQ291bnQ7
CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhOwor
I2VsaWYgUExBVEZPUk0oR1RLKQorICAgIGJvb2wgbV9pc1N0b3A7CiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKaW5kZXggZWViNzQ0
MS4uM2ZkNWYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29u
dmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lv
bi5jcHAKQEAgLTE1OCw2ICsxNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2Nyb2xsQ291bnQg
PSB3ZWJFdmVudC5zY3JvbGxDb3VudCgpOwogICAgICAgICBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxp
bmdEZWx0YVggPSB3ZWJFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKS53aWR0aCgp
OwogICAgICAgICBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkgPSB3ZWJFdmVudC51bmFj
Y2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKS5oZWlnaHQoKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykK
KyAgICAgICAgbV9pc1N0b3AgPSB3ZWJFdmVudC5pc1N0b3AoKTsKICNlbmRpZgogICAgIH0KIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKaW5kZXggZDI1MGExNC4uNmZi
YzRhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcApAQCAtNDUsNiAr
NDUsOCBAQCBXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludAogICAgICwgbV9waGFzZShQaGFzZU5vbmUp
CiAgICAgLCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoZmFsc2UpCiAgICAgLCBtX3Njcm9s
bENvdW50KDApCisjZWxpZiBQTEFURk9STShHVEspCisgICAgLCBtX2lzU3RvcChmYWxzZSkKICNl
bmRpZgogewogICAgIEFTU0VSVChpc1doZWVsRXZlbnRUeXBlKHR5cGUpKTsKQEAgLTY3LDYgKzY5
LDE5IEBAIFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQ
b2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50CiB7CiAgICAgQVNTRVJUKGlzV2hlZWxFdmVu
dFR5cGUodHlwZSkpOwogfQorI2VsaWYgUExBVEZPUk0oR1RLKQorV2ViV2hlZWxFdmVudDo6V2Vi
V2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9h
dFNpemUmIHdoZWVsVGlja3MsIGJvb2wgaXNTdG9wLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwg
TW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdlYkV2ZW50KHR5
cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAg
ICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgLCBtX2RlbHRhKGRlbHRh
KQorICAgICwgbV93aGVlbFRpY2tzKHdoZWVsVGlja3MpCisgICAgLCBtX2dyYW51bGFyaXR5KGdy
YW51bGFyaXR5KQorICAgICwgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCisg
ICAgLCBtX2lzU3RvcChpc1N0b3ApCit7CisgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlw
ZSkpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6QXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApAQCAtODUsNiArMTAwLDggQEAgdm9pZCBXZWJXaGVl
bEV2ZW50OjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAg
ZW5jb2RlciA8PCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAgICAgZW5jb2RlciA8PCBt
X3Njcm9sbENvdW50OwogICAgIGVuY29kZXIgPDwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVs
dGE7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgZW5jb2RlciA8PCBtX2lzU3RvcDsKICNlbmRp
ZgogfQogCkBAIC0xMTUsNiArMTMyLDkgQEAgYm9vbCBXZWJXaGVlbEV2ZW50OjpkZWNvZGUoSVBD
OjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYldoZWVsRXZlbnQmIHQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV91bmFjY2VsZXJhdGVkU2Ny
b2xsaW5nRGVsdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisjZWxpZiBQTEFURk9STShHVEsp
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1faXNTdG9wKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKaW5kZXggMmQ2NjM5My4uNjMwMjk0MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcApAQCAtMTc4LDEx
ICsxNzgsMTggQEAgV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVs
RXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAgIGZsb2F0IHN0ZXAgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKICAgICBGbG9hdFNpemUg
ZGVsdGEod2hlZWxUaWNrcy53aWR0aCgpICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQoKSAqIHN0
ZXApOwogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDcpCisgICAgYm9vbCBpc1N0b3Ag
PSBnZGtfZXZlbnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQgKGV2ZW50KTsKKyNlbHNlCisgICAgYm9v
bCBpc1N0b3AgPSBmYWxzZTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2Vi
RXZlbnQ6OldoZWVsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHgsIHkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHhSb290LCB5Um9vdCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWxU
aWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpc1N0b3AsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka19ldmVudF9nZXRfdGltZShldmVudCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBlZDZjY2U5Li5mOGRmODUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTgwNyw4ICsxODA3LDgg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hl
ZWxFdmVudCYgZXZlbnQpCiAKICAgICBpZiAoIW1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVu
dHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fd2hlZWxFdmVudFF1ZXVlLmFwcGVuZChldmVudCk7
Ci0gICAgICAgIGlmIChtX3doZWVsRXZlbnRRdWV1ZS5zaXplKCkgPCB3aGVlbEV2ZW50UXVldWVT
aXplVGhyZXNob2xkKQotICAgICAgICAgICAgcmV0dXJuOworLy8gICAgICAgIGlmIChtX3doZWVs
RXZlbnRRdWV1ZS5zaXplKCkgPCB3aGVlbEV2ZW50UXVldWVTaXplVGhyZXNob2xkKQorLy8gICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFRoZSBxdWV1ZSBoYXMgdG9vIG1hbnkgd2hlZWwg
ZXZlbnRzLCBzbyBwdXNoIGEgbmV3IGV2ZW50LgogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAppbmRleCA3ZTE1NzdjLi4y
NThlODk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmNwcApAQCAtNzUsNiArNzUsMjUgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6
R2VzdHVyZTo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAgIGd0a19ldmVu
dF9jb250cm9sbGVyX2hhbmRsZV9ldmVudChHVEtfRVZFTlRfQ09OVFJPTExFUihtX2dlc3R1cmUu
Z2V0KCkpLCBldmVudCk7CiB9CiAKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJl
OjpzdGFydERyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVCghbV9pbkRy
YWcpOworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXco
R0RLX1NDUk9MTCkpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2ZW50LT50b3Vj
aC50aW1lOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IG1fc3RhcnQueCgpOworICAgIHNj
cm9sbEV2ZW50LT5zY3JvbGwueSA9IG1fc3RhcnQueSgpOworICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xs
Lnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5k
aXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRl
bHRhX3ggPSAwOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IDA7CisgICAgc2Ny
b2xsRXZlbnQtPnNjcm9sbC5zdGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKKyNpZiBHVEtfQ0hF
Q0tfVkVSU0lPTigzLCAxOSwgNykKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBm
YWxzZTsKKyNlbmRpZgorICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVs
RXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCkpKTsKK30KKwogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgeCwg
ZG91YmxlIHkpCiB7CiAgICAgQVNTRVJUKG1faW5EcmFnKTsKQEAgLTg4LDYgKzEwNywyOCBAQCB2
b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtF
dmVudCogZXZlbnQsIGRvdWJsZSB4LAogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9
IChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKICAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kgPSAobV9vZmZzZXQueSgpIC0geSkgLyBTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5zdGF0
ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgNykK
KyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBmYWxzZTsKKyNlbmRpZgorICAgIG1f
cGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0
KCkpKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnN0b3BEcmFn
KGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQobV9pbkRyYWcpOworICAgIEdV
bmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkp
OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2ZW50LT50b3VjaC50aW1lOworICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IG1fc3RhcnQueCgpOworICAgIHNjcm9sbEV2ZW50LT5z
Y3JvbGwueSA9IG1fc3RhcnQueSgpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueF9yb290ID0g
ZXZlbnQtPnRvdWNoLnhfcm9vdDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2
ZW50LT50b3VjaC55X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBH
REtfU0NST0xMX1NNT09USDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAwOwor
ICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IDA7CisgICAgc2Nyb2xsRXZlbnQtPnNj
cm9sbC5zdGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigz
LCAxOSwgNykKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSB0cnVlOworI2VuZGlm
CiAgICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxF
dmVudC5nZXQoKSkpOwogfQogCkBAIC0xMjgsNiArMTY5LDcgQEAgdm9pZCBHZXN0dXJlQ29udHJv
bGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91Ymxl
IHgsIGQKICAgICB1bnNpZ25lZCBkZWxheTsKICAgICBnX29iamVjdF9nZXQoZ3RrX3dpZGdldF9n
ZXRfc2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUiLCAmZGVsYXksIG51bGxw
dHIpOwogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RhcnRPbmVTaG90KGRl
bGF5IC8gMTAwMC4wKTsKKyAgICBkcmFnR2VzdHVyZS0+c3RhcnREcmFnKGd0a19nZXN0dXJlX2dl
dF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7CiB9CiAKIHZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3Vi
bGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCkBAIC0xNTQsNiArMTk2LDggQEAg
dm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2VzdHVyZSogZHJh
Z0dlc3R1cmUsIEdka0V2ZW50U2VxdWUKICAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdl
c3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOwogICAgIH0gZWxzZSBpZiAoIWd0a19n
ZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQogICAgICAgICBndGtf
Z2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7Cisg
ICAgZWxzZQorICAgICAgICBkcmFnR2VzdHVyZS0+c3RvcERyYWcoZ3RrX2dlc3R1cmVfZ2V0X2xh
c3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxl
cjo6RHJhZ0dlc3R1cmU6OmxvbmdQcmVzc0ZpcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCA4Njc5MmRmLi4wZDQ2Mzg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5o
CkBAIC02Nyw3ICs2NywxMSBAQCBwcml2YXRlOgogICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdl
UHJveHkmKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgZHJhZyBz
dGFydGVkLCBhbGxvd2luZyB0byBzdG9wIGtpbmV0aWMgZGVjZWxlcmF0aW9uLgorICAgICAgICB2
b2lkIHN0YXJ0RHJhZyhjb25zdCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGhhbmRsZURyYWco
Y29uc3QgR2RrRXZlbnQqLCBkb3VibGUgeCwgZG91YmxlIHkpOworICAgICAgICAvLyBOb3RpZnkg
dGhhdCBhIGRyYWcgc3RvcHBlZCwgYWxsb3dpbmcgdG8gc3RhcnQga2luZXRpYyBkZWNlbGVyYXRp
b24uCisgICAgICAgIHZvaWQgc3RvcERyYWcoY29uc3QgR2RrRXZlbnQqKTsKICAgICAgICAgdm9p
ZCBoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqKTsKICAgICAgICAgdm9pZCBsb25nUHJlc3NGaXJl
ZCgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276397</attachid>
            <date>2016-04-14 07:45:48 -0700</date>
            <delta_ts>2016-04-27 05:50:10 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>34785</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4IDA0MDhiZjIuLmNhOWQ2NzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKKysrIGIvU291cmNlL1dURi93dGYvRmVh
dHVyZURlZmluZXMuaApAQCAtMzE0LDYgKzMxNCwxMSBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdl
IHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmls
ZQogCiAvKiAtLS0tLS0tLS0gR3RrIHBvcnQgKFVuaXgsIFdpbmRvd3MsIE1hYykgLS0tLS0tLS0t
ICovCiAjaWYgUExBVEZPUk0oR1RLKQorCisjaWYgIWRlZmluZWQoRU5BQkxFX0tJTkVUSUNfU0NS
T0xMSU5HKQorI2RlZmluZSBFTkFCTEVfS0lORVRJQ19TQ1JPTExJTkcgMQorI2VuZGlmCisKICNl
bmRpZiAvKiBQTEFURk9STShHVEspICovCiAKIC8qIEVOQUJMRSBtYWNybyBkZWZhdWx0cyBmb3Ig
V2ViQ29yZSAqLwpAQCAtNTQ1LDYgKzU1MCwxMCBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdlIHdp
bGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmlsZQog
I2RlZmluZSBFTkFCTEVfSkFWQVNDUklQVF9JMThOX0FQSSAwCiAjZW5kaWYKIAorI2lmICFkZWZp
bmVkKEVOQUJMRV9LSU5FVElDX1NDUk9MTElORykKKyNkZWZpbmUgRU5BQkxFX0tJTkVUSUNfU0NS
T0xMSU5HIDAKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9S
X1BSRUZJWEVTKQogI2RlZmluZSBFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMgMAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGY4ZDUxNWUuLmU4ZWI1MDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC03ODksNiArNzg5LDcgQEAgc2V0KEdPYmplY3RE
T01CaW5kaW5nc19HSVJfSEVBREVSUyAke0dPYmplY3RET01CaW5kaW5nc19HSVJfSEVBREVSU30g
UEFSRU5UX1NDT1AKIAogaWYgKEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HKQogICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5l
dGljLmNwcAogICAgICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25TbW9vdGguY3BwCiAgICAg
KQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
V2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50
LmgKaW5kZXggMDcxMzU1Yy4uOGY5NzM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTgyLDYgKzgyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgLCBtX3Njcm9sbENvdW50KDApCiAgICAgICAgICAgICAsIG1fdW5hY2Nl
bGVyYXRlZFNjcm9sbGluZ0RlbHRhWCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YVkoMCkKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICwgbV9p
c1N0b3AoZmFsc2UpCiAjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CkBAIC0xMDMsNiArMTA1
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3Njcm9sbENvdW50KDAp
CiAgICAgICAgICAgICAsIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCgwKQogICAgICAg
ICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkoMCkKKyNlbGlmIFBMQVRGT1JN
KEdUSykKKyAgICAgICAgICAgICwgbV9pc1N0b3AoZmFsc2UpCiAjZW5kaWYKICAgICAgICAgewog
ICAgICAgICB9CkBAIC0xNjIsNiArMTY2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIGlzRW5kT2ZNb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogICAgICAgICBib29sIGlzRW5k
T2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogICAgICAgICBib29sIGlzVHJhbnNpdGlvbmlu
Z1RvTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAg
Ym9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgYm9vbCBpc1N0b3AoKSBjb25zdCB7IHJldHVybiBtX2lzU3RvcDsgfQogI2Vsc2UKICAg
ICAgICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICNlbmRpZgpAQCAtMTg3LDYgKzE5NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdW5zaWduZWQgbV9zY3JvbGxDb3VudDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGFYOwogICAgICAgICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YVk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIGJvb2wgbV9pc1N0b3A7CiAjZW5k
aWYKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRpb25LaW5ldGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dGlvbktpbmV0aWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzU4
MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRpb25LaW5ldGljLmNwcApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIgorCisjaWYgRU5BQkxFKEtJTkVUSUNfU0NST0xM
SU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKworLyoKKyAqIFBlckF4aXNEYXRhIGlzIGEgcG9ydCBvZiBHdGtLaW5ldGljU2Ny
b2xsaW5nIGFzIG9mIEdUSysgMy4yMCwKKyAqIG1pbWlja2luZyBpdHMgQVBJIGFuZCBpdHMgYmVo
YXZpb3IuCisgKgorICogQWxsIG91ciBjdXJ2ZXMgYXJlIHNlY29uZCBkZWdyZWUgbGluZWFyIGRp
ZmZlcmVudGlhbCBlcXVhdGlvbnMsIGFuZAorICogc28gdGhleSBjYW4gYWx3YXlzIGJlIHdyaXR0
ZW4gYXMgbGluZWFyIGNvbWJpbmF0aW9ucyBvZiAyIGJhc2UKKyAqIHNvbHV0aW9ucy4gY29lZjEg
YW5kIGNvZWYyIGFyZSB0aGUgY29lZmZpY2llbnRzIHRvIHRoZXNlIHR3byBiYXNlCisgKiBzb2x1
dGlvbnMsIGFuZCBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3NpdGlvbiBhbmQgdmVs
b2NpdHkuCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygc2ltcGxlIGRlY2VsZXJhdGlvbiwgdGhlIGRp
ZmZlcmVudGlhbCBlcXVhdGlvbiBpcworICoKKyAqICAgeScnID0gLW15JworICoKKyAqIFdpdGgg
bSB0aGUgcmVzaXN0ZW5jZSBmYWN0b3IuIEZvciB0aGlzIHdlIHVzZSB0aGUgZm9sbG93aW5nIDIK
KyAqIGJhc2Ugc29sdXRpb25zOgorICoKKyAqICAgZjEoeCkgPSAxCisgKiAgIGYyKHgpID0gZXhw
KC1teCkKKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBvdmVyc2hvb3QsIHRoZSBkaWZmZXJlbnRpYWwg
ZXF1YXRpb24gaXMKKyAqCisgKiAgIHknJyA9IC1teScgLSBreQorICoKKyAqIFdpdGggbSB0aGUg
cmVzaXN0YW5jZSwgYW5kIGsgdGhlIHNwcmluZyBzdGlmZm5lc3MgY29uc3RhbnQuIFdlIGxldAor
ICogayA9IG1eMiAvIDQsIHNvIHRoYXQgdGhlIHN5c3RlbSBpcyBjcml0aWNhbGx5IGRhbXBlZCAo
aWUsIHJldHVybnMgdG8gaXRzCisgKiBlcXVpbGlicml1bSBwb3NpdGlvbiBhcyBxdWlja2x5IGFz
IHBvc3NpYmxlLCB3aXRob3V0IG9zY2lsbGF0aW5nKSwgYW5kIG9mZnNldAorICogdGhlIHdob2xl
IHRoaW5nLCBzdWNoIHRoYXQgdGhlIGVxdWlsaWJyaXVtIHBvc2l0aW9uIGlzIGF0IDAuIFRoaXMg
Z2l2ZXMgdGhlCisgKiBiYXNlIHNvbHV0aW9ucworICoKKyAqICAgZjEoeCkgPSBleHAoLW14IC8g
MikKKyAqICAgZjIoeCkgPSB0IGV4cCgtbXggLyAyKQorICovCisKK3N0YXRpYyBjb25zdCBkb3Vi
bGUgZGVjZWxGcmljdGlvbiA9IDQ7CitzdGF0aWMgY29uc3QgZG91YmxlIGZyYW1lUmF0ZSA9IDYw
Oworc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCA9IC4wMDE7CisKK3N0
YXRpYyBpbmxpbmUgZG91YmxlIGNsYW1wKGRvdWJsZSB4LCBkb3VibGUgbG93LCBkb3VibGUgaGln
aCkKK3sKKyAgICByZXR1cm4gKHggPiBoaWdoKSA/IGhpZ2ggOiAoKHggPCBsb3cpID8gbG93IDog
eCk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6
U2Nyb2xsRXZlbnQ6OlNjcm9sbEV2ZW50KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBmbG9hdCBkZWx0YSwgZG91YmxlIHRpbWUpCisgICAgOiB0aW1lKHRpbWUpCisgICAgLCBwb3Np
dGlvbkRlbHRhKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBkZWx0YSA6IDAs
IG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gZGVsdGEgOiAwKQoreworfQorCitT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoKQorICAgIDog
UGVyQXhpc0RhdGEoMCwgMCwgMCwgMCkKK3sKK30KKworU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6
UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKGRvdWJsZSBsb3dlciwgZG91YmxlIHVwcGVyLCBkb3Vi
bGUgaW5pdGlhbFBvc2l0aW9uLCBkb3VibGUgaW5pdGlhbFZlbG9jaXR5KQorICAgIDogbV9sb3dl
cihsb3dlcikKKyAgICAsIG1fdXBwZXIodXBwZXIpCisgICAgLCBtX2RlY2VsRnJpY3Rpb24oZGVj
ZWxGcmljdGlvbikKKyAgICAsIG1fY29lZjEoaW5pdGlhbFZlbG9jaXR5IC8gbV9kZWNlbEZyaWN0
aW9uICsgaW5pdGlhbFBvc2l0aW9uKQorICAgICwgbV9jb2VmMigtaW5pdGlhbFZlbG9jaXR5IC8g
bV9kZWNlbEZyaWN0aW9uKQorICAgICwgbV9lcXVpbGlicml1bVBvc2l0aW9uKDApCisgICAgLCBt
X3QoMCkKKyAgICAsIG1fcG9zaXRpb24oY2xhbXAoaW5pdGlhbFBvc2l0aW9uLCBsb3dlciwgdXBw
ZXIpKQorICAgICwgbV92ZWxvY2l0eShpbml0aWFsUG9zaXRpb24gPCBsb3dlciB8fCBpbml0aWFs
UG9zaXRpb24gPiB1cHBlciA/IDAgOiBpbml0aWFsVmVsb2NpdHkpCit7Cit9CisKK2Jvb2wgU2Ny
b2xsQW5pbWF0aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoZG91YmxlIHRp
bWVEZWx0YSkKK3sKKyAgICBtX3QgKz0gdGltZURlbHRhOworCisgICAgZG91YmxlIGV4cG9uZW50
aWFsUGFydCA9IGV4cCgtbV9kZWNlbEZyaWN0aW9uICogbV90KTsKKyAgICBtX3Bvc2l0aW9uID0g
bV9jb2VmMSArIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisgICAgbV92ZWxvY2l0eSA9IC1t
X2RlY2VsRnJpY3Rpb24gKiBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0OworCisgICAgaWYgKG1f
cG9zaXRpb24gPCBtX2xvd2VyKSB7CisgICAgICAgIG1fcG9zaXRpb24gPSBtX2xvd2VyOworICAg
ICAgICBtX3ZlbG9jaXR5ID0gMDsKKyAgICB9IGVsc2UgaWYgKG1fcG9zaXRpb24gPiBtX3VwcGVy
KSB7CisgICAgICAgIG1fcG9zaXRpb24gPSBtX3VwcGVyOworICAgICAgICBtX3ZlbG9jaXR5ID0g
MDsKKyAgICB9IGVsc2UgaWYgKGZhYnMobV92ZWxvY2l0eSkgPCAxKSB7CisgICAgICAgIG1fcG9z
aXRpb24gPSByb3VuZChtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAg
fQorCisgICAgcmV0dXJuIG1fdmVsb2NpdHk7Cit9CisKK1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6
OlNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRG
dW5jdGlvbikKKyAgICA6IFNjcm9sbEFuaW1hdGlvbihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1f
bm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24oV1RGTW92ZShub3RpZnlQb3NpdGlvbkNoYW5n
ZWRGdW5jdGlvbikpCisgICAgLCBtX2FuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYzo6flNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKQoreworfQorCitib29sIFNjcm9sbEFu
aW1hdGlvbktpbmV0aWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAg
aWYgKGFuaW1hdGlvblRpbWVyQWN0aXZlKCkpCisgICAgICAgIHN0b3AoKTsKKworICAgIGRvdWJs
ZSBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIG1fc2Ny
b2xsSGlzdG9yeS5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKFNjcm9sbEV2ZW50JiBldmVudCkgLT4g
Ym9vbCB7CisgICAgICAgIHJldHVybiBldmVudC50aW1lIC0gY3VycmVudFRpbWUgPiAxNTA7Cisg
ICAgfSk7CisgICAgbV9zY3JvbGxIaXN0b3J5LmFwcGVuZChTY3JvbGxFdmVudChvcmllbnRhdGlv
biwgc3RlcCAqIG11bHRpcGxpZXIsIGN1cnJlbnRUaW1lKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdG9wKCkKK3sKKyAgICBpZiAoYW5p
bWF0aW9uVGltZXJBY3RpdmUoKSkKKyAgICAgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7CisK
KyAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKKworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlv
bktpbmV0aWM6OnNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikK
K3sKKyAgICBzdG9wKCk7CisgICAgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIG1fc2Nyb2xs
SGlzdG9yeS5jbGVhcigpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnNlcnZp
Y2VBbmltYXRpb24oKQoreworICAgIHN0b3AoKTsKKworICAgIGlmIChtX3Njcm9sbEhpc3Rvcnku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFBvaW50IGFjY3VtRGVsdGEo
MCwgMCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzY3JvbGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9y
eSkKKyAgICAgICAgYWNjdW1EZWx0YSArPSBzY3JvbGxFdmVudC5wb3NpdGlvbkRlbHRhOworCisg
ICAgZG91YmxlIGZpcnN0ID0gbV9zY3JvbGxIaXN0b3J5WzBdLnRpbWU7CisgICAgZG91YmxlIGxh
c3QgPSBtX3Njcm9sbEhpc3RvcnkucmJlZ2luKCktPnRpbWU7CisKKyAgICBtX3Njcm9sbEhpc3Rv
cnkuY2xlYXIoKTsKKworICAgIGlmIChsYXN0ID09IGZpcnN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBGbG9hdFBvaW50IHZlbG9jaXR5KGFjY3VtRGVsdGEueCgpIC8gKGxhc3QgLSBmaXJzdCks
IGFjY3VtRGVsdGEueSgpIC8gKGxhc3QgLSBmaXJzdCkpOworCisgICAgaWYgKHZlbG9jaXR5ID09
IEZsb2F0UG9pbnQoMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faG9yaXpvbnRhbERh
dGEgPSBQZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigp
LngoKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54
KCksCisgICAgICAgIG1fcG9zaXRpb24ueCgpLCB2ZWxvY2l0eS54KCkpOworICAgIG1fdmVydGlj
YWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRp
b24oKS55KCksCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpLAorICAgICAgICBtX3Bvc2l0aW9uLnkoKSwgdmVsb2NpdHkueSgpKTsKKworICAgIGFu
aW1hdGlvblRpbWVyRmlyZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpz
dGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9zaXRpb24pCit7CisgICAgc3RvcCgpOwor
ICAgIG1fcG9zaXRpb24gPSBpbml0aWFsUG9zaXRpb247CisgICAgc2VydmljZUFuaW1hdGlvbigp
OworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQo
KQoreworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpOworICAgIGRvdWJsZSBkZWx0YVRvTmV4dEZyYW1lID0gY2VpbCgoY3VycmVudFRpbWUgLSBt
X3N0YXJ0VGltZSkgKiBmcmFtZVJhdGUpIC8gZnJhbWVSYXRlIC0gKGN1cnJlbnRUaW1lIC0gbV9z
dGFydFRpbWUpOworCisgICAgYm9vbCBjb250aW51ZUFuaW1hdGlvbiA9IGZhbHNlOworICAgIGlm
IChtX2hvcml6b250YWxEYXRhLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05leHRGcmFtZSkpCisgICAg
ICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKKyAgICBpZiAobV92ZXJ0aWNhbERhdGEuYW5p
bWF0ZVNjcm9sbChkZWx0YVRvTmV4dEZyYW1lKSkKKyAgICAgICAgY29udGludWVBbmltYXRpb24g
PSB0cnVlOworCisgICAgaWYgKGNvbnRpbnVlQW5pbWF0aW9uKQorICAgICAgICBzdGFydE5leHRU
aW1lcihzdGQ6Om1heChtaW5pbXVtVGltZXJJbnRlcnZhbCwgZGVsdGFUb05leHRGcmFtZSkpOwor
CisgICAgbV9wb3NpdGlvbiA9IEZsb2F0UG9pbnQobV9ob3Jpem9udGFsRGF0YS5wb3NpdGlvbigp
LCBtX3ZlcnRpY2FsRGF0YS5wb3NpdGlvbigpKTsKKworICAgIG1fbm90aWZ5UG9zaXRpb25DaGFu
Z2VkRnVuY3Rpb24oRmxvYXRQb2ludChtX3Bvc2l0aW9uKSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYzo6c3RhcnROZXh0VGltZXIoZG91YmxlIGRlbGF5KQoreworICAgIG1fYW5p
bWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGRlbGF5KTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRp
b25LaW5ldGljOjphbmltYXRpb25UaW1lckFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmFkMDY4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
Y3JvbGxBbmltYXRpb25LaW5ldGljX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0aW9uS2luZXRpY19o
CisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb24uaCIKKworI2lmIEVOQUJMRShLSU5FVElDX1ND
Uk9MTElORykKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworCitjbGFzcyBT
Y3JvbGxBbmltYXRpb25LaW5ldGljIGZpbmFsOiBwdWJsaWMgU2Nyb2xsQW5pbWF0aW9uIHsKK3By
aXZhdGU6CisgICAgc3RydWN0IFNjcm9sbEV2ZW50IHsKKyAgICAgICAgU2Nyb2xsRXZlbnQoU2Ny
b2xsYmFyT3JpZW50YXRpb24sIGZsb2F0IGRlbHRhLCBkb3VibGUgdGltZSk7CisKKyAgICAgICAg
ZG91YmxlIHRpbWU7CisgICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb25EZWx0YTsKKworICAgIH07
CisKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGVyQXhp
c0RhdGEoKTsKKyAgICAgICAgUGVyQXhpc0RhdGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIs
IGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRvdWJsZSBpbml0aWFsVmVsb2NpdHkpOworCisgICAg
ICAgIGRvdWJsZSBwb3NpdGlvbigpIHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKworICAgICAgICBi
b29sIGFuaW1hdGVTY3JvbGwoZG91YmxlIHRpbWVEZWx0YSk7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBkb3VibGUgbV9sb3dlcjsKKyAgICAgICAgZG91YmxlIG1fdXBwZXI7CisgICAgICAgIGRv
dWJsZSBtX2RlY2VsRnJpY3Rpb247CisKKyAgICAgICAgZG91YmxlIG1fY29lZjE7CisgICAgICAg
IGRvdWJsZSBtX2NvZWYyOworICAgICAgICBkb3VibGUgbV9lcXVpbGlicml1bVBvc2l0aW9uOwor
CisgICAgICAgIGRvdWJsZSBtX3Q7CisgICAgICAgIGRvdWJsZSBtX3Bvc2l0aW9uOworICAgICAg
ICBkb3VibGUgbV92ZWxvY2l0eTsKKyAgICB9OworCitwdWJsaWM6CisgICAgU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50
JiYpPiYmIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKTsKKyAgICB2aXJ0dWFsIH5TY3Jv
bGxBbmltYXRpb25LaW5ldGljKCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRh
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92
ZXJyaWRlOworICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXJ2aWNlQW5pbWF0aW9uKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzdGFydChjb25zdCBGbG9hdFBvaW50Jik7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBzdGFydE5leHRUaW1lcihkb3VibGUgZGVsYXkpOworICAgIHZvaWQgYW5pbWF0aW9u
VGltZXJGaXJlZCgpOworICAgIGJvb2wgYW5pbWF0aW9uVGltZXJBY3RpdmUoKSBjb25zdDsKKwor
ICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiBtX25vdGlmeVBvc2l0aW9uQ2hh
bmdlZEZ1bmN0aW9uOworCisgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOworICAgIFZlY3RvcjxT
Y3JvbGxFdmVudD4gbV9zY3JvbGxIaXN0b3J5OworICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRh
bERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7CisKKyAgICBkb3VibGUgbV9z
dGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5H
KQorI2VuZGlmIC8vIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcAppbmRleCAxMDQ1
YzQ0Li5lNjIyNzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxh
dGZvcm1XaGVlbEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcApAQCAtODMsNiArODMsMTQgQEAgUGxhdGZvcm1XaGVl
bEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQogICAgIG1f
d2hlZWxUaWNrc1ggPSBtX2RlbHRhWDsKICAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7CiAK
KyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgNykKKyAgICBtX2lzU3RvcCA9IGV2ZW50LT5p
c19zdG9wOworI2VsaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgMTgpCisgICAgbV9pc1N0b3Ag
PSBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09USCAmJiB3aGVlbFRp
Y2tzID09IEZsb2F0U2l6ZSgwLCAwKTsKKyNlbHNlCisgICAgbV9pc1N0b3AgPSBmYWxzZTsKKyNl
bmRpZgorCiAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQt
PngpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55KSk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9
IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGlu
dD4oZXZlbnQtPnlfcm9vdCkpOwogICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hl
ZWxFdmVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxB
bmltYXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0
b3JHdGsuY3BwCmluZGV4IGIzYjJjYmQuLmVjYzdkZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcApAQCAtNTAsNiArNTAsMTcgQEAg
U2Nyb2xsQW5pbWF0b3JHdGs6OlNjcm9sbEFuaW1hdG9yR3RrKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSkKICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQogICAgICwg
bV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvckd0
azo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CisjaWYgRU5BQkxFKEtJ
TkVUSUNfU0NST0xMSU5HKQorICAgIC8vIEZJWE1FIFNob3VsZCB0aGlzIGJlIG1vdmVkIHRvIHRo
ZSBpbml0aWFsaXplciBsaXN0IGV2ZW4gaWYgaXQncyBhIGJpdCBjb21wbGV4PworICAgIG1fa2lu
ZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4o
bV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAg
ICB1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50KHBvc2l0aW9uKSk7CisjaWYgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCisgICAgICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgICAg
IG1fc21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworI2VuZGlm
CisgICAgfSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIGlm
IChzY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKICAgICAgICAgZW5zdXJl
U21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CkBAIC02Myw0OCArNzQsOTAgQEAgU2Nyb2xsQW5p
bWF0b3JHdGs6On5TY3JvbGxBbmltYXRvckd0aygpCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJ
TkcpCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjplbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRp
b24oKQogewotICAgIGlmIChtX2FuaW1hdGlvbikKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24p
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYW5pbWF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxT
Y3JvbGxBbmltYXRpb25TbW9vdGg+KG1fc2Nyb2xsYWJsZUFyZWEsIG1fY3VycmVudFBvc2l0aW9u
LCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBkZWx0
YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247Ci0gICAgICAgIG1fY3VycmVudFBvc2l0
aW9uID0gV1RGTW92ZShwb3NpdGlvbik7Ci0gICAgICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChk
ZWx0YSk7CisgICAgbV9zbW9vdGhBbmltYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFu
aW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJlYSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlz
XShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKKyAgICAgICAgdXBkYXRlUG9zaXRpb24oRmxvYXRQ
b2ludChwb3NpdGlvbikpOwogICAgIH0pOwogfQorI2VuZGlmCiAKIGJvb2wgU2Nyb2xsQW5pbWF0
b3JHdGs6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCiB7Cisj
aWYgRU5BQkxFKEtJTkVUSUNfU0NST0xMSU5HKQorICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c2Ny
b2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZW5kaWYK
KworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIGlmICghbV9zY3JvbGxhYmxlQXJl
YS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSB8fCBncmFudWxhcml0eSA9PSBTY3JvbGxCeVByZWNp
c2VQaXhlbCkKICAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRp
b24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIAogICAgIGVuc3VyZVNtb290aFNj
cm9sbGluZ0FuaW1hdGlvbigpOwotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+c2Nyb2xsKG9yaWVu
dGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1fc21v
b3RoQW5pbWF0aW9uLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0
aXBsaWVyKTsKKyNlbHNlCisgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50
YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKyNlbmRpZgogfQogCiB2b2lk
IFNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgb2Zmc2V0KQogewogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCwgdG9GbG9hdFNpemUobV9z
Y3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKSkpOwotICAgIGlmIChtX2FuaW1hdGlvbikKLSAg
ICAgICAgbV9hbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisjaWYgRU5B
QkxFKEtJTkVUSUNfU0NST0xMSU5HKQorICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c2V0Q3VycmVu
dFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNlbmRpZgogCi0gICAgRmxvYXRTaXplIGRlbHRhID0gcG9z
aXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IHBvc2l0
aW9uOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CisjaWYgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290
aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNlbmRpZgorCisgICAg
dXBkYXRlUG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbikpOwogfQogCi12b2lkIFNjcm9sbEFu
aW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCitib29sIFNjcm9sbEFuaW1hdG9yR3RrOjpo
YW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKIHsKLSAgICBpZiAo
bV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Rocygp
OworI2lmIEVOQUJMRShLSU5FVElDX1NDUk9MTElORykKKyAgICAvLyBHREsgc2Nyb2xsIHN0b3Ag
ZXZlbnRzIGFyZSB1c2VkIHRvIG5vdGlmeSB0aGF0IHRoZSBzY3JvbGxpbmcgY2FtZSB0byBhbiBl
bmQgYW5kIHRoYXQgZGVjZWxlcmF0aW9uIGNhbiBiZSB0cmlnZ2VyZWQuCisgICAgaWYgKGUuaXNT
dG9wKCkpIHsKKyAgICAgICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdGFydChtX2N1cnJlbnRQb3Np
dGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fa2luZXRpY0FuaW1h
dGlvbi0+c3RvcCgpOworI2VuZGlmCisKKyAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRs
ZVdoZWVsRXZlbnQoZSk7CiB9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRMaXZl
UmVzaXplKCkKK3sKKyNpZiBFTkFCTEUoS0lORVRJQ19TQ1JPTExJTkcpCisgICAgbV9raW5ldGlj
QW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1f
c21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworI2VuZGlmCit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JHdGs6OnVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQmJiBwb3NpdGlv
bikKK3sKKyAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9u
OworICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92ZShwb3NpdGlvbik7CisgICAgbm90aWZ5
UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKK30KKwogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CisjaWYgRU5BQkxF
KEtJTkVUSUNfU0NST0xMSU5HKQorICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAg
aWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0
aHMoKTsKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0
aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCiAgICAgaWYgKCFzY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTcsOSArMTcwLDEz
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogeworI2lmIEVOQUJMRShLSU5FVElD
X1NDUk9MTElORykKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhz
KCk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgIGlmIChtX2Fu
aW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7Cisg
ICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBk
YXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAppbmRleCA3MGU1YjczLi45MGI4NTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaApAQCAt
MzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JvbGxBbmltYXRvckd0a19oCiAjZGVmaW5lIFNjcm9s
bEFuaW1hdG9yR3RrX2gKIAorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKICNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKQEAgLTQ0LDEy
ICs0NSwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JHdGsoKTsKIAog
cHJpdmF0ZToKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBib29sIHNjcm9sbChT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0
IG11bHRpcGxpZXIpIG92ZXJyaWRlOwogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyAgICBib29sIGhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxs
RW5kTGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOworCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
CisgICAgdm9pZCBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKICNlbmRpZgogCisg
ICAgdm9pZCB1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYpOworCiAgICAgdm9pZCBkaWRBZGRW
ZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxsUmVt
b3ZlVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CkBAIC02OSw5ICs3NSwx
MCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7
CiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKLSAgICB2b2lkIGVuc3VyZVNtb290aFNj
cm9sbGluZ0FuaW1hdGlvbigpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlv
bj4gbV9hbmltYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9z
bW9vdGhBbmltYXRpb247CisjZW5kaWYKKyNpZiBFTkFCTEUoS0lORVRJQ19TQ1JPTExJTkcpCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+IG1fa2luZXRpY0FuaW1h
dGlvbjsKICNlbmRpZgogICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJh
ciB7IG51bGxwdHIgfTsKICAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFy
IHsgbnVsbHB0ciB9OwpAQCAtODIsNiArODksOCBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX292
ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25DdXJyZW50IHsgMCB9OwogICAgIGRvdWJsZSBtX292ZXJs
YXlTY3JvbGxiYXJBbmltYXRpb25TdGFydFRpbWUgeyAwIH07CiAgICAgZG91YmxlIG1fb3Zlcmxh
eVNjcm9sbGJhckFuaW1hdGlvbkVuZFRpbWUgeyAwIH07CisKKyAgICBzdGQ6OmZ1bmN0aW9uPHZv
aWQoRmxvYXRQb2ludCYmKT4gbV9wb3NpdGlvbkNoYW5nZWRDYWxsYmFjazsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJF
dmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKaW5kZXggNGJmYTBkOC4u
OWY3ZmU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKQEAgLTE5Niw2ICsxOTYsOCBAQCBw
dWJsaWM6CiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
cG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVl
bFRpY2tzLCBHcmFudWxhcml0eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9u
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBib29sIGRpcmVjdGlvbkludmVydGVkRnJvbURl
dmljZSwgUGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGlu
Z0RlbHRhcywgdWludDMyX3Qgc2Nyb2xsQ291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
dW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhLCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXAp
OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFs
UG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgYm9vbCBpc1N0b3AsIEdyYW51bGFyaXR5LCBNb2RpZmll
cnMsIGRvdWJsZSB0aW1lc3RhbXApOwogI2VuZGlmCiAKICAgICBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KQEAgLTIxMCw2ICsy
MTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOyB9CiAgICAgdWludDMyX3Qg
c2Nyb2xsQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbENvdW50OyB9CiAgICAgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiB1bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKSBjb25zdCB7
IHJldHVybiBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YTsgfQorI2VsaWYgUExBVEZPUk0o
R1RLKQorICAgIGJvb2wgaXNTdG9wKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0b3A7IH0KICNlbmRp
ZgogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKQEAgLTIz
MCw2ICsyMzQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVs
dGFzOwogICAgIHVpbnQzMl90IG1fc2Nyb2xsQ291bnQ7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXpl
IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAg
IGJvb2wgbV9pc1N0b3A7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkV2ZW50Q29udmVyc2lvbi5jcHAKaW5kZXggZWViNzQ0MS4uM2ZkNWYzZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKQEAgLTE1OCw2ICsxNTgsOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fc2Nyb2xsQ291bnQgPSB3ZWJFdmVudC5zY3JvbGxDb3VudCgp
OwogICAgICAgICBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVggPSB3ZWJFdmVudC51bmFj
Y2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKS53aWR0aCgpOwogICAgICAgICBtX3VuYWNjZWxlcmF0
ZWRTY3JvbGxpbmdEZWx0YVkgPSB3ZWJFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEo
KS5oZWlnaHQoKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgbV9pc1N0b3AgPSB3ZWJF
dmVudC5pc1N0b3AoKTsKICNlbmRpZgogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
V2hlZWxFdmVudC5jcHAKaW5kZXggZDI1MGExNC4uNmZiYzRhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJXaGVlbEV2ZW50LmNwcApAQCAtNDUsNiArNDUsOCBAQCBXZWJXaGVlbEV2ZW50OjpX
ZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJ
bnRQb2ludAogICAgICwgbV9waGFzZShQaGFzZU5vbmUpCiAgICAgLCBtX2hhc1ByZWNpc2VTY3Jv
bGxpbmdEZWx0YXMoZmFsc2UpCiAgICAgLCBtX3Njcm9sbENvdW50KDApCisjZWxpZiBQTEFURk9S
TShHVEspCisgICAgLCBtX2lzU3RvcChmYWxzZSkKICNlbmRpZgogewogICAgIEFTU0VSVChpc1do
ZWVsRXZlbnRUeXBlKHR5cGUpKTsKQEAgLTY3LDYgKzY5LDE5IEBAIFdlYldoZWVsRXZlbnQ6Oldl
YldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IElu
dFBvaW50CiB7CiAgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOwogfQorI2VsaWYg
UExBVEZPUk0oR1RLKQorV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlja3MsIGJvb2wg
aXNTdG9wLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgTW9kaWZpZXJzIG1vZGlmaWVycywgZG91
YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdlYkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1w
KQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xv
YmFsUG9zaXRpb24pCisgICAgLCBtX2RlbHRhKGRlbHRhKQorICAgICwgbV93aGVlbFRpY2tzKHdo
ZWVsVGlja3MpCisgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICwgbV9kaXJl
Y3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCisgICAgLCBtX2lzU3RvcChpc1N0b3ApCit7
CisgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOworfQogI2VuZGlmCiAKIHZvaWQg
V2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dApAQCAtODUsNiArMTAwLDggQEAgdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBtX2hhc1ByZWNpc2VT
Y3JvbGxpbmdEZWx0YXM7CiAgICAgZW5jb2RlciA8PCBtX3Njcm9sbENvdW50OwogICAgIGVuY29k
ZXIgPDwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7CisjZWxpZiBQTEFURk9STShHVEsp
CisgICAgZW5jb2RlciA8PCBtX2lzU3RvcDsKICNlbmRpZgogfQogCkBAIC0xMTUsNiArMTMyLDkg
QEAgYm9vbCBXZWJXaGVlbEV2ZW50OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29k
ZXIsIFdlYldoZWVsRXZlbnQmIHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHQubV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh0Lm1faXNTdG9wKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJu
IHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50
RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5j
cHAKaW5kZXggMmQ2NjM5My4uMmRiYWM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvV2ViRXZlbnRGYWN0b3J5LmNwcApAQCAtMTc4LDE0ICsxNzgsMjMgQEAgV2ViV2hlZWxFdmVu
dCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2
ZW50KQogICAgIGZsb2F0IHN0ZXAgPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhl
bHNQZXJMaW5lU3RlcCgpKTsKICAgICBGbG9hdFNpemUgZGVsdGEod2hlZWxUaWNrcy53aWR0aCgp
ICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQoKSAqIHN0ZXApOwogCisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMTksIDcpCisgICAgYm9vbCBpc1N0b3AgPSBnZGtfZXZlbnRfaXNfc2Nyb2xsX3N0
b3BfZXZlbnQoZXZlbnQpOworI2VsaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgMTgpCisgICAg
Ym9vbCBpc1N0b3AgPSBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09U
SCAmJiB3aGVlbFRpY2tzID09IEZsb2F0U2l6ZSgwLCAwKTsKKyNlbHNlCisgICAgYm9vbCBpc1N0
b3AgPSBmYWxzZTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6
OldoZWVsLAotICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHgsIHkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFBvaW50KHhSb290LCB5Um9vdCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWxUaWNrcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hl
ZWxFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnNGb3JFdmVudChldmVu
dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7
CisgICAgICAgIEludFBvaW50KHgsIHkpLAorICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3Qp
LAorICAgICAgICBkZWx0YSwKKyAgICAgICAgd2hlZWxUaWNrcywKKyAgICAgICAgaXNTdG9wLAor
ICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKKyAgICAgICAg
bW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpLAorICAgICAgICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZl
bnQpKTsKIH0KIAogV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktl
eWJvYXJkRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBjb25zdCBXZWJDb3JlOjpDb21wb3Np
dGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cywgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5k
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYjlhMWNj
ZC4uOGU3MjYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
QEAgLTE4MDMsOCArMTgwMywxOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVu
dChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKIAogICAgIGlmICghbV9jdXJyZW50
bHlQcm9jZXNzZWRXaGVlbEV2ZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgbV93aGVlbEV2ZW50
UXVldWUuYXBwZW5kKGV2ZW50KTsKKyNpZiBQTEFURk9STShHVEspCisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMTksIDcpCisgICAgICAgIGJvb2wgaXNTY3JvbGxTdG9wRXZlbnQgPSBnZGtfZXZl
bnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSk7CisjZWxzZQorICAg
ICAgICBjb25zdCBHZGtFdmVudFNjcm9sbCYgc2Nyb2xsID0gZXZlbnQubmF0aXZlRXZlbnQoKS0+
c2Nyb2xsOworICAgICAgICBib29sIGlzU2Nyb2xsU3RvcEV2ZW50ID0gc2Nyb2xsLmRpcmVjdGlv
biA9PSBHREtfU0NST0xMX1NNT09USCAmJiBzY3JvbGwuZGVsdGFfeCAmJiBzY3JvbGwuZGVsdGFf
eTsKKyNlbmRpZgorICAgICAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6ZSgpIDwgd2hlZWxF
dmVudFF1ZXVlU2l6ZVRocmVzaG9sZCAmJiAhaXNTY3JvbGxTdG9wRXZlbnQpCisgICAgICAgICAg
ICByZXR1cm47CisjZWxzZQogICAgICAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6ZSgpIDwg
d2hlZWxFdmVudFF1ZXVlU2l6ZVRocmVzaG9sZCkKICAgICAgICAgICAgIHJldHVybjsKKyNlbmRp
ZgogICAgICAgICAvLyBUaGUgcXVldWUgaGFzIHRvbyBtYW55IHdoZWVsIGV2ZW50cywgc28gcHVz
aCBhIG5ldyBldmVudC4KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggN2UxNTc3Yy4uZmMzNzdkZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAK
QEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIEdlc3R1cmVDb250cm9sbGVy
OjpHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgOiBtX2RyYWdHZXN0
dXJlKHBhZ2UpCisgICAgLCBtX3N3aXBlR2VzdHVyZShwYWdlKQogICAgICwgbV96b29tR2VzdHVy
ZShwYWdlKQogewogfQpAQCAtNDksMTMgKzUwLDE0IEBAIGJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6
OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKICAgICBib29sIHdhc1Byb2Nl
c3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7CiAgICAgbV9kcmFnR2VzdHVy
ZS5oYW5kbGVFdmVudChldmVudCk7CisgICAgbV9zd2lwZUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZl
bnQpOwogICAgIG1fem9vbUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBl
dmVudC0+dHlwZSA9PSBHREtfVE9VQ0hfRU5EID8gd2FzUHJvY2Vzc2luZ0dlc3R1cmVzIDogaXNQ
cm9jZXNzaW5nR2VzdHVyZXMoKTsKIH0KIAogYm9vbCBHZXN0dXJlQ29udHJvbGxlcjo6aXNQcm9j
ZXNzaW5nR2VzdHVyZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlzQWN0
aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0FjdGl2ZSgpOworICAgIHJldHVybiBtX2RyYWdHZXN0
dXJlLmlzQWN0aXZlKCkgfHwgbV9zd2lwZUdlc3R1cmUuaXNBY3RpdmUoKSB8fCBtX3pvb21HZXN0
dXJlLmlzQWN0aXZlKCk7CiB9CiAKIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpHZXN0dXJl
KEd0a0dlc3R1cmUqIGdlc3R1cmUsIFdlYlBhZ2VQcm94eSYgcGFnZSkKQEAgLTc1LDYgKzc3LDI1
IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KGNvbnN0IEdk
a0V2ZW50KiBldmVudCkKICAgICBndGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQoR1RL
X0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQpOwogfQogCit2b2lkIEdl
c3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKGNvbnN0IEdka0V2ZW50KiBl
dmVudCkKK3sKKyAgICBBU1NFUlQoIW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50
PiBzY3JvbGxFdmVudChnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpKTsKKyAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsKKyAgICBzY3JvbGxFdmVudC0+c2Ny
b2xsLnggPSBtX3N0YXJ0LngoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSBtX3N0YXJ0
LnkoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnhfcm9vdCA9IGV2ZW50LT50b3VjaC54X3Jv
b3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55X3Jvb3QgPSBldmVudC0+dG91Y2gueV9yb290
OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7
CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gMDsKKyAgICBzY3JvbGxFdmVudC0+
c2Nyb2xsLmRlbHRhX3kgPSAwOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVu
dC0+dG91Y2guc3RhdGU7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDcpCisgICAgc2Ny
b2xsRXZlbnQtPnNjcm9sbC5pc19zdG9wID0gRkFMU0U7CisjZW5kaWYKKyAgICBtX3BhZ2UuaGFu
ZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpKSk7Cit9
CisKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0
IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5KQogewogICAgIEFTU0VSVChtX2lu
RHJhZyk7CkBAIC04OCw2ICsxMDksOSBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2Vz
dHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LAogICAgIHNj
cm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kg
PSAobV9vZmZzZXQueSgpIC0geSkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CiAg
ICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5zdGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKKyNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgNykKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0
b3AgPSBGQUxTRTsKKyNlbmRpZgogICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdl
YldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCkpKTsKIH0KIApAQCAtMTI4LDYgKzE1Miw3IEBA
IHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVyZSog
ZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkCiAgICAgdW5zaWduZWQgZGVsYXk7CiAgICAgZ19vYmpl
Y3RfZ2V0KGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKHdpZGdldCksICJndGstbG9uZy1wcmVzcy10
aW1lIiwgJmRlbGF5LCBudWxscHRyKTsKICAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1l
b3V0LnN0YXJ0T25lU2hvdChkZWxheSAvIDEwMDAuMCk7CisgICAgZHJhZ0dlc3R1cmUtPnN0YXJ0
RHJhZyhndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOwogfQog
CiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0dXJl
KiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQpA
QCAtMTcyLDYgKzE5NywzOSBAQCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OkRyYWdH
ZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9nZXN0dXJlLmdldCgpLCAiZW5kIiwgR19DQUxMQkFDSyhlbmQpLCB0aGlzKTsKIH0KIAordm9p
ZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzdG9wRHJhZyhjb25zdCBHZGtFdmVu
dCogZXZlbnQpCit7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQoZ2RrX2V2
ZW50X25ldyhHREtfU0NST0xMKSk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC50aW1lID0gZXZl
bnQtPnRvdWNoLnRpbWU7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54ID0gZXZlbnQtPnRvdWNo
Lng7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55ID0gZXZlbnQtPnRvdWNoLnk7CisgICAgc2Ny
b2xsRXZlbnQtPnNjcm9sbC54X3Jvb3QgPSBldmVudC0+dG91Y2gueF9yb290OworICAgIHNjcm9s
bEV2ZW50LT5zY3JvbGwueV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKKyAgICBzY3JvbGxF
dmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOworICAgIHNjcm9sbEV2
ZW50LT5zY3JvbGwuZGVsdGFfeCA9IDA7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95
ID0gMDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnRvdWNoLnN0YXRl
OworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCA3KQorICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwuaXNfc3RvcCA9IFRSVUU7CisjZW5kaWYKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChO
YXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpKSk7Cit9CisKK3ZvaWQgR2VzdHVy
ZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3dpcGUoU3dpcGVHZXN0dXJlKiBzd2lwZUdlc3R1
cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBHZGtF
dmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9z
ZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOworICAgIGd0a19nZXN0dXJlX3Nl
dF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NM
QUlNRUQpOworCisgICAgc3dpcGVHZXN0dXJlLT5zdG9wRHJhZyhndGtfZ2VzdHVyZV9nZXRfbGFz
dF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOworfQorCitHZXN0dXJlQ29udHJvbGxlcjo6U3dp
cGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5JiBwYWdlKQorICAgIDogR2VzdHVy
ZShndGtfZ2VzdHVyZV9zd2lwZV9uZXcocGFnZS52aWV3V2lkZ2V0KCkpLCBwYWdlKQoreworICAg
IGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUobV9n
ZXN0dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2Vz
dHVyZS5nZXQoKSwgInN3aXBlIiwgR19DQUxMQkFDSyhzd2lwZSksIHRoaXMpOworfQorCiBJbnRQ
b2ludCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNlbnRlcigpIGNvbnN0CiB7CiAg
ICAgZG91YmxlIHgsIHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1
cmVDb250cm9sbGVyLmgKaW5kZXggODY3OTJkZi4uMTRjMjUzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaApAQCAtNjcsNiArNjcsOCBA
QCBwcml2YXRlOgogICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdlUHJveHkmKTsKIAogICAgIHBy
aXZhdGU6CisgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgZHJhZyBzdGFydGVkLCBhbGxvd2luZyB0
byBzdG9wIGtpbmV0aWMgZGVjZWxlcmF0aW9uLgorICAgICAgICB2b2lkIHN0YXJ0RHJhZyhjb25z
dCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqLCBk
b3VibGUgeCwgZG91YmxlIHkpOwogICAgICAgICB2b2lkIGhhbmRsZVRhcChjb25zdCBHZGtFdmVu
dCopOwogICAgICAgICB2b2lkIGxvbmdQcmVzc0ZpcmVkKCk7CkBAIC04Miw2ICs4NCwxNiBAQCBw
cml2YXRlOgogICAgICAgICBib29sIG1faW5EcmFnOwogICAgIH07CiAKKyAgICBjbGFzcyBTd2lw
ZUdlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBT
d2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IHN0b3BEcmFnKGNvbnN0IEdka0V2ZW50Kik7CisKKyAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUo
U3dpcGVHZXN0dXJlKiwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKik7CisgICAgfTsK
KwogICAgIGNsYXNzIFpvb21HZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgewogICAgIHB1
YmxpYzoKICAgICAgICAgWm9vbUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CkBAIC0xMDEsNiArMTEz
LDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgRHJhZ0dlc3R1cmUgbV9kcmFnR2VzdHVyZTsK
KyAgICBTd2lwZUdlc3R1cmUgbV9zd2lwZUdlc3R1cmU7CiAgICAgWm9vbUdlc3R1cmUgbV96b29t
R2VzdHVyZTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277468</attachid>
            <date>2016-04-27 05:50:10 -0700</date>
            <delta_ts>2016-04-28 11:12:55 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>38390</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNDE3NzQ0Ni4uZDdkNjczMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTc3LDYgKzc3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgbG9hZGVyL3NvdXAvU3VicmVzb3VyY2VMb2FkZXJTb3VwLmNwcAogCiAgICAg
cGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktp
bmV0aWMuY3BwCiAKICAgICBwbGF0Zm9ybS9hdWRpby9nbGliL0F1ZGlvQnVzR0xpYi5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCAwNzEz
NTVjLi5mZWIzYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaApAQCAtMjcsNiArMjcsOSBAQAogI2RlZmluZSBQbGF0Zm9ybVdoZWVsRXZlbnRfaAog
CiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiUGxhdGZvcm1FdmVudC5oIgogI2luY2x1ZGUg
PHd0Zi9XaW5kb3dzRXh0cmFzLmg+CiAKQEAgLTYzLDYgKzY2LDEyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQgICA9IDEgPDwg
NCwKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlCZWdpbiAgICA9IDEgPDwgNSwK
ICAgICB9OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIGVudW0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2UgeworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgICAgICAgID0gMCwK
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VTdG9wICAgICAgICA9IDEgPDwgMCwKKyAg
ICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VTd2lwZSAgICAgICA9IDEgPDwgMSwKKyAgICB9
OwogI2VuZGlmCiAKICAgICBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQgOiBwdWJsaWMgUGxhdGZv
cm1FdmVudCB7CkBAIC04Miw2ICs5MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgICwgbV9zY3JvbGxDb3VudCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3Jv
bGxpbmdEZWx0YVgoMCkKICAgICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVs
dGFZKDApCisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICAsIG1fcGhhc2UoUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2VOb25lKQorICAgICAgICAgICAgLCBtX3N3aXBlVmVsb2NpdHkoRmxv
YXRQb2ludCgpKQogI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtMTAzLDYgKzExNSw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9zY3JvbGxDb3VudCgwKQog
ICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgoMCkKICAgICAgICAg
ICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKDApCisjZWxpZiBQTEFURk9STShH
VEspCisgICAgICAgICAgICAsIG1fcGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQor
ICAgICAgICAgICAgLCBtX3N3aXBlVmVsb2NpdHkoRmxvYXRQb2ludCgpKQogI2VuZGlmCiAgICAg
ICAgIHsKICAgICAgICAgfQpAQCAtMTYyLDYgKzE3NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CiAgICAgICAgIGJv
b2wgaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNUcmFu
c2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OworI2VsaWYgUExBVEZPUk0oR1RLKQor
ICAgICAgICBib29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgICAgICBGbG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25zdCB7IHJldHVybiBt
X3N3aXBlVmVsb2NpdHk7IH0KKyAgICAgICAgYm9vbCBpc1N0b3AoKSBjb25zdDsKKyAgICAgICAg
Ym9vbCBpc1N3aXBlKCkgY29uc3Q7CiAjZWxzZQogICAgICAgICBib29sIHVzZUxhdGNoZWRFdmVu
dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCkBAIC0xODcsNiArMjA3
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX3Njcm9sbENvdW50
OwogICAgICAgICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7CiAgICAgICAg
IGZsb2F0IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWTsKKyNlbGlmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZTsKKyAgICAgICAgRmxv
YXRQb2ludCBtX3N3aXBlVmVsb2NpdHk7CiAjZW5kaWYKICAgICB9OwogCkBAIC0yMjIsNiArMjQ1
LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtX3BoYXNl
ID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbjsKICAgICB9CisjZWxpZiBQTEFURk9STShHVEspCisg
ICAgaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc1N0b3AoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VTdG9wIHx8
IG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VTd2lwZTsKKyAgICB9CisgICAgaW5s
aW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc1N3aXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlU3dpcGU7CisgICAg
fQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzliYzRjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCkBAIC0wLDAgKzEsMTc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgiCisKKyNp
bmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
CisvKgorICogUGVyQXhpc0RhdGEgaXMgYSBwb3J0IG9mIEd0a0tpbmV0aWNTY3JvbGxpbmcgYXMg
b2YgR1RLKyAzLjIwLAorICogbWltaWNraW5nIGl0cyBBUEkgYW5kIGl0cyBiZWhhdmlvci4KKyAq
CisgKiBBbGwgb3VyIGN1cnZlcyBhcmUgc2Vjb25kIGRlZ3JlZSBsaW5lYXIgZGlmZmVyZW50aWFs
IGVxdWF0aW9ucywgYW5kCisgKiBzbyB0aGV5IGNhbiBhbHdheXMgYmUgd3JpdHRlbiBhcyBsaW5l
YXIgY29tYmluYXRpb25zIG9mIDIgYmFzZQorICogc29sdXRpb25zLiBjb2VmMSBhbmQgY29lZjIg
YXJlIHRoZSBjb2VmZmljaWVudHMgdG8gdGhlc2UgdHdvIGJhc2UKKyAqIHNvbHV0aW9ucywgYW5k
IGFyZSBjb21wdXRlZCBmcm9tIHRoZSBpbml0aWFsIHBvc2l0aW9uIGFuZCB2ZWxvY2l0eS4KKyAq
CisgKiBJbiB0aGUgY2FzZSBvZiBzaW1wbGUgZGVjZWxlcmF0aW9uLCB0aGUgZGlmZmVyZW50aWFs
IGVxdWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknCisgKgorICogV2l0aCBtIHRoZSByZXNp
c3RlbmNlIGZhY3Rvci4gRm9yIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgMgorICogYmFzZSBz
b2x1dGlvbnM6CisgKgorICogICBmMSh4KSA9IDEKKyAqICAgZjIoeCkgPSBleHAoLW14KQorICoK
KyAqIEluIHRoZSBjYXNlIG9mIG92ZXJzaG9vdCwgdGhlIGRpZmZlcmVudGlhbCBlcXVhdGlvbiBp
cworICoKKyAqICAgeScnID0gLW15JyAtIGt5CisgKgorICogV2l0aCBtIHRoZSByZXNpc3RhbmNl
LCBhbmQgayB0aGUgc3ByaW5nIHN0aWZmbmVzcyBjb25zdGFudC4gV2UgbGV0CisgKiBrID0gbV4y
IC8gNCwgc28gdGhhdCB0aGUgc3lzdGVtIGlzIGNyaXRpY2FsbHkgZGFtcGVkIChpZSwgcmV0dXJu
cyB0byBpdHMKKyAqIGVxdWlsaWJyaXVtIHBvc2l0aW9uIGFzIHF1aWNrbHkgYXMgcG9zc2libGUs
IHdpdGhvdXQgb3NjaWxsYXRpbmcpLCBhbmQgb2Zmc2V0CisgKiB0aGUgd2hvbGUgdGhpbmcsIHN1
Y2ggdGhhdCB0aGUgZXF1aWxpYnJpdW0gcG9zaXRpb24gaXMgYXQgMC4gVGhpcyBnaXZlcyB0aGUK
KyAqIGJhc2Ugc29sdXRpb25zCisgKgorICogICBmMSh4KSA9IGV4cCgtbXggLyAyKQorICogICBm
Mih4KSA9IHQgZXhwKC1teCAvIDIpCisgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZSBkZWNlbEZy
aWN0aW9uID0gNDsKK3N0YXRpYyBjb25zdCBkb3VibGUgZnJhbWVSYXRlID0gNjA7CitzdGF0aWMg
Y29uc3QgZG91YmxlIG1pbmltdW1UaW1lckludGVydmFsID0gLjAwMTsKKworc3RhdGljIGlubGlu
ZSBkb3VibGUgY2xhbXAoZG91YmxlIHgsIGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQoreworICAg
IHJldHVybiAoeCA+IGhpZ2gpID8gaGlnaCA6ICgoeCA8IGxvdykgPyBsb3cgOiB4KTsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0
YTo6UGVyQXhpc0RhdGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFs
UG9zaXRpb24sIGRvdWJsZSBpbml0aWFsVmVsb2NpdHkpCisgICAgOiBtX2xvd2VyKGxvd2VyKQor
ICAgICwgbV91cHBlcih1cHBlcikKKyAgICAsIG1fY29lZjEoaW5pdGlhbFZlbG9jaXR5IC8gZGVj
ZWxGcmljdGlvbiArIGluaXRpYWxQb3NpdGlvbikKKyAgICAsIG1fY29lZjIoLWluaXRpYWxWZWxv
Y2l0eSAvIGRlY2VsRnJpY3Rpb24pCisgICAgLCBtX3Bvc2l0aW9uKGNsYW1wKGluaXRpYWxQb3Np
dGlvbiwgbG93ZXIsIHVwcGVyKSkKKyAgICAsIG1fdmVsb2NpdHkoaW5pdGlhbFBvc2l0aW9uIDwg
bG93ZXIgfHwgaW5pdGlhbFBvc2l0aW9uID4gdXBwZXIgPyAwIDogaW5pdGlhbFZlbG9jaXR5KQor
eworfQorCitib29sIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjphbmltYXRl
U2Nyb2xsKGRvdWJsZSB0aW1lRGVsdGEpCit7CisgICAgbV9lbGFwc2VkVGltZSArPSB0aW1lRGVs
dGE7CisKKyAgICBkb3VibGUgZXhwb25lbnRpYWxQYXJ0ID0gZXhwKC1kZWNlbEZyaWN0aW9uICog
bV9lbGFwc2VkVGltZSk7CisgICAgbV9wb3NpdGlvbiA9IG1fY29lZjEgKyBtX2NvZWYyICogZXhw
b25lbnRpYWxQYXJ0OworICAgIG1fdmVsb2NpdHkgPSAtZGVjZWxGcmljdGlvbiAqIG1fY29lZjIg
KiBleHBvbmVudGlhbFBhcnQ7CisKKyAgICBpZiAobV9wb3NpdGlvbiA8IG1fbG93ZXIpIHsKKyAg
ICAgICAgbV9wb3NpdGlvbiA9IG1fbG93ZXI7CisgICAgICAgIG1fdmVsb2NpdHkgPSAwOworICAg
IH0gZWxzZSBpZiAobV9wb3NpdGlvbiA+IG1fdXBwZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9
IG1fdXBwZXI7CisgICAgICAgIG1fdmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAoZmFicyht
X3ZlbG9jaXR5KSA8IDEpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IHJvdW5kKG1fcG9zaXRpb24p
OworICAgICAgICBtX3ZlbG9jaXR5ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV92ZWxvY2l0
eTsKK30KKworU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyhT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBv
aW50JiYpPiYmIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogU2Nyb2xsQW5p
bWF0aW9uKHNjcm9sbGFibGVBcmVhKQorICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5j
dGlvbihXVEZNb3ZlKG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKKyAgICAsIG1faG9y
aXpvbnRhbERhdGEoMCwgMCwgMCwgMCkKKyAgICAsIG1fdmVydGljYWxEYXRhKDAsIDAsIDAsIDAp
CisgICAgLCBtX2FuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6
YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6flNj
cm9sbEFuaW1hdGlvbktpbmV0aWMoKQoreworfQorCitib29sIFNjcm9sbEFuaW1hdGlvbktpbmV0
aWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
LCBmbG9hdCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25L
aW5ldGljOjpzdG9wKCkKK3sKKyAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb24pCit7CisgICAgc3RvcCgpOworICAgIG1fcG9zaXRpb24gPSBwb3NpdGlv
bjsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydChjb25zdCBGbG9hdFBv
aW50JiBpbml0aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAg
IHN0b3AoKTsKKyAgICBtX3Bvc2l0aW9uID0gaW5pdGlhbFBvc2l0aW9uOworCisgICAgaWYgKHZl
bG9jaXR5ID09IEZsb2F0UG9pbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9ob3Jpem9u
dGFsRGF0YSA9IFBlckF4aXNEYXRhKG1fc2Nyb2xsYWJsZUFyZWEubWluaW11bVNjcm9sbFBvc2l0
aW9uKCkueCgpLAorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlv
bigpLngoKSwKKyAgICAgICAgbV9wb3NpdGlvbi54KCksIHZlbG9jaXR5LngoKSk7CisgICAgbV92
ZXJ0aWNhbERhdGEgPSBQZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQ
b3NpdGlvbigpLnkoKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9z
aXRpb24oKS55KCksCisgICAgICAgIG1fcG9zaXRpb24ueSgpLCB2ZWxvY2l0eS55KCkpOworCisg
ICAgYW5pbWF0aW9uVGltZXJGaXJlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0
aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQoreworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGRvdWJsZSBkZWx0YVRvTmV4dEZyYW1l
ID0gY2VpbCgoY3VycmVudFRpbWUgLSBtX3N0YXJ0VGltZSkgKiBmcmFtZVJhdGUpIC8gZnJhbWVS
YXRlIC0gKGN1cnJlbnRUaW1lIC0gbV9zdGFydFRpbWUpOworCisgICAgYm9vbCBjb250aW51ZUFu
aW1hdGlvbiA9IGZhbHNlOworICAgIGlmIChtX2hvcml6b250YWxEYXRhLmFuaW1hdGVTY3JvbGwo
ZGVsdGFUb05leHRGcmFtZSkpCisgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKKyAg
ICBpZiAobV92ZXJ0aWNhbERhdGEuYW5pbWF0ZVNjcm9sbChkZWx0YVRvTmV4dEZyYW1lKSkKKyAg
ICAgICAgY29udGludWVBbmltYXRpb24gPSB0cnVlOworCisgICAgaWYgKGNvbnRpbnVlQW5pbWF0
aW9uKQorICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChzdGQ6Om1heChtaW5p
bXVtVGltZXJJbnRlcnZhbCwgZGVsdGFUb05leHRGcmFtZSkpOworCisgICAgbV9wb3NpdGlvbiA9
IEZsb2F0UG9pbnQobV9ob3Jpem9udGFsRGF0YS5wb3NpdGlvbigpLCBtX3ZlcnRpY2FsRGF0YS5w
b3NpdGlvbigpKTsKKworICAgIG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24oRmxvYXRQ
b2ludChtX3Bvc2l0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGM5NTljCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTY3JvbGxBbmltYXRpb25LaW5ldGljX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0aW9u
S2luZXRpY19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0aW9uLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTY3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYyBmaW5h
bDogcHVibGljIFNjcm9sbEFuaW1hdGlvbiB7Citwcml2YXRlOgorICAgIHN0cnVjdCBQZXJBeGlz
RGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBQZXJBeGlzRGF0YSgpID0gZGVsZXRlOworICAg
ICAgICBQZXJBeGlzRGF0YShkb3VibGUgbG93ZXIsIGRvdWJsZSB1cHBlciwgZG91YmxlIGluaXRp
YWxQb3NpdGlvbiwgZG91YmxlIGluaXRpYWxWZWxvY2l0eSk7CisKKyAgICAgICAgZG91YmxlIHBv
c2l0aW9uKCkgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorCisgICAgICAgIGJvb2wgYW5pbWF0ZVNj
cm9sbChkb3VibGUgdGltZURlbHRhKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGRvdWJsZSBt
X2xvd2VyIHsgMCB9OworICAgICAgICBkb3VibGUgbV91cHBlciB7IDAgfTsKKworICAgICAgICBk
b3VibGUgbV9jb2VmMSB7IDAgfTsKKyAgICAgICAgZG91YmxlIG1fY29lZjIgeyAwIH07CisKKyAg
ICAgICAgZG91YmxlIG1fZWxhcHNlZFRpbWUgeyAwIH07CisgICAgICAgIGRvdWJsZSBtX3Bvc2l0
aW9uIHsgMCB9OworICAgICAgICBkb3VibGUgbV92ZWxvY2l0eSB7IDAgfTsKKyAgICB9OworCitw
dWJsaWM6CisgICAgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0
aW9uKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRpb25LaW5ldGljKCk7CisKKyAgICBib29s
IHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0
ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92ZXJyaWRlOworICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRl
OworICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lk
IHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9p
bnQmIHZlbG9jaXR5KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQo
KTsKKworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiBtX25vdGlmeVBvc2l0
aW9uQ2hhbmdlZEZ1bmN0aW9uOworCisgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOworICAgIFBl
ckF4aXNEYXRhIG1faG9yaXpvbnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERh
dGE7CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmltYXRp
b25UaW1lcjsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Ny
b2xsQW5pbWF0aW9uS2luZXRpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwCmluZGV4IDEwNDVjNDQuLjQ5YWQ1NjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZl
bnRHdGsuY3BwCkBAIC04Myw2ICs4MywyMCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3Jt
V2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAgbV93aGVlbFRpY2tzWCA9IG1f
ZGVsdGFYOwogICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKIAorI2lmIEdUS19DSEVDS19W
RVJTSU9OKDMsIDE5LCA3KQorICAgIG1fcGhhc2UgPSBldmVudC0+aXNfc3RvcCA/CisgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlU3RvcCA6CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlTm9uZTsKKyNlbGlmIEdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDE4KQorICAgIG1fcGhh
c2UgPSBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09USCAmJiB3aGVl
bFRpY2tzID09IEZsb2F0U2l6ZSgpID8KKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VT
dG9wIDoKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOworI2Vsc2UKKyAgICBt
X3BoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOworI2VuZGlmCisKKyAgICBtX3N3
aXBlVmVsb2NpdHkgPSBGbG9hdFBvaW50KCk7CisKICAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQo
c3RhdGljX2Nhc3Q8aW50PihldmVudC0+eCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnkpKTsK
ICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihldmVudC0+
eF9yb290KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eV9yb290KSk7CiAgICAgbV9ncmFudWxh
cml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKaW5kZXggYjNiMmNiZC4uNmJmYTkzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsu
Y3BwCkBAIC01MCw2ICs1MCwxNSBAQCBTY3JvbGxBbmltYXRvckd0azo6U2Nyb2xsQW5pbWF0b3JH
dGsoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Io
c2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigq
dGhpcywgJlNjcm9sbEFuaW1hdG9yR3RrOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJG
aXJlZCkKIHsKKyAgICAvLyBGSVhNRSBTaG91bGQgdGhpcyBiZSBtb3ZlZCB0byB0aGUgaW5pdGlh
bGl6ZXIgbGlzdCBldmVuIGlmIGl0J3MgYSBiaXQgY29tcGxleD8KKyAgICBtX2tpbmV0aWNBbmlt
YXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+KG1fc2Nyb2xs
YWJsZUFyZWEsIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKKyAgICAgICAgdXBkYXRl
UG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbikpOworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xM
SU5HKQorICAgICAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgICAgICBtX3Ntb290
aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNlbmRpZgorICAgIH0p
OworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgaWYgKHNjcm9sbGFibGVBcmVh
LnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQogICAgICAgICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdB
bmltYXRpb24oKTsKQEAgLTYzLDQ4ICs3MiwxMDkgQEAgU2Nyb2xsQW5pbWF0b3JHdGs6On5TY3Jv
bGxBbmltYXRvckd0aygpCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiB2b2lkIFNjcm9s
bEFuaW1hdG9yR3RrOjplbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKQogewotICAgIGlm
IChtX2FuaW1hdGlvbikKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fYW5pbWF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25T
bW9vdGg+KG1fc2Nyb2xsYWJsZUFyZWEsIG1fY3VycmVudFBvc2l0aW9uLCBbdGhpc10oRmxvYXRQ
b2ludCYmIHBvc2l0aW9uKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0g
bV9jdXJyZW50UG9zaXRpb247Ci0gICAgICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92ZShw
b3NpdGlvbik7Ci0gICAgICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CisgICAgbV9z
bW9vdGhBbmltYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvblNtb290aD4o
bV9zY3JvbGxhYmxlQXJlYSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShGbG9hdFBvaW50JiYg
cG9zaXRpb24pIHsKKyAgICAgICAgdXBkYXRlUG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbikp
OwogICAgIH0pOwogfQorI2VuZGlmCiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbChT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCiB7CisjaWYgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCiAgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5h
YmxlZCgpIHx8IGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UHJlY2lzZVBpeGVsKQogICAgICAgICBy
ZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0
ZXAsIG11bHRpcGxpZXIpOwogCiAgICAgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7
Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5
LCBzdGVwLCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gbV9zbW9vdGhBbmltYXRpb24tPnNjcm9s
bChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworI2Vsc2UKKyAg
ICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHks
IHN0ZXAsIG11bHRpcGxpZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6
OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQp
CiB7CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3Np
dGlvbkZyb21PZmZzZXQob2Zmc2V0LCB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVBcmVhLnNjcm9s
bE9yaWdpbigpKSk7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+
c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnNl
dEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7
CiAKLSAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9uOwot
ICAgIG1fY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgbm90aWZ5UG9zaXRpb25DaGFu
Z2VkKGRlbHRhKTsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9zbW9v
dGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRp
b24ocG9zaXRpb24pOworI2VuZGlmCisKKyAgICB1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50KHBv
c2l0aW9uKSk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRMaXZlUmVzaXpl
KCkKK2NvbnN0IEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JHdGs6OmNvbXB1dGVWZWxvY2l0eSgp
Cit7CisgICAgaWYgKG1fc2Nyb2xsSGlzdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBG
bG9hdFBvaW50KCk7CisKKyAgICBkb3VibGUgZmlyc3QgPSBtX3Njcm9sbEhpc3RvcnlbMF0udGlt
ZXN0YW1wKCk7CisgICAgZG91YmxlIGxhc3QgPSBtX3Njcm9sbEhpc3RvcnkucmJlZ2luKCktPnRp
bWVzdGFtcCgpOworCisgICAgaWYgKGxhc3QgPT0gZmlyc3QpCisgICAgICAgIHJldHVybiBGbG9h
dFBvaW50KCk7CisKKyAgICBGbG9hdFBvaW50IGFjY3VtRGVsdGE7CisgICAgZm9yIChjb25zdCBh
dXRvJiBzY3JvbGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9yeSkKKyAgICAgICAgYWNjdW1EZWx0YSAr
PSBGbG9hdFBvaW50KHNjcm9sbEV2ZW50LmRlbHRhWCgpLCBzY3JvbGxFdmVudC5kZWx0YVkoKSk7
CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKworICAgIHJldHVybiBGbG9hdFBvaW50
KGFjY3VtRGVsdGEueCgpICogLTEwMDAgLyAobGFzdCAtIGZpcnN0KSwgYWNjdW1EZWx0YS55KCkg
KiAtMTAwMCAvIChsYXN0IC0gZmlyc3QpKTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvckd0azo6
aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiB7Ci0gICAgaWYg
KG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMo
KTsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKworICAgIG1fc2Nyb2xsSGlzdG9y
eS5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpIC0+IGJv
b2wgeworICAgICAgICByZXR1cm4gZS50aW1lc3RhbXAoKSAtIGV2ZW50LnRpbWVzdGFtcCgpID4g
MTUwOworICAgIH0pOworICAgIG1fc2Nyb2xsSGlzdG9yeS5hcHBlbmQoZSk7CisKKyAgICAvLyBH
REsgc2Nyb2xsIHN0b3AgZXZlbnRzIGFyZSB1c2VkIHRvIG5vdGlmeSB0aGF0IHRoZSBzY3JvbGxp
bmcgY2FtZSB0byBhbiBlbmQgYW5kIHRoYXQgZGVjZWxlcmF0aW9uIGNhbiBiZSB0cmlnZ2VyZWQu
CisgICAgaWYgKGUuaXNTdG9wKCkpIHsKKyAgICAgICAgaWYgKGUuaXNTd2lwZSgpKSB7CisgICAg
ICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fa2luZXRpY0Fu
aW1hdGlvbi0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGUuc3dpcGVWZWxvY2l0eSgpKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0KG1fY3Vy
cmVudFBvc2l0aW9uLCBjb21wdXRlVmVsb2NpdHkoKSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGUp
OwogfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCit7Cisg
ICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworCisjaWYgRU5B
QkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAg
ICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgorfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYgcG9z
aXRpb24pCit7CisgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3Np
dGlvbjsKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdURk1vdmUocG9zaXRpb24pOworICAgIG5v
dGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7Cit9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6
OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogeworICAgIG1f
a2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRp
b24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQor
ICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRp
ZgogICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTE3LDkgKzE4NywxMSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRW
ZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIAogdm9pZCBTY3JvbGxBbmlt
YXRvckd0azo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikK
IHsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKICNp
ZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAg
IG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworICAgIGlmIChtX3Ntb290aEFu
aW1hdGlvbikKKyAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhz
KCk7CiAjZW5kaWYKICAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9T
Y3JvbGxBbmltYXRvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFu
aW1hdG9yR3RrLmgKaW5kZXggNzBlNWI3My4uZWM3NjZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNp
Zm5kZWYgU2Nyb2xsQW5pbWF0b3JHdGtfaAogI2RlZmluZSBTY3JvbGxBbmltYXRvckd0a19oCiAK
KyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCkBAIC00NCwxMSArNDUsMTcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yR3RrKCk7CiAKIHByaXZhdGU6Ci0jaWYgRU5B
QkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKSBvdmVy
cmlkZTsKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBv
dmVycmlkZTsKKworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgIHZvaWQgZW5zdXJl
U21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CiAjZW5kaWYKKyAgICBjb25zdCBGbG9hdFBvaW50
IGNvbXB1dGVWZWxvY2l0eSgpOworCisgICAgdm9pZCB1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50
JiYpOwogCiAgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3Zl
cnJpZGU7CkBAIC02OSwxMCArNzYsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZU92ZXJs
YXlTY3JvbGxiYXJzT3BhY2l0eSgpOwogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0g
ICAgdm9pZCBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fYW5pbWF0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxBbmltYXRpb24+IG1fc21vb3RoQW5pbWF0aW9uOwogI2VuZGlmCisgICAgc3RkOjp1
bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+IG1fa2luZXRpY0FuaW1hdGlvbjsKKyAg
ICBWZWN0b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhpc3Rvcnk7CiAgICAgU2Nyb2xs
YmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwogICAgIFNjcm9s
bGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07CiAgICAgYm9vbCBt
X292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKQEAgLTgyLDYgKzg5LDggQEAgcHJp
dmF0ZToKICAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uQ3VycmVudCB7IDAg
fTsKICAgICBkb3VibGUgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uU3RhcnRUaW1lIHsgMCB9
OwogICAgIGRvdWJsZSBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25FbmRUaW1lIHsgMCB9Owor
CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+IG1fcG9zaXRpb25DaGFuZ2Vk
Q2FsbGJhY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCAxNTMzMjIyLi4yZDdiOTA5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKQEAgLTUyLDYgKzUy
LDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5hdGl2ZVdlYldoZWVsRXZl
bnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpOwogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQo
R2RrRXZlbnQqKTsKKyAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgc3dpcGVWZWxvY2l0eSk7CiAjZWxpZiBQTEFURk9STShFRkwpCiAg
ICAgTmF0aXZlV2ViV2hlZWxFdmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiwgY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiB0b1dlYkNvbnRlbnQsIGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYgdG9EZXZpY2VTY3JlZW4pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJFdmVudC5oCmluZGV4IDRiZmEwZDguLjhjNjBmOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVu
dC5oCkBAIC0xODksNiArMTg5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgUGhhc2VDYW5jZWxsZWQg
ICA9IDEgPDwgNCwKICAgICAgICAgUGhhc2VNYXlCZWdpbiAgICA9IDEgPDwgNSwKICAgICB9Owor
I2VsaWYgUExBVEZPUk0oR1RLKQorICAgIGVudW0gUGhhc2UgeworICAgICAgICBQaGFzZU5vbmUg
ICAgICAgID0gMCwKKyAgICAgICAgUGhhc2VTdG9wICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAg
UGhhc2VTd2lwZSAgICAgICA9IDEgPDwgMSwKKyAgICB9OwogI2VuZGlmCiAKICAgICBXZWJXaGVl
bEV2ZW50KCkgeyB9CkBAIC0xOTYsNiArMjAyLDggQEAgcHVibGljOgogICAgIFdlYldoZWVsRXZl
bnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVs
dGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIE1v
ZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgV2Vi
V2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxh
cml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQaGFzZSBtb21l
bnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQzMl90IHNjcm9s
bENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykK
KyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3Ms
IFBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzd2lwZVZlbG9jaXR5LCBHcmFudWxh
cml0eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
CkBAIC0yMTAsNiArMjE4LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGlu
Z0RlbHRhcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsgfQog
ICAgIHVpbnQzMl90IHNjcm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3VudDsg
fQogICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0Rl
bHRhKCkgY29uc3QgeyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7IH0KKyNl
bGlmIFBMQVRGT1JNKEdUSykKKyAgICBQaGFzZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFBoYXNlPihtX3BoYXNlKTsgfQorICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgc3dpcGVW
ZWxvY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3dpcGVWZWxvY2l0eTsgfQogI2VuZGlmCiAKICAg
ICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwpAQCAtMjMwLDYgKzI0
MSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAg
ICAgdWludDMyX3QgbV9zY3JvbGxDb3VudDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV91bmFj
Y2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgdWludDMy
X3QgbV9waGFzZTsgLy8gUGhhc2UKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fc3dpcGVWZWxv
Y2l0eTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkV2ZW50Q29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252
ZXJzaW9uLmNwcAppbmRleCBlZWI3NDQxLi44MjRjODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcApAQCAtMTU4LDYgKzE1OCw5IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9zY3JvbGxDb3VudCA9IHdlYkV2ZW50LnNjcm9sbENvdW50KCk7CiAgICAgICAg
IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCA9IHdlYkV2ZW50LnVuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YSgpLndpZHRoKCk7CiAgICAgICAgIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGlu
Z0RlbHRhWSA9IHdlYkV2ZW50LnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSgpLmhlaWdodCgp
OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBtX3BoYXNlID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U+KHdlYkV2ZW50LnBoYXNlKCkpOworICAgICAg
ICBtX3N3aXBlVmVsb2NpdHkgPSB3ZWJFdmVudC5zd2lwZVZlbG9jaXR5KCk7CiAjZW5kaWYKICAg
ICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCmluZGV4IGQyNTBh
MTQuLmUwNWY0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKQEAg
LTQ1LDYgKzQ1LDkgQEAgV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQKICAgICAsIG1fcGhhc2UoUGhh
c2VOb25lKQogICAgICwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZhbHNlKQogICAgICwg
bV9zY3JvbGxDb3VudCgwKQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICwgbV9waGFzZShQaGFz
ZU5vbmUpCisgICAgLCBtX3N3aXBlVmVsb2NpdHkoRmxvYXRQb2ludCgpKQogI2VuZGlmCiB7CiAg
ICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOwpAQCAtNjcsNiArNzAsMjAgQEAgV2Vi
V2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgSW50UG9pbnQKIHsKICAgICBBU1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0eXBl
KSk7CiB9CisjZWxpZiBQTEFURk9STShHVEspCitXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50
KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xv
YmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IEZsb2F0U2l6ZSYgd2hl
ZWxUaWNrcywgUGhhc2UgcGhhc2UsIGNvbnN0IEZsb2F0UG9pbnQmIHN3aXBlVmVsb2NpdHksIEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBNb2RpZmllcnMgbW9kaWZpZXJzLCBkb3VibGUgdGltZXN0
YW1wKQorICAgIDogV2ViRXZlbnQodHlwZSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApCisgICAgLCBt
X3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlv
bikKKyAgICAsIG1fZGVsdGEoZGVsdGEpCisgICAgLCBtX3doZWVsVGlja3Mod2hlZWxUaWNrcykK
KyAgICAsIG1fZ3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpCisgICAgLCBtX2RpcmVjdGlvbkludmVy
dGVkRnJvbURldmljZShmYWxzZSkKKyAgICAsIG1fcGhhc2UocGhhc2UpCisgICAgLCBtX3N3aXBl
VmVsb2NpdHkoc3dpcGVWZWxvY2l0eSkKK3sKKyAgICBBU1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0
eXBlKSk7Cit9CiAjZW5kaWYKIAogdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkBAIC04NSw2ICsxMDIsOSBAQCB2b2lkIFdlYldo
ZWVsRXZlbnQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAg
ICBlbmNvZGVyIDw8IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAgICBlbmNvZGVyIDw8
IG1fc2Nyb2xsQ291bnQ7CiAgICAgZW5jb2RlciA8PCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBlbmNvZGVyIDw8IG1fcGhhc2U7CisgICAg
ZW5jb2RlciA8PCBtX3N3aXBlVmVsb2NpdHk7CiAjZW5kaWYKIH0KIApAQCAtMTE1LDYgKzEzNSwx
MSBAQCBib29sIFdlYldoZWVsRXZlbnQ6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVj
b2RlciwgV2ViV2hlZWxFdmVudCYgdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUodC5tX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHQubV9waGFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHQubV9zd2lwZVZlbG9jaXR5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlm
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcAppbmRleCBiMzY3NjEyLi4wODk3OGY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0
ay5jcHAKQEAgLTM3LDYgKzM3LDEyIEBAIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldo
ZWVsRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogfQogCitOYXRpdmVXZWJXaGVlbEV2ZW50OjpO
YXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgc3dpcGVWZWxvY2l0eSkKKyAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBzd2lwZVZlbG9jaXR5KSkKKyAgICAsIG1fbmF0
aXZlRXZlbnQoZ2RrX2V2ZW50X2NvcHkoZXZlbnQpKQoreworfQorCiBOYXRpdmVXZWJXaGVlbEV2
ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50
KQogICAgIDogV2ViV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZl
bnQoZXZlbnQubmF0aXZlRXZlbnQoKSkpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVudF9j
b3B5KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9X
ZWJFdmVudEZhY3RvcnkuY3BwCmluZGV4IDJkNjYzOTMuLjg2MDM2MmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTE0MSw3ICsxNDEsNyBA
QCBXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChjb25z
dCBHZGtFdmVudCogZXZlbnQsIGludCBjdQogICAgICAgICAgICAgICAgICAgICAgICAgIGdka19l
dmVudF9nZXRfdGltZShldmVudCkpOwogfQogCi1XZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9y
eTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCitzdGF0aWMgV2Vi
V2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50RnVsbChjb25zdCBHZGtFdmVudCogZXZlbnQs
IFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlLCBjb25zdCBGbG9hdFBvaW50JiBzd2lwZVZlbG9j
aXR5KQogewogICAgIGRvdWJsZSB4LCB5LCB4Um9vdCwgeVJvb3Q7CiAgICAgZ2RrX2V2ZW50X2dl
dF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7CkBAIC0xNzksMTMgKzE3OSwzOSBAQCBXZWJXaGVlbEV2
ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCog
ZXZlbnQpCiAgICAgRmxvYXRTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lkdGgoKSAqIHN0ZXAsIHdo
ZWVsVGlja3MuaGVpZ2h0KCkgKiBzdGVwKTsKIAogICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdl
YkV2ZW50OjpXaGVlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4LCB5KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbHRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIHdoZWVs
VGlja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQ
aXhlbFdoZWVsRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzRm9yRXZl
bnQoZXZlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfdGltZShl
dmVudCkpOworICAgICAgICBJbnRQb2ludCh4LCB5KSwKKyAgICAgICAgSW50UG9pbnQoeFJvb3Qs
IHlSb290KSwKKyAgICAgICAgZGVsdGEsCisgICAgICAgIHdoZWVsVGlja3MsCisgICAgICAgIHBo
YXNlLAorICAgICAgICBzd2lwZVZlbG9jaXR5LAorICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3Jv
bGxCeVBpeGVsV2hlZWxFdmVudCwKKyAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpLAor
ICAgICAgICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKTsKK30KKworV2ViV2hlZWxFdmVudCBX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50
KQoreworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCA3KQorICAgIFdlYldoZWVsRXZlbnQ6
OlBoYXNlIHBoYXNlID0gZ2RrX2V2ZW50X2lzX3Njcm9sbF9zdG9wX2V2ZW50KGV2ZW50KSA/Cisg
ICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZVN0b3AgOgorICAgICAgICBXZWJXaGVl
bEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lOworI2VsaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywg
MTgpCisgICAgZG91YmxlIGRlbHRhWCwgZGVsdGFZOworICAgIGdka19ldmVudF9nZXRfc2Nyb2xs
X2RlbHRhcyhldmVudCwgJmRlbHRhWCwgJmRlbHRhWSk7CisgICAgV2ViV2hlZWxFdmVudDo6UGhh
c2UgcGhhc2UgPSBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09USCAm
JiAhZGVsdGFYICYmICFkZWx0YVkgPworICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhh
c2VTdG9wIDoKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZTsKKyNlbHNl
CisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6
UGhhc2VOb25lOworI2VuZGlmCisKKyAgICByZXR1cm4gY3JlYXRlV2ViV2hlZWxFdmVudEZ1bGwo
ZXZlbnQsIHBoYXNlLCBGbG9hdFBvaW50KCkpOworfQorCitXZWJXaGVlbEV2ZW50IFdlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0
IEZsb2F0UG9pbnQmIHN3aXBlVmVsb2NpdHkpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdlYldoZWVs
RXZlbnRGdWxsKGV2ZW50LCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VTd2lwZSwgc3dpcGVW
ZWxvY2l0eSk7CiB9CiAKIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVX
ZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgY29uc3QgV2ViQ29yZTo6Q29t
cG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMsIFZlY3RvcjxTdHJpbmc+JiYgY29t
bWFuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFj
dG9yeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaAppbmRl
eCAyOGI2OTUzLi42MzBkZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L1dlYkV2ZW50RmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KGNvbnN0
IEdka0V2ZW50KiwgaW50KTsKICAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVl
bEV2ZW50KGNvbnN0IEdka0V2ZW50Kik7CisgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRl
V2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IHN3aXBlVmVsb2NpdHkpOwogICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktl
eWJvYXJkRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJl
c3VsdHMmLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogICAgIHN0YXRpYyBXZWJUb3VjaEV2ZW50IGNyZWF0ZVdlYlRvdWNoRXZlbnQoY29uc3Qg
R2RrRXZlbnQqLCBWZWN0b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiYmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYzI5NzMwNi4uYjJkYmE2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE4MjAsOCArMTgy
MCwxOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBOYXRpdmVX
ZWJXaGVlbEV2ZW50JiBldmVudCkKIAogICAgIGlmICghbV9jdXJyZW50bHlQcm9jZXNzZWRXaGVl
bEV2ZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgbV93aGVlbEV2ZW50UXVldWUuYXBwZW5kKGV2
ZW50KTsKKyNpZiBQTEFURk9STShHVEspCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDcp
CisgICAgICAgIGJvb2wgaXNTY3JvbGxTdG9wRXZlbnQgPSBnZGtfZXZlbnRfaXNfc2Nyb2xsX3N0
b3BfZXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSk7CisjZWxzZQorICAgICAgICBjb25zdCBHZGtF
dmVudFNjcm9sbCYgc2Nyb2xsID0gZXZlbnQubmF0aXZlRXZlbnQoKS0+c2Nyb2xsOworICAgICAg
ICBib29sIGlzU2Nyb2xsU3RvcEV2ZW50ID0gc2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xM
X1NNT09USCAmJiBzY3JvbGwuZGVsdGFfeCAmJiBzY3JvbGwuZGVsdGFfeTsKKyNlbmRpZgorICAg
ICAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6ZSgpIDwgd2hlZWxFdmVudFF1ZXVlU2l6ZVRo
cmVzaG9sZCAmJiAhaXNTY3JvbGxTdG9wRXZlbnQpCisgICAgICAgICAgICByZXR1cm47CisjZWxz
ZQogICAgICAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6ZSgpIDwgd2hlZWxFdmVudFF1ZXVl
U2l6ZVRocmVzaG9sZCkKICAgICAgICAgICAgIHJldHVybjsKKyNlbmRpZgogICAgICAgICAvLyBU
aGUgcXVldWUgaGFzIHRvbyBtYW55IHdoZWVsIGV2ZW50cywgc28gcHVzaCBhIG5ldyBldmVudC4K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVy
ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29u
dHJvbGxlci5jcHAKaW5kZXggN2UxNTc3Yy4uMDA5MzAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKQEAgLTQxLDYgKzQxLDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJv
bGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgOiBtX2RyYWdHZXN0dXJlKHBhZ2UpCisgICAg
LCBtX3N3aXBlR2VzdHVyZShwYWdlKQogICAgICwgbV96b29tR2VzdHVyZShwYWdlKQogewogfQpA
QCAtNDksMTMgKzUwLDE0IEBAIGJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNv
bnN0IEdka0V2ZW50KiBldmVudCkKIHsKICAgICBib29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9
IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7CiAgICAgbV9kcmFnR2VzdHVyZS5oYW5kbGVFdmVudChl
dmVudCk7CisgICAgbV9zd2lwZUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIG1fem9v
bUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBH
REtfVE9VQ0hfRU5EID8gd2FzUHJvY2Vzc2luZ0dlc3R1cmVzIDogaXNQcm9jZXNzaW5nR2VzdHVy
ZXMoKTsKIH0KIAogYm9vbCBHZXN0dXJlQ29udHJvbGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMo
KSBjb25zdAogewotICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29t
R2VzdHVyZS5pc0FjdGl2ZSgpOworICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlzQWN0aXZlKCkg
fHwgbV9zd2lwZUdlc3R1cmUuaXNBY3RpdmUoKSB8fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7
CiB9CiAKIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpHZXN0dXJlKEd0a0dlc3R1cmUqIGdl
c3R1cmUsIFdlYlBhZ2VQcm94eSYgcGFnZSkKQEAgLTc1LDYgKzc3LDI1IEBAIHZvaWQgR2VzdHVy
ZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkK
ICAgICBndGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQoR1RLX0VWRU5UX0NPTlRST0xM
RVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQpOwogfQogCit2b2lkIEdlc3R1cmVDb250cm9sbGVy
OjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBB
U1NFUlQoIW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudChn
ZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnRpbWUg
PSBldmVudC0+dG91Y2gudGltZTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnggPSBtX3N0YXJ0
LngoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSBtX3N0YXJ0LnkoKTsKKyAgICBzY3Jv
bGxFdmVudC0+c2Nyb2xsLnhfcm9vdCA9IGV2ZW50LT50b3VjaC54X3Jvb3Q7CisgICAgc2Nyb2xs
RXZlbnQtPnNjcm9sbC55X3Jvb3QgPSBldmVudC0+dG91Y2gueV9yb290OworICAgIHNjcm9sbEV2
ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7CisgICAgc2Nyb2xsRXZl
bnQtPnNjcm9sbC5kZWx0YV94ID0gMDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kg
PSAwOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+dG91Y2guc3RhdGU7
CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDcpCisgICAgc2Nyb2xsRXZlbnQtPnNjcm9s
bC5pc19zdG9wID0gRkFMU0U7CisjZW5kaWYKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChO
YXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpKSk7Cit9CisKIHZvaWQgR2VzdHVy
ZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVu
dCwgZG91YmxlIHgsIGRvdWJsZSB5KQogewogICAgIEFTU0VSVChtX2luRHJhZyk7CkBAIC04OCw2
ICsxMDksOSBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJh
Zyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LAogICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwuZGVsdGFfeCA9IChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kgPSAobV9vZmZzZXQueSgp
IC0geSkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CiAgICAgc2Nyb2xsRXZlbnQt
PnNjcm9sbC5zdGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCAxOSwgNykKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBGQUxTRTsKKyNl
bmRpZgogICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Ny
b2xsRXZlbnQuZ2V0KCkpKTsKIH0KIApAQCAtMTI4LDYgKzE1Miw3IEBAIHZvaWQgR2VzdHVyZUNv
bnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRv
dWJsZSB4LCBkCiAgICAgdW5zaWduZWQgZGVsYXk7CiAgICAgZ19vYmplY3RfZ2V0KGd0a193aWRn
ZXRfZ2V0X3NldHRpbmdzKHdpZGdldCksICJndGstbG9uZy1wcmVzcy10aW1lIiwgJmRlbGF5LCBu
dWxscHRyKTsKICAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LnN0YXJ0T25lU2hv
dChkZWxheSAvIDEwMDAuMCk7CisgICAgZHJhZ0dlc3R1cmUtPnN0YXJ0RHJhZyhndGtfZ2VzdHVy
ZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOwogfQogCiB2b2lkIEdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwg
ZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQpAQCAtMTcyLDYgKzE5Nywz
OSBAQCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OkRyYWdHZXN0dXJlKFdlYlBhZ2VQ
cm94eSYgcGFnZSkKICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgp
LCAiZW5kIiwgR19DQUxMQkFDSyhlbmQpLCB0aGlzKTsKIH0KIAordm9pZCBHZXN0dXJlQ29udHJv
bGxlcjo6U3dpcGVHZXN0dXJlOjpzdG9wRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0
IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9s
bEV2ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkpOworICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwudGltZSA9IGV2ZW50LT50b3VjaC50aW1lOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9
IGV2ZW50LT50b3VjaC54OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IGV2ZW50LT50b3Vj
aC55OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9v
dDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7
CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsK
KyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAwOworICAgIHNjcm9sbEV2ZW50LT5z
Y3JvbGwuZGVsdGFfeSA9IDA7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5zdGF0ZSA9IGV2ZW50
LT50b3VjaC5zdGF0ZTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgNykKKyAgICBzY3Jv
bGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBUUlVFOworI2VuZGlmCisgICAgbV9wYWdlLmhhbmRs
ZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgdmVsb2Np
dHkpKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzd2lwZShT
d2lwZUdlc3R1cmUqIHN3aXBlR2VzdHVyZSwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9j
aXR5WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1
ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVS
RV9TSU5HTEUoZ2VzdHVyZSkpOworICAgIGd0a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShn
ZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisgICAgc3dp
cGVHZXN0dXJlLT5zdG9wRHJhZyhndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBz
ZXF1ZW5jZSksIEZsb2F0UG9pbnQoLXZlbG9jaXR5WCwgLXZlbG9jaXR5WSkpOworfQorCitHZXN0
dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5JiBw
YWdlKQorICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV9zd2lwZV9uZXcocGFnZS52aWV3V2lkZ2V0
KCkpLCBwYWdlKQoreworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtf
R0VTVFVSRV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgInN3aXBlIiwgR19DQUxMQkFDSyhzd2lwZSks
IHRoaXMpOworfQorCiBJbnRQb2ludCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNl
bnRlcigpIGNvbnN0CiB7CiAgICAgZG91YmxlIHgsIHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggODY3OTJkZi4uMjdlNGIyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIu
aApAQCAtNjcsNiArNjcsOCBAQCBwcml2YXRlOgogICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdl
UHJveHkmKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgZHJhZyBz
dGFydGVkLCBhbGxvd2luZyB0byBzdG9wIGtpbmV0aWMgZGVjZWxlcmF0aW9uLgorICAgICAgICB2
b2lkIHN0YXJ0RHJhZyhjb25zdCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGhhbmRsZURyYWco
Y29uc3QgR2RrRXZlbnQqLCBkb3VibGUgeCwgZG91YmxlIHkpOwogICAgICAgICB2b2lkIGhhbmRs
ZVRhcChjb25zdCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGxvbmdQcmVzc0ZpcmVkKCk7CkBA
IC04Miw2ICs4NCwxNiBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1faW5EcmFnOwogICAgIH07
CiAKKyAgICBjbGFzcyBTd2lwZUdlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CisgICAg
cHVibGljOgorICAgICAgICBTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBwcml2
YXRlOgorICAgICAgICB2b2lkIHN0b3BEcmFnKGNvbnN0IEdka0V2ZW50KiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgdmVsb2NpdHkpOworCisgICAgICAgIHN0YXRpYyB2b2lkIHN3aXBlKFN3
aXBlR2VzdHVyZSosIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dlc3R1
cmUqKTsKKyAgICB9OworCiAgICAgY2xhc3MgWm9vbUdlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2Vz
dHVyZSB7CiAgICAgcHVibGljOgogICAgICAgICBab29tR2VzdHVyZShXZWJQYWdlUHJveHkmKTsK
QEAgLTEwMSw2ICsxMTMsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBEcmFnR2VzdHVyZSBt
X2RyYWdHZXN0dXJlOworICAgIFN3aXBlR2VzdHVyZSBtX3N3aXBlR2VzdHVyZTsKICAgICBab29t
R2VzdHVyZSBtX3pvb21HZXN0dXJlOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277635</attachid>
            <date>2016-04-28 11:12:55 -0700</date>
            <delta_ts>2016-06-11 01:35:47 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>41500</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNDE3NzQ0Ni4uZDdkNjczMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTc3LDYgKzc3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgbG9hZGVyL3NvdXAvU3VicmVzb3VyY2VMb2FkZXJTb3VwLmNwcAogCiAgICAg
cGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktp
bmV0aWMuY3BwCiAKICAgICBwbGF0Zm9ybS9hdWRpby9nbGliL0F1ZGlvQnVzR0xpYi5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCAwNzEz
NTVjLi5iNmY4NGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNj
cm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAogICAgIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGVudW0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2UgOiB1aW50OF90IHsKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VO
b25lICAgICAgICA9IDAsCiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4gICAg
ICAgPSAxIDw8IDAsCkBAIC0xNjIsNiArMTYyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBp
c0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1RyYW5zaXRp
b25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
ICAgIGJvb2wgdXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIGJvb2wgaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisgICAgICAg
IGJvb2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OworICAgICAgICBG
bG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25zdDsKICNlbHNlCiAgICAgICAgIGJvb2wgdXNl
TGF0Y2hlZEV2ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKQEAg
LTE4Nyw2ICsxOTIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVuc2lnbmVkIG1f
c2Nyb2xsQ291bnQ7CiAgICAgICAgIGZsb2F0IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
WDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZOworI2VsaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtX3BoYXNlIHsg
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlIG1fbW9tZW50dW1QaGFzZSB7IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSB9Owog
I2VuZGlmCiAgICAgfTsKIApAQCAtMjEyLDcgKzIyMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
Tm9uZSAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsK
ICAgICB9CisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAg
ICAgaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc0VuZE9mTm9uTW9tZW50dW1TY3Jv
bGwoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VFbmRlZCAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VOb25lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRp
b25LaW5ldGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA3MTMz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYy5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgi
CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKKy8qCisgKiBQZXJBeGlzRGF0YSBpcyBh
IHBvcnQgb2YgR3RrS2luZXRpY1Njcm9sbGluZyBhcyBvZiBHVEsrIDMuMjAsCisgKiBtaW1pY2tp
bmcgaXRzIEFQSSBhbmQgaXRzIGJlaGF2aW9yLgorICoKKyAqIEFsbCBvdXIgY3VydmVzIGFyZSBz
ZWNvbmQgZGVncmVlIGxpbmVhciBkaWZmZXJlbnRpYWwgZXF1YXRpb25zLCBhbmQKKyAqIHNvIHRo
ZXkgY2FuIGFsd2F5cyBiZSB3cml0dGVuIGFzIGxpbmVhciBjb21iaW5hdGlvbnMgb2YgMiBiYXNl
CisgKiBzb2x1dGlvbnMuIGNvZWYxIGFuZCBjb2VmMiBhcmUgdGhlIGNvZWZmaWNpZW50cyB0byB0
aGVzZSB0d28gYmFzZQorICogc29sdXRpb25zLCBhbmQgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGlu
aXRpYWwgcG9zaXRpb24gYW5kIHZlbG9jaXR5LgorICoKKyAqIEluIHRoZSBjYXNlIG9mIHNpbXBs
ZSBkZWNlbGVyYXRpb24sIHRoZSBkaWZmZXJlbnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHkn
JyA9IC1teScKKyAqCisgKiBXaXRoIG0gdGhlIHJlc2lzdGVuY2UgZmFjdG9yLiBGb3IgdGhpcyB3
ZSB1c2UgdGhlIGZvbGxvd2luZyAyCisgKiBiYXNlIHNvbHV0aW9uczoKKyAqCisgKiAgIGYxKHgp
ID0gMQorICogICBmMih4KSA9IGV4cCgtbXgpCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygb3ZlcnNo
b290LCB0aGUgZGlmZmVyZW50aWFsIGVxdWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknIC0g
a3kKKyAqCisgKiBXaXRoIG0gdGhlIHJlc2lzdGFuY2UsIGFuZCBrIHRoZSBzcHJpbmcgc3RpZmZu
ZXNzIGNvbnN0YW50LiBXZSBsZXQKKyAqIGsgPSBtXjIgLyA0LCBzbyB0aGF0IHRoZSBzeXN0ZW0g
aXMgY3JpdGljYWxseSBkYW1wZWQgKGllLCByZXR1cm5zIHRvIGl0cworICogZXF1aWxpYnJpdW0g
cG9zaXRpb24gYXMgcXVpY2tseSBhcyBwb3NzaWJsZSwgd2l0aG91dCBvc2NpbGxhdGluZyksIGFu
ZCBvZmZzZXQKKyAqIHRoZSB3aG9sZSB0aGluZywgc3VjaCB0aGF0IHRoZSBlcXVpbGlicml1bSBw
b3NpdGlvbiBpcyBhdCAwLiBUaGlzIGdpdmVzIHRoZQorICogYmFzZSBzb2x1dGlvbnMKKyAqCisg
KiAgIGYxKHgpID0gZXhwKC1teCAvIDIpCisgKiAgIGYyKHgpID0gdCBleHAoLW14IC8gMikKKyAq
LworCitzdGF0aWMgY29uc3QgZG91YmxlIGRlY2VsRnJpY3Rpb24gPSA0Oworc3RhdGljIGNvbnN0
IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRpbWVy
SW50ZXJ2YWwgPSAuMDAxOworCitzdGF0aWMgaW5saW5lIGRvdWJsZSBjbGFtcChkb3VibGUgeCwg
ZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCit7CisgICAgcmV0dXJuICh4ID4gaGlnaCkgPyBoaWdo
IDogKCh4IDwgbG93KSA/IGxvdyA6IHgpOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nj
cm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShkb3VibGUgbG93
ZXIsIGRvdWJsZSB1cHBlciwgZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91YmxlIGluaXRpYWxW
ZWxvY2l0eSkKKyAgICA6IG1fbG93ZXIobG93ZXIpCisgICAgLCBtX3VwcGVyKHVwcGVyKQorICAg
ICwgbV9jb2VmMShpbml0aWFsVmVsb2NpdHkgLyBkZWNlbEZyaWN0aW9uICsgaW5pdGlhbFBvc2l0
aW9uKQorICAgICwgbV9jb2VmMigtaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbikKKyAg
ICAsIG1fcG9zaXRpb24oY2xhbXAoaW5pdGlhbFBvc2l0aW9uLCBsb3dlciwgdXBwZXIpKQorICAg
ICwgbV92ZWxvY2l0eShpbml0aWFsUG9zaXRpb24gPCBsb3dlciB8fCBpbml0aWFsUG9zaXRpb24g
PiB1cHBlciA/IDAgOiBpbml0aWFsVmVsb2NpdHkpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoZG91YmxlIHRpbWVEZWx0YSkK
K3sKKyAgICBtX2VsYXBzZWRUaW1lICs9IHRpbWVEZWx0YTsKKworICAgIGRvdWJsZSBleHBvbmVu
dGlhbFBhcnQgPSBleHAoLWRlY2VsRnJpY3Rpb24gKiBtX2VsYXBzZWRUaW1lKTsKKyAgICBtX3Bv
c2l0aW9uID0gbV9jb2VmMSArIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisgICAgbV92ZWxv
Y2l0eSA9IC1kZWNlbEZyaWN0aW9uICogbV9jb2VmMiAqIGV4cG9uZW50aWFsUGFydDsKKworICAg
IGlmIChtX3Bvc2l0aW9uIDwgbV9sb3dlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV9sb3dl
cjsKKyAgICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChtX3Bvc2l0aW9uID4g
bV91cHBlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV91cHBlcjsKKyAgICAgICAgbV92ZWxv
Y2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChmYWJzKG1fdmVsb2NpdHkpIDwgMSkgeworICAgICAg
ICBtX3Bvc2l0aW9uID0gcm91bmQobV9wb3NpdGlvbik7CisgICAgICAgIG1fdmVsb2NpdHkgPSAw
OworICAgIH0KKworICAgIHJldHVybiBtX3ZlbG9jaXR5OworfQorCitTY3JvbGxBbmltYXRpb25L
aW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRpb25D
aGFuZ2VkRnVuY3Rpb24pCisgICAgOiBTY3JvbGxBbmltYXRpb24oc2Nyb2xsYWJsZUFyZWEpCisg
ICAgLCBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKFdURk1vdmUobm90aWZ5UG9zaXRp
b25DaGFuZ2VkRnVuY3Rpb24pKQorICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9s
bEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQpCit7Cit9CisKK1Njcm9sbEFu
aW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKCkKK3sKK30KKworYm9vbCBT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCwgZmxvYXQpCit7CisgICAgLy8gVGhpcyBtZXRob2QgaXNuJ3Qg
bmVlZGVkIGFuZCBzaG91bGRuJ3QgZG8gYW55dGhpbmcgYXMgJ3Njcm9sbCcgaXNuJ3QKKyAgICAv
LyBob3cgdGhpcyBhbmltYXRpb24gbmVlZHMgdG8gYmUgdXNlZCwgdXNlICdzdGFydCcgaW5zdGVh
ZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpz
dG9wKCkKK3sKKyAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRpb25LaW5ldGljOjpzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pCit7CisgICAgc3RvcCgpOworICAgIG1fcG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0
aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAgIHN0b3AoKTsK
KyAgICBtX3Bvc2l0aW9uID0gaW5pdGlhbFBvc2l0aW9uOworCisgICAgaWYgKHZlbG9jaXR5Lmlz
T3JpZ2luKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faG9yaXpvbnRhbERhdGEgPSBQZXJB
eGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisgICAg
ICAgIG1fcG9zaXRpb24ueCgpLCB2ZWxvY2l0eS54KCkpOworICAgIG1fdmVydGljYWxEYXRhID0g
UGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCks
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpLAor
ICAgICAgICBtX3Bvc2l0aW9uLnkoKSwgdmVsb2NpdHkueSgpKTsKKworICAgIGFuaW1hdGlvblRp
bWVyRmlyZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25U
aW1lckZpcmVkKCkKK3sKKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKKyAgICBkb3VibGUgZGVsdGFUb05leHRGcmFtZSA9IGNlaWwoKGN1cnJl
bnRUaW1lIC0gbV9zdGFydFRpbWUpICogZnJhbWVSYXRlKSAvIGZyYW1lUmF0ZSAtIChjdXJyZW50
VGltZSAtIG1fc3RhcnRUaW1lKTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRpb24gPSBmYWxz
ZTsKKyAgICBpZiAobV9ob3Jpem9udGFsRGF0YS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJh
bWUpKQorICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9IHRydWU7CisgICAgaWYgKG1fdmVydGlj
YWxEYXRhLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05leHRGcmFtZSkpCisgICAgICAgIGNvbnRpbnVl
QW5pbWF0aW9uID0gdHJ1ZTsKKworICAgIGlmIChjb250aW51ZUFuaW1hdGlvbikKKyAgICAgICAg
bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qoc3RkOjptYXgobWluaW11bVRpbWVySW50ZXJ2
YWwsIGRlbHRhVG9OZXh0RnJhbWUpKTsKKworICAgIG1fcG9zaXRpb24gPSBGbG9hdFBvaW50KG1f
aG9yaXpvbnRhbERhdGEucG9zaXRpb24oKSwgbV92ZXJ0aWNhbERhdGEucG9zaXRpb24oKSk7CisK
KyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKEZsb2F0UG9pbnQobV9wb3NpdGlv
bikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWNiNGZkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAtMCwwICsxLDg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xs
QW5pbWF0aW9uS2luZXRpY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaAorCisj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgorI2lu
Y2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYWJs
ZUFyZWE7CisKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgZmluYWw6IHB1YmxpYyBTY3Jv
bGxBbmltYXRpb24geworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAgIHB1
YmxpYzoKKyAgICAgICAgUGVyQXhpc0RhdGEoKSA9IGRlbGV0ZTsKKyAgICAgICAgUGVyQXhpc0Rh
dGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRv
dWJsZSBpbml0aWFsVmVsb2NpdHkpOworCisgICAgICAgIGRvdWJsZSBwb3NpdGlvbigpIHsgcmV0
dXJuIG1fcG9zaXRpb247IH0KKworICAgICAgICBib29sIGFuaW1hdGVTY3JvbGwoZG91YmxlIHRp
bWVEZWx0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBkb3VibGUgbV9sb3dlciB7IDAgfTsK
KyAgICAgICAgZG91YmxlIG1fdXBwZXIgeyAwIH07CisKKyAgICAgICAgZG91YmxlIG1fY29lZjEg
eyAwIH07CisgICAgICAgIGRvdWJsZSBtX2NvZWYyIHsgMCB9OworCisgICAgICAgIGRvdWJsZSBt
X2VsYXBzZWRUaW1lIHsgMCB9OworICAgICAgICBkb3VibGUgbV9wb3NpdGlvbiB7IDAgfTsKKyAg
ICAgICAgZG91YmxlIG1fdmVsb2NpdHkgeyAwIH07CisgICAgfTsKKworcHVibGljOgorICAgIFNj
cm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
RmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbik7CisgICAgdmly
dHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xs
YmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0
aXBsaWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVw
ZGF0ZVZpc2libGVMZW5ndGhzKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRDdXJyZW50UG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgc3RhcnQoY29uc3Qg
RmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CisKKyAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5j
dGlvbjsKKworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBQZXJBeGlzRGF0YSBtX2hv
cml6b250YWxEYXRhIHsgUGVyQXhpc0RhdGEoMCwgMCwgMCwgMCkgfTsKKyAgICBQZXJBeGlzRGF0
YSBtX3ZlcnRpY2FsRGF0YSB7IFBlckF4aXNEYXRhKDAsIDAsIDAsIDApIH07CisKKyAgICBkb3Vi
bGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgK
aW5kZXggMzJhNGE3ODcuLjhhNGEwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmgKQEAgLTEyMSw2ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3ggKiBtX3ggKyBtX3kgKiBtX3k7CiAgICAgfQogCisgICAgYm9vbCBpc09yaWdp
bigpIGNvbnN0IHsgcmV0dXJuICFtX3ggJiYgIW1feTsgfQorCiAgICAgV0VCQ09SRV9FWFBPUlQg
RmxvYXRQb2ludCBjb25zdHJhaW5lZEJldHdlZW4oY29uc3QgRmxvYXRQb2ludCYgbWluLCBjb25z
dCBGbG9hdFBvaW50JiBtYXgpIGNvbnN0OwogCiAgICAgRmxvYXRQb2ludCBzaHJ1bmtUbyhjb25z
dCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggMTA0NWM0NC4uY2M0ZTM5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxF
dmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hl
ZWxFdmVudEd0ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTgzLDYg
Kzg0LDIyIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50
U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7CiAgICAgbV93aGVl
bFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgbV9waGFzZSA9IGV2ZW50LT5pc19zdG9wID8K
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCA6CisgICAgICAgIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgbV9waGFzZSA9IGV2ZW50LT5kaXJl
Y3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIW1fZGVsdGFYICYmICFtX2RlbHRhWSA/Cisg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNlbHNlCisgICAgbV9waGFzZSA9IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgor
CisgICAgbV9tb21lbnR1bVBoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOworCiAg
ICAgbV9wb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0
aWNfY2FzdDxpbnQ+KGV2ZW50LT55KSk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50
KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQt
Pnlfcm9vdCkpOwogICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsK
QEAgLTkzLDQgKzExMCwxMCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVu
dChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQgUGxh
dGZvcm1XaGVlbEV2ZW50Ojpzd2lwZVZlbG9jaXR5KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3dp
cGluZyB2ZWxvY2l0eSBpcyBzdG9yZWQgaW4gdGhlIGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVjbGFy
aW5nIGl0LgorICAgIHJldHVybiBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgPyBG
bG9hdFBvaW50KG1fd2hlZWxUaWNrc1gsIG1fd2hlZWxUaWNrc1kpIDogRmxvYXRQb2ludCgpOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5p
bWF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9y
R3RrLmNwcAppbmRleCBiM2IyY2JkLi5lNTUyNzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKQEAgLTQwLDYgKzQwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZG91YmxlIG92ZXJmbG93U2Nyb2xsYmFy
c0FuaW1hdGlvbkR1cmF0aW9uID0gMTsKIHN0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3Jv
bGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5ID0gMjsKK3N0YXRpYyBjb25zdCBkb3VibGUgc2Nyb2xs
Q2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kcyA9IDE1MDsKIAogc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSkKIHsKQEAgLTUwLDYgKzUxLDE0IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjpTY3Jv
bGxBbmltYXRvckd0ayhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3Jv
bGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lckZpcmVkKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91
bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4obV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBv
c2l0aW9uKSk7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgICAgIGlmIChtX3Nt
b290aEFuaW1hdGlvbikKKyAgICAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50
UG9zaXRpb24ocG9zaXRpb24pOworI2VuZGlmCisgICAgfSk7CisKICNpZiBFTkFCTEUoU01PT1RI
X1NDUk9MTElORykKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVk
KCkpCiAgICAgICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwpAQCAtNjMsNDgg
KzcyLDExMSBAQCBTY3JvbGxBbmltYXRvckd0azo6flNjcm9sbEFuaW1hdG9yR3RrKCkKICNpZiBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNt
b290aFNjcm9sbGluZ0FuaW1hdGlvbigpCiB7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQorICAgIGlm
IChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hbmltYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJl
YSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKLSAg
ICAgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAg
ICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKLSAgICAgICAgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyAgICBtX3Ntb290aEFuaW1hdGlvbiA9IHN0ZDo6
bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBtX2N1
cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICB1
cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50KHBvc2l0aW9uKSk7CiAgICAgfSk7CiB9CisjZW5kaWYK
IAogYm9vbCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxv
YXQgbXVsdGlwbGllcikKIHsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAo
IW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkgfHwgZ3JhbnVsYXJpdHkg
PT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAg
ICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKLSAgICByZXR1cm4gbV9hbmltYXRp
b24tPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwor
ICAgIHJldHVybiBtX3Ntb290aEFuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZWxzZQorICAgIHJldHVybiBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Cisj
ZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50IHBv
c2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQs
IHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkpKTsKLSAgICBpZiAo
bV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9z
aXRpb24pOworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKIAotICAgIEZsb2F0U2l6ZSBkZWx0
YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247Ci0gICAgbV9jdXJyZW50UG9zaXRpb24g
PSBwb3NpdGlvbjsKLSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOworI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAg
bV9zbW9vdGhBbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisjZW5kaWYK
KworICAgIHVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQocG9zaXRpb24pKTsKIH0KIAotdm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6d2lsbEVuZExpdmVSZXNpemUoKQorRmxvYXRQb2ludCBTY3JvbGxB
bmltYXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5KCkKIHsKLSAgICBpZiAobV9hbmltYXRpb24pCi0g
ICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworICAgIGlmIChtX3Nj
cm9sbEhpc3RvcnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworCisg
ICAgZG91YmxlIGZpcnN0ID0gbV9zY3JvbGxIaXN0b3J5WzBdLnRpbWVzdGFtcCgpOworICAgIGRv
dWJsZSBsYXN0ID0gbV9zY3JvbGxIaXN0b3J5LnJiZWdpbigpLT50aW1lc3RhbXAoKTsKKworICAg
IGlmIChsYXN0ID09IGZpcnN0KQorICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworCisgICAg
RmxvYXRQb2ludCBhY2N1bURlbHRhOworICAgIGZvciAoY29uc3QgYXV0byYgc2Nyb2xsRXZlbnQg
OiBtX3Njcm9sbEhpc3RvcnkpCisgICAgICAgIGFjY3VtRGVsdGEgKz0gRmxvYXRQb2ludChzY3Jv
bGxFdmVudC5kZWx0YVgoKSwgc2Nyb2xsRXZlbnQuZGVsdGFZKCkpOworCisgICAgbV9zY3JvbGxI
aXN0b3J5LmNsZWFyKCk7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChhY2N1bURlbHRhLngoKSAq
IC0xMDAwIC8gKGxhc3QgLSBmaXJzdCksIGFjY3VtRGVsdGEueSgpICogLTEwMDAgLyAobGFzdCAt
IGZpcnN0KSk7CiB9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRp
b24tPnN0b3AoKTsKKworICAgIG1fc2Nyb2xsSGlzdG9yeS5yZW1vdmVBbGxNYXRjaGluZyhbJl0g
KFBsYXRmb3JtV2hlZWxFdmVudCYgb3RoZXJFdmVudCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVy
biBldmVudC50aW1lc3RhbXAoKSAtIG90aGVyRXZlbnQudGltZXN0YW1wKCkgPiBzY3JvbGxDYXB0
dXJlVGhyZXNob2xkTWlsbGlzZWNvbmRzOworICAgIH0pOworCisgICAgaWYgKGV2ZW50LmlzRW5k
T2ZOb25Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3Rh
cnQobV9jdXJyZW50UG9zaXRpb24sIGNvbXB1dGVWZWxvY2l0eSgpKTsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1T
Y3JvbGwoKSkgeworICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKyAgICAgICAgbV9r
aW5ldGljQW5pbWF0aW9uLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgZXZlbnQuc3dpcGVWZWxv
Y2l0eSgpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3Njcm9sbEhp
c3RvcnkuYXBwZW5kKGV2ZW50KTsKKworICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxl
V2hlZWxFdmVudChldmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRM
aXZlUmVzaXplKCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5n
dGhzKCk7CisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9zbW9vdGhB
bmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOwogI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OnVwZGF0ZVBvc2l0aW9u
KEZsb2F0UG9pbnQmJiBwb3NpdGlvbikKK3sKKyAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlv
biAtIG1fY3VycmVudFBvc2l0aW9uOworICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92ZShw
b3NpdGlvbik7CisgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKK30KIAogdm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Rocygp
OworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAgaWYgKG1fYW5pbWF0aW9uKQot
ICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9z
bW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxl
TGVuZ3RocygpOwogI2VuZGlmCiAgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTcsOSArMTg5LDExIEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgIGlmIChtX2Fu
aW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7Cisg
ICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBk
YXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAppbmRleCA3MGU1YjczLi4xNTMyYTAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaApAQCAt
MzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JvbGxBbmltYXRvckd0a19oCiAjZGVmaW5lIFNjcm9s
bEFuaW1hdG9yR3RrX2gKIAorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKICNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKQEAgLTQ0LDEx
ICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JHdGsoKTsKIAog
cHJpdmF0ZToKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBib29sIHNjcm9sbChT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0
IG11bHRpcGxpZXIpIG92ZXJyaWRlOwogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHdpbGxFbmRMaXZl
UmVzaXplKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKKworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwpAQCAtNjMsMTYgKzY0LDIyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0
U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwogICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0
ZVRvSGlkZGVuKGJvb2wpIG92ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVQb3NpdGlvbihGbG9h
dFBvaW50JiYpOworCiAgICAgdm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJl
ZCgpOwogICAgIHZvaWQgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCBoaWRlT3Zl
cmxheVNjcm9sbGJhcnMoKTsKICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0
eSgpOwogCisgICAgRmxvYXRQb2ludCBjb21wdXRlVmVsb2NpdHkoKTsKKwogI2lmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQogICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9u
KCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1hdGlvbjsK
ICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb25LaW5ldGljPiBtX2tp
bmV0aWNBbmltYXRpb247CisgICAgVmVjdG9yPFBsYXRmb3JtV2hlZWxFdmVudD4gbV9zY3JvbGxI
aXN0b3J5OwogICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51
bGxwdHIgfTsKICAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVs
bHB0ciB9OwogICAgIGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCAxNTMzMjIy
Li40NTAxZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hl
ZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50
LmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5h
dGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpOwogICAgIE5hdGl2
ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqKTsKKyAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2
ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVt
UGhhc2UpOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoY29u
c3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCosIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYgdG9XZWJDb250ZW50LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRvRGV2aWNl
U2NyZWVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAppbmRleCA0YmZhMGQ4Li45
N2ViZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApAQCAtMTc5LDcgKzE3OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQKICAgICB9OwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBl
bnVtIFBoYXNlIHsKICAgICAgICAgUGhhc2VOb25lICAgICAgICA9IDAsCiAgICAgICAgIFBoYXNl
QmVnYW4gICAgICAgPSAxIDw8IDAsCkBAIC0xOTYsNiArMTk2LDggQEAgcHVibGljOgogICAgIFdl
YldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVs
YXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tz
LCBHcmFudWxhcml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQ
aGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQz
Ml90IHNjcm9sbENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdo
ZWVsVGlja3MsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSwgTW9kaWZp
ZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CkBAIC0yMTAsNiAr
MjEyLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpIGNv
bnN0IHsgcmV0dXJuIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsgfQogICAgIHVpbnQzMl90
IHNjcm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3VudDsgfQogICAgIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkgY29uc3Qg
eyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7IH0KKyNlbGlmIFBMQVRGT1JN
KEdUSykKKyAgICBQaGFzZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNl
PihtX3BoYXNlKTsgfQorICAgIFBoYXNlIG1vbWVudHVtUGhhc2UoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxQaGFzZT4obV9tb21lbnR1bVBoYXNlKTsgfQogI2VuZGlmCiAKICAgICB2b2lk
IGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwpAQCAtMjMwLDYgKzIzNSw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAgICAgdWlu
dDMyX3QgbV9zY3JvbGxDb3VudDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV91bmFjY2VsZXJh
dGVkU2Nyb2xsaW5nRGVsdGE7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgdWludDMyX3QgbV9w
aGFzZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsgLy8gUGhhc2UKKyAgICB1aW50MzJfdCBtX21vbWVu
dHVtUGhhc2UgeyBQaGFzZTo6UGhhc2VOb25lIH07IC8vIFBoYXNlCiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKaW5kZXggZWViNzQ0
MS4uMzFiMGVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29u
dmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lv
bi5jcHAKQEAgLTEyMyw2ICsxMjMsMzcgQEAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IHBs
YXRmb3JtKGNvbnN0IFdlYk1vdXNlRXZlbnQmIHdlYkV2ZW50KQogICAgIHJldHVybiBXZWJLaXQy
UGxhdGZvcm1Nb3VzZUV2ZW50KHdlYkV2ZW50KTsKIH0KIAorI2lmIFBMQVRGT1JNKEdUSykKK2lu
bGluZSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgb3BlcmF0b3J8PShXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgc2VsZiwgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2Ugb3RoZXIpCit7CisvLyAgICBzZWxmID0gKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlKQorLy8gICAgICAgIChzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxX
ZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4+KHNlbGYpIHwKKy8vICAgICAgICBzdGF0
aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZT4+KG90aGVyKSk7CisvLyAgICByZXR1cm4gc2VsZjsKKyAgICByZXR1cm4gc2VsZiA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlPihzZWxmIHwgb3RoZXIp
OworfQorCitzdGF0aWMgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgdG9QbGF0Zm9y
bVdoZWVsZXZlbnRQaGFzZShXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSkKK3sKKyAgICBXZWJD
b3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSByZXN1bHQgPSBXZWJDb3JlOjpQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOworCisgICAgaWYgKHBo
YXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQmVnYW4pCisgICAgICAgIHJlc3VsdCB8
PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2VCZWdhbjsKKyAgICBpZiAocGhhc2UgJiBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VTdGF0
aW9uYXJ5KQorICAgICAgICByZXN1bHQgfD0gV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2U6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlU3RhdGlvbmFyeTsKKyAgICBpZiAocGhhc2UgJiBX
ZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkKQorICAgICAgICByZXN1bHQgfD0gV2Vi
Q29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hh
bmdlZDsKKyAgICBpZiAocGhhc2UgJiBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCkK
KyAgICAgICAgcmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOworICAgIGlmIChwaGFzZSAmIFdlYldoZWVsRXZlbnQ6
OlBoYXNlOjpQaGFzZUNhbmNlbGxlZCkKKyAgICAgICAgcmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNhbmNlbGxlZDsKKyAg
ICBpZiAocGhhc2UgJiBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VNYXlCZWdpbikKKyAgICAg
ICAgcmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZU1heUJlZ2luOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgor
CiBjbGFzcyBXZWJLaXQyUGxhdGZvcm1XaGVlbEV2ZW50IDogcHVibGljIFdlYkNvcmU6OlBsYXRm
b3JtV2hlZWxFdmVudCB7CiBwdWJsaWM6CiAgICAgV2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVudChj
b25zdCBXZWJXaGVlbEV2ZW50JiB3ZWJFdmVudCkKQEAgLTE1OCw2ICsxODksOSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fc2Nyb2xsQ291bnQgPSB3ZWJFdmVudC5zY3JvbGxDb3VudCgpOwogICAgICAg
ICBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVggPSB3ZWJFdmVudC51bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGEoKS53aWR0aCgpOwogICAgICAgICBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxp
bmdEZWx0YVkgPSB3ZWJFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKS5oZWlnaHQo
KTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgbV9waGFzZSA9IHRvUGxhdGZvcm1XaGVl
bGV2ZW50UGhhc2Uod2ViRXZlbnQucGhhc2UoKSk7CisgICAgICAgIG1fbW9tZW50dW1QaGFzZSA9
IHRvUGxhdGZvcm1XaGVlbGV2ZW50UGhhc2Uod2ViRXZlbnQubW9tZW50dW1QaGFzZSgpKTsKICNl
bmRpZgogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hl
ZWxFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKaW5k
ZXggZDI1MGExNC4uZjMxMmZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YldoZWVsRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50
LmNwcApAQCAtNjcsNiArNjcsMjAgQEAgV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBl
IHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQKIHsKICAgICBB
U1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0eXBlKSk7CiB9CisjZWxpZiBQTEFURk9STShHVEspCitX
ZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBv
c2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
ZGVsdGEsIGNvbnN0IEZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgUGhhc2UgcGhhc2UsIFBoYXNlIG1v
bWVudHVtUGhhc2UsIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBNb2RpZmllcnMgbW9kaWZpZXJz
LCBkb3VibGUgdGltZXN0YW1wKQorICAgIDogV2ViRXZlbnQodHlwZSwgbW9kaWZpZXJzLCB0aW1l
c3RhbXApCisgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICwgbV9nbG9iYWxQb3NpdGlv
bihnbG9iYWxQb3NpdGlvbikKKyAgICAsIG1fZGVsdGEoZGVsdGEpCisgICAgLCBtX3doZWVsVGlj
a3Mod2hlZWxUaWNrcykKKyAgICAsIG1fZ3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpCisgICAgLCBt
X2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZShmYWxzZSkKKyAgICAsIG1fcGhhc2UocGhhc2Up
CisgICAgLCBtX21vbWVudHVtUGhhc2UobW9tZW50dW1QaGFzZSkKK3sKKyAgICBBU1NFUlQoaXNX
aGVlbEV2ZW50VHlwZSh0eXBlKSk7Cit9CiAjZW5kaWYKIAogdm9pZCBXZWJXaGVlbEV2ZW50Ojpl
bmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkBAIC04NSw2ICs5OSw5
IEBAIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwog
ICAgIGVuY29kZXIgPDwgbV9zY3JvbGxDb3VudDsKICAgICBlbmNvZGVyIDw8IG1fdW5hY2NlbGVy
YXRlZFNjcm9sbGluZ0RlbHRhOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIGVuY29kZXIgPDwg
bV9waGFzZTsKKyAgICBlbmNvZGVyIDw8IG1fbW9tZW50dW1QaGFzZTsKICNlbmRpZgogfQogCkBA
IC0xMTUsNiArMTMyLDExIEBAIGJvb2wgV2ViV2hlZWxFdmVudDo6ZGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBXZWJXaGVlbEV2ZW50JiB0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0Rl
bHRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodC5tX3BoYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodC5tX21vbWVudHVtUGhhc2UpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCmluZGV4IGIzNjc2MTIu
LjE1ZjAwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2Vi
V2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVX
ZWJXaGVlbEV2ZW50R3RrLmNwcApAQCAtMzcsNiArMzcsMTIgQEAgTmF0aXZlV2ViV2hlZWxFdmVu
dDo6TmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCogZXZlbnQpCiB7CiB9CiAKK05hdGl2ZVdl
YldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqIGV2ZW50LCBXZWJXaGVl
bEV2ZW50OjpQaGFzZSBwaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSkK
KyAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50
KGV2ZW50LCBwaGFzZSwgbW9tZW50dW1QaGFzZSkpCisgICAgLCBtX25hdGl2ZUV2ZW50KGdka19l
dmVudF9jb3B5KGV2ZW50KSkKK3sKK30KKwogTmF0aXZlV2ViV2hlZWxFdmVudDo6TmF0aXZlV2Vi
V2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKICAgICA6IFdlYldo
ZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50Lm5hdGl2
ZUV2ZW50KCkpKQogICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudC5uYXRp
dmVFdmVudCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5
LmNwcAppbmRleCAyZDY2MzkzLi40MjNjNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0xNDMsNiArMTQzLDI3IEBAIFdlYk1vdXNlRXZl
bnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBl
dmVudCwgaW50IGN1CiAKIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJX
aGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKKyNpZm5kZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICBXZWJXaGVlbEV2ZW50
OjpQaGFzZSBwaGFzZSA9IGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9ldmVudChldmVudCkgPwor
ICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCA6CisgICAgICAgIFdlYldo
ZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZWxzZQorICAgIGRvdWJsZSBkZWx0YVgs
IGRlbHRhWTsKKyAgICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMoZXZlbnQsICZkZWx0YVgs
ICZkZWx0YVkpOworICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gZXZlbnQtPnNjcm9s
bC5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIWRlbHRhWCAmJiAhZGVsdGFZID8K
KyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQgOgorICAgICAgICBXZWJX
aGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworI2VuZGlmCisjZWxzZQorICAgIFdlYldo
ZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdl
ZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCisgICAgcmV0dXJuIGNyZWF0ZVdlYldo
ZWVsRXZlbnQoZXZlbnQsIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lKTsK
K30KKworV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQo
Y29uc3QgR2RrRXZlbnQqIGV2ZW50LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSwgV2ViV2hl
ZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSkKK3sKICAgICBkb3VibGUgeCwgeSwgeFJvb3Qs
IHlSb290OwogICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkpOwogICAgIGdk
a19ldmVudF9nZXRfcm9vdF9jb29yZHMoZXZlbnQsICZ4Um9vdCwgJnlSb290KTsKQEAgLTE3OSwx
MyArMjAwLDE1IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVl
bEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKICAgICBGbG9hdFNpemUgZGVsdGEod2hlZWxU
aWNrcy53aWR0aCgpICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQoKSAqIHN0ZXApOwogCiAgICAg
cmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIEludFBvaW50KHgsIHkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50
KHhSb290LCB5Um9vdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgd2hlZWxUaWNrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CisgICAgICAgIEludFBvaW50KHgsIHkpLAor
ICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAorICAgICAgICBkZWx0YSwKKyAgICAgICAg
d2hlZWxUaWNrcywKKyAgICAgICAgcGhhc2UsCisgICAgICAgIG1vbWVudHVtUGhhc2UsCisgICAg
ICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAorICAgICAgICBtb2Rp
ZmllcnNGb3JFdmVudChldmVudCksCisgICAgICAgIGdka19ldmVudF9nZXRfdGltZShldmVudCkp
OwogfQogCiBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9h
cmRFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9u
UmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKaW5kZXggMjhiNjk1
My4uOGZlN2NkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVu
dEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9y
eS5oCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIFdlYkV2ZW50RmFjdG9yeSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChjb25zdCBHZGtFdmVu
dCosIGludCk7CiAgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChj
b25zdCBHZGtFdmVudCopOworICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVs
RXZlbnQoY29uc3QgR2RrRXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVu
dDo6UGhhc2UgbW9tZW50dW1QaGFzZSk7CiAgICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3Jl
YXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCosIGNvbnN0IFdlYkNvcmU6OkNvbXBv
c2l0aW9uUmVzdWx0cyYsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpOwogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCiAgICAgc3RhdGljIFdlYlRvdWNoRXZlbnQgY3JlYXRlV2ViVG91Y2hFdmVu
dChjb25zdCBHZGtFdmVudCosIFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+JiYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBjMjk3MzA2Li4xNmRj
NDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTgy
MCw3ICsxODIwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
TmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAKICAgICBpZiAoIW1fY3VycmVudGx5UHJvY2Vz
c2VkV2hlZWxFdmVudHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fd2hlZWxFdmVudFF1ZXVlLmFw
cGVuZChldmVudCk7Ci0gICAgICAgIGlmIChtX3doZWVsRXZlbnRRdWV1ZS5zaXplKCkgPCB3aGVl
bEV2ZW50UXVldWVTaXplVGhyZXNob2xkKQorICAgICAgICBpZiAobV93aGVlbEV2ZW50UXVldWUu
c2l6ZSgpIDwgd2hlZWxFdmVudFF1ZXVlU2l6ZVRocmVzaG9sZCAmJiBjYW5Ta2lwV2hlZWxFdmVu
dChldmVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFRoZSBxdWV1ZSBoYXMg
dG9vIG1hbnkgd2hlZWwgZXZlbnRzLCBzbyBwdXNoIGEgbmV3IGV2ZW50LgogICAgIH0KQEAgLTE4
NjEsNiArMTg2MSwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZFdoZWVsRXZlbnQoY29uc3Qg
V2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgbV9wcm9jZXNzLT5pc1Jlc3BvbnNpdmUobnVsbHB0
cik7CiB9CiAKKyNpZiAhUExBVEZPUk0oR1RLKQorYm9vbCBXZWJQYWdlUHJveHk6OmNhblNraXBX
aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKQoreworICAgIHJldHVybiB0cnVlOworfQor
I2VuZGlmCisKIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIGlmICghaXNWYWxpZCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDlmZmFjZGQuLjc4N2M4NWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTE0NTIsNiArMTQ1
Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NOZXh0UXVldWVkV2hlZWxFdmVudCgp
OwogICAgIHZvaWQgc2VuZFdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOworICAgIHN0
YXRpYyBib29sIGNhblNraXBXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKIAogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBzaG91bGRTdGFydFRyYWNraW5nVG91Y2hF
dmVudHMoY29uc3QgV2ViVG91Y2hFdmVudCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAppbmRleCA3ZTE1NzdjLi42OTEz
MDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmNwcApAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogR2VzdHVy
ZUNvbnRyb2xsZXI6Okdlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICA6
IG1fZHJhZ0dlc3R1cmUocGFnZSkKKyAgICAsIG1fc3dpcGVHZXN0dXJlKHBhZ2UpCiAgICAgLCBt
X3pvb21HZXN0dXJlKHBhZ2UpCiB7CiB9CkBAIC00OSwxMyArNTAsMTQgQEAgYm9vbCBHZXN0dXJl
Q29udHJvbGxlcjo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogewogICAgIGJv
b2wgd2FzUHJvY2Vzc2luZ0dlc3R1cmVzID0gaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKICAgICBt
X2RyYWdHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKKyAgICBtX3N3aXBlR2VzdHVyZS5oYW5k
bGVFdmVudChldmVudCk7CiAgICAgbV96b29tR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CiAg
ICAgcmV0dXJuIGV2ZW50LT50eXBlID09IEdES19UT1VDSF9FTkQgPyB3YXNQcm9jZXNzaW5nR2Vz
dHVyZXMgOiBpc1Byb2Nlc3NpbmdHZXN0dXJlcygpOwogfQogCiBib29sIEdlc3R1cmVDb250cm9s
bGVyOjppc1Byb2Nlc3NpbmdHZXN0dXJlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHJhZ0dl
c3R1cmUuaXNBY3RpdmUoKSB8fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7CisgICAgcmV0dXJu
IG1fZHJhZ0dlc3R1cmUuaXNBY3RpdmUoKSB8fCBtX3N3aXBlR2VzdHVyZS5pc0FjdGl2ZSgpIHx8
IG1fem9vbUdlc3R1cmUuaXNBY3RpdmUoKTsKIH0KIAogR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1
cmU6Okdlc3R1cmUoR3RrR2VzdHVyZSogZ2VzdHVyZSwgV2ViUGFnZVByb3h5JiBwYWdlKQpAQCAt
NzUsNiArNzcsMjUgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6aGFuZGxlRXZl
bnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAgIGd0a19ldmVudF9jb250cm9sbGVyX2hhbmRs
ZV9ldmVudChHVEtfRVZFTlRfQ09OVFJPTExFUihtX2dlc3R1cmUuZ2V0KCkpLCBldmVudCk7CiB9
CiAKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpzdGFydERyYWcoY29uc3Qg
R2RrRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVCghbV9pbkRyYWcpOworICAgIEdVbmlxdWVQ
dHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkpOworICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2ZW50LT50b3VjaC50aW1lOworICAgIHNjcm9s
bEV2ZW50LT5zY3JvbGwueCA9IG1fc3RhcnQueCgpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwu
eSA9IG1fc3RhcnQueSgpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueF9yb290ID0gZXZlbnQt
PnRvdWNoLnhfcm9vdDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT50
b3VjaC55X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NS
T0xMX1NNT09USDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAwOworICAgIHNj
cm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IDA7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5z
dGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwg
MCkKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBGQUxTRTsKKyNlbmRpZgorICAg
IG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQu
Z2V0KCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuLCBXZWJXaGVlbEV2ZW50OjpQ
aGFzZTo6UGhhc2VOb25lKSk7Cit9CisKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0
dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5
KQogewogICAgIEFTU0VSVChtX2luRHJhZyk7CkBAIC04OCw3ICsxMDksMTAgQEAgdm9pZCBHZXN0
dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqIGV2
ZW50LCBkb3VibGUgeCwKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAobV9vZmZz
ZXQueCgpIC0geCkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CiAgICAgc2Nyb2xs
RXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gKG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpOwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVu
dC0+dG91Y2guc3RhdGU7Ci0gICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hl
ZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSkpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIw
LCAwKQorICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuaXNfc3RvcCA9IEZBTFNFOworI2VuZGlmCisg
ICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVu
dC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZCwgV2ViV2hlZWxFdmVu
dDo6UGhhc2U6OlBoYXNlTm9uZSkpOwogfQogCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFn
R2VzdHVyZTo6aGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50KiBldmVudCkKQEAgLTEyOCw2ICsxNTIs
NyBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6YmVnaW4oRHJhZ0dlc3R1
cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUgeCwgZAogICAgIHVuc2lnbmVkIGRlbGF5OwogICAgIGdf
b2JqZWN0X2dldChndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyh3aWRnZXQpLCAiZ3RrLWxvbmctcHJl
c3MtdGltZSIsICZkZWxheSwgbnVsbHB0cik7CiAgICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNz
VGltZW91dC5zdGFydE9uZVNob3QoZGVsYXkgLyAxMDAwLjApOworICAgIGRyYWdHZXN0dXJlLT5z
dGFydERyYWcoZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKTsK
IH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnVwZGF0ZShEcmFnR2Vz
dHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVy
ZSkKQEAgLTE3Miw2ICsxOTcsMzkgQEAgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpE
cmFnR2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKG1fZ2VzdHVyZS5nZXQoKSwgImVuZCIsIEdfQ0FMTEJBQ0soZW5kKSwgdGhpcyk7CiB9CiAK
K3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3RhcnRNb21lbnR1bVNjcm9s
bChjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0
eVkpCit7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQoZ2RrX2V2ZW50X25l
dyhHREtfU0NST0xMKSk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC50aW1lID0gZXZlbnQtPnRv
dWNoLnRpbWU7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54ID0gZXZlbnQtPnRvdWNoLng7Cisg
ICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55ID0gZXZlbnQtPnRvdWNoLnk7CisgICAgc2Nyb2xsRXZl
bnQtPnNjcm9sbC54X3Jvb3QgPSBldmVudC0+dG91Y2gueF9yb290OworICAgIHNjcm9sbEV2ZW50
LT5zY3JvbGwueV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKKyAgICBzY3JvbGxFdmVudC0+
c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOworICAgIHNjcm9sbEV2ZW50LT5z
Y3JvbGwuZGVsdGFfeCA9IHZlbG9jaXR5WDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRh
X3kgPSB2ZWxvY2l0eVk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5zdGF0ZSA9IGV2ZW50LT50
b3VjaC5zdGF0ZTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICBzY3JvbGxF
dmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBUUlVFOworI2VuZGlmCisgICAgbV9wYWdlLmhhbmRsZVdo
ZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxF
dmVudDo6UGhhc2U6OlBoYXNlTm9uZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQmVnYW4p
KTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzd2lwZShTd2lw
ZUdlc3R1cmUqIHN3aXBlR2VzdHVyZSwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5
WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5j
ZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9T
SU5HTEUoZ2VzdHVyZSkpOworICAgIGd0a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0
dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisgICAgc3dpcGVH
ZXN0dXJlLT5zdGFydE1vbWVudHVtU2Nyb2xsKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdl
c3R1cmUsIHNlcXVlbmNlKSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVkpOworfQorCitHZXN0dXJlQ29u
dHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5JiBwYWdlKQor
ICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV9zd2lwZV9uZXcocGFnZS52aWV3V2lkZ2V0KCkpLCBw
YWdlKQoreworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVS
RV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgInN3aXBlIiwgR19DQUxMQkFDSyhzd2lwZSksIHRoaXMp
OworfQorCiBJbnRQb2ludCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNlbnRlcigp
IGNvbnN0CiB7CiAgICAgZG91YmxlIHgsIHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggODY3OTJkZi4uZTk2MDMxZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaApAQCAt
NjcsNiArNjcsOCBAQCBwcml2YXRlOgogICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdlUHJveHkm
KTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgZHJhZyBzdGFydGVk
LCBhbGxvd2luZyB0byBzdG9wIGtpbmV0aWMgZGVjZWxlcmF0aW9uLgorICAgICAgICB2b2lkIHN0
YXJ0RHJhZyhjb25zdCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGhhbmRsZURyYWcoY29uc3Qg
R2RrRXZlbnQqLCBkb3VibGUgeCwgZG91YmxlIHkpOwogICAgICAgICB2b2lkIGhhbmRsZVRhcChj
b25zdCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGxvbmdQcmVzc0ZpcmVkKCk7CkBAIC04Miw2
ICs4NCwxNiBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1faW5EcmFnOwogICAgIH07CiAKKyAg
ICBjbGFzcyBTd2lwZUdlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CisgICAgcHVibGlj
OgorICAgICAgICBTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIHN0YXJ0TW9tZW50dW1TY3JvbGwoY29uc3QgR2RrRXZlbnQqLCBkb3VibGUg
dmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZKTsKKworICAgICAgICBzdGF0aWMgdm9pZCBzd2lw
ZShTd2lwZUdlc3R1cmUqLCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZLCBHdGtH
ZXN0dXJlKik7CisgICAgfTsKKwogICAgIGNsYXNzIFpvb21HZXN0dXJlIGZpbmFsIDogcHVibGlj
IEdlc3R1cmUgewogICAgIHB1YmxpYzoKICAgICAgICAgWm9vbUdlc3R1cmUoV2ViUGFnZVByb3h5
Jik7CkBAIC0xMDEsNiArMTEzLDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgRHJhZ0dlc3R1
cmUgbV9kcmFnR2VzdHVyZTsKKyAgICBTd2lwZUdlc3R1cmUgbV9zd2lwZUdlc3R1cmU7CiAgICAg
Wm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAppbmRleCAyZGJhZTA1Li42MGY1ZDg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3Bw
CkBAIC0xNDgsNCArMTQ4LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRDZW50ZXJGb3Jab29t
R2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2VudGVySW5WaWV3CiB9CiAjZW5kaWYK
IAorYm9vbCBXZWJQYWdlUHJveHk6OmNhblNraXBXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZl
bnQmIGV2ZW50KQoreworICAgIHJldHVybiBldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6
OlBoYXNlOjpQaGFzZUVuZGVkCisgICAgICAgIHx8IGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBX
ZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281091</attachid>
            <date>2016-06-11 01:35:47 -0700</date>
            <delta_ts>2016-06-15 06:25:19 -0700</delta_ts>
            <desc>Add inertial scrolling to WebKitGTK+</desc>
            <filename>inertial-scrolling-diff</filename>
            <type>text/plain</type>
            <size>41264</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNzRlNTE5NS4uMmNmMDhhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTc3LDYgKzc3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgbG9hZGVyL3NvdXAvU3VicmVzb3VyY2VMb2FkZXJTb3VwLmNwcAogCiAgICAg
cGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktp
bmV0aWMuY3BwCiAKICAgICBwbGF0Zm9ybS9hdWRpby9nbGliL0F1ZGlvQnVzR0xpYi5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCAwNzEz
NTVjLi5iNmY4NGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNj
cm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAogICAgIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGVudW0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2UgOiB1aW50OF90IHsKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VO
b25lICAgICAgICA9IDAsCiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4gICAg
ICAgPSAxIDw8IDAsCkBAIC0xNjIsNiArMTYyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBp
c0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1RyYW5zaXRp
b25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
ICAgIGJvb2wgdXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIGJvb2wgaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisgICAgICAg
IGJvb2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OworICAgICAgICBG
bG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25zdDsKICNlbHNlCiAgICAgICAgIGJvb2wgdXNl
TGF0Y2hlZEV2ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKQEAg
LTE4Nyw2ICsxOTIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVuc2lnbmVkIG1f
c2Nyb2xsQ291bnQ7CiAgICAgICAgIGZsb2F0IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
WDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZOworI2VsaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtX3BoYXNlIHsg
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlIG1fbW9tZW50dW1QaGFzZSB7IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSB9Owog
I2VuZGlmCiAgICAgfTsKIApAQCAtMjEyLDcgKzIyMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
Tm9uZSAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsK
ICAgICB9CisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAg
ICAgaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc0VuZE9mTm9uTW9tZW50dW1TY3Jv
bGwoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VFbmRlZCAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VOb25lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRp
b25LaW5ldGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA3MTMz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYy5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgi
CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKKy8qCisgKiBQZXJBeGlzRGF0YSBpcyBh
IHBvcnQgb2YgR3RrS2luZXRpY1Njcm9sbGluZyBhcyBvZiBHVEsrIDMuMjAsCisgKiBtaW1pY2tp
bmcgaXRzIEFQSSBhbmQgaXRzIGJlaGF2aW9yLgorICoKKyAqIEFsbCBvdXIgY3VydmVzIGFyZSBz
ZWNvbmQgZGVncmVlIGxpbmVhciBkaWZmZXJlbnRpYWwgZXF1YXRpb25zLCBhbmQKKyAqIHNvIHRo
ZXkgY2FuIGFsd2F5cyBiZSB3cml0dGVuIGFzIGxpbmVhciBjb21iaW5hdGlvbnMgb2YgMiBiYXNl
CisgKiBzb2x1dGlvbnMuIGNvZWYxIGFuZCBjb2VmMiBhcmUgdGhlIGNvZWZmaWNpZW50cyB0byB0
aGVzZSB0d28gYmFzZQorICogc29sdXRpb25zLCBhbmQgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGlu
aXRpYWwgcG9zaXRpb24gYW5kIHZlbG9jaXR5LgorICoKKyAqIEluIHRoZSBjYXNlIG9mIHNpbXBs
ZSBkZWNlbGVyYXRpb24sIHRoZSBkaWZmZXJlbnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHkn
JyA9IC1teScKKyAqCisgKiBXaXRoIG0gdGhlIHJlc2lzdGVuY2UgZmFjdG9yLiBGb3IgdGhpcyB3
ZSB1c2UgdGhlIGZvbGxvd2luZyAyCisgKiBiYXNlIHNvbHV0aW9uczoKKyAqCisgKiAgIGYxKHgp
ID0gMQorICogICBmMih4KSA9IGV4cCgtbXgpCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygb3ZlcnNo
b290LCB0aGUgZGlmZmVyZW50aWFsIGVxdWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknIC0g
a3kKKyAqCisgKiBXaXRoIG0gdGhlIHJlc2lzdGFuY2UsIGFuZCBrIHRoZSBzcHJpbmcgc3RpZmZu
ZXNzIGNvbnN0YW50LiBXZSBsZXQKKyAqIGsgPSBtXjIgLyA0LCBzbyB0aGF0IHRoZSBzeXN0ZW0g
aXMgY3JpdGljYWxseSBkYW1wZWQgKGllLCByZXR1cm5zIHRvIGl0cworICogZXF1aWxpYnJpdW0g
cG9zaXRpb24gYXMgcXVpY2tseSBhcyBwb3NzaWJsZSwgd2l0aG91dCBvc2NpbGxhdGluZyksIGFu
ZCBvZmZzZXQKKyAqIHRoZSB3aG9sZSB0aGluZywgc3VjaCB0aGF0IHRoZSBlcXVpbGlicml1bSBw
b3NpdGlvbiBpcyBhdCAwLiBUaGlzIGdpdmVzIHRoZQorICogYmFzZSBzb2x1dGlvbnMKKyAqCisg
KiAgIGYxKHgpID0gZXhwKC1teCAvIDIpCisgKiAgIGYyKHgpID0gdCBleHAoLW14IC8gMikKKyAq
LworCitzdGF0aWMgY29uc3QgZG91YmxlIGRlY2VsRnJpY3Rpb24gPSA0Oworc3RhdGljIGNvbnN0
IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRpbWVy
SW50ZXJ2YWwgPSAuMDAxOworCitzdGF0aWMgaW5saW5lIGRvdWJsZSBjbGFtcChkb3VibGUgeCwg
ZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCit7CisgICAgcmV0dXJuICh4ID4gaGlnaCkgPyBoaWdo
IDogKCh4IDwgbG93KSA/IGxvdyA6IHgpOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nj
cm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShkb3VibGUgbG93
ZXIsIGRvdWJsZSB1cHBlciwgZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91YmxlIGluaXRpYWxW
ZWxvY2l0eSkKKyAgICA6IG1fbG93ZXIobG93ZXIpCisgICAgLCBtX3VwcGVyKHVwcGVyKQorICAg
ICwgbV9jb2VmMShpbml0aWFsVmVsb2NpdHkgLyBkZWNlbEZyaWN0aW9uICsgaW5pdGlhbFBvc2l0
aW9uKQorICAgICwgbV9jb2VmMigtaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbikKKyAg
ICAsIG1fcG9zaXRpb24oY2xhbXAoaW5pdGlhbFBvc2l0aW9uLCBsb3dlciwgdXBwZXIpKQorICAg
ICwgbV92ZWxvY2l0eShpbml0aWFsUG9zaXRpb24gPCBsb3dlciB8fCBpbml0aWFsUG9zaXRpb24g
PiB1cHBlciA/IDAgOiBpbml0aWFsVmVsb2NpdHkpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoZG91YmxlIHRpbWVEZWx0YSkK
K3sKKyAgICBtX2VsYXBzZWRUaW1lICs9IHRpbWVEZWx0YTsKKworICAgIGRvdWJsZSBleHBvbmVu
dGlhbFBhcnQgPSBleHAoLWRlY2VsRnJpY3Rpb24gKiBtX2VsYXBzZWRUaW1lKTsKKyAgICBtX3Bv
c2l0aW9uID0gbV9jb2VmMSArIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisgICAgbV92ZWxv
Y2l0eSA9IC1kZWNlbEZyaWN0aW9uICogbV9jb2VmMiAqIGV4cG9uZW50aWFsUGFydDsKKworICAg
IGlmIChtX3Bvc2l0aW9uIDwgbV9sb3dlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV9sb3dl
cjsKKyAgICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChtX3Bvc2l0aW9uID4g
bV91cHBlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV91cHBlcjsKKyAgICAgICAgbV92ZWxv
Y2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChmYWJzKG1fdmVsb2NpdHkpIDwgMSkgeworICAgICAg
ICBtX3Bvc2l0aW9uID0gcm91bmQobV9wb3NpdGlvbik7CisgICAgICAgIG1fdmVsb2NpdHkgPSAw
OworICAgIH0KKworICAgIHJldHVybiBtX3ZlbG9jaXR5OworfQorCitTY3JvbGxBbmltYXRpb25L
aW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRpb25D
aGFuZ2VkRnVuY3Rpb24pCisgICAgOiBTY3JvbGxBbmltYXRpb24oc2Nyb2xsYWJsZUFyZWEpCisg
ICAgLCBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKFdURk1vdmUobm90aWZ5UG9zaXRp
b25DaGFuZ2VkRnVuY3Rpb24pKQorICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9s
bEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQpCit7Cit9CisKK1Njcm9sbEFu
aW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKCkKK3sKK30KKworYm9vbCBT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCwgZmxvYXQpCit7CisgICAgLy8gVGhpcyBtZXRob2QgaXNuJ3Qg
bmVlZGVkIGFuZCBzaG91bGRuJ3QgZG8gYW55dGhpbmcgYXMgJ3Njcm9sbCcgaXNuJ3QKKyAgICAv
LyBob3cgdGhpcyBhbmltYXRpb24gbmVlZHMgdG8gYmUgdXNlZCwgdXNlICdzdGFydCcgaW5zdGVh
ZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpz
dG9wKCkKK3sKKyAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRpb25LaW5ldGljOjpzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pCit7CisgICAgc3RvcCgpOworICAgIG1fcG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0
aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAgIHN0b3AoKTsK
KyAgICBtX3Bvc2l0aW9uID0gaW5pdGlhbFBvc2l0aW9uOworCisgICAgaWYgKHZlbG9jaXR5Lmlz
T3JpZ2luKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faG9yaXpvbnRhbERhdGEgPSBQZXJB
eGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisgICAg
ICAgIG1fcG9zaXRpb24ueCgpLCB2ZWxvY2l0eS54KCkpOworICAgIG1fdmVydGljYWxEYXRhID0g
UGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCks
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpLAor
ICAgICAgICBtX3Bvc2l0aW9uLnkoKSwgdmVsb2NpdHkueSgpKTsKKworICAgIGFuaW1hdGlvblRp
bWVyRmlyZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25U
aW1lckZpcmVkKCkKK3sKKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKKyAgICBkb3VibGUgZGVsdGFUb05leHRGcmFtZSA9IGNlaWwoKGN1cnJl
bnRUaW1lIC0gbV9zdGFydFRpbWUpICogZnJhbWVSYXRlKSAvIGZyYW1lUmF0ZSAtIChjdXJyZW50
VGltZSAtIG1fc3RhcnRUaW1lKTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRpb24gPSBmYWxz
ZTsKKyAgICBpZiAobV9ob3Jpem9udGFsRGF0YS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJh
bWUpKQorICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9IHRydWU7CisgICAgaWYgKG1fdmVydGlj
YWxEYXRhLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05leHRGcmFtZSkpCisgICAgICAgIGNvbnRpbnVl
QW5pbWF0aW9uID0gdHJ1ZTsKKworICAgIGlmIChjb250aW51ZUFuaW1hdGlvbikKKyAgICAgICAg
bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qoc3RkOjptYXgobWluaW11bVRpbWVySW50ZXJ2
YWwsIGRlbHRhVG9OZXh0RnJhbWUpKTsKKworICAgIG1fcG9zaXRpb24gPSBGbG9hdFBvaW50KG1f
aG9yaXpvbnRhbERhdGEucG9zaXRpb24oKSwgbV92ZXJ0aWNhbERhdGEucG9zaXRpb24oKSk7CisK
KyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKEZsb2F0UG9pbnQobV9wb3NpdGlv
bikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWNiNGZkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAtMCwwICsxLDg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xs
QW5pbWF0aW9uS2luZXRpY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaAorCisj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgorI2lu
Y2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYWJs
ZUFyZWE7CisKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgZmluYWw6IHB1YmxpYyBTY3Jv
bGxBbmltYXRpb24geworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAgIHB1
YmxpYzoKKyAgICAgICAgUGVyQXhpc0RhdGEoKSA9IGRlbGV0ZTsKKyAgICAgICAgUGVyQXhpc0Rh
dGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRv
dWJsZSBpbml0aWFsVmVsb2NpdHkpOworCisgICAgICAgIGRvdWJsZSBwb3NpdGlvbigpIHsgcmV0
dXJuIG1fcG9zaXRpb247IH0KKworICAgICAgICBib29sIGFuaW1hdGVTY3JvbGwoZG91YmxlIHRp
bWVEZWx0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBkb3VibGUgbV9sb3dlciB7IDAgfTsK
KyAgICAgICAgZG91YmxlIG1fdXBwZXIgeyAwIH07CisKKyAgICAgICAgZG91YmxlIG1fY29lZjEg
eyAwIH07CisgICAgICAgIGRvdWJsZSBtX2NvZWYyIHsgMCB9OworCisgICAgICAgIGRvdWJsZSBt
X2VsYXBzZWRUaW1lIHsgMCB9OworICAgICAgICBkb3VibGUgbV9wb3NpdGlvbiB7IDAgfTsKKyAg
ICAgICAgZG91YmxlIG1fdmVsb2NpdHkgeyAwIH07CisgICAgfTsKKworcHVibGljOgorICAgIFNj
cm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
RmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbik7CisgICAgdmly
dHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xs
YmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0
aXBsaWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVw
ZGF0ZVZpc2libGVMZW5ndGhzKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRDdXJyZW50UG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgc3RhcnQoY29uc3Qg
RmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CisKKyAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5j
dGlvbjsKKworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBQZXJBeGlzRGF0YSBtX2hv
cml6b250YWxEYXRhIHsgUGVyQXhpc0RhdGEoMCwgMCwgMCwgMCkgfTsKKyAgICBQZXJBeGlzRGF0
YSBtX3ZlcnRpY2FsRGF0YSB7IFBlckF4aXNEYXRhKDAsIDAsIDAsIDApIH07CisKKyAgICBkb3Vi
bGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgK
aW5kZXggMzJhNGE3ODcuLjhhNGEwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmgKQEAgLTEyMSw2ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3ggKiBtX3ggKyBtX3kgKiBtX3k7CiAgICAgfQogCisgICAgYm9vbCBpc09yaWdp
bigpIGNvbnN0IHsgcmV0dXJuICFtX3ggJiYgIW1feTsgfQorCiAgICAgV0VCQ09SRV9FWFBPUlQg
RmxvYXRQb2ludCBjb25zdHJhaW5lZEJldHdlZW4oY29uc3QgRmxvYXRQb2ludCYgbWluLCBjb25z
dCBGbG9hdFBvaW50JiBtYXgpIGNvbnN0OwogCiAgICAgRmxvYXRQb2ludCBzaHJ1bmtUbyhjb25z
dCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggMTA0NWM0NC4uY2M0ZTM5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxF
dmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hl
ZWxFdmVudEd0ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTgzLDYg
Kzg0LDIyIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50
U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7CiAgICAgbV93aGVl
bFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgbV9waGFzZSA9IGV2ZW50LT5pc19zdG9wID8K
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCA6CisgICAgICAgIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgbV9waGFzZSA9IGV2ZW50LT5kaXJl
Y3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIW1fZGVsdGFYICYmICFtX2RlbHRhWSA/Cisg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNlbHNlCisgICAgbV9waGFzZSA9IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgor
CisgICAgbV9tb21lbnR1bVBoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOworCiAg
ICAgbV9wb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0
aWNfY2FzdDxpbnQ+KGV2ZW50LT55KSk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50
KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQt
Pnlfcm9vdCkpOwogICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsK
QEAgLTkzLDQgKzExMCwxMCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVu
dChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQgUGxh
dGZvcm1XaGVlbEV2ZW50Ojpzd2lwZVZlbG9jaXR5KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3dp
cGluZyB2ZWxvY2l0eSBpcyBzdG9yZWQgaW4gdGhlIGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVjbGFy
aW5nIGl0LgorICAgIHJldHVybiBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgPyBG
bG9hdFBvaW50KG1fd2hlZWxUaWNrc1gsIG1fd2hlZWxUaWNrc1kpIDogRmxvYXRQb2ludCgpOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5p
bWF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9y
R3RrLmNwcAppbmRleCAxM2U2MzU0Li43OWZmZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKQEAgLTQwLDYgKzQwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZG91YmxlIG92ZXJmbG93U2Nyb2xsYmFy
c0FuaW1hdGlvbkR1cmF0aW9uID0gMTsKIHN0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3Jv
bGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5ID0gMjsKK3N0YXRpYyBjb25zdCBkb3VibGUgc2Nyb2xs
Q2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kcyA9IDE1MDsKIAogc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSkKIHsKQEAgLTUwLDYgKzUxLDE0IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjpTY3Jv
bGxBbmltYXRvckd0ayhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3Jv
bGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lckZpcmVkKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91
bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4obV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBv
c2l0aW9uKSk7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgICAgIGlmIChtX3Nt
b290aEFuaW1hdGlvbikKKyAgICAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50
UG9zaXRpb24ocG9zaXRpb24pOworI2VuZGlmCisgICAgfSk7CisKICNpZiBFTkFCTEUoU01PT1RI
X1NDUk9MTElORykKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVk
KCkpCiAgICAgICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwpAQCAtNjMsNDgg
KzcyLDExMSBAQCBTY3JvbGxBbmltYXRvckd0azo6flNjcm9sbEFuaW1hdG9yR3RrKCkKICNpZiBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNt
b290aFNjcm9sbGluZ0FuaW1hdGlvbigpCiB7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQorICAgIGlm
IChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hbmltYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJl
YSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKLSAg
ICAgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAg
ICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKLSAgICAgICAgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyAgICBtX3Ntb290aEFuaW1hdGlvbiA9IHN0ZDo6
bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBtX2N1
cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICB1
cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50KHBvc2l0aW9uKSk7CiAgICAgfSk7CiB9CisjZW5kaWYK
IAogYm9vbCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxv
YXQgbXVsdGlwbGllcikKIHsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAo
IW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkgfHwgZ3JhbnVsYXJpdHkg
PT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAg
ICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKLSAgICByZXR1cm4gbV9hbmltYXRp
b24tPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwor
ICAgIHJldHVybiBtX3Ntb290aEFuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZWxzZQorICAgIHJldHVybiBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Cisj
ZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50IHBv
c2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQs
IHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkpKTsKLSAgICBpZiAo
bV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9z
aXRpb24pOworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKIAotICAgIEZsb2F0U2l6ZSBkZWx0
YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247Ci0gICAgbV9jdXJyZW50UG9zaXRpb24g
PSBwb3NpdGlvbjsKLSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOworI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAg
bV9zbW9vdGhBbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisjZW5kaWYK
KworICAgIHVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQocG9zaXRpb24pKTsKIH0KIAotdm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6d2lsbEVuZExpdmVSZXNpemUoKQorRmxvYXRQb2ludCBTY3JvbGxB
bmltYXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5KCkKIHsKLSAgICBpZiAobV9hbmltYXRpb24pCi0g
ICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworICAgIGlmIChtX3Nj
cm9sbEhpc3RvcnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworCisg
ICAgZG91YmxlIGZpcnN0ID0gbV9zY3JvbGxIaXN0b3J5WzBdLnRpbWVzdGFtcCgpOworICAgIGRv
dWJsZSBsYXN0ID0gbV9zY3JvbGxIaXN0b3J5LnJiZWdpbigpLT50aW1lc3RhbXAoKTsKKworICAg
IGlmIChsYXN0ID09IGZpcnN0KQorICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworCisgICAg
RmxvYXRQb2ludCBhY2N1bURlbHRhOworICAgIGZvciAoY29uc3QgYXV0byYgc2Nyb2xsRXZlbnQg
OiBtX3Njcm9sbEhpc3RvcnkpCisgICAgICAgIGFjY3VtRGVsdGEgKz0gRmxvYXRQb2ludChzY3Jv
bGxFdmVudC5kZWx0YVgoKSwgc2Nyb2xsRXZlbnQuZGVsdGFZKCkpOworCisgICAgbV9zY3JvbGxI
aXN0b3J5LmNsZWFyKCk7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChhY2N1bURlbHRhLngoKSAq
IC0xMDAwIC8gKGxhc3QgLSBmaXJzdCksIGFjY3VtRGVsdGEueSgpICogLTEwMDAgLyAobGFzdCAt
IGZpcnN0KSk7CiB9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRp
b24tPnN0b3AoKTsKKworICAgIG1fc2Nyb2xsSGlzdG9yeS5yZW1vdmVBbGxNYXRjaGluZyhbJl0g
KFBsYXRmb3JtV2hlZWxFdmVudCYgb3RoZXJFdmVudCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVy
biBldmVudC50aW1lc3RhbXAoKSAtIG90aGVyRXZlbnQudGltZXN0YW1wKCkgPiBzY3JvbGxDYXB0
dXJlVGhyZXNob2xkTWlsbGlzZWNvbmRzOworICAgIH0pOworCisgICAgaWYgKGV2ZW50LmlzRW5k
T2ZOb25Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3Rh
cnQobV9jdXJyZW50UG9zaXRpb24sIGNvbXB1dGVWZWxvY2l0eSgpKTsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1T
Y3JvbGwoKSkgeworICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKyAgICAgICAgbV9r
aW5ldGljQW5pbWF0aW9uLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgZXZlbnQuc3dpcGVWZWxv
Y2l0eSgpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3Njcm9sbEhp
c3RvcnkuYXBwZW5kKGV2ZW50KTsKKworICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxl
V2hlZWxFdmVudChldmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRM
aXZlUmVzaXplKCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5n
dGhzKCk7CisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9zbW9vdGhB
bmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOwogI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OnVwZGF0ZVBvc2l0aW9u
KEZsb2F0UG9pbnQmJiBwb3NpdGlvbikKK3sKKyAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlv
biAtIG1fY3VycmVudFBvc2l0aW9uOworICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92ZShw
b3NpdGlvbik7CisgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKK30KIAogdm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Rocygp
OworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAgaWYgKG1fYW5pbWF0aW9uKQot
ICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9z
bW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxl
TGVuZ3RocygpOwogI2VuZGlmCiAgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTcsOSArMTg5LDExIEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgIGlmIChtX2Fu
aW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7Cisg
ICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBk
YXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAppbmRleCA3MGU1YjczLi4xNTMyYTAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaApAQCAt
MzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JvbGxBbmltYXRvckd0a19oCiAjZGVmaW5lIFNjcm9s
bEFuaW1hdG9yR3RrX2gKIAorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKICNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKQEAgLTQ0LDEx
ICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JHdGsoKTsKIAog
cHJpdmF0ZToKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBib29sIHNjcm9sbChT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0
IG11bHRpcGxpZXIpIG92ZXJyaWRlOwogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHdpbGxFbmRMaXZl
UmVzaXplKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKKworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwpAQCAtNjMsMTYgKzY0LDIyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0
U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwogICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0
ZVRvSGlkZGVuKGJvb2wpIG92ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVQb3NpdGlvbihGbG9h
dFBvaW50JiYpOworCiAgICAgdm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJl
ZCgpOwogICAgIHZvaWQgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCBoaWRlT3Zl
cmxheVNjcm9sbGJhcnMoKTsKICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0
eSgpOwogCisgICAgRmxvYXRQb2ludCBjb21wdXRlVmVsb2NpdHkoKTsKKwogI2lmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQogICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9u
KCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1hdGlvbjsK
ICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb25LaW5ldGljPiBtX2tp
bmV0aWNBbmltYXRpb247CisgICAgVmVjdG9yPFBsYXRmb3JtV2hlZWxFdmVudD4gbV9zY3JvbGxI
aXN0b3J5OwogICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51
bGxwdHIgfTsKICAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVs
bHB0ciB9OwogICAgIGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCAxNTMzMjIy
Li40NTAxZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hl
ZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50
LmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5h
dGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpOwogICAgIE5hdGl2
ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqKTsKKyAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2
ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVt
UGhhc2UpOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoY29u
c3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCosIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYgdG9XZWJDb250ZW50LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRvRGV2aWNl
U2NyZWVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAppbmRleCA0YmZhMGQ4Li45
N2ViZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApAQCAtMTc5LDcgKzE3OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQKICAgICB9OwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBl
bnVtIFBoYXNlIHsKICAgICAgICAgUGhhc2VOb25lICAgICAgICA9IDAsCiAgICAgICAgIFBoYXNl
QmVnYW4gICAgICAgPSAxIDw8IDAsCkBAIC0xOTYsNiArMTk2LDggQEAgcHVibGljOgogICAgIFdl
YldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVs
YXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tz
LCBHcmFudWxhcml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQ
aGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQz
Ml90IHNjcm9sbENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdo
ZWVsVGlja3MsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSwgTW9kaWZp
ZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CkBAIC0yMTAsNiAr
MjEyLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpIGNv
bnN0IHsgcmV0dXJuIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsgfQogICAgIHVpbnQzMl90
IHNjcm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3VudDsgfQogICAgIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkgY29uc3Qg
eyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7IH0KKyNlbGlmIFBMQVRGT1JN
KEdUSykKKyAgICBQaGFzZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNl
PihtX3BoYXNlKTsgfQorICAgIFBoYXNlIG1vbWVudHVtUGhhc2UoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxQaGFzZT4obV9tb21lbnR1bVBoYXNlKTsgfQogI2VuZGlmCiAKICAgICB2b2lk
IGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwpAQCAtMjMwLDYgKzIzNSw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAgICAgdWlu
dDMyX3QgbV9zY3JvbGxDb3VudDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV91bmFjY2VsZXJh
dGVkU2Nyb2xsaW5nRGVsdGE7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgdWludDMyX3QgbV9w
aGFzZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsgLy8gUGhhc2UKKyAgICB1aW50MzJfdCBtX21vbWVu
dHVtUGhhc2UgeyBQaGFzZTo6UGhhc2VOb25lIH07IC8vIFBoYXNlCiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKaW5kZXggZWViNzQ0
MS4uZGY2MmJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29u
dmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lv
bi5jcHAKQEAgLTEyMyw2ICsxMjMsMzMgQEAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IHBs
YXRmb3JtKGNvbnN0IFdlYk1vdXNlRXZlbnQmIHdlYkV2ZW50KQogICAgIHJldHVybiBXZWJLaXQy
UGxhdGZvcm1Nb3VzZUV2ZW50KHdlYkV2ZW50KTsKIH0KIAorI2lmIFBMQVRGT1JNKEdUSykKK2lu
bGluZSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgb3BlcmF0b3J8PShXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgc2VsZiwgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2Ugb3RoZXIpCit7CisgICAgcmV0dXJuIHNlbGYgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4oc2VsZiB8IG90aGVyKTsKK30KKworc3RhdGljIFdl
YkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHRvUGxhdGZvcm1XaGVlbGV2ZW50UGhhc2Uo
V2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UpCit7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2UgcmVzdWx0ID0gV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OlBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKKworICAgIGlmIChwaGFzZSAmIFdlYldoZWVsRXZl
bnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKQorICAgICAgICByZXN1bHQgfD0gV2ViQ29yZTo6UGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2U6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW47CisgICAgaWYg
KHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlU3RhdGlvbmFyeSkKKyAgICAgICAg
cmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZVN0YXRpb25hcnk7CisgICAgaWYgKHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhh
c2U6OlBoYXNlQ2hhbmdlZCkKKyAgICAgICAgcmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisgICAgaWYgKHBo
YXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQpCisgICAgICAgIHJlc3VsdCB8
PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2VFbmRlZDsKKyAgICBpZiAocGhhc2UgJiBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDYW5j
ZWxsZWQpCisgICAgICAgIHJlc3VsdCB8PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQ7CisgICAgaWYgKHBoYXNlICYgV2Vi
V2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTWF5QmVnaW4pCisgICAgICAgIHJlc3VsdCB8PSBXZWJD
b3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlC
ZWdpbjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwogY2xhc3MgV2ViS2l0MlBs
YXRmb3JtV2hlZWxFdmVudCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQgewog
cHVibGljOgogICAgIFdlYktpdDJQbGF0Zm9ybVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVu
dCYgd2ViRXZlbnQpCkBAIC0xNTgsNiArMTg1LDkgQEAgcHVibGljOgogICAgICAgICBtX3Njcm9s
bENvdW50ID0gd2ViRXZlbnQuc2Nyb2xsQ291bnQoKTsKICAgICAgICAgbV91bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGFYID0gd2ViRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCku
d2lkdGgoKTsKICAgICAgICAgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZID0gd2ViRXZl
bnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkuaGVpZ2h0KCk7CisjZWxpZiBQTEFURk9S
TShHVEspCisgICAgICAgIG1fcGhhc2UgPSB0b1BsYXRmb3JtV2hlZWxldmVudFBoYXNlKHdlYkV2
ZW50LnBoYXNlKCkpOworICAgICAgICBtX21vbWVudHVtUGhhc2UgPSB0b1BsYXRmb3JtV2hlZWxl
dmVudFBoYXNlKHdlYkV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CiAjZW5kaWYKICAgICB9CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCmluZGV4IGQyNTBhMTQuLmYzMTJm
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKQEAgLTY3LDYgKzY3
LDIwIEBAIFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQ
b2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50CiB7CiAgICAgQVNTRVJUKGlzV2hlZWxFdmVu
dFR5cGUodHlwZSkpOwogfQorI2VsaWYgUExBVEZPUk0oR1RLKQorV2ViV2hlZWxFdmVudDo6V2Vi
V2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9h
dFNpemUmIHdoZWVsVGlja3MsIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgTW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFt
cCkKKyAgICA6IFdlYkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQorICAgICwgbV9w
b3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24p
CisgICAgLCBtX2RlbHRhKGRlbHRhKQorICAgICwgbV93aGVlbFRpY2tzKHdoZWVsVGlja3MpCisg
ICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICwgbV9kaXJlY3Rpb25JbnZlcnRl
ZEZyb21EZXZpY2UoZmFsc2UpCisgICAgLCBtX3BoYXNlKHBoYXNlKQorICAgICwgbV9tb21lbnR1
bVBoYXNlKG1vbWVudHVtUGhhc2UpCit7CisgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlw
ZSkpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6QXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApAQCAtODUsNiArOTksOSBAQCB2b2lkIFdlYldoZWVs
RXZlbnQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBl
bmNvZGVyIDw8IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAgICBlbmNvZGVyIDw8IG1f
c2Nyb2xsQ291bnQ7CiAgICAgZW5jb2RlciA8PCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0
YTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBlbmNvZGVyIDw8IG1fcGhhc2U7CisgICAgZW5j
b2RlciA8PCBtX21vbWVudHVtUGhhc2U7CiAjZW5kaWYKIH0KIApAQCAtMTE1LDYgKzEzMiwxMSBA
QCBib29sIFdlYldoZWVsRXZlbnQ6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgV2ViV2hlZWxFdmVudCYgdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUodC5tX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHQubV9waGFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHQubV9tb21lbnR1bVBoYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9O
YXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcAppbmRleCBiMzY3NjEyLi4xNWYwMDkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5j
cHAKQEAgLTM3LDYgKzM3LDEyIEBAIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVs
RXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogfQogCitOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRp
dmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhh
c2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCisgICAgOiBXZWJXaGVlbEV2
ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudCwgcGhhc2UsIG1v
bWVudHVtUGhhc2UpKQorICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudCkp
Cit7Cit9CisKIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3Qg
TmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpKSkKICAgICAs
IG1fbmF0aXZlRXZlbnQoZ2RrX2V2ZW50X2NvcHkoZXZlbnQubmF0aXZlRXZlbnQoKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKaW5kZXggMmQ2NjM5
My4uNDIzYzQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVu
dEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0
b3J5LmNwcApAQCAtMTQzLDYgKzE0MywyNyBAQCBXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9y
eTo6Y3JlYXRlV2ViTW91c2VFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGludCBjdQogCiBX
ZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBH
ZGtFdmVudCogZXZlbnQpCiB7CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBn
ZGtfZXZlbnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQpID8KKyAgICAgICAgV2ViV2hlZWxF
dmVudDo6UGhhc2U6OlBoYXNlRW5kZWQgOgorICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6
UGhhc2VDaGFuZ2VkOworI2Vsc2UKKyAgICBkb3VibGUgZGVsdGFYLCBkZWx0YVk7CisgICAgZ2Rr
X2V2ZW50X2dldF9zY3JvbGxfZGVsdGFzKGV2ZW50LCAmZGVsdGFYLCAmZGVsdGFZKTsKKyAgICBX
ZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdE
S19TQ1JPTExfU01PT1RIICYmICFkZWx0YVggJiYgIWRlbHRhWSA/CisgICAgICAgIFdlYldoZWVs
RXZlbnQ6OlBoYXNlOjpQaGFzZUVuZGVkIDoKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6
OlBoYXNlQ2hhbmdlZDsKKyNlbmRpZgorI2Vsc2UKKyAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBw
aGFzZSA9IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZW5kaWYgLy8gR1RL
X0FQSV9WRVJTSU9OXzIKKworICAgIHJldHVybiBjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBw
aGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSk7Cit9CisKK1dlYldoZWVsRXZl
bnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBl
dmVudCwgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1v
bWVudHVtUGhhc2UpCit7CiAgICAgZG91YmxlIHgsIHksIHhSb290LCB5Um9vdDsKICAgICBnZGtf
ZXZlbnRfZ2V0X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKICAgICBnZGtfZXZlbnRfZ2V0X3Jvb3Rf
Y29vcmRzKGV2ZW50LCAmeFJvb3QsICZ5Um9vdCk7CkBAIC0xNzksMTMgKzIwMCwxNSBAQCBXZWJX
aGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtF
dmVudCogZXZlbnQpCiAgICAgRmxvYXRTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lkdGgoKSAqIHN0
ZXAsIHdoZWVsVGlja3MuaGVpZ2h0KCkgKiBzdGVwKTsKIAogICAgIHJldHVybiBXZWJXaGVlbEV2
ZW50KFdlYkV2ZW50OjpXaGVlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4
LCB5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHdoZWVsVGlja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Ny
b2xsQnlQaXhlbFdoZWVsRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJz
Rm9yRXZlbnQoZXZlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRf
dGltZShldmVudCkpOworICAgICAgICBJbnRQb2ludCh4LCB5KSwKKyAgICAgICAgSW50UG9pbnQo
eFJvb3QsIHlSb290KSwKKyAgICAgICAgZGVsdGEsCisgICAgICAgIHdoZWVsVGlja3MsCisgICAg
ICAgIHBoYXNlLAorICAgICAgICBtb21lbnR1bVBoYXNlLAorICAgICAgICBXZWJXaGVlbEV2ZW50
OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKKyAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZl
bnQpLAorICAgICAgICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKTsKIH0KIAogV2ViS2V5Ym9h
cmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgR2Rr
RXZlbnQqIGV2ZW50LCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0
aW9uUmVzdWx0cywgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCmluZGV4IDI4YjY5NTMuLjhmZTdjZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMzgsNiArMzgs
NyBAQCBjbGFzcyBXZWJFdmVudEZhY3RvcnkgewogcHVibGljOgogICAgIHN0YXRpYyBXZWJNb3Vz
ZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBpbnQpOwogICAgIHN0
YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqKTsK
KyAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2
ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVt
UGhhc2UpOwogICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZl
bnQoY29uc3QgR2RrRXZlbnQqLCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmLCBW
ZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAg
IHN0YXRpYyBXZWJUb3VjaEV2ZW50IGNyZWF0ZVdlYlRvdWNoRXZlbnQoY29uc3QgR2RrRXZlbnQq
LCBWZWN0b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMDk3Y2ZjNS4uODQ1MmE5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE4MTYsNyArMTgxNiw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZl
bnQmIGV2ZW50KQogCiAgICAgaWYgKCFtX2N1cnJlbnRseVByb2Nlc3NlZFdoZWVsRXZlbnRzLmlz
RW1wdHkoKSkgewogICAgICAgICBtX3doZWVsRXZlbnRRdWV1ZS5hcHBlbmQoZXZlbnQpOwotICAg
ICAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6ZSgpIDwgd2hlZWxFdmVudFF1ZXVlU2l6ZVRo
cmVzaG9sZCkKKyAgICAgICAgaWYgKG1fd2hlZWxFdmVudFF1ZXVlLnNpemUoKSA8IHdoZWVsRXZl
bnRRdWV1ZVNpemVUaHJlc2hvbGQgJiYgY2FuU2tpcFdoZWVsRXZlbnQoZXZlbnQpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAvLyBUaGUgcXVldWUgaGFzIHRvbyBtYW55IHdoZWVsIGV2
ZW50cywgc28gcHVzaCBhIG5ldyBldmVudC4KICAgICB9CkBAIC0xODU3LDYgKzE4NTcsMTMgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2
ZW50KQogICAgIG1fcHJvY2Vzcy0+aXNSZXNwb25zaXZlKG51bGxwdHIpOwogfQogCisjaWYgIVBM
QVRGT1JNKEdUSykKK2Jvb2wgV2ViUGFnZVByb3h5OjpjYW5Ta2lwV2hlZWxFdmVudChjb25zdCBX
ZWJXaGVlbEV2ZW50JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB2b2lkIFdl
YlBhZ2VQcm94eTo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAppbmRleCA2NDM2MjQyLi4zODc1M2Y0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xNDYyLDYgKzE0NjIsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBwcm9jZXNzTmV4dFF1ZXVlZFdoZWVsRXZlbnQoKTsKICAgICB2b2lkIHNlbmRX
aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Ta2lw
V2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogICAgIFdlYkNvcmU6OlRyYWNraW5nVHlwZSB0b3VjaEV2ZW50VHJhY2tpbmdUeXBlKGNv
bnN0IFdlYlRvdWNoRXZlbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggN2UxNTc3Yy4uNjkxMzAyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5j
cHAKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIEdlc3R1cmVDb250cm9s
bGVyOjpHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgOiBtX2RyYWdH
ZXN0dXJlKHBhZ2UpCisgICAgLCBtX3N3aXBlR2VzdHVyZShwYWdlKQogICAgICwgbV96b29tR2Vz
dHVyZShwYWdlKQogewogfQpAQCAtNDksMTMgKzUwLDE0IEBAIGJvb2wgR2VzdHVyZUNvbnRyb2xs
ZXI6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKICAgICBib29sIHdhc1By
b2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7CiAgICAgbV9kcmFnR2Vz
dHVyZS5oYW5kbGVFdmVudChldmVudCk7CisgICAgbV9zd2lwZUdlc3R1cmUuaGFuZGxlRXZlbnQo
ZXZlbnQpOwogICAgIG1fem9vbUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIHJldHVy
biBldmVudC0+dHlwZSA9PSBHREtfVE9VQ0hfRU5EID8gd2FzUHJvY2Vzc2luZ0dlc3R1cmVzIDog
aXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKIH0KIAogYm9vbCBHZXN0dXJlQ29udHJvbGxlcjo6aXNQ
cm9jZXNzaW5nR2VzdHVyZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlz
QWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0FjdGl2ZSgpOworICAgIHJldHVybiBtX2RyYWdH
ZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV9zd2lwZUdlc3R1cmUuaXNBY3RpdmUoKSB8fCBtX3pvb21H
ZXN0dXJlLmlzQWN0aXZlKCk7CiB9CiAKIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpHZXN0
dXJlKEd0a0dlc3R1cmUqIGdlc3R1cmUsIFdlYlBhZ2VQcm94eSYgcGFnZSkKQEAgLTc1LDYgKzc3
LDI1IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KGNvbnN0
IEdka0V2ZW50KiBldmVudCkKICAgICBndGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQo
R1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQpOwogfQogCit2b2lk
IEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKGNvbnN0IEdka0V2ZW50
KiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2
ZW50PiBzY3JvbGxFdmVudChnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpKTsKKyAgICBzY3JvbGxF
dmVudC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsKKyAgICBzY3JvbGxFdmVudC0+
c2Nyb2xsLnggPSBtX3N0YXJ0LngoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSBtX3N0
YXJ0LnkoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnhfcm9vdCA9IGV2ZW50LT50b3VjaC54
X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55X3Jvb3QgPSBldmVudC0+dG91Y2gueV9y
b290OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9P
VEg7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gMDsKKyAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLmRlbHRhX3kgPSAwOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBl
dmVudC0+dG91Y2guc3RhdGU7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAg
c2Nyb2xsRXZlbnQtPnNjcm9sbC5pc19zdG9wID0gRkFMU0U7CisjZW5kaWYKKyAgICBtX3BhZ2Uu
aGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBX
ZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbiwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBo
YXNlTm9uZSkpOworfQorCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFu
ZGxlRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSkKIHsKICAg
ICBBU1NFUlQobV9pbkRyYWcpOwpAQCAtODgsNyArMTA5LDEwIEBAIHZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91
YmxlIHgsCiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gKG1fb2Zmc2V0LngoKSAt
IHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOwogICAgIHNjcm9sbEV2ZW50LT5z
Y3JvbGwuZGVsdGFfeSA9IChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnRvdWNo
LnN0YXRlOwotICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQo
c2Nyb2xsRXZlbnQuZ2V0KCkpKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBGQUxTRTsKKyNlbmRpZgorICAgIG1fcGFn
ZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCks
IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQsIFdlYldoZWVsRXZlbnQ6OlBoYXNl
OjpQaGFzZU5vbmUpKTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6
OmhhbmRsZVRhcChjb25zdCBHZGtFdmVudCogZXZlbnQpCkBAIC0xMjgsNiArMTUyLDcgQEAgdm9p
ZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKERyYWdHZXN0dXJlKiBkcmFn
R2VzdHVyZSwgZG91YmxlIHgsIGQKICAgICB1bnNpZ25lZCBkZWxheTsKICAgICBnX29iamVjdF9n
ZXQoZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUi
LCAmZGVsYXksIG51bGxwdHIpOwogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQu
c3RhcnRPbmVTaG90KGRlbGF5IC8gMTAwMC4wKTsKKyAgICBkcmFnR2VzdHVyZS0+c3RhcnREcmFn
KGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7CiB9CiAKIHZv
aWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRy
YWdHZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCkBAIC0x
NzIsNiArMTk3LDM5IEBAIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1
cmUoV2ViUGFnZVByb3h5JiBwYWdlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dl
c3R1cmUuZ2V0KCksICJlbmQiLCBHX0NBTExCQUNLKGVuZCksIHRoaXMpOwogfQogCit2b2lkIEdl
c3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0TW9tZW50dW1TY3JvbGwoY29uc3Qg
R2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZKQorewor
ICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXcoR0RLX1ND
Uk9MTCkpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2ZW50LT50b3VjaC50aW1l
OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IGV2ZW50LT50b3VjaC54OworICAgIHNjcm9s
bEV2ZW50LT5zY3JvbGwueSA9IGV2ZW50LT50b3VjaC55OworICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xs
Lnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5k
aXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRl
bHRhX3ggPSB2ZWxvY2l0eVg7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gdmVs
b2NpdHlZOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+dG91Y2guc3Rh
dGU7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgc2Nyb2xsRXZlbnQtPnNj
cm9sbC5pc19zdG9wID0gVFJVRTsKKyNlbmRpZgorICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50
KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBo
YXNlOjpQaGFzZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKSk7Cit9CisK
K3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3dpcGUoU3dpcGVHZXN0dXJl
KiBzd2lwZUdlc3R1cmUsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dl
c3R1cmUqIGdlc3R1cmUpCit7CisgICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtf
Z2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdl
c3R1cmUpKTsKKyAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2Vx
dWVuY2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAgIHN3aXBlR2VzdHVyZS0+
c3RhcnRNb21lbnR1bVNjcm9sbChndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBz
ZXF1ZW5jZSksIHZlbG9jaXR5WCwgdmVsb2NpdHlZKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6
OlN3aXBlR2VzdHVyZTo6U3dpcGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IEdl
c3R1cmUoZ3RrX2dlc3R1cmVfc3dpcGVfbmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKK3sK
KyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RLX0dFU1RVUkVfU0lOR0xF
KG1fZ2VzdHVyZS5nZXQoKSksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X2dlc3R1cmUuZ2V0KCksICJzd2lwZSIsIEdfQ0FMTEJBQ0soc3dpcGUpLCB0aGlzKTsKK30KKwog
SW50UG9pbnQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpjZW50ZXIoKSBjb25zdAog
ewogICAgIGRvdWJsZSB4LCB5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9H
ZXN0dXJlQ29udHJvbGxlci5oCmluZGV4IDg2NzkyZGYuLmU5NjAzMWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKQEAgLTY3LDYgKzY3
LDggQEAgcHJpdmF0ZToKICAgICAgICAgRHJhZ0dlc3R1cmUoV2ViUGFnZVByb3h5Jik7CiAKICAg
ICBwcml2YXRlOgorICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIGRyYWcgc3RhcnRlZCwgYWxsb3dp
bmcgdG8gc3RvcCBraW5ldGljIGRlY2VsZXJhdGlvbi4KKyAgICAgICAgdm9pZCBzdGFydERyYWco
Y29uc3QgR2RrRXZlbnQqKTsKICAgICAgICAgdm9pZCBoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50
KiwgZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICAgICAgdm9pZCBoYW5kbGVUYXAoY29uc3QgR2Rr
RXZlbnQqKTsKICAgICAgICAgdm9pZCBsb25nUHJlc3NGaXJlZCgpOwpAQCAtODIsNiArODQsMTYg
QEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2luRHJhZzsKICAgICB9OwogCisgICAgY2xhc3Mg
U3dpcGVHZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3dpcGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBzdGFydE1vbWVudHVtU2Nyb2xsKGNvbnN0IEdka0V2ZW50KiwgZG91YmxlIHZlbG9jaXR5
WCwgZG91YmxlIHZlbG9jaXR5WSk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUoU3dpcGVH
ZXN0dXJlKiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSop
OworICAgIH07CisKICAgICBjbGFzcyBab29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFpvb21HZXN0dXJlKFdlYlBhZ2VQcm94eSYpOwpAQCAt
MTAxLDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIERyYWdHZXN0dXJlIG1fZHJh
Z0dlc3R1cmU7CisgICAgU3dpcGVHZXN0dXJlIG1fc3dpcGVHZXN0dXJlOwogICAgIFpvb21HZXN0
dXJlIG1fem9vbUdlc3R1cmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggMmRiYWUwNS4uNjBmNWQ4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtMTQ4
LDQgKzE0OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0Q2VudGVyRm9yWm9vbUdlc3R1cmUo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNlbnRlckluVmlldwogfQogI2VuZGlmCiAKK2Jvb2wg
V2ViUGFnZVByb3h5OjpjYW5Ta2lwV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVu
dCkKK3sKKyAgICByZXR1cm4gZXZlbnQucGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6
UGhhc2VFbmRlZAorICAgICAgICB8fCBldmVudC5tb21lbnR1bVBoYXNlKCkgPT0gV2ViV2hlZWxF
dmVudDo6UGhhc2U6OlBoYXNlQmVnYW47Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281354</attachid>
            <date>2016-06-15 06:25:19 -0700</date>
            <delta_ts>2016-06-23 23:58:49 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>46747</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NDMwM2Y2Li4xMzg3MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQg
QEAKKzIwMTYtMDYtMTUgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgc2Nyb2xsaW5nIGFuaW1hdGlvbiBhbGxv
d2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGluZzsgaXQgaXMgYmFzZWQgb24gR1RLKydz
CisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlwZS4KKworICAgICAgICBBZGQgdGhlIG5v
dGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5kIHN3aXBlIHZlbG9jaXR5IHRvIFBsYXRm
b3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc2Nyb2xs
aW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBhIHN3aXBlLCB0aGUgc2Nyb2xsIGFuaW1h
dG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAgdGhlIHN3aXBlIHZlbG9jaXR5IGZyb20g
dGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3IgdXNlIHRoZSBvbmUgZnJvbSB0aGUgc3dp
cGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAgICAgbW9tZW50dW0gc2Nyb2xsaW5nLgor
CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZv
cm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OnVz
ZUxhdGNoZWRFdmVudEVsZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlv
bktpbmV0aWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6YW5pbWF0
ZVNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpTY3Jv
bGxBbmltYXRpb25LaW5ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktp
bmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdGlvbktpbmV0aWM6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRpb25LaW5ldGljOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktp
bmV0aWM6OnNldEN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRpb25LaW5ldGljOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25L
aW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRpb25LaW5ldGljLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OmlzT3JpZ2luKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6c3dpcGVWZWxvY2l0eSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpoYW5kbGVXaGVlbEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6dXBkYXRlUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsu
aDoKKwogMjAxNi0wNi0xNSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW1dpbl0gVGhlIHRlc3QgYWNjZXNzaWJpbGl0eS9zZWxlY3RlZC10ZXh0LXJhbmdl
LWFyaWEtZWxlbWVudHMuaHRtbCBpcyBmYWlsaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA3NGU1MTk1Li4yY2YwOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNzcs
NiArNzcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvc291cC9T
dWJyZXNvdXJjZUxvYWRlclNvdXAuY3BwCiAKICAgICBwbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3Bw
CisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKIAogICAgIHBsYXRmb3Jt
L2F1ZGlvL2dsaWIvQXVkaW9CdXNHTGliLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDA3MTM1NWMuLmI2Zjg0YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC01Myw3ICs1Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCiAg
ICAgfTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFU
Rk9STShHVEspCiAgICAgZW51bSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSA6IHVpbnQ4X3Qgewog
ICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgICAgICAgID0gMCwKICAgICAgICAg
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbiAgICAgICA9IDEgPDwgMCwKQEAgLTE2Miw2ICsx
NjIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGlzRW5kT2ZNb21lbnR1
bVNjcm9sbCgpIGNvbnN0OwogICAgICAgICBib29sIGlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgp
IGNvbnN0OwogICAgICAgICBib29sIGlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSBj
b25zdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgYm9vbCBpc0VuZE9mTm9u
TW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1RyYW5zaXRpb25pbmdUb01v
bWVudHVtU2Nyb2xsKCkgY29uc3Q7CisgICAgICAgIEZsb2F0UG9pbnQgc3dpcGVWZWxvY2l0eSgp
IGNvbnN0OwogI2Vsc2UKICAgICAgICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMTg3LDYgKzE5Miw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgbV9zY3JvbGxDb3VudDsKICAgICAgICAgZmxv
YXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYOwogICAgICAgICBmbG9hdCBtX3VuYWNj
ZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2UgeyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5v
bmUgfTsKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9tb21lbnR1bVBoYXNlIHsg
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CiAjZW5kaWYKICAgICB9OwogCkBAIC0yMTIs
NyArMjIwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
cGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9
PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOwogICAgIH0KKyNlbmRpZgogCisjaWYgUExB
VEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkICYmIG1fbW9t
ZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNTNmODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApAQCAtMCwwICsx
LDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5o
IgorCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKworLyoKKyAqIFBlckF4aXNEYXRhIGlzIGEgcG9ydCBvZiBHdGtLaW5ldGljU2Nyb2xs
aW5nIGFzIG9mIEdUSysgMy4yMCwKKyAqIG1pbWlja2luZyBpdHMgQVBJIGFuZCBpdHMgYmVoYXZp
b3IuCisgKgorICogQWxsIG91ciBjdXJ2ZXMgYXJlIHNlY29uZCBkZWdyZWUgbGluZWFyIGRpZmZl
cmVudGlhbCBlcXVhdGlvbnMsIGFuZAorICogc28gdGhleSBjYW4gYWx3YXlzIGJlIHdyaXR0ZW4g
YXMgbGluZWFyIGNvbWJpbmF0aW9ucyBvZiAyIGJhc2UKKyAqIHNvbHV0aW9ucy4gY29lZjEgYW5k
IGNvZWYyIGFyZSB0aGUgY29lZmZpY2llbnRzIHRvIHRoZXNlIHR3byBiYXNlCisgKiBzb2x1dGlv
bnMsIGFuZCBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3NpdGlvbiBhbmQgdmVsb2Np
dHkuCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygc2ltcGxlIGRlY2VsZXJhdGlvbiwgdGhlIGRpZmZl
cmVudGlhbCBlcXVhdGlvbiBpcworICoKKyAqICAgeScnID0gLW15JworICoKKyAqIFdpdGggbSB0
aGUgcmVzaXN0ZW5jZSBmYWN0b3IuIEZvciB0aGlzIHdlIHVzZSB0aGUgZm9sbG93aW5nIDIKKyAq
IGJhc2Ugc29sdXRpb25zOgorICoKKyAqICAgZjEoeCkgPSAxCisgKiAgIGYyKHgpID0gZXhwKC1t
eCkKKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBvdmVyc2hvb3QsIHRoZSBkaWZmZXJlbnRpYWwgZXF1
YXRpb24gaXMKKyAqCisgKiAgIHknJyA9IC1teScgLSBreQorICoKKyAqIFdpdGggbSB0aGUgcmVz
aXN0YW5jZSwgYW5kIGsgdGhlIHNwcmluZyBzdGlmZm5lc3MgY29uc3RhbnQuIFdlIGxldAorICog
ayA9IG1eMiAvIDQsIHNvIHRoYXQgdGhlIHN5c3RlbSBpcyBjcml0aWNhbGx5IGRhbXBlZCAoaWUs
IHJldHVybnMgdG8gaXRzCisgKiBlcXVpbGlicml1bSBwb3NpdGlvbiBhcyBxdWlja2x5IGFzIHBv
c3NpYmxlLCB3aXRob3V0IG9zY2lsbGF0aW5nKSwgYW5kIG9mZnNldAorICogdGhlIHdob2xlIHRo
aW5nLCBzdWNoIHRoYXQgdGhlIGVxdWlsaWJyaXVtIHBvc2l0aW9uIGlzIGF0IDAuIFRoaXMgZ2l2
ZXMgdGhlCisgKiBiYXNlIHNvbHV0aW9ucworICoKKyAqICAgZjEoeCkgPSBleHAoLW14IC8gMikK
KyAqICAgZjIoeCkgPSB0IGV4cCgtbXggLyAyKQorICovCisKK3N0YXRpYyBjb25zdCBkb3VibGUg
ZGVjZWxGcmljdGlvbiA9IDQ7CitzdGF0aWMgY29uc3QgZG91YmxlIGZyYW1lUmF0ZSA9IDYwOwor
c3RhdGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCA9IC4wMDE7CisKK3N0YXRp
YyBpbmxpbmUgZG91YmxlIGNsYW1wKGRvdWJsZSB4LCBkb3VibGUgbG93LCBkb3VibGUgaGlnaCkK
K3sKKyAgICBBU1NFUlQobG93IDw9IGhpZ2gpOworCisgICAgcmV0dXJuICh4ID4gaGlnaCkgPyBo
aWdoIDogKCh4IDwgbG93KSA/IGxvdyA6IHgpOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShkb3VibGUg
bG93ZXIsIGRvdWJsZSB1cHBlciwgZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91YmxlIGluaXRp
YWxWZWxvY2l0eSkKKyAgICA6IG1fbG93ZXIobG93ZXIpCisgICAgLCBtX3VwcGVyKHVwcGVyKQor
ICAgICwgbV9jb2VmMShpbml0aWFsVmVsb2NpdHkgLyBkZWNlbEZyaWN0aW9uICsgaW5pdGlhbFBv
c2l0aW9uKQorICAgICwgbV9jb2VmMigtaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbikK
KyAgICAsIG1fcG9zaXRpb24oY2xhbXAoaW5pdGlhbFBvc2l0aW9uLCBsb3dlciwgdXBwZXIpKQor
ICAgICwgbV92ZWxvY2l0eShpbml0aWFsUG9zaXRpb24gPCBsb3dlciB8fCBpbml0aWFsUG9zaXRp
b24gPiB1cHBlciA/IDAgOiBpbml0aWFsVmVsb2NpdHkpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoZG91YmxlIHRpbWVEZWx0
YSkKK3sKKyAgICBtX2VsYXBzZWRUaW1lICs9IHRpbWVEZWx0YTsKKworICAgIGRvdWJsZSBleHBv
bmVudGlhbFBhcnQgPSBleHAoLWRlY2VsRnJpY3Rpb24gKiBtX2VsYXBzZWRUaW1lKTsKKyAgICBt
X3Bvc2l0aW9uID0gbV9jb2VmMSArIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisgICAgbV92
ZWxvY2l0eSA9IC1kZWNlbEZyaWN0aW9uICogbV9jb2VmMiAqIGV4cG9uZW50aWFsUGFydDsKKwor
ICAgIGlmIChtX3Bvc2l0aW9uIDwgbV9sb3dlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV9s
b3dlcjsKKyAgICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChtX3Bvc2l0aW9u
ID4gbV91cHBlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV91cHBlcjsKKyAgICAgICAgbV92
ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChmYWJzKG1fdmVsb2NpdHkpIDwgMSkgeworICAg
ICAgICBtX3Bvc2l0aW9uID0gcm91bmQobV9wb3NpdGlvbik7CisgICAgICAgIG1fdmVsb2NpdHkg
PSAwOworICAgIH0KKworICAgIHJldHVybiBtX3ZlbG9jaXR5OworfQorCitTY3JvbGxBbmltYXRp
b25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxh
YmxlQXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRp
b25DaGFuZ2VkRnVuY3Rpb24pCisgICAgOiBTY3JvbGxBbmltYXRpb24oc2Nyb2xsYWJsZUFyZWEp
CisgICAgLCBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKFdURk1vdmUobm90aWZ5UG9z
aXRpb25DaGFuZ2VkRnVuY3Rpb24pKQorICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJlNj
cm9sbEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQpCit7Cit9CisKK1Njcm9s
bEFuaW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKCkKK3sKK30KKworYm9v
bCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCwgZmxvYXQpCit7CisgICAgLy8gVGhpcyBtZXRob2QgaXNu
J3QgbmVlZGVkIGFuZCBzaG91bGRuJ3QgZG8gYW55dGhpbmcgYXMgJ3Njcm9sbCcgaXNuJ3QKKyAg
ICAvLyBob3cgdGhpcyBhbmltYXRpb24gbmVlZHMgdG8gYmUgdXNlZCwgdXNlICdzdGFydCcgaW5z
dGVhZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGlj
OjpzdG9wKCkKK3sKKyAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pCit7CisgICAgc3RvcCgpOworICAgIG1fcG9zaXRpb24gPSBwb3NpdGlvbjsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydChjb25zdCBGbG9hdFBvaW50JiBp
bml0aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAgIHN0b3Ao
KTsKKyAgICBtX3Bvc2l0aW9uID0gaW5pdGlhbFBvc2l0aW9uOworCisgICAgaWYgKHZlbG9jaXR5
LmlzT3JpZ2luKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faG9yaXpvbnRhbERhdGEgPSBQ
ZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwK
KyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisg
ICAgICAgIG1fcG9zaXRpb24ueCgpLCB2ZWxvY2l0eS54KCkpOworICAgIG1fdmVydGljYWxEYXRh
ID0gUGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55
KCksCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgp
LAorICAgICAgICBtX3Bvc2l0aW9uLnkoKSwgdmVsb2NpdHkueSgpKTsKKworICAgIGFuaW1hdGlv
blRpbWVyRmlyZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRp
b25UaW1lckZpcmVkKCkKK3sKKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBkb3VibGUgZGVsdGFUb05leHRGcmFtZSA9IGNlaWwoKGN1
cnJlbnRUaW1lIC0gbV9zdGFydFRpbWUpICogZnJhbWVSYXRlKSAvIGZyYW1lUmF0ZSAtIChjdXJy
ZW50VGltZSAtIG1fc3RhcnRUaW1lKTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRpb24gPSBm
YWxzZTsKKyAgICBpZiAobV9ob3Jpem9udGFsRGF0YS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0
RnJhbWUpKQorICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9IHRydWU7CisgICAgaWYgKG1fdmVy
dGljYWxEYXRhLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05leHRGcmFtZSkpCisgICAgICAgIGNvbnRp
bnVlQW5pbWF0aW9uID0gdHJ1ZTsKKworICAgIGlmIChjb250aW51ZUFuaW1hdGlvbikKKyAgICAg
ICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qoc3RkOjptYXgobWluaW11bVRpbWVySW50
ZXJ2YWwsIGRlbHRhVG9OZXh0RnJhbWUpKTsKKworICAgIG1fcG9zaXRpb24gPSBGbG9hdFBvaW50
KG1faG9yaXpvbnRhbERhdGEucG9zaXRpb24oKSwgbV92ZXJ0aWNhbERhdGEucG9zaXRpb24oKSk7
CisKKyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKEZsb2F0UG9pbnQobV9wb3Np
dGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMWNiNGZkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAtMCwwICsxLDg2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Ny
b2xsQW5pbWF0aW9uS2luZXRpY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaAor
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xs
YWJsZUFyZWE7CisKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgZmluYWw6IHB1YmxpYyBT
Y3JvbGxBbmltYXRpb24geworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAg
IHB1YmxpYzoKKyAgICAgICAgUGVyQXhpc0RhdGEoKSA9IGRlbGV0ZTsKKyAgICAgICAgUGVyQXhp
c0RhdGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRpb24s
IGRvdWJsZSBpbml0aWFsVmVsb2NpdHkpOworCisgICAgICAgIGRvdWJsZSBwb3NpdGlvbigpIHsg
cmV0dXJuIG1fcG9zaXRpb247IH0KKworICAgICAgICBib29sIGFuaW1hdGVTY3JvbGwoZG91Ymxl
IHRpbWVEZWx0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBkb3VibGUgbV9sb3dlciB7IDAg
fTsKKyAgICAgICAgZG91YmxlIG1fdXBwZXIgeyAwIH07CisKKyAgICAgICAgZG91YmxlIG1fY29l
ZjEgeyAwIH07CisgICAgICAgIGRvdWJsZSBtX2NvZWYyIHsgMCB9OworCisgICAgICAgIGRvdWJs
ZSBtX2VsYXBzZWRUaW1lIHsgMCB9OworICAgICAgICBkb3VibGUgbV9wb3NpdGlvbiB7IDAgfTsK
KyAgICAgICAgZG91YmxlIG1fdmVsb2NpdHkgeyAwIH07CisgICAgfTsKKworcHVibGljOgorICAg
IFNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbik7CisgICAg
dmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOworCisgICAgYm9vbCBzY3JvbGwoU2Ny
b2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBt
dWx0aXBsaWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lk
IHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRDdXJyZW50
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgc3RhcnQoY29u
c3QgRmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0
eSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CisKKyAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRG
dW5jdGlvbjsKKworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBQZXJBeGlzRGF0YSBt
X2hvcml6b250YWxEYXRhIHsgUGVyQXhpc0RhdGEoMCwgMCwgMCwgMCkgfTsKKyAgICBQZXJBeGlz
RGF0YSBtX3ZlcnRpY2FsRGF0YSB7IFBlckF4aXNEYXRhKDAsIDAsIDAsIDApIH07CisKKyAgICBk
b3VibGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0aW9u
S2luZXRpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
LmgKaW5kZXggMzJhNGE3ODcuLjVlNjljY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFBvaW50LmgKQEAgLTEyMSw2ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX3ggKiBtX3ggKyBtX3kgKiBtX3k7CiAgICAgfQogCisgICAgYm9vbCBpc09y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1feCA9PSAwLjAgJiYgbV95ID09IDAuMDsgfQorCiAgICAg
V0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludCBjb25zdHJhaW5lZEJldHdlZW4oY29uc3QgRmxvYXRQ
b2ludCYgbWluLCBjb25zdCBGbG9hdFBvaW50JiBtYXgpIGNvbnN0OwogCiAgICAgRmxvYXRQb2lu
dCBzaHJ1bmtUbyhjb25zdCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXgg
MTA0NWM0NC4uZjFlMWNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUgPGdkay9n
ZGsuaD4KQEAgLTgzLDYgKzg0LDIyIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVl
bEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0
YVg7CiAgICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWZuZGVmIEdUS19BUElfVkVS
U0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgbV9waGFzZSA9IGV2
ZW50LT5pc19zdG9wID8KKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCA6Cisg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgbV9waGFz
ZSA9IGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgbV9kZWx0YVggPT0g
MC4wICYmIG1fZGVsdGFZID0gMC4wID8KKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VF
bmRlZCA6CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRpZgor
I2Vsc2UKKyAgICBtX3BoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOworI2Vu
ZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisKKyAgICBtX21vbWVudHVtUGhhc2UgPSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZU5vbmU7CisKICAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoc3RhdGlj
X2Nhc3Q8aW50PihldmVudC0+eCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnkpKTsKICAgICBt
X2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eF9yb290
KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eV9yb290KSk7CiAgICAgbV9ncmFudWxhcml0eSA9
IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwpAQCAtOTMsNCArMTEwLDEwIEBAIFBsYXRmb3JtV2hl
ZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAgICBt
X2RlbHRhWSAqPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3Rl
cCgpKTsKIH0KIAorRmxvYXRQb2ludCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OnN3aXBlVmVsb2NpdHko
KSBjb25zdAoreworICAgIC8vIFRoZSBzd2lwaW5nIHZlbG9jaXR5IGlzIHN0b3JlZCBpbiB0aGUg
ZGVsdGFzIG9mIHRoZSBldmVudCBkZWNsYXJpbmcgaXQuCisgICAgcmV0dXJuIGlzVHJhbnNpdGlv
bmluZ1RvTW9tZW50dW1TY3JvbGwoKSA/IEZsb2F0UG9pbnQobV93aGVlbFRpY2tzWCwgbV93aGVl
bFRpY2tzWSkgOiBGbG9hdFBvaW50KCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCmluZGV4IDEzZTYzNTQuLjc5ZmZlMDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmNwcApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25z
dCBkb3VibGUgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRpb24gPSAxOwogc3RhdGlj
IGNvbnN0IGRvdWJsZSBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkgPSAyOwor
c3RhdGljIGNvbnN0IGRvdWJsZSBzY3JvbGxDYXB0dXJlVGhyZXNob2xkTWlsbGlzZWNvbmRzID0g
MTUwOwogCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpj
cmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewpAQCAtNTAsNiArNTEsMTQg
QEAgU2Nyb2xsQW5pbWF0b3JHdGs6OlNjcm9sbEFuaW1hdG9yR3RrKFNjcm9sbGFibGVBcmVhJiBz
Y3JvbGxhYmxlQXJlYSkKICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQogICAg
ICwgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRv
ckd0azo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CisgICAgbV9raW5l
dGljQW5pbWF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5ldGljPiht
X3Njcm9sbGFibGVBcmVhLCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAg
IHVwZGF0ZVBvc2l0aW9uKFdURk1vdmUocG9zaXRpb24pKTsKKyNpZiBFTkFCTEUoU01PT1RIX1ND
Uk9MTElORykKKyAgICAgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICAgICAgbV9z
bW9vdGhBbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisjZW5kaWYKKyAg
ICB9KTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIGlmIChzY3JvbGxhYmxl
QXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKICAgICAgICAgZW5zdXJlU21vb3RoU2Nyb2xs
aW5nQW5pbWF0aW9uKCk7CkBAIC02Myw0OCArNzIsMTExIEBAIFNjcm9sbEFuaW1hdG9yR3RrOjp+
U2Nyb2xsQW5pbWF0b3JHdGsoKQogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogdm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCkKIHsKLSAg
ICBpZiAobV9hbmltYXRpb24pCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0
aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBtX2N1cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikgewotICAgICAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlv
biAtIG1fY3VycmVudFBvc2l0aW9uOwotICAgICAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdURk1v
dmUocG9zaXRpb24pOwotICAgICAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOworICAg
IG1fc21vb3RoQW5pbWF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25TbW9v
dGg+KG1fc2Nyb2xsYWJsZUFyZWEsIG1fY3VycmVudFBvc2l0aW9uLCBbdGhpc10oRmxvYXRQb2lu
dCYmIHBvc2l0aW9uKSB7CisgICAgICAgIHVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQocG9zaXRp
b24pKTsKICAgICB9KTsKIH0KKyNlbmRpZgogCiBib29sIFNjcm9sbEFuaW1hdG9yR3RrOjpzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQogeworI2lmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQogICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRv
ckVuYWJsZWQoKSB8fCBncmFudWxhcml0eSA9PSBTY3JvbGxCeVByZWNpc2VQaXhlbCkKICAgICAg
ICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5
LCBzdGVwLCBtdWx0aXBsaWVyKTsKIAogICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlv
bigpOwotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1fc21vb3RoQW5pbWF0aW9uLT5z
Y3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKyNlbHNl
CisgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFy
aXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9y
R3RrOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zm
c2V0KQogewogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
UG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCwgdG9GbG9hdFNpemUobV9zY3JvbGxhYmxlQXJlYS5z
Y3JvbGxPcmlnaW4oKSkpOwotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRp
b24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbV9raW5ldGljQW5pbWF0aW9u
LT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVh
cigpOwogCi0gICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlv
bjsKLSAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIG5vdGlmeVBvc2l0aW9u
Q2hhbmdlZChkZWx0YSk7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgaWYgKG1f
c21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBv
c2l0aW9uKHBvc2l0aW9uKTsKKyNlbmRpZgorCisgICAgdXBkYXRlUG9zaXRpb24oRmxvYXRQb2lu
dChwb3NpdGlvbikpOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJl
c2l6ZSgpCitGbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yR3RrOjpjb21wdXRlVmVsb2NpdHkoKQog
ewotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2li
bGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc2Nyb2xsSGlzdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBGbG9hdFBvaW50KCk7CisKKyAgICBkb3VibGUgZmlyc3QgPSBtX3Njcm9sbEhpc3Rv
cnlbMF0udGltZXN0YW1wKCk7CisgICAgZG91YmxlIGxhc3QgPSBtX3Njcm9sbEhpc3RvcnkucmJl
Z2luKCktPnRpbWVzdGFtcCgpOworCisgICAgaWYgKGxhc3QgPT0gZmlyc3QpCisgICAgICAgIHJl
dHVybiBGbG9hdFBvaW50KCk7CisKKyAgICBGbG9hdFBvaW50IGFjY3VtRGVsdGE7CisgICAgZm9y
IChjb25zdCBhdXRvJiBzY3JvbGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9yeSkKKyAgICAgICAgYWNj
dW1EZWx0YSArPSBGbG9hdFBvaW50KHNjcm9sbEV2ZW50LmRlbHRhWCgpLCBzY3JvbGxFdmVudC5k
ZWx0YVkoKSk7CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKworICAgIHJldHVybiBG
bG9hdFBvaW50KGFjY3VtRGVsdGEueCgpICogLTEwMDAgLyAobGFzdCAtIGZpcnN0KSwgYWNjdW1E
ZWx0YS55KCkgKiAtMTAwMCAvIChsYXN0IC0gZmlyc3QpKTsKIH0KKworYm9vbCBTY3JvbGxBbmlt
YXRvckd0azo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
KQoreworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOworCisgICAgbV9zY3JvbGxIaXN0
b3J5LnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoUGxhdGZvcm1XaGVlbEV2ZW50JiBvdGhlckV2ZW50
KSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIGV2ZW50LnRpbWVzdGFtcCgpIC0gb3RoZXJFdmVu
dC50aW1lc3RhbXAoKSA+IHNjcm9sbENhcHR1cmVUaHJlc2hvbGRNaWxsaXNlY29uZHM7CisgICAg
fSk7CisKKyAgICBpZiAoZXZlbnQuaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkpIHsKKyAgICAg
ICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgY29tcHV0ZVZl
bG9jaXR5KCkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoZXZlbnQu
aXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIG1fc2Nyb2xsSGlz
dG9yeS5jbGVhcigpOworICAgICAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0YXJ0KG1fY3VycmVu
dFBvc2l0aW9uLCBldmVudC5zd2lwZVZlbG9jaXR5KCkpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIG1fc2Nyb2xsSGlzdG9yeS5hcHBlbmQoZXZlbnQpOworCisgICAgcmV0
dXJuIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6d2lsbEVuZExpdmVSZXNpemUoKQoreworICAgIG1fa2luZXRpY0Fu
aW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKworI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9vdGhBbmlt
YXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5kaWYKK30KKwordm9pZCBTY3JvbGxB
bmltYXRvckd0azo6dXBkYXRlUG9zaXRpb24oRmxvYXRQb2ludCYmIHBvc2l0aW9uKQoreworICAg
IEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247CisgICAgbV9j
dXJyZW50UG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKKyAgICBub3RpZnlQb3NpdGlvbkNo
YW5nZWQoZGVsdGEpOworfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRWZXJ0aWNh
bFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKKyAgICBtX2tpbmV0aWNBbmltYXRp
b24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNp
YmxlTGVuZ3RocygpOworICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9v
dGhBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5kaWYKICAgICBpZiAoIXNj
cm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNyw5
ICsxODksMTEgQEAgdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CisgICAgbV9raW5l
dGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworCiAjaWYgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCi0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+
dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAg
ICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCiAg
ICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JH
dGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCmlu
ZGV4IDcwZTViNzMuLjE1MzJhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxBbmltYXRvckd0ay5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNjcm9sbEFu
aW1hdG9yR3RrX2gKICNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JHdGtfaAogCisjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0aW9uS2luZXRpYy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKIApAQCAtNDQsMTEgKzQ1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5TY3JvbGxBbmltYXRvckd0aygpOwogCiBwcml2YXRlOgotI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQogICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJy
aWRlOwogICAgIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsKLSNlbmRpZgorCisg
ICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3Zl
cnJpZGU7CkBAIC02MywxNiArNjQsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUNvbnRl
bnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgb3ZlcnJpZGU7CiAKKyAg
ICB2b2lkIHVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQmJik7CisKICAgICB2b2lkIG92ZXJsYXlT
Y3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKCk7CiAgICAgdm9pZCBzaG93T3ZlcmxheVNjcm9s
bGJhcnMoKTsKICAgICB2b2lkIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOwogICAgIHZvaWQgdXBk
YXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5KCk7CiAKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVW
ZWxvY2l0eSgpOworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgdm9pZCBlbnN1
cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3Jv
bGxBbmltYXRpb24+IG1fYW5pbWF0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmlt
YXRpb24+IG1fc21vb3RoQW5pbWF0aW9uOwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbEFuaW1hdGlvbktpbmV0aWM+IG1fa2luZXRpY0FuaW1hdGlvbjsKKyAgICBWZWN0b3I8UGxh
dGZvcm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhpc3Rvcnk7CiAgICAgU2Nyb2xsYmFyKiBtX2hvcml6
b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwogICAgIFNjcm9sbGJhciogbV92ZXJ0
aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07CiAgICAgYm9vbCBtX292ZXJsYXlTY3Jv
bGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjYzNmNWYzOC4uM2RiYzBlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDE2LTA2LTE1ICBBZHJpZW4gUGxhemFzICA8
YXBsYXphc0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBraW5ldGljIHNjcm9sbGlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NzUw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRo
ZSBub3Rpb24gb2YgcGhhc2UgYW5kIG1vbWVudHVtIHBoYXNlIHRvIFdlYldoZWVsRXZlbnQuCisK
KyAgICAgICAgTWFrZSBXZWJXaGVlbEV2ZW50IG1hbmFnZSB0aGUgJ2lzX3N0b3AnIGF0dHJpYnV0
ZSBvZiBHZGtFdmVudFNjcm9sbCB0byBjcmVhdGUgdGhlIGNvcnJlc3BvbmRpbmcgV2ViV2hlZWxF
dmVudAorICAgICAgICB3aXRoIHRoZSBjb3JyZWN0IHBoYXNlcyBhbmQgZGVsdGFzLgorCisgICAg
ICAgIE1ha2UgR2VzdHVyZUNvbnRyb2xsZXIgbWFuYWdlIHN3aXBlcyB0byBjcmVhdGUgdGhlIGNv
cnJlc3BvbmRpbmcgV2ViV2hlZWxFdmVudCB3aXRoIHRoZSBjb3JyZWN0IHBoYXNlcyBhbmQKKyAg
ICAgICAgZGVsdGFzLgorCisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoK
KyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxF
dmVudDo6cGhhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50Ojptb21lbnR1bVBo
YXNlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXZWJLaXQ6OnRvUGxhdGZvcm1XaGVlbGV2
ZW50UGhhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXQyUGxhdGZvcm1XaGVlbEV2ZW50OjpX
ZWJLaXQyUGxhdGZvcm1XaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvV2ViV2hlZWxFdmVu
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXaGVlbEV2ZW50OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9ndGsvTmF0aXZlV2Vi
V2hlZWxFdmVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQ6
Ok5hdGl2ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0
b3J5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVl
bEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmNhblNraXBXaGVlbEV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxlcik6CisgICAgICAg
IChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6Okdlc3R1cmVDb250cm9sbGVyOjppc1Byb2Nlc3NpbmdHZXN0dXJlcyk6CisgICAgICAgIChX
ZWJLaXQ6Om5ld1Njcm9sbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6OkRyYWdHZXN0dXJlOjpzdGFydERyYWcpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29u
dHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcpOgorICAgICAgICAoV2ViS2l0OjpHZXN0
dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6R2Vz
dHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3RhcnRNb21lbnR1bVNjcm9sbCk6CisgICAg
ICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN3aXBlKToKKyAg
ICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6U3dpcGVHZXN0
dXJlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmNhblNraXBXaGVlbEV2ZW50KToKKwogMjAxNi0wNi0xNCAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIGNvbnN0cnVjdGluZyBh
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIHVubmVjZXNzYXJpbHkgaW4gdGhlIE5ldHdvcmtMb2Fk
IGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2Vi
V2hlZWxFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQu
aAppbmRleCAxNTMzMjIyLi40NTAxZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRp
dmVXZWJXaGVlbEV2ZW50LmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZP
Uk0oR1RLKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVu
dCYpOwogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqKTsKKyAgICBOYXRpdmVXZWJX
aGVlbEV2ZW50KEdka0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6
OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIE5hdGl2ZVdl
YldoZWVsRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCosIGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYgdG9XZWJDb250ZW50LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0mIHRvRGV2aWNlU2NyZWVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApp
bmRleCA0YmZhMGQ4Li45N2ViZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApAQCAtMTc5
LDcgKzE3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQKICAg
ICB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKEdUSykKICAgICBlbnVtIFBoYXNlIHsKICAgICAgICAgUGhhc2VOb25lICAgICAgICA9IDAs
CiAgICAgICAgIFBoYXNlQmVnYW4gICAgICAgPSAxIDw8IDAsCkBAIC0xOTYsNiArMTk2LDggQEAg
cHVibGljOgogICAgIFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hl
ZWxUaWNrcywgR3JhbnVsYXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21E
ZXZpY2UsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxp
bmdEZWx0YXMsIHVpbnQzMl90IHNjcm9sbENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
IHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1w
KTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2Jh
bFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFu
dWxhcml0eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
OyB9CkBAIC0yMTAsNiArMjEyLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHJlY2lzZVNjcm9s
bGluZ0RlbHRhcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsg
fQogICAgIHVpbnQzMl90IHNjcm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3Vu
dDsgfQogICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGlu
Z0RlbHRhKCkgY29uc3QgeyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7IH0K
KyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBQaGFzZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFBoYXNlPihtX3BoYXNlKTsgfQorICAgIFBoYXNlIG1vbWVudHVtUGhhc2UoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQaGFzZT4obV9tb21lbnR1bVBoYXNlKTsgfQogI2Vu
ZGlmCiAKICAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwpAQCAt
MjMwLDYgKzIzNSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdE
ZWx0YXM7CiAgICAgdWludDMyX3QgbV9zY3JvbGxDb3VudDsKICAgICBXZWJDb3JlOjpGbG9hdFNp
emUgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7CisjZWxpZiBQTEFURk9STShHVEspCisg
ICAgdWludDMyX3QgbV9waGFzZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsgLy8gUGhhc2UKKyAgICB1
aW50MzJfdCBtX21vbWVudHVtUGhhc2UgeyBQaGFzZTo6UGhhc2VOb25lIH07IC8vIFBoYXNlCiAj
ZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENv
bnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5j
cHAKaW5kZXggZWViNzQ0MS4uZGY2MmJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkV2ZW50Q29udmVyc2lvbi5jcHAKQEAgLTEyMyw2ICsxMjMsMzMgQEAgV2ViQ29yZTo6UGxhdGZv
cm1Nb3VzZUV2ZW50IHBsYXRmb3JtKGNvbnN0IFdlYk1vdXNlRXZlbnQmIHdlYkV2ZW50KQogICAg
IHJldHVybiBXZWJLaXQyUGxhdGZvcm1Nb3VzZUV2ZW50KHdlYkV2ZW50KTsKIH0KIAorI2lmIFBM
QVRGT1JNKEdUSykKK2lubGluZSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgb3Bl
cmF0b3J8PShXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgc2VsZiwgV2ViQ29yZTo6
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2Ugb3RoZXIpCit7CisgICAgcmV0dXJuIHNlbGYgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4oc2VsZiB8IG90aGVyKTsK
K30KKworc3RhdGljIFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHRvUGxhdGZvcm1X
aGVlbGV2ZW50UGhhc2UoV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UpCit7CisgICAgV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcmVzdWx0ID0gV2ViQ29yZTo6UGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKKworICAgIGlmIChwaGFz
ZSAmIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKQorICAgICAgICByZXN1bHQgfD0g
V2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
QmVnYW47CisgICAgaWYgKHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlU3RhdGlv
bmFyeSkKKyAgICAgICAgcmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
OjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZVN0YXRpb25hcnk7CisgICAgaWYgKHBoYXNlICYgV2Vi
V2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZCkKKyAgICAgICAgcmVzdWx0IHw9IFdlYkNv
cmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5n
ZWQ7CisgICAgaWYgKHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQpCisg
ICAgICAgIHJlc3VsdCB8PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsKKyAgICBpZiAocGhhc2UgJiBXZWJXaGVlbEV2ZW50OjpQ
aGFzZTo6UGhhc2VDYW5jZWxsZWQpCisgICAgICAgIHJlc3VsdCB8PSBXZWJDb3JlOjpQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQ7CisgICAg
aWYgKHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTWF5QmVnaW4pCisgICAgICAg
IHJlc3VsdCB8PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VNYXlCZWdpbjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwog
Y2xhc3MgV2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVudCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9y
bVdoZWVsRXZlbnQgewogcHVibGljOgogICAgIFdlYktpdDJQbGF0Zm9ybVdoZWVsRXZlbnQoY29u
c3QgV2ViV2hlZWxFdmVudCYgd2ViRXZlbnQpCkBAIC0xNTgsNiArMTg1LDkgQEAgcHVibGljOgog
ICAgICAgICBtX3Njcm9sbENvdW50ID0gd2ViRXZlbnQuc2Nyb2xsQ291bnQoKTsKICAgICAgICAg
bV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYID0gd2ViRXZlbnQudW5hY2NlbGVyYXRlZFNj
cm9sbGluZ0RlbHRhKCkud2lkdGgoKTsKICAgICAgICAgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5n
RGVsdGFZID0gd2ViRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkuaGVpZ2h0KCk7
CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIG1fcGhhc2UgPSB0b1BsYXRmb3JtV2hlZWxl
dmVudFBoYXNlKHdlYkV2ZW50LnBoYXNlKCkpOworICAgICAgICBtX21vbWVudHVtUGhhc2UgPSB0
b1BsYXRmb3JtV2hlZWxldmVudFBoYXNlKHdlYkV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CiAjZW5k
aWYKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVs
RXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCmluZGV4
IGQyNTBhMTQuLmYzMTJmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJX
aGVlbEV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5j
cHAKQEAgLTY3LDYgKzY3LDIwIEBAIFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0
eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50CiB7CiAgICAgQVNT
RVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOwogfQorI2VsaWYgUExBVEZPUk0oR1RLKQorV2Vi
V2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIGRl
bHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlja3MsIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21l
bnR1bVBoYXNlLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgTW9kaWZpZXJzIG1vZGlmaWVycywg
ZG91YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdlYkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0
YW1wKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24o
Z2xvYmFsUG9zaXRpb24pCisgICAgLCBtX2RlbHRhKGRlbHRhKQorICAgICwgbV93aGVlbFRpY2tz
KHdoZWVsVGlja3MpCisgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICwgbV9k
aXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCisgICAgLCBtX3BoYXNlKHBoYXNlKQor
ICAgICwgbV9tb21lbnR1bVBoYXNlKG1vbWVudHVtUGhhc2UpCit7CisgICAgQVNTRVJUKGlzV2hl
ZWxFdmVudFR5cGUodHlwZSkpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5j
b2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApAQCAtODUsNiArOTksOSBA
QCB2b2lkIFdlYldoZWVsRXZlbnQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKICAgICBlbmNvZGVyIDw8IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAg
ICBlbmNvZGVyIDw8IG1fc2Nyb2xsQ291bnQ7CiAgICAgZW5jb2RlciA8PCBtX3VuYWNjZWxlcmF0
ZWRTY3JvbGxpbmdEZWx0YTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBlbmNvZGVyIDw8IG1f
cGhhc2U7CisgICAgZW5jb2RlciA8PCBtX21vbWVudHVtUGhhc2U7CiAjZW5kaWYKIH0KIApAQCAt
MTE1LDYgKzEzMiwxMSBAQCBib29sIFdlYldoZWVsRXZlbnQ6OmRlY29kZShJUEM6OkFyZ3VtZW50
RGVjb2RlciYgZGVjb2RlciwgV2ViV2hlZWxFdmVudCYgdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0
YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHQubV9waGFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHQubV9tb21lbnR1bVBoYXNlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcAppbmRleCBiMzY3NjEyLi4x
NWYwMDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldo
ZWVsRXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2Vi
V2hlZWxFdmVudEd0ay5jcHAKQEAgLTM3LDYgKzM3LDEyIEBAIE5hdGl2ZVdlYldoZWVsRXZlbnQ6
Ok5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogfQogCitOYXRpdmVXZWJX
aGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxF
dmVudDo6UGhhc2UgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCisg
ICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChl
dmVudCwgcGhhc2UsIG1vbWVudHVtUGhhc2UpKQorICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZl
bnRfY29weShldmVudCkpCit7Cit9CisKIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldo
ZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgOiBXZWJXaGVl
bEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVF
dmVudCgpKSkKICAgICAsIG1fbmF0aXZlRXZlbnQoZ2RrX2V2ZW50X2NvcHkoZXZlbnQubmF0aXZl
RXZlbnQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50
RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5j
cHAKaW5kZXggMmQ2NjM5My4uZTA0YjI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvV2ViRXZlbnRGYWN0b3J5LmNwcApAQCAtMTQzLDYgKzE0MywyNyBAQCBXZWJNb3VzZUV2ZW50
IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChjb25zdCBHZGtFdmVudCogZXZl
bnQsIGludCBjdQogCiBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hl
ZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiB7CisjaWZuZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgV2ViV2hlZWxFdmVudDo6
UGhhc2UgcGhhc2UgPSBnZGtfZXZlbnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQpID8KKyAg
ICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQgOgorICAgICAgICBXZWJXaGVl
bEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworI2Vsc2UKKyAgICBkb3VibGUgZGVsdGFYLCBk
ZWx0YVk7CisgICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGVsdGFzKGV2ZW50LCAmZGVsdGFYLCAm
ZGVsdGFZKTsKKyAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IGV2ZW50LT5zY3JvbGwu
ZGlyZWN0aW9uID09IEdES19TQ1JPTExfU01PT1RIICYmIGRlbHRhWCA9PSAwLjAgJiYgZGVsdGFZ
ID09IDAuMCA/CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUVuZGVkIDoKKyAg
ICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZDsKKyNlbmRpZgorI2Vsc2UK
KyAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQ
aGFzZUNoYW5nZWQ7CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKworICAgIHJldHVybiBj
cmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBwaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBo
YXNlTm9uZSk7Cit9CisKK1dlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJX
aGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhh
c2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCit7CiAgICAgZG91YmxlIHgs
IHksIHhSb290LCB5Um9vdDsKICAgICBnZGtfZXZlbnRfZ2V0X2Nvb3JkcyhldmVudCwgJngsICZ5
KTsKICAgICBnZGtfZXZlbnRfZ2V0X3Jvb3RfY29vcmRzKGV2ZW50LCAmeFJvb3QsICZ5Um9vdCk7
CkBAIC0xNzksMTMgKzIwMCwxNSBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiAgICAgRmxvYXRTaXplIGRl
bHRhKHdoZWVsVGlja3Mud2lkdGgoKSAqIHN0ZXAsIHdoZWVsVGlja3MuaGVpZ2h0KCkgKiBzdGVw
KTsKIAogICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRQb2ludCh4LCB5KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRh
LAotICAgICAgICAgICAgICAgICAgICAgICAgIHdoZWVsVGlja3MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka19ldmVudF9nZXRfdGltZShldmVudCkpOworICAgICAgICBJbnRQb2lu
dCh4LCB5KSwKKyAgICAgICAgSW50UG9pbnQoeFJvb3QsIHlSb290KSwKKyAgICAgICAgZGVsdGEs
CisgICAgICAgIHdoZWVsVGlja3MsCisgICAgICAgIHBoYXNlLAorICAgICAgICBtb21lbnR1bVBo
YXNlLAorICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKKyAg
ICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpLAorICAgICAgICBnZGtfZXZlbnRfZ2V0X3Rp
bWUoZXZlbnQpKTsKIH0KIAogV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBjb25zdCBXZWJDb3JlOjpD
b21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cywgVmVjdG9yPFN0cmluZz4mJiBj
b21tYW5kcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRG
YWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCmlu
ZGV4IDI4YjY5NTMuLjhmZTdjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJF
dmVudEZhY3RvcnkuaApAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBXZWJFdmVudEZhY3Rvcnkgewog
cHVibGljOgogICAgIHN0YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoY29u
c3QgR2RrRXZlbnQqLCBpbnQpOwogICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldo
ZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqKTsKKyAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVh
dGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdl
YldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogICAgIHN0YXRpYyBXZWJLZXlib2Fy
ZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBjb25zdCBXZWJD
b3JlOjpDb21wb3NpdGlvblJlc3VsdHMmLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKTsKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHN0YXRpYyBXZWJUb3VjaEV2ZW50IGNyZWF0ZVdl
YlRvdWNoRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBWZWN0b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50
PiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMDk3
Y2ZjNS4uODQ1MmE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKQEAgLTE4MTYsNyArMTgxNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQogCiAgICAgaWYgKCFtX2N1cnJl
bnRseVByb2Nlc3NlZFdoZWVsRXZlbnRzLmlzRW1wdHkoKSkgewogICAgICAgICBtX3doZWVsRXZl
bnRRdWV1ZS5hcHBlbmQoZXZlbnQpOwotICAgICAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6
ZSgpIDwgd2hlZWxFdmVudFF1ZXVlU2l6ZVRocmVzaG9sZCkKKyAgICAgICAgaWYgKG1fd2hlZWxF
dmVudFF1ZXVlLnNpemUoKSA8IHdoZWVsRXZlbnRRdWV1ZVNpemVUaHJlc2hvbGQgJiYgY2FuU2tp
cFdoZWVsRXZlbnQoZXZlbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBUaGUg
cXVldWUgaGFzIHRvbyBtYW55IHdoZWVsIGV2ZW50cywgc28gcHVzaCBhIG5ldyBldmVudC4KICAg
ICB9CkBAIC0xODU3LDYgKzE4NTcsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2
ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQogICAgIG1fcHJvY2Vzcy0+aXNSZXNwb25z
aXZlKG51bGxwdHIpOwogfQogCisjaWYgIVBMQVRGT1JNKEdUSykKK2Jvb2wgV2ViUGFnZVByb3h5
OjpjYW5Ta2lwV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JikKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlS2V5Ym9hcmRFdmVu
dChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFs
aWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA2NDM2MjQy
Li4zODc1M2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0x
NDYyLDYgKzE0NjIsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzTmV4dFF1ZXVlZFdo
ZWVsRXZlbnQoKTsKICAgICB2b2lkIHNlbmRXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQm
KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Ta2lwV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50
Jik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIFdlYkNvcmU6OlRyYWNraW5nVHlw
ZSB0b3VjaEV2ZW50VHJhY2tpbmdUeXBlKGNvbnN0IFdlYlRvdWNoRXZlbnQmKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAK
aW5kZXggN2UxNTc3Yy4uYTYyYzZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdl
UHJveHkmIHBhZ2UpCiAgICAgOiBtX2RyYWdHZXN0dXJlKHBhZ2UpCisgICAgLCBtX3N3aXBlR2Vz
dHVyZShwYWdlKQogICAgICwgbV96b29tR2VzdHVyZShwYWdlKQogewogfQpAQCAtNDksMTMgKzUw
LDE0IEBAIGJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50
KiBldmVudCkKIHsKICAgICBib29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2lu
Z0dlc3R1cmVzKCk7CiAgICAgbV9kcmFnR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CisgICAg
bV9zd2lwZUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIG1fem9vbUdlc3R1cmUuaGFu
ZGxlRXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfVE9VQ0hfRU5E
ID8gd2FzUHJvY2Vzc2luZ0dlc3R1cmVzIDogaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKIH0KIAog
Ym9vbCBHZXN0dXJlQ29udHJvbGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0Fj
dGl2ZSgpOworICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV9zd2lwZUdl
c3R1cmUuaXNBY3RpdmUoKSB8fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7CiB9CiAKIEdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlOjpHZXN0dXJlKEd0a0dlc3R1cmUqIGdlc3R1cmUsIFdlYlBh
Z2VQcm94eSYgcGFnZSkKQEAgLTc1LDIwICs3Nyw0MCBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVy
OjpHZXN0dXJlOjpoYW5kbGVFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiAgICAgZ3RrX2V2
ZW50X2NvbnRyb2xsZXJfaGFuZGxlX2V2ZW50KEdUS19FVkVOVF9DT05UUk9MTEVSKG1fZ2VzdHVy
ZS5nZXQoKSksIGV2ZW50KTsKIH0KIAotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1
cmU6OmhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkp
CitzdGF0aWMgR1VuaXF1ZVB0cjxHZGtFdmVudD4gbmV3U2Nyb2xsRXZlbnQoY29uc3QgR2RrRXZl
bnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSBkZWx0YVgsIGRvdWJsZSBkZWx0
YVksIGdib29sZWFuIGlzU3RvcCkKIHsKLSAgICBBU1NFUlQobV9pbkRyYWcpOwogICAgIEdVbmlx
dWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkpOwog
ICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2ZW50LT50b3VjaC50aW1lOwotICAgIHNj
cm9sbEV2ZW50LT5zY3JvbGwueCA9IG1fc3RhcnQueCgpOwotICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwueSA9IG1fc3RhcnQueSgpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IHg7CisgICAg
c2Nyb2xsRXZlbnQtPnNjcm9sbC55ID0geTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnhfcm9v
dCA9IGV2ZW50LT50b3VjaC54X3Jvb3Q7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55X3Jvb3Qg
PSBldmVudC0+dG91Y2gueV9yb290OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9u
ID0gR0RLX1NDUk9MTF9TTU9PVEg7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0g
KG1fb2Zmc2V0LngoKSAtIHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOwotICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9s
bGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRh
X3ggPSBkZWx0YVg7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gZGVsdGFZOwog
ICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+dG91Y2guc3RhdGU7Ci0gICAg
bV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5n
ZXQoKSkpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQorICAgIHNjcm9sbEV2ZW50
LT5zY3JvbGwuaXNfc3RvcCA9IGlzU3RvcDsKKyNlbmRpZgorICAgIHJldHVybiBzY3JvbGxFdmVu
dDsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnN0YXJ0RHJhZyhj
b25zdCBHZGtFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKCFtX2luRHJhZyk7CisgICAgR1Vu
aXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQgPSBuZXdTY3JvbGxFdmVudChldmVudCwgbV9z
dGFydC54KCksIG1fc3RhcnQueSgpLCAwLCAwLCBGQUxTRSk7CisgICAgbV9wYWdlLmhhbmRsZVdo
ZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxF
dmVudDo6UGhhc2U6OlBoYXNlQmVnYW4sIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUp
KTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWco
Y29uc3QgR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgQVNTRVJU
KG1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9IG5ld1Nj
cm9sbEV2ZW50KGV2ZW50LAorICAgICAgICBtX3N0YXJ0LngoKSwgbV9zdGFydC55KCksCisgICAg
ICAgIChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwK
KyAgICAgICAgKG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3Rl
cCgpLAorICAgICAgICBGQUxTRSk7CisgICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZl
V2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBo
YXNlQ2hhbmdlZCwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOwogfQogCiB2b2lk
IEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50
KiBldmVudCkKQEAgLTEyOCw2ICsxNTAsNyBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFn
R2VzdHVyZTo6YmVnaW4oRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUgeCwgZAogICAg
IHVuc2lnbmVkIGRlbGF5OwogICAgIGdfb2JqZWN0X2dldChndGtfd2lkZ2V0X2dldF9zZXR0aW5n
cyh3aWRnZXQpLCAiZ3RrLWxvbmctcHJlc3MtdGltZSIsICZkZWxheSwgbnVsbHB0cik7CiAgICAg
ZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5zdGFydE9uZVNob3QoZGVsYXkgLyAxMDAw
LjApOworICAgIGRyYWdHZXN0dXJlLT5zdGFydERyYWcoZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZl
bnQoZ2VzdHVyZSwgc2VxdWVuY2UpKTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJh
Z0dlc3R1cmU6OnVwZGF0ZShEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3Vi
bGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKQEAgLTE3Miw2ICsxOTUsMjcgQEAgR2VzdHVyZUNv
bnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFnR2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCiAg
ICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgImVuZCIsIEdfQ0FM
TEJBQ0soZW5kKSwgdGhpcyk7CiB9CiAKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2Vz
dHVyZTo6c3RhcnRNb21lbnR1bVNjcm9sbChjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB2
ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVkpCit7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4g
c2Nyb2xsRXZlbnQgPSBuZXdTY3JvbGxFdmVudChldmVudCwgZXZlbnQtPnRvdWNoLngsIGV2ZW50
LT50b3VjaC55LCB2ZWxvY2l0eVgsIHZlbG9jaXR5WSwgVFJVRSk7CisgICAgbV9wYWdlLmhhbmRs
ZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hl
ZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQmVn
YW4pKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzd2lwZShT
d2lwZUdlc3R1cmUqIHN3aXBlR2VzdHVyZSwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9j
aXR5WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1
ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVS
RV9TSU5HTEUoZ2VzdHVyZSkpOworICAgIGd0a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShn
ZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisgICAgc3dp
cGVHZXN0dXJlLT5zdGFydE1vbWVudHVtU2Nyb2xsKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50
KGdlc3R1cmUsIHNlcXVlbmNlKSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVkpOworfQorCitHZXN0dXJl
Q29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5JiBwYWdl
KQorICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV9zd2lwZV9uZXcocGFnZS52aWV3V2lkZ2V0KCkp
LCBwYWdlKQoreworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VT
VFVSRV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgInN3aXBlIiwgR19DQUxMQkFDSyhzd2lwZSksIHRo
aXMpOworfQorCiBJbnRQb2ludCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNlbnRl
cigpIGNvbnN0CiB7CiAgICAgZG91YmxlIHgsIHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggODY3OTJkZi4uZTk2MDMxZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaApA
QCAtNjcsNiArNjcsOCBAQCBwcml2YXRlOgogICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdlUHJv
eHkmKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgZHJhZyBzdGFy
dGVkLCBhbGxvd2luZyB0byBzdG9wIGtpbmV0aWMgZGVjZWxlcmF0aW9uLgorICAgICAgICB2b2lk
IHN0YXJ0RHJhZyhjb25zdCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGhhbmRsZURyYWcoY29u
c3QgR2RrRXZlbnQqLCBkb3VibGUgeCwgZG91YmxlIHkpOwogICAgICAgICB2b2lkIGhhbmRsZVRh
cChjb25zdCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGxvbmdQcmVzc0ZpcmVkKCk7CkBAIC04
Miw2ICs4NCwxNiBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1faW5EcmFnOwogICAgIH07CiAK
KyAgICBjbGFzcyBTd2lwZUdlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CisgICAgcHVi
bGljOgorICAgICAgICBTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBwcml2YXRl
OgorICAgICAgICB2b2lkIHN0YXJ0TW9tZW50dW1TY3JvbGwoY29uc3QgR2RrRXZlbnQqLCBkb3Vi
bGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZKTsKKworICAgICAgICBzdGF0aWMgdm9pZCBz
d2lwZShTd2lwZUdlc3R1cmUqLCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZLCBH
dGtHZXN0dXJlKik7CisgICAgfTsKKwogICAgIGNsYXNzIFpvb21HZXN0dXJlIGZpbmFsIDogcHVi
bGljIEdlc3R1cmUgewogICAgIHB1YmxpYzoKICAgICAgICAgWm9vbUdlc3R1cmUoV2ViUGFnZVBy
b3h5Jik7CkBAIC0xMDEsNiArMTEzLDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgRHJhZ0dl
c3R1cmUgbV9kcmFnR2VzdHVyZTsKKyAgICBTd2lwZUdlc3R1cmUgbV9zd2lwZUdlc3R1cmU7CiAg
ICAgWm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAppbmRleCAyZGJhZTA1Li42MGY1ZDg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsu
Y3BwCkBAIC0xNDgsNCArMTQ4LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRDZW50ZXJGb3Ja
b29tR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2VudGVySW5WaWV3CiB9CiAjZW5k
aWYKIAorYm9vbCBXZWJQYWdlUHJveHk6OmNhblNraXBXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVs
RXZlbnQmIGV2ZW50KQoreworICAgIHJldHVybiBldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZl
bnQ6OlBoYXNlOjpQaGFzZUVuZGVkCisgICAgICAgIHx8IGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9
PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbjsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Cg==
</data>
<flag name="review"
          id="305208"
          type_id="1"
          status="-"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="305393"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281711</attachid>
            <date>2016-06-20 21:35:02 -0700</date>
            <delta_ts>2016-06-27 08:44:58 -0700</delta_ts>
            <desc>Patch - new features + bugfix</desc>
            <filename>0001-GTK-Add-kinetic-scrolling.patch</filename>
            <type>text/plain</type>
            <size>47362</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSAyNDExYjhiMWMzNjU1MWY1NjU1Y2M1OWRiYzFmNDM0ODhmMTk0YjQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZHJpZW4gUGxhemFzIDxhcGxhemFzQGlnYWxpYS5jb20+CkRh
dGU6IE1vbiwgMjAgSnVuIDIwMTYgMTE6Mjk6MDQgLTAzMDAKU3ViamVjdDogW1BBVENIXSBbR1RL
XSBBZGQga2luZXRpYyBzY3JvbGxpbmcKIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTU3NTAKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKTm8gbmV3IHRlc3Rz
IChPT1BTISkuCgpBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgc2Nyb2xsaW5nIGFuaW1h
dGlvbiBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGluZzsgaXQgaXMgYmFzZWQg
b24gR1RLKydzCkd0a0tpbmV0aWNTY3JvbGxpbmcgdHlwZS4KCkFkZCB0aGUgbm90aW9uIG9mIHBo
YXNlLCBtb21lbnR1bSBwaGFzZSBhbmQgc3dpcGUgdmVsb2NpdHkgdG8gUGxhdGZvcm1XaGVlbEV2
ZW50LgoKRGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHNjcm9sbGluZyBlbmRlZCBub3JtYWxseSBv
ciB0cmlnZ2VyZWQgYSBzd2lwZSwgdGhlIHNjcm9sbCBhbmltYXRvciB3aWxsIGVpdGhlciBjb21w
dXRlCnRoZSBzd2lwZSB2ZWxvY2l0eSBmcm9tIHRoZSBwcmV2aW91cyBzY3JvbGxpbmcgZXZlbnRz
IG9yIHVzZSB0aGUgb25lIGZyb20gdGhlIHN3aXBlIGdlc3R1cmUgdG8gaW5pdGlhdGUgdGhlCm1v
bWVudHVtIHNjcm9sbGluZy4KLS0tCiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSAg
ICAgICAgICAgICAgICAgICB8ICAgMSArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaCAgICAgICB8ICAxMiArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0aW9uS2luZXRpYy5jcHAgfCAyMzcgKysrKysrKysrKysrKysrKysrKysrCiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggICB8IDEwMCArKysr
KysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCAgICAg
IHwgICAyICsKIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsu
Y3BwIHwgIDIzICsrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JH
dGsuY3BwICB8IDExMCArKysrKysrKy0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsQW5pbWF0b3JHdGsuaCAgICB8ICAxMyArLQogU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2
ZVdlYldoZWVsRXZlbnQuaCAgICAgICAgfCAgIDEgKwogU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkV2ZW50LmggICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJFdmVudENvbnZlcnNpb24uY3BwICAgICAgIHwgIDMwICsrKwogU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwICAgICAgICAgICAgfCAgMjIgKysKIC4uLi9XZWJLaXQy
L1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAgIHwgICA4ICstCiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgICAgICB8ICAzNyArKystCiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oICAgICAgICB8ICAgMSAr
CiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCAgICAgICAgICB8ICAg
OSArLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oICAgICAgICAgICAg
fCAgIDEgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5j
cHAgfCAgNzAgKysrKystCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmggICB8ICAxMyArKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdl
UHJveHlHdGsuY3BwICAgfCAgIDYgKwogMjAgZmlsZXMgY2hhbmdlZCwgNjY0IGluc2VydGlvbnMo
KyksIDQyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQppbmRleCA3NGU1MTk1Li4yY2YwOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQpAQCAtNzcsNiArNzcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBsb2FkZXIvc291cC9TdWJyZXNvdXJjZUxvYWRlclNvdXAuY3BwCiAKICAgICBwbGF0Zm9ybS9L
aWxsUmluZ05vbmUuY3BwCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAK
IAogICAgIHBsYXRmb3JtL2F1ZGlvL2dsaWIvQXVkaW9CdXNHTGliLmNwcAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDA3MTM1NWMuLmI2Zjg0
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBA
IC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU2Nyb2xsQnlQaXhl
bFdoZWVsRXZlbnQsCiAgICAgfTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JN
KENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgZW51bSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZSA6IHVpbnQ4X3QgewogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgICAgICAg
ID0gMCwKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbiAgICAgICA9IDEgPDwg
MCwKQEAgLTE2Miw2ICsxNjIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29s
IGlzRW5kT2ZNb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogICAgICAgICBib29sIGlzRW5kT2ZOb25N
b21lbnR1bVNjcm9sbCgpIGNvbnN0OwogICAgICAgICBib29sIGlzVHJhbnNpdGlvbmluZ1RvTW9t
ZW50dW1TY3JvbGwoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgYm9vbCB1
c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAg
Ym9vbCBpc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1Ry
YW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisgICAgICAgIEZsb2F0UG9pbnQg
c3dpcGVWZWxvY2l0eSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAgYm9vbCB1c2VMYXRjaGVkRXZl
bnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMTg3LDYgKzE5
Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgbV9zY3JvbGxDb3Vu
dDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYOwogICAgICAg
ICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVk7CisjZWxpZiBQTEFURk9STShH
VEspCisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2UgeyBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZU5vbmUgfTsKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9t
b21lbnR1bVBoYXNlIHsgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CiAjZW5kaWYKICAg
ICB9OwogCkBAIC0yMTIsNyArMjIwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1f
bW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOwogICAgIH0KKyNl
bmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbmxpbmUg
Ym9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZUVuZGVkICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5l
dGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTYxNmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGlj
LmNwcApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEg
Uy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE2IENvbGxhYm9yYSBMaW1pdGVkCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgi
CisKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorCisvKgorICogUGVyQXhpc0RhdGEgaXMgYSBwb3J0IG9mIEd0a0tpbmV0aWNTY3JvbGxp
bmcgYXMgb2YgR1RLKyAzLjIwLAorICogbWltaWNraW5nIGl0cyBBUEkgYW5kIGl0cyBiZWhhdmlv
ci4KKyAqCisgKiBBbGwgb3VyIGN1cnZlcyBhcmUgc2Vjb25kIGRlZ3JlZSBsaW5lYXIgZGlmZmVy
ZW50aWFsIGVxdWF0aW9ucywgYW5kCisgKiBzbyB0aGV5IGNhbiBhbHdheXMgYmUgd3JpdHRlbiBh
cyBsaW5lYXIgY29tYmluYXRpb25zIG9mIDIgYmFzZQorICogc29sdXRpb25zLiBjb2VmMSBhbmQg
Y29lZjIgYXJlIHRoZSBjb2VmZmljaWVudHMgdG8gdGhlc2UgdHdvIGJhc2UKKyAqIHNvbHV0aW9u
cywgYW5kIGFyZSBjb21wdXRlZCBmcm9tIHRoZSBpbml0aWFsIHBvc2l0aW9uIGFuZCB2ZWxvY2l0
eS4KKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBzaW1wbGUgZGVjZWxlcmF0aW9uLCB0aGUgZGlmZmVy
ZW50aWFsIGVxdWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknCisgKgorICogV2l0aCBtIHRo
ZSByZXNpc3RlbmNlIGZhY3Rvci4gRm9yIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgMgorICog
YmFzZSBzb2x1dGlvbnM6CisgKgorICogICBmMSh4KSA9IDEKKyAqICAgZjIoeCkgPSBleHAoLW14
KQorICoKKyAqIEluIHRoZSBjYXNlIG9mIG92ZXJzaG9vdCwgdGhlIGRpZmZlcmVudGlhbCBlcXVh
dGlvbiBpcworICoKKyAqICAgeScnID0gLW15JyAtIGt5CisgKgorICogV2l0aCBtIHRoZSByZXNp
c3RhbmNlLCBhbmQgayB0aGUgc3ByaW5nIHN0aWZmbmVzcyBjb25zdGFudC4gV2UgbGV0CisgKiBr
ID0gbV4yIC8gNCwgc28gdGhhdCB0aGUgc3lzdGVtIGlzIGNyaXRpY2FsbHkgZGFtcGVkIChpZSwg
cmV0dXJucyB0byBpdHMKKyAqIGVxdWlsaWJyaXVtIHBvc2l0aW9uIGFzIHF1aWNrbHkgYXMgcG9z
c2libGUsIHdpdGhvdXQgb3NjaWxsYXRpbmcpLCBhbmQgb2Zmc2V0CisgKiB0aGUgd2hvbGUgdGhp
bmcsIHN1Y2ggdGhhdCB0aGUgZXF1aWxpYnJpdW0gcG9zaXRpb24gaXMgYXQgMC4gVGhpcyBnaXZl
cyB0aGUKKyAqIGJhc2Ugc29sdXRpb25zCisgKgorICogICBmMSh4KSA9IGV4cCgtbXggLyAyKQor
ICogICBmMih4KSA9IHQgZXhwKC1teCAvIDIpCisgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZSBt
YXhPdmVyc2hvb3REaXN0YW5jZSA9IDUwOworc3RhdGljIGNvbnN0IGRvdWJsZSBkZWNlbEZyaWN0
aW9uID0gNDsKK3N0YXRpYyBjb25zdCBkb3VibGUgb3ZlcnNob290RnJpY3Rpb24gPSAyMDsKK3N0
YXRpYyBjb25zdCBkb3VibGUgZnJhbWVSYXRlID0gNjA7CitzdGF0aWMgY29uc3QgZG91YmxlIG1p
bmltdW1UaW1lckludGVydmFsID0gLjAwMTsKKworc3RhdGljIGlubGluZSBkb3VibGUgY2xhbXAo
ZG91YmxlIHgsIGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQoreworICAgIEFTU0VSVChsb3cgPD0g
aGlnaCk7CisKKyAgICByZXR1cm4gKHggPiBoaWdoKSA/IGhpZ2ggOiAoKHggPCBsb3cpID8gbG93
IDogeCk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yzo6UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKGRvdWJsZSBsb3dlciwgZG91YmxlIHVwcGVyLCBk
b3VibGUgaW5pdGlhbFBvc2l0aW9uLCBkb3VibGUgaW5pdGlhbFZlbG9jaXR5KQorICAgIDogbV9s
b3dlcihsb3dlcikKKyAgICAsIG1fdXBwZXIodXBwZXIpCit7CisgICAgaWYgKGluaXRpYWxQb3Np
dGlvbiA8IGxvd2VyKQorICAgICAgICBvdmVyc2hvb3QobG93ZXIsIGluaXRpYWxQb3NpdGlvbiwg
aW5pdGlhbFZlbG9jaXR5KTsKKyAgICBlbHNlIGlmIChpbml0aWFsUG9zaXRpb24gPiB1cHBlcikK
KyAgICAgICAgb3ZlcnNob290KHVwcGVyLCBpbml0aWFsUG9zaXRpb24sIGluaXRpYWxWZWxvY2l0
eSk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGhhc2UgPSBQaGFzZURlY2VsZXJhdGluZzsKKyAg
ICAgICAgbV9jb2VmMSA9IGluaXRpYWxWZWxvY2l0eSAvIGRlY2VsRnJpY3Rpb24gKyBpbml0aWFs
UG9zaXRpb247CisgICAgICAgIG1fY29lZjIgPSAtaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmlj
dGlvbjsKKyAgICAgICAgbV9wb3NpdGlvbiA9IGluaXRpYWxQb3NpdGlvbjsKKyAgICAgICAgbV92
ZWxvY2l0eSA9IGluaXRpYWxWZWxvY2l0eTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6Om92ZXJzaG9vdChkb3VibGUgZXF1aWxpYnJpdW1Qb3Np
dGlvbiwgZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91YmxlIGluaXRpYWxWZWxvY2l0eSkKK3sK
KyAgICBtX3BoYXNlID0gUGhhc2VPdmVyc2hvb3Rpbmc7CisgICAgbV9lcXVpbGlicml1bVBvc2l0
aW9uID0gZXF1aWxpYnJpdW1Qb3NpdGlvbjsKKyAgICBtX2NvZWYxID0gaW5pdGlhbFBvc2l0aW9u
IC0gZXF1aWxpYnJpdW1Qb3NpdGlvbjsKKyAgICBtX2NvZWYyID0gaW5pdGlhbFZlbG9jaXR5ICsg
b3ZlcnNob290RnJpY3Rpb24gLyAyICogbV9jb2VmMTsKKyAgICBtX2VsYXBzZWRUaW1lID0gMDsK
K30KKworYm9vbCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6YW5pbWF0ZVNj
cm9sbChkb3VibGUgdGltZURlbHRhKQoreworICAgIHN3aXRjaCAobV9waGFzZSkgeworICAgIGNh
c2UgUGhhc2VEZWNlbGVyYXRpbmc6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZWxhcHNlZFRp
bWUgKz0gdGltZURlbHRhOworCisgICAgICAgICAgICBkb3VibGUgZXhwb25lbnRpYWxQYXJ0ID0g
ZXhwKC1kZWNlbEZyaWN0aW9uICogbV9lbGFwc2VkVGltZSk7CisgICAgICAgICAgICBtX3Bvc2l0
aW9uID0gbV9jb2VmMSArIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisgICAgICAgICAgICBt
X3ZlbG9jaXR5ID0gLWRlY2VsRnJpY3Rpb24gKiBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0Owor
CisgICAgICAgICAgICBpZiAobV9wb3NpdGlvbiA8IG1fbG93ZXIpIHsKKyAgICAgICAgICAgICAg
ICBvdmVyc2hvb3QobV9sb3dlciwgbV9wb3NpdGlvbiwgbV92ZWxvY2l0eSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fcG9zaXRpb24gPiBtX3VwcGVyKSB7CisgICAgICAgICAgICAgICAgb3Zl
cnNob290KG1fdXBwZXIsIG1fcG9zaXRpb24sIG1fdmVsb2NpdHkpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChmYWJzKG1fdmVsb2NpdHkpIDwgMSkgeworICAgICAgICAgICAgICAgIG1fcGhhc2Ug
PSBQaGFzZUZpbmlzaGVkOworICAgICAgICAgICAgICAgIG1fcG9zaXRpb24gPSByb3VuZChtX3Bv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3ZlbG9jaXR5ID0gMDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIFBoYXNlT3ZlcnNob290
aW5nOgorICAgICAgICB7CisgICAgICAgICAgICBtX2VsYXBzZWRUaW1lICs9IHRpbWVEZWx0YTsK
KworICAgICAgICAgICAgZG91YmxlIGV4cG9uZW50aWFsUGFydCA9IGV4cCgtb3ZlcnNob290RnJp
Y3Rpb24gLyAyICogbV9lbGFwc2VkVGltZSk7CisgICAgICAgICAgICBkb3VibGUgcG9zID0gZXhw
b25lbnRpYWxQYXJ0ICogKG1fY29lZjEgKyBtX2NvZWYyICogbV9lbGFwc2VkVGltZSk7CisKKyAg
ICAgICAgICAgIGlmIChwb3MgPCBtX2xvd2VyIC0gbWF4T3ZlcnNob290RGlzdGFuY2UgfHwgcG9z
ID4gbV91cHBlciArIG1heE92ZXJzaG9vdERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgcG9z
ID0gY2xhbXAocG9zLCBtX2xvd2VyIC0gbWF4T3ZlcnNob290RGlzdGFuY2UsIG1fdXBwZXIgKyBt
YXhPdmVyc2hvb3REaXN0YW5jZSk7CisgICAgICAgICAgICAgICAgb3ZlcnNob290KG1fZXF1aWxp
YnJpdW1Qb3NpdGlvbiwgcG9zLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIG1fdmVsb2NpdHkgPSBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0IC0gb3ZlcnNob290RnJp
Y3Rpb24gLyAyICogcG9zOworCisgICAgICAgICAgICBtX3Bvc2l0aW9uID0gcG9zICsgbV9lcXVp
bGlicml1bVBvc2l0aW9uOworCisgICAgICAgICAgICBpZiAoZmFicyhwb3MpIDwgMC4xKSB7Cisg
ICAgICAgICAgICAgICAgbV9waGFzZSA9IFBoYXNlRmluaXNoZWQ7CisgICAgICAgICAgICAgICAg
bV9wb3NpdGlvbiA9IG1fZXF1aWxpYnJpdW1Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBtX3Zl
bG9jaXR5ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICBjYXNlIFBoYXNlRmluaXNoZWQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBtX3BoYXNlICE9IFBoYXNlRmluaXNoZWQ7Cit9CisKK1Njcm9sbEFuaW1hdGlvbktp
bmV0aWM6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNo
YW5nZWRGdW5jdGlvbikKKyAgICA6IFNjcm9sbEFuaW1hdGlvbihzY3JvbGxhYmxlQXJlYSkKKyAg
ICAsIG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24oV1RGTW92ZShub3RpZnlQb3NpdGlv
bkNoYW5nZWRGdW5jdGlvbikpCisgICAgLCBtX2FuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xs
QW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYzo6flNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKQoreworfQorCitib29sIFNj
cm9sbEFuaW1hdGlvbktpbmV0aWM6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHksIGZsb2F0LCBmbG9hdCkKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBpc24ndCBu
ZWVkZWQgYW5kIHNob3VsZG4ndCBkbyBhbnl0aGluZyBhcyAnc2Nyb2xsJyBpc24ndAorICAgIC8v
IGhvdyB0aGlzIGFuaW1hdGlvbiBuZWVkcyB0byBiZSB1c2VkLCB1c2UgJ3N0YXJ0JyBpbnN0ZWFk
LgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0
b3AoKQoreworICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdGlvbktpbmV0aWM6OnNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikKK3sKKyAgICBzdG9wKCk7CisgICAgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0YXJ0KGNvbnN0IEZsb2F0UG9pbnQmIGluaXRp
YWxQb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHksIGJvb2wgbWF5SFNjcm9sbCwg
Ym9vbCBtYXlWU2Nyb2xsKQoreworICAgIHN0b3AoKTsKKyAgICBtX3Bvc2l0aW9uID0gaW5pdGlh
bFBvc2l0aW9uOworCisgICAgaWYgKHZlbG9jaXR5LmlzT3JpZ2luKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtYXlIU2Nyb2xsKQorICAgICAgICBtX2hvcml6b250YWxEYXRhID0gUGVy
QXhpc0RhdGEobV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisg
ICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwK
KyAgICAgICAgICAgIG1fcG9zaXRpb24ueCgpLCB2ZWxvY2l0eS54KCkpOworICAgIGlmIChtYXlW
U2Nyb2xsKQorICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IFBlckF4aXNEYXRhKG1fc2Nyb2xsYWJs
ZUFyZWEubWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpLAorICAgICAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCksCisgICAgICAgICAgICBtX3Bvc2l0
aW9uLnkoKSwgdmVsb2NpdHkueSgpKTsKKworICAgIGFuaW1hdGlvblRpbWVyRmlyZWQoKTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKCkKK3sK
KyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
KyAgICBkb3VibGUgZGVsdGFUb05leHRGcmFtZSA9IGNlaWwoKGN1cnJlbnRUaW1lIC0gbV9zdGFy
dFRpbWUpICogZnJhbWVSYXRlKSAvIGZyYW1lUmF0ZSAtIChjdXJyZW50VGltZSAtIG1fc3RhcnRU
aW1lKTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRpb24gPSBmYWxzZTsKKyAgICBpZiAobV9o
b3Jpem9udGFsRGF0YSAmJiBtX2hvcml6b250YWxEYXRhLnZhbHVlKCkuYW5pbWF0ZVNjcm9sbChk
ZWx0YVRvTmV4dEZyYW1lKSkKKyAgICAgICAgY29udGludWVBbmltYXRpb24gPSB0cnVlOworICAg
IGVsc2UKKyAgICAgICAgbV9ob3Jpem9udGFsRGF0YSA9IE51bGxvcHQ7CisgICAgaWYgKG1fdmVy
dGljYWxEYXRhICYmIG1fdmVydGljYWxEYXRhLnZhbHVlKCkuYW5pbWF0ZVNjcm9sbChkZWx0YVRv
TmV4dEZyYW1lKSkKKyAgICAgICAgY29udGludWVBbmltYXRpb24gPSB0cnVlOworICAgIGVsc2UK
KyAgICAgICAgbV92ZXJ0aWNhbERhdGEgPSBOdWxsb3B0OworCisgICAgaWYgKGNvbnRpbnVlQW5p
bWF0aW9uKQorICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChzdGQ6Om1heCht
aW5pbXVtVGltZXJJbnRlcnZhbCwgZGVsdGFUb05leHRGcmFtZSkpOworCisgICAgZG91YmxlIHgg
PSBtX3Bvc2l0aW9uLngoKTsKKyAgICBkb3VibGUgeSA9IG1fcG9zaXRpb24ueSgpOworICAgIGlm
IChtX2hvcml6b250YWxEYXRhKQorICAgICAgICB4ID0gbV9ob3Jpem9udGFsRGF0YS52YWx1ZSgp
LnBvc2l0aW9uKCk7CisgICAgaWYgKG1fdmVydGljYWxEYXRhKQorICAgICAgICB5ID0gbV92ZXJ0
aWNhbERhdGEudmFsdWUoKS5wb3NpdGlvbigpOworICAgIG1fcG9zaXRpb24gPSBGbG9hdFBvaW50
KHgsIHkpOworICAgIG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24oRmxvYXRQb2ludCht
X3Bvc2l0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hMjk4NDViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCkBAIC0wLDAgKzEsMTAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQ29sbGFib3JhIExpbWl0ZWQKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRp
b25LaW5ldGljX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0aW9uS2luZXRpY19oCisKKyNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
VGltZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworCitjbGFzcyBTY3JvbGxBbmltYXRpb25LaW5l
dGljIGZpbmFsOiBwdWJsaWMgU2Nyb2xsQW5pbWF0aW9uIHsKK3ByaXZhdGU6CisgICAgc3RydWN0
IFBlckF4aXNEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gUGhhc2UgeworICAgICAg
ICAgICAgUGhhc2VEZWNlbGVyYXRpbmcsCisgICAgICAgICAgICBQaGFzZU92ZXJzaG9vdGluZywK
KyAgICAgICAgICAgIFBoYXNlRmluaXNoZWQKKyAgICAgICAgfTsKKworICAgICAgICBQZXJBeGlz
RGF0YSgpID0gZGVsZXRlOworICAgICAgICBQZXJBeGlzRGF0YShkb3VibGUgbG93ZXIsIGRvdWJs
ZSB1cHBlciwgZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91YmxlIGluaXRpYWxWZWxvY2l0eSk7
CisKKyAgICAgICAgZG91YmxlIHBvc2l0aW9uKCkgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorCisg
ICAgICAgIGJvb2wgb3ZlcnNob290KGRvdWJsZSBlcXVpbGlicml1bVBvc2l0aW9uLCBkb3VibGUg
aW5pdGlhbFBvc2l0aW9uLCBkb3VibGUgaW5pdGlhbFZlbG9jaXR5KTsKKyAgICAgICAgYm9vbCBh
bmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1lRGVsdGEpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UGhhc2UgbV9waGFzZTsKKworICAgICAgICBkb3VibGUgbV9sb3dlciB7IDAgfTsKKyAgICAgICAg
ZG91YmxlIG1fdXBwZXIgeyAwIH07CisKKyAgICAgICAgZG91YmxlIG1fY29lZjEgeyAwIH07Cisg
ICAgICAgIGRvdWJsZSBtX2NvZWYyIHsgMCB9OworCisgICAgICAgIGRvdWJsZSBtX2VxdWlsaWJy
aXVtUG9zaXRpb24geyAwIH07CisKKyAgICAgICAgZG91YmxlIG1fZWxhcHNlZFRpbWUgeyAwIH07
CisgICAgICAgIGRvdWJsZSBtX3Bvc2l0aW9uIHsgMCB9OworICAgICAgICBkb3VibGUgbV92ZWxv
Y2l0eSB7IDAgfTsKKyAgICB9OworCitwdWJsaWM6CisgICAgU2Nyb2xsQW5pbWF0aW9uS2luZXRp
YyhTY3JvbGxhYmxlQXJlYSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiYmIG5v
dGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRp
b25LaW5ldGljKCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMo
KSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0aWFs
UG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBib29sIG1heUhTY3JvbGwsIGJv
b2wgbWF5VlNjcm9sbCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVk
KCk7CisKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3Np
dGlvbkNoYW5nZWRGdW5jdGlvbjsKKworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBP
cHRpb25hbDxQZXJBeGlzRGF0YT4gbV9ob3Jpem9udGFsRGF0YSB7IE51bGxvcHQgfTsKKyAgICBP
cHRpb25hbDxQZXJBeGlzRGF0YT4gbV92ZXJ0aWNhbERhdGEgeyBOdWxsb3B0IH07CisKKyAgICBk
b3VibGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0aW9u
S2luZXRpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
LmgKaW5kZXggMzJhNGE3ODcuLjVlNjljY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFBvaW50LmgKQEAgLTEyMSw2ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX3ggKiBtX3ggKyBtX3kgKiBtX3k7CiAgICAgfQogCisgICAgYm9vbCBpc09y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1feCA9PSAwLjAgJiYgbV95ID09IDAuMDsgfQorCiAgICAg
V0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludCBjb25zdHJhaW5lZEJldHdlZW4oY29uc3QgRmxvYXRQ
b2ludCYgbWluLCBjb25zdCBGbG9hdFBvaW50JiBtYXgpIGNvbnN0OwogCiAgICAgRmxvYXRQb2lu
dCBzaHJ1bmtUbyhjb25zdCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXgg
MTA0NWM0NC4uZjQ2MjNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUgPGdkay9n
ZGsuaD4KQEAgLTgzLDYgKzg0LDIyIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVl
bEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0
YVg7CiAgICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWZuZGVmIEdUS19BUElfVkVS
U0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgbV9waGFzZSA9IGV2
ZW50LT5pc19zdG9wID8KKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCA6Cisg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgbV9waGFz
ZSA9IGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgbV9kZWx0YVggPT0g
MC4wICYmIG1fZGVsdGFZID09IDAuMCA/CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
RW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZW5kaWYK
KyNlbHNlCisgICAgbV9waGFzZSA9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNl
bmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCisgICAgbV9tb21lbnR1bVBoYXNlID0gUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2VOb25lOworCiAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KHN0YXRp
Y19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55KSk7CiAgICAg
bV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9v
dCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnlfcm9vdCkpOwogICAgIG1fZ3JhbnVsYXJpdHkg
PSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKQEAgLTkzLDQgKzExMCwxMCBAQCBQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAg
bV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQgUGxhdGZvcm1XaGVlbEV2ZW50Ojpzd2lwZVZlbG9jaXR5
KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3dpcGluZyB2ZWxvY2l0eSBpcyBzdG9yZWQgaW4gdGhl
IGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVjbGFyaW5nIGl0LgorICAgIHJldHVybiBpc1RyYW5zaXRp
b25pbmdUb01vbWVudHVtU2Nyb2xsKCkgPyBGbG9hdFBvaW50KG1fd2hlZWxUaWNrc1gsIG1fd2hl
ZWxUaWNrc1kpIDogRmxvYXRQb2ludCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcAppbmRleCAxM2U2MzU0Li5lZTY0OTJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0
ay5jcHAKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29u
c3QgZG91YmxlIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uID0gMTsKIHN0YXRp
YyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5ID0gMjsK
K3N0YXRpYyBjb25zdCBkb3VibGUgc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kcyA9
IDE1MDsKIAogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6
Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKQEAgLTUwLDYgKzUxLDE0
IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayhTY3JvbGxhYmxlQXJlYSYg
c2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAg
ICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0
b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKQogeworICAgIG1fa2lu
ZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4o
bV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAg
ICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CisjaWYgRU5BQkxFKFNNT09USF9T
Q1JPTExJTkcpCisgICAgICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgICAgIG1f
c21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworI2VuZGlmCisg
ICAgfSk7CisKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAoc2Nyb2xsYWJs
ZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCiAgICAgICAgIGVuc3VyZVNtb290aFNjcm9s
bGluZ0FuaW1hdGlvbigpOwpAQCAtNjMsNDggKzcyLDExMSBAQCBTY3JvbGxBbmltYXRvckd0azo6
flNjcm9sbEFuaW1hdG9yR3RrKCkKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpCiB7Ci0g
ICAgaWYgKG1fYW5pbWF0aW9uKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9hbmltYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1h
dGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJlYSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShG
bG9hdFBvaW50JiYgcG9zaXRpb24pIHsKLSAgICAgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRp
b24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAgICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZN
b3ZlKHBvc2l0aW9uKTsKLSAgICAgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyAg
ICBtX3Ntb290aEFuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21v
b3RoPihtX3Njcm9sbGFibGVBcmVhLCBtX2N1cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9p
bnQmJiBwb3NpdGlvbikgeworICAgICAgICB1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50KHBvc2l0
aW9uKSk7CiAgICAgfSk7CiB9CisjZW5kaWYKIAogYm9vbCBTY3JvbGxBbmltYXRvckd0azo6c2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKIHsKKyNpZiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKICAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0
b3JFbmFibGVkKCkgfHwgZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwpCiAgICAg
ICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0
eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAgICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRp
b24oKTsKLSAgICByZXR1cm4gbV9hbmltYXRpb24tPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVs
YXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX3Ntb290aEFuaW1hdGlvbi0+
c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZWxz
ZQorICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRv
ckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9m
ZnNldCkKIHsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQsIHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEu
c2Nyb2xsT3JpZ2luKCkpKTsKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0
aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgIG1fa2luZXRpY0FuaW1hdGlv
bi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xl
YXIoKTsKIAotICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRp
b247Ci0gICAgbV9jdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBub3RpZnlQb3NpdGlv
bkNoYW5nZWQoZGVsdGEpOworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmICht
X3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnNldEN1cnJlbnRQ
b3NpdGlvbihwb3NpdGlvbik7CisjZW5kaWYKKworICAgIHVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9p
bnQocG9zaXRpb24pKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvckd0azo6d2lsbEVuZExpdmVS
ZXNpemUoKQorRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5KCkK
IHsKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNp
YmxlTGVuZ3RocygpOworICAgIGlmIChtX3Njcm9sbEhpc3RvcnkuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gRmxvYXRQb2ludCgpOworCisgICAgZG91YmxlIGZpcnN0ID0gbV9zY3JvbGxIaXN0
b3J5WzBdLnRpbWVzdGFtcCgpOworICAgIGRvdWJsZSBsYXN0ID0gbV9zY3JvbGxIaXN0b3J5LnJi
ZWdpbigpLT50aW1lc3RhbXAoKTsKKworICAgIGlmIChsYXN0ID09IGZpcnN0KQorICAgICAgICBy
ZXR1cm4gRmxvYXRQb2ludCgpOworCisgICAgRmxvYXRQb2ludCBhY2N1bURlbHRhOworICAgIGZv
ciAoY29uc3QgYXV0byYgc2Nyb2xsRXZlbnQgOiBtX3Njcm9sbEhpc3RvcnkpCisgICAgICAgIGFj
Y3VtRGVsdGEgKz0gRmxvYXRQb2ludChzY3JvbGxFdmVudC5kZWx0YVgoKSwgc2Nyb2xsRXZlbnQu
ZGVsdGFZKCkpOworCisgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7CisKKyAgICByZXR1cm4g
RmxvYXRQb2ludChhY2N1bURlbHRhLngoKSAqIC0xMDAwIC8gKGxhc3QgLSBmaXJzdCksIGFjY3Vt
RGVsdGEueSgpICogLTEwMDAgLyAobGFzdCAtIGZpcnN0KSk7CiB9CisKK2Jvb2wgU2Nyb2xsQW5p
bWF0b3JHdGs6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVu
dCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKworICAgIG1fc2Nyb2xsSGlz
dG9yeS5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKFBsYXRmb3JtV2hlZWxFdmVudCYgb3RoZXJFdmVu
dCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBldmVudC50aW1lc3RhbXAoKSAtIG90aGVyRXZl
bnQudGltZXN0YW1wKCkgPiBzY3JvbGxDYXB0dXJlVGhyZXNob2xkTWlsbGlzZWNvbmRzOworICAg
IH0pOworCisgICAgaWYgKGV2ZW50LmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAg
ICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGNvbXB1dGVW
ZWxvY2l0eSgpLCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9zY3Jv
bGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKGV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSkg
eworICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKyAgICAgICAgbV9raW5ldGljQW5p
bWF0aW9uLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgZXZlbnQuc3dpcGVWZWxvY2l0eSgpLCBt
X3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9zY3JvbGxhYmxlQXJlYS52
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBtX3Njcm9sbEhpc3RvcnkuYXBwZW5kKGV2ZW50KTsKKworICAgIHJldHVybiBTY3JvbGxBbmlt
YXRvcjo6aGFuZGxlV2hlZWxFdmVudChldmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JH
dGs6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0
ZVZpc2libGVMZW5ndGhzKCk7CisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBp
ZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVW
aXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OnVw
ZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikKK3sKKyAgICBGbG9hdFNpemUgZGVs
dGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9uOworICAgIG1fY3VycmVudFBvc2l0aW9u
ID0gV1RGTW92ZShwb3NpdGlvbik7CisgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsK
K30KIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCiB7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNp
YmxlTGVuZ3RocygpOworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAgaWYgKG1f
YW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsK
KyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51
cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCiAgICAgaWYgKCFzY3JvbGxiYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTcsOSArMTg5LDExIEBAIHZv
aWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+
dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQot
ICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVM
ZW5ndGhzKCk7CisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFu
aW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlmICghc2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAppbmRleCA3MGU1YjczLi4x
NTMyYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5p
bWF0b3JHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0
b3JHdGsuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JvbGxBbmltYXRvckd0a19oCiAj
ZGVmaW5lIFNjcm9sbEFuaW1hdG9yR3RrX2gKIAorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktp
bmV0aWMuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgi
CiAKQEAgLTQ0LDExICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3JHdGsoKTsKIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBi
b29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92ZXJyaWRlOwogICAgIHZvaWQgc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lk
IHdpbGxFbmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKKworICAgIGJvb2wgaGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwpAQCAtNjMs
MTYgKzY0LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVk
KGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwogICAgIHZvaWQgbG9ja092ZXJsYXlT
Y3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVQ
b3NpdGlvbihGbG9hdFBvaW50JiYpOworCiAgICAgdm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0
aW9uVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAg
dm9pZCBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3Jv
bGxiYXJzT3BhY2l0eSgpOwogCisgICAgRmxvYXRQb2ludCBjb21wdXRlVmVsb2NpdHkoKTsKKwog
I2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xs
aW5nQW5pbWF0aW9uKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBt
X2FuaW1hdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290
aEFuaW1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb25L
aW5ldGljPiBtX2tpbmV0aWNBbmltYXRpb247CisgICAgVmVjdG9yPFBsYXRmb3JtV2hlZWxFdmVu
dD4gbV9zY3JvbGxIaXN0b3J5OwogICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNj
cm9sbGJhciB7IG51bGxwdHIgfTsKICAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Ny
b2xsYmFyIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7
IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hl
ZWxFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaApp
bmRleCAxNTMzMjIyLi40NTAxZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVX
ZWJXaGVlbEV2ZW50LmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0o
R1RLKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYp
OwogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqKTsKKyAgICBOYXRpdmVXZWJXaGVl
bEV2ZW50KEdka0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBo
YXNlIG1vbWVudHVtUGhhc2UpOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIE5hdGl2ZVdlYldo
ZWVsRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCosIGNvbnN0IFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSYgdG9XZWJDb250ZW50LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0mIHRvRGV2aWNlU2NyZWVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAppbmRl
eCA0YmZhMGQ4Li45N2ViZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApAQCAtMTc5LDcg
KzE3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQKICAgICB9
OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JN
KEdUSykKICAgICBlbnVtIFBoYXNlIHsKICAgICAgICAgUGhhc2VOb25lICAgICAgICA9IDAsCiAg
ICAgICAgIFBoYXNlQmVnYW4gICAgICAgPSAxIDw8IDAsCkBAIC0xOTYsNiArMTk2LDggQEAgcHVi
bGljOgogICAgIFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBv
c2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxU
aWNrcywgR3JhbnVsYXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZp
Y2UsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdE
ZWx0YXMsIHVpbnQzMl90IHNjcm9sbENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVu
YWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsK
KyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBv
c2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIHdoZWVsVGlja3MsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxh
cml0eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
CkBAIC0yMTAsNiArMjEyLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGlu
Z0RlbHRhcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsgfQog
ICAgIHVpbnQzMl90IHNjcm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3VudDsg
fQogICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0Rl
bHRhKCkgY29uc3QgeyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7IH0KKyNl
bGlmIFBMQVRGT1JNKEdUSykKKyAgICBQaGFzZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFBoYXNlPihtX3BoYXNlKTsgfQorICAgIFBoYXNlIG1vbWVudHVtUGhhc2UoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxQaGFzZT4obV9tb21lbnR1bVBoYXNlKTsgfQogI2VuZGlm
CiAKICAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwpAQCAtMjMw
LDYgKzIzNSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0
YXM7CiAgICAgdWludDMyX3QgbV9zY3JvbGxDb3VudDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUg
bV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
dWludDMyX3QgbV9waGFzZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsgLy8gUGhhc2UKKyAgICB1aW50
MzJfdCBtX21vbWVudHVtUGhhc2UgeyBQaGFzZTo6UGhhc2VOb25lIH07IC8vIFBoYXNlCiAjZW5k
aWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZl
cnNpb24uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAK
aW5kZXggZWViNzQ0MS4uZGY2MmJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2
ZW50Q29udmVyc2lvbi5jcHAKQEAgLTEyMyw2ICsxMjMsMzMgQEAgV2ViQ29yZTo6UGxhdGZvcm1N
b3VzZUV2ZW50IHBsYXRmb3JtKGNvbnN0IFdlYk1vdXNlRXZlbnQmIHdlYkV2ZW50KQogICAgIHJl
dHVybiBXZWJLaXQyUGxhdGZvcm1Nb3VzZUV2ZW50KHdlYkV2ZW50KTsKIH0KIAorI2lmIFBMQVRG
T1JNKEdUSykKK2lubGluZSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgb3BlcmF0
b3J8PShXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgc2VsZiwgV2ViQ29yZTo6UGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2Ugb3RoZXIpCit7CisgICAgcmV0dXJuIHNlbGYgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4oc2VsZiB8IG90aGVyKTsKK30K
Kworc3RhdGljIFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHRvUGxhdGZvcm1XaGVl
bGV2ZW50UGhhc2UoV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UpCit7CisgICAgV2ViQ29yZTo6
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcmVzdWx0ID0gV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2U6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKKworICAgIGlmIChwaGFzZSAm
IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKQorICAgICAgICByZXN1bHQgfD0gV2Vi
Q29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVn
YW47CisgICAgaWYgKHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlU3RhdGlvbmFy
eSkKKyAgICAgICAgcmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZVN0YXRpb25hcnk7CisgICAgaWYgKHBoYXNlICYgV2ViV2hl
ZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZCkKKyAgICAgICAgcmVzdWx0IHw9IFdlYkNvcmU6
OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7
CisgICAgaWYgKHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQpCisgICAg
ICAgIHJlc3VsdCB8PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VFbmRlZDsKKyAgICBpZiAocGhhc2UgJiBXZWJXaGVlbEV2ZW50OjpQaGFz
ZTo6UGhhc2VDYW5jZWxsZWQpCisgICAgICAgIHJlc3VsdCB8PSBXZWJDb3JlOjpQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQ7CisgICAgaWYg
KHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTWF5QmVnaW4pCisgICAgICAgIHJl
c3VsdCB8PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VNYXlCZWdpbjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwogY2xh
c3MgV2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVudCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVdo
ZWVsRXZlbnQgewogcHVibGljOgogICAgIFdlYktpdDJQbGF0Zm9ybVdoZWVsRXZlbnQoY29uc3Qg
V2ViV2hlZWxFdmVudCYgd2ViRXZlbnQpCkBAIC0xNTgsNiArMTg1LDkgQEAgcHVibGljOgogICAg
ICAgICBtX3Njcm9sbENvdW50ID0gd2ViRXZlbnQuc2Nyb2xsQ291bnQoKTsKICAgICAgICAgbV91
bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYID0gd2ViRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9s
bGluZ0RlbHRhKCkud2lkdGgoKTsKICAgICAgICAgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVs
dGFZID0gd2ViRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkuaGVpZ2h0KCk7Cisj
ZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIG1fcGhhc2UgPSB0b1BsYXRmb3JtV2hlZWxldmVu
dFBoYXNlKHdlYkV2ZW50LnBoYXNlKCkpOworICAgICAgICBtX21vbWVudHVtUGhhc2UgPSB0b1Bs
YXRmb3JtV2hlZWxldmVudFBoYXNlKHdlYkV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CiAjZW5kaWYK
ICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZl
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCmluZGV4IGQy
NTBhMTQuLmYzMTJmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVl
bEV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAK
QEAgLTY3LDYgKzY3LDIwIEBAIFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0eXBl
LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50CiB7CiAgICAgQVNTRVJU
KGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOwogfQorI2VsaWYgUExBVEZPUk0oR1RLKQorV2ViV2hl
ZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlv
biwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIGRlbHRh
LCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlja3MsIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1
bVBoYXNlLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgTW9kaWZpZXJzIG1vZGlmaWVycywgZG91
YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdlYkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1w
KQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xv
YmFsUG9zaXRpb24pCisgICAgLCBtX2RlbHRhKGRlbHRhKQorICAgICwgbV93aGVlbFRpY2tzKHdo
ZWVsVGlja3MpCisgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICwgbV9kaXJl
Y3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCisgICAgLCBtX3BoYXNlKHBoYXNlKQorICAg
ICwgbV9tb21lbnR1bVBoYXNlKG1vbWVudHVtUGhhc2UpCit7CisgICAgQVNTRVJUKGlzV2hlZWxF
dmVudFR5cGUodHlwZSkpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2Rl
KElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApAQCAtODUsNiArOTksOSBAQCB2
b2lkIFdlYldoZWVsRXZlbnQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKICAgICBlbmNvZGVyIDw8IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAgICBl
bmNvZGVyIDw8IG1fc2Nyb2xsQ291bnQ7CiAgICAgZW5jb2RlciA8PCBtX3VuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBlbmNvZGVyIDw8IG1fcGhh
c2U7CisgICAgZW5jb2RlciA8PCBtX21vbWVudHVtUGhhc2U7CiAjZW5kaWYKIH0KIApAQCAtMTE1
LDYgKzEzMiwxMSBAQCBib29sIFdlYldoZWVsRXZlbnQ6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgV2ViV2hlZWxFdmVudCYgdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHQubV9waGFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHQubV9tb21lbnR1bVBoYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcAppbmRleCBiMzY3NjEyLi41Y2Fm
M2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVs
RXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hl
ZWxFdmVudEd0ay5jcHAKQEAgLTM3LDggKzM3LDE0IEBAIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5h
dGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogfQogCitOYXRpdmVXZWJXaGVl
bEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxFdmVu
dDo6UGhhc2UgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCisgICAg
OiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVu
dCwgcGhhc2UsIG1vbWVudHVtUGhhc2UpKQorICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRf
Y29weShldmVudCkpCit7Cit9CisKIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVs
RXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCi0gICAgOiBXZWJXaGVlbEV2
ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVu
dCgpKSkKKyAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVl
bEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCksIGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVt
UGhhc2UoKSkpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVudF9jb3B5KGV2ZW50Lm5hdGl2
ZUV2ZW50KCkpKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9X
ZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZh
Y3RvcnkuY3BwCmluZGV4IDJkNjYzOTMuLmUwNGIyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTE0Myw2ICsxNDMsMjcgQEAgV2ViTW91
c2VFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZl
bnQqIGV2ZW50LCBpbnQgY3UKIAogV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogeworI2lmbmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQorICAgIFdlYldoZWVs
RXZlbnQ6OlBoYXNlIHBoYXNlID0gZ2RrX2V2ZW50X2lzX3Njcm9sbF9zdG9wX2V2ZW50KGV2ZW50
KSA/CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUVuZGVkIDoKKyAgICAgICAg
V2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgZG91YmxlIGRl
bHRhWCwgZGVsdGFZOworICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhldmVudCwgJmRl
bHRhWCwgJmRlbHRhWSk7CisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBldmVudC0+
c2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09USCAmJiBkZWx0YVggPT0gMC4wICYm
IGRlbHRhWSA9PSAwLjAgPworICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRl
ZCA6CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZW5kaWYK
KyNlbHNlCisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBXZWJXaGVlbEV2ZW50OjpQ
aGFzZTo6UGhhc2VDaGFuZ2VkOworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisKKyAgICBy
ZXR1cm4gY3JlYXRlV2ViV2hlZWxFdmVudChldmVudCwgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBo
YXNlOjpQaGFzZU5vbmUpOworfQorCitXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIFdlYldoZWVsRXZlbnQ6OlBo
YXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKQorewogICAgIGRv
dWJsZSB4LCB5LCB4Um9vdCwgeVJvb3Q7CiAgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQs
ICZ4LCAmeSk7CiAgICAgZ2RrX2V2ZW50X2dldF9yb290X2Nvb3JkcyhldmVudCwgJnhSb290LCAm
eVJvb3QpOwpAQCAtMTc5LDEzICsyMDAsMTUgQEAgV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAgIEZsb2F0
U2l6ZSBkZWx0YSh3aGVlbFRpY2tzLndpZHRoKCkgKiBzdGVwLCB3aGVlbFRpY2tzLmhlaWdodCgp
ICogc3RlcCk7CiAKICAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQoeCwgeSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgSW50UG9pbnQoeFJvb3QsIHlSb290KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB3aGVlbFRpY2tzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKTsKKyAgICAgICAg
SW50UG9pbnQoeCwgeSksCisgICAgICAgIEludFBvaW50KHhSb290LCB5Um9vdCksCisgICAgICAg
IGRlbHRhLAorICAgICAgICB3aGVlbFRpY2tzLAorICAgICAgICBwaGFzZSwKKyAgICAgICAgbW9t
ZW50dW1QaGFzZSwKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZl
bnQsCisgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KSwKKyAgICAgICAgZ2RrX2V2ZW50
X2dldF90aW1lKGV2ZW50KSk7CiB9CiAKIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgY29uc3QgV2Vi
Q29yZTo6Q29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMsIFZlY3RvcjxTdHJp
bmc+JiYgY29tbWFuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dl
YkV2ZW50RmFjdG9yeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rv
cnkuaAppbmRleCAyOGI2OTUzLi44ZmU3Y2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgV2ViRXZlbnRGYWN0
b3J5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2
ZW50KGNvbnN0IEdka0V2ZW50KiwgaW50KTsKICAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVh
dGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50Kik7CisgICAgc3RhdGljIFdlYldoZWVsRXZl
bnQgY3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCosIFdlYldoZWVsRXZlbnQ6OlBo
YXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKTsKICAgICBzdGF0aWMgV2Vi
S2V5Ym9hcmRFdmVudCBjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgY29u
c3QgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRzJiwgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5k
cyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBzdGF0aWMgV2ViVG91Y2hFdmVudCBj
cmVhdGVXZWJUb3VjaEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgVmVjdG9yPFdlYlBsYXRmb3JtVG91
Y2hQb2ludD4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmlu
ZGV4IDI2YjcwY2IuLjg2Mzg0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCkBAIC0xODE3LDcgKzE4MTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKIAogICAgIGlmICgh
bV9jdXJyZW50bHlQcm9jZXNzZWRXaGVlbEV2ZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgbV93
aGVlbEV2ZW50UXVldWUuYXBwZW5kKGV2ZW50KTsKLSAgICAgICAgaWYgKG1fd2hlZWxFdmVudFF1
ZXVlLnNpemUoKSA8IHdoZWVsRXZlbnRRdWV1ZVNpemVUaHJlc2hvbGQpCisgICAgICAgIGlmICht
X3doZWVsRXZlbnRRdWV1ZS5zaXplKCkgPCB3aGVlbEV2ZW50UXVldWVTaXplVGhyZXNob2xkICYm
IGNhblNraXBXaGVlbEV2ZW50KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ly8gVGhlIHF1ZXVlIGhhcyB0b28gbWFueSB3aGVlbCBldmVudHMsIHNvIHB1c2ggYSBuZXcgZXZl
bnQuCiAgICAgfQpAQCAtMTg1OCw2ICsxODU4LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5k
V2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKICAgICBtX3Byb2Nlc3MtPmlz
UmVzcG9uc2l2ZShudWxscHRyKTsKIH0KIAorI2lmICFQTEFURk9STShHVEspCitib29sIFdlYlBh
Z2VQcm94eTo6Y2FuU2tpcFdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpCit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUtleWJv
YXJkRXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYg
KCFpc1ZhbGlkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXgg
NjRmNDg2NC4uNDEwYzVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aApAQCAtMTQ2Myw2ICsxNDYzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc05leHRR
dWV1ZWRXaGVlbEV2ZW50KCk7CiAgICAgdm9pZCBzZW5kV2hlZWxFdmVudChjb25zdCBXZWJXaGVl
bEV2ZW50Jik7CisgICAgc3RhdGljIGJvb2wgY2FuU2tpcFdoZWVsRXZlbnQoY29uc3QgV2ViV2hl
ZWxFdmVudCYpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBXZWJDb3JlOjpUcmFj
a2luZ1R5cGUgdG91Y2hFdmVudFRyYWNraW5nVHlwZShjb25zdCBXZWJUb3VjaEV2ZW50JikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xs
ZXIuY3BwCmluZGV4IDdlMTU3N2MuLmE3NGM0NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCkBAIC00MSw2ICs0MSw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZUNvbnRyb2xsZXIo
V2ViUGFnZVByb3h5JiBwYWdlKQogICAgIDogbV9kcmFnR2VzdHVyZShwYWdlKQorICAgICwgbV9z
d2lwZUdlc3R1cmUocGFnZSkKICAgICAsIG1fem9vbUdlc3R1cmUocGFnZSkKIHsKIH0KQEAgLTQ5
LDEzICs1MCwxNCBAQCBib29sIEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChjb25zdCBH
ZGtFdmVudCogZXZlbnQpCiB7CiAgICAgYm9vbCB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgPSBpc1By
b2Nlc3NpbmdHZXN0dXJlcygpOwogICAgIG1fZHJhZ0dlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQp
OworICAgIG1fc3dpcGVHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKICAgICBtX3pvb21HZXN0
dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPnR5cGUgPT0gR0RLX1RP
VUNIX0VORCA/IHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA6IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7
CiB9CiAKIGJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fem9vbUdlc3R1
cmUuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1f
c3dpcGVHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0FjdGl2ZSgpOwogfQog
CiBHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6R2VzdHVyZShHdGtHZXN0dXJlKiBnZXN0dXJl
LCBXZWJQYWdlUHJveHkmIHBhZ2UpCkBAIC03NSwyMCArNzcsNDAgQEAgdm9pZCBHZXN0dXJlQ29u
dHJvbGxlcjo6R2VzdHVyZTo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAg
IGd0a19ldmVudF9jb250cm9sbGVyX2hhbmRsZV9ldmVudChHVEtfRVZFTlRfQ09OVFJPTExFUiht
X2dlc3R1cmUuZ2V0KCkpLCBldmVudCk7CiB9CiAKLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRy
YWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRv
dWJsZSB5KQorc3RhdGljIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IG5ld1Njcm9sbEV2ZW50KGNvbnN0
IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgZGVsdGFYLCBkb3Vi
bGUgZGVsdGFZLCBnYm9vbGVhbiBpc1N0b3ApCiB7Ci0gICAgQVNTRVJUKG1faW5EcmFnKTsKICAg
ICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudChnZGtfZXZlbnRfbmV3KEdES19TQ1JP
TEwpKTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsK
LSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnggPSBtX3N0YXJ0LngoKTsKLSAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLnkgPSBtX3N0YXJ0LnkoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnggPSB4
OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IHk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9s
bC54X3Jvb3QgPSBldmVudC0+dG91Y2gueF9yb290OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwu
eV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRp
cmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOwotICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVs
dGFfeCA9IChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KTsKLSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kgPSAobV9vZmZzZXQueSgpIC0geSkg
LyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9s
bC5kZWx0YV94ID0gZGVsdGFYOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IGRl
bHRhWTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnRvdWNoLnN0YXRl
OwotICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xs
RXZlbnQuZ2V0KCkpKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICBzY3Jv
bGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBpc1N0b3A7CisjZW5kaWYKKyAgICByZXR1cm4gc2Ny
b2xsRXZlbnQ7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpzdGFy
dERyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVCghbV9pbkRyYWcpOwor
ICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gbmV3U2Nyb2xsRXZlbnQoZXZl
bnQsIG1fc3RhcnQueCgpLCBtX3N0YXJ0LnkoKSwgMCwgMCwgRkFMU0UpOworICAgIG1fcGFnZS5o
YW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCksIFdl
YldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhh
c2VOb25lKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5k
bGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAg
IEFTU0VSVChtX2luRHJhZyk7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQg
PSBuZXdTY3JvbGxFdmVudChldmVudCwKKyAgICAgICAgbV9zdGFydC54KCksIG1fc3RhcnQueSgp
LAorICAgICAgICAobV9vZmZzZXQueCgpIC0geCkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCksCisgICAgICAgIChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwKKyAgICAgICAgRkFMU0UpOworICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50
KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBo
YXNlOjpQaGFzZUNoYW5nZWQsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUpKTsKIH0K
IAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZVRhcChjb25zdCBH
ZGtFdmVudCogZXZlbnQpCkBAIC0xMjgsNiArMTUwLDcgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxl
cjo6RHJhZ0dlc3R1cmU6OmJlZ2luKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgs
IGQKICAgICB1bnNpZ25lZCBkZWxheTsKICAgICBnX29iamVjdF9nZXQoZ3RrX3dpZGdldF9nZXRf
c2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUiLCAmZGVsYXksIG51bGxwdHIp
OwogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RhcnRPbmVTaG90KGRlbGF5
IC8gMTAwMC4wKTsKKyAgICBkcmFnR2VzdHVyZS0+c3RhcnREcmFnKGd0a19nZXN0dXJlX2dldF9s
YXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7CiB9CiAKIHZvaWQgR2VzdHVyZUNvbnRyb2xs
ZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUg
eCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCkBAIC0xNDksMTEgKzE3MiwxNCBAQCB2
b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0dXJlKiBk
cmFnR2VzdHVyZSwgZG91YmxlIHgsCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVy
ZTo6ZW5kKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVu
Y2UsIEd0a0dlc3R1cmUqIGdlc3R1cmUpCiB7CiAgICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNz
VGltZW91dC5zdG9wKCk7CisgICAgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdl
c3R1cmUsIHNlcXVlbmNlKSkgeworICAgICAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVy
ZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcpIHsKICAgICAgICAgZHJhZ0dlc3R1cmUtPmhh
bmRsZVRhcChndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOwog
ICAgICAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNF
X0RFTklFRCk7Ci0gICAgfSBlbHNlIGlmICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShn
ZXN0dXJlLCBzZXF1ZW5jZSkpCi0gICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJl
LCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsKKyAgICB9CiB9CiAKIHZvaWQgR2VzdHVyZUNv
bnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpsb25nUHJlc3NGaXJlZCgpCkBAIC0xNzIsNiArMTk4LDMw
IEBAIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1cmUoV2ViUGFnZVBy
b3h5JiBwYWdlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCks
ICJlbmQiLCBHX0NBTExCQUNLKGVuZCksIHRoaXMpOwogfQogCit2b2lkIEdlc3R1cmVDb250cm9s
bGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0TW9tZW50dW1TY3JvbGwoY29uc3QgR2RrRXZlbnQqIGV2
ZW50LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZKQoreworICAgIEdVbmlxdWVQ
dHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gbmV3U2Nyb2xsRXZlbnQoZXZlbnQsIGV2ZW50LT50
b3VjaC54LCBldmVudC0+dG91Y2gueSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVksIFRSVUUpOworICAg
IG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQu
Z2V0KCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBo
YXNlOjpQaGFzZUJlZ2FuKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2Vz
dHVyZTo6c3dpcGUoU3dpcGVHZXN0dXJlKiBzd2lwZUdlc3R1cmUsIGRvdWJsZSB2ZWxvY2l0eVgs
IGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCit7CisgICAgR2RrRXZlbnRT
ZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVu
Y2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKKyAgICBpZiAoIWd0a19nZXN0dXJlX2hh
bmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVuY2UsIEdUS19F
VkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAgIHN3aXBlR2VzdHVyZS0+c3RhcnRNb21lbnR1
bVNjcm9sbChndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSksIHZl
bG9jaXR5WCwgdmVsb2NpdHlZKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVy
ZTo6U3dpcGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IEdlc3R1cmUoZ3RrX2dl
c3R1cmVfc3dpcGVfbmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKK3sKKyAgICBndGtfZ2Vz
dHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RLX0dFU1RVUkVfU0lOR0xFKG1fZ2VzdHVyZS5n
ZXQoKSksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0
KCksICJzd2lwZSIsIEdfQ0FMTEJBQ0soc3dpcGUpLCB0aGlzKTsKK30KKwogSW50UG9pbnQgR2Vz
dHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpjZW50ZXIoKSBjb25zdAogewogICAgIGRvdWJs
ZSB4LCB5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJl
Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJv
bGxlci5oCmluZGV4IDg2NzkyZGYuLmU5NjAzMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKQEAgLTY3LDYgKzY3LDggQEAgcHJpdmF0
ZToKICAgICAgICAgRHJhZ0dlc3R1cmUoV2ViUGFnZVByb3h5Jik7CiAKICAgICBwcml2YXRlOgor
ICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIGRyYWcgc3RhcnRlZCwgYWxsb3dpbmcgdG8gc3RvcCBr
aW5ldGljIGRlY2VsZXJhdGlvbi4KKyAgICAgICAgdm9pZCBzdGFydERyYWcoY29uc3QgR2RrRXZl
bnQqKTsKICAgICAgICAgdm9pZCBoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiwgZG91YmxlIHgs
IGRvdWJsZSB5KTsKICAgICAgICAgdm9pZCBoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqKTsKICAg
ICAgICAgdm9pZCBsb25nUHJlc3NGaXJlZCgpOwpAQCAtODIsNiArODQsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgYm9vbCBtX2luRHJhZzsKICAgICB9OwogCisgICAgY2xhc3MgU3dpcGVHZXN0dXJl
IGZpbmFsIDogcHVibGljIEdlc3R1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3dpcGVHZXN0
dXJlKFdlYlBhZ2VQcm94eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzdGFydE1v
bWVudHVtU2Nyb2xsKGNvbnN0IEdka0V2ZW50KiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZl
bG9jaXR5WSk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUoU3dpcGVHZXN0dXJlKiwgZG91
YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSopOworICAgIH07CisK
ICAgICBjbGFzcyBab29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIFpvb21HZXN0dXJlKFdlYlBhZ2VQcm94eSYpOwpAQCAtMTAxLDYgKzExMyw3
IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIERyYWdHZXN0dXJlIG1fZHJhZ0dlc3R1cmU7Cisg
ICAgU3dpcGVHZXN0dXJlIG1fc3dpcGVHZXN0dXJlOwogICAgIFpvb21HZXN0dXJlIG1fem9vbUdl
c3R1cmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQ
cm94eUd0ay5jcHAKaW5kZXggMmRiYWUwNS4uNjBmNWQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtMTQ4LDQgKzE0OCwxMCBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0Q2VudGVyRm9yWm9vbUdlc3R1cmUoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGNlbnRlckluVmlldwogfQogI2VuZGlmCiAKK2Jvb2wgV2ViUGFnZVByb3h5
OjpjYW5Ta2lwV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBy
ZXR1cm4gZXZlbnQucGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZAor
ICAgICAgICB8fCBldmVudC5tb21lbnR1bVBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6
OlBoYXNlQmVnYW47Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotLSAKMi43LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281962</attachid>
            <date>2016-06-23 23:58:49 -0700</date>
            <delta_ts>2016-06-24 07:01:30 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>47841</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZjE2ZTg1Li4zMGZiOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTYtMDYtMTUgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMg
c2Nyb2xsaW5nIGFuaW1hdGlvbiBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGlu
ZzsgaXQgaXMgYmFzZWQgb24gR1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlw
ZS4KKworICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5k
IHN3aXBlIHZlbG9jaXR5IHRvIFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRp
bmcgb24gd2hldGhlciB0aGUgc2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBh
IHN3aXBlLCB0aGUgc2Nyb2xsIGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAg
dGhlIHN3aXBlIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3Ig
dXNlIHRoZSBvbmUgZnJvbSB0aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAg
ICAgbW9tZW50dW0gc2Nyb2xsaW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OnVzZUxhdGNoZWRFdmVudEVsZW1lbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNs
YW1wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNE
YXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5l
dGljOjpQZXJBeGlzRGF0YTo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnNldEN1cnJlbnRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0UG9pbnQ6OmlzT3JpZ2luKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVl
bEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxh
dGZvcm1XaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6
c3dpcGVWZWxvY2l0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRv
ckd0ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21vb3Ro
U2Nyb2xsaW5nQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3Rr
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6Y29tcHV0ZVZlbG9jaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
R3RrOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
R3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6dXBkYXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
dGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaDoKKwogMjAxNi0wNi0yMyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NvdXBdIENsZWFuIHVwIFNv
Y2tldFN0cmVhbUhhbmRsZSBzb3VwIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDc0ZTUxOTUuLjJjZjA4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBA
IC03Nyw2ICs3Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGxvYWRlci9z
b3VwL1N1YnJlc291cmNlTG9hZGVyU291cC5jcHAKIAogICAgIHBsYXRmb3JtL0tpbGxSaW5nTm9u
ZS5jcHAKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcAogCiAgICAgcGxh
dGZvcm0vYXVkaW8vZ2xpYi9BdWRpb0J1c0dMaWIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggMDcxMzU1Yy4uNGMxYzkyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTUzLDcgKzUz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTY3JvbGxCeVBpeGVsV2hlZWxFdmVu
dCwKICAgICB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBlbnVtIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIDogdWludDhf
dCB7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAgICAgICAgPSAwLAogICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuICAgICAgID0gMSA8PCAwLApAQCAtMTYw
LDEyICsxNjAsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHNob3VsZENv
bnNpZGVyTGF0Y2hpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBzaG91bGRSZXNldExhdGNoaW5n
KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7Ci0gICAgICAgIGJv
b2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogI2Vsc2UKICAgICAg
ICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyAgICAgICAg
Ym9vbCBpc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1Ry
YW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAgICAgRmxvYXRQb2ludCBzd2lwZVZlbG9jaXR5KCkgY29uc3Q7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQs
IFdQQVJBTSwgTFBBUkFNLCBib29sIGlzTW91c2VIV2hlZWwpOwogICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnQoSFdORCwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYXRpb24pOwpAQCAtMTgwLDEwICsxODcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBmbG9hdCBtX3doZWVsVGlja3NZOwogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFu
dWxhcml0eSBtX2dyYW51bGFyaXR5OwogICAgICAgICBib29sIG1fZGlyZWN0aW9uSW52ZXJ0ZWRG
cm9tRGV2aWNlOworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCisgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2UgeyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZU5vbmUgfTsKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9tb21lbnR1bVBoYXNl
IHsgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CisjZW5kaWYKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7Ci0gICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2U7Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlIG1fbW9tZW50dW1QaGFzZTsKICAgICAgICAgdW5zaWduZWQgbV9zY3JvbGxDb3Vu
dDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYOwogICAgICAg
ICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVk7CkBAIC0yMTIsNyArMjIxLDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZUVuZGVkOwogICAgIH0KKyNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6
OmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkICYmIG1fbW9tZW50dW1QaGFz
ZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdGlvbi5oCmluZGV4IDM5Mjk5OTcuLjJlNWY2M2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCkBAIC0zNiwxMCArMzYsMTAgQEAgY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxBbmltYXRpb24gewogcHVibGljOgogICAgIHZp
cnR1YWwgflNjcm9sbEFuaW1hdGlvbigpIHsgfTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCAvKiBzdGVwICovLCBmbG9hdCAvKiBtdWx0
aXBsaWVyICovKSB7IHJldHVybiB0cnVlOyB9OwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmxlTGVuZ3RocygpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgeyB9OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIHsgfTsKICAgICB2aXJ0dWFs
IHZvaWQgc2VydmljZUFuaW1hdGlvbigpIHsgfTsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDY4M2VjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKQEAgLTAsMCAr
MSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMu
aCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisKKy8qCisgKiBQZXJBeGlzRGF0YSBpcyBhIHBvcnQgb2YgR3RrS2luZXRpY1Njcm9s
bGluZyBhcyBvZiBHVEsrIDMuMjAsCisgKiBtaW1pY2tpbmcgaXRzIEFQSSBhbmQgaXRzIGJlaGF2
aW9yLgorICoKKyAqIEFsbCBvdXIgY3VydmVzIGFyZSBzZWNvbmQgZGVncmVlIGxpbmVhciBkaWZm
ZXJlbnRpYWwgZXF1YXRpb25zLCBhbmQKKyAqIHNvIHRoZXkgY2FuIGFsd2F5cyBiZSB3cml0dGVu
IGFzIGxpbmVhciBjb21iaW5hdGlvbnMgb2YgMiBiYXNlCisgKiBzb2x1dGlvbnMuIGNvZWYxIGFu
ZCBjb2VmMiBhcmUgdGhlIGNvZWZmaWNpZW50cyB0byB0aGVzZSB0d28gYmFzZQorICogc29sdXRp
b25zLCBhbmQgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24gYW5kIHZlbG9j
aXR5LgorICoKKyAqIEluIHRoZSBjYXNlIG9mIHNpbXBsZSBkZWNlbGVyYXRpb24sIHRoZSBkaWZm
ZXJlbnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHknJyA9IC1teScKKyAqCisgKiBXaXRoIG0g
dGhlIHJlc2lzdGVuY2UgZmFjdG9yLiBGb3IgdGhpcyB3ZSB1c2UgdGhlIGZvbGxvd2luZyAyCisg
KiBiYXNlIHNvbHV0aW9uczoKKyAqCisgKiAgIGYxKHgpID0gMQorICogICBmMih4KSA9IGV4cCgt
bXgpCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygb3ZlcnNob290LCB0aGUgZGlmZmVyZW50aWFsIGVx
dWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknIC0ga3kKKyAqCisgKiBXaXRoIG0gdGhlIHJl
c2lzdGFuY2UsIGFuZCBrIHRoZSBzcHJpbmcgc3RpZmZuZXNzIGNvbnN0YW50LiBXZSBsZXQKKyAq
IGsgPSBtXjIgLyA0LCBzbyB0aGF0IHRoZSBzeXN0ZW0gaXMgY3JpdGljYWxseSBkYW1wZWQgKGll
LCByZXR1cm5zIHRvIGl0cworICogZXF1aWxpYnJpdW0gcG9zaXRpb24gYXMgcXVpY2tseSBhcyBw
b3NzaWJsZSwgd2l0aG91dCBvc2NpbGxhdGluZyksIGFuZCBvZmZzZXQKKyAqIHRoZSB3aG9sZSB0
aGluZywgc3VjaCB0aGF0IHRoZSBlcXVpbGlicml1bSBwb3NpdGlvbiBpcyBhdCAwLiBUaGlzIGdp
dmVzIHRoZQorICogYmFzZSBzb2x1dGlvbnMKKyAqCisgKiAgIGYxKHgpID0gZXhwKC1teCAvIDIp
CisgKiAgIGYyKHgpID0gdCBleHAoLW14IC8gMikKKyAqLworCitzdGF0aWMgY29uc3QgZG91Ymxl
IGRlY2VsRnJpY3Rpb24gPSA0Oworc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsK
K3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwgPSAuMDAxOworCitzdGF0
aWMgaW5saW5lIGRvdWJsZSBjbGFtcChkb3VibGUgeCwgZG91YmxlIGxvdywgZG91YmxlIGhpZ2gp
Cit7CisgICAgQVNTRVJUKGxvdyA8PSBoaWdoKTsKKworICAgIHJldHVybiAoeCA+IGhpZ2gpID8g
aGlnaCA6ICgoeCA8IGxvdykgPyBsb3cgOiB4KTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoZG91Ymxl
IGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRvdWJsZSBpbml0
aWFsVmVsb2NpdHkpCisgICAgOiBtX2xvd2VyKGxvd2VyKQorICAgICwgbV91cHBlcih1cHBlcikK
KyAgICAsIG1fY29lZjEoaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbiArIGluaXRpYWxQ
b3NpdGlvbikKKyAgICAsIG1fY29lZjIoLWluaXRpYWxWZWxvY2l0eSAvIGRlY2VsRnJpY3Rpb24p
CisgICAgLCBtX3Bvc2l0aW9uKGNsYW1wKGluaXRpYWxQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKSkK
KyAgICAsIG1fdmVsb2NpdHkoaW5pdGlhbFBvc2l0aW9uIDwgbG93ZXIgfHwgaW5pdGlhbFBvc2l0
aW9uID4gdXBwZXIgPyAwIDogaW5pdGlhbFZlbG9jaXR5KQoreworfQorCitib29sIFNjcm9sbEFu
aW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjphbmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1lRGVs
dGEpCit7CisgICAgbV9lbGFwc2VkVGltZSArPSB0aW1lRGVsdGE7CisKKyAgICBkb3VibGUgZXhw
b25lbnRpYWxQYXJ0ID0gZXhwKC1kZWNlbEZyaWN0aW9uICogbV9lbGFwc2VkVGltZSk7CisgICAg
bV9wb3NpdGlvbiA9IG1fY29lZjEgKyBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0OworICAgIG1f
dmVsb2NpdHkgPSAtZGVjZWxGcmljdGlvbiAqIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisK
KyAgICBpZiAobV9wb3NpdGlvbiA8IG1fbG93ZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1f
bG93ZXI7CisgICAgICAgIG1fdmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAobV9wb3NpdGlv
biA+IG1fdXBwZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1fdXBwZXI7CisgICAgICAgIG1f
dmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAoZmFicyhtX3ZlbG9jaXR5KSA8IDEpIHsKKyAg
ICAgICAgbV9wb3NpdGlvbiA9IHJvdW5kKG1fcG9zaXRpb24pOworICAgICAgICBtX3ZlbG9jaXR5
ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV92ZWxvY2l0eTsKK30KKworU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xs
YWJsZUFyZWEsIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogU2Nyb2xsQW5pbWF0aW9uKHNjcm9sbGFibGVBcmVh
KQorICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKKyAgICAsIG1faG9yaXpvbnRhbERhdGEoMCwgMCwgMCwg
MCkKKyAgICAsIG1fdmVydGljYWxEYXRhKDAsIDAsIDAsIDApCisgICAgLCBtX2FuaW1hdGlvblRp
bWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9uVGltZXJGaXJlZCkK
K3sKK30KKworU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6flNjcm9sbEFuaW1hdGlvbktpbmV0aWMo
KQoreworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0b3AoKQoreworICAgIG1f
YW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6
OnN0YXJ0KGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRQb2lu
dCYgdmVsb2NpdHksIGJvb2wgbWF5SFNjcm9sbCwgYm9vbCBtYXlWU2Nyb2xsKQoreworICAgIHN0
b3AoKTsKKworICAgIGlmICghdmVsb2NpdHkueCgpICYmICF2ZWxvY2l0eS55KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtYXlIU2Nyb2xsKQorICAgICAgICBtX2hvcml6b250YWxEYXRh
ID0gUGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54
KCksCisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigp
LngoKSwKKyAgICAgICAgICAgIGluaXRpYWxQb3NpdGlvbi54KCksIHZlbG9jaXR5LngoKSk7Cisg
ICAgaWYgKG1heVZTY3JvbGwpCisgICAgICAgIG1fdmVydGljYWxEYXRhID0gUGVyQXhpc0RhdGEo
bV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCksCisgICAgICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSwKKyAgICAgICAg
ICAgIGluaXRpYWxQb3NpdGlvbi55KCksIHZlbG9jaXR5LnkoKSk7CisKKyAgICBhbmltYXRpb25U
aW1lckZpcmVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9u
VGltZXJGaXJlZCgpCit7CisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCk7CisgICAgZG91YmxlIGRlbHRhVG9OZXh0RnJhbWUgPSBjZWlsKChjdXJy
ZW50VGltZSAtIG1fc3RhcnRUaW1lKSAqIGZyYW1lUmF0ZSkgLyBmcmFtZVJhdGUgLSAoY3VycmVu
dFRpbWUgLSBtX3N0YXJ0VGltZSk7CisKKyAgICBib29sIGNvbnRpbnVlQW5pbWF0aW9uID0gZmFs
c2U7CisgICAgaWYgKG1faG9yaXpvbnRhbERhdGEuYW5pbWF0ZVNjcm9sbChkZWx0YVRvTmV4dEZy
YW1lKSkKKyAgICAgICAgY29udGludWVBbmltYXRpb24gPSB0cnVlOworICAgIGlmIChtX3ZlcnRp
Y2FsRGF0YS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQorICAgICAgICBjb250aW51
ZUFuaW1hdGlvbiA9IHRydWU7CisKKyAgICBpZiAoY29udGludWVBbmltYXRpb24pCisgICAgICAg
IG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6bWF4KG1pbmltdW1UaW1lckludGVy
dmFsLCBkZWx0YVRvTmV4dEZyYW1lKSk7CisKKyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1
bmN0aW9uKEZsb2F0UG9pbnQobV9ob3Jpem9udGFsRGF0YS5wb3NpdGlvbigpLCBtX3ZlcnRpY2Fs
RGF0YS5wb3NpdGlvbigpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTY0YmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCkBAIC0wLDAgKzEs
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTY3JvbGxBbmltYXRpb25LaW5ldGljX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0aW9u
S2luZXRpY19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0aW9uLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTY3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYyBmaW5h
bDogcHVibGljIFNjcm9sbEFuaW1hdGlvbiB7Citwcml2YXRlOgorICAgIGNsYXNzIFBlckF4aXNE
YXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBlckF4aXNEYXRhKGRvdWJsZSBsb3dlciwgZG91
YmxlIHVwcGVyLCBkb3VibGUgaW5pdGlhbFBvc2l0aW9uLCBkb3VibGUgaW5pdGlhbFZlbG9jaXR5
KTsKKworICAgICAgICBkb3VibGUgcG9zaXRpb24oKSB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisK
KyAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1lRGVsdGEpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgZG91YmxlIG1fbG93ZXIgeyAwIH07CisgICAgICAgIGRvdWJsZSBtX3Vw
cGVyIHsgMCB9OworCisgICAgICAgIGRvdWJsZSBtX2NvZWYxIHsgMCB9OworICAgICAgICBkb3Vi
bGUgbV9jb2VmMiB7IDAgfTsKKworICAgICAgICBkb3VibGUgbV9lbGFwc2VkVGltZSB7IDAgfTsK
KyAgICAgICAgZG91YmxlIG1fcG9zaXRpb24geyAwIH07CisgICAgICAgIGRvdWJsZSBtX3ZlbG9j
aXR5IHsgMCB9OworICAgIH07CisKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRpb25LaW5ldGlj
KFNjcm9sbGFibGVBcmVhJiwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24pOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdGlv
bktpbmV0aWMoKTsKKworICAgIHZvaWQgc3RhcnQoY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbFBv
c2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgYm9vbCBtYXlIU2Nyb2xsLCBib29s
IG1heVZTY3JvbGwpOworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOworICAg
IHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOworCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEZs
b2F0UG9pbnQmJik+IG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb247CisKKyAgICBQZXJB
eGlzRGF0YSBtX2hvcml6b250YWxEYXRhOworICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRh
OworCisgICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9OworICAgIFRpbWVyIG1fYW5pbWF0aW9u
VGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxB
bmltYXRpb25LaW5ldGljX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggMTA0NWM0NC4uYzMzNzg4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0
ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRl
ICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTgzLDYgKzg0LDIwIEBA
IFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBl
dmVudCkKICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7CiAgICAgbV93aGVlbFRpY2tzWSA9
IG1fZGVsdGFZOwogCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMjAsIDApCisgICAgbV9waGFzZSA9IGV2ZW50LT5pc19zdG9wID8KKyAgICAgICAg
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCA6CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgbV9waGFzZSA9IGV2ZW50LT5kaXJlY3Rpb24gPT0g
R0RLX1NDUk9MTF9TTU9PVEggJiYgIW1fZGVsdGFYICYmICFtX2RlbHRhWSA/CisgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNlbHNlCisgICAgbV9waGFzZSA9IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCiAgICAgbV9w
b3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGV2ZW50LT55KSk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHN0YXRp
Y19jYXN0PGludD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnlfcm9v
dCkpOwogICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKQEAgLTkz
LDQgKzEwOCwxMCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChHZGtF
dmVudFNjcm9sbCogZXZlbnQpCiAgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQgUGxhdGZvcm1X
aGVlbEV2ZW50Ojpzd2lwZVZlbG9jaXR5KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3dpcGluZyB2
ZWxvY2l0eSBpcyBzdG9yZWQgaW4gdGhlIGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVjbGFyaW5nIGl0
LgorICAgIHJldHVybiBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgPyBGbG9hdFBv
aW50KG1fd2hlZWxUaWNrc1gsIG1fd2hlZWxUaWNrc1kpIDogRmxvYXRQb2ludCgpOworfQorCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JH
dGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNw
cAppbmRleCAxM2U2MzU0Li4yYmE4OWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvckd0ay5oIgogCisjaW5jbHVkZSAi
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvblNtb290
aC5oIgogI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWUuaCIKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29u
c3QgZG91YmxlIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uID0gMTsKIHN0YXRp
YyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5ID0gMjsK
K3N0YXRpYyBjb25zdCBkb3VibGUgc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kcyA9
IDE1MDsKIAogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6
Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKQEAgLTUwLDYgKzUyLDE0
IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayhTY3JvbGxhYmxlQXJlYSYg
c2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAg
ICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0
b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKQogeworICAgIG1fa2lu
ZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4o
bV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAg
ICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CisjaWYgRU5BQkxFKFNNT09USF9T
Q1JPTExJTkcpCisgICAgICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgICAgIG1f
c21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworI2VuZGlmCisg
ICAgfSk7CisKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAoc2Nyb2xsYWJs
ZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCiAgICAgICAgIGVuc3VyZVNtb290aFNjcm9s
bGluZ0FuaW1hdGlvbigpOwpAQCAtNjMsNDggKzczLDEwOCBAQCBTY3JvbGxBbmltYXRvckd0azo6
flNjcm9sbEFuaW1hdG9yR3RrKCkKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpCiB7Ci0g
ICAgaWYgKG1fYW5pbWF0aW9uKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9hbmltYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1h
dGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJlYSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShG
bG9hdFBvaW50JiYgcG9zaXRpb24pIHsKLSAgICAgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRp
b24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAgICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZN
b3ZlKHBvc2l0aW9uKTsKLSAgICAgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyAg
ICBtX3Ntb290aEFuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21v
b3RoPihtX3Njcm9sbGFibGVBcmVhLCBtX2N1cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9p
bnQmJiBwb3NpdGlvbikgeworICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9u
KSk7CiAgICAgfSk7CiB9CisjZW5kaWYKIAorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQog
Ym9vbCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllcikKIHsKICAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JF
bmFibGVkKCkgfHwgZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwpCiAgICAgICAg
IHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwg
c3RlcCwgbXVsdGlwbGllcik7CiAKICAgICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24o
KTsKLSAgICByZXR1cm4gbV9hbmltYXRpb24tPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJp
dHksIHN0ZXAsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX3Ntb290aEFuaW1hdGlvbi0+c2Ny
b2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiB9CisjZW5k
aWYKIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9u
ID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQsIHRvRmxv
YXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkpKTsKLSAgICBpZiAobV9hbmlt
YXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24p
OworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOworICAgIG1fc2Nyb2xsSGlzdG9yeS5j
bGVhcigpOwogCi0gICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3Np
dGlvbjsKLSAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZChkZWx0YSk7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgaWYg
KG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVu
dFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNlbmRpZgorCisgICAgdXBkYXRlUG9zaXRpb24oV1RGTW92
ZShwb3NpdGlvbikpOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJl
c2l6ZSgpCitGbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yR3RrOjpjb21wdXRlVmVsb2NpdHkoKQog
ewotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2li
bGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc2Nyb2xsSGlzdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBkb3VibGUgZmlyc3QgPSBtX3Njcm9sbEhpc3RvcnlbMF0udGlt
ZXN0YW1wKCk7CisgICAgZG91YmxlIGxhc3QgPSBtX3Njcm9sbEhpc3RvcnkucmJlZ2luKCktPnRp
bWVzdGFtcCgpOworCisgICAgaWYgKGxhc3QgPT0gZmlyc3QpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBGbG9hdFBvaW50IGFjY3VtRGVsdGE7CisgICAgZm9yIChjb25zdCBhdXRvJiBzY3Jv
bGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9yeSkKKyAgICAgICAgYWNjdW1EZWx0YSArPSBGbG9hdFBv
aW50KHNjcm9sbEV2ZW50LmRlbHRhWCgpLCBzY3JvbGxFdmVudC5kZWx0YVkoKSk7CisKKyAgICBt
X3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKworICAgIHJldHVybiBGbG9hdFBvaW50KGFjY3VtRGVs
dGEueCgpICogLTEwMDAgLyAobGFzdCAtIGZpcnN0KSwgYWNjdW1EZWx0YS55KCkgKiAtMTAwMCAv
IChsYXN0IC0gZmlyc3QpKTsKIH0KKworYm9vbCBTY3JvbGxBbmltYXRvckd0azo6aGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIG1fa2luZXRp
Y0FuaW1hdGlvbi0+c3RvcCgpOworCisgICAgbV9zY3JvbGxIaXN0b3J5LnJlbW92ZUFsbE1hdGNo
aW5nKFsmZXZlbnRdIChQbGF0Zm9ybVdoZWVsRXZlbnQmIG90aGVyRXZlbnQpIC0+IGJvb2wgewor
ICAgICAgICByZXR1cm4gZXZlbnQudGltZXN0YW1wKCkgLSBvdGhlckV2ZW50LnRpbWVzdGFtcCgp
ID4gc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kczsKKyAgICB9KTsKKworICAgIGlm
IChldmVudC5pc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICAvLyBXZSBkb24n
dCBuZWVkIHRvIGFkZCB0aGUgZXZlbnQgdG8gdGhlIGhpc3RvcnkgYXMgaXRzIGRlbHRhIHdpbGwg
YmUgKDAsIDApLgorICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRpb25LaW5ldGljKj4o
bV9raW5ldGljQW5pbWF0aW9uLmdldCgpKS0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGNvbXB1
dGVWZWxvY2l0eSgpLCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9z
Y3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGlmIChldmVudC5pc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkp
IHsKKyAgICAgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7CisgICAgICAgIHN0YXRpY19jYXN0
PFNjcm9sbEFuaW1hdGlvbktpbmV0aWMqPihtX2tpbmV0aWNBbmltYXRpb24uZ2V0KCkpLT5zdGFy
dChtX2N1cnJlbnRQb3NpdGlvbiwgZXZlbnQuc3dpcGVWZWxvY2l0eSgpLCBtX3Njcm9sbGFibGVB
cmVhLmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9s
bGJhcigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9zY3JvbGxIaXN0
b3J5LmFwcGVuZChldmVudCk7CisKKyAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdo
ZWVsRXZlbnQoZXZlbnQpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2
ZVJlc2l6ZSgpCit7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOworCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgaWYgKG1fc21vb3RoQW5p
bWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMo
KTsKICNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp1cGRhdGVQb3NpdGlvbihG
bG9hdFBvaW50JiYgcG9zaXRpb24pCit7CisgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24g
LSBtX2N1cnJlbnRQb3NpdGlvbjsKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdURk1vdmUocG9z
aXRpb24pOworICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7Cit9CiAKIHZvaWQgU2Ny
b2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsK
KwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgIGlmIChtX2FuaW1hdGlvbikKLSAg
ICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc21v
b3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxl
bmd0aHMoKTsKICNlbmRpZgogICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3LDkgKzE4NywxMSBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yR3RrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIAog
dm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikKIHsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVM
ZW5ndGhzKCk7CisKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKLSAgICBpZiAobV9hbmlt
YXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworICAg
IGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnVwZGF0
ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5kaWYKICAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKaW5kZXggNzBlNWI3My4uZGY1NzA3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKQEAgLTQ2
LDkgKzQ2LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJ
TkcpCiAgICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFy
aXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKSBvdmVycmlkZTsKKyNlbmRpZgogICAg
IHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBv
dmVycmlkZTsKICAgICB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7Ci0jZW5kaWYK
KworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciop
IG92ZXJyaWRlOwpAQCAtNjMsMTYgKzY1LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlD
b250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwogICAg
IHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92ZXJyaWRlOwog
CisgICAgdm9pZCB1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYpOworCiAgICAgdm9pZCBvdmVy
bGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2hvd092ZXJsYXlT
Y3JvbGxiYXJzKCk7CiAgICAgdm9pZCBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKICAgICB2b2lk
IHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwogCisgICAgRmxvYXRQb2ludCBjb21w
dXRlVmVsb2NpdHkoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIHZvaWQg
ZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xs
QW5pbWF0aW9uPiBtX3Ntb290aEFuaW1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxBbmltYXRpb24+IG1fa2luZXRpY0FuaW1hdGlvbjsKKyAgICBWZWN0b3I8UGxhdGZv
cm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhpc3Rvcnk7CiAgICAgU2Nyb2xsYmFyKiBtX2hvcml6b250
YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwogICAgIFNjcm9sbGJhciogbV92ZXJ0aWNh
bE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07CiAgICAgYm9vbCBtX292ZXJsYXlTY3JvbGxi
YXJzTG9ja2VkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2ZTIyNDZkLi5lNThiNDdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTYtMDYtMTUgIEFkcmllbiBQbGF6YXMgIDxhcGxh
emFzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIG5v
dGlvbiBvZiBwaGFzZSBhbmQgbW9tZW50dW0gcGhhc2UgdG8gV2ViV2hlZWxFdmVudC4KKworICAg
ICAgICBNYWtlIFdlYldoZWVsRXZlbnQgbWFuYWdlIHRoZSAnaXNfc3RvcCcgYXR0cmlidXRlIG9m
IEdka0V2ZW50U2Nyb2xsIHRvIGNyZWF0ZSB0aGUgY29ycmVzcG9uZGluZyBXZWJXaGVlbEV2ZW50
CisgICAgICAgIHdpdGggdGhlIGNvcnJlY3QgcGhhc2VzIGFuZCBkZWx0YXMuCisKKyAgICAgICAg
TWFrZSBHZXN0dXJlQ29udHJvbGxlciBtYW5hZ2Ugc3dpcGVzIHRvIGNyZWF0ZSB0aGUgY29ycmVz
cG9uZGluZyBXZWJXaGVlbEV2ZW50IHdpdGggdGhlIGNvcnJlY3QgcGhhc2VzIGFuZAorICAgICAg
ICBkZWx0YXMuCisKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJFdmVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50
OjpwaGFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6Om1vbWVudHVtUGhhc2Up
OgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdlYktpdDo6dG9QbGF0Zm9ybVdoZWVsZXZlbnRQ
aGFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdDJQbGF0Zm9ybVdoZWVsRXZlbnQ6OldlYktp
dDJQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9XZWJXaGVlbEV2ZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YldoZWVsRXZlbnQ6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVl
bEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViV2hlZWxFdmVudDo6TmF0
aXZlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rvcnku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZl
bnQpOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2Fu
U2tpcFdoZWVsRXZlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmVDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
R2VzdHVyZUNvbnRyb2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKToKKyAgICAgICAgKFdlYktp
dDo6bmV3U2Nyb2xsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OnN0YXJ0RHJhZyk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9s
bGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6YmVnaW4pOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJl
Q29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzdGFydE1vbWVudHVtU2Nyb2xsKToKKyAgICAgICAg
KFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3dpcGUpOgorICAgICAg
ICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6Y2FuU2tpcFdoZWVsRXZlbnQpOgorCiAyMDE2LTA2LTIyICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIy
MDE4ODApOiBXZWJTb2NrZXRzIGJhc2VkIHJlbW90ZSBpbnNwZWN0b3IgaXMgYnJva2VuIHNpbmNl
IHIyMDE4ODAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVl
bEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCmlu
ZGV4IDE1MzMyMjIuLjQ1MDFmNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9O
YXRpdmVXZWJXaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdl
YldoZWVsRXZlbnQuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShH
VEspCiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50Jik7
CiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCopOworICAgIE5hdGl2ZVdlYldoZWVs
RXZlbnQoR2RrRXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhh
c2UgbW9tZW50dW1QaGFzZSk7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgTmF0aXZlV2ViV2hl
ZWxFdmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiwgY29uc3QgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtJiB0b1dlYkNvbnRlbnQsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYgdG9EZXZpY2VTY3JlZW4pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCmluZGV4
IDRiZmEwZDguLjE4YmZmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJF
dmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCkBAIC0xNzksNyAr
MTc5LDcgQEAgcHVibGljOgogICAgICAgICBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudAogICAgIH07
CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0o
R1RLKQogICAgIGVudW0gUGhhc2UgewogICAgICAgICBQaGFzZU5vbmUgICAgICAgID0gMCwKICAg
ICAgICAgUGhhc2VCZWdhbiAgICAgICA9IDEgPDwgMCwKQEAgLTE5Niw2ICsxOTYsOCBAQCBwdWJs
aWM6CiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9z
aXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRp
Y2tzLCBHcmFudWxhcml0eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
IHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBib29sIGRpcmVjdGlvbkludmVydGVkRnJvbURldmlj
ZSwgUGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0Rl
bHRhcywgdWludDMyX3Qgc2Nyb2xsQ291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5h
Y2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhLCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOwor
I2VsaWYgUExBVEZPUk0oR1RLKQorICAgIFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9z
aXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgd2hlZWxUaWNrcywgUGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIEdyYW51bGFy
aXR5LCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOwogI2VuZGlmCiAKICAgICBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0K
QEAgLTIwNCw5ICsyMDYsMTEgQEAgcHVibGljOgogICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSB3aGVlbFRpY2tzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbFRpY2tzOyB9CiAgICAgR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHcmFudWxhcml0
eT4obV9ncmFudWxhcml0eSk7IH0KICAgICBib29sIGRpcmVjdGlvbkludmVydGVkRnJvbURldmlj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlOyB9Ci0jaWYg
UExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAg
ICBQaGFzZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNlPihtX3BoYXNl
KTsgfQogICAgIFBoYXNlIG1vbWVudHVtUGhhc2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxQaGFzZT4obV9tb21lbnR1bVBoYXNlKTsgfQorI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgYm9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOyB9CiAgICAgdWludDMyX3Qgc2Nyb2xsQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbENvdW50OyB9CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiB1bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3VuYWNj
ZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YTsgfQpAQCAtMjI0LDkgKzIyOCwxMSBAQCBwcml2YXRlOgog
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3doZWVsVGlja3M7CiAgICAgdWludDMyX3QgbV9ncmFu
dWxhcml0eTsgLy8gR3JhbnVsYXJpdHkKICAgICBib29sIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9t
RGV2aWNlOworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCisgICAgdWludDMy
X3QgbV9waGFzZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsKKyAgICB1aW50MzJfdCBtX21vbWVudHVt
UGhhc2UgeyBQaGFzZTo6UGhhc2VOb25lIH07CisjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkK
LSAgICB1aW50MzJfdCBtX3BoYXNlOyAvLyBQaGFzZQotICAgIHVpbnQzMl90IG1fbW9tZW50dW1Q
aGFzZTsgLy8gUGhhc2UKICAgICBib29sIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAg
ICB1aW50MzJfdCBtX3Njcm9sbENvdW50OwogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3VuYWNj
ZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJFdmVudENvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50
Q29udmVyc2lvbi5jcHAKaW5kZXggZWViNzQ0MS4uZTc4MzhkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKQEAgLTE1MSw5ICsxNTEsMTEgQEAgcHVi
bGljOgogICAgICAgICBtX3doZWVsVGlja3NZID0gd2ViRXZlbnQud2hlZWxUaWNrcygpLmhlaWdo
dCgpOwogICAgICAgICBtX2dyYW51bGFyaXR5ID0gKHdlYkV2ZW50LmdyYW51bGFyaXR5KCkgPT0g
V2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgPyBXZWJDb3JlOjpTY3JvbGxC
eVBhZ2VXaGVlbEV2ZW50IDogV2ViQ29yZTo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CiAgICAg
ICAgIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gd2ViRXZlbnQuZGlyZWN0aW9uSW52
ZXJ0ZWRGcm9tRGV2aWNlKCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICAgICAgbV9waGFzZSA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlPih3ZWJFdmVudC5waGFzZSgpKTsKICAgICAgICAg
bV9tb21lbnR1bVBoYXNlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2U+KHdlYkV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShD
T0NPQSkKICAgICAgICAgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzID0gd2ViRXZlbnQuaGFz
UHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpOwogICAgICAgICBtX3Njcm9sbENvdW50ID0gd2ViRXZl
bnQuc2Nyb2xsQ291bnQoKTsKICAgICAgICAgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFY
ID0gd2ViRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkud2lkdGgoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAppbmRleCBkMjUwYTE0Li41NjMxOTlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCkBAIC02Nyw2ICs2NywyMCBA
QCBXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludAogewogICAgIEFTU0VSVChpc1doZWVsRXZlbnRUeXBl
KHR5cGUpKTsKIH0KKyNlbGlmIFBMQVRGT1JNKEdUSykKK1dlYldoZWVsRXZlbnQ6OldlYldoZWVs
RXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50
JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRTaXpl
JiB3aGVlbFRpY2tzLCBQaGFzZSBwaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCisg
ICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKKyAgICAsIG1fcG9zaXRp
b24ocG9zaXRpb24pCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQorICAg
ICwgbV9kZWx0YShkZWx0YSkKKyAgICAsIG1fd2hlZWxUaWNrcyh3aGVlbFRpY2tzKQorICAgICwg
bV9ncmFudWxhcml0eShncmFudWxhcml0eSkKKyAgICAsIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9t
RGV2aWNlKGZhbHNlKQorICAgICwgbV9waGFzZShwaGFzZSkKKyAgICAsIG1fbW9tZW50dW1QaGFz
ZShtb21lbnR1bVBoYXNlKQoreworICAgIEFTU0VSVChpc1doZWVsRXZlbnRUeXBlKHR5cGUpKTsK
K30KICNlbmRpZgogCiB2b2lkIFdlYldoZWVsRXZlbnQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlcikgY29uc3QKQEAgLTc5LDkgKzkzLDExIEBAIHZvaWQgV2ViV2hlZWxFdmVu
dDo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29k
ZXIgPDwgbV93aGVlbFRpY2tzOwogICAgIGVuY29kZXIgPDwgbV9ncmFudWxhcml0eTsKICAgICBl
bmNvZGVyIDw8IG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlOwotI2lmIFBMQVRGT1JNKENP
Q09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgZW5jb2RlciA8
PCBtX3BoYXNlOwogICAgIGVuY29kZXIgPDwgbV9tb21lbnR1bVBoYXNlOworI2VuZGlmCisjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgZW5jb2RlciA8PCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0
YXM7CiAgICAgZW5jb2RlciA8PCBtX3Njcm9sbENvdW50OwogICAgIGVuY29kZXIgPDwgbV91bmFj
Y2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7CkBAIC0xMDQsMTEgKzEyMCwxMyBAQCBib29sIFdlYldo
ZWVsRXZlbnQ6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViV2hlZWxF
dmVudCYgdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
dC5tX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RL
KQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX3BoYXNlKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX21vbWVudHVtUGhhc2UpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHQubV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX3Njcm9sbENvdW50KSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsu
Y3BwCmluZGV4IGIzNjc2MTIuLjVjYWYzZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcApAQCAtMzcsOCArMzcsMTQgQEAg
TmF0aXZlV2ViV2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCogZXZlbnQp
CiB7CiB9CiAKK05hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZl
bnQqIGV2ZW50LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhh
c2UgbW9tZW50dW1QaGFzZSkKKyAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBwaGFzZSwgbW9tZW50dW1QaGFzZSkpCisgICAgLCBt
X25hdGl2ZUV2ZW50KGdka19ldmVudF9jb3B5KGV2ZW50KSkKK3sKK30KKwogTmF0aXZlV2ViV2hl
ZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBl
dmVudCkKLSAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVl
bEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgIDogV2ViV2hlZWxFdmVudChXZWJFdmVu
dEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwgZXZlbnQu
cGhhc2UoKSwgZXZlbnQubW9tZW50dW1QaGFzZSgpKSkKICAgICAsIG1fbmF0aXZlRXZlbnQoZ2Rr
X2V2ZW50X2NvcHkoZXZlbnQubmF0aXZlRXZlbnQoKSkpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKaW5kZXggMmQ2NjM5My4uNDIzYzQ3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcApAQCAt
MTQzLDYgKzE0MywyNyBAQCBXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2Vi
TW91c2VFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGludCBjdQogCiBXZWJXaGVlbEV2ZW50
IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZl
bnQpCiB7CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04o
MywgMjAsIDApCisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBnZGtfZXZlbnRfaXNf
c2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQpID8KKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6
OlBoYXNlRW5kZWQgOgorICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2Vk
OworI2Vsc2UKKyAgICBkb3VibGUgZGVsdGFYLCBkZWx0YVk7CisgICAgZ2RrX2V2ZW50X2dldF9z
Y3JvbGxfZGVsdGFzKGV2ZW50LCAmZGVsdGFYLCAmZGVsdGFZKTsKKyAgICBXZWJXaGVlbEV2ZW50
OjpQaGFzZSBwaGFzZSA9IGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfU01P
T1RIICYmICFkZWx0YVggJiYgIWRlbHRhWSA/CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNl
OjpQaGFzZUVuZGVkIDoKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdl
ZDsKKyNlbmRpZgorI2Vsc2UKKyAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IFdlYldo
ZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9O
XzIKKworICAgIHJldHVybiBjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBwaGFzZSwgV2ViV2hl
ZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSk7Cit9CisKK1dlYldoZWVsRXZlbnQgV2ViRXZlbnRG
YWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgV2ViV2hl
ZWxFdmVudDo6UGhhc2UgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2Up
Cit7CiAgICAgZG91YmxlIHgsIHksIHhSb290LCB5Um9vdDsKICAgICBnZGtfZXZlbnRfZ2V0X2Nv
b3JkcyhldmVudCwgJngsICZ5KTsKICAgICBnZGtfZXZlbnRfZ2V0X3Jvb3RfY29vcmRzKGV2ZW50
LCAmeFJvb3QsICZ5Um9vdCk7CkBAIC0xNzksMTMgKzIwMCwxNSBAQCBXZWJXaGVlbEV2ZW50IFdl
YkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQp
CiAgICAgRmxvYXRTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lkdGgoKSAqIHN0ZXAsIHdoZWVsVGlj
a3MuaGVpZ2h0KCkgKiBzdGVwKTsKIAogICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50
OjpXaGVlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4LCB5KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbHRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIHdoZWVsVGlja3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdo
ZWVsRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZl
bnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfdGltZShldmVudCkp
OworICAgICAgICBJbnRQb2ludCh4LCB5KSwKKyAgICAgICAgSW50UG9pbnQoeFJvb3QsIHlSb290
KSwKKyAgICAgICAgZGVsdGEsCisgICAgICAgIHdoZWVsVGlja3MsCisgICAgICAgIHBoYXNlLAor
ICAgICAgICBtb21lbnR1bVBoYXNlLAorICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBp
eGVsV2hlZWxFdmVudCwKKyAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpLAorICAgICAg
ICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKTsKIH0KIAogV2ViS2V5Ym9hcmRFdmVudCBXZWJF
dmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50
LCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cywg
VmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dl
YkV2ZW50RmFjdG9yeS5oCmluZGV4IDI4YjY5NTMuLjhmZTdjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBX
ZWJFdmVudEZhY3RvcnkgewogcHVibGljOgogICAgIHN0YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0
ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBpbnQpOwogICAgIHN0YXRpYyBXZWJXaGVl
bEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqKTsKKyAgICBzdGF0aWMg
V2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgV2ViV2hl
ZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogICAg
IHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgR2Rr
RXZlbnQqLCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmLCBWZWN0b3I8U3RyaW5n
PiYmIGNvbW1hbmRzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHN0YXRpYyBXZWJU
b3VjaEV2ZW50IGNyZWF0ZVdlYlRvdWNoRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBWZWN0b3I8V2Vi
UGxhdGZvcm1Ub3VjaFBvaW50PiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKaW5kZXggMTdkYzkxZS4uY2Y0ZmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE4MzAsNyArMTgzMCw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQog
CiAgICAgaWYgKCFtX2N1cnJlbnRseVByb2Nlc3NlZFdoZWVsRXZlbnRzLmlzRW1wdHkoKSkgewog
ICAgICAgICBtX3doZWVsRXZlbnRRdWV1ZS5hcHBlbmQoZXZlbnQpOwotICAgICAgICBpZiAobV93
aGVlbEV2ZW50UXVldWUuc2l6ZSgpIDwgd2hlZWxFdmVudFF1ZXVlU2l6ZVRocmVzaG9sZCkKKyAg
ICAgICAgaWYgKCFzaG91bGRQcm9jZXNzV2hlZWxFdmVudE5vdyhldmVudCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIC8vIFRoZSBxdWV1ZSBoYXMgdG9vIG1hbnkgd2hlZWwgZXZlbnRz
LCBzbyBwdXNoIGEgbmV3IGV2ZW50LgogICAgIH0KQEAgLTE4NzEsNiArMTg3MSwyNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2VuZFdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQp
CiAgICAgbV9wcm9jZXNzLT5pc1Jlc3BvbnNpdmUobnVsbHB0cik7CiB9CiAKK2Jvb2wgV2ViUGFn
ZVByb3h5OjpzaG91bGRQcm9jZXNzV2hlZWxFdmVudE5vdyhjb25zdCBXZWJXaGVlbEV2ZW50JiBl
dmVudCkKK3sKKyNpZiBQTEFURk9STShHVEspCisgICAgLy8gRG9uJ3QgcXVldWUgZXZlbnRzIHJl
cHJlc2VudGluZyBhIG5vbi10cml2aWFsIHNjcm9sbGluZyBwaGFzZSB0bworICAgIC8vIGF2b2lk
IGhhdmluZyB0aGVtIHRyYXBwZWQgaW4gdGhlIHF1ZXVlLCBwb3RlbnRpYWxseSBwcmV2ZW50aW5n
IGEKKyAgICAvLyBzY3JvbGxpbmcgc2Vzc2lvbiB0byBiZWdpbm5pbmcgb3IgZW5kIGNvcnJlY3Rs
eS4KKyAgICAvLyBUaGlzIGlzIG9ubHkgbmVlZGVkIGJ5IHBsYXRmb3JtcyB3aG9zZSBXZWJXaGVl
bEV2ZW50IGhhcyB0aGlzIHBoYXNlCisgICAgLy8gaW5mb3JtYXRpb24gKENvY29hIGFuZCBHVEsr
KSBidXQgQ29jb2Egd2FzIGZpbmUgd2l0aG91dCBpdC4KKyAgICBpZiAoZXZlbnQucGhhc2UoKSA9
PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lCisgICAgICAgIHx8IGV2ZW50LnBoYXNl
KCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZAorICAgICAgICB8fCBldmVu
dC5tb21lbnR1bVBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZQorICAg
ICAgICB8fCBldmVudC5tb21lbnR1bVBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBo
YXNlQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShldmVudCk7CisjZW5kaWYKKyAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6ZSgpID49IHdo
ZWVsRXZlbnRRdWV1ZVNpemVUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUtleWJvYXJkRXZlbnQo
Y29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKCFpc1ZhbGlk
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZjcxODVkMC4u
N2RkNTMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTQ2
Niw2ICsxNDY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc05leHRRdWV1ZWRXaGVl
bEV2ZW50KCk7CiAgICAgdm9pZCBzZW5kV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7
CisgICAgYm9vbCBzaG91bGRQcm9jZXNzV2hlZWxFdmVudE5vdyhjb25zdCBXZWJXaGVlbEV2ZW50
Jik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIFdlYkNvcmU6OlRyYWNraW5nVHlw
ZSB0b3VjaEV2ZW50VHJhY2tpbmdUeXBlKGNvbnN0IFdlYlRvdWNoRXZlbnQmKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAK
aW5kZXggN2UxNTc3Yy4uOTM2OTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdl
UHJveHkmIHBhZ2UpCiAgICAgOiBtX2RyYWdHZXN0dXJlKHBhZ2UpCisgICAgLCBtX3N3aXBlR2Vz
dHVyZShwYWdlKQogICAgICwgbV96b29tR2VzdHVyZShwYWdlKQogewogfQpAQCAtNDksMTMgKzUw
LDE0IEBAIGJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50
KiBldmVudCkKIHsKICAgICBib29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2lu
Z0dlc3R1cmVzKCk7CiAgICAgbV9kcmFnR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CisgICAg
bV9zd2lwZUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIG1fem9vbUdlc3R1cmUuaGFu
ZGxlRXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfVE9VQ0hfRU5E
ID8gd2FzUHJvY2Vzc2luZ0dlc3R1cmVzIDogaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKIH0KIAog
Ym9vbCBHZXN0dXJlQ29udHJvbGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0Fj
dGl2ZSgpOworICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV9zd2lwZUdl
c3R1cmUuaXNBY3RpdmUoKSB8fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7CiB9CiAKIEdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlOjpHZXN0dXJlKEd0a0dlc3R1cmUqIGdlc3R1cmUsIFdlYlBh
Z2VQcm94eSYgcGFnZSkKQEAgLTc1LDIwICs3Nyw0MCBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVy
OjpHZXN0dXJlOjpoYW5kbGVFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiAgICAgZ3RrX2V2
ZW50X2NvbnRyb2xsZXJfaGFuZGxlX2V2ZW50KEdUS19FVkVOVF9DT05UUk9MTEVSKG1fZ2VzdHVy
ZS5nZXQoKSksIGV2ZW50KTsKIH0KIAotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1
cmU6OmhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkp
CitzdGF0aWMgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY3JlYXRlU2Nyb2xsRXZlbnQoY29uc3QgR2Rr
RXZlbnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSBkZWx0YVgsIGRvdWJsZSBk
ZWx0YVksIGdib29sZWFuIGlzU3RvcCkKIHsKLSAgICBBU1NFUlQobV9pbkRyYWcpOwogICAgIEdV
bmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkp
OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2ZW50LT50b3VjaC50aW1lOwotICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IG1fc3RhcnQueCgpOwotICAgIHNjcm9sbEV2ZW50LT5z
Y3JvbGwueSA9IG1fc3RhcnQueSgpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IHg7Cisg
ICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55ID0geTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnhf
cm9vdCA9IGV2ZW50LT50b3VjaC54X3Jvb3Q7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55X3Jv
b3QgPSBldmVudC0+dG91Y2gueV9yb290OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0
aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94
ID0gKG1fb2Zmc2V0LngoKSAtIHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOwot
ICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IChtX29mZnNldC55KCkgLSB5KSAvIFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRl
bHRhX3ggPSBkZWx0YVg7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gZGVsdGFZ
OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+dG91Y2guc3RhdGU7Ci0g
ICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVu
dC5nZXQoKSkpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQorICAgIHNjcm9sbEV2
ZW50LT5zY3JvbGwuaXNfc3RvcCA9IGlzU3RvcDsKKyNlbmRpZgorICAgIHJldHVybiBzY3JvbGxF
dmVudDsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnN0YXJ0RHJh
Zyhjb25zdCBHZGtFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKCFtX2luRHJhZyk7CisgICAg
R1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVu
dCwgbV9zdGFydC54KCksIG1fc3RhcnQueSgpLCAwLCAwLCBGQUxTRSk7CisgICAgbV9wYWdlLmhh
bmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2Vi
V2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQmVnYW4sIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFz
ZU5vbmUpKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRs
ZURyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAg
QVNTRVJUKG1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9
IGNyZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LAorICAgICAgICBtX3N0YXJ0LngoKSwgbV9zdGFydC55
KCksCisgICAgICAgIChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwKKyAgICAgICAgKG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLAorICAgICAgICBGQUxTRSk7CisgICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZl
bnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6
UGhhc2U6OlBoYXNlQ2hhbmdlZCwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOwog
fQogCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlVGFwKGNvbnN0
IEdka0V2ZW50KiBldmVudCkKQEAgLTEyOCw2ICsxNTAsNyBAQCB2b2lkIEdlc3R1cmVDb250cm9s
bGVyOjpEcmFnR2VzdHVyZTo6YmVnaW4oRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUg
eCwgZAogICAgIHVuc2lnbmVkIGRlbGF5OwogICAgIGdfb2JqZWN0X2dldChndGtfd2lkZ2V0X2dl
dF9zZXR0aW5ncyh3aWRnZXQpLCAiZ3RrLWxvbmctcHJlc3MtdGltZSIsICZkZWxheSwgbnVsbHB0
cik7CiAgICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5zdGFydE9uZVNob3QoZGVs
YXkgLyAxMDAwLjApOworICAgIGRyYWdHZXN0dXJlLT5zdGFydERyYWcoZ3RrX2dlc3R1cmVfZ2V0
X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJv
bGxlcjo6RHJhZ0dlc3R1cmU6OnVwZGF0ZShEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJs
ZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKQEAgLTE0OSwxMSArMTcyLDE0IEBA
IHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUq
IGRyYWdHZXN0dXJlLCBkb3VibGUgeCwKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0
dXJlOjplbmQoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBHZGtFdmVudFNlcXVlbmNlKiBzZXF1
ZW5jZSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKIHsKICAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJl
c3NUaW1lb3V0LnN0b3AoKTsKKyAgICBpZiAoIWd0a19nZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2Uo
Z2VzdHVyZSwgc2VxdWVuY2UpKSB7CisgICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0
dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICBpZiAoIWRyYWdHZXN0dXJlLT5tX2luRHJhZykgewogICAgICAgICBkcmFnR2VzdHVyZS0+
aGFuZGxlVGFwKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7
CiAgICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVO
Q0VfREVOSUVEKTsKLSAgICB9IGVsc2UgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNl
KGdlc3R1cmUsIHNlcXVlbmNlKSkKLSAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1
cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOworICAgIH0KIH0KIAogdm9pZCBHZXN0dXJl
Q29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmxvbmdQcmVzc0ZpcmVkKCkKQEAgLTE3Miw2ICsxOTgs
MzAgQEAgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFnR2VzdHVyZShXZWJQYWdl
UHJveHkmIHBhZ2UpCiAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQo
KSwgImVuZCIsIEdfQ0FMTEJBQ0soZW5kKSwgdGhpcyk7CiB9CiAKK3ZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OlN3aXBlR2VzdHVyZTo6c3RhcnRNb21lbnR1bVNjcm9sbChjb25zdCBHZGtFdmVudCog
ZXZlbnQsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVkpCit7CisgICAgR1VuaXF1
ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVudCwgZXZl
bnQtPnRvdWNoLngsIGV2ZW50LT50b3VjaC55LCB2ZWxvY2l0eVgsIHZlbG9jaXR5WSwgVFJVRSk7
CisgICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxF
dmVudC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSwgV2ViV2hlZWxFdmVu
dDo6UGhhc2U6OlBoYXNlQmVnYW4pKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dp
cGVHZXN0dXJlOjpzd2lwZShTd2lwZUdlc3R1cmUqIHN3aXBlR2VzdHVyZSwgZG91YmxlIHZlbG9j
aXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBHZGtF
dmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9z
ZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOworICAgIGlmICghZ3RrX2dlc3R1
cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGd0a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5jZSwg
R1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisgICAgc3dpcGVHZXN0dXJlLT5zdGFydE1v
bWVudHVtU2Nyb2xsKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNl
KSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVkpOworfQorCitHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVH
ZXN0dXJlOjpTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5JiBwYWdlKQorICAgIDogR2VzdHVyZShn
dGtfZ2VzdHVyZV9zd2lwZV9uZXcocGFnZS52aWV3V2lkZ2V0KCkpLCBwYWdlKQoreworICAgIGd0
a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUobV9nZXN0
dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVy
ZS5nZXQoKSwgInN3aXBlIiwgR19DQUxMQkFDSyhzd2lwZSksIHRoaXMpOworfQorCiBJbnRQb2lu
dCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNlbnRlcigpIGNvbnN0CiB7CiAgICAg
ZG91YmxlIHgsIHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dl
c3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmgKaW5kZXggODY3OTJkZi4uZTk2MDMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaApAQCAtNjcsNiArNjcsOCBAQCBw
cml2YXRlOgogICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdlUHJveHkmKTsKIAogICAgIHByaXZh
dGU6CisgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgZHJhZyBzdGFydGVkLCBhbGxvd2luZyB0byBz
dG9wIGtpbmV0aWMgZGVjZWxlcmF0aW9uLgorICAgICAgICB2b2lkIHN0YXJ0RHJhZyhjb25zdCBH
ZGtFdmVudCopOwogICAgICAgICB2b2lkIGhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqLCBkb3Vi
bGUgeCwgZG91YmxlIHkpOwogICAgICAgICB2b2lkIGhhbmRsZVRhcChjb25zdCBHZGtFdmVudCop
OwogICAgICAgICB2b2lkIGxvbmdQcmVzc0ZpcmVkKCk7CkBAIC04Miw2ICs4NCwxNiBAQCBwcml2
YXRlOgogICAgICAgICBib29sIG1faW5EcmFnOwogICAgIH07CiAKKyAgICBjbGFzcyBTd2lwZUdl
c3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBTd2lw
ZUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHN0
YXJ0TW9tZW50dW1TY3JvbGwoY29uc3QgR2RrRXZlbnQqLCBkb3VibGUgdmVsb2NpdHlYLCBkb3Vi
bGUgdmVsb2NpdHlZKTsKKworICAgICAgICBzdGF0aWMgdm9pZCBzd2lwZShTd2lwZUdlc3R1cmUq
LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZLCBHdGtHZXN0dXJlKik7CisgICAg
fTsKKwogICAgIGNsYXNzIFpvb21HZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgewogICAg
IHB1YmxpYzoKICAgICAgICAgWm9vbUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CkBAIC0xMDEsNiAr
MTEzLDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgRHJhZ0dlc3R1cmUgbV9kcmFnR2VzdHVy
ZTsKKyAgICBTd2lwZUdlc3R1cmUgbV9zd2lwZUdlc3R1cmU7CiAgICAgWm9vbUdlc3R1cmUgbV96
b29tR2VzdHVyZTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281975</attachid>
            <date>2016-06-24 07:01:30 -0700</date>
            <delta_ts>2016-06-24 08:42:43 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>48665</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZjE2ZTg1Li4zMGZiOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTYtMDYtMTUgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMg
c2Nyb2xsaW5nIGFuaW1hdGlvbiBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGlu
ZzsgaXQgaXMgYmFzZWQgb24gR1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlw
ZS4KKworICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5k
IHN3aXBlIHZlbG9jaXR5IHRvIFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRp
bmcgb24gd2hldGhlciB0aGUgc2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBh
IHN3aXBlLCB0aGUgc2Nyb2xsIGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAg
dGhlIHN3aXBlIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3Ig
dXNlIHRoZSBvbmUgZnJvbSB0aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAg
ICAgbW9tZW50dW0gc2Nyb2xsaW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OnVzZUxhdGNoZWRFdmVudEVsZW1lbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNs
YW1wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNE
YXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5l
dGljOjpQZXJBeGlzRGF0YTo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnNldEN1cnJlbnRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0UG9pbnQ6OmlzT3JpZ2luKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVl
bEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxh
dGZvcm1XaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6
c3dpcGVWZWxvY2l0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRv
ckd0ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21vb3Ro
U2Nyb2xsaW5nQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3Rr
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6Y29tcHV0ZVZlbG9jaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
R3RrOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
R3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6dXBkYXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
dGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaDoKKwogMjAxNi0wNi0yMyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NvdXBdIENsZWFuIHVwIFNv
Y2tldFN0cmVhbUhhbmRsZSBzb3VwIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDc0ZTUxOTUuLjJjZjA4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBA
IC03Nyw2ICs3Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGxvYWRlci9z
b3VwL1N1YnJlc291cmNlTG9hZGVyU291cC5jcHAKIAogICAgIHBsYXRmb3JtL0tpbGxSaW5nTm9u
ZS5jcHAKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcAogCiAgICAgcGxh
dGZvcm0vYXVkaW8vZ2xpYi9BdWRpb0J1c0dMaWIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggMDcxMzU1Yy4uNzZmNmM0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTUzLDcgKzUz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTY3JvbGxCeVBpeGVsV2hlZWxFdmVu
dCwKICAgICB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBlbnVtIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIDogdWludDhf
dCB7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAgICAgICAgPSAwLAogICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuICAgICAgID0gMSA8PCAwLApAQCAtNzcs
OCArNzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fZGlyZWN0aW9u
SW52ZXJ0ZWRGcm9tRGV2aWNlKGZhbHNlKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAg
ICAgLCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoZmFsc2UpCi0gICAgICAgICAgICAsIG1f
cGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQotICAgICAgICAgICAgLCBtX21vbWVu
dHVtUGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQogICAgICAgICAgICAgLCBtX3Nj
cm9sbENvdW50KDApCiAgICAgICAgICAgICAsIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
WCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkoMCkKQEAg
LTk4LDggKzk2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2RpcmVj
dGlvbkludmVydGVkRnJvbURldmljZShmYWxzZSkKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAg
ICAgICAgICwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZhbHNlKQotICAgICAgICAgICAg
LCBtX3BoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKLSAgICAgICAgICAgICwgbV9t
b21lbnR1bVBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKICAgICAgICAgICAgICwg
bV9zY3JvbGxDb3VudCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YVgoMCkKICAgICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKDAp
CkBAIC0xNjAsMTIgKzE1NiwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
c2hvdWxkQ29uc2lkZXJMYXRjaGluZygpIGNvbnN0OwogICAgICAgICBib29sIHNob3VsZFJlc2V0
TGF0Y2hpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBj
b25zdDsKLSAgICAgICAgYm9vbCBpc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CiAjZWxz
ZQogICAgICAgICBib29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQor
ICAgICAgICBib29sIGlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OworICAgICAgICBi
b29sIGlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oR1RLKQorICAgICAgICBGbG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25z
dDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZl
bnQoSFdORCwgV1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNNb3VzZUhXaGVlbCk7CiAgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudChIV05ELCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhdGlvbik7CkBAIC0xODAsMTAgKzE4MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGZsb2F0IG1fd2hlZWxUaWNrc1k7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAgICAgICAgIGJvb2wgbV9kaXJlY3Rpb25J
bnZlcnRlZEZyb21EZXZpY2U7CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykK
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZSB7IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlTm9uZSB9OworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtX21vbWVu
dHVtUGhhc2UgeyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgfTsKKyNlbmRpZgogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgICAgICBib29sIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsK
LSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZTsKLSAgICAgICAgUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2UgbV9tb21lbnR1bVBoYXNlOwogICAgICAgICB1bnNpZ25lZCBtX3Nj
cm9sbENvdW50OwogICAgICAgICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7
CiAgICAgICAgIGZsb2F0IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWTsKQEAgLTIxMiw3
ICsyMTcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV9w
aGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgJiYgbV9tb21lbnR1bVBoYXNlID09
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ7CiAgICAgfQorI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGlubGluZSBib29sIFBsYXRmb3JtV2hl
ZWxFdmVudDo6aXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgJiYgbV9tb21l
bnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKaW5kZXggMzkyOTk5Ny4uMmU1ZjYzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKQEAgLTM2LDEwICszNiwxMCBA
QCBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbEFuaW1hdGlvbiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uKCkgeyB9OwotICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IC8qIHN0ZXAgKi8sIGZsb2F0
IC8qIG11bHRpcGxpZXIgKi8pIHsgcmV0dXJuIHRydWU7IH07CiAgICAgdmlydHVhbCB2b2lkIHN0
b3AoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKSB7IH07CisgICAgdmly
dHVhbCB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgeyB9OwogICAg
IHZpcnR1YWwgdm9pZCBzZXJ2aWNlQW5pbWF0aW9uKCkgeyB9OwogCiBwcm90ZWN0ZWQ6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMmViMzMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApA
QCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYy5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KKworLyoKKyAqIFBlckF4aXNEYXRhIGlzIGEgcG9ydCBvZiBHdGtLaW5l
dGljU2Nyb2xsaW5nIGFzIG9mIEdUSysgMy4yMCwKKyAqIG1pbWlja2luZyBpdHMgQVBJIGFuZCBp
dHMgYmVoYXZpb3IuCisgKgorICogQWxsIG91ciBjdXJ2ZXMgYXJlIHNlY29uZCBkZWdyZWUgbGlu
ZWFyIGRpZmZlcmVudGlhbCBlcXVhdGlvbnMsIGFuZAorICogc28gdGhleSBjYW4gYWx3YXlzIGJl
IHdyaXR0ZW4gYXMgbGluZWFyIGNvbWJpbmF0aW9ucyBvZiAyIGJhc2UKKyAqIHNvbHV0aW9ucy4g
Y29lZjEgYW5kIGNvZWYyIGFyZSB0aGUgY29lZmZpY2llbnRzIHRvIHRoZXNlIHR3byBiYXNlCisg
KiBzb2x1dGlvbnMsIGFuZCBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3NpdGlvbiBh
bmQgdmVsb2NpdHkuCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygc2ltcGxlIGRlY2VsZXJhdGlvbiwg
dGhlIGRpZmZlcmVudGlhbCBlcXVhdGlvbiBpcworICoKKyAqICAgeScnID0gLW15JworICoKKyAq
IFdpdGggbSB0aGUgcmVzaXN0ZW5jZSBmYWN0b3IuIEZvciB0aGlzIHdlIHVzZSB0aGUgZm9sbG93
aW5nIDIKKyAqIGJhc2Ugc29sdXRpb25zOgorICoKKyAqICAgZjEoeCkgPSAxCisgKiAgIGYyKHgp
ID0gZXhwKC1teCkKKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBvdmVyc2hvb3QsIHRoZSBkaWZmZXJl
bnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHknJyA9IC1teScgLSBreQorICoKKyAqIFdpdGgg
bSB0aGUgcmVzaXN0YW5jZSwgYW5kIGsgdGhlIHNwcmluZyBzdGlmZm5lc3MgY29uc3RhbnQuIFdl
IGxldAorICogayA9IG1eMiAvIDQsIHNvIHRoYXQgdGhlIHN5c3RlbSBpcyBjcml0aWNhbGx5IGRh
bXBlZCAoaWUsIHJldHVybnMgdG8gaXRzCisgKiBlcXVpbGlicml1bSBwb3NpdGlvbiBhcyBxdWlj
a2x5IGFzIHBvc3NpYmxlLCB3aXRob3V0IG9zY2lsbGF0aW5nKSwgYW5kIG9mZnNldAorICogdGhl
IHdob2xlIHRoaW5nLCBzdWNoIHRoYXQgdGhlIGVxdWlsaWJyaXVtIHBvc2l0aW9uIGlzIGF0IDAu
IFRoaXMgZ2l2ZXMgdGhlCisgKiBiYXNlIHNvbHV0aW9ucworICoKKyAqICAgZjEoeCkgPSBleHAo
LW14IC8gMikKKyAqICAgZjIoeCkgPSB0IGV4cCgtbXggLyAyKQorICovCisKK3N0YXRpYyBjb25z
dCBkb3VibGUgZGVjZWxGcmljdGlvbiA9IDQ7CitzdGF0aWMgY29uc3QgZG91YmxlIGZyYW1lUmF0
ZSA9IDYwOworc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCA9IC4wMDE7
CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGNsYW1wKGRvdWJsZSB4LCBkb3VibGUgbG93LCBkb3Vi
bGUgaGlnaCkKK3sKKyAgICBBU1NFUlQobG93IDw9IGhpZ2gpOworCisgICAgcmV0dXJuICh4ID4g
aGlnaCkgPyBoaWdoIDogKCh4IDwgbG93KSA/IGxvdyA6IHgpOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0
YShkb3VibGUgbG93ZXIsIGRvdWJsZSB1cHBlciwgZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91
YmxlIGluaXRpYWxWZWxvY2l0eSkKKyAgICA6IG1fbG93ZXIobG93ZXIpCisgICAgLCBtX3VwcGVy
KHVwcGVyKQorICAgICwgbV9jb2VmMShpbml0aWFsVmVsb2NpdHkgLyBkZWNlbEZyaWN0aW9uICsg
aW5pdGlhbFBvc2l0aW9uKQorICAgICwgbV9jb2VmMigtaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxG
cmljdGlvbikKKyAgICAsIG1fcG9zaXRpb24oY2xhbXAoaW5pdGlhbFBvc2l0aW9uLCBsb3dlciwg
dXBwZXIpKQorICAgICwgbV92ZWxvY2l0eShpbml0aWFsUG9zaXRpb24gPCBsb3dlciB8fCBpbml0
aWFsUG9zaXRpb24gPiB1cHBlciA/IDAgOiBpbml0aWFsVmVsb2NpdHkpCit7Cit9CisKK2Jvb2wg
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoZG91Ymxl
IHRpbWVEZWx0YSkKK3sKKyAgICBtX2VsYXBzZWRUaW1lICs9IHRpbWVEZWx0YTsKKworICAgIGRv
dWJsZSBleHBvbmVudGlhbFBhcnQgPSBleHAoLWRlY2VsRnJpY3Rpb24gKiBtX2VsYXBzZWRUaW1l
KTsKKyAgICBtX3Bvc2l0aW9uID0gbV9jb2VmMSArIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7
CisgICAgbV92ZWxvY2l0eSA9IC1kZWNlbEZyaWN0aW9uICogbV9jb2VmMiAqIGV4cG9uZW50aWFs
UGFydDsKKworICAgIGlmIChtX3Bvc2l0aW9uIDwgbV9sb3dlcikgeworICAgICAgICBtX3Bvc2l0
aW9uID0gbV9sb3dlcjsKKyAgICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmICht
X3Bvc2l0aW9uID4gbV91cHBlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV91cHBlcjsKKyAg
ICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChmYWJzKG1fdmVsb2NpdHkpIDwg
MSkgeworICAgICAgICBtX3Bvc2l0aW9uID0gcm91bmQobV9wb3NpdGlvbik7CisgICAgICAgIG1f
dmVsb2NpdHkgPSAwOworICAgIH0KKworICAgIHJldHVybiBtX3ZlbG9jaXR5OworfQorCitTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24pCisgICAgOiBTY3JvbGxBbmltYXRpb24oc2Nyb2xs
YWJsZUFyZWEpCisgICAgLCBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKFdURk1vdmUo
bm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24pKQorICAgICwgbV9ob3Jpem9udGFsRGF0YSgw
LCAwLCAwLCAwKQorICAgICwgbV92ZXJ0aWNhbERhdGEoMCwgMCwgMCwgMCkKKyAgICAsIG1fYW5p
bWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1l
ckZpcmVkKQoreworfQorCitTY3JvbGxBbmltYXRpb25LaW5ldGljOjp+U2Nyb2xsQW5pbWF0aW9u
S2luZXRpYygpCit7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RvcCgpCit7
CisgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYzo6c3RhcnQoY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiB2ZWxvY2l0eSwgYm9vbCBtYXlIU2Nyb2xsLCBib29sIG1heVZTY3JvbGwpCit7
CisgICAgc3RvcCgpOworCisgICAgaWYgKCF2ZWxvY2l0eS54KCkgJiYgIXZlbG9jaXR5LnkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1heUhTY3JvbGwpIHsKKyAgICAgICAgbV9ob3Jp
em9udGFsRGF0YSA9IFBlckF4aXNEYXRhKG1fc2Nyb2xsYWJsZUFyZWEubWluaW11bVNjcm9sbFBv
c2l0aW9uKCkueCgpLAorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKS54KCksCisgICAgICAgICAgICBpbml0aWFsUG9zaXRpb24ueCgpLCB2ZWxvY2l0
eS54KCkpOworICAgIH0KKyAgICBpZiAobWF5VlNjcm9sbCkgeworICAgICAgICBtX3ZlcnRpY2Fs
RGF0YSA9IFBlckF4aXNEYXRhKG1fc2Nyb2xsYWJsZUFyZWEubWluaW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpLAorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKS55KCksCisgICAgICAgICAgICBpbml0aWFsUG9zaXRpb24ueSgpLCB2ZWxvY2l0eS55KCkp
OworICAgIH0KKworICAgIGFuaW1hdGlvblRpbWVyRmlyZWQoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBkb3VibGUgY3Vy
cmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBkb3VibGUgZGVs
dGFUb05leHRGcmFtZSA9IGNlaWwoKGN1cnJlbnRUaW1lIC0gbV9zdGFydFRpbWUpICogZnJhbWVS
YXRlKSAvIGZyYW1lUmF0ZSAtIChjdXJyZW50VGltZSAtIG1fc3RhcnRUaW1lKTsKKworICAgIGJv
b2wgY29udGludWVBbmltYXRpb24gPSBmYWxzZTsKKyAgICBpZiAobV9ob3Jpem9udGFsRGF0YS5h
bmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQorICAgICAgICBjb250aW51ZUFuaW1hdGlv
biA9IHRydWU7CisgICAgaWYgKG1fdmVydGljYWxEYXRhLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05l
eHRGcmFtZSkpCisgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKKworICAgIGlmIChj
b250aW51ZUFuaW1hdGlvbikKKyAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qo
c3RkOjptYXgobWluaW11bVRpbWVySW50ZXJ2YWwsIGRlbHRhVG9OZXh0RnJhbWUpKTsKKworICAg
IG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24oRmxvYXRQb2ludChtX2hvcml6b250YWxE
YXRhLnBvc2l0aW9uKCksIG1fdmVydGljYWxEYXRhLnBvc2l0aW9uKCkpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0aW9uS2luZXRpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjRi
ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRpb25LaW5ldGljLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNf
aAorI2RlZmluZSBTY3JvbGxBbmltYXRpb25LaW5ldGljX2gKKworI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb24uaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworCitjbGFzcyBT
Y3JvbGxBbmltYXRpb25LaW5ldGljIGZpbmFsOiBwdWJsaWMgU2Nyb2xsQW5pbWF0aW9uIHsKK3By
aXZhdGU6CisgICAgY2xhc3MgUGVyQXhpc0RhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGVy
QXhpc0RhdGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRp
b24sIGRvdWJsZSBpbml0aWFsVmVsb2NpdHkpOworCisgICAgICAgIGRvdWJsZSBwb3NpdGlvbigp
IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKworICAgICAgICBib29sIGFuaW1hdGVTY3JvbGwoZG91
YmxlIHRpbWVEZWx0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBkb3VibGUgbV9sb3dlciB7
IDAgfTsKKyAgICAgICAgZG91YmxlIG1fdXBwZXIgeyAwIH07CisKKyAgICAgICAgZG91YmxlIG1f
Y29lZjEgeyAwIH07CisgICAgICAgIGRvdWJsZSBtX2NvZWYyIHsgMCB9OworCisgICAgICAgIGRv
dWJsZSBtX2VsYXBzZWRUaW1lIHsgMCB9OworICAgICAgICBkb3VibGUgbV9wb3NpdGlvbiB7IDAg
fTsKKyAgICAgICAgZG91YmxlIG1fdmVsb2NpdHkgeyAwIH07CisgICAgfTsKKworcHVibGljOgor
ICAgIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbik7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOworCisgICAgdm9pZCBzdGFydChj
b25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9j
aXR5LCBib29sIG1heUhTY3JvbGwsIGJvb2wgbWF5VlNjcm9sbCk7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CisK
KyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNo
YW5nZWRGdW5jdGlvbjsKKworICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRhbERhdGE7CisgICAg
UGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWUgeyAw
IH07CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcAppbmRl
eCAxMDQ1YzQ0Li5jMzM3ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCiAjaW5jbHVkZSA8Z2Rr
L2dkay5oPgpAQCAtODMsNiArODQsMjAgQEAgUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdo
ZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQogICAgIG1fd2hlZWxUaWNrc1ggPSBtX2Rl
bHRhWDsKICAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7CiAKKyNpZm5kZWYgR1RLX0FQSV9W
RVJTSU9OXzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICBtX3BoYXNlID0g
ZXZlbnQtPmlzX3N0b3AgPworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkIDoK
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOworI2Vsc2UKKyAgICBtX3Bo
YXNlID0gZXZlbnQtPmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09USCAmJiAhbV9kZWx0YVgg
JiYgIW1fZGVsdGFZID8KKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCA6Cisg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRpZgorI2Vsc2UKKyAg
ICBtX3BoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOworI2VuZGlmIC8vIEdU
S19BUElfVkVSU0lPTl8yCisKICAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoc3RhdGljX2Nhc3Q8
aW50PihldmVudC0+eCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnkpKTsKICAgICBtX2dsb2Jh
bFBvc2l0aW9uID0gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eF9yb290KSwgc3Rh
dGljX2Nhc3Q8aW50PihldmVudC0+eV9yb290KSk7CiAgICAgbV9ncmFudWxhcml0eSA9IFNjcm9s
bEJ5UGl4ZWxXaGVlbEV2ZW50OwpAQCAtOTMsNCArMTA4LDEwIEBAIFBsYXRmb3JtV2hlZWxFdmVu
dDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAgICBtX2RlbHRh
WSAqPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsK
IH0KIAorRmxvYXRQb2ludCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OnN3aXBlVmVsb2NpdHkoKSBjb25z
dAoreworICAgIC8vIFRoZSBzd2lwaW5nIHZlbG9jaXR5IGlzIHN0b3JlZCBpbiB0aGUgZGVsdGFz
IG9mIHRoZSBldmVudCBkZWNsYXJpbmcgaXQuCisgICAgcmV0dXJuIGlzVHJhbnNpdGlvbmluZ1Rv
TW9tZW50dW1TY3JvbGwoKSA/IEZsb2F0UG9pbnQobV93aGVlbFRpY2tzWCwgbV93aGVlbFRpY2tz
WSkgOiBGbG9hdFBvaW50KCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCmluZGV4IDEzZTYzNTQuLjJiYTg5YTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yR3RrLmgiCiAKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEu
aCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgpAQCAtNDAsNiArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3JvbGxiYXJzQW5p
bWF0aW9uRHVyYXRpb24gPSAxOwogc3RhdGljIGNvbnN0IGRvdWJsZSBvdmVyZmxvd1Njcm9sbGJh
cnNBbmltYXRpb25IaWRlRGVsYXkgPSAyOworc3RhdGljIGNvbnN0IGRvdWJsZSBzY3JvbGxDYXB0
dXJlVGhyZXNob2xkTWlsbGlzZWNvbmRzID0gMTUwOwogCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xs
QW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFi
bGVBcmVhKQogewpAQCAtNTAsNiArNTIsMTQgQEAgU2Nyb2xsQW5pbWF0b3JHdGs6OlNjcm9sbEFu
aW1hdG9yR3RrKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IFNjcm9sbEFu
aW1hdG9yKHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9u
VGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvckd0azo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlv
blRpbWVyRmlyZWQpCiB7CisgICAgbV9raW5ldGljQW5pbWF0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxTY3JvbGxBbmltYXRpb25LaW5ldGljPihtX3Njcm9sbGFibGVBcmVhLCBbdGhpc10oRmxvYXRQ
b2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1vdmUocG9zaXRp
b24pKTsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICAgICAgaWYgKG1fc21vb3Ro
QW5pbWF0aW9uKQorICAgICAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnNldEN1cnJlbnRQb3Np
dGlvbihwb3NpdGlvbik7CisjZW5kaWYKKyAgICB9KTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQogICAgIGlmIChzY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkK
ICAgICAgICAgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CkBAIC02Myw0OCArNzMs
MTA4IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjp+U2Nyb2xsQW5pbWF0b3JHdGsoKQogI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKQogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21vb3Ro
U2Nyb2xsaW5nQW5pbWF0aW9uKCkKIHsKLSAgICBpZiAobV9hbmltYXRpb24pCisgICAgaWYgKG1f
c21vb3RoQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2FuaW1hdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBt
X2N1cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgewotICAgICAg
ICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9uOwotICAgICAg
ICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdURk1vdmUocG9zaXRpb24pOwotICAgICAgICBub3RpZnlQ
b3NpdGlvbkNoYW5nZWQoZGVsdGEpOworICAgIG1fc21vb3RoQW5pbWF0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxTY3JvbGxBbmltYXRpb25TbW9vdGg+KG1fc2Nyb2xsYWJsZUFyZWEsIG1fY3VycmVu
dFBvc2l0aW9uLCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAgIHVwZGF0
ZVBvc2l0aW9uKFdURk1vdmUocG9zaXRpb24pKTsKICAgICB9KTsKIH0KKyNlbmRpZgogCisjaWYg
RU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiBib29sIFNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGwo
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAgIGlmICghbV9zY3Jv
bGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSB8fCBncmFudWxhcml0eSA9PSBTY3Jv
bGxCeVByZWNpc2VQaXhlbCkKICAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwo
b3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIAogICAgIGVuc3Vy
ZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+c2Ny
b2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisgICAgcmV0
dXJuIG1fc21vb3RoQW5pbWF0aW9uLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBz
dGVwLCBtdWx0aXBsaWVyKTsKIH0KKyNlbmRpZgogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpz
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQog
ewogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRp
b25Gcm9tT2Zmc2V0KG9mZnNldCwgdG9GbG9hdFNpemUobV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxP
cmlnaW4oKSkpOwotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnNl
dEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdG9w
KCk7CisgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7CiAKLSAgICBGbG9hdFNpemUgZGVsdGEg
PSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9uOwotICAgIG1fY3VycmVudFBvc2l0aW9uID0g
cG9zaXRpb247Ci0gICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyNpZiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1f
c21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworI2VuZGlmCisK
KyAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CiB9CiAKLXZvaWQgU2Nyb2xs
QW5pbWF0b3JHdGs6OndpbGxFbmRMaXZlUmVzaXplKCkKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0
b3JHdGs6OmNvbXB1dGVWZWxvY2l0eSgpCiB7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAg
ICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9zY3JvbGxI
aXN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGRvdWJsZSBmaXJz
dCA9IG1fc2Nyb2xsSGlzdG9yeVswXS50aW1lc3RhbXAoKTsKKyAgICBkb3VibGUgbGFzdCA9IG1f
c2Nyb2xsSGlzdG9yeS5yYmVnaW4oKS0+dGltZXN0YW1wKCk7CisKKyAgICBpZiAobGFzdCA9PSBm
aXJzdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEZsb2F0UG9pbnQgYWNjdW1EZWx0YTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIHNjcm9sbEV2ZW50IDogbV9zY3JvbGxIaXN0b3J5KQorICAg
ICAgICBhY2N1bURlbHRhICs9IEZsb2F0UG9pbnQoc2Nyb2xsRXZlbnQuZGVsdGFYKCksIHNjcm9s
bEV2ZW50LmRlbHRhWSgpKTsKKworICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVhcigpOworCisgICAg
cmV0dXJuIEZsb2F0UG9pbnQoYWNjdW1EZWx0YS54KCkgKiAtMTAwMCAvIChsYXN0IC0gZmlyc3Qp
LCBhY2N1bURlbHRhLnkoKSAqIC0xMDAwIC8gKGxhc3QgLSBmaXJzdCkpOwogfQorCitib29sIFNj
cm9sbEFuaW1hdG9yR3RrOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYgZXZlbnQpCit7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdG9wKCk7CisKKyAgICBtX3Nj
cm9sbEhpc3RvcnkucmVtb3ZlQWxsTWF0Y2hpbmcoWyZldmVudF0gKFBsYXRmb3JtV2hlZWxFdmVu
dCYgb3RoZXJFdmVudCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBldmVudC50aW1lc3RhbXAo
KSAtIG90aGVyRXZlbnQudGltZXN0YW1wKCkgPiBzY3JvbGxDYXB0dXJlVGhyZXNob2xkTWlsbGlz
ZWNvbmRzOworICAgIH0pOworCisgICAgaWYgKGV2ZW50LmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9s
bCgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYWRkIHRoZSBldmVudCB0byB0aGUg
aGlzdG9yeSBhcyBpdHMgZGVsdGEgd2lsbCBiZSAoMCwgMCkuCisgICAgICAgIHN0YXRpY19jYXN0
PFNjcm9sbEFuaW1hdGlvbktpbmV0aWMqPihtX2tpbmV0aWNBbmltYXRpb24uZ2V0KCkpLT5zdGFy
dChtX2N1cnJlbnRQb3NpdGlvbiwgY29tcHV0ZVZlbG9jaXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEu
aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFy
KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGV2ZW50LmlzVHJhbnNp
dGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xl
YXIoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyo+KG1fa2lu
ZXRpY0FuaW1hdGlvbi5nZXQoKSktPnN0YXJ0KG1fY3VycmVudFBvc2l0aW9uLCBldmVudC5zd2lw
ZVZlbG9jaXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3Nj
cm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuYXBwZW5kKGV2ZW50KTsKKworICAgIHJldHVy
biBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChldmVudCk7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JHdGs6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sKKyAgICBtX2tpbmV0aWNBbmlt
YXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9M
TElORykKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0
aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JHdGs6OnVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikKK3sKKyAgICBG
bG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9uOworICAgIG1fY3Vy
cmVudFBvc2l0aW9uID0gV1RGTW92ZShwb3NpdGlvbik7CisgICAgbm90aWZ5UG9zaXRpb25DaGFu
Z2VkKGRlbHRhKTsKK30KIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CisgICAgbV9raW5ldGljQW5pbWF0aW9u
LT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3Ro
QW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCiAgICAgaWYgKCFzY3Jv
bGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTcsOSAr
MTg3LDExIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRI
b3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRp
Y0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhf
U0NST0xMSU5HKQotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVw
ZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAg
ICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAg
IGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAppbmRl
eCA3MGU1YjczLi5kZjU3MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2Nyb2xsQW5pbWF0b3JHdGsuaApAQCAtNDYsOSArNDYsMTEgQEAgcHVibGljOgogcHJpdmF0ZToK
ICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBib29sIHNjcm9sbChTY3JvbGxiYXJP
cmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxp
ZXIpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbEVuZExpdmVS
ZXNpemUoKSBvdmVycmlkZTsKLSNlbmRpZgorCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEFkZEhvcml6
b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CkBAIC02MywxNiArNjUsMjIgQEAg
cHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRT
aXplJiBkZWx0YSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBsb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRl
VG9IaWRkZW4oYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIHVwZGF0ZVBvc2l0aW9uKEZsb2F0
UG9pbnQmJik7CisKICAgICB2b2lkIG92ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVk
KCk7CiAgICAgdm9pZCBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKICAgICB2b2lkIGhpZGVPdmVy
bGF5U2Nyb2xsYmFycygpOwogICAgIHZvaWQgdXBkYXRlT3ZlcmxheVNjcm9sbGJhcnNPcGFjaXR5
KCk7CiAKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVWZWxvY2l0eSgpOworCiAjaWYgRU5BQkxFKFNN
T09USF9TQ1JPTExJTkcpCiAgICAgdm9pZCBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24o
KTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fYW5pbWF0aW9uOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fc21vb3RoQW5pbWF0aW9uOwog
I2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9raW5ldGljQW5p
bWF0aW9uOworICAgIFZlY3RvcjxQbGF0Zm9ybVdoZWVsRXZlbnQ+IG1fc2Nyb2xsSGlzdG9yeTsK
ICAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07
CiAgICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsK
ICAgICBib29sIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDZlMjI0NmQuLmU1OGI0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NCBAQAorMjAxNi0w
Ni0xNSAgQWRyaWVuIFBsYXphcyAgPGFwbGF6YXNAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XSBBZGQga2luZXRpYyBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NTc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCB0aGUgbm90aW9uIG9mIHBoYXNlIGFuZCBtb21lbnR1bSBwaGFz
ZSB0byBXZWJXaGVlbEV2ZW50LgorCisgICAgICAgIE1ha2UgV2ViV2hlZWxFdmVudCBtYW5hZ2Ug
dGhlICdpc19zdG9wJyBhdHRyaWJ1dGUgb2YgR2RrRXZlbnRTY3JvbGwgdG8gY3JlYXRlIHRoZSBj
b3JyZXNwb25kaW5nIFdlYldoZWVsRXZlbnQKKyAgICAgICAgd2l0aCB0aGUgY29ycmVjdCBwaGFz
ZXMgYW5kIGRlbHRhcy4KKworICAgICAgICBNYWtlIEdlc3R1cmVDb250cm9sbGVyIG1hbmFnZSBz
d2lwZXMgdG8gY3JlYXRlIHRoZSBjb3JyZXNwb25kaW5nIFdlYldoZWVsRXZlbnQgd2l0aCB0aGUg
Y29ycmVjdCBwaGFzZXMgYW5kCisgICAgICAgIGRlbHRhcy4KKworICAgICAgICAqIFNoYXJlZC9O
YXRpdmVXZWJXaGVlbEV2ZW50Lmg6CisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Lmg6CisgICAg
ICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OnBoYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
V2hlZWxFdmVudDo6bW9tZW50dW1QaGFzZSk6CisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Q29u
dmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yfD0pOgorICAgICAgICAoV2Vi
S2l0Ojp0b1BsYXRmb3JtV2hlZWxldmVudFBoYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0
MlBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVudCk6CisgICAgICAg
ICogU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2
ZW50OjpXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6ZGVjb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBT
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL2d0ay9XZWJF
dmVudEZhY3RvcnkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpjYW5Ta2lwV2hlZWxFdmVudCk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVy
ZUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxl
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6aXNQcm9jZXNzaW5n
R2VzdHVyZXMpOgorICAgICAgICAoV2ViS2l0OjpuZXdTY3JvbGxFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKToKKyAgICAg
ICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKToK
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbik6
CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0
TW9tZW50dW1TY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6U3dp
cGVHZXN0dXJlOjpzd2lwZSk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpT
d2lwZUdlc3R1cmU6OlN3aXBlR2VzdHVyZSk6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9HZXN0
dXJlQ29udHJvbGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjYW5Ta2lwV2hlZWxFdmVudCk6
CisKIDIwMTYtMDYtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIwMTg4MCk6IFdlYlNvY2tldHMgYmFzZWQgcmVtb3Rl
IGluc3BlY3RvciBpcyBicm9rZW4gc2luY2UgcjIwMTg4MApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKaW5kZXggMTUzMzIyMi4uNDUwMWY3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCkBAIC01Miw2ICs1Miw3IEBA
IHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KGNv
bnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKTsKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2
ZW50Kik7CisgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCosIFdlYldoZWVsRXZlbnQ6
OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKTsKICNlbGlmIFBMQVRG
T1JNKEVGTCkKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KGNvbnN0IEV2YXNfRXZlbnRfTW91c2Vf
V2hlZWwqLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRvV2ViQ29udGVudCwgY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiB0b0RldmljZVNjcmVlbik7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkV2ZW50LmgKaW5kZXggNGJmYTBkOC4uMThiZmYyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkV2ZW50LmgKQEAgLTE3OSw3ICsxNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIFNjcm9s
bEJ5UGl4ZWxXaGVlbEV2ZW50CiAgICAgfTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBM
QVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgZW51bSBQaGFzZSB7CiAgICAgICAg
IFBoYXNlTm9uZSAgICAgICAgPSAwLAogICAgICAgICBQaGFzZUJlZ2FuICAgICAgID0gMSA8PCAw
LApAQCAtMTk2LDYgKzE5Niw4IEBAIHB1YmxpYzoKICAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBNb2RpZmllcnMsIGRv
dWJsZSB0aW1lc3RhbXApOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdlYldoZWVsRXZlbnQo
VHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIGJvb2wg
ZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlLCBQaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwg
Ym9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzLCB1aW50MzJfdCBzY3JvbGxDb3VudCwgY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiB1bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEsIE1vZGlm
aWVycywgZG91YmxlIHRpbWVzdGFtcCk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgV2ViV2hl
ZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBQaGFzZSwgUGhh
c2UgbW9tZW50dW1QaGFzZSwgR3JhbnVsYXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFt
cCk7CiAjZW5kaWYKIAogICAgIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQpAQCAtMjA0LDkgKzIwNiwxMSBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplIHdoZWVsVGlja3MoKSBjb25zdCB7IHJldHVybiBt
X3doZWVsVGlja3M7IH0KICAgICBHcmFudWxhcml0eSBncmFudWxhcml0eSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEdyYW51bGFyaXR5PihtX2dyYW51bGFyaXR5KTsgfQogICAgIGJvb2wg
ZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb25J
bnZlcnRlZEZyb21EZXZpY2U7IH0KLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShD
T0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFBoYXNlIHBoYXNlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UGhhc2U+KG1fcGhhc2UpOyB9CiAgICAgUGhhc2UgbW9tZW50dW1QaGFzZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNlPihtX21vbWVudHVtUGhhc2UpOyB9Cisj
ZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdE
ZWx0YXMoKSBjb25zdCB7IHJldHVybiBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7IH0KICAg
ICB1aW50MzJfdCBzY3JvbGxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsQ291bnQ7IH0K
ICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhOyB9CkBAIC0y
MjQsOSArMjI4LDExIEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fd2hlZWxU
aWNrczsKICAgICB1aW50MzJfdCBtX2dyYW51bGFyaXR5OyAvLyBHcmFudWxhcml0eQogICAgIGJv
b2wgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKEdUSykKKyAgICB1aW50MzJfdCBtX3BoYXNlIHsgUGhhc2U6OlBoYXNlTm9uZSB9
OworICAgIHVpbnQzMl90IG1fbW9tZW50dW1QaGFzZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsKKyNl
bmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHVpbnQzMl90IG1fcGhhc2U7IC8vIFBoYXNl
Ci0gICAgdWludDMyX3QgbV9tb21lbnR1bVBoYXNlOyAvLyBQaGFzZQogICAgIGJvb2wgbV9oYXNQ
cmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwogICAgIHVpbnQzMl90IG1fc2Nyb2xsQ291bnQ7CiAgICAg
V2ViQ29yZTo6RmxvYXRTaXplIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAppbmRleCBlZWI3NDQxLi5l
NzgzOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJz
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNw
cApAQCAtMTUxLDkgKzE1MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fd2hlZWxUaWNrc1kgPSB3
ZWJFdmVudC53aGVlbFRpY2tzKCkuaGVpZ2h0KCk7CiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSAo
d2ViRXZlbnQuZ3JhbnVsYXJpdHkoKSA9PSBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBhZ2VXaGVl
bEV2ZW50KSA/IFdlYkNvcmU6OlNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQgOiBXZWJDb3JlOjpTY3Jv
bGxCeVBpeGVsV2hlZWxFdmVudDsKICAgICAgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZp
Y2UgPSB3ZWJFdmVudC5kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoKTsKLSNpZiBQTEFURk9S
TShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICBt
X3BoYXNlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U+KHdl
YkV2ZW50LnBoYXNlKCkpOwogICAgICAgICBtX21vbWVudHVtUGhhc2UgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4od2ViRXZlbnQubW9tZW50dW1QaGFzZSgp
KTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBtX2hhc1ByZWNpc2VTY3Jv
bGxpbmdEZWx0YXMgPSB3ZWJFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCk7CiAgICAg
ICAgIG1fc2Nyb2xsQ291bnQgPSB3ZWJFdmVudC5zY3JvbGxDb3VudCgpOwogICAgICAgICBtX3Vu
YWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVggPSB3ZWJFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xs
aW5nRGVsdGEoKS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YldoZWVsRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3Bw
CmluZGV4IGQyNTBhMTQuLjU2MzE5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJXaGVlbEV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxF
dmVudC5jcHAKQEAgLTY3LDYgKzY3LDIwIEBAIFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQo
VHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50CiB7CiAg
ICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOwogfQorI2VsaWYgUExBVEZPUk0oR1RL
KQorV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNp
emUmIGRlbHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlja3MsIFBoYXNlIHBoYXNlLCBQaGFz
ZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgTW9kaWZpZXJzIG1vZGlm
aWVycywgZG91YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdlYkV2ZW50KHR5cGUsIG1vZGlmaWVycywg
dGltZXN0YW1wKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fZ2xvYmFsUG9z
aXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgLCBtX2RlbHRhKGRlbHRhKQorICAgICwgbV93aGVl
bFRpY2tzKHdoZWVsVGlja3MpCisgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAg
ICwgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCisgICAgLCBtX3BoYXNlKHBo
YXNlKQorICAgICwgbV9tb21lbnR1bVBoYXNlKG1vbWVudHVtUGhhc2UpCit7CisgICAgQVNTRVJU
KGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViV2hlZWxFdmVu
dDo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApAQCAtNzksOSAr
OTMsMTEgQEAgdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBtX3doZWVsVGlja3M7CiAgICAgZW5jb2Rl
ciA8PCBtX2dyYW51bGFyaXR5OwogICAgIGVuY29kZXIgPDwgbV9kaXJlY3Rpb25JbnZlcnRlZEZy
b21EZXZpY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBM
QVRGT1JNKEdUSykKICAgICBlbmNvZGVyIDw8IG1fcGhhc2U7CiAgICAgZW5jb2RlciA8PCBtX21v
bWVudHVtUGhhc2U7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBlbmNvZGVyIDw8
IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAgICBlbmNvZGVyIDw8IG1fc2Nyb2xsQ291
bnQ7CiAgICAgZW5jb2RlciA8PCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YTsKQEAgLTEw
NCwxMSArMTIwLDEzIEBAIGJvb2wgV2ViV2hlZWxFdmVudDo6ZGVjb2RlKElQQzo6QXJndW1lbnRE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJXaGVlbEV2ZW50JiB0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1f
cGhhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0
Lm1fbW9tZW50dW1QaGFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX2hhc1ByZWNpc2VTY3Jv
bGxpbmdEZWx0YXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh0Lm1fc2Nyb2xsQ291bnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggYjM2NzYxMi4uNWNhZjNkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRH
dGsuY3BwCkBAIC0zNyw4ICszNywxNCBAQCBOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJX
aGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCkKIHsKIH0KIAorTmF0aXZlV2ViV2hlZWxFdmVudDo6
TmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCogZXZlbnQsIFdlYldoZWVsRXZlbnQ6OlBoYXNl
IHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKQorICAgIDogV2ViV2hl
ZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQsIHBoYXNl
LCBtb21lbnR1bVBoYXNlKSkKKyAgICAsIG1fbmF0aXZlRXZlbnQoZ2RrX2V2ZW50X2NvcHkoZXZl
bnQpKQoreworfQorCiBOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGNv
bnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQotICAgIDogV2ViV2hlZWxFdmVudChXZWJF
dmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSkpCisg
ICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChl
dmVudC5uYXRpdmVFdmVudCgpLCBldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNlKCkp
KQogICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudC5uYXRpdmVFdmVudCgp
KSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRG
YWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNw
cAppbmRleCAyZDY2MzkzLi40MjNjNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0xNDMsNiArMTQzLDI3IEBAIFdlYk1vdXNlRXZlbnQg
V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVu
dCwgaW50IGN1CiAKIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVl
bEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICBXZWJXaGVlbEV2ZW50OjpQ
aGFzZSBwaGFzZSA9IGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9ldmVudChldmVudCkgPworICAg
ICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCA6CisgICAgICAgIFdlYldoZWVs
RXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZWxzZQorICAgIGRvdWJsZSBkZWx0YVgsIGRl
bHRhWTsKKyAgICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMoZXZlbnQsICZkZWx0YVgsICZk
ZWx0YVkpOworICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gZXZlbnQtPnNjcm9sbC5k
aXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIWRlbHRhWCAmJiAhZGVsdGFZID8KKyAg
ICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQgOgorICAgICAgICBXZWJXaGVl
bEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworI2VuZGlmCisjZWxzZQorICAgIFdlYldoZWVs
RXZlbnQ6OlBoYXNlIHBoYXNlID0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZDsK
KyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCisgICAgcmV0dXJuIGNyZWF0ZVdlYldoZWVs
RXZlbnQoZXZlbnQsIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lKTsKK30K
KworV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29u
c3QgR2RrRXZlbnQqIGV2ZW50LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSwgV2ViV2hlZWxF
dmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSkKK3sKICAgICBkb3VibGUgeCwgeSwgeFJvb3QsIHlS
b290OwogICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkpOwogICAgIGdka19l
dmVudF9nZXRfcm9vdF9jb29yZHMoZXZlbnQsICZ4Um9vdCwgJnlSb290KTsKQEAgLTE3OSwxMyAr
MjAwLDE1IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2
ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKICAgICBGbG9hdFNpemUgZGVsdGEod2hlZWxUaWNr
cy53aWR0aCgpICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQoKSAqIHN0ZXApOwogCiAgICAgcmV0
dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIEludFBvaW50KHgsIHkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHhS
b290LCB5Um9vdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgd2hlZWxUaWNrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBXZWJX
aGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Z2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CisgICAgICAgIEludFBvaW50KHgsIHkpLAorICAg
ICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAorICAgICAgICBkZWx0YSwKKyAgICAgICAgd2hl
ZWxUaWNrcywKKyAgICAgICAgcGhhc2UsCisgICAgICAgIG1vbWVudHVtUGhhc2UsCisgICAgICAg
IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAorICAgICAgICBtb2RpZmll
cnNGb3JFdmVudChldmVudCksCisgICAgICAgIGdka19ldmVudF9nZXRfdGltZShldmVudCkpOwog
fQogCiBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRF
dmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVz
dWx0cyYgY29tcG9zaXRpb25SZXN1bHRzLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKaW5kZXggMjhiNjk1My4u
OGZlN2NkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZh
Y3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5o
CkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIFdlYkV2ZW50RmFjdG9yeSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChjb25zdCBHZGtFdmVudCos
IGludCk7CiAgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChjb25z
dCBHZGtFdmVudCopOworICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZl
bnQoY29uc3QgR2RrRXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6
UGhhc2UgbW9tZW50dW1QaGFzZSk7CiAgICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3JlYXRl
V2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCosIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0
aW9uUmVzdWx0cyYsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpOwogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAgICAgc3RhdGljIFdlYlRvdWNoRXZlbnQgY3JlYXRlV2ViVG91Y2hFdmVudChj
b25zdCBHZGtFdmVudCosIFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+JiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAxN2RjOTFlLi5jZjRmZGU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTgzMCw3
ICsxODMwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0
aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAKICAgICBpZiAoIW1fY3VycmVudGx5UHJvY2Vzc2Vk
V2hlZWxFdmVudHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fd2hlZWxFdmVudFF1ZXVlLmFwcGVu
ZChldmVudCk7Ci0gICAgICAgIGlmIChtX3doZWVsRXZlbnRRdWV1ZS5zaXplKCkgPCB3aGVlbEV2
ZW50UXVldWVTaXplVGhyZXNob2xkKQorICAgICAgICBpZiAoIXNob3VsZFByb2Nlc3NXaGVlbEV2
ZW50Tm93KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gVGhlIHF1ZXVl
IGhhcyB0b28gbWFueSB3aGVlbCBldmVudHMsIHNvIHB1c2ggYSBuZXcgZXZlbnQuCiAgICAgfQpA
QCAtMTg3MSw2ICsxODcxLDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kV2hlZWxFdmVudChj
b25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKICAgICBtX3Byb2Nlc3MtPmlzUmVzcG9uc2l2ZShu
dWxscHRyKTsKIH0KIAorYm9vbCBXZWJQYWdlUHJveHk6OnNob3VsZFByb2Nlc3NXaGVlbEV2ZW50
Tm93KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworI2lmIFBMQVRGT1JNKEdUSykKKyAg
ICAvLyBEb24ndCBxdWV1ZSBldmVudHMgcmVwcmVzZW50aW5nIGEgbm9uLXRyaXZpYWwgc2Nyb2xs
aW5nIHBoYXNlIHRvCisgICAgLy8gYXZvaWQgaGF2aW5nIHRoZW0gdHJhcHBlZCBpbiB0aGUgcXVl
dWUsIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgYQorICAgIC8vIHNjcm9sbGluZyBzZXNzaW9uIHRv
IGJlZ2lubmluZyBvciBlbmQgY29ycmVjdGx5LgorICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQg
YnkgcGxhdGZvcm1zIHdob3NlIFdlYldoZWVsRXZlbnQgaGFzIHRoaXMgcGhhc2UKKyAgICAvLyBp
bmZvcm1hdGlvbiAoQ29jb2EgYW5kIEdUSyspIGJ1dCBDb2NvYSB3YXMgZmluZSB3aXRob3V0IGl0
LgorICAgIGlmIChldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5v
bmUKKyAgICAgICAgfHwgZXZlbnQucGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhh
c2VDaGFuZ2VkCisgICAgICAgIHx8IGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2
ZW50OjpQaGFzZTo6UGhhc2VOb25lCisgICAgICAgIHx8IGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9
PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyNlbmRpZgorICAgIGlmIChtX3do
ZWVsRXZlbnRRdWV1ZS5zaXplKCkgPj0gd2hlZWxFdmVudFF1ZXVlU2l6ZVRocmVzaG9sZCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBl
dmVudCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAppbmRleCBmNzE4NWQwLi43ZGQ1MzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xNDY2LDYgKzE0NjYsNyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBwcm9jZXNzTmV4dFF1ZXVlZFdoZWVsRXZlbnQoKTsKICAgICB2b2lkIHNlbmRXaGVlbEV2
ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICBib29sIHNob3VsZFByb2Nlc3NXaGVlbEV2
ZW50Tm93KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiAgICAgV2ViQ29yZTo6VHJhY2tpbmdUeXBlIHRvdWNoRXZlbnRUcmFja2luZ1R5cGUoY29uc3Qg
V2ViVG91Y2hFdmVudCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAppbmRleCA3ZTE1NzdjLi45MzY5OThmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcApA
QCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogR2VzdHVyZUNvbnRyb2xsZXI6
Okdlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICA6IG1fZHJhZ0dlc3R1
cmUocGFnZSkKKyAgICAsIG1fc3dpcGVHZXN0dXJlKHBhZ2UpCiAgICAgLCBtX3pvb21HZXN0dXJl
KHBhZ2UpCiB7CiB9CkBAIC00OSwxMyArNTAsMTQgQEAgYm9vbCBHZXN0dXJlQ29udHJvbGxlcjo6
aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogewogICAgIGJvb2wgd2FzUHJvY2Vz
c2luZ0dlc3R1cmVzID0gaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKICAgICBtX2RyYWdHZXN0dXJl
LmhhbmRsZUV2ZW50KGV2ZW50KTsKKyAgICBtX3N3aXBlR2VzdHVyZS5oYW5kbGVFdmVudChldmVu
dCk7CiAgICAgbV96b29tR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2
ZW50LT50eXBlID09IEdES19UT1VDSF9FTkQgPyB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgOiBpc1By
b2Nlc3NpbmdHZXN0dXJlcygpOwogfQogCiBib29sIEdlc3R1cmVDb250cm9sbGVyOjppc1Byb2Nl
c3NpbmdHZXN0dXJlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHJhZ0dlc3R1cmUuaXNBY3Rp
dmUoKSB8fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fZHJhZ0dlc3R1
cmUuaXNBY3RpdmUoKSB8fCBtX3N3aXBlR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fem9vbUdlc3R1
cmUuaXNBY3RpdmUoKTsKIH0KIAogR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6Okdlc3R1cmUo
R3RrR2VzdHVyZSogZ2VzdHVyZSwgV2ViUGFnZVByb3h5JiBwYWdlKQpAQCAtNzUsMjAgKzc3LDQw
IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KGNvbnN0IEdk
a0V2ZW50KiBldmVudCkKICAgICBndGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQoR1RL
X0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQpOwogfQogCi12b2lkIEdl
c3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCog
ZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSkKK3N0YXRpYyBHVW5pcXVlUHRyPEdka0V2ZW50PiBj
cmVhdGVTY3JvbGxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUg
eSwgZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgZ2Jvb2xlYW4gaXNTdG9wKQogewotICAg
IEFTU0VSVChtX2luRHJhZyk7CiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQo
Z2RrX2V2ZW50X25ldyhHREtfU0NST0xMKSk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC50aW1l
ID0gZXZlbnQtPnRvdWNoLnRpbWU7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54ID0gbV9zdGFy
dC54KCk7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55ID0gbV9zdGFydC55KCk7CisgICAgc2Ny
b2xsRXZlbnQtPnNjcm9sbC54ID0geDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSB5Owog
ICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsKICAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CiAgICAg
c2Nyb2xsRXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKLSAgICBz
Y3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAobV9vZmZzZXQueCgpIC0geCkgLyBTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95
ID0gKG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOwor
ICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IGRlbHRhWDsKKyAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLmRlbHRhX3kgPSBkZWx0YVk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5zdGF0
ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKLSAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRp
dmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpKSk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMjAsIDApCisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5pc19zdG9wID0gaXNTdG9wOwor
I2VuZGlmCisgICAgcmV0dXJuIHNjcm9sbEV2ZW50OworfQorCit2b2lkIEdlc3R1cmVDb250cm9s
bGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAg
ICBBU1NFUlQoIW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVu
dCA9IGNyZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LCBtX3N0YXJ0LngoKSwgbV9zdGFydC55KCksIDAs
IDAsIEZBTFNFKTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2
ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbiwg
V2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOworfQorCit2b2lkIEdlc3R1cmVDb250
cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRv
dWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICBBU1NFUlQobV9pbkRyYWcpOworICAgIEdVbmlxdWVQ
dHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQoZXZlbnQsCisgICAg
ICAgIG1fc3RhcnQueCgpLCBtX3N0YXJ0LnkoKSwKKyAgICAgICAgKG1fb2Zmc2V0LngoKSAtIHgp
IC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLAorICAgICAgICAobV9vZmZzZXQueSgp
IC0geSkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksCisgICAgICAgIEZBTFNFKTsK
KyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2
ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkLCBXZWJXaGVlbEV2
ZW50OjpQaGFzZTo6UGhhc2VOb25lKSk7CiB9CiAKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRy
YWdHZXN0dXJlOjpoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQpAQCAtMTI4LDYgKzE1
MCw3IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2Vz
dHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkCiAgICAgdW5zaWduZWQgZGVsYXk7CiAgICAg
Z19vYmplY3RfZ2V0KGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKHdpZGdldCksICJndGstbG9uZy1w
cmVzcy10aW1lIiwgJmRlbGF5LCBudWxscHRyKTsKICAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJl
c3NUaW1lb3V0LnN0YXJ0T25lU2hvdChkZWxheSAvIDEwMDAuMCk7CisgICAgZHJhZ0dlc3R1cmUt
PnN0YXJ0RHJhZyhndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkp
OwogfQogCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdH
ZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0
dXJlKQpAQCAtMTQ5LDExICsxNzIsMTQgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dl
c3R1cmU6OnVwZGF0ZShEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LAogdm9pZCBH
ZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2VzdHVyZSogZHJhZ0dlc3R1
cmUsIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQogewog
ICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RvcCgpOworICAgIGlmICghZ3Rr
X2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpIHsKKyAgICAgICAg
Z3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQp
OworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICghZHJhZ0dlc3R1cmUtPm1faW5EcmFn
KSB7CiAgICAgICAgIGRyYWdHZXN0dXJlLT5oYW5kbGVUYXAoZ3RrX2dlc3R1cmVfZ2V0X2xhc3Rf
ZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKTsKICAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRl
KGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOwotICAgIH0gZWxzZSBpZiAoIWd0
a19nZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQotICAgICAgICBn
dGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7
CisgICAgfQogfQogCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6bG9uZ1By
ZXNzRmlyZWQoKQpAQCAtMTcyLDYgKzE5OCwzMCBAQCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dl
c3R1cmU6OkRyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZW5kIiwgR19DQUxMQkFDSyhlbmQpLCB0aGlz
KTsKIH0KIAordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzdGFydE1vbWVu
dHVtU2Nyb2xsKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHZlbG9jaXR5WCwgZG91Ymxl
IHZlbG9jaXR5WSkKK3sKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9IGNy
ZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LCBldmVudC0+dG91Y2gueCwgZXZlbnQtPnRvdWNoLnksIHZl
bG9jaXR5WCwgdmVsb2NpdHlZLCBUUlVFKTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChO
YXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFz
ZTo6UGhhc2VOb25lLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbikpOworfQorCit2
b2lkIEdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN3aXBlKFN3aXBlR2VzdHVyZSog
c3dpcGVHZXN0dXJlLCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZLCBHdGtHZXN0
dXJlKiBnZXN0dXJlKQoreworICAgIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlID0gZ3RrX2dl
c3R1cmVfc2luZ2xlX2dldF9jdXJyZW50X3NlcXVlbmNlKEdUS19HRVNUVVJFX1NJTkdMRShnZXN0
dXJlKSk7CisgICAgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdlc3R1cmUsIHNl
cXVlbmNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3RrX2dlc3R1cmVfc2V0X3NlcXVlbmNl
X3N0YXRlKGdlc3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7CisK
KyAgICBzd2lwZUdlc3R1cmUtPnN0YXJ0TW9tZW50dW1TY3JvbGwoZ3RrX2dlc3R1cmVfZ2V0X2xh
c3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpLCB2ZWxvY2l0eVgsIHZlbG9jaXR5WSk7Cit9CisK
K0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OlN3aXBlR2VzdHVyZShXZWJQYWdlUHJv
eHkmIHBhZ2UpCisgICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3N3aXBlX25ldyhwYWdlLnZpZXdX
aWRnZXQoKSksIHBhZ2UpCit7CisgICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5
KEdUS19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic3dpcGUiLCBHX0NBTExCQUNLKHN3
aXBlKSwgdGhpcyk7Cit9CisKIEludFBvaW50IEdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVy
ZTo6Y2VudGVyKCkgY29uc3QKIHsKICAgICBkb3VibGUgeCwgeTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCA4Njc5MmRmLi5lOTYw
MzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJv
bGxlci5oCkBAIC02Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgIERyYWdHZXN0dXJlKFdl
YlBhZ2VQcm94eSYpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBk
cmFnIHN0YXJ0ZWQsIGFsbG93aW5nIHRvIHN0b3Aga2luZXRpYyBkZWNlbGVyYXRpb24uCisgICAg
ICAgIHZvaWQgc3RhcnREcmFnKGNvbnN0IEdka0V2ZW50Kik7CiAgICAgICAgIHZvaWQgaGFuZGxl
RHJhZyhjb25zdCBHZGtFdmVudCosIGRvdWJsZSB4LCBkb3VibGUgeSk7CiAgICAgICAgIHZvaWQg
aGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50Kik7CiAgICAgICAgIHZvaWQgbG9uZ1ByZXNzRmlyZWQo
KTsKQEAgLTgyLDYgKzg0LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9pbkRyYWc7CiAg
ICAgfTsKIAorICAgIGNsYXNzIFN3aXBlR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFN3aXBlR2VzdHVyZShXZWJQYWdlUHJveHkmKTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIHZvaWQgc3RhcnRNb21lbnR1bVNjcm9sbChjb25zdCBHZGtFdmVu
dCosIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVkpOworCisgICAgICAgIHN0YXRp
YyB2b2lkIHN3aXBlKFN3aXBlR2VzdHVyZSosIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxv
Y2l0eVksIEd0a0dlc3R1cmUqKTsKKyAgICB9OworCiAgICAgY2xhc3MgWm9vbUdlc3R1cmUgZmlu
YWwgOiBwdWJsaWMgR2VzdHVyZSB7CiAgICAgcHVibGljOgogICAgICAgICBab29tR2VzdHVyZShX
ZWJQYWdlUHJveHkmKTsKQEAgLTEwMSw2ICsxMTMsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAg
ICBEcmFnR2VzdHVyZSBtX2RyYWdHZXN0dXJlOworICAgIFN3aXBlR2VzdHVyZSBtX3N3aXBlR2Vz
dHVyZTsKICAgICBab29tR2VzdHVyZSBtX3pvb21HZXN0dXJlOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281977</attachid>
            <date>2016-06-24 08:42:43 -0700</date>
            <delta_ts>2016-06-27 06:44:07 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>49079</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZjE2ZTg1Li4zMGZiOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTYtMDYtMTUgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMg
c2Nyb2xsaW5nIGFuaW1hdGlvbiBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGlu
ZzsgaXQgaXMgYmFzZWQgb24gR1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlw
ZS4KKworICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5k
IHN3aXBlIHZlbG9jaXR5IHRvIFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRp
bmcgb24gd2hldGhlciB0aGUgc2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBh
IHN3aXBlLCB0aGUgc2Nyb2xsIGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAg
dGhlIHN3aXBlIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3Ig
dXNlIHRoZSBvbmUgZnJvbSB0aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAg
ICAgbW9tZW50dW0gc2Nyb2xsaW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OnVzZUxhdGNoZWRFdmVudEVsZW1lbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNs
YW1wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNE
YXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5l
dGljOjpQZXJBeGlzRGF0YTo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnNldEN1cnJlbnRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0UG9pbnQ6OmlzT3JpZ2luKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVl
bEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxh
dGZvcm1XaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6
c3dpcGVWZWxvY2l0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRv
ckd0ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21vb3Ro
U2Nyb2xsaW5nQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3Rr
OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6Y29tcHV0ZVZlbG9jaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
R3RrOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
R3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6dXBkYXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JH
dGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaDoKKwogMjAxNi0wNi0yMyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NvdXBdIENsZWFuIHVwIFNv
Y2tldFN0cmVhbUhhbmRsZSBzb3VwIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDc0ZTUxOTUuLjJjZjA4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBA
IC03Nyw2ICs3Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGxvYWRlci9z
b3VwL1N1YnJlc291cmNlTG9hZGVyU291cC5jcHAKIAogICAgIHBsYXRmb3JtL0tpbGxSaW5nTm9u
ZS5jcHAKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcAogCiAgICAgcGxh
dGZvcm0vYXVkaW8vZ2xpYi9BdWRpb0J1c0dMaWIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggMDcxMzU1Yy4uNzZmNmM0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTUzLDcgKzUz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTY3JvbGxCeVBpeGVsV2hlZWxFdmVu
dCwKICAgICB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBlbnVtIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIDogdWludDhf
dCB7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAgICAgICAgPSAwLAogICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuICAgICAgID0gMSA8PCAwLApAQCAtNzcs
OCArNzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fZGlyZWN0aW9u
SW52ZXJ0ZWRGcm9tRGV2aWNlKGZhbHNlKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAg
ICAgLCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoZmFsc2UpCi0gICAgICAgICAgICAsIG1f
cGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQotICAgICAgICAgICAgLCBtX21vbWVu
dHVtUGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQogICAgICAgICAgICAgLCBtX3Nj
cm9sbENvdW50KDApCiAgICAgICAgICAgICAsIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
WCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkoMCkKQEAg
LTk4LDggKzk2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2RpcmVj
dGlvbkludmVydGVkRnJvbURldmljZShmYWxzZSkKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAg
ICAgICAgICwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZhbHNlKQotICAgICAgICAgICAg
LCBtX3BoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKLSAgICAgICAgICAgICwgbV9t
b21lbnR1bVBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKICAgICAgICAgICAgICwg
bV9zY3JvbGxDb3VudCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YVgoMCkKICAgICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKDAp
CkBAIC0xNjAsMTIgKzE1NiwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
c2hvdWxkQ29uc2lkZXJMYXRjaGluZygpIGNvbnN0OwogICAgICAgICBib29sIHNob3VsZFJlc2V0
TGF0Y2hpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBj
b25zdDsKLSAgICAgICAgYm9vbCBpc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CiAjZWxz
ZQogICAgICAgICBib29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQor
ICAgICAgICBib29sIGlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OworICAgICAgICBi
b29sIGlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oR1RLKQorICAgICAgICBGbG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25z
dDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZl
bnQoSFdORCwgV1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNNb3VzZUhXaGVlbCk7CiAgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudChIV05ELCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhdGlvbik7CkBAIC0xODAsMTAgKzE4MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGZsb2F0IG1fd2hlZWxUaWNrc1k7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAgICAgICAgIGJvb2wgbV9kaXJlY3Rpb25J
bnZlcnRlZEZyb21EZXZpY2U7CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykK
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZSB7IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlTm9uZSB9OworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtX21vbWVu
dHVtUGhhc2UgeyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgfTsKKyNlbmRpZgogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgICAgICBib29sIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsK
LSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZTsKLSAgICAgICAgUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2UgbV9tb21lbnR1bVBoYXNlOwogICAgICAgICB1bnNpZ25lZCBtX3Nj
cm9sbENvdW50OwogICAgICAgICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7
CiAgICAgICAgIGZsb2F0IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWTsKQEAgLTIxMiw3
ICsyMTcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV9w
aGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgJiYgbV9tb21lbnR1bVBoYXNlID09
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ7CiAgICAgfQorI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGlubGluZSBib29sIFBsYXRmb3JtV2hl
ZWxFdmVudDo6aXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgJiYgbV9tb21l
bnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKaW5kZXggMzkyOTk5Ny4uMmU1ZjYzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKQEAgLTM2LDEwICszNiwxMCBA
QCBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbEFuaW1hdGlvbiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uKCkgeyB9OwotICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IC8qIHN0ZXAgKi8sIGZsb2F0
IC8qIG11bHRpcGxpZXIgKi8pIHsgcmV0dXJuIHRydWU7IH07CiAgICAgdmlydHVhbCB2b2lkIHN0
b3AoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKSB7IH07CisgICAgdmly
dHVhbCB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgeyB9OwogICAg
IHZpcnR1YWwgdm9pZCBzZXJ2aWNlQW5pbWF0aW9uKCkgeyB9OwogCiBwcm90ZWN0ZWQ6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYmNlNzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApA
QCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYy5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KKworLyoKKyAqIFBlckF4aXNEYXRhIGlzIGEgcG9ydCBvZiBHdGtLaW5l
dGljU2Nyb2xsaW5nIGFzIG9mIEdUSysgMy4yMCwKKyAqIG1pbWlja2luZyBpdHMgQVBJIGFuZCBp
dHMgYmVoYXZpb3IuCisgKgorICogQWxsIG91ciBjdXJ2ZXMgYXJlIHNlY29uZCBkZWdyZWUgbGlu
ZWFyIGRpZmZlcmVudGlhbCBlcXVhdGlvbnMsIGFuZAorICogc28gdGhleSBjYW4gYWx3YXlzIGJl
IHdyaXR0ZW4gYXMgbGluZWFyIGNvbWJpbmF0aW9ucyBvZiAyIGJhc2UKKyAqIHNvbHV0aW9ucy4g
Y29lZjEgYW5kIGNvZWYyIGFyZSB0aGUgY29lZmZpY2llbnRzIHRvIHRoZXNlIHR3byBiYXNlCisg
KiBzb2x1dGlvbnMsIGFuZCBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3NpdGlvbiBh
bmQgdmVsb2NpdHkuCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygc2ltcGxlIGRlY2VsZXJhdGlvbiwg
dGhlIGRpZmZlcmVudGlhbCBlcXVhdGlvbiBpcworICoKKyAqICAgeScnID0gLW15JworICoKKyAq
IFdpdGggbSB0aGUgcmVzaXN0ZW5jZSBmYWN0b3IuIEZvciB0aGlzIHdlIHVzZSB0aGUgZm9sbG93
aW5nIDIKKyAqIGJhc2Ugc29sdXRpb25zOgorICoKKyAqICAgZjEoeCkgPSAxCisgKiAgIGYyKHgp
ID0gZXhwKC1teCkKKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBvdmVyc2hvb3QsIHRoZSBkaWZmZXJl
bnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHknJyA9IC1teScgLSBreQorICoKKyAqIFdpdGgg
bSB0aGUgcmVzaXN0YW5jZSwgYW5kIGsgdGhlIHNwcmluZyBzdGlmZm5lc3MgY29uc3RhbnQuIFdl
IGxldAorICogayA9IG1eMiAvIDQsIHNvIHRoYXQgdGhlIHN5c3RlbSBpcyBjcml0aWNhbGx5IGRh
bXBlZCAoaWUsIHJldHVybnMgdG8gaXRzCisgKiBlcXVpbGlicml1bSBwb3NpdGlvbiBhcyBxdWlj
a2x5IGFzIHBvc3NpYmxlLCB3aXRob3V0IG9zY2lsbGF0aW5nKSwgYW5kIG9mZnNldAorICogdGhl
IHdob2xlIHRoaW5nLCBzdWNoIHRoYXQgdGhlIGVxdWlsaWJyaXVtIHBvc2l0aW9uIGlzIGF0IDAu
IFRoaXMgZ2l2ZXMgdGhlCisgKiBiYXNlIHNvbHV0aW9ucworICoKKyAqICAgZjEoeCkgPSBleHAo
LW14IC8gMikKKyAqICAgZjIoeCkgPSB0IGV4cCgtbXggLyAyKQorICovCisKK3N0YXRpYyBjb25z
dCBkb3VibGUgZGVjZWxGcmljdGlvbiA9IDQ7CitzdGF0aWMgY29uc3QgZG91YmxlIGZyYW1lUmF0
ZSA9IDYwOworc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCA9IC4wMDE7
CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGNsYW1wKGRvdWJsZSB4LCBkb3VibGUgbG93LCBkb3Vi
bGUgaGlnaCkKK3sKKyAgICBBU1NFUlQobG93IDw9IGhpZ2gpOworCisgICAgcmV0dXJuICh4ID4g
aGlnaCkgPyBoaWdoIDogKCh4IDwgbG93KSA/IGxvdyA6IHgpOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0
YShkb3VibGUgbG93ZXIsIGRvdWJsZSB1cHBlciwgZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91
YmxlIGluaXRpYWxWZWxvY2l0eSkKKyAgICA6IG1fbG93ZXIobG93ZXIpCisgICAgLCBtX3VwcGVy
KHVwcGVyKQorICAgICwgbV9jb2VmMShpbml0aWFsVmVsb2NpdHkgLyBkZWNlbEZyaWN0aW9uICsg
aW5pdGlhbFBvc2l0aW9uKQorICAgICwgbV9jb2VmMigtaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxG
cmljdGlvbikKKyAgICAsIG1fcG9zaXRpb24oY2xhbXAoaW5pdGlhbFBvc2l0aW9uLCBsb3dlciwg
dXBwZXIpKQorICAgICwgbV92ZWxvY2l0eShpbml0aWFsUG9zaXRpb24gPCBsb3dlciB8fCBpbml0
aWFsUG9zaXRpb24gPiB1cHBlciA/IDAgOiBpbml0aWFsVmVsb2NpdHkpCit7Cit9CisKK2Jvb2wg
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoZG91Ymxl
IHRpbWVEZWx0YSkKK3sKKyAgICBtX2VsYXBzZWRUaW1lICs9IHRpbWVEZWx0YTsKKworICAgIGRv
dWJsZSBleHBvbmVudGlhbFBhcnQgPSBleHAoLWRlY2VsRnJpY3Rpb24gKiBtX2VsYXBzZWRUaW1l
KTsKKyAgICBtX3Bvc2l0aW9uID0gbV9jb2VmMSArIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7
CisgICAgbV92ZWxvY2l0eSA9IC1kZWNlbEZyaWN0aW9uICogbV9jb2VmMiAqIGV4cG9uZW50aWFs
UGFydDsKKworICAgIGlmIChtX3Bvc2l0aW9uIDwgbV9sb3dlcikgeworICAgICAgICBtX3Bvc2l0
aW9uID0gbV9sb3dlcjsKKyAgICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmICht
X3Bvc2l0aW9uID4gbV91cHBlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV91cHBlcjsKKyAg
ICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChmYWJzKG1fdmVsb2NpdHkpIDwg
MSkgeworICAgICAgICBtX3Bvc2l0aW9uID0gcm91bmQobV9wb3NpdGlvbik7CisgICAgICAgIG1f
dmVsb2NpdHkgPSAwOworICAgIH0KKworICAgIHJldHVybiBtX3ZlbG9jaXR5OworfQorCitTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24pCisgICAgOiBTY3JvbGxBbmltYXRpb24oc2Nyb2xs
YWJsZUFyZWEpCisgICAgLCBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKFdURk1vdmUo
bm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24pKQorICAgICwgbV9hbmltYXRpb25UaW1lcigq
dGhpcywgJlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQpCit7Cit9
CisKK1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKCkKK3sK
K30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdG9wKCkKK3sKKyAgICBtX2FuaW1h
dGlvblRpbWVyLnN0b3AoKTsKKyAgICBtX2hvcml6b250YWxEYXRhID0gTnVsbG9wdDsKKyAgICBt
X3ZlcnRpY2FsRGF0YSA9IE51bGxvcHQ7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yzo6c3RhcnQoY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBv
aW50JiB2ZWxvY2l0eSwgYm9vbCBtYXlIU2Nyb2xsLCBib29sIG1heVZTY3JvbGwpCit7CisgICAg
c3RvcCgpOworCisgICAgbV9wb3NpdGlvbiA9IGluaXRpYWxQb3NpdGlvbjsKKworICAgIGlmICgh
dmVsb2NpdHkueCgpICYmICF2ZWxvY2l0eS55KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtYXlIU2Nyb2xsKSB7CisgICAgICAgIG1faG9yaXpvbnRhbERhdGEgPSBQZXJBeGlzRGF0YSht
X3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpLAorICAgICAgICAg
ICAgaW5pdGlhbFBvc2l0aW9uLngoKSwgdmVsb2NpdHkueCgpKTsKKyAgICB9CisgICAgaWYgKG1h
eVZTY3JvbGwpIHsKKyAgICAgICAgbV92ZXJ0aWNhbERhdGEgPSBQZXJBeGlzRGF0YShtX3Njcm9s
bGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSwKKyAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpLAorICAgICAgICAgICAgaW5p
dGlhbFBvc2l0aW9uLnkoKSwgdmVsb2NpdHkueSgpKTsKKyAgICB9CisKKyAgICBhbmltYXRpb25U
aW1lckZpcmVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9u
VGltZXJGaXJlZCgpCit7CisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCk7CisgICAgZG91YmxlIGRlbHRhVG9OZXh0RnJhbWUgPSBjZWlsKChjdXJy
ZW50VGltZSAtIG1fc3RhcnRUaW1lKSAqIGZyYW1lUmF0ZSkgLyBmcmFtZVJhdGUgLSAoY3VycmVu
dFRpbWUgLSBtX3N0YXJ0VGltZSk7CisKKyAgICBpZiAobV9ob3Jpem9udGFsRGF0YSAmJiAhbV9o
b3Jpem9udGFsRGF0YS52YWx1ZSgpLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05leHRGcmFtZSkpCisg
ICAgICAgIG1faG9yaXpvbnRhbERhdGEgPSBOdWxsb3B0OworCisgICAgaWYgKG1fdmVydGljYWxE
YXRhICYmICFtX3ZlcnRpY2FsRGF0YS52YWx1ZSgpLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05leHRG
cmFtZSkpCisgICAgICAgIG1fdmVydGljYWxEYXRhID0gTnVsbG9wdDsKKworICAgIC8vIElmIG9u
ZSBvZiB0aGUgYXhlcyBkaWRuJ3QgZmluaXNoIGl0cyBhbmltYXRpb24gd2UgbXVzdCBjb250aW51
ZSBpdC4KKyAgICBpZiAobV9ob3Jpem9udGFsRGF0YSB8fCBtX3ZlcnRpY2FsRGF0YSkKKyAgICAg
ICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qoc3RkOjptYXgobWluaW11bVRpbWVySW50
ZXJ2YWwsIGRlbHRhVG9OZXh0RnJhbWUpKTsKKworICAgIGRvdWJsZSB4ID0gbV9ob3Jpem9udGFs
RGF0YSA/IG1faG9yaXpvbnRhbERhdGEudmFsdWUoKS5wb3NpdGlvbigpIDogbV9wb3NpdGlvbi54
KCk7CisgICAgZG91YmxlIHkgPSBtX3ZlcnRpY2FsRGF0YSA/IG1fdmVydGljYWxEYXRhLnZhbHVl
KCkucG9zaXRpb24oKSA6IG1fcG9zaXRpb24ueSgpOworICAgIG1fcG9zaXRpb24gPSBGbG9hdFBv
aW50KHgsIHkpOworICAgIG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24oRmxvYXRQb2lu
dChtX3Bvc2l0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk4ZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCkBAIC0wLDAgKzEsODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTY3JvbGxBbmltYXRpb25LaW5ldGljX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpY19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0
aW9uLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworCitjbGFzcyBT
Y3JvbGxBbmltYXRpb25LaW5ldGljIGZpbmFsOiBwdWJsaWMgU2Nyb2xsQW5pbWF0aW9uIHsKK3By
aXZhdGU6CisgICAgY2xhc3MgUGVyQXhpc0RhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGVy
QXhpc0RhdGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRp
b24sIGRvdWJsZSBpbml0aWFsVmVsb2NpdHkpOworCisgICAgICAgIGRvdWJsZSBwb3NpdGlvbigp
IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKworICAgICAgICBib29sIGFuaW1hdGVTY3JvbGwoZG91
YmxlIHRpbWVEZWx0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBkb3VibGUgbV9sb3dlciB7
IDAgfTsKKyAgICAgICAgZG91YmxlIG1fdXBwZXIgeyAwIH07CisKKyAgICAgICAgZG91YmxlIG1f
Y29lZjEgeyAwIH07CisgICAgICAgIGRvdWJsZSBtX2NvZWYyIHsgMCB9OworCisgICAgICAgIGRv
dWJsZSBtX2VsYXBzZWRUaW1lIHsgMCB9OworICAgICAgICBkb3VibGUgbV9wb3NpdGlvbiB7IDAg
fTsKKyAgICAgICAgZG91YmxlIG1fdmVsb2NpdHkgeyAwIH07CisgICAgfTsKKworcHVibGljOgor
ICAgIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbik7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOworCisgICAgdm9pZCBzdGFydChj
b25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9j
aXR5LCBib29sIG1heUhTY3JvbGwsIGJvb2wgbWF5VlNjcm9sbCk7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CisK
KyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNo
YW5nZWRGdW5jdGlvbjsKKworICAgIE9wdGlvbmFsPFBlckF4aXNEYXRhPiBtX2hvcml6b250YWxE
YXRhIHsgTnVsbG9wdCB9OworICAgIE9wdGlvbmFsPFBlckF4aXNEYXRhPiBtX3ZlcnRpY2FsRGF0
YSB7IE51bGxvcHQgfTsKKworICAgIGRvdWJsZSBtX3N0YXJ0VGltZSB7IDAgfTsKKyAgICBUaW1l
ciBtX2FuaW1hdGlvblRpbWVyOworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxF
dmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2
ZW50R3RrLmNwcAppbmRleCAxMDQ1YzQ0Li5jMzM3ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgog
CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgpAQCAtODMsNiArODQsMjAgQEAgUGxhdGZvcm1XaGVlbEV2
ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQogICAgIG1fd2hl
ZWxUaWNrc1ggPSBtX2RlbHRhWDsKICAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7CiAKKyNp
Zm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkK
KyAgICBtX3BoYXNlID0gZXZlbnQtPmlzX3N0b3AgPworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZUVuZGVkIDoKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOwor
I2Vsc2UKKyAgICBtX3BoYXNlID0gZXZlbnQtPmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09U
SCAmJiAhbV9kZWx0YVggJiYgIW1fZGVsdGFZID8KKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VFbmRlZCA6CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNl
bmRpZgorI2Vsc2UKKyAgICBtX3BoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2Vk
OworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisKICAgICBtX3Bvc2l0aW9uID0gSW50UG9p
bnQoc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnkp
KTsKICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihldmVu
dC0+eF9yb290KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eV9yb290KSk7CiAgICAgbV9ncmFu
dWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwpAQCAtOTMsNCArMTA4LDEwIEBAIFBs
YXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVu
dCkKICAgICBtX2RlbHRhWSAqPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpKTsKIH0KIAorRmxvYXRQb2ludCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OnN3aXBl
VmVsb2NpdHkoKSBjb25zdAoreworICAgIC8vIFRoZSBzd2lwaW5nIHZlbG9jaXR5IGlzIHN0b3Jl
ZCBpbiB0aGUgZGVsdGFzIG9mIHRoZSBldmVudCBkZWNsYXJpbmcgaXQuCisgICAgcmV0dXJuIGlz
VHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSA/IEZsb2F0UG9pbnQobV93aGVlbFRpY2tz
WCwgbV93aGVlbFRpY2tzWSkgOiBGbG9hdFBvaW50KCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCmluZGV4IDEzZTYzNTQu
LjJiYTg5YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxB
bmltYXRvckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFu
aW1hdG9yR3RrLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbEFuaW1hdG9yR3RrLmgiCiAKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25L
aW5ldGljLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgpAQCAtNDAsNiAr
NDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZs
b3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRpb24gPSAxOwogc3RhdGljIGNvbnN0IGRvdWJsZSBv
dmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25IaWRlRGVsYXkgPSAyOworc3RhdGljIGNvbnN0IGRv
dWJsZSBzY3JvbGxDYXB0dXJlVGhyZXNob2xkTWlsbGlzZWNvbmRzID0gMTUwOwogCiBzdGQ6OnVu
aXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJs
ZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewpAQCAtNTAsNiArNTIsMTQgQEAgU2Nyb2xsQW5pbWF0
b3JHdGs6OlNjcm9sbEFuaW1hdG9yR3RrKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkK
ICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9vdmVybGF5U2Ny
b2xsYmFyQW5pbWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvckd0azo6b3ZlcmxheVNj
cm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CisgICAgbV9raW5ldGljQW5pbWF0aW9uID0g
c3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5ldGljPihtX3Njcm9sbGFibGVBcmVh
LCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAgIHVwZGF0ZVBvc2l0aW9u
KFdURk1vdmUocG9zaXRpb24pKTsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICAg
ICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICAgICAgbV9zbW9vdGhBbmltYXRpb24t
PnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisjZW5kaWYKKyAgICB9KTsKKwogI2lmIEVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIGlmIChzY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmlt
YXRvckVuYWJsZWQoKSkKICAgICAgICAgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7
CkBAIC02Myw0OCArNzMsMTA4IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjp+U2Nyb2xsQW5pbWF0b3JH
dGsoKQogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogdm9pZCBTY3JvbGxBbmltYXRvckd0
azo6ZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCkKIHsKLSAgICBpZiAobV9hbmltYXRp
b24pCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX3Nj
cm9sbGFibGVBcmVhLCBtX2N1cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3Np
dGlvbikgewotICAgICAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBv
c2l0aW9uOwotICAgICAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdURk1vdmUocG9zaXRpb24pOwot
ICAgICAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOworICAgIG1fc21vb3RoQW5pbWF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25TbW9vdGg+KG1fc2Nyb2xsYWJs
ZUFyZWEsIG1fY3VycmVudFBvc2l0aW9uLCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7
CisgICAgICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1vdmUocG9zaXRpb24pKTsKICAgICB9KTsKIH0K
KyNlbmRpZgogCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiBib29sIFNjcm9sbEFuaW1h
dG9yR3RrOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQogewog
ICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSB8fCBncmFu
dWxhcml0eSA9PSBTY3JvbGxCeVByZWNpc2VQaXhlbCkKICAgICAgICAgcmV0dXJuIFNjcm9sbEFu
aW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVy
KTsKIAogICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwotICAgIHJldHVybiBt
X2FuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlw
bGllcik7CisgICAgcmV0dXJuIG1fc21vb3RoQW5pbWF0aW9uLT5zY3JvbGwob3JpZW50YXRpb24s
IGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIH0KKyNlbmRpZgogCiB2b2lkIFNjcm9s
bEFuaW1hdG9yR3RrOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgb2Zmc2V0KQogewogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCwgdG9GbG9hdFNpemUobV9zY3JvbGxh
YmxlQXJlYS5zY3JvbGxPcmlnaW4oKSkpOwotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAg
bV9hbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbV9raW5ldGlj
QW5pbWF0aW9uLT5zdG9wKCk7CisgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7CiAKLSAgICBG
bG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9uOwotICAgIG1fY3Vy
cmVudFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRh
KTsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9zbW9vdGhBbmltYXRp
b24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRp
b24pOworI2VuZGlmCisKKyAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CiB9
CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRMaXZlUmVzaXplKCkKK0Zsb2F0UG9p
bnQgU2Nyb2xsQW5pbWF0b3JHdGs6OmNvbXB1dGVWZWxvY2l0eSgpCiB7Ci0gICAgaWYgKG1fYW5p
bWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAg
ICBpZiAobV9zY3JvbGxIaXN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGRvdWJsZSBmaXJzdCA9IG1fc2Nyb2xsSGlzdG9yeVswXS50aW1lc3RhbXAoKTsKKyAgICBk
b3VibGUgbGFzdCA9IG1fc2Nyb2xsSGlzdG9yeS5yYmVnaW4oKS0+dGltZXN0YW1wKCk7CisKKyAg
ICBpZiAobGFzdCA9PSBmaXJzdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEZsb2F0UG9p
bnQgYWNjdW1EZWx0YTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNjcm9sbEV2ZW50IDogbV9zY3Jv
bGxIaXN0b3J5KQorICAgICAgICBhY2N1bURlbHRhICs9IEZsb2F0UG9pbnQoc2Nyb2xsRXZlbnQu
ZGVsdGFYKCksIHNjcm9sbEV2ZW50LmRlbHRhWSgpKTsKKworICAgIG1fc2Nyb2xsSGlzdG9yeS5j
bGVhcigpOworCisgICAgcmV0dXJuIEZsb2F0UG9pbnQoYWNjdW1EZWx0YS54KCkgKiAtMTAwMCAv
IChsYXN0IC0gZmlyc3QpLCBhY2N1bURlbHRhLnkoKSAqIC0xMDAwIC8gKGxhc3QgLSBmaXJzdCkp
OwogfQorCitib29sIFNjcm9sbEFuaW1hdG9yR3RrOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdG9w
KCk7CisKKyAgICBtX3Njcm9sbEhpc3RvcnkucmVtb3ZlQWxsTWF0Y2hpbmcoWyZldmVudF0gKFBs
YXRmb3JtV2hlZWxFdmVudCYgb3RoZXJFdmVudCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBl
dmVudC50aW1lc3RhbXAoKSAtIG90aGVyRXZlbnQudGltZXN0YW1wKCkgPiBzY3JvbGxDYXB0dXJl
VGhyZXNob2xkTWlsbGlzZWNvbmRzOworICAgIH0pOworCisgICAgaWYgKGV2ZW50LmlzRW5kT2ZO
b25Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYWRkIHRo
ZSBldmVudCB0byB0aGUgaGlzdG9yeSBhcyBpdHMgZGVsdGEgd2lsbCBiZSAoMCwgMCkuCisgICAg
ICAgIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdGlvbktpbmV0aWMqPihtX2tpbmV0aWNBbmltYXRp
b24uZ2V0KCkpLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgY29tcHV0ZVZlbG9jaXR5KCksIG1f
c2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFibGVBcmVhLnZl
cnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KGV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICBtX3Nj
cm9sbEhpc3RvcnkuY2xlYXIoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0aW9u
S2luZXRpYyo+KG1fa2luZXRpY0FuaW1hdGlvbi5nZXQoKSktPnN0YXJ0KG1fY3VycmVudFBvc2l0
aW9uLCBldmVudC5zd2lwZVZlbG9jaXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNj
cm9sbGJhcigpLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuYXBwZW5kKGV2ZW50
KTsKKworICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChldmVudCk7
Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sKKyAg
ICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKKyNpZiBFTkFC
TEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAg
IG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OnVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQmJiBwb3Np
dGlvbikKK3sKKyAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0
aW9uOworICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92ZShwb3NpdGlvbik7CisgICAgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKK30KIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6
ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CisgICAgbV9r
aW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworCiAjaWYgRU5BQkxFKFNN
T09USF9TQ1JPTExJTkcpCi0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlv
bi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisg
ICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlm
CiAgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICByZXR1
cm47CkBAIC0xMTcsOSArMTg3LDExIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZl
cnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogCiB2b2lkIFNjcm9sbEFuaW1h
dG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQog
eworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKwogI2lm
IEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAg
bV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc21vb3RoQW5p
bWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMo
KTsKICNlbmRpZgogICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nj
cm9sbEFuaW1hdG9yR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5p
bWF0b3JHdGsuaAppbmRleCA3MGU1YjczLi5kZjU3MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaApAQCAtNDYsOSArNDYsMTEgQEAgcHVi
bGljOgogcHJpdmF0ZToKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBib29sIHNj
cm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAs
IGZsb2F0IG11bHRpcGxpZXIpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCBzY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgd2lsbEVuZExpdmVSZXNpemUoKSBvdmVycmlkZTsKLSNlbmRpZgorCisgICAgYm9vbCBoYW5k
bGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCiAgICAg
dm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKICAgICB2
b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CkBAIC02
MywxNiArNjUsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xs
ZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBsb2NrT3Zlcmxh
eVNjcm9sbGJhclN0YXRlVG9IaWRkZW4oYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIHVwZGF0
ZVBvc2l0aW9uKEZsb2F0UG9pbnQmJik7CisKICAgICB2b2lkIG92ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lckZpcmVkKCk7CiAgICAgdm9pZCBzaG93T3ZlcmxheVNjcm9sbGJhcnMoKTsKICAg
ICB2b2lkIGhpZGVPdmVybGF5U2Nyb2xsYmFycygpOwogICAgIHZvaWQgdXBkYXRlT3ZlcmxheVNj
cm9sbGJhcnNPcGFjaXR5KCk7CiAKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVWZWxvY2l0eSgpOwor
CiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgdm9pZCBlbnN1cmVTbW9vdGhTY3Jv
bGxpbmdBbmltYXRpb24oKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+
IG1fYW5pbWF0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fc21v
b3RoQW5pbWF0aW9uOwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlv
bj4gbV9raW5ldGljQW5pbWF0aW9uOworICAgIFZlY3RvcjxQbGF0Zm9ybVdoZWVsRXZlbnQ+IG1f
c2Nyb2xsSGlzdG9yeTsKICAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbE92ZXJsYXlTY3JvbGxi
YXIgeyBudWxscHRyIH07CiAgICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsT3ZlcmxheVNjcm9sbGJh
ciB7IG51bGxwdHIgfTsKICAgICBib29sIG1fb3ZlcmxheVNjcm9sbGJhcnNMb2NrZWQgeyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDZlMjI0NmQuLmU1OGI0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1NCBAQAorMjAxNi0wNi0xNSAgQWRyaWVuIFBsYXphcyAgPGFwbGF6YXNAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBBZGQga2luZXRpYyBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTc1MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgbm90aW9uIG9mIHBoYXNlIGFu
ZCBtb21lbnR1bSBwaGFzZSB0byBXZWJXaGVlbEV2ZW50LgorCisgICAgICAgIE1ha2UgV2ViV2hl
ZWxFdmVudCBtYW5hZ2UgdGhlICdpc19zdG9wJyBhdHRyaWJ1dGUgb2YgR2RrRXZlbnRTY3JvbGwg
dG8gY3JlYXRlIHRoZSBjb3JyZXNwb25kaW5nIFdlYldoZWVsRXZlbnQKKyAgICAgICAgd2l0aCB0
aGUgY29ycmVjdCBwaGFzZXMgYW5kIGRlbHRhcy4KKworICAgICAgICBNYWtlIEdlc3R1cmVDb250
cm9sbGVyIG1hbmFnZSBzd2lwZXMgdG8gY3JlYXRlIHRoZSBjb3JyZXNwb25kaW5nIFdlYldoZWVs
RXZlbnQgd2l0aCB0aGUgY29ycmVjdCBwaGFzZXMgYW5kCisgICAgICAgIGRlbHRhcy4KKworICAg
ICAgICAqIFNoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50Lmg6CisgICAgICAgICogU2hhcmVkL1dl
YkV2ZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OnBoYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6bW9tZW50dW1QaGFzZSk6CisgICAgICAgICogU2hh
cmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yfD0p
OgorICAgICAgICAoV2ViS2l0Ojp0b1BsYXRmb3JtV2hlZWxldmVudFBoYXNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0MlBsYXRmb3JtV2hlZWxF
dmVudCk6CisgICAgICAgICogU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
V2hlZWxFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6ZGVj
b2RlKToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50
KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICog
U2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjYW5Ta2lwV2hlZWxFdmVudCk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29u
dHJvbGxlcjo6R2VzdHVyZUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29u
dHJvbGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxl
cjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMpOgorICAgICAgICAoV2ViS2l0OjpuZXdTY3JvbGxFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3Rh
cnREcmFnKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJl
OjpoYW5kbGVEcmFnKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdH
ZXN0dXJlOjpiZWdpbik6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpTd2lw
ZUdlc3R1cmU6OnN0YXJ0TW9tZW50dW1TY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJl
Q29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzd2lwZSk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OlN3aXBlR2VzdHVyZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsv
V2ViUGFnZVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjYW5T
a2lwV2hlZWxFdmVudCk6CisKIDIwMTYtMDYtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIwMTg4MCk6IFdlYlNvY2tl
dHMgYmFzZWQgcmVtb3RlIGluc3BlY3RvciBpcyBicm9rZW4gc2luY2UgcjIwMTg4MApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKaW5kZXggMTUzMzIyMi4uNDUw
MWY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCkBA
IC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBOYXRpdmVX
ZWJXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKTsKICAgICBOYXRpdmVXZWJX
aGVlbEV2ZW50KEdka0V2ZW50Kik7CisgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCos
IFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNl
KTsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KGNvbnN0IEV2
YXNfRXZlbnRfTW91c2VfV2hlZWwqLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRv
V2ViQ29udGVudCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiB0b0RldmljZVNjcmVl
bik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKaW5kZXggNGJmYTBkOC4uMThiZmYy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKQEAgLTE3OSw3ICsxNzksNyBAQCBwdWJsaWM6
CiAgICAgICAgIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50CiAgICAgfTsKIAotI2lmIFBMQVRGT1JN
KENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgZW51bSBQ
aGFzZSB7CiAgICAgICAgIFBoYXNlTm9uZSAgICAgICAgPSAwLAogICAgICAgICBQaGFzZUJlZ2Fu
ICAgICAgID0gMSA8PCAwLApAQCAtMTk2LDYgKzE5Niw4IEBAIHB1YmxpYzoKICAgICBXZWJXaGVl
bEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
IGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5
LCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3Jh
bnVsYXJpdHksIGJvb2wgZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlLCBQaGFzZSwgUGhhc2Ug
bW9tZW50dW1QaGFzZSwgYm9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzLCB1aW50MzJfdCBz
Y3JvbGxDb3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB1bmFjY2VsZXJhdGVkU2Nyb2xs
aW5nRGVsdGEsIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CisjZWxpZiBQTEFURk9STShH
VEspCisgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9z
aXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRp
Y2tzLCBQaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgR3JhbnVsYXJpdHksIE1vZGlmaWVycywg
ZG91YmxlIHRpbWVzdGFtcCk7CiAjZW5kaWYKIAogICAgIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQpAQCAtMjA0LDkgKzIwNiwx
MSBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplIHdoZWVsVGlja3MoKSBj
b25zdCB7IHJldHVybiBtX3doZWVsVGlja3M7IH0KICAgICBHcmFudWxhcml0eSBncmFudWxhcml0
eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdyYW51bGFyaXR5PihtX2dyYW51bGFyaXR5
KTsgfQogICAgIGJvb2wgZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKCkgY29uc3QgeyByZXR1
cm4gbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7IH0KLSNpZiBQTEFURk9STShDT0NPQSkK
KyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFBoYXNlIHBoYXNlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UGhhc2U+KG1fcGhhc2UpOyB9CiAgICAgUGhhc2Ug
bW9tZW50dW1QaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNlPihtX21vbWVu
dHVtUGhhc2UpOyB9CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBib29sIGhhc1By
ZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSBjb25zdCB7IHJldHVybiBtX2hhc1ByZWNpc2VTY3JvbGxp
bmdEZWx0YXM7IH0KICAgICB1aW50MzJfdCBzY3JvbGxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Nyb2xsQ291bnQ7IH0KICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0
ZWRTY3JvbGxpbmdEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGlu
Z0RlbHRhOyB9CkBAIC0yMjQsOSArMjI4LDExIEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6Rmxv
YXRTaXplIG1fd2hlZWxUaWNrczsKICAgICB1aW50MzJfdCBtX2dyYW51bGFyaXR5OyAvLyBHcmFu
dWxhcml0eQogICAgIGJvb2wgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7CisjaWYgUExB
VEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyAgICB1aW50MzJfdCBtX3BoYXNlIHsgUGhh
c2U6OlBoYXNlTm9uZSB9OworICAgIHVpbnQzMl90IG1fbW9tZW50dW1QaGFzZSB7IFBoYXNlOjpQ
aGFzZU5vbmUgfTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHVpbnQzMl90IG1f
cGhhc2U7IC8vIFBoYXNlCi0gICAgdWludDMyX3QgbV9tb21lbnR1bVBoYXNlOyAvLyBQaGFzZQog
ICAgIGJvb2wgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwogICAgIHVpbnQzMl90IG1fc2Ny
b2xsQ291bnQ7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGlu
Z0RlbHRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVy
c2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcApp
bmRleCBlZWI3NDQxLi5lNzgzOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViRXZlbnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZl
bnRDb252ZXJzaW9uLmNwcApAQCAtMTUxLDkgKzE1MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
d2hlZWxUaWNrc1kgPSB3ZWJFdmVudC53aGVlbFRpY2tzKCkuaGVpZ2h0KCk7CiAgICAgICAgIG1f
Z3JhbnVsYXJpdHkgPSAod2ViRXZlbnQuZ3JhbnVsYXJpdHkoKSA9PSBXZWJXaGVlbEV2ZW50OjpT
Y3JvbGxCeVBhZ2VXaGVlbEV2ZW50KSA/IFdlYkNvcmU6OlNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQg
OiBXZWJDb3JlOjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKICAgICAgICAgbV9kaXJlY3Rpb25J
bnZlcnRlZEZyb21EZXZpY2UgPSB3ZWJFdmVudC5kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2Uo
KTsKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0o
R1RLKQogICAgICAgICBtX3BoYXNlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U+KHdlYkV2ZW50LnBoYXNlKCkpOwogICAgICAgICBtX21vbWVudHVtUGhhc2Ug
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4od2ViRXZlbnQu
bW9tZW50dW1QaGFzZSgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBt
X2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSB3ZWJFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5n
RGVsdGFzKCk7CiAgICAgICAgIG1fc2Nyb2xsQ291bnQgPSB3ZWJFdmVudC5zY3JvbGxDb3VudCgp
OwogICAgICAgICBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVggPSB3ZWJFdmVudC51bmFj
Y2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YldoZWVsRXZlbnQuY3BwCmluZGV4IGQyNTBhMTQuLjU2MzE5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKQEAgLTY3LDYgKzY3LDIwIEBAIFdlYldoZWVsRXZlbnQ6
OldlYldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0
IEludFBvaW50CiB7CiAgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOwogfQorI2Vs
aWYgUExBVEZPUk0oR1RLKQorV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUs
IGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9u
LCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlja3MsIFBo
YXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwg
TW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdlYkV2ZW50KHR5
cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAg
ICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgLCBtX2RlbHRhKGRlbHRh
KQorICAgICwgbV93aGVlbFRpY2tzKHdoZWVsVGlja3MpCisgICAgLCBtX2dyYW51bGFyaXR5KGdy
YW51bGFyaXR5KQorICAgICwgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCisg
ICAgLCBtX3BoYXNlKHBoYXNlKQorICAgICwgbV9tb21lbnR1bVBoYXNlKG1vbWVudHVtUGhhc2Up
Cit7CisgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOworfQogI2VuZGlmCiAKIHZv
aWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdApAQCAtNzksOSArOTMsMTEgQEAgdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBDOjpB
cmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBtX3doZWVsVGlj
a3M7CiAgICAgZW5jb2RlciA8PCBtX2dyYW51bGFyaXR5OwogICAgIGVuY29kZXIgPDwgbV9kaXJl
Y3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBlbmNvZGVyIDw8IG1fcGhhc2U7CiAgICAg
ZW5jb2RlciA8PCBtX21vbWVudHVtUGhhc2U7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBlbmNvZGVyIDw8IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAgICBlbmNvZGVy
IDw8IG1fc2Nyb2xsQ291bnQ7CiAgICAgZW5jb2RlciA8PCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxp
bmdEZWx0YTsKQEAgLTEwNCwxMSArMTIwLDEzIEBAIGJvb2wgV2ViV2hlZWxFdmVudDo6ZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJXaGVlbEV2ZW50JiB0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1fZGlyZWN0aW9uSW52
ZXJ0ZWRGcm9tRGV2aWNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIFBMQVRGT1JNKENP
Q09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh0Lm1fcGhhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh0Lm1fbW9tZW50dW1QaGFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5t
X2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1fc2Nyb2xsQ291bnQpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggYjM2NzYx
Mi4uNWNhZjNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVX
ZWJXaGVlbEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2
ZVdlYldoZWVsRXZlbnRHdGsuY3BwCkBAIC0zNyw4ICszNywxNCBAQCBOYXRpdmVXZWJXaGVlbEV2
ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCkKIHsKIH0KIAorTmF0aXZl
V2ViV2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCogZXZlbnQsIFdlYldo
ZWVsRXZlbnQ6OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNl
KQorICAgIDogV2ViV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZl
bnQoZXZlbnQsIHBoYXNlLCBtb21lbnR1bVBoYXNlKSkKKyAgICAsIG1fbmF0aXZlRXZlbnQoZ2Rr
X2V2ZW50X2NvcHkoZXZlbnQpKQoreworfQorCiBOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVX
ZWJXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQotICAgIDogV2Vi
V2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQubmF0
aXZlRXZlbnQoKSkpCisgICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRl
V2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpLCBldmVudC5waGFzZSgpLCBldmVudC5t
b21lbnR1bVBoYXNlKCkpKQogICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVu
dC5uYXRpdmVFdmVudCgpKSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2Vi
RXZlbnRGYWN0b3J5LmNwcAppbmRleCAyZDY2MzkzLi40MjNjNDdjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0xNDMsNiArMTQzLDI3IEBA
IFdlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGNvbnN0
IEdka0V2ZW50KiBldmVudCwgaW50IGN1CiAKIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKKyNpZm5kZWYg
R1RLX0FQSV9WRVJTSU9OXzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICBX
ZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9ldmVu
dChldmVudCkgPworICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCA6Cisg
ICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZWxzZQorICAgIGRv
dWJsZSBkZWx0YVgsIGRlbHRhWTsKKyAgICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMoZXZl
bnQsICZkZWx0YVgsICZkZWx0YVkpOworICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0g
ZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIWRlbHRhWCAm
JiAhZGVsdGFZID8KKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQgOgor
ICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworI2VuZGlmCisjZWxz
ZQorICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gV2ViV2hlZWxFdmVudDo6UGhhc2U6
OlBoYXNlQ2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCisgICAgcmV0dXJu
IGNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQsIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6
UGhhc2VOb25lKTsKK30KKworV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdl
YldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBw
aGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSkKK3sKICAgICBkb3VibGUg
eCwgeSwgeFJvb3QsIHlSb290OwogICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwg
JnkpOwogICAgIGdka19ldmVudF9nZXRfcm9vdF9jb29yZHMoZXZlbnQsICZ4Um9vdCwgJnlSb290
KTsKQEAgLTE3OSwxMyArMjAwLDE1IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKICAgICBGbG9hdFNpemUg
ZGVsdGEod2hlZWxUaWNrcy53aWR0aCgpICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQoKSAqIHN0
ZXApOwogCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFBvaW50KHgsIHkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIEludFBvaW50KHhSb290LCB5Um9vdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVs
dGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWxUaWNrcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CisgICAgICAgIEludFBv
aW50KHgsIHkpLAorICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAorICAgICAgICBkZWx0
YSwKKyAgICAgICAgd2hlZWxUaWNrcywKKyAgICAgICAgcGhhc2UsCisgICAgICAgIG1vbWVudHVt
UGhhc2UsCisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAor
ICAgICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCisgICAgICAgIGdka19ldmVudF9nZXRf
dGltZShldmVudCkpOwogfQogCiBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0IFdlYkNvcmU6
OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzLCBWZWN0b3I8U3RyaW5nPiYm
IGNvbW1hbmRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVu
dEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgK
aW5kZXggMjhiNjk1My4uOGZlN2NkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dl
YkV2ZW50RmFjdG9yeS5oCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIFdlYkV2ZW50RmFjdG9yeSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChj
b25zdCBHZGtFdmVudCosIGludCk7CiAgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2Vi
V2hlZWxFdmVudChjb25zdCBHZGtFdmVudCopOworICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNy
ZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwg
V2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSk7CiAgICAgc3RhdGljIFdlYktleWJv
YXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCosIGNvbnN0IFdl
YkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpOwog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgc3RhdGljIFdlYlRvdWNoRXZlbnQgY3JlYXRl
V2ViVG91Y2hFdmVudChjb25zdCBHZGtFdmVudCosIFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9p
bnQ+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAx
N2RjOTFlLi5jZjRmZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcApAQCAtMTgzMCw3ICsxODMwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAKICAgICBpZiAoIW1fY3Vy
cmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVudHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fd2hlZWxF
dmVudFF1ZXVlLmFwcGVuZChldmVudCk7Ci0gICAgICAgIGlmIChtX3doZWVsRXZlbnRRdWV1ZS5z
aXplKCkgPCB3aGVlbEV2ZW50UXVldWVTaXplVGhyZXNob2xkKQorICAgICAgICBpZiAoIXNob3Vs
ZFByb2Nlc3NXaGVlbEV2ZW50Tm93KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgLy8gVGhlIHF1ZXVlIGhhcyB0b28gbWFueSB3aGVlbCBldmVudHMsIHNvIHB1c2ggYSBuZXcg
ZXZlbnQuCiAgICAgfQpAQCAtMTg3MSw2ICsxODcxLDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZW5kV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKICAgICBtX3Byb2Nlc3Mt
PmlzUmVzcG9uc2l2ZShudWxscHRyKTsKIH0KIAorYm9vbCBXZWJQYWdlUHJveHk6OnNob3VsZFBy
b2Nlc3NXaGVlbEV2ZW50Tm93KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworI2lmIFBM
QVRGT1JNKEdUSykKKyAgICAvLyBEb24ndCBxdWV1ZSBldmVudHMgcmVwcmVzZW50aW5nIGEgbm9u
LXRyaXZpYWwgc2Nyb2xsaW5nIHBoYXNlIHRvCisgICAgLy8gYXZvaWQgaGF2aW5nIHRoZW0gdHJh
cHBlZCBpbiB0aGUgcXVldWUsIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgYQorICAgIC8vIHNjcm9s
bGluZyBzZXNzaW9uIHRvIGJlZ2lubmluZyBvciBlbmQgY29ycmVjdGx5LgorICAgIC8vIFRoaXMg
aXMgb25seSBuZWVkZWQgYnkgcGxhdGZvcm1zIHdob3NlIFdlYldoZWVsRXZlbnQgaGFzIHRoaXMg
cGhhc2UKKyAgICAvLyBpbmZvcm1hdGlvbiAoQ29jb2EgYW5kIEdUSyspIGJ1dCBDb2NvYSB3YXMg
ZmluZSB3aXRob3V0IGl0LgorICAgIGlmIChldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6
OlBoYXNlOjpQaGFzZU5vbmUKKyAgICAgICAgfHwgZXZlbnQucGhhc2UoKSA9PSBXZWJXaGVlbEV2
ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkCisgICAgICAgIHx8IGV2ZW50Lm1vbWVudHVtUGhhc2Uo
KSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lCisgICAgICAgIHx8IGV2ZW50Lm1v
bWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyNlbmRp
ZgorICAgIGlmIChtX3doZWVsRXZlbnRRdWV1ZS5zaXplKCkgPj0gd2hlZWxFdmVudFF1ZXVlU2l6
ZVRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBmNzE4NWQwLi43ZGQ1MzE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xNDY2LDYgKzE0NjYsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzTmV4dFF1ZXVlZFdoZWVsRXZlbnQoKTsKICAgICB2
b2lkIHNlbmRXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICBib29sIHNob3Vs
ZFByb2Nlc3NXaGVlbEV2ZW50Tm93KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKIAogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiAgICAgV2ViQ29yZTo6VHJhY2tpbmdUeXBlIHRvdWNoRXZlbnRUcmFj
a2luZ1R5cGUoY29uc3QgV2ViVG91Y2hFdmVudCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAppbmRleCA3ZTE1NzdjLi45
MzY5OThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmNwcApAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogR2Vz
dHVyZUNvbnRyb2xsZXI6Okdlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAg
ICA6IG1fZHJhZ0dlc3R1cmUocGFnZSkKKyAgICAsIG1fc3dpcGVHZXN0dXJlKHBhZ2UpCiAgICAg
LCBtX3pvb21HZXN0dXJlKHBhZ2UpCiB7CiB9CkBAIC00OSwxMyArNTAsMTQgQEAgYm9vbCBHZXN0
dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogewogICAg
IGJvb2wgd2FzUHJvY2Vzc2luZ0dlc3R1cmVzID0gaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKICAg
ICBtX2RyYWdHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKKyAgICBtX3N3aXBlR2VzdHVyZS5o
YW5kbGVFdmVudChldmVudCk7CiAgICAgbV96b29tR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7
CiAgICAgcmV0dXJuIGV2ZW50LT50eXBlID09IEdES19UT1VDSF9FTkQgPyB3YXNQcm9jZXNzaW5n
R2VzdHVyZXMgOiBpc1Byb2Nlc3NpbmdHZXN0dXJlcygpOwogfQogCiBib29sIEdlc3R1cmVDb250
cm9sbGVyOjppc1Byb2Nlc3NpbmdHZXN0dXJlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHJh
Z0dlc3R1cmUuaXNBY3RpdmUoKSB8fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7CisgICAgcmV0
dXJuIG1fZHJhZ0dlc3R1cmUuaXNBY3RpdmUoKSB8fCBtX3N3aXBlR2VzdHVyZS5pc0FjdGl2ZSgp
IHx8IG1fem9vbUdlc3R1cmUuaXNBY3RpdmUoKTsKIH0KIAogR2VzdHVyZUNvbnRyb2xsZXI6Okdl
c3R1cmU6Okdlc3R1cmUoR3RrR2VzdHVyZSogZ2VzdHVyZSwgV2ViUGFnZVByb3h5JiBwYWdlKQpA
QCAtNzUsMjAgKzc3LDQwIEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRs
ZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKICAgICBndGtfZXZlbnRfY29udHJvbGxlcl9o
YW5kbGVfZXZlbnQoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQp
OwogfQogCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhj
b25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSkKK3N0YXRpYyBHVW5pcXVl
UHRyPEdka0V2ZW50PiBjcmVhdGVTY3JvbGxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgZ2Jvb2xlYW4g
aXNTdG9wKQogewotICAgIEFTU0VSVChtX2luRHJhZyk7CiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVu
dD4gc2Nyb2xsRXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKSk7CiAgICAgc2Nyb2xsRXZl
bnQtPnNjcm9sbC50aW1lID0gZXZlbnQtPnRvdWNoLnRpbWU7Ci0gICAgc2Nyb2xsRXZlbnQtPnNj
cm9sbC54ID0gbV9zdGFydC54KCk7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55ID0gbV9zdGFy
dC55KCk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54ID0geDsKKyAgICBzY3JvbGxFdmVudC0+
c2Nyb2xsLnkgPSB5OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueF9yb290ID0gZXZlbnQtPnRv
dWNoLnhfcm9vdDsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT50b3Vj
aC55X3Jvb3Q7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xM
X1NNT09USDsKLSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAobV9vZmZzZXQueCgp
IC0geCkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7Ci0gICAgc2Nyb2xsRXZlbnQt
PnNjcm9sbC5kZWx0YV95ID0gKG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IGRlbHRhWDsK
KyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kgPSBkZWx0YVk7CiAgICAgc2Nyb2xsRXZl
bnQtPnNjcm9sbC5zdGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKLSAgICBtX3BhZ2UuaGFuZGxl
V2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpKSk7CisjaWYg
R1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5pc19z
dG9wID0gaXNTdG9wOworI2VuZGlmCisgICAgcmV0dXJuIHNjcm9sbEV2ZW50OworfQorCit2b2lk
IEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKGNvbnN0IEdka0V2ZW50
KiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2
ZW50PiBzY3JvbGxFdmVudCA9IGNyZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LCBtX3N0YXJ0LngoKSwg
bV9zdGFydC55KCksIDAsIDAsIEZBTFNFKTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChO
YXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFz
ZTo6UGhhc2VCZWdhbiwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOworfQorCit2
b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtF
dmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICBBU1NFUlQobV9pbkRyYWcp
OworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZl
bnQoZXZlbnQsCisgICAgICAgIG1fc3RhcnQueCgpLCBtX3N0YXJ0LnkoKSwKKyAgICAgICAgKG1f
b2Zmc2V0LngoKSAtIHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLAorICAgICAg
ICAobV9vZmZzZXQueSgpIC0geSkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksCisg
ICAgICAgIEZBTFNFKTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVl
bEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFu
Z2VkLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lKSk7CiB9CiAKIHZvaWQgR2VzdHVy
ZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqIGV2ZW50
KQpAQCAtMTI4LDYgKzE1MCw3IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJl
OjpiZWdpbihEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkCiAgICAgdW5zaWdu
ZWQgZGVsYXk7CiAgICAgZ19vYmplY3RfZ2V0KGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKHdpZGdl
dCksICJndGstbG9uZy1wcmVzcy10aW1lIiwgJmRlbGF5LCBudWxscHRyKTsKICAgICBkcmFnR2Vz
dHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LnN0YXJ0T25lU2hvdChkZWxheSAvIDEwMDAuMCk7Cisg
ICAgZHJhZ0dlc3R1cmUtPnN0YXJ0RHJhZyhndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0
dXJlLCBzZXF1ZW5jZSkpOwogfQogCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVy
ZTo6dXBkYXRlKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsIGRvdWJsZSB5LCBH
dGtHZXN0dXJlKiBnZXN0dXJlKQpAQCAtMTQ5LDExICsxNzIsMTQgQEAgdm9pZCBHZXN0dXJlQ29u
dHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnVwZGF0ZShEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRv
dWJsZSB4LAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2Vz
dHVyZSogZHJhZ0dlc3R1cmUsIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJl
KiBnZXN0dXJlKQogewogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RvcCgp
OworICAgIGlmICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5j
ZSkpIHsKKyAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9T
RVFVRU5DRV9ERU5JRUQpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICghZHJhZ0dl
c3R1cmUtPm1faW5EcmFnKSB7CiAgICAgICAgIGRyYWdHZXN0dXJlLT5oYW5kbGVUYXAoZ3RrX2dl
c3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKTsKICAgICAgICAgZ3RrX2dl
c3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOwotICAg
IH0gZWxzZSBpZiAoIWd0a19nZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVu
Y2UpKQotICAgICAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NF
UVVFTkNFX0RFTklFRCk7CisgICAgfQogfQogCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFn
R2VzdHVyZTo6bG9uZ1ByZXNzRmlyZWQoKQpAQCAtMTcyLDYgKzE5OCwzMCBAQCBHZXN0dXJlQ29u
dHJvbGxlcjo6RHJhZ0dlc3R1cmU6OkRyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZW5kIiwgR19DQUxM
QkFDSyhlbmQpLCB0aGlzKTsKIH0KIAordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0
dXJlOjpzdGFydE1vbWVudHVtU2Nyb2xsKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHZl
bG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSkKK3sKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBz
Y3JvbGxFdmVudCA9IGNyZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LCBldmVudC0+dG91Y2gueCwgZXZl
bnQtPnRvdWNoLnksIHZlbG9jaXR5WCwgdmVsb2NpdHlZLCBUUlVFKTsKKyAgICBtX3BhZ2UuaGFu
ZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBXZWJX
aGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VC
ZWdhbikpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN3aXBl
KFN3aXBlR2VzdHVyZSogc3dpcGVHZXN0dXJlLCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVs
b2NpdHlZLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAgIEdka0V2ZW50U2VxdWVuY2UqIHNl
cXVlbmNlID0gZ3RrX2dlc3R1cmVfc2luZ2xlX2dldF9jdXJyZW50X3NlcXVlbmNlKEdUS19HRVNU
VVJFX1NJTkdMRShnZXN0dXJlKSk7CisgICAgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVl
bmNlKGdlc3R1cmUsIHNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3RrX2dlc3R1
cmVfc2V0X3NlcXVlbmNlX3N0YXRlKGdlc3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVO
Q0VfQ0xBSU1FRCk7CisKKyAgICBzd2lwZUdlc3R1cmUtPnN0YXJ0TW9tZW50dW1TY3JvbGwoZ3Rr
X2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpLCB2ZWxvY2l0eVgsIHZl
bG9jaXR5WSk7Cit9CisKK0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OlN3aXBlR2Vz
dHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3N3aXBl
X25ldyhwYWdlLnZpZXdXaWRnZXQoKSksIHBhZ2UpCit7CisgICAgZ3RrX2dlc3R1cmVfc2luZ2xl
X3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVF
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic3dpcGUi
LCBHX0NBTExCQUNLKHN3aXBlKSwgdGhpcyk7Cit9CisKIEludFBvaW50IEdlc3R1cmVDb250cm9s
bGVyOjpab29tR2VzdHVyZTo6Y2VudGVyKCkgY29uc3QKIHsKICAgICBkb3VibGUgeCwgeTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAppbmRl
eCA4Njc5MmRmLi5lOTYwMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL0dlc3R1cmVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9HZXN0dXJlQ29udHJvbGxlci5oCkBAIC02Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgICAg
IERyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8g
Tm90aWZ5IHRoYXQgYSBkcmFnIHN0YXJ0ZWQsIGFsbG93aW5nIHRvIHN0b3Aga2luZXRpYyBkZWNl
bGVyYXRpb24uCisgICAgICAgIHZvaWQgc3RhcnREcmFnKGNvbnN0IEdka0V2ZW50Kik7CiAgICAg
ICAgIHZvaWQgaGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCosIGRvdWJsZSB4LCBkb3VibGUgeSk7
CiAgICAgICAgIHZvaWQgaGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50Kik7CiAgICAgICAgIHZvaWQg
bG9uZ1ByZXNzRmlyZWQoKTsKQEAgLTgyLDYgKzg0LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgbV9pbkRyYWc7CiAgICAgfTsKIAorICAgIGNsYXNzIFN3aXBlR2VzdHVyZSBmaW5hbCA6IHB1
YmxpYyBHZXN0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN3aXBlR2VzdHVyZShXZWJQYWdl
UHJveHkmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc3RhcnRNb21lbnR1bVNjcm9s
bChjb25zdCBHZGtFdmVudCosIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVkpOwor
CisgICAgICAgIHN0YXRpYyB2b2lkIHN3aXBlKFN3aXBlR2VzdHVyZSosIGRvdWJsZSB2ZWxvY2l0
eVgsIGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dlc3R1cmUqKTsKKyAgICB9OworCiAgICAgY2xhc3Mg
Wm9vbUdlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBab29tR2VzdHVyZShXZWJQYWdlUHJveHkmKTsKQEAgLTEwMSw2ICsxMTMsNyBAQCBwcml2YXRl
OgogICAgIH07CiAKICAgICBEcmFnR2VzdHVyZSBtX2RyYWdHZXN0dXJlOworICAgIFN3aXBlR2Vz
dHVyZSBtX3N3aXBlR2VzdHVyZTsKICAgICBab29tR2VzdHVyZSBtX3pvb21HZXN0dXJlOwogfTsK
IAo=
</data>
<flag name="review"
          id="305934"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="305935"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282126</attachid>
            <date>2016-06-27 06:44:07 -0700</date>
            <delta_ts>2016-06-27 06:49:23 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>38693</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwMzc0YmQ0Li44MzZmMTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTYtMDYtMjcgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMg
c2Nyb2xsaW5nIGFuaW1hdGlvbiBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGlu
ZzsgaXQgaXMgYmFzZWQgb24gR1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlw
ZS4KKworICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5k
IHN3aXBlIHZlbG9jaXR5IHRvIFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRp
bmcgb24gd2hldGhlciB0aGUgc2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBh
IHN3aXBlLCB0aGUgc2Nyb2xsIGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAg
dGhlIHN3aXBlIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3Ig
dXNlIHRoZSBvbmUgZnJvbSB0aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAg
ICAgbW9tZW50dW0gc2Nyb2xsaW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb246OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb246
OnVwZGF0ZVZpc2libGVMZW5ndGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlv
bjo6c2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1X
aGVlbEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6
UGxhdGZvcm1XaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVu
dDo6c3dpcGVWZWxvY2l0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9y
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmlt
YXRvckd0ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21v
b3RoU2Nyb2xsaW5nQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
R3RrOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yR3RrOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckd0azo6dXBkYXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaDoKKwogMjAxNi0wNi0yNyAgTWlndWVsIEdvbWV6
ICA8bWFnb21lekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW0VGTF0gQnVpbGQgd2l0aCB0
aHJlYWRlZCBjb21wb3NpdG9yIGVuYWJsZWQgaXMgYnJva2VuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDc0ZTUxOTUuLjJjZjA4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBA
IC03Nyw2ICs3Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGxvYWRlci9z
b3VwL1N1YnJlc291cmNlTG9hZGVyU291cC5jcHAKIAogICAgIHBsYXRmb3JtL0tpbGxSaW5nTm9u
ZS5jcHAKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcAogCiAgICAgcGxh
dGZvcm0vYXVkaW8vZ2xpYi9BdWRpb0J1c0dMaWIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggMDcxMzU1Yy4uNzZmNmM0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTUzLDcgKzUz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTY3JvbGxCeVBpeGVsV2hlZWxFdmVu
dCwKICAgICB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBlbnVtIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIDogdWludDhf
dCB7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAgICAgICAgPSAwLAogICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuICAgICAgID0gMSA8PCAwLApAQCAtNzcs
OCArNzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fZGlyZWN0aW9u
SW52ZXJ0ZWRGcm9tRGV2aWNlKGZhbHNlKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAg
ICAgLCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoZmFsc2UpCi0gICAgICAgICAgICAsIG1f
cGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQotICAgICAgICAgICAgLCBtX21vbWVu
dHVtUGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQogICAgICAgICAgICAgLCBtX3Nj
cm9sbENvdW50KDApCiAgICAgICAgICAgICAsIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
WCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkoMCkKQEAg
LTk4LDggKzk2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2RpcmVj
dGlvbkludmVydGVkRnJvbURldmljZShmYWxzZSkKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAg
ICAgICAgICwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZhbHNlKQotICAgICAgICAgICAg
LCBtX3BoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKLSAgICAgICAgICAgICwgbV9t
b21lbnR1bVBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKICAgICAgICAgICAgICwg
bV9zY3JvbGxDb3VudCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YVgoMCkKICAgICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKDAp
CkBAIC0xNjAsMTIgKzE1NiwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
c2hvdWxkQ29uc2lkZXJMYXRjaGluZygpIGNvbnN0OwogICAgICAgICBib29sIHNob3VsZFJlc2V0
TGF0Y2hpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBj
b25zdDsKLSAgICAgICAgYm9vbCBpc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CiAjZWxz
ZQogICAgICAgICBib29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQor
ICAgICAgICBib29sIGlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OworICAgICAgICBi
b29sIGlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oR1RLKQorICAgICAgICBGbG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25z
dDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZl
bnQoSFdORCwgV1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNNb3VzZUhXaGVlbCk7CiAgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudChIV05ELCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhdGlvbik7CkBAIC0xODAsMTAgKzE4MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGZsb2F0IG1fd2hlZWxUaWNrc1k7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAgICAgICAgIGJvb2wgbV9kaXJlY3Rpb25J
bnZlcnRlZEZyb21EZXZpY2U7CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykK
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZSB7IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlTm9uZSB9OworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtX21vbWVu
dHVtUGhhc2UgeyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgfTsKKyNlbmRpZgogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgICAgICBib29sIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsK
LSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZTsKLSAgICAgICAgUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2UgbV9tb21lbnR1bVBoYXNlOwogICAgICAgICB1bnNpZ25lZCBtX3Nj
cm9sbENvdW50OwogICAgICAgICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7
CiAgICAgICAgIGZsb2F0IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWTsKQEAgLTIxMiw3
ICsyMTcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV9w
aGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgJiYgbV9tb21lbnR1bVBoYXNlID09
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ7CiAgICAgfQorI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGlubGluZSBib29sIFBsYXRmb3JtV2hl
ZWxFdmVudDo6aXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgJiYgbV9tb21l
bnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKaW5kZXggMzkyOTk5Ny4uMmU1ZjYzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmgKQEAgLTM2LDEwICszNiwxMCBA
QCBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbEFuaW1hdGlvbiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uKCkgeyB9OwotICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IC8qIHN0ZXAgKi8sIGZsb2F0
IC8qIG11bHRpcGxpZXIgKi8pIHsgcmV0dXJuIHRydWU7IH07CiAgICAgdmlydHVhbCB2b2lkIHN0
b3AoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKSB7IH07CisgICAgdmly
dHVhbCB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgeyB9OwogICAg
IHZpcnR1YWwgdm9pZCBzZXJ2aWNlQW5pbWF0aW9uKCkgeyB9OwogCiBwcm90ZWN0ZWQ6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsu
Y3BwCmluZGV4IDEwNDVjNDQuLmMzMzc4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIK
KyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAKICNpbmNs
dWRlIDxnZGsvZ2RrLmg+CkBAIC04Myw2ICs4NCwyMCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBs
YXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAgbV93aGVlbFRpY2tz
WCA9IG1fZGVsdGFYOwogICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKIAorI2lmbmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQorICAgIG1f
cGhhc2UgPSBldmVudC0+aXNfc3RvcCA/CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
RW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZWxzZQor
ICAgIG1fcGhhc2UgPSBldmVudC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExfU01PT1RIICYmICFt
X2RlbHRhWCAmJiAhbV9kZWx0YVkgPworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVu
ZGVkIDoKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOworI2VuZGlmCisj
ZWxzZQorICAgIG1fcGhhc2UgPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZW5k
aWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKwogICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0
aWNfY2FzdDxpbnQ+KGV2ZW50LT54KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eSkpOwogICAg
IG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54X3Jv
b3QpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55X3Jvb3QpKTsKICAgICBtX2dyYW51bGFyaXR5
ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CkBAIC05Myw0ICsxMDgsMTAgQEAgUGxhdGZvcm1X
aGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQogICAg
IG1fZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCkpOwogfQogCitGbG9hdFBvaW50IFBsYXRmb3JtV2hlZWxFdmVudDo6c3dpcGVWZWxvY2l0
eSgpIGNvbnN0Cit7CisgICAgLy8gVGhlIHN3aXBpbmcgdmVsb2NpdHkgaXMgc3RvcmVkIGluIHRo
ZSBkZWx0YXMgb2YgdGhlIGV2ZW50IGRlY2xhcmluZyBpdC4KKyAgICByZXR1cm4gaXNUcmFuc2l0
aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpID8gRmxvYXRQb2ludChtX3doZWVsVGlja3NYLCBtX3do
ZWVsVGlja3NZKSA6IEZsb2F0UG9pbnQoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKaW5kZXggMTNlNjM1NC4uODg3ZTRl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9y
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JH
dGsuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsQW5pbWF0b3JHdGsuaCIKIAorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMu
aCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25TbW9vdGguaCIKICNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCkBAIC00MCw2ICs0MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBvdmVyZmxvd1Njcm9s
bGJhcnNBbmltYXRpb25EdXJhdGlvbiA9IDE7CiBzdGF0aWMgY29uc3QgZG91YmxlIG92ZXJmbG93
U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVEZWxheSA9IDI7CitzdGF0aWMgY29uc3QgZG91YmxlIHNj
cm9sbENhcHR1cmVUaHJlc2hvbGRNaWxsaXNlY29uZHMgPSAxNTA7CiAKIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYg
c2Nyb2xsYWJsZUFyZWEpCiB7CkBAIC01MCw2ICs1MiwxNCBAQCBTY3JvbGxBbmltYXRvckd0azo6
U2Nyb2xsQW5pbWF0b3JHdGsoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDog
U2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX292ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9sbEFuaW1hdG9yR3RrOjpvdmVybGF5U2Nyb2xsYmFy
QW5pbWF0aW9uVGltZXJGaXJlZCkKIHsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24gPSBzdGQ6Om1h
a2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvbktpbmV0aWM+KG1fc2Nyb2xsYWJsZUFyZWEsIFt0aGlz
XShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykK
KyAgICAgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICAgICAgbV9zbW9vdGhBbmlt
YXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisjZW5kaWYKKyAgICAgICAgdXBk
YXRlUG9zaXRpb24oV1RGTW92ZShwb3NpdGlvbikpOworICAgIH0pOworCiAjaWYgRU5BQkxFKFNN
T09USF9TQ1JPTExJTkcpCiAgICAgaWYgKHNjcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5h
YmxlZCgpKQogICAgICAgICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKQEAgLTYz
LDQ4ICs3MywxMDggQEAgU2Nyb2xsQW5pbWF0b3JHdGs6On5TY3JvbGxBbmltYXRvckd0aygpCiAj
aWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjplbnN1
cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKQogewotICAgIGlmIChtX2FuaW1hdGlvbikKKyAg
ICBpZiAobV9zbW9vdGhBbmltYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYW5pbWF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25TbW9vdGg+KG1fc2Nyb2xsYWJs
ZUFyZWEsIG1fY3VycmVudFBvc2l0aW9uLCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7
Ci0gICAgICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247
Ci0gICAgICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92ZShwb3NpdGlvbik7Ci0gICAgICAg
IG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CisgICAgbV9zbW9vdGhBbmltYXRpb24gPSBz
dGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJlYSwg
bV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKKyAgICAg
ICAgdXBkYXRlUG9zaXRpb24oV1RGTW92ZShwb3NpdGlvbikpOwogICAgIH0pOwogfQorI2VuZGlm
CiAKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIGJvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6
OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAgICAgaWYg
KCFtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpIHx8IGdyYW51bGFyaXR5
ID09IFNjcm9sbEJ5UHJlY2lzZVBpeGVsKQogICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6
OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwogCiAg
ICAgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7Ci0gICAgcmV0dXJuIG1fYW5pbWF0
aW9uLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsK
KyAgICByZXR1cm4gbV9zbW9vdGhBbmltYXRpb24tPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVs
YXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwogfQorI2VuZGlmCiAKIHZvaWQgU2Nyb2xsQW5pbWF0
b3JHdGs6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBv
ZmZzZXQpCiB7CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0LCB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVBcmVh
LnNjcm9sbE9yaWdpbigpKSk7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1h
dGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBtX2tpbmV0aWNBbmltYXRp
b24tPnN0b3AoKTsKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKIAotICAgIEZsb2F0U2l6
ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247Ci0gICAgbV9jdXJyZW50UG9z
aXRpb24gPSBwb3NpdGlvbjsKLSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOworI2lm
IEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAg
ICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7Cisj
ZW5kaWYKKworICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1vdmUocG9zaXRpb24pKTsKIH0KIAotdm9p
ZCBTY3JvbGxBbmltYXRvckd0azo6d2lsbEVuZExpdmVSZXNpemUoKQorRmxvYXRQb2ludCBTY3Jv
bGxBbmltYXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5KCkKIHsKLSAgICBpZiAobV9hbmltYXRpb24p
Ci0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworICAgIGlmICht
X3Njcm9sbEhpc3RvcnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgZG91
YmxlIGZpcnN0ID0gbV9zY3JvbGxIaXN0b3J5WzBdLnRpbWVzdGFtcCgpOworICAgIGRvdWJsZSBs
YXN0ID0gbV9zY3JvbGxIaXN0b3J5LnJiZWdpbigpLT50aW1lc3RhbXAoKTsKKworICAgIGlmIChs
YXN0ID09IGZpcnN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgRmxvYXRQb2ludCBhY2N1
bURlbHRhOworICAgIGZvciAoY29uc3QgYXV0byYgc2Nyb2xsRXZlbnQgOiBtX3Njcm9sbEhpc3Rv
cnkpCisgICAgICAgIGFjY3VtRGVsdGEgKz0gRmxvYXRQb2ludChzY3JvbGxFdmVudC5kZWx0YVgo
KSwgc2Nyb2xsRXZlbnQuZGVsdGFZKCkpOworCisgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7
CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChhY2N1bURlbHRhLngoKSAqIC0xMDAwIC8gKGxhc3Qg
LSBmaXJzdCksIGFjY3VtRGVsdGEueSgpICogLTEwMDAgLyAobGFzdCAtIGZpcnN0KSk7CiB9CisK
K2Jvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKwor
ICAgIG1fc2Nyb2xsSGlzdG9yeS5yZW1vdmVBbGxNYXRjaGluZyhbJmV2ZW50XSAoUGxhdGZvcm1X
aGVlbEV2ZW50JiBvdGhlckV2ZW50KSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIGV2ZW50LnRp
bWVzdGFtcCgpIC0gb3RoZXJFdmVudC50aW1lc3RhbXAoKSA+IHNjcm9sbENhcHR1cmVUaHJlc2hv
bGRNaWxsaXNlY29uZHM7CisgICAgfSk7CisKKyAgICBpZiAoZXZlbnQuaXNFbmRPZk5vbk1vbWVu
dHVtU2Nyb2xsKCkpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBhZGQgdGhlIGV2ZW50
IHRvIHRoZSBoaXN0b3J5IGFzIGl0cyBkZWx0YSB3aWxsIGJlICgwLCAwKS4KKyAgICAgICAgc3Rh
dGljX2Nhc3Q8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyo+KG1fa2luZXRpY0FuaW1hdGlvbi5nZXQo
KSktPnN0YXJ0KG1fY3VycmVudFBvc2l0aW9uLCBjb21wdXRlVmVsb2NpdHkoKSwgbV9zY3JvbGxh
YmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxT
Y3JvbGxiYXIoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoZXZlbnQu
aXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIG1fc2Nyb2xsSGlz
dG9yeS5jbGVhcigpOworICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRpb25LaW5ldGlj
Kj4obV9raW5ldGljQW5pbWF0aW9uLmdldCgpKS0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGV2
ZW50LnN3aXBlVmVsb2NpdHkoKSwgbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFy
KCksIG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIG1fc2Nyb2xsSGlzdG9yeS5hcHBlbmQoZXZlbnQpOworCisg
ICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckd0azo6d2lsbEVuZExpdmVSZXNpemUoKQoreworICAgIG1fa2lu
ZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKworI2lmIEVOQUJMRShTTU9P
VEhfU0NST0xMSU5HKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9v
dGhBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5kaWYKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6dXBkYXRlUG9zaXRpb24oRmxvYXRQb2ludCYmIHBvc2l0aW9uKQor
eworICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247Cisg
ICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKKyAgICBub3RpZnlQb3Np
dGlvbkNoYW5nZWQoZGVsdGEpOworfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRW
ZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKKyAgICBtX2tpbmV0aWNB
bmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKICNpZiBFTkFCTEUoU01PT1RIX1ND
Uk9MTElORykKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRh
dGVWaXNpYmxlTGVuZ3RocygpOworICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAg
bV9zbW9vdGhBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5kaWYKICAgICBp
ZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTExNyw5ICsxODcsMTEgQEAgdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6
OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CisgICAg
bV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworCiAjaWYgRU5BQkxF
KFNNT09USF9TQ1JPTExJTkcpCi0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1h
dGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24p
CisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2Vu
ZGlmCiAgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5p
bWF0b3JHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0
ay5oCmluZGV4IDcwZTViNzMuLmRmNTcwN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCkBAIC00Niw5ICs0NiwxMSBAQCBwdWJsaWM6CiBw
cml2YXRlOgogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIGJvb2wgc2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllcikgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxs
RW5kTGl2ZVJlc2l6ZSgpIG92ZXJyaWRlOwotI2VuZGlmCisKKyAgICBib29sIGhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwogICAgIHZvaWQgZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKQEAgLTYzLDE2ICs2
NSwyMiBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25z
dCBGbG9hdFNpemUmIGRlbHRhKSBvdmVycmlkZTsKICAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xs
YmFyU3RhdGVUb0hpZGRlbihib29sKSBvdmVycmlkZTsKIAorICAgIHZvaWQgdXBkYXRlUG9zaXRp
b24oRmxvYXRQb2ludCYmKTsKKwogICAgIHZvaWQgb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRp
bWVyRmlyZWQoKTsKICAgICB2b2lkIHNob3dPdmVybGF5U2Nyb2xsYmFycygpOwogICAgIHZvaWQg
aGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCB1cGRhdGVPdmVybGF5U2Nyb2xsYmFy
c09wYWNpdHkoKTsKIAorICAgIEZsb2F0UG9pbnQgY29tcHV0ZVZlbG9jaXR5KCk7CisKICNpZiBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICB2b2lkIGVuc3VyZVNtb290aFNjcm9sbGluZ0Fu
aW1hdGlvbigpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9hbmlt
YXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9zbW9vdGhBbmlt
YXRpb247CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2tp
bmV0aWNBbmltYXRpb247CisgICAgVmVjdG9yPFBsYXRmb3JtV2hlZWxFdmVudD4gbV9zY3JvbGxI
aXN0b3J5OwogICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51
bGxwdHIgfTsKICAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVs
bHB0ciB9OwogICAgIGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggNDEzN2U2YS4uZDA5NDQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBA
CisyMDE2LTA2LTI3ICBBZHJpZW4gUGxhemFzICA8YXBsYXphc0BpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdIEFkZCBraW5ldGljIHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBub3Rpb24gb2YgcGhhc2UgYW5kIG1vbWVu
dHVtIHBoYXNlIHRvIFdlYldoZWVsRXZlbnQuCisKKyAgICAgICAgTWFrZSBXZWJXaGVlbEV2ZW50
IG1hbmFnZSB0aGUgJ2lzX3N0b3AnIGF0dHJpYnV0ZSBvZiBHZGtFdmVudFNjcm9sbCB0byBjcmVh
dGUgdGhlIGNvcnJlc3BvbmRpbmcgV2ViV2hlZWxFdmVudAorICAgICAgICB3aXRoIHRoZSBjb3Jy
ZWN0IHBoYXNlcyBhbmQgZGVsdGFzLgorCisgICAgICAgIE1ha2UgR2VzdHVyZUNvbnRyb2xsZXIg
bWFuYWdlIHN3aXBlcyB0byBjcmVhdGUgdGhlIGNvcnJlc3BvbmRpbmcgV2ViV2hlZWxFdmVudCB3
aXRoIHRoZSBjb3JyZWN0IHBoYXNlcyBhbmQKKyAgICAgICAgZGVsdGFzLgorCisgICAgICAgICog
U2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnQu
aDoKKyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVu
dCk6CisgICAgICAgICogU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hl
ZWxFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6ZGVjb2Rl
KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KToK
KyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGRQcm9jZXNzV2hlZWxFdmVu
dE5vdyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZXN0
dXJlQ29udHJvbGxlcjo6R2VzdHVyZUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpHZXN0
dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29u
dHJvbGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVT
Y3JvbGxFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2Vz
dHVyZTo6c3RhcnREcmFnKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRy
YWdHZXN0dXJlOjpoYW5kbGVEcmFnKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6OkRyYWdHZXN0dXJlOjpiZWdpbik6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9s
bGVyOjpEcmFnR2VzdHVyZTo6ZW5kKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6OlN3aXBlR2VzdHVyZTo6c3RhcnRNb21lbnR1bVNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6
Okdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN3aXBlKToKKyAgICAgICAgKFdlYktp
dDo6R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6U3dpcGVHZXN0dXJlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmg6CisKIDIwMTYtMDYtMjcgIE1p
Z3VlbCBHb21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtFRkxdIEJ1
aWxkIHdpdGggdGhyZWFkZWQgY29tcG9zaXRvciBlbmFibGVkIGlzIGJyb2tlbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKaW5kZXggMTUzMzIyMi4uNDUwMWY3
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCkBAIC01
Miw2ICs1Miw3IEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBOYXRpdmVXZWJX
aGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKTsKICAgICBOYXRpdmVXZWJXaGVl
bEV2ZW50KEdka0V2ZW50Kik7CisgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCosIFdl
YldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKTsK
ICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KGNvbnN0IEV2YXNf
RXZlbnRfTW91c2VfV2hlZWwqLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRvV2Vi
Q29udGVudCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiB0b0RldmljZVNjcmVlbik7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKaW5kZXggNGJmYTBkOC4uMThiZmYyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgKQEAgLTE3OSw3ICsxNzksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50CiAgICAgfTsKIAotI2lmIFBMQVRGT1JNKENP
Q09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgZW51bSBQaGFz
ZSB7CiAgICAgICAgIFBoYXNlTm9uZSAgICAgICAgPSAwLAogICAgICAgICBQaGFzZUJlZ2FuICAg
ICAgID0gMSA8PCAwLApAQCAtMTk2LDYgKzE5Niw4IEBAIHB1YmxpYzoKICAgICBXZWJXaGVlbEV2
ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRl
bHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBN
b2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdl
YldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVs
YXJpdHksIGJvb2wgZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlLCBQaGFzZSwgUGhhc2UgbW9t
ZW50dW1QaGFzZSwgYm9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzLCB1aW50MzJfdCBzY3Jv
bGxDb3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB1bmFjY2VsZXJhdGVkU2Nyb2xsaW5n
RGVsdGEsIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CisjZWxpZiBQTEFURk9STShHVEsp
CisgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tz
LCBQaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgR3JhbnVsYXJpdHksIE1vZGlmaWVycywgZG91
YmxlIHRpbWVzdGFtcCk7CiAjZW5kaWYKIAogICAgIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQpAQCAtMjA0LDkgKzIwNiwxMSBA
QCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplIHdoZWVsVGlja3MoKSBjb25z
dCB7IHJldHVybiBtX3doZWVsVGlja3M7IH0KICAgICBHcmFudWxhcml0eSBncmFudWxhcml0eSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdyYW51bGFyaXR5PihtX2dyYW51bGFyaXR5KTsg
fQogICAgIGJvb2wgZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKCkgY29uc3QgeyByZXR1cm4g
bV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7IH0KLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFBoYXNlIHBoYXNlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UGhhc2U+KG1fcGhhc2UpOyB9CiAgICAgUGhhc2UgbW9t
ZW50dW1QaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNlPihtX21vbWVudHVt
UGhhc2UpOyB9CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBib29sIGhhc1ByZWNp
c2VTY3JvbGxpbmdEZWx0YXMoKSBjb25zdCB7IHJldHVybiBtX2hhc1ByZWNpc2VTY3JvbGxpbmdE
ZWx0YXM7IH0KICAgICB1aW50MzJfdCBzY3JvbGxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsQ291bnQ7IH0KICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0Rl
bHRhOyB9CkBAIC0yMjQsOSArMjI4LDExIEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RmxvYXRT
aXplIG1fd2hlZWxUaWNrczsKICAgICB1aW50MzJfdCBtX2dyYW51bGFyaXR5OyAvLyBHcmFudWxh
cml0eQogICAgIGJvb2wgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7CisjaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyAgICB1aW50MzJfdCBtX3BoYXNlIHsgUGhhc2U6
OlBoYXNlTm9uZSB9OworICAgIHVpbnQzMl90IG1fbW9tZW50dW1QaGFzZSB7IFBoYXNlOjpQaGFz
ZU5vbmUgfTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHVpbnQzMl90IG1fcGhh
c2U7IC8vIFBoYXNlCi0gICAgdWludDMyX3QgbV9tb21lbnR1bVBoYXNlOyAvLyBQaGFzZQogICAg
IGJvb2wgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwogICAgIHVpbnQzMl90IG1fc2Nyb2xs
Q291bnQ7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0Rl
bHRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAppbmRl
eCBlZWI3NDQxLi5lNzgzOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
RXZlbnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRD
b252ZXJzaW9uLmNwcApAQCAtMTUxLDkgKzE1MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fd2hl
ZWxUaWNrc1kgPSB3ZWJFdmVudC53aGVlbFRpY2tzKCkuaGVpZ2h0KCk7CiAgICAgICAgIG1fZ3Jh
bnVsYXJpdHkgPSAod2ViRXZlbnQuZ3JhbnVsYXJpdHkoKSA9PSBXZWJXaGVlbEV2ZW50OjpTY3Jv
bGxCeVBhZ2VXaGVlbEV2ZW50KSA/IFdlYkNvcmU6OlNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQgOiBX
ZWJDb3JlOjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKICAgICAgICAgbV9kaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UgPSB3ZWJFdmVudC5kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoKTsK
LSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RL
KQogICAgICAgICBtX3BoYXNlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2U+KHdlYkV2ZW50LnBoYXNlKCkpOwogICAgICAgICBtX21vbWVudHVtUGhhc2UgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4od2ViRXZlbnQubW9t
ZW50dW1QaGFzZSgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBtX2hh
c1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSB3ZWJFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVs
dGFzKCk7CiAgICAgICAgIG1fc2Nyb2xsQ291bnQgPSB3ZWJFdmVudC5zY3JvbGxDb3VudCgpOwog
ICAgICAgICBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVggPSB3ZWJFdmVudC51bmFjY2Vs
ZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldo
ZWVsRXZlbnQuY3BwCmluZGV4IGQyNTBhMTQuLjU2MzE5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViV2hlZWxFdmVudC5jcHAKQEAgLTY3LDYgKzY3LDIwIEBAIFdlYldoZWVsRXZlbnQ6Oldl
YldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IElu
dFBvaW50CiB7CiAgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOwogfQorI2VsaWYg
UExBVEZPUk0oR1RLKQorV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlja3MsIFBoYXNl
IHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgTW9k
aWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdlYkV2ZW50KHR5cGUs
IG1vZGlmaWVycywgdGltZXN0YW1wKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICAs
IG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgLCBtX2RlbHRhKGRlbHRhKQor
ICAgICwgbV93aGVlbFRpY2tzKHdoZWVsVGlja3MpCisgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51
bGFyaXR5KQorICAgICwgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCisgICAg
LCBtX3BoYXNlKHBoYXNlKQorICAgICwgbV9tb21lbnR1bVBoYXNlKG1vbWVudHVtUGhhc2UpCit7
CisgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOworfQogI2VuZGlmCiAKIHZvaWQg
V2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dApAQCAtNzksOSArOTMsMTEgQEAgdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBtX3doZWVsVGlja3M7
CiAgICAgZW5jb2RlciA8PCBtX2dyYW51bGFyaXR5OwogICAgIGVuY29kZXIgPDwgbV9kaXJlY3Rp
b25JbnZlcnRlZEZyb21EZXZpY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0o
Q09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBlbmNvZGVyIDw8IG1fcGhhc2U7CiAgICAgZW5j
b2RlciA8PCBtX21vbWVudHVtUGhhc2U7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKICAg
ICBlbmNvZGVyIDw8IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAgICBlbmNvZGVyIDw8
IG1fc2Nyb2xsQ291bnQ7CiAgICAgZW5jb2RlciA8PCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YTsKQEAgLTEwNCwxMSArMTIwLDEzIEBAIGJvb2wgV2ViV2hlZWxFdmVudDo6ZGVjb2RlKElQ
Qzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJXaGVlbEV2ZW50JiB0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1fZGlyZWN0aW9uSW52ZXJ0
ZWRGcm9tRGV2aWNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIFBMQVRGT1JNKENPQ09B
KQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh0Lm1fcGhhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh0Lm1fbW9tZW50dW1QaGFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX2hh
c1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh0Lm1fc2Nyb2xsQ291bnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggYjM2NzYxMi4u
NWNhZjNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJX
aGVlbEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdl
YldoZWVsRXZlbnRHdGsuY3BwCkBAIC0zNyw4ICszNywxNCBAQCBOYXRpdmVXZWJXaGVlbEV2ZW50
OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCkKIHsKIH0KIAorTmF0aXZlV2Vi
V2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCogZXZlbnQsIFdlYldoZWVs
RXZlbnQ6OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKQor
ICAgIDogV2ViV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQo
ZXZlbnQsIHBoYXNlLCBtb21lbnR1bVBoYXNlKSkKKyAgICAsIG1fbmF0aXZlRXZlbnQoZ2RrX2V2
ZW50X2NvcHkoZXZlbnQpKQoreworfQorCiBOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJX
aGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQotICAgIDogV2ViV2hl
ZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQubmF0aXZl
RXZlbnQoKSkpCisgICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2Vi
V2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpLCBldmVudC5waGFzZSgpLCBldmVudC5tb21l
bnR1bVBoYXNlKCkpKQogICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudC5u
YXRpdmVFdmVudCgpKSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmNwcAppbmRleCAyZDY2MzkzLi40MjNjNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0xNDMsNiArMTQzLDI3IEBAIFdl
Yk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGNvbnN0IEdk
a0V2ZW50KiBldmVudCwgaW50IGN1CiAKIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKKyNpZm5kZWYgR1RL
X0FQSV9WRVJTSU9OXzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICBXZWJX
aGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9ldmVudChl
dmVudCkgPworICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCA6CisgICAg
ICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZWxzZQorICAgIGRvdWJs
ZSBkZWx0YVgsIGRlbHRhWTsKKyAgICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMoZXZlbnQs
ICZkZWx0YVgsICZkZWx0YVkpOworICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gZXZl
bnQtPnNjcm9sbC5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIWRlbHRhWCAmJiAh
ZGVsdGFZID8KKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQgOgorICAg
ICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworI2VuZGlmCisjZWxzZQor
ICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBo
YXNlQ2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCisgICAgcmV0dXJuIGNy
ZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQsIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhh
c2VOb25lKTsKK30KKworV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldo
ZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFz
ZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSkKK3sKICAgICBkb3VibGUgeCwg
eSwgeFJvb3QsIHlSb290OwogICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkp
OwogICAgIGdka19ldmVudF9nZXRfcm9vdF9jb29yZHMoZXZlbnQsICZ4Um9vdCwgJnlSb290KTsK
QEAgLTE3OSwxMyArMjAwLDE1IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVh
dGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKICAgICBGbG9hdFNpemUgZGVs
dGEod2hlZWxUaWNrcy53aWR0aCgpICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQoKSAqIHN0ZXAp
OwogCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIEludFBvaW50KHgsIHkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
IEludFBvaW50KHhSb290LCB5Um9vdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWxUaWNrcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CisgICAgICAgIEludFBvaW50
KHgsIHkpLAorICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAorICAgICAgICBkZWx0YSwK
KyAgICAgICAgd2hlZWxUaWNrcywKKyAgICAgICAgcGhhc2UsCisgICAgICAgIG1vbWVudHVtUGhh
c2UsCisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAorICAg
ICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCisgICAgICAgIGdka19ldmVudF9nZXRfdGlt
ZShldmVudCkpOwogfQogCiBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRl
V2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0IFdlYkNvcmU6OkNv
bXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzLCBWZWN0b3I8U3RyaW5nPiYmIGNv
bW1hbmRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZh
Y3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKaW5k
ZXggMjhiNjk1My4uOGZlN2NkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9XZWJFdmVudEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2
ZW50RmFjdG9yeS5oCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIFdlYkV2ZW50RmFjdG9yeSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChjb25z
dCBHZGtFdmVudCosIGludCk7CiAgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hl
ZWxFdmVudChjb25zdCBHZGtFdmVudCopOworICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0
ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2Vi
V2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSk7CiAgICAgc3RhdGljIFdlYktleWJvYXJk
RXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCosIGNvbnN0IFdlYkNv
cmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpOwogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgc3RhdGljIFdlYlRvdWNoRXZlbnQgY3JlYXRlV2Vi
VG91Y2hFdmVudChjb25zdCBHZGtFdmVudCosIFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+
JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBlMTQy
OTY5Li5jN2M1MmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cApAQCAtMTgzNiw3ICsxODM2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAKICAgICBpZiAoIW1fY3VycmVu
dGx5UHJvY2Vzc2VkV2hlZWxFdmVudHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fd2hlZWxFdmVu
dFF1ZXVlLmFwcGVuZChldmVudCk7Ci0gICAgICAgIGlmIChtX3doZWVsRXZlbnRRdWV1ZS5zaXpl
KCkgPCB3aGVlbEV2ZW50UXVldWVTaXplVGhyZXNob2xkKQorICAgICAgICBpZiAoIXNob3VsZFBy
b2Nlc3NXaGVlbEV2ZW50Tm93KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ly8gVGhlIHF1ZXVlIGhhcyB0b28gbWFueSB3aGVlbCBldmVudHMsIHNvIHB1c2ggYSBuZXcgZXZl
bnQuCiAgICAgfQpAQCAtMTg3Nyw2ICsxODc3LDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5k
V2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKICAgICBtX3Byb2Nlc3MtPmlz
UmVzcG9uc2l2ZShudWxscHRyKTsKIH0KIAorYm9vbCBXZWJQYWdlUHJveHk6OnNob3VsZFByb2Nl
c3NXaGVlbEV2ZW50Tm93KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KSBjb25zdAoreworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICAvLyBEb24ndCBxdWV1ZSBldmVudHMgcmVwcmVzZW50aW5nIGEg
bm9uLXRyaXZpYWwgc2Nyb2xsaW5nIHBoYXNlIHRvCisgICAgLy8gYXZvaWQgaGF2aW5nIHRoZW0g
dHJhcHBlZCBpbiB0aGUgcXVldWUsIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgYQorICAgIC8vIHNj
cm9sbGluZyBzZXNzaW9uIHRvIGJlZ2lubmluZyBvciBlbmQgY29ycmVjdGx5LgorICAgIC8vIFRo
aXMgaXMgb25seSBuZWVkZWQgYnkgcGxhdGZvcm1zIHdob3NlIFdlYldoZWVsRXZlbnQgaGFzIHRo
aXMgcGhhc2UKKyAgICAvLyBpbmZvcm1hdGlvbiAoQ29jb2EgYW5kIEdUSyspIGJ1dCBDb2NvYSB3
YXMgZmluZSB3aXRob3V0IGl0LgorICAgIGlmIChldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZl
bnQ6OlBoYXNlOjpQaGFzZU5vbmUKKyAgICAgICAgfHwgZXZlbnQucGhhc2UoKSA9PSBXZWJXaGVl
bEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkCisgICAgICAgIHx8IGV2ZW50Lm1vbWVudHVtUGhh
c2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lCisgICAgICAgIHx8IGV2ZW50
Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyNl
bmRpZgorICAgIGlmIChtX3doZWVsRXZlbnRRdWV1ZS5zaXplKCkgPj0gd2hlZWxFdmVudFF1ZXVl
U2l6ZVRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA4NzcyNmUyLi40MjJkMDc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xNDYzLDYgKzE0NjMsNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzTmV4dFF1ZXVlZFdoZWVsRXZlbnQoKTsKICAg
ICB2b2lkIHNlbmRXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICBib29sIHNo
b3VsZFByb2Nlc3NXaGVlbEV2ZW50Tm93KGNvbnN0IFdlYldoZWVsRXZlbnQmKSBjb25zdDsKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdm9pZCB1cGRhdGVUb3VjaEV2ZW50VHJhY2tp
bmcoY29uc3QgV2ViVG91Y2hFdmVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAppbmRleCA3ZTE1NzdjLi45MzY5OThmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNw
cApAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogR2VzdHVyZUNvbnRyb2xs
ZXI6Okdlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICA6IG1fZHJhZ0dl
c3R1cmUocGFnZSkKKyAgICAsIG1fc3dpcGVHZXN0dXJlKHBhZ2UpCiAgICAgLCBtX3pvb21HZXN0
dXJlKHBhZ2UpCiB7CiB9CkBAIC00OSwxMyArNTAsMTQgQEAgYm9vbCBHZXN0dXJlQ29udHJvbGxl
cjo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogewogICAgIGJvb2wgd2FzUHJv
Y2Vzc2luZ0dlc3R1cmVzID0gaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKICAgICBtX2RyYWdHZXN0
dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKKyAgICBtX3N3aXBlR2VzdHVyZS5oYW5kbGVFdmVudChl
dmVudCk7CiAgICAgbV96b29tR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CiAgICAgcmV0dXJu
IGV2ZW50LT50eXBlID09IEdES19UT1VDSF9FTkQgPyB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgOiBp
c1Byb2Nlc3NpbmdHZXN0dXJlcygpOwogfQogCiBib29sIEdlc3R1cmVDb250cm9sbGVyOjppc1By
b2Nlc3NpbmdHZXN0dXJlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHJhZ0dlc3R1cmUuaXNB
Y3RpdmUoKSB8fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fZHJhZ0dl
c3R1cmUuaXNBY3RpdmUoKSB8fCBtX3N3aXBlR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fem9vbUdl
c3R1cmUuaXNBY3RpdmUoKTsKIH0KIAogR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6Okdlc3R1
cmUoR3RrR2VzdHVyZSogZ2VzdHVyZSwgV2ViUGFnZVByb3h5JiBwYWdlKQpAQCAtNzUsMjAgKzc3
LDQwIEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KGNvbnN0
IEdka0V2ZW50KiBldmVudCkKICAgICBndGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQo
R1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQpOwogfQogCi12b2lk
IEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtFdmVu
dCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSkKK3N0YXRpYyBHVW5pcXVlUHRyPEdka0V2ZW50
PiBjcmVhdGVTY3JvbGxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3Vi
bGUgeSwgZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgZ2Jvb2xlYW4gaXNTdG9wKQogewot
ICAgIEFTU0VSVChtX2luRHJhZyk7CiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZl
bnQoZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKSk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC50
aW1lID0gZXZlbnQtPnRvdWNoLnRpbWU7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54ID0gbV9z
dGFydC54KCk7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55ID0gbV9zdGFydC55KCk7CisgICAg
c2Nyb2xsRXZlbnQtPnNjcm9sbC54ID0geDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSB5
OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsK
ICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CiAg
ICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKLSAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAobV9vZmZzZXQueCgpIC0geCkgLyBTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0
YV95ID0gKG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgp
OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IGRlbHRhWDsKKyAgICBzY3JvbGxF
dmVudC0+c2Nyb2xsLmRlbHRhX3kgPSBkZWx0YVk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5z
dGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKLSAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChO
YXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpKSk7CisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMjAsIDApCisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5pc19zdG9wID0gaXNTdG9w
OworI2VuZGlmCisgICAgcmV0dXJuIHNjcm9sbEV2ZW50OworfQorCit2b2lkIEdlc3R1cmVDb250
cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sK
KyAgICBBU1NFUlQoIW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxF
dmVudCA9IGNyZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LCBtX3N0YXJ0LngoKSwgbV9zdGFydC55KCks
IDAsIDAsIEZBTFNFKTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVl
bEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdh
biwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOworfQorCit2b2lkIEdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQs
IGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICBBU1NFUlQobV9pbkRyYWcpOworICAgIEdVbmlx
dWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQoZXZlbnQsCisg
ICAgICAgIG1fc3RhcnQueCgpLCBtX3N0YXJ0LnkoKSwKKyAgICAgICAgKG1fb2Zmc2V0LngoKSAt
IHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLAorICAgICAgICAobV9vZmZzZXQu
eSgpIC0geSkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksCisgICAgICAgIEZBTFNF
KTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9s
bEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkLCBXZWJXaGVl
bEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lKSk7CiB9CiAKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6
OkRyYWdHZXN0dXJlOjpoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQpAQCAtMTI4LDYg
KzE1MCw3IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFn
R2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkCiAgICAgdW5zaWduZWQgZGVsYXk7CiAg
ICAgZ19vYmplY3RfZ2V0KGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKHdpZGdldCksICJndGstbG9u
Zy1wcmVzcy10aW1lIiwgJmRlbGF5LCBudWxscHRyKTsKICAgICBkcmFnR2VzdHVyZS0+bV9sb25n
UHJlc3NUaW1lb3V0LnN0YXJ0T25lU2hvdChkZWxheSAvIDEwMDAuMCk7CisgICAgZHJhZ0dlc3R1
cmUtPnN0YXJ0RHJhZyhndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5j
ZSkpOwogfQogCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERy
YWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBn
ZXN0dXJlKQpAQCAtMTQ5LDExICsxNzIsMTQgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJh
Z0dlc3R1cmU6OnVwZGF0ZShEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LAogdm9p
ZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2VzdHVyZSogZHJhZ0dl
c3R1cmUsIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQog
ewogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RvcCgpOworICAgIGlmICgh
Z3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpIHsKKyAgICAg
ICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5J
RUQpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICghZHJhZ0dlc3R1cmUtPm1faW5E
cmFnKSB7CiAgICAgICAgIGRyYWdHZXN0dXJlLT5oYW5kbGVUYXAoZ3RrX2dlc3R1cmVfZ2V0X2xh
c3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKTsKICAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0
YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOwotICAgIH0gZWxzZSBpZiAo
IWd0a19nZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQotICAgICAg
ICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklF
RCk7CisgICAgfQogfQogCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6bG9u
Z1ByZXNzRmlyZWQoKQpAQCAtMTcyLDYgKzE5OCwzMCBAQCBHZXN0dXJlQ29udHJvbGxlcjo6RHJh
Z0dlc3R1cmU6OkRyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZW5kIiwgR19DQUxMQkFDSyhlbmQpLCB0
aGlzKTsKIH0KIAordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzdGFydE1v
bWVudHVtU2Nyb2xsKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHZlbG9jaXR5WCwgZG91
YmxlIHZlbG9jaXR5WSkKK3sKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9
IGNyZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LCBldmVudC0+dG91Y2gueCwgZXZlbnQtPnRvdWNoLnks
IHZlbG9jaXR5WCwgdmVsb2NpdHlZLCBUUlVFKTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVu
dChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQ
aGFzZTo6UGhhc2VOb25lLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbikpOworfQor
Cit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN3aXBlKFN3aXBlR2VzdHVy
ZSogc3dpcGVHZXN0dXJlLCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZLCBHdGtH
ZXN0dXJlKiBnZXN0dXJlKQoreworICAgIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlID0gZ3Rr
X2dlc3R1cmVfc2luZ2xlX2dldF9jdXJyZW50X3NlcXVlbmNlKEdUS19HRVNUVVJFX1NJTkdMRShn
ZXN0dXJlKSk7CisgICAgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdlc3R1cmUs
IHNlcXVlbmNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3RrX2dlc3R1cmVfc2V0X3NlcXVl
bmNlX3N0YXRlKGdlc3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7
CisKKyAgICBzd2lwZUdlc3R1cmUtPnN0YXJ0TW9tZW50dW1TY3JvbGwoZ3RrX2dlc3R1cmVfZ2V0
X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpLCB2ZWxvY2l0eVgsIHZlbG9jaXR5WSk7Cit9
CisKK0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OlN3aXBlR2VzdHVyZShXZWJQYWdl
UHJveHkmIHBhZ2UpCisgICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3N3aXBlX25ldyhwYWdlLnZp
ZXdXaWRnZXQoKSksIHBhZ2UpCit7CisgICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9v
bmx5KEdUS19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic3dpcGUiLCBHX0NBTExCQUNL
KHN3aXBlKSwgdGhpcyk7Cit9CisKIEludFBvaW50IEdlc3R1cmVDb250cm9sbGVyOjpab29tR2Vz
dHVyZTo6Y2VudGVyKCkgY29uc3QKIHsKICAgICBkb3VibGUgeCwgeTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCA4Njc5MmRmLi5l
OTYwMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29u
dHJvbGxlci5oCkBAIC02Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgIERyYWdHZXN0dXJl
KFdlYlBhZ2VQcm94eSYpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gTm90aWZ5IHRoYXQg
YSBkcmFnIHN0YXJ0ZWQsIGFsbG93aW5nIHRvIHN0b3Aga2luZXRpYyBkZWNlbGVyYXRpb24uCisg
ICAgICAgIHZvaWQgc3RhcnREcmFnKGNvbnN0IEdka0V2ZW50Kik7CiAgICAgICAgIHZvaWQgaGFu
ZGxlRHJhZyhjb25zdCBHZGtFdmVudCosIGRvdWJsZSB4LCBkb3VibGUgeSk7CiAgICAgICAgIHZv
aWQgaGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50Kik7CiAgICAgICAgIHZvaWQgbG9uZ1ByZXNzRmly
ZWQoKTsKQEAgLTgyLDYgKzg0LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9pbkRyYWc7
CiAgICAgfTsKIAorICAgIGNsYXNzIFN3aXBlR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN3aXBlR2VzdHVyZShXZWJQYWdlUHJveHkmKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc3RhcnRNb21lbnR1bVNjcm9sbChjb25zdCBHZGtF
dmVudCosIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVkpOworCisgICAgICAgIHN0
YXRpYyB2b2lkIHN3aXBlKFN3aXBlR2VzdHVyZSosIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2
ZWxvY2l0eVksIEd0a0dlc3R1cmUqKTsKKyAgICB9OworCiAgICAgY2xhc3MgWm9vbUdlc3R1cmUg
ZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CiAgICAgcHVibGljOgogICAgICAgICBab29tR2VzdHVy
ZShXZWJQYWdlUHJveHkmKTsKQEAgLTEwMSw2ICsxMTMsNyBAQCBwcml2YXRlOgogICAgIH07CiAK
ICAgICBEcmFnR2VzdHVyZSBtX2RyYWdHZXN0dXJlOworICAgIFN3aXBlR2VzdHVyZSBtX3N3aXBl
R2VzdHVyZTsKICAgICBab29tR2VzdHVyZSBtX3pvb21HZXN0dXJlOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282127</attachid>
            <date>2016-06-27 06:49:23 -0700</date>
            <delta_ts>2016-06-27 07:10:08 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>48507</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwMzc0YmQ0Li4wOTE3MTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTYtMDYtMjcgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMg
c2Nyb2xsaW5nIGFuaW1hdGlvbiBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGlu
ZzsgaXQgaXMgYmFzZWQgb24gR1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlw
ZS4KKworICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5k
IHN3aXBlIHZlbG9jaXR5IHRvIFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRp
bmcgb24gd2hldGhlciB0aGUgc2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBh
IHN3aXBlLCB0aGUgc2Nyb2xsIGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAg
dGhlIHN3aXBlIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3Ig
dXNlIHRoZSBvbmUgZnJvbSB0aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAg
ICAgbW9tZW50dW0gc2Nyb2xsaW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb246OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb246
OnVwZGF0ZVZpc2libGVMZW5ndGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlv
bjo6c2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRp
b25LaW5ldGljLmNwcDogQWRkZWQuCisgICAgICAgIChjbGFtcCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1h
dGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6U2Ny
b2xsQW5pbWF0aW9uS2luZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25L
aW5ldGljOjp+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dGlvbktpbmV0aWM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktp
bmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdGlvbktpbmV0aWMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0aW9uLmguCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3Jt
V2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OnN3aXBl
VmVsb2NpdHkpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6U2Nyb2xsQW5pbWF0b3JHdGsp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNtb290aFNjcm9s
bGluZ0FuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6c2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6
OmNvbXB1dGVWZWxvY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6
d2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6
OnVwZGF0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1Njcm9sbEFuaW1hdG9yR3RrLmg6CisKIDIwMTYtMDYtMjcgIE1pZ3VlbCBHb21leiAgPG1hZ29t
ZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtFRkxdIEJ1aWxkIHdpdGggdGhyZWFkZWQg
Y29tcG9zaXRvciBlbmFibGVkIGlzIGJyb2tlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRl
eCA3NGU1MTk1Li4yY2YwOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNzcsNiAr
NzcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvc291cC9TdWJy
ZXNvdXJjZUxvYWRlclNvdXAuY3BwCiAKICAgICBwbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwCisg
ICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKIAogICAgIHBsYXRmb3JtL2F1
ZGlvL2dsaWIvQXVkaW9CdXNHTGliLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDA3MTM1NWMuLjc2ZjZjNDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC01Myw3ICs1Myw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCiAgICAg
fTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9S
TShHVEspCiAgICAgZW51bSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSA6IHVpbnQ4X3QgewogICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgICAgICAgID0gMCwKICAgICAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbiAgICAgICA9IDEgPDwgMCwKQEAgLTc3LDggKzc3LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2RpcmVjdGlvbkludmVydGVk
RnJvbURldmljZShmYWxzZSkKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgICwgbV9o
YXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZhbHNlKQotICAgICAgICAgICAgLCBtX3BoYXNlKFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKLSAgICAgICAgICAgICwgbV9tb21lbnR1bVBoYXNl
KFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKICAgICAgICAgICAgICwgbV9zY3JvbGxDb3Vu
dCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgoMCkKICAg
ICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKDApCkBAIC05OCw4ICs5
Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9kaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UoZmFsc2UpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICAs
IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyhmYWxzZSkKLSAgICAgICAgICAgICwgbV9waGFz
ZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpCi0gICAgICAgICAgICAsIG1fbW9tZW50dW1Q
aGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpCiAgICAgICAgICAgICAsIG1fc2Nyb2xs
Q291bnQoMCkKICAgICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYKDAp
CiAgICAgICAgICAgICAsIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSgwKQpAQCAtMTYw
LDEyICsxNTYsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHNob3VsZENv
bnNpZGVyTGF0Y2hpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBzaG91bGRSZXNldExhdGNoaW5n
KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7Ci0gICAgICAgIGJv
b2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogI2Vsc2UKICAgICAg
ICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyAgICAgICAg
Ym9vbCBpc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1Ry
YW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAgICAgRmxvYXRQb2ludCBzd2lwZVZlbG9jaXR5KCkgY29uc3Q7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQs
IFdQQVJBTSwgTFBBUkFNLCBib29sIGlzTW91c2VIV2hlZWwpOwogICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnQoSFdORCwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYXRpb24pOwpAQCAtMTgwLDEwICsxODMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBmbG9hdCBtX3doZWVsVGlja3NZOwogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFu
dWxhcml0eSBtX2dyYW51bGFyaXR5OwogICAgICAgICBib29sIG1fZGlyZWN0aW9uSW52ZXJ0ZWRG
cm9tRGV2aWNlOworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCisgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2UgeyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZU5vbmUgfTsKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9tb21lbnR1bVBoYXNl
IHsgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CisjZW5kaWYKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7Ci0gICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2U7Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlIG1fbW9tZW50dW1QaGFzZTsKICAgICAgICAgdW5zaWduZWQgbV9zY3JvbGxDb3Vu
dDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYOwogICAgICAg
ICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVk7CkBAIC0yMTIsNyArMjE3LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZUVuZGVkOwogICAgIH0KKyNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6
OmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkICYmIG1fbW9tZW50dW1QaGFz
ZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdGlvbi5oCmluZGV4IDM5Mjk5OTcuLjJlNWY2M2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCkBAIC0zNiwxMCArMzYsMTAgQEAgY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxBbmltYXRpb24gewogcHVibGljOgogICAgIHZp
cnR1YWwgflNjcm9sbEFuaW1hdGlvbigpIHsgfTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCAvKiBzdGVwICovLCBmbG9hdCAvKiBtdWx0
aXBsaWVyICovKSB7IHJldHVybiB0cnVlOyB9OwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmxlTGVuZ3RocygpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgeyB9OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIHsgfTsKICAgICB2aXJ0dWFs
IHZvaWQgc2VydmljZUFuaW1hdGlvbigpIHsgfTsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJjZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKQEAgLTAsMCAr
MSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMu
aCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisKKy8qCisgKiBQZXJBeGlzRGF0YSBpcyBhIHBvcnQgb2YgR3RrS2luZXRpY1Njcm9s
bGluZyBhcyBvZiBHVEsrIDMuMjAsCisgKiBtaW1pY2tpbmcgaXRzIEFQSSBhbmQgaXRzIGJlaGF2
aW9yLgorICoKKyAqIEFsbCBvdXIgY3VydmVzIGFyZSBzZWNvbmQgZGVncmVlIGxpbmVhciBkaWZm
ZXJlbnRpYWwgZXF1YXRpb25zLCBhbmQKKyAqIHNvIHRoZXkgY2FuIGFsd2F5cyBiZSB3cml0dGVu
IGFzIGxpbmVhciBjb21iaW5hdGlvbnMgb2YgMiBiYXNlCisgKiBzb2x1dGlvbnMuIGNvZWYxIGFu
ZCBjb2VmMiBhcmUgdGhlIGNvZWZmaWNpZW50cyB0byB0aGVzZSB0d28gYmFzZQorICogc29sdXRp
b25zLCBhbmQgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24gYW5kIHZlbG9j
aXR5LgorICoKKyAqIEluIHRoZSBjYXNlIG9mIHNpbXBsZSBkZWNlbGVyYXRpb24sIHRoZSBkaWZm
ZXJlbnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHknJyA9IC1teScKKyAqCisgKiBXaXRoIG0g
dGhlIHJlc2lzdGVuY2UgZmFjdG9yLiBGb3IgdGhpcyB3ZSB1c2UgdGhlIGZvbGxvd2luZyAyCisg
KiBiYXNlIHNvbHV0aW9uczoKKyAqCisgKiAgIGYxKHgpID0gMQorICogICBmMih4KSA9IGV4cCgt
bXgpCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygb3ZlcnNob290LCB0aGUgZGlmZmVyZW50aWFsIGVx
dWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknIC0ga3kKKyAqCisgKiBXaXRoIG0gdGhlIHJl
c2lzdGFuY2UsIGFuZCBrIHRoZSBzcHJpbmcgc3RpZmZuZXNzIGNvbnN0YW50LiBXZSBsZXQKKyAq
IGsgPSBtXjIgLyA0LCBzbyB0aGF0IHRoZSBzeXN0ZW0gaXMgY3JpdGljYWxseSBkYW1wZWQgKGll
LCByZXR1cm5zIHRvIGl0cworICogZXF1aWxpYnJpdW0gcG9zaXRpb24gYXMgcXVpY2tseSBhcyBw
b3NzaWJsZSwgd2l0aG91dCBvc2NpbGxhdGluZyksIGFuZCBvZmZzZXQKKyAqIHRoZSB3aG9sZSB0
aGluZywgc3VjaCB0aGF0IHRoZSBlcXVpbGlicml1bSBwb3NpdGlvbiBpcyBhdCAwLiBUaGlzIGdp
dmVzIHRoZQorICogYmFzZSBzb2x1dGlvbnMKKyAqCisgKiAgIGYxKHgpID0gZXhwKC1teCAvIDIp
CisgKiAgIGYyKHgpID0gdCBleHAoLW14IC8gMikKKyAqLworCitzdGF0aWMgY29uc3QgZG91Ymxl
IGRlY2VsRnJpY3Rpb24gPSA0Oworc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsK
K3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwgPSAuMDAxOworCitzdGF0
aWMgaW5saW5lIGRvdWJsZSBjbGFtcChkb3VibGUgeCwgZG91YmxlIGxvdywgZG91YmxlIGhpZ2gp
Cit7CisgICAgQVNTRVJUKGxvdyA8PSBoaWdoKTsKKworICAgIHJldHVybiAoeCA+IGhpZ2gpID8g
aGlnaCA6ICgoeCA8IGxvdykgPyBsb3cgOiB4KTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoZG91Ymxl
IGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRvdWJsZSBpbml0
aWFsVmVsb2NpdHkpCisgICAgOiBtX2xvd2VyKGxvd2VyKQorICAgICwgbV91cHBlcih1cHBlcikK
KyAgICAsIG1fY29lZjEoaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbiArIGluaXRpYWxQ
b3NpdGlvbikKKyAgICAsIG1fY29lZjIoLWluaXRpYWxWZWxvY2l0eSAvIGRlY2VsRnJpY3Rpb24p
CisgICAgLCBtX3Bvc2l0aW9uKGNsYW1wKGluaXRpYWxQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKSkK
KyAgICAsIG1fdmVsb2NpdHkoaW5pdGlhbFBvc2l0aW9uIDwgbG93ZXIgfHwgaW5pdGlhbFBvc2l0
aW9uID4gdXBwZXIgPyAwIDogaW5pdGlhbFZlbG9jaXR5KQoreworfQorCitib29sIFNjcm9sbEFu
aW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjphbmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1lRGVs
dGEpCit7CisgICAgbV9lbGFwc2VkVGltZSArPSB0aW1lRGVsdGE7CisKKyAgICBkb3VibGUgZXhw
b25lbnRpYWxQYXJ0ID0gZXhwKC1kZWNlbEZyaWN0aW9uICogbV9lbGFwc2VkVGltZSk7CisgICAg
bV9wb3NpdGlvbiA9IG1fY29lZjEgKyBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0OworICAgIG1f
dmVsb2NpdHkgPSAtZGVjZWxGcmljdGlvbiAqIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisK
KyAgICBpZiAobV9wb3NpdGlvbiA8IG1fbG93ZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1f
bG93ZXI7CisgICAgICAgIG1fdmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAobV9wb3NpdGlv
biA+IG1fdXBwZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1fdXBwZXI7CisgICAgICAgIG1f
dmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAoZmFicyhtX3ZlbG9jaXR5KSA8IDEpIHsKKyAg
ICAgICAgbV9wb3NpdGlvbiA9IHJvdW5kKG1fcG9zaXRpb24pOworICAgICAgICBtX3ZlbG9jaXR5
ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV92ZWxvY2l0eTsKK30KKworU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xs
YWJsZUFyZWEsIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogU2Nyb2xsQW5pbWF0aW9uKHNjcm9sbGFibGVBcmVh
KQorICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIoKnRoaXMsICZT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKQoreworfQorCitTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjp+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpCit7Cit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RvcCgpCit7CisgICAgbV9hbmltYXRpb25UaW1l
ci5zdG9wKCk7CisgICAgbV9ob3Jpem9udGFsRGF0YSA9IE51bGxvcHQ7CisgICAgbV92ZXJ0aWNh
bERhdGEgPSBOdWxsb3B0OworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0YXJ0
KGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgdmVs
b2NpdHksIGJvb2wgbWF5SFNjcm9sbCwgYm9vbCBtYXlWU2Nyb2xsKQoreworICAgIHN0b3AoKTsK
KworICAgIG1fcG9zaXRpb24gPSBpbml0aWFsUG9zaXRpb247CisKKyAgICBpZiAoIXZlbG9jaXR5
LngoKSAmJiAhdmVsb2NpdHkueSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWF5SFNj
cm9sbCkgeworICAgICAgICBtX2hvcml6b250YWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3JvbGxh
YmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisgICAgICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAgICAgICAgICAgIGluaXRp
YWxQb3NpdGlvbi54KCksIHZlbG9jaXR5LngoKSk7CisgICAgfQorICAgIGlmIChtYXlWU2Nyb2xs
KSB7CisgICAgICAgIG1fdmVydGljYWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJl
YS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCksCisgICAgICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSwKKyAgICAgICAgICAgIGluaXRpYWxQb3Np
dGlvbi55KCksIHZlbG9jaXR5LnkoKSk7CisgICAgfQorCisgICAgYW5pbWF0aW9uVGltZXJGaXJl
ZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmly
ZWQoKQoreworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOworICAgIGRvdWJsZSBkZWx0YVRvTmV4dEZyYW1lID0gY2VpbCgoY3VycmVudFRpbWUg
LSBtX3N0YXJ0VGltZSkgKiBmcmFtZVJhdGUpIC8gZnJhbWVSYXRlIC0gKGN1cnJlbnRUaW1lIC0g
bV9zdGFydFRpbWUpOworCisgICAgaWYgKG1faG9yaXpvbnRhbERhdGEgJiYgIW1faG9yaXpvbnRh
bERhdGEudmFsdWUoKS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQorICAgICAgICBt
X2hvcml6b250YWxEYXRhID0gTnVsbG9wdDsKKworICAgIGlmIChtX3ZlcnRpY2FsRGF0YSAmJiAh
bV92ZXJ0aWNhbERhdGEudmFsdWUoKS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQor
ICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IE51bGxvcHQ7CisKKyAgICAvLyBJZiBvbmUgb2YgdGhl
IGF4ZXMgZGlkbid0IGZpbmlzaCBpdHMgYW5pbWF0aW9uIHdlIG11c3QgY29udGludWUgaXQuCisg
ICAgaWYgKG1faG9yaXpvbnRhbERhdGEgfHwgbV92ZXJ0aWNhbERhdGEpCisgICAgICAgIG1fYW5p
bWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6bWF4KG1pbmltdW1UaW1lckludGVydmFsLCBk
ZWx0YVRvTmV4dEZyYW1lKSk7CisKKyAgICBkb3VibGUgeCA9IG1faG9yaXpvbnRhbERhdGEgPyBt
X2hvcml6b250YWxEYXRhLnZhbHVlKCkucG9zaXRpb24oKSA6IG1fcG9zaXRpb24ueCgpOworICAg
IGRvdWJsZSB5ID0gbV92ZXJ0aWNhbERhdGEgPyBtX3ZlcnRpY2FsRGF0YS52YWx1ZSgpLnBvc2l0
aW9uKCkgOiBtX3Bvc2l0aW9uLnkoKTsKKyAgICBtX3Bvc2l0aW9uID0gRmxvYXRQb2ludCh4LCB5
KTsKKyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKEZsb2F0UG9pbnQobV9wb3Np
dGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODU5OGRhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Ny
b2xsQW5pbWF0aW9uS2luZXRpY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaAor
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYyBmaW5hbDogcHVibGljIFNjcm9sbEFuaW1hdGlvbiB7Citwcml2YXRlOgor
ICAgIGNsYXNzIFBlckF4aXNEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBlckF4aXNEYXRh
KGRvdWJsZSBsb3dlciwgZG91YmxlIHVwcGVyLCBkb3VibGUgaW5pdGlhbFBvc2l0aW9uLCBkb3Vi
bGUgaW5pdGlhbFZlbG9jaXR5KTsKKworICAgICAgICBkb3VibGUgcG9zaXRpb24oKSB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CisKKyAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1l
RGVsdGEpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZG91YmxlIG1fbG93ZXIgeyAwIH07Cisg
ICAgICAgIGRvdWJsZSBtX3VwcGVyIHsgMCB9OworCisgICAgICAgIGRvdWJsZSBtX2NvZWYxIHsg
MCB9OworICAgICAgICBkb3VibGUgbV9jb2VmMiB7IDAgfTsKKworICAgICAgICBkb3VibGUgbV9l
bGFwc2VkVGltZSB7IDAgfTsKKyAgICAgICAgZG91YmxlIG1fcG9zaXRpb24geyAwIH07CisgICAg
ICAgIGRvdWJsZSBtX3ZlbG9jaXR5IHsgMCB9OworICAgIH07CisKK3B1YmxpYzoKKyAgICBTY3Jv
bGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVhJiwgc3RkOjpmdW5jdGlvbjx2b2lkKEZs
b2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24pOworICAgIHZpcnR1
YWwgflNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKTsKKworICAgIHZvaWQgc3RhcnQoY29uc3QgRmxv
YXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgYm9v
bCBtYXlIU2Nyb2xsLCBib29sIG1heVZTY3JvbGwpOworCitwcml2YXRlOgorICAgIHZvaWQgc3Rv
cCgpIG92ZXJyaWRlOworICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOworCisgICAgc3Rk
OjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+IG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVu
Y3Rpb247CisKKyAgICBPcHRpb25hbDxQZXJBeGlzRGF0YT4gbV9ob3Jpem9udGFsRGF0YSB7IE51
bGxvcHQgfTsKKyAgICBPcHRpb25hbDxQZXJBeGlzRGF0YT4gbV92ZXJ0aWNhbERhdGEgeyBOdWxs
b3B0IH07CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmlt
YXRpb25UaW1lcjsKKyAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRpb25LaW5ldGljX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5j
cHAKaW5kZXggMTA0NWM0NC4uYzMzNzg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1
ZGUgPGdkay9nZGsuaD4KQEAgLTgzLDYgKzg0LDIwIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxh
dGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NY
ID0gbV9kZWx0YVg7CiAgICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWZuZGVmIEdU
S19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgbV9w
aGFzZSA9IGV2ZW50LT5pc19zdG9wID8KKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VF
bmRlZCA6CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisg
ICAgbV9waGFzZSA9IGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIW1f
ZGVsdGFYICYmICFtX2RlbHRhWSA/CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5k
ZWQgOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNl
bHNlCisgICAgbV9waGFzZSA9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRp
ZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCiAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KHN0YXRp
Y19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55KSk7CiAgICAg
bV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9v
dCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnlfcm9vdCkpOwogICAgIG1fZ3JhbnVsYXJpdHkg
PSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKQEAgLTkzLDQgKzEwOCwxMCBAQCBQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAg
bV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQgUGxhdGZvcm1XaGVlbEV2ZW50Ojpzd2lwZVZlbG9jaXR5
KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3dpcGluZyB2ZWxvY2l0eSBpcyBzdG9yZWQgaW4gdGhl
IGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVjbGFyaW5nIGl0LgorICAgIHJldHVybiBpc1RyYW5zaXRp
b25pbmdUb01vbWVudHVtU2Nyb2xsKCkgPyBGbG9hdFBvaW50KG1fd2hlZWxUaWNrc1gsIG1fd2hl
ZWxUaWNrc1kpIDogRmxvYXRQb2ludCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcAppbmRleCAxM2U2MzU0Li44ODdlNGVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0
ay5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvckd0ay5oIgogCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5o
IgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvblNtb290aC5oIgogI2luY2x1ZGUgIlNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKQEAgLTQwLDYgKzQxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZG91YmxlIG92ZXJmbG93U2Nyb2xs
YmFyc0FuaW1hdGlvbkR1cmF0aW9uID0gMTsKIHN0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dT
Y3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5ID0gMjsKK3N0YXRpYyBjb25zdCBkb3VibGUgc2Ny
b2xsQ2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kcyA9IDE1MDsKIAogc3RkOjp1bmlxdWVfcHRy
PFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBz
Y3JvbGxhYmxlQXJlYSkKIHsKQEAgLTUwLDYgKzUyLDE0IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjpT
Y3JvbGxBbmltYXRvckd0ayhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBT
Y3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lckZpcmVkKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4obV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNd
KEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQor
ICAgICAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgICAgICBtX3Ntb290aEFuaW1h
dGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNlbmRpZgorICAgICAgICB1cGRh
dGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CisgICAgfSk7CisKICNpZiBFTkFCTEUoU01P
T1RIX1NDUk9MTElORykKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFi
bGVkKCkpCiAgICAgICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwpAQCAtNjMs
NDggKzczLDEwOCBAQCBTY3JvbGxBbmltYXRvckd0azo6flNjcm9sbEFuaW1hdG9yR3RrKCkKICNp
ZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3Vy
ZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpCiB7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQorICAg
IGlmIChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hbmltYXRp
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxl
QXJlYSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsK
LSAgICAgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsK
LSAgICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKLSAgICAgICAg
bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyAgICBtX3Ntb290aEFuaW1hdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBt
X2N1cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAg
ICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CiAgICAgfSk7CiB9CisjZW5kaWYK
IAorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogYm9vbCBTY3JvbGxBbmltYXRvckd0azo6
c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKIHsKICAgICBpZiAo
IW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkgfHwgZ3JhbnVsYXJpdHkg
PT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAg
ICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKLSAgICByZXR1cm4gbV9hbmltYXRp
b24tPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwor
ICAgIHJldHVybiBtX3Ntb290aEFuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiB9CisjZW5kaWYKIAogdm9pZCBTY3JvbGxBbmltYXRv
ckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9m
ZnNldCkKIHsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQsIHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEu
c2Nyb2xsT3JpZ2luKCkpKTsKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0
aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgIG1fa2luZXRpY0FuaW1hdGlv
bi0+c3RvcCgpOworICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVhcigpOwogCi0gICAgRmxvYXRTaXpl
IGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAgICBtX2N1cnJlbnRQb3Np
dGlvbiA9IHBvc2l0aW9uOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CisjaWYg
RU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAg
ICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNl
bmRpZgorCisgICAgdXBkYXRlUG9zaXRpb24oV1RGTW92ZShwb3NpdGlvbikpOwogfQogCi12b2lk
IFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCitGbG9hdFBvaW50IFNjcm9s
bEFuaW1hdG9yR3RrOjpjb21wdXRlVmVsb2NpdHkoKQogewotICAgIGlmIChtX2FuaW1hdGlvbikK
LSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1f
c2Nyb2xsSGlzdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBkb3Vi
bGUgZmlyc3QgPSBtX3Njcm9sbEhpc3RvcnlbMF0udGltZXN0YW1wKCk7CisgICAgZG91YmxlIGxh
c3QgPSBtX3Njcm9sbEhpc3RvcnkucmJlZ2luKCktPnRpbWVzdGFtcCgpOworCisgICAgaWYgKGxh
c3QgPT0gZmlyc3QpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBGbG9hdFBvaW50IGFjY3Vt
RGVsdGE7CisgICAgZm9yIChjb25zdCBhdXRvJiBzY3JvbGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9y
eSkKKyAgICAgICAgYWNjdW1EZWx0YSArPSBGbG9hdFBvaW50KHNjcm9sbEV2ZW50LmRlbHRhWCgp
LCBzY3JvbGxFdmVudC5kZWx0YVkoKSk7CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsK
KworICAgIHJldHVybiBGbG9hdFBvaW50KGFjY3VtRGVsdGEueCgpICogLTEwMDAgLyAobGFzdCAt
IGZpcnN0KSwgYWNjdW1EZWx0YS55KCkgKiAtMTAwMCAvIChsYXN0IC0gZmlyc3QpKTsKIH0KKwor
Ym9vbCBTY3JvbGxBbmltYXRvckd0azo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIGV2ZW50KQoreworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOworCisg
ICAgbV9zY3JvbGxIaXN0b3J5LnJlbW92ZUFsbE1hdGNoaW5nKFsmZXZlbnRdIChQbGF0Zm9ybVdo
ZWVsRXZlbnQmIG90aGVyRXZlbnQpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gZXZlbnQudGlt
ZXN0YW1wKCkgLSBvdGhlckV2ZW50LnRpbWVzdGFtcCgpID4gc2Nyb2xsQ2FwdHVyZVRocmVzaG9s
ZE1pbGxpc2Vjb25kczsKKyAgICB9KTsKKworICAgIGlmIChldmVudC5pc0VuZE9mTm9uTW9tZW50
dW1TY3JvbGwoKSkgeworICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgZXZlbnQg
dG8gdGhlIGhpc3RvcnkgYXMgaXRzIGRlbHRhIHdpbGwgYmUgKDAsIDApLgorICAgICAgICBzdGF0
aWNfY2FzdDxTY3JvbGxBbmltYXRpb25LaW5ldGljKj4obV9raW5ldGljQW5pbWF0aW9uLmdldCgp
KS0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGNvbXB1dGVWZWxvY2l0eSgpLCBtX3Njcm9sbGFi
bGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNj
cm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChldmVudC5p
c1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkpIHsKKyAgICAgICAgbV9zY3JvbGxIaXN0
b3J5LmNsZWFyKCk7CisgICAgICAgIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdGlvbktpbmV0aWMq
PihtX2tpbmV0aWNBbmltYXRpb24uZ2V0KCkpLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgZXZl
bnQuc3dpcGVWZWxvY2l0eSgpLCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIo
KSwgbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgbV9zY3JvbGxIaXN0b3J5LmFwcGVuZChldmVudCk7CisKKyAg
ICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCit7CisgICAgbV9raW5l
dGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworCisjaWYgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290
aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgorfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yR3RrOjp1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYgcG9zaXRpb24pCit7
CisgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKKyAg
ICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdURk1vdmUocG9zaXRpb24pOworICAgIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZChkZWx0YSk7Cit9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZl
cnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRpY0Fu
aW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0
ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBt
X3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlm
ICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3LDkgKzE4NywxMSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKKyAgICBt
X2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKICNpZiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0
aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikK
KyAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5k
aWYKICAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmlt
YXRvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmgKaW5kZXggNzBlNWI3My4uZGY1NzA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKQEAgLTQ2LDkgKzQ2LDExIEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgYm9vbCBzY3JvbGwoU2Ny
b2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBt
dWx0aXBsaWVyKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHdpbGxF
bmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKKworICAgIGJvb2wgaGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRB
ZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwpAQCAtNjMsMTYgKzY1
LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0
IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwogICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxi
YXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVQb3NpdGlv
bihGbG9hdFBvaW50JiYpOworCiAgICAgdm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXJGaXJlZCgpOwogICAgIHZvaWQgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCBo
aWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJz
T3BhY2l0eSgpOwogCisgICAgRmxvYXRQb2ludCBjb21wdXRlVmVsb2NpdHkoKTsKKwogI2lmIEVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5p
bWF0aW9uKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1h
dGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1h
dGlvbjsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fa2lu
ZXRpY0FuaW1hdGlvbjsKKyAgICBWZWN0b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhp
c3Rvcnk7CiAgICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVs
bHB0ciB9OwogICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxs
cHRyIH07CiAgICAgYm9vbCBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA0MTM3ZTZhLi5mMWQzYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAK
KzIwMTYtMDYtMjcgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1
ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50Lmg6CisgICAgICAgICogU2hhcmVk
L1dlYkV2ZW50Lmg6CisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYktpdDJQbGF0Zm9ybVdoZWVsRXZlbnQ6OldlYktpdDJQbGF0Zm9y
bVdoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYldoZWVsRXZlbnQ6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZl
bnQ6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViV2hlZWxFdmVudDo6TmF0aXZlV2ViV2hl
ZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQpOgorICAg
ICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxl
V2hlZWxFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvdWxkUHJvY2Vz
c1doZWVsRXZlbnROb3cpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmVDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
R2VzdHVyZUNvbnRyb2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKToKKyAgICAgICAgKFdlYktp
dDo6Y3JlYXRlU2Nyb2xsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxl
cjo6RHJhZ0dlc3R1cmU6OnN0YXJ0RHJhZyk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250
cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6YmVnaW4pOgorICAgICAgICAoV2ViS2l0OjpHZXN0
dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmVuZCk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0TW9tZW50dW1TY3JvbGwpOgorICAgICAg
ICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzd2lwZSk6CisgICAg
ICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OlN3aXBlR2VzdHVy
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oOgorCiAyMDE2
LTA2LTI3ICBNaWd1ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S11bRUZMXSBCdWlsZCB3aXRoIHRocmVhZGVkIGNvbXBvc2l0b3IgZW5hYmxlZCBpcyBicm9rZW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCmluZGV4IDE1MzMy
MjIuLjQ1MDFmNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJX
aGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZl
bnQuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAg
TmF0aXZlV2ViV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50Jik7CiAgICAgTmF0
aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCopOworICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2Rr
RXZlbnQqLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50
dW1QaGFzZSk7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChj
b25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJiB0b1dlYkNvbnRlbnQsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgdG9EZXZp
Y2VTY3JlZW4pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
RXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCmluZGV4IDRiZmEwZDgu
LjE4YmZmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCkBAIC0xNzksNyArMTc5LDcgQEAg
cHVibGljOgogICAgICAgICBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudAogICAgIH07CiAKLSNpZiBQ
TEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAg
IGVudW0gUGhhc2UgewogICAgICAgICBQaGFzZU5vbmUgICAgICAgID0gMCwKICAgICAgICAgUGhh
c2VCZWdhbiAgICAgICA9IDEgPDwgMCwKQEAgLTE5Niw2ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAg
V2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFu
dWxhcml0eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlj
a3MsIEdyYW51bGFyaXR5LCBib29sIGRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSwgUGhhc2Us
IFBoYXNlIG1vbWVudHVtUGhhc2UsIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgdWlu
dDMyX3Qgc2Nyb2xsQ291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRl
ZFNjcm9sbGluZ0RlbHRhLCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOworI2VsaWYgUExB
VEZPUk0oR1RLKQorICAgIFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
d2hlZWxUaWNrcywgUGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIEdyYW51bGFyaXR5LCBNb2Rp
ZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOwogI2VuZGlmCiAKICAgICBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KQEAgLTIwNCw5
ICsyMDYsMTEgQEAgcHVibGljOgogICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSB3aGVlbFRp
Y2tzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbFRpY2tzOyB9CiAgICAgR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHcmFudWxhcml0eT4obV9ncmFu
dWxhcml0eSk7IH0KICAgICBib29sIGRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlOyB9Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBQaGFzZSBw
aGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNlPihtX3BoYXNlKTsgfQogICAg
IFBoYXNlIG1vbWVudHVtUGhhc2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQaGFzZT4o
bV9tb21lbnR1bVBoYXNlKTsgfQorI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgYm9v
bCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQcmVjaXNl
U2Nyb2xsaW5nRGVsdGFzOyB9CiAgICAgdWludDMyX3Qgc2Nyb2xsQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbENvdW50OyB9CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB1bmFj
Y2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3VuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YTsgfQpAQCAtMjI0LDkgKzIyOCwxMSBAQCBwcml2YXRlOgogICAgIFdlYkNv
cmU6OkZsb2F0U2l6ZSBtX3doZWVsVGlja3M7CiAgICAgdWludDMyX3QgbV9ncmFudWxhcml0eTsg
Ly8gR3JhbnVsYXJpdHkKICAgICBib29sIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlOwor
I2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCisgICAgdWludDMyX3QgbV9waGFz
ZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsKKyAgICB1aW50MzJfdCBtX21vbWVudHVtUGhhc2UgeyBQ
aGFzZTo6UGhhc2VOb25lIH07CisjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICB1aW50
MzJfdCBtX3BoYXNlOyAvLyBQaGFzZQotICAgIHVpbnQzMl90IG1fbW9tZW50dW1QaGFzZTsgLy8g
UGhhc2UKICAgICBib29sIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAgICB1aW50MzJf
dCBtX3Njcm9sbENvdW50OwogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3VuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVu
dENvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lv
bi5jcHAKaW5kZXggZWViNzQ0MS4uZTc4MzhkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKQEAgLTE1MSw5ICsxNTEsMTEgQEAgcHVibGljOgogICAg
ICAgICBtX3doZWVsVGlja3NZID0gd2ViRXZlbnQud2hlZWxUaWNrcygpLmhlaWdodCgpOwogICAg
ICAgICBtX2dyYW51bGFyaXR5ID0gKHdlYkV2ZW50LmdyYW51bGFyaXR5KCkgPT0gV2ViV2hlZWxF
dmVudDo6U2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgPyBXZWJDb3JlOjpTY3JvbGxCeVBhZ2VXaGVl
bEV2ZW50IDogV2ViQ29yZTo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CiAgICAgICAgIG1fZGly
ZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gd2ViRXZlbnQuZGlyZWN0aW9uSW52ZXJ0ZWRGcm9t
RGV2aWNlKCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBM
QVRGT1JNKEdUSykKICAgICAgICAgbV9waGFzZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlPih3ZWJFdmVudC5waGFzZSgpKTsKICAgICAgICAgbV9tb21lbnR1
bVBoYXNlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U+KHdl
YkV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKICAg
ICAgICAgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzID0gd2ViRXZlbnQuaGFzUHJlY2lzZVNj
cm9sbGluZ0RlbHRhcygpOwogICAgICAgICBtX3Njcm9sbENvdW50ID0gd2ViRXZlbnQuc2Nyb2xs
Q291bnQoKTsKICAgICAgICAgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYID0gd2ViRXZl
bnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJXaGVlbEV2ZW50LmNwcAppbmRleCBkMjUwYTE0Li41NjMxOTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCkBAIC02Nyw2ICs2NywyMCBAQCBXZWJXaGVl
bEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9u
LCBjb25zdCBJbnRQb2ludAogewogICAgIEFTU0VSVChpc1doZWVsRXZlbnRUeXBlKHR5cGUpKTsK
IH0KKyNlbGlmIFBMQVRGT1JNKEdUSykKK1dlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlw
ZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQ
b3NpdGlvbiwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRTaXplJiB3aGVlbFRp
Y2tzLCBQaGFzZSBwaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCisgICAgOiBXZWJF
dmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKKyAgICAsIG1fcG9zaXRpb24ocG9zaXRp
b24pCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQorICAgICwgbV9kZWx0
YShkZWx0YSkKKyAgICAsIG1fd2hlZWxUaWNrcyh3aGVlbFRpY2tzKQorICAgICwgbV9ncmFudWxh
cml0eShncmFudWxhcml0eSkKKyAgICAsIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKGZh
bHNlKQorICAgICwgbV9waGFzZShwaGFzZSkKKyAgICAsIG1fbW9tZW50dW1QaGFzZShtb21lbnR1
bVBoYXNlKQoreworICAgIEFTU0VSVChpc1doZWVsRXZlbnRUeXBlKHR5cGUpKTsKK30KICNlbmRp
ZgogCiB2b2lkIFdlYldoZWVsRXZlbnQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlcikgY29uc3QKQEAgLTc5LDkgKzkzLDExIEBAIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2Rl
KElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV93
aGVlbFRpY2tzOwogICAgIGVuY29kZXIgPDwgbV9ncmFudWxhcml0eTsKICAgICBlbmNvZGVyIDw8
IG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lm
IFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgZW5jb2RlciA8PCBtX3BoYXNl
OwogICAgIGVuY29kZXIgPDwgbV9tb21lbnR1bVBoYXNlOworI2VuZGlmCisjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgZW5jb2RlciA8PCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAgICAg
ZW5jb2RlciA8PCBtX3Njcm9sbENvdW50OwogICAgIGVuY29kZXIgPDwgbV91bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGE7CkBAIC0xMDQsMTEgKzEyMCwxMyBAQCBib29sIFdlYldoZWVsRXZlbnQ6
OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViV2hlZWxFdmVudCYgdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX2RpcmVj
dGlvbkludmVydGVkRnJvbURldmljZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBQTEFU
Rk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodC5tX3BoYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodC5tX21vbWVudHVtUGhhc2UpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHQubV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX3Njcm9sbENvdW50KSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCmluZGV4
IGIzNjc2MTIuLjVjYWYzZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
TmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcApAQCAtMzcsOCArMzcsMTQgQEAgTmF0aXZlV2Vi
V2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCogZXZlbnQpCiB7CiB9CiAK
K05hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqIGV2ZW50
LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50
dW1QaGFzZSkKKyAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJX
aGVlbEV2ZW50KGV2ZW50LCBwaGFzZSwgbW9tZW50dW1QaGFzZSkpCisgICAgLCBtX25hdGl2ZUV2
ZW50KGdka19ldmVudF9jb3B5KGV2ZW50KSkKK3sKK30KKwogTmF0aXZlV2ViV2hlZWxFdmVudDo6
TmF0aXZlV2ViV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKLSAg
ICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2
ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgIDogV2ViV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwgZXZlbnQucGhhc2UoKSwg
ZXZlbnQubW9tZW50dW1QaGFzZSgpKSkKICAgICAsIG1fbmF0aXZlRXZlbnQoZ2RrX2V2ZW50X2Nv
cHkoZXZlbnQubmF0aXZlRXZlbnQoKSkpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKaW5kZXggMmQ2NjM5My4uNDIzYzQ3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcApAQCAtMTQzLDYgKzE0
MywyNyBAQCBXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVu
dChjb25zdCBHZGtFdmVudCogZXZlbnQsIGludCBjdQogCiBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiB7Cisj
aWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDAp
CisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBnZGtfZXZlbnRfaXNfc2Nyb2xsX3N0
b3BfZXZlbnQoZXZlbnQpID8KKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5k
ZWQgOgorICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworI2Vsc2UK
KyAgICBkb3VibGUgZGVsdGFYLCBkZWx0YVk7CisgICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGVs
dGFzKGV2ZW50LCAmZGVsdGFYLCAmZGVsdGFZKTsKKyAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBw
aGFzZSA9IGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfU01PT1RIICYmICFk
ZWx0YVggJiYgIWRlbHRhWSA/CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUVu
ZGVkIDoKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZDsKKyNlbmRp
ZgorI2Vsc2UKKyAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IFdlYldoZWVsRXZlbnQ6
OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKworICAg
IHJldHVybiBjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBwaGFzZSwgV2ViV2hlZWxFdmVudDo6
UGhhc2U6OlBoYXNlTm9uZSk7Cit9CisKK1dlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxFdmVudDo6
UGhhc2UgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCit7CiAgICAg
ZG91YmxlIHgsIHksIHhSb290LCB5Um9vdDsKICAgICBnZGtfZXZlbnRfZ2V0X2Nvb3JkcyhldmVu
dCwgJngsICZ5KTsKICAgICBnZGtfZXZlbnRfZ2V0X3Jvb3RfY29vcmRzKGV2ZW50LCAmeFJvb3Qs
ICZ5Um9vdCk7CkBAIC0xNzksMTMgKzIwMCwxNSBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFj
dG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiAgICAgRmxv
YXRTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lkdGgoKSAqIHN0ZXAsIHdoZWVsVGlja3MuaGVpZ2h0
KCkgKiBzdGVwKTsKIAogICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4LCB5KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbHRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIHdoZWVsVGlja3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfdGltZShldmVudCkpOworICAgICAg
ICBJbnRQb2ludCh4LCB5KSwKKyAgICAgICAgSW50UG9pbnQoeFJvb3QsIHlSb290KSwKKyAgICAg
ICAgZGVsdGEsCisgICAgICAgIHdoZWVsVGlja3MsCisgICAgICAgIHBoYXNlLAorICAgICAgICBt
b21lbnR1bVBoYXNlLAorICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxF
dmVudCwKKyAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpLAorICAgICAgICBnZGtfZXZl
bnRfZ2V0X3RpbWUoZXZlbnQpKTsKIH0KIAogV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBjb25zdCBX
ZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cywgVmVjdG9yPFN0
cmluZz4mJiBjb21tYW5kcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
V2ViRXZlbnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFj
dG9yeS5oCmluZGV4IDI4YjY5NTMuLjhmZTdjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBXZWJFdmVudEZh
Y3RvcnkgewogcHVibGljOgogICAgIHN0YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNl
RXZlbnQoY29uc3QgR2RrRXZlbnQqLCBpbnQpOwogICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNy
ZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqKTsKKyAgICBzdGF0aWMgV2ViV2hlZWxF
dmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6
UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogICAgIHN0YXRpYyBX
ZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBj
b25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1h
bmRzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHN0YXRpYyBXZWJUb3VjaEV2ZW50
IGNyZWF0ZVdlYlRvdWNoRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBWZWN0b3I8V2ViUGxhdGZvcm1U
b3VjaFBvaW50PiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
aW5kZXggZTE0Mjk2OS4uYzdjNTJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKQEAgLTE4MzYsNyArMTgzNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5k
bGVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQogCiAgICAgaWYg
KCFtX2N1cnJlbnRseVByb2Nlc3NlZFdoZWVsRXZlbnRzLmlzRW1wdHkoKSkgewogICAgICAgICBt
X3doZWVsRXZlbnRRdWV1ZS5hcHBlbmQoZXZlbnQpOwotICAgICAgICBpZiAobV93aGVlbEV2ZW50
UXVldWUuc2l6ZSgpIDwgd2hlZWxFdmVudFF1ZXVlU2l6ZVRocmVzaG9sZCkKKyAgICAgICAgaWYg
KCFzaG91bGRQcm9jZXNzV2hlZWxFdmVudE5vdyhldmVudCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIC8vIFRoZSBxdWV1ZSBoYXMgdG9vIG1hbnkgd2hlZWwgZXZlbnRzLCBzbyBwdXNo
IGEgbmV3IGV2ZW50LgogICAgIH0KQEAgLTE4NzcsNiArMTg3NywyNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2VuZFdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgbV9w
cm9jZXNzLT5pc1Jlc3BvbnNpdmUobnVsbHB0cik7CiB9CiAKK2Jvb2wgV2ViUGFnZVByb3h5Ojpz
aG91bGRQcm9jZXNzV2hlZWxFdmVudE5vdyhjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkgY29u
c3QKK3sKKyNpZiBQTEFURk9STShHVEspCisgICAgLy8gRG9uJ3QgcXVldWUgZXZlbnRzIHJlcHJl
c2VudGluZyBhIG5vbi10cml2aWFsIHNjcm9sbGluZyBwaGFzZSB0bworICAgIC8vIGF2b2lkIGhh
dmluZyB0aGVtIHRyYXBwZWQgaW4gdGhlIHF1ZXVlLCBwb3RlbnRpYWxseSBwcmV2ZW50aW5nIGEK
KyAgICAvLyBzY3JvbGxpbmcgc2Vzc2lvbiB0byBiZWdpbm5pbmcgb3IgZW5kIGNvcnJlY3RseS4K
KyAgICAvLyBUaGlzIGlzIG9ubHkgbmVlZGVkIGJ5IHBsYXRmb3JtcyB3aG9zZSBXZWJXaGVlbEV2
ZW50IGhhcyB0aGlzIHBoYXNlCisgICAgLy8gaW5mb3JtYXRpb24gKENvY29hIGFuZCBHVEsrKSBi
dXQgQ29jb2Egd2FzIGZpbmUgd2l0aG91dCBpdC4KKyAgICBpZiAoZXZlbnQucGhhc2UoKSA9PSBX
ZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lCisgICAgICAgIHx8IGV2ZW50LnBoYXNlKCkg
PT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZAorICAgICAgICB8fCBldmVudC5t
b21lbnR1bVBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZQorICAgICAg
ICB8fCBldmVudC5tb21lbnR1bVBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNl
Q2hhbmdlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShl
dmVudCk7CisjZW5kaWYKKyAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6ZSgpID49IHdoZWVs
RXZlbnRRdWV1ZVNpemVUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggODc3MjZlMi4uNDIy
ZDA3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTQ2Myw2
ICsxNDYzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc05leHRRdWV1ZWRXaGVlbEV2
ZW50KCk7CiAgICAgdm9pZCBzZW5kV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7Cisg
ICAgYm9vbCBzaG91bGRQcm9jZXNzV2hlZWxFdmVudE5vdyhjb25zdCBXZWJXaGVlbEV2ZW50Jikg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZvaWQgdXBkYXRlVG91Y2hF
dmVudFRyYWNraW5nKGNvbnN0IFdlYlRvdWNoRXZlbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggN2UxNTc3Yy4uOTM2
OTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29u
dHJvbGxlci5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIEdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAg
OiBtX2RyYWdHZXN0dXJlKHBhZ2UpCisgICAgLCBtX3N3aXBlR2VzdHVyZShwYWdlKQogICAgICwg
bV96b29tR2VzdHVyZShwYWdlKQogewogfQpAQCAtNDksMTMgKzUwLDE0IEBAIGJvb2wgR2VzdHVy
ZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKICAgICBi
b29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7CiAgICAg
bV9kcmFnR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CisgICAgbV9zd2lwZUdlc3R1cmUuaGFu
ZGxlRXZlbnQoZXZlbnQpOwogICAgIG1fem9vbUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwog
ICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfVE9VQ0hfRU5EID8gd2FzUHJvY2Vzc2luZ0dl
c3R1cmVzIDogaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKIH0KIAogYm9vbCBHZXN0dXJlQ29udHJv
bGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2RyYWdH
ZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0FjdGl2ZSgpOworICAgIHJldHVy
biBtX2RyYWdHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV9zd2lwZUdlc3R1cmUuaXNBY3RpdmUoKSB8
fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7CiB9CiAKIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0
dXJlOjpHZXN0dXJlKEd0a0dlc3R1cmUqIGdlc3R1cmUsIFdlYlBhZ2VQcm94eSYgcGFnZSkKQEAg
LTc1LDIwICs3Nyw0MCBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpoYW5kbGVF
dmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiAgICAgZ3RrX2V2ZW50X2NvbnRyb2xsZXJfaGFu
ZGxlX2V2ZW50KEdUS19FVkVOVF9DT05UUk9MTEVSKG1fZ2VzdHVyZS5nZXQoKSksIGV2ZW50KTsK
IH0KIAotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcoY29u
c3QgR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkpCitzdGF0aWMgR1VuaXF1ZVB0
cjxHZGtFdmVudD4gY3JlYXRlU2Nyb2xsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBkb3Vi
bGUgeCwgZG91YmxlIHksIGRvdWJsZSBkZWx0YVgsIGRvdWJsZSBkZWx0YVksIGdib29sZWFuIGlz
U3RvcCkKIHsKLSAgICBBU1NFUlQobV9pbkRyYWcpOwogICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+
IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkpOwogICAgIHNjcm9sbEV2ZW50
LT5zY3JvbGwudGltZSA9IGV2ZW50LT50b3VjaC50aW1lOwotICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwueCA9IG1fc3RhcnQueCgpOwotICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IG1fc3RhcnQu
eSgpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IHg7CisgICAgc2Nyb2xsRXZlbnQtPnNj
cm9sbC55ID0geTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnhfcm9vdCA9IGV2ZW50LT50b3Vj
aC54X3Jvb3Q7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55X3Jvb3QgPSBldmVudC0+dG91Y2gu
eV9yb290OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9T
TU9PVEg7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gKG1fb2Zmc2V0LngoKSAt
IHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOwotICAgIHNjcm9sbEV2ZW50LT5z
Y3JvbGwuZGVsdGFfeSA9IChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSBkZWx0YVg7Cisg
ICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gZGVsdGFZOwogICAgIHNjcm9sbEV2ZW50
LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+dG91Y2guc3RhdGU7Ci0gICAgbV9wYWdlLmhhbmRsZVdo
ZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSkpOworI2lmIEdU
S19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQorICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuaXNfc3Rv
cCA9IGlzU3RvcDsKKyNlbmRpZgorICAgIHJldHVybiBzY3JvbGxFdmVudDsKK30KKwordm9pZCBH
ZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnN0YXJ0RHJhZyhjb25zdCBHZGtFdmVudCog
ZXZlbnQpCit7CisgICAgQVNTRVJUKCFtX2luRHJhZyk7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVu
dD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVudCwgbV9zdGFydC54KCksIG1f
c3RhcnQueSgpLCAwLCAwLCBGQUxTRSk7CisgICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0
aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6
OlBoYXNlQmVnYW4sIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUpKTsKK30KKwordm9p
ZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcoY29uc3QgR2RrRXZl
bnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgQVNTRVJUKG1faW5EcmFnKTsK
KyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9IGNyZWF0ZVNjcm9sbEV2ZW50
KGV2ZW50LAorICAgICAgICBtX3N0YXJ0LngoKSwgbV9zdGFydC55KCksCisgICAgICAgIChtX29m
ZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwKKyAgICAgICAg
KG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLAorICAg
ICAgICBGQUxTRSk7CisgICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxF
dmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdl
ZCwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOwogfQogCiB2b2lkIEdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50KiBldmVudCkK
QEAgLTEyOCw2ICsxNTAsNyBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6
YmVnaW4oRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUgeCwgZAogICAgIHVuc2lnbmVk
IGRlbGF5OwogICAgIGdfb2JqZWN0X2dldChndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyh3aWRnZXQp
LCAiZ3RrLWxvbmctcHJlc3MtdGltZSIsICZkZWxheSwgbnVsbHB0cik7CiAgICAgZHJhZ0dlc3R1
cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5zdGFydE9uZVNob3QoZGVsYXkgLyAxMDAwLjApOworICAg
IGRyYWdHZXN0dXJlLT5zdGFydERyYWcoZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVy
ZSwgc2VxdWVuY2UpKTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6
OnVwZGF0ZShEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3Rr
R2VzdHVyZSogZ2VzdHVyZSkKQEAgLTE0OSwxMSArMTcyLDE0IEBAIHZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3Vi
bGUgeCwKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjplbmQoRHJhZ0dlc3R1
cmUqIGRyYWdHZXN0dXJlLCBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSwgR3RrR2VzdHVyZSog
Z2VzdHVyZSkKIHsKICAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LnN0b3AoKTsK
KyAgICBpZiAoIWd0a19nZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2Up
KSB7CisgICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VR
VUVOQ0VfREVOSUVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAoIWRyYWdHZXN0
dXJlLT5tX2luRHJhZykgewogICAgICAgICBkcmFnR2VzdHVyZS0+aGFuZGxlVGFwKGd0a19nZXN0
dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7CiAgICAgICAgIGd0a19nZXN0
dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsKLSAgICB9
IGVsc2UgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdlc3R1cmUsIHNlcXVlbmNl
KSkKLSAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFV
RU5DRV9ERU5JRUQpOworICAgIH0KIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dl
c3R1cmU6OmxvbmdQcmVzc0ZpcmVkKCkKQEAgLTE3Miw2ICsxOTgsMzAgQEAgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFnR2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgImVuZCIsIEdfQ0FMTEJB
Q0soZW5kKSwgdGhpcyk7CiB9CiAKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVy
ZTo6c3RhcnRNb21lbnR1bVNjcm9sbChjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB2ZWxv
Y2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVkpCit7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Ny
b2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVudCwgZXZlbnQtPnRvdWNoLngsIGV2ZW50
LT50b3VjaC55LCB2ZWxvY2l0eVgsIHZlbG9jaXR5WSwgVFJVRSk7CisgICAgbV9wYWdlLmhhbmRs
ZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hl
ZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQmVn
YW4pKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzd2lwZShT
d2lwZUdlc3R1cmUqIHN3aXBlR2VzdHVyZSwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9j
aXR5WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1
ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVS
RV9TSU5HTEUoZ2VzdHVyZSkpOworICAgIGlmICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5j
ZShnZXN0dXJlLCBzZXF1ZW5jZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGd0a19nZXN0dXJl
X3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNF
X0NMQUlNRUQpOworCisgICAgc3dpcGVHZXN0dXJlLT5zdGFydE1vbWVudHVtU2Nyb2xsKGd0a19n
ZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSwgdmVsb2NpdHlYLCB2ZWxv
Y2l0eVkpOworfQorCitHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1
cmUoV2ViUGFnZVByb3h5JiBwYWdlKQorICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV9zd2lwZV9u
ZXcocGFnZS52aWV3V2lkZ2V0KCkpLCBwYWdlKQoreworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9z
ZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgInN3aXBlIiwg
R19DQUxMQkFDSyhzd2lwZSksIHRoaXMpOworfQorCiBJbnRQb2ludCBHZXN0dXJlQ29udHJvbGxl
cjo6Wm9vbUdlc3R1cmU6OmNlbnRlcigpIGNvbnN0CiB7CiAgICAgZG91YmxlIHgsIHk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXgg
ODY3OTJkZi4uZTk2MDMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9HZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
R2VzdHVyZUNvbnRyb2xsZXIuaApAQCAtNjcsNiArNjcsOCBAQCBwcml2YXRlOgogICAgICAgICBE
cmFnR2VzdHVyZShXZWJQYWdlUHJveHkmKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIC8vIE5v
dGlmeSB0aGF0IGEgZHJhZyBzdGFydGVkLCBhbGxvd2luZyB0byBzdG9wIGtpbmV0aWMgZGVjZWxl
cmF0aW9uLgorICAgICAgICB2b2lkIHN0YXJ0RHJhZyhjb25zdCBHZGtFdmVudCopOwogICAgICAg
ICB2b2lkIGhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqLCBkb3VibGUgeCwgZG91YmxlIHkpOwog
ICAgICAgICB2b2lkIGhhbmRsZVRhcChjb25zdCBHZGtFdmVudCopOwogICAgICAgICB2b2lkIGxv
bmdQcmVzc0ZpcmVkKCk7CkBAIC04Miw2ICs4NCwxNiBAQCBwcml2YXRlOgogICAgICAgICBib29s
IG1faW5EcmFnOwogICAgIH07CiAKKyAgICBjbGFzcyBTd2lwZUdlc3R1cmUgZmluYWwgOiBwdWJs
aWMgR2VzdHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBTd2lwZUdlc3R1cmUoV2ViUGFnZVBy
b3h5Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHN0YXJ0TW9tZW50dW1TY3JvbGwo
Y29uc3QgR2RrRXZlbnQqLCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZKTsKKwor
ICAgICAgICBzdGF0aWMgdm9pZCBzd2lwZShTd2lwZUdlc3R1cmUqLCBkb3VibGUgdmVsb2NpdHlY
LCBkb3VibGUgdmVsb2NpdHlZLCBHdGtHZXN0dXJlKik7CisgICAgfTsKKwogICAgIGNsYXNzIFpv
b21HZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgewogICAgIHB1YmxpYzoKICAgICAgICAg
Wm9vbUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CkBAIC0xMDEsNiArMTEzLDcgQEAgcHJpdmF0ZToK
ICAgICB9OwogCiAgICAgRHJhZ0dlc3R1cmUgbV9kcmFnR2VzdHVyZTsKKyAgICBTd2lwZUdlc3R1
cmUgbV9zd2lwZUdlc3R1cmU7CiAgICAgWm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282129</attachid>
            <date>2016-06-27 07:10:08 -0700</date>
            <delta_ts>2016-06-27 09:10:24 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>48895</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwMzc0YmQ0Li4wOTE3MTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTYtMDYtMjcgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMg
c2Nyb2xsaW5nIGFuaW1hdGlvbiBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGlu
ZzsgaXQgaXMgYmFzZWQgb24gR1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlw
ZS4KKworICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5k
IHN3aXBlIHZlbG9jaXR5IHRvIFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRp
bmcgb24gd2hldGhlciB0aGUgc2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBh
IHN3aXBlLCB0aGUgc2Nyb2xsIGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAg
dGhlIHN3aXBlIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3Ig
dXNlIHRoZSBvbmUgZnJvbSB0aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAg
ICAgbW9tZW50dW0gc2Nyb2xsaW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb246OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb246
OnVwZGF0ZVZpc2libGVMZW5ndGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlv
bjo6c2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRp
b25LaW5ldGljLmNwcDogQWRkZWQuCisgICAgICAgIChjbGFtcCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1h
dGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6U2Ny
b2xsQW5pbWF0aW9uS2luZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25L
aW5ldGljOjp+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dGlvbktpbmV0aWM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktp
bmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdGlvbktpbmV0aWMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0aW9uLmguCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3Jt
V2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OnN3aXBl
VmVsb2NpdHkpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6U2Nyb2xsQW5pbWF0b3JHdGsp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNtb290aFNjcm9s
bGluZ0FuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6c2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6
OmNvbXB1dGVWZWxvY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6
d2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6
OnVwZGF0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1Njcm9sbEFuaW1hdG9yR3RrLmg6CisKIDIwMTYtMDYtMjcgIE1pZ3VlbCBHb21leiAgPG1hZ29t
ZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtFRkxdIEJ1aWxkIHdpdGggdGhyZWFkZWQg
Y29tcG9zaXRvciBlbmFibGVkIGlzIGJyb2tlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRl
eCA3NGU1MTk1Li4yY2YwOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNzcsNiAr
NzcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvc291cC9TdWJy
ZXNvdXJjZUxvYWRlclNvdXAuY3BwCiAKICAgICBwbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwCisg
ICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKIAogICAgIHBsYXRmb3JtL2F1
ZGlvL2dsaWIvQXVkaW9CdXNHTGliLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDA3MTM1NWMuLjc2ZjZjNDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC01Myw3ICs1Myw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCiAgICAg
fTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9S
TShHVEspCiAgICAgZW51bSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSA6IHVpbnQ4X3QgewogICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgICAgICAgID0gMCwKICAgICAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbiAgICAgICA9IDEgPDwgMCwKQEAgLTc3LDggKzc3LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2RpcmVjdGlvbkludmVydGVk
RnJvbURldmljZShmYWxzZSkKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgICwgbV9o
YXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZhbHNlKQotICAgICAgICAgICAgLCBtX3BoYXNlKFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKLSAgICAgICAgICAgICwgbV9tb21lbnR1bVBoYXNl
KFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKICAgICAgICAgICAgICwgbV9zY3JvbGxDb3Vu
dCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgoMCkKICAg
ICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKDApCkBAIC05OCw4ICs5
Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9kaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UoZmFsc2UpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICAs
IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyhmYWxzZSkKLSAgICAgICAgICAgICwgbV9waGFz
ZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpCi0gICAgICAgICAgICAsIG1fbW9tZW50dW1Q
aGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpCiAgICAgICAgICAgICAsIG1fc2Nyb2xs
Q291bnQoMCkKICAgICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYKDAp
CiAgICAgICAgICAgICAsIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSgwKQpAQCAtMTYw
LDEyICsxNTYsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHNob3VsZENv
bnNpZGVyTGF0Y2hpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBzaG91bGRSZXNldExhdGNoaW5n
KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7Ci0gICAgICAgIGJv
b2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogI2Vsc2UKICAgICAg
ICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyAgICAgICAg
Ym9vbCBpc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1Ry
YW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAgICAgRmxvYXRQb2ludCBzd2lwZVZlbG9jaXR5KCkgY29uc3Q7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQs
IFdQQVJBTSwgTFBBUkFNLCBib29sIGlzTW91c2VIV2hlZWwpOwogICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnQoSFdORCwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYXRpb24pOwpAQCAtMTgwLDEwICsxODMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBmbG9hdCBtX3doZWVsVGlja3NZOwogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFu
dWxhcml0eSBtX2dyYW51bGFyaXR5OwogICAgICAgICBib29sIG1fZGlyZWN0aW9uSW52ZXJ0ZWRG
cm9tRGV2aWNlOworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCisgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2UgeyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZU5vbmUgfTsKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9tb21lbnR1bVBoYXNl
IHsgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CisjZW5kaWYKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7Ci0gICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2U7Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlIG1fbW9tZW50dW1QaGFzZTsKICAgICAgICAgdW5zaWduZWQgbV9zY3JvbGxDb3Vu
dDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYOwogICAgICAg
ICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVk7CkBAIC0yMTIsNyArMjE3LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZUVuZGVkOwogICAgIH0KKyNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6
OmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkICYmIG1fbW9tZW50dW1QaGFz
ZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdGlvbi5oCmluZGV4IDM5Mjk5OTcuLjJlNWY2M2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCkBAIC0zNiwxMCArMzYsMTAgQEAgY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxBbmltYXRpb24gewogcHVibGljOgogICAgIHZp
cnR1YWwgflNjcm9sbEFuaW1hdGlvbigpIHsgfTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCAvKiBzdGVwICovLCBmbG9hdCAvKiBtdWx0
aXBsaWVyICovKSB7IHJldHVybiB0cnVlOyB9OwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmxlTGVuZ3RocygpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgeyB9OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIHsgfTsKICAgICB2aXJ0dWFs
IHZvaWQgc2VydmljZUFuaW1hdGlvbigpIHsgfTsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJjZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKQEAgLTAsMCAr
MSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMu
aCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisKKy8qCisgKiBQZXJBeGlzRGF0YSBpcyBhIHBvcnQgb2YgR3RrS2luZXRpY1Njcm9s
bGluZyBhcyBvZiBHVEsrIDMuMjAsCisgKiBtaW1pY2tpbmcgaXRzIEFQSSBhbmQgaXRzIGJlaGF2
aW9yLgorICoKKyAqIEFsbCBvdXIgY3VydmVzIGFyZSBzZWNvbmQgZGVncmVlIGxpbmVhciBkaWZm
ZXJlbnRpYWwgZXF1YXRpb25zLCBhbmQKKyAqIHNvIHRoZXkgY2FuIGFsd2F5cyBiZSB3cml0dGVu
IGFzIGxpbmVhciBjb21iaW5hdGlvbnMgb2YgMiBiYXNlCisgKiBzb2x1dGlvbnMuIGNvZWYxIGFu
ZCBjb2VmMiBhcmUgdGhlIGNvZWZmaWNpZW50cyB0byB0aGVzZSB0d28gYmFzZQorICogc29sdXRp
b25zLCBhbmQgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24gYW5kIHZlbG9j
aXR5LgorICoKKyAqIEluIHRoZSBjYXNlIG9mIHNpbXBsZSBkZWNlbGVyYXRpb24sIHRoZSBkaWZm
ZXJlbnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHknJyA9IC1teScKKyAqCisgKiBXaXRoIG0g
dGhlIHJlc2lzdGVuY2UgZmFjdG9yLiBGb3IgdGhpcyB3ZSB1c2UgdGhlIGZvbGxvd2luZyAyCisg
KiBiYXNlIHNvbHV0aW9uczoKKyAqCisgKiAgIGYxKHgpID0gMQorICogICBmMih4KSA9IGV4cCgt
bXgpCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygb3ZlcnNob290LCB0aGUgZGlmZmVyZW50aWFsIGVx
dWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknIC0ga3kKKyAqCisgKiBXaXRoIG0gdGhlIHJl
c2lzdGFuY2UsIGFuZCBrIHRoZSBzcHJpbmcgc3RpZmZuZXNzIGNvbnN0YW50LiBXZSBsZXQKKyAq
IGsgPSBtXjIgLyA0LCBzbyB0aGF0IHRoZSBzeXN0ZW0gaXMgY3JpdGljYWxseSBkYW1wZWQgKGll
LCByZXR1cm5zIHRvIGl0cworICogZXF1aWxpYnJpdW0gcG9zaXRpb24gYXMgcXVpY2tseSBhcyBw
b3NzaWJsZSwgd2l0aG91dCBvc2NpbGxhdGluZyksIGFuZCBvZmZzZXQKKyAqIHRoZSB3aG9sZSB0
aGluZywgc3VjaCB0aGF0IHRoZSBlcXVpbGlicml1bSBwb3NpdGlvbiBpcyBhdCAwLiBUaGlzIGdp
dmVzIHRoZQorICogYmFzZSBzb2x1dGlvbnMKKyAqCisgKiAgIGYxKHgpID0gZXhwKC1teCAvIDIp
CisgKiAgIGYyKHgpID0gdCBleHAoLW14IC8gMikKKyAqLworCitzdGF0aWMgY29uc3QgZG91Ymxl
IGRlY2VsRnJpY3Rpb24gPSA0Oworc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsK
K3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwgPSAuMDAxOworCitzdGF0
aWMgaW5saW5lIGRvdWJsZSBjbGFtcChkb3VibGUgeCwgZG91YmxlIGxvdywgZG91YmxlIGhpZ2gp
Cit7CisgICAgQVNTRVJUKGxvdyA8PSBoaWdoKTsKKworICAgIHJldHVybiAoeCA+IGhpZ2gpID8g
aGlnaCA6ICgoeCA8IGxvdykgPyBsb3cgOiB4KTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoZG91Ymxl
IGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRvdWJsZSBpbml0
aWFsVmVsb2NpdHkpCisgICAgOiBtX2xvd2VyKGxvd2VyKQorICAgICwgbV91cHBlcih1cHBlcikK
KyAgICAsIG1fY29lZjEoaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbiArIGluaXRpYWxQ
b3NpdGlvbikKKyAgICAsIG1fY29lZjIoLWluaXRpYWxWZWxvY2l0eSAvIGRlY2VsRnJpY3Rpb24p
CisgICAgLCBtX3Bvc2l0aW9uKGNsYW1wKGluaXRpYWxQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKSkK
KyAgICAsIG1fdmVsb2NpdHkoaW5pdGlhbFBvc2l0aW9uIDwgbG93ZXIgfHwgaW5pdGlhbFBvc2l0
aW9uID4gdXBwZXIgPyAwIDogaW5pdGlhbFZlbG9jaXR5KQoreworfQorCitib29sIFNjcm9sbEFu
aW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjphbmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1lRGVs
dGEpCit7CisgICAgbV9lbGFwc2VkVGltZSArPSB0aW1lRGVsdGE7CisKKyAgICBkb3VibGUgZXhw
b25lbnRpYWxQYXJ0ID0gZXhwKC1kZWNlbEZyaWN0aW9uICogbV9lbGFwc2VkVGltZSk7CisgICAg
bV9wb3NpdGlvbiA9IG1fY29lZjEgKyBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0OworICAgIG1f
dmVsb2NpdHkgPSAtZGVjZWxGcmljdGlvbiAqIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisK
KyAgICBpZiAobV9wb3NpdGlvbiA8IG1fbG93ZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1f
bG93ZXI7CisgICAgICAgIG1fdmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAobV9wb3NpdGlv
biA+IG1fdXBwZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1fdXBwZXI7CisgICAgICAgIG1f
dmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAoZmFicyhtX3ZlbG9jaXR5KSA8IDEpIHsKKyAg
ICAgICAgbV9wb3NpdGlvbiA9IHJvdW5kKG1fcG9zaXRpb24pOworICAgICAgICBtX3ZlbG9jaXR5
ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV92ZWxvY2l0eTsKK30KKworU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xs
YWJsZUFyZWEsIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogU2Nyb2xsQW5pbWF0aW9uKHNjcm9sbGFibGVBcmVh
KQorICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIoKnRoaXMsICZT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKQoreworfQorCitTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjp+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpCit7Cit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RvcCgpCit7CisgICAgbV9hbmltYXRpb25UaW1l
ci5zdG9wKCk7CisgICAgbV9ob3Jpem9udGFsRGF0YSA9IE51bGxvcHQ7CisgICAgbV92ZXJ0aWNh
bERhdGEgPSBOdWxsb3B0OworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0YXJ0
KGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgdmVs
b2NpdHksIGJvb2wgbWF5SFNjcm9sbCwgYm9vbCBtYXlWU2Nyb2xsKQoreworICAgIHN0b3AoKTsK
KworICAgIG1fcG9zaXRpb24gPSBpbml0aWFsUG9zaXRpb247CisKKyAgICBpZiAoIXZlbG9jaXR5
LngoKSAmJiAhdmVsb2NpdHkueSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWF5SFNj
cm9sbCkgeworICAgICAgICBtX2hvcml6b250YWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3JvbGxh
YmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisgICAgICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAgICAgICAgICAgIGluaXRp
YWxQb3NpdGlvbi54KCksIHZlbG9jaXR5LngoKSk7CisgICAgfQorICAgIGlmIChtYXlWU2Nyb2xs
KSB7CisgICAgICAgIG1fdmVydGljYWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJl
YS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCksCisgICAgICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSwKKyAgICAgICAgICAgIGluaXRpYWxQb3Np
dGlvbi55KCksIHZlbG9jaXR5LnkoKSk7CisgICAgfQorCisgICAgYW5pbWF0aW9uVGltZXJGaXJl
ZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmly
ZWQoKQoreworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOworICAgIGRvdWJsZSBkZWx0YVRvTmV4dEZyYW1lID0gY2VpbCgoY3VycmVudFRpbWUg
LSBtX3N0YXJ0VGltZSkgKiBmcmFtZVJhdGUpIC8gZnJhbWVSYXRlIC0gKGN1cnJlbnRUaW1lIC0g
bV9zdGFydFRpbWUpOworCisgICAgaWYgKG1faG9yaXpvbnRhbERhdGEgJiYgIW1faG9yaXpvbnRh
bERhdGEudmFsdWUoKS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQorICAgICAgICBt
X2hvcml6b250YWxEYXRhID0gTnVsbG9wdDsKKworICAgIGlmIChtX3ZlcnRpY2FsRGF0YSAmJiAh
bV92ZXJ0aWNhbERhdGEudmFsdWUoKS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQor
ICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IE51bGxvcHQ7CisKKyAgICAvLyBJZiBvbmUgb2YgdGhl
IGF4ZXMgZGlkbid0IGZpbmlzaCBpdHMgYW5pbWF0aW9uIHdlIG11c3QgY29udGludWUgaXQuCisg
ICAgaWYgKG1faG9yaXpvbnRhbERhdGEgfHwgbV92ZXJ0aWNhbERhdGEpCisgICAgICAgIG1fYW5p
bWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6bWF4KG1pbmltdW1UaW1lckludGVydmFsLCBk
ZWx0YVRvTmV4dEZyYW1lKSk7CisKKyAgICBkb3VibGUgeCA9IG1faG9yaXpvbnRhbERhdGEgPyBt
X2hvcml6b250YWxEYXRhLnZhbHVlKCkucG9zaXRpb24oKSA6IG1fcG9zaXRpb24ueCgpOworICAg
IGRvdWJsZSB5ID0gbV92ZXJ0aWNhbERhdGEgPyBtX3ZlcnRpY2FsRGF0YS52YWx1ZSgpLnBvc2l0
aW9uKCkgOiBtX3Bvc2l0aW9uLnkoKTsKKyAgICBtX3Bvc2l0aW9uID0gRmxvYXRQb2ludCh4LCB5
KTsKKyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKEZsb2F0UG9pbnQobV9wb3Np
dGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODU5OGRhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Ny
b2xsQW5pbWF0aW9uS2luZXRpY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaAor
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYyBmaW5hbDogcHVibGljIFNjcm9sbEFuaW1hdGlvbiB7Citwcml2YXRlOgor
ICAgIGNsYXNzIFBlckF4aXNEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBlckF4aXNEYXRh
KGRvdWJsZSBsb3dlciwgZG91YmxlIHVwcGVyLCBkb3VibGUgaW5pdGlhbFBvc2l0aW9uLCBkb3Vi
bGUgaW5pdGlhbFZlbG9jaXR5KTsKKworICAgICAgICBkb3VibGUgcG9zaXRpb24oKSB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CisKKyAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1l
RGVsdGEpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZG91YmxlIG1fbG93ZXIgeyAwIH07Cisg
ICAgICAgIGRvdWJsZSBtX3VwcGVyIHsgMCB9OworCisgICAgICAgIGRvdWJsZSBtX2NvZWYxIHsg
MCB9OworICAgICAgICBkb3VibGUgbV9jb2VmMiB7IDAgfTsKKworICAgICAgICBkb3VibGUgbV9l
bGFwc2VkVGltZSB7IDAgfTsKKyAgICAgICAgZG91YmxlIG1fcG9zaXRpb24geyAwIH07CisgICAg
ICAgIGRvdWJsZSBtX3ZlbG9jaXR5IHsgMCB9OworICAgIH07CisKK3B1YmxpYzoKKyAgICBTY3Jv
bGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVhJiwgc3RkOjpmdW5jdGlvbjx2b2lkKEZs
b2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24pOworICAgIHZpcnR1
YWwgflNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKTsKKworICAgIHZvaWQgc3RhcnQoY29uc3QgRmxv
YXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgYm9v
bCBtYXlIU2Nyb2xsLCBib29sIG1heVZTY3JvbGwpOworCitwcml2YXRlOgorICAgIHZvaWQgc3Rv
cCgpIG92ZXJyaWRlOworICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOworCisgICAgc3Rk
OjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+IG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVu
Y3Rpb247CisKKyAgICBPcHRpb25hbDxQZXJBeGlzRGF0YT4gbV9ob3Jpem9udGFsRGF0YSB7IE51
bGxvcHQgfTsKKyAgICBPcHRpb25hbDxQZXJBeGlzRGF0YT4gbV92ZXJ0aWNhbERhdGEgeyBOdWxs
b3B0IH07CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmlt
YXRpb25UaW1lcjsKKyAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRpb25LaW5ldGljX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5j
cHAKaW5kZXggMTA0NWM0NC4uYzMzNzg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1
ZGUgPGdkay9nZGsuaD4KQEAgLTgzLDYgKzg0LDIwIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxh
dGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NY
ID0gbV9kZWx0YVg7CiAgICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWZuZGVmIEdU
S19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgbV9w
aGFzZSA9IGV2ZW50LT5pc19zdG9wID8KKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VF
bmRlZCA6CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisg
ICAgbV9waGFzZSA9IGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIW1f
ZGVsdGFYICYmICFtX2RlbHRhWSA/CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5k
ZWQgOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNl
bHNlCisgICAgbV9waGFzZSA9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRp
ZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCiAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KHN0YXRp
Y19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55KSk7CiAgICAg
bV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9v
dCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnlfcm9vdCkpOwogICAgIG1fZ3JhbnVsYXJpdHkg
PSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKQEAgLTkzLDQgKzEwOCwxMCBAQCBQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAg
bV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQgUGxhdGZvcm1XaGVlbEV2ZW50Ojpzd2lwZVZlbG9jaXR5
KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3dpcGluZyB2ZWxvY2l0eSBpcyBzdG9yZWQgaW4gdGhl
IGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVjbGFyaW5nIGl0LgorICAgIHJldHVybiBpc1RyYW5zaXRp
b25pbmdUb01vbWVudHVtU2Nyb2xsKCkgPyBGbG9hdFBvaW50KG1fd2hlZWxUaWNrc1gsIG1fd2hl
ZWxUaWNrc1kpIDogRmxvYXRQb2ludCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcAppbmRleCAxM2U2MzU0Li44ODdlNGVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0
ay5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvckd0ay5oIgogCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5o
IgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvblNtb290aC5oIgogI2luY2x1ZGUgIlNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKQEAgLTQwLDYgKzQxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZG91YmxlIG92ZXJmbG93U2Nyb2xs
YmFyc0FuaW1hdGlvbkR1cmF0aW9uID0gMTsKIHN0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dT
Y3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5ID0gMjsKK3N0YXRpYyBjb25zdCBkb3VibGUgc2Ny
b2xsQ2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kcyA9IDE1MDsKIAogc3RkOjp1bmlxdWVfcHRy
PFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBz
Y3JvbGxhYmxlQXJlYSkKIHsKQEAgLTUwLDYgKzUyLDE0IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjpT
Y3JvbGxBbmltYXRvckd0ayhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBT
Y3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFu
aW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJB
bmltYXRpb25UaW1lckZpcmVkKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4obV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNd
KEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQor
ICAgICAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgICAgICBtX3Ntb290aEFuaW1h
dGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNlbmRpZgorICAgICAgICB1cGRh
dGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CisgICAgfSk7CisKICNpZiBFTkFCTEUoU01P
T1RIX1NDUk9MTElORykKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFi
bGVkKCkpCiAgICAgICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwpAQCAtNjMs
NDggKzczLDEwOCBAQCBTY3JvbGxBbmltYXRvckd0azo6flNjcm9sbEFuaW1hdG9yR3RrKCkKICNp
ZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3Vy
ZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpCiB7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQorICAg
IGlmIChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hbmltYXRp
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxl
QXJlYSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsK
LSAgICAgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsK
LSAgICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKLSAgICAgICAg
bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyAgICBtX3Ntb290aEFuaW1hdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBt
X2N1cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAg
ICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0aW9uKSk7CiAgICAgfSk7CiB9CisjZW5kaWYK
IAorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogYm9vbCBTY3JvbGxBbmltYXRvckd0azo6
c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKIHsKICAgICBpZiAo
IW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkgfHwgZ3JhbnVsYXJpdHkg
PT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAg
ICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKLSAgICByZXR1cm4gbV9hbmltYXRp
b24tPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwor
ICAgIHJldHVybiBtX3Ntb290aEFuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiB9CisjZW5kaWYKIAogdm9pZCBTY3JvbGxBbmltYXRv
ckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9m
ZnNldCkKIHsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQsIHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEu
c2Nyb2xsT3JpZ2luKCkpKTsKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0
aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworICAgIG1fa2luZXRpY0FuaW1hdGlv
bi0+c3RvcCgpOworICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVhcigpOwogCi0gICAgRmxvYXRTaXpl
IGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAgICBtX2N1cnJlbnRQb3Np
dGlvbiA9IHBvc2l0aW9uOwotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CisjaWYg
RU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAg
ICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNl
bmRpZgorCisgICAgdXBkYXRlUG9zaXRpb24oV1RGTW92ZShwb3NpdGlvbikpOwogfQogCi12b2lk
IFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCitGbG9hdFBvaW50IFNjcm9s
bEFuaW1hdG9yR3RrOjpjb21wdXRlVmVsb2NpdHkoKQogewotICAgIGlmIChtX2FuaW1hdGlvbikK
LSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1f
c2Nyb2xsSGlzdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBkb3Vi
bGUgZmlyc3QgPSBtX3Njcm9sbEhpc3RvcnlbMF0udGltZXN0YW1wKCk7CisgICAgZG91YmxlIGxh
c3QgPSBtX3Njcm9sbEhpc3RvcnkucmJlZ2luKCktPnRpbWVzdGFtcCgpOworCisgICAgaWYgKGxh
c3QgPT0gZmlyc3QpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBGbG9hdFBvaW50IGFjY3Vt
RGVsdGE7CisgICAgZm9yIChjb25zdCBhdXRvJiBzY3JvbGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9y
eSkKKyAgICAgICAgYWNjdW1EZWx0YSArPSBGbG9hdFBvaW50KHNjcm9sbEV2ZW50LmRlbHRhWCgp
LCBzY3JvbGxFdmVudC5kZWx0YVkoKSk7CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsK
KworICAgIHJldHVybiBGbG9hdFBvaW50KGFjY3VtRGVsdGEueCgpICogLTEwMDAgLyAobGFzdCAt
IGZpcnN0KSwgYWNjdW1EZWx0YS55KCkgKiAtMTAwMCAvIChsYXN0IC0gZmlyc3QpKTsKIH0KKwor
Ym9vbCBTY3JvbGxBbmltYXRvckd0azo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIGV2ZW50KQoreworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOworCisg
ICAgbV9zY3JvbGxIaXN0b3J5LnJlbW92ZUFsbE1hdGNoaW5nKFsmZXZlbnRdIChQbGF0Zm9ybVdo
ZWVsRXZlbnQmIG90aGVyRXZlbnQpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gZXZlbnQudGlt
ZXN0YW1wKCkgLSBvdGhlckV2ZW50LnRpbWVzdGFtcCgpID4gc2Nyb2xsQ2FwdHVyZVRocmVzaG9s
ZE1pbGxpc2Vjb25kczsKKyAgICB9KTsKKworICAgIGlmIChldmVudC5pc0VuZE9mTm9uTW9tZW50
dW1TY3JvbGwoKSkgeworICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgZXZlbnQg
dG8gdGhlIGhpc3RvcnkgYXMgaXRzIGRlbHRhIHdpbGwgYmUgKDAsIDApLgorICAgICAgICBzdGF0
aWNfY2FzdDxTY3JvbGxBbmltYXRpb25LaW5ldGljKj4obV9raW5ldGljQW5pbWF0aW9uLmdldCgp
KS0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGNvbXB1dGVWZWxvY2l0eSgpLCBtX3Njcm9sbGFi
bGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNj
cm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChldmVudC5p
c1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkpIHsKKyAgICAgICAgbV9zY3JvbGxIaXN0
b3J5LmNsZWFyKCk7CisgICAgICAgIHN0YXRpY19jYXN0PFNjcm9sbEFuaW1hdGlvbktpbmV0aWMq
PihtX2tpbmV0aWNBbmltYXRpb24uZ2V0KCkpLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgZXZl
bnQuc3dpcGVWZWxvY2l0eSgpLCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIo
KSwgbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgbV9zY3JvbGxIaXN0b3J5LmFwcGVuZChldmVudCk7CisKKyAg
ICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCit7CisgICAgbV9raW5l
dGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworCisjaWYgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290
aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgorfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yR3RrOjp1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYgcG9zaXRpb24pCit7
CisgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKKyAg
ICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdURk1vdmUocG9zaXRpb24pOworICAgIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZChkZWx0YSk7Cit9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZl
cnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRpY0Fu
aW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0
ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBt
X3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlm
ICghc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3LDkgKzE4NywxMSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKKyAgICBt
X2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKICNpZiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0
aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikK
KyAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5k
aWYKICAgICBpZiAoIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmlt
YXRvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmgKaW5kZXggNzBlNWI3My4uZGY1NzA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKQEAgLTQ2LDkgKzQ2LDExIEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgYm9vbCBzY3JvbGwoU2Ny
b2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBt
dWx0aXBsaWVyKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHdpbGxF
bmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKKworICAgIGJvb2wgaGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlk
QWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRB
ZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwpAQCAtNjMsMTYgKzY1
LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0
IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwogICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxi
YXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVQb3NpdGlv
bihGbG9hdFBvaW50JiYpOworCiAgICAgdm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGlt
ZXJGaXJlZCgpOwogICAgIHZvaWQgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCBo
aWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsKICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJz
T3BhY2l0eSgpOwogCisgICAgRmxvYXRQb2ludCBjb21wdXRlVmVsb2NpdHkoKTsKKwogI2lmIEVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5p
bWF0aW9uKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1h
dGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1h
dGlvbjsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fa2lu
ZXRpY0FuaW1hdGlvbjsKKyAgICBWZWN0b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhp
c3Rvcnk7CiAgICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVs
bHB0ciB9OwogICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxs
cHRyIH07CiAgICAgYm9vbCBtX292ZXJsYXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA0MTM3ZTZhLi5kMDk0NDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAK
KzIwMTYtMDYtMjcgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSBhbmQgbW9tZW50
dW0gcGhhc2UgdG8gV2ViV2hlZWxFdmVudC4KKworICAgICAgICBNYWtlIFdlYldoZWVsRXZlbnQg
bWFuYWdlIHRoZSAnaXNfc3RvcCcgYXR0cmlidXRlIG9mIEdka0V2ZW50U2Nyb2xsIHRvIGNyZWF0
ZSB0aGUgY29ycmVzcG9uZGluZyBXZWJXaGVlbEV2ZW50CisgICAgICAgIHdpdGggdGhlIGNvcnJl
Y3QgcGhhc2VzIGFuZCBkZWx0YXMuCisKKyAgICAgICAgTWFrZSBHZXN0dXJlQ29udHJvbGxlciBt
YW5hZ2Ugc3dpcGVzIHRvIGNyZWF0ZSB0aGUgY29ycmVzcG9uZGluZyBXZWJXaGVlbEV2ZW50IHdp
dGggdGhlIGNvcnJlY3QgcGhhc2VzIGFuZAorICAgICAgICBkZWx0YXMuCisKKyAgICAgICAgKiBT
aGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVudC5o
OgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJLaXQyUGxhdGZvcm1XaGVlbEV2ZW50OjpXZWJLaXQyUGxhdGZvcm1XaGVlbEV2ZW50
KToKKyAgICAgICAgKiBTaGFyZWQvV2ViV2hlZWxFdmVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXaGVl
bEV2ZW50OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50OjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQpOgor
ICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFy
ZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3VsZFByb2Nlc3NXaGVlbEV2ZW50
Tm93KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250
cm9sbGVyOjppc1Byb2Nlc3NpbmdHZXN0dXJlcyk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZVNj
cm9sbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0
dXJlOjpzdGFydERyYWcpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6RHJh
Z0dlc3R1cmU6OmhhbmRsZURyYWcpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxl
cjo6RHJhZ0dlc3R1cmU6OmJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6OkRyYWdHZXN0dXJlOjplbmQpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxl
cjo6U3dpcGVHZXN0dXJlOjpzdGFydE1vbWVudHVtU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6
R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3dpcGUpOgorICAgICAgICAoV2ViS2l0
OjpHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaDoKKwogMjAxNi0wNi0yNyAgTWln
dWVsIEdvbWV6ICA8bWFnb21lekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW0VGTF0gQnVp
bGQgd2l0aCB0aHJlYWRlZCBjb21wb3NpdG9yIGVuYWJsZWQgaXMgYnJva2VuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCAxNTMzMjIyLi40NTAxZjc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKQEAgLTUy
LDYgKzUyLDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5hdGl2ZVdlYldo
ZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpOwogICAgIE5hdGl2ZVdlYldoZWVs
RXZlbnQoR2RrRXZlbnQqKTsKKyAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiwgV2Vi
V2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwog
I2VsaWYgUExBVEZPUk0oRUZMKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgRXZhc19F
dmVudF9Nb3VzZV9XaGVlbCosIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgdG9XZWJD
b250ZW50LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRvRGV2aWNlU2NyZWVuKTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAppbmRleCA0YmZhMGQ4Li4xOGJmZjI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApAQCAtMTc5LDcgKzE3OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQKICAgICB9OwogCi0jaWYgUExBVEZPUk0oQ09D
T0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBlbnVtIFBoYXNl
IHsKICAgICAgICAgUGhhc2VOb25lICAgICAgICA9IDAsCiAgICAgICAgIFBoYXNlQmVnYW4gICAg
ICAgPSAxIDw8IDAsCkBAIC0xOTYsNiArMTk2LDggQEAgcHVibGljOgogICAgIFdlYldoZWVsRXZl
bnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVs
dGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIE1v
ZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgV2Vi
V2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxh
cml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQaGFzZSBtb21l
bnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQzMl90IHNjcm9s
bENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykK
KyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3Ms
IFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSwgTW9kaWZpZXJzLCBkb3Vi
bGUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CkBAIC0yMDQsOSArMjA2LDExIEBA
IHB1YmxpYzoKICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUgd2hlZWxUaWNrcygpIGNvbnN0
IHsgcmV0dXJuIG1fd2hlZWxUaWNrczsgfQogICAgIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R3JhbnVsYXJpdHk+KG1fZ3JhbnVsYXJpdHkpOyB9
CiAgICAgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoKSBjb25zdCB7IHJldHVybiBt
X2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZTsgfQotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lm
IFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgUGhhc2UgcGhhc2UoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxQaGFzZT4obV9waGFzZSk7IH0KICAgICBQaGFzZSBtb21l
bnR1bVBoYXNlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UGhhc2U+KG1fbW9tZW50dW1Q
aGFzZSk7IH0KKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGJvb2wgaGFzUHJlY2lz
ZVNjcm9sbGluZ0RlbHRhcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUHJlY2lzZVNjcm9sbGluZ0Rl
bHRhczsgfQogICAgIHVpbnQzMl90IHNjcm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxDb3VudDsgfQogICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNj
cm9sbGluZ0RlbHRhKCkgY29uc3QgeyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVs
dGE7IH0KQEAgLTIyNCw5ICsyMjgsMTEgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpGbG9hdFNp
emUgbV93aGVlbFRpY2tzOwogICAgIHVpbnQzMl90IG1fZ3JhbnVsYXJpdHk7IC8vIEdyYW51bGFy
aXR5CiAgICAgYm9vbCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZTsKKyNpZiBQTEFURk9S
TShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQorICAgIHVpbnQzMl90IG1fcGhhc2UgeyBQaGFzZTo6
UGhhc2VOb25lIH07CisgICAgdWludDMyX3QgbV9tb21lbnR1bVBoYXNlIHsgUGhhc2U6OlBoYXNl
Tm9uZSB9OworI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdWludDMyX3QgbV9waGFz
ZTsgLy8gUGhhc2UKLSAgICB1aW50MzJfdCBtX21vbWVudHVtUGhhc2U7IC8vIFBoYXNlCiAgICAg
Ym9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAgICAgdWludDMyX3QgbV9zY3JvbGxD
b3VudDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVs
dGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwCmluZGV4
IGVlYjc0NDEuLmU3ODM4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJF
dmVudENvbnZlcnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENv
bnZlcnNpb24uY3BwCkBAIC0xNTEsOSArMTUxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV93aGVl
bFRpY2tzWSA9IHdlYkV2ZW50LndoZWVsVGlja3MoKS5oZWlnaHQoKTsKICAgICAgICAgbV9ncmFu
dWxhcml0eSA9ICh3ZWJFdmVudC5ncmFudWxhcml0eSgpID09IFdlYldoZWVsRXZlbnQ6OlNjcm9s
bEJ5UGFnZVdoZWVsRXZlbnQpID8gV2ViQ29yZTo6U2Nyb2xsQnlQYWdlV2hlZWxFdmVudCA6IFdl
YkNvcmU6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwogICAgICAgICBtX2RpcmVjdGlvbkludmVy
dGVkRnJvbURldmljZSA9IHdlYkV2ZW50LmRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSgpOwot
I2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEsp
CiAgICAgICAgIG1fcGhhc2UgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZT4od2ViRXZlbnQucGhhc2UoKSk7CiAgICAgICAgIG1fbW9tZW50dW1QaGFzZSA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlPih3ZWJFdmVudC5tb21l
bnR1bVBoYXNlKCkpOworI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1faGFz
UHJlY2lzZVNjcm9sbGluZ0RlbHRhcyA9IHdlYkV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0
YXMoKTsKICAgICAgICAgbV9zY3JvbGxDb3VudCA9IHdlYkV2ZW50LnNjcm9sbENvdW50KCk7CiAg
ICAgICAgIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCA9IHdlYkV2ZW50LnVuYWNjZWxl
cmF0ZWRTY3JvbGxpbmdEZWx0YSgpLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hl
ZWxFdmVudC5jcHAKaW5kZXggZDI1MGExNC4uNTYzMTk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJXaGVlbEV2ZW50LmNwcApAQCAtNjcsNiArNjcsMjAgQEAgV2ViV2hlZWxFdmVudDo6V2Vi
V2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQKIHsKICAgICBBU1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0eXBlKSk7CiB9CisjZWxpZiBQ
TEFURk9STShHVEspCitXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29u
c3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IEZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgUGhhc2Ug
cGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBNb2Rp
ZmllcnMgbW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKQorICAgIDogV2ViRXZlbnQodHlwZSwg
bW9kaWZpZXJzLCB0aW1lc3RhbXApCisgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICwg
bV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKKyAgICAsIG1fZGVsdGEoZGVsdGEpCisg
ICAgLCBtX3doZWVsVGlja3Mod2hlZWxUaWNrcykKKyAgICAsIG1fZ3JhbnVsYXJpdHkoZ3JhbnVs
YXJpdHkpCisgICAgLCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZShmYWxzZSkKKyAgICAs
IG1fcGhhc2UocGhhc2UpCisgICAgLCBtX21vbWVudHVtUGhhc2UobW9tZW50dW1QaGFzZSkKK3sK
KyAgICBBU1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0eXBlKSk7Cit9CiAjZW5kaWYKIAogdm9pZCBX
ZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC03OSw5ICs5MywxMSBAQCB2b2lkIFdlYldoZWVsRXZlbnQ6OmVuY29kZShJUEM6OkFyZ3Vt
ZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IG1fd2hlZWxUaWNrczsK
ICAgICBlbmNvZGVyIDw8IG1fZ3JhbnVsYXJpdHk7CiAgICAgZW5jb2RlciA8PCBtX2RpcmVjdGlv
bkludmVydGVkRnJvbURldmljZTsKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShD
T0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGVuY29kZXIgPDwgbV9waGFzZTsKICAgICBlbmNv
ZGVyIDw8IG1fbW9tZW50dW1QaGFzZTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IGVuY29kZXIgPDwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwogICAgIGVuY29kZXIgPDwg
bV9zY3JvbGxDb3VudDsKICAgICBlbmNvZGVyIDw8IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0Rl
bHRhOwpAQCAtMTA0LDExICsxMjAsMTMgQEAgYm9vbCBXZWJXaGVlbEV2ZW50OjpkZWNvZGUoSVBD
OjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYldoZWVsRXZlbnQmIHQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV9kaXJlY3Rpb25JbnZlcnRl
ZEZyb21EZXZpY2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHQubV9waGFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHQubV9tb21lbnR1bVBoYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1faGFz
UHJlY2lzZVNjcm9sbGluZ0RlbHRhcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHQubV9zY3JvbGxDb3VudCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcAppbmRleCBiMzY3NjEyLi41
Y2FmM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldo
ZWVsRXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2Vi
V2hlZWxFdmVudEd0ay5jcHAKQEAgLTM3LDggKzM3LDE0IEBAIE5hdGl2ZVdlYldoZWVsRXZlbnQ6
Ok5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogfQogCitOYXRpdmVXZWJX
aGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxF
dmVudDo6UGhhc2UgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCisg
ICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChl
dmVudCwgcGhhc2UsIG1vbWVudHVtUGhhc2UpKQorICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZl
bnRfY29weShldmVudCkpCit7Cit9CisKIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldo
ZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCi0gICAgOiBXZWJXaGVl
bEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVF
dmVudCgpKSkKKyAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJX
aGVlbEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCksIGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVu
dHVtUGhhc2UoKSkpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVudF9jb3B5KGV2ZW50Lm5h
dGl2ZUV2ZW50KCkpKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9XZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVu
dEZhY3RvcnkuY3BwCmluZGV4IDJkNjYzOTMuLjQyM2M0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTE0Myw2ICsxNDMsMjcgQEAgV2Vi
TW91c2VFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2Rr
RXZlbnQqIGV2ZW50LCBpbnQgY3UKIAogV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNy
ZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogeworI2lmbmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQorICAgIFdlYldo
ZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gZ2RrX2V2ZW50X2lzX3Njcm9sbF9zdG9wX2V2ZW50KGV2
ZW50KSA/CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUVuZGVkIDoKKyAgICAg
ICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgZG91Ymxl
IGRlbHRhWCwgZGVsdGFZOworICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhldmVudCwg
JmRlbHRhWCwgJmRlbHRhWSk7CisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBldmVu
dC0+c2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09USCAmJiAhZGVsdGFYICYmICFk
ZWx0YVkgPworICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCA6CisgICAg
ICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNlbHNlCisg
ICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhh
c2VDaGFuZ2VkOworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisKKyAgICByZXR1cm4gY3Jl
YXRlV2ViV2hlZWxFdmVudChldmVudCwgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFz
ZU5vbmUpOworfQorCitXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hl
ZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNl
LCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKQorewogICAgIGRvdWJsZSB4LCB5
LCB4Um9vdCwgeVJvb3Q7CiAgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7
CiAgICAgZ2RrX2V2ZW50X2dldF9yb290X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3QpOwpA
QCAtMTc5LDEzICsyMDAsMTUgQEAgV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAgIEZsb2F0U2l6ZSBkZWx0
YSh3aGVlbFRpY2tzLndpZHRoKCkgKiBzdGVwLCB3aGVlbFRpY2tzLmhlaWdodCgpICogc3RlcCk7
CiAKICAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgSW50UG9pbnQoeCwgeSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
SW50UG9pbnQoeFJvb3QsIHlSb290KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICB3aGVlbFRpY2tzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKTsKKyAgICAgICAgSW50UG9pbnQo
eCwgeSksCisgICAgICAgIEludFBvaW50KHhSb290LCB5Um9vdCksCisgICAgICAgIGRlbHRhLAor
ICAgICAgICB3aGVlbFRpY2tzLAorICAgICAgICBwaGFzZSwKKyAgICAgICAgbW9tZW50dW1QaGFz
ZSwKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCisgICAg
ICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KSwKKyAgICAgICAgZ2RrX2V2ZW50X2dldF90aW1l
KGV2ZW50KSk7CiB9CiAKIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVX
ZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgY29uc3QgV2ViQ29yZTo6Q29t
cG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMsIFZlY3RvcjxTdHJpbmc+JiYgY29t
bWFuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFj
dG9yeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaAppbmRl
eCAyOGI2OTUzLi44ZmU3Y2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L1dlYkV2ZW50RmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KGNvbnN0
IEdka0V2ZW50KiwgaW50KTsKICAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVl
bEV2ZW50KGNvbnN0IEdka0V2ZW50Kik7CisgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRl
V2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCosIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJX
aGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKTsKICAgICBzdGF0aWMgV2ViS2V5Ym9hcmRF
dmVudCBjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgY29uc3QgV2ViQ29y
ZTo6Q29tcG9zaXRpb25SZXN1bHRzJiwgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcyk7CiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBzdGF0aWMgV2ViVG91Y2hFdmVudCBjcmVhdGVXZWJU
b3VjaEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQb2ludD4m
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGUxNDI5
NjkuLmM3YzUyZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CkBAIC0xODM2LDcgKzE4MzYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVu
dChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKIAogICAgIGlmICghbV9jdXJyZW50
bHlQcm9jZXNzZWRXaGVlbEV2ZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgbV93aGVlbEV2ZW50
UXVldWUuYXBwZW5kKGV2ZW50KTsKLSAgICAgICAgaWYgKG1fd2hlZWxFdmVudFF1ZXVlLnNpemUo
KSA8IHdoZWVsRXZlbnRRdWV1ZVNpemVUaHJlc2hvbGQpCisgICAgICAgIGlmICghc2hvdWxkUHJv
Y2Vzc1doZWVsRXZlbnROb3coZXZlbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAv
LyBUaGUgcXVldWUgaGFzIHRvbyBtYW55IHdoZWVsIGV2ZW50cywgc28gcHVzaCBhIG5ldyBldmVu
dC4KICAgICB9CkBAIC0xODc3LDYgKzE4NzcsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRX
aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQogICAgIG1fcHJvY2Vzcy0+aXNS
ZXNwb25zaXZlKG51bGxwdHIpOwogfQogCitib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxkUHJvY2Vz
c1doZWVsRXZlbnROb3coY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpIGNvbnN0Cit7CisjaWYg
UExBVEZPUk0oR1RLKQorICAgIC8vIERvbid0IHF1ZXVlIGV2ZW50cyByZXByZXNlbnRpbmcgYSBu
b24tdHJpdmlhbCBzY3JvbGxpbmcgcGhhc2UgdG8KKyAgICAvLyBhdm9pZCBoYXZpbmcgdGhlbSB0
cmFwcGVkIGluIHRoZSBxdWV1ZSwgcG90ZW50aWFsbHkgcHJldmVudGluZyBhCisgICAgLy8gc2Ny
b2xsaW5nIHNlc3Npb24gdG8gYmVnaW5uaW5nIG9yIGVuZCBjb3JyZWN0bHkuCisgICAgLy8gVGhp
cyBpcyBvbmx5IG5lZWRlZCBieSBwbGF0Zm9ybXMgd2hvc2UgV2ViV2hlZWxFdmVudCBoYXMgdGhp
cyBwaGFzZQorICAgIC8vIGluZm9ybWF0aW9uIChDb2NvYSBhbmQgR1RLKykgYnV0IENvY29hIHdh
cyBmaW5lIHdpdGhvdXQgaXQuCisgICAgaWYgKGV2ZW50LnBoYXNlKCkgPT0gV2ViV2hlZWxFdmVu
dDo6UGhhc2U6OlBoYXNlTm9uZQorICAgICAgICB8fCBldmVudC5waGFzZSgpID09IFdlYldoZWVs
RXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQKKyAgICAgICAgfHwgZXZlbnQubW9tZW50dW1QaGFz
ZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUKKyAgICAgICAgfHwgZXZlbnQu
bW9tZW50dW1QaGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQpCisg
ICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworI2Vu
ZGlmCisgICAgaWYgKG1fd2hlZWxFdmVudFF1ZXVlLnNpemUoKSA+PSB3aGVlbEV2ZW50UXVldWVT
aXplVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIGlmICghaXNWYWxpZCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDg3NzI2ZTIuLjQyMmQwNzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTE0NjMsNiArMTQ2Myw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NOZXh0UXVldWVkV2hlZWxFdmVudCgpOwogICAg
IHZvaWQgc2VuZFdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOworICAgIGJvb2wgc2hv
dWxkUHJvY2Vzc1doZWVsRXZlbnROb3coY29uc3QgV2ViV2hlZWxFdmVudCYpIGNvbnN0OwogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2b2lkIHVwZGF0ZVRvdWNoRXZlbnRUcmFja2lu
Zyhjb25zdCBXZWJUb3VjaEV2ZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCmluZGV4IDdlMTU3N2MuLjkzNjk5OGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3Bw
CkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBHZXN0dXJlQ29udHJvbGxl
cjo6R2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5JiBwYWdlKQogICAgIDogbV9kcmFnR2Vz
dHVyZShwYWdlKQorICAgICwgbV9zd2lwZUdlc3R1cmUocGFnZSkKICAgICAsIG1fem9vbUdlc3R1
cmUocGFnZSkKIHsKIH0KQEAgLTQ5LDEzICs1MCwxNCBAQCBib29sIEdlc3R1cmVDb250cm9sbGVy
OjpoYW5kbGVFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiB7CiAgICAgYm9vbCB3YXNQcm9j
ZXNzaW5nR2VzdHVyZXMgPSBpc1Byb2Nlc3NpbmdHZXN0dXJlcygpOwogICAgIG1fZHJhZ0dlc3R1
cmUuaGFuZGxlRXZlbnQoZXZlbnQpOworICAgIG1fc3dpcGVHZXN0dXJlLmhhbmRsZUV2ZW50KGV2
ZW50KTsKICAgICBtX3pvb21HZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4g
ZXZlbnQtPnR5cGUgPT0gR0RLX1RPVUNIX0VORCA/IHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA6IGlz
UHJvY2Vzc2luZ0dlc3R1cmVzKCk7CiB9CiAKIGJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmlzUHJv
Y2Vzc2luZ0dlc3R1cmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0Fj
dGl2ZSgpIHx8IG1fem9vbUdlc3R1cmUuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9kcmFnR2Vz
dHVyZS5pc0FjdGl2ZSgpIHx8IG1fc3dpcGVHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2Vz
dHVyZS5pc0FjdGl2ZSgpOwogfQogCiBHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6R2VzdHVy
ZShHdGtHZXN0dXJlKiBnZXN0dXJlLCBXZWJQYWdlUHJveHkmIHBhZ2UpCkBAIC03NSwyMCArNzcs
NDAgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6aGFuZGxlRXZlbnQoY29uc3Qg
R2RrRXZlbnQqIGV2ZW50KQogICAgIGd0a19ldmVudF9jb250cm9sbGVyX2hhbmRsZV9ldmVudChH
VEtfRVZFTlRfQ09OVFJPTExFUihtX2dlc3R1cmUuZ2V0KCkpLCBldmVudCk7CiB9CiAKLXZvaWQg
R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50
KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5KQorc3RhdGljIEdVbmlxdWVQdHI8R2RrRXZlbnQ+
IGNyZWF0ZVNjcm9sbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJs
ZSB5LCBkb3VibGUgZGVsdGFYLCBkb3VibGUgZGVsdGFZLCBnYm9vbGVhbiBpc1N0b3ApCiB7Ci0g
ICAgQVNTRVJUKG1faW5EcmFnKTsKICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVu
dChnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpKTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnRp
bWUgPSBldmVudC0+dG91Y2gudGltZTsKLSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnggPSBtX3N0
YXJ0LngoKTsKLSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSBtX3N0YXJ0LnkoKTsKKyAgICBz
Y3JvbGxFdmVudC0+c2Nyb2xsLnggPSB4OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IHk7
CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54X3Jvb3QgPSBldmVudC0+dG91Y2gueF9yb290Owog
ICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKICAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOwotICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9s
bGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKLSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRh
X3kgPSAobV9vZmZzZXQueSgpIC0geSkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7
CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gZGVsdGFYOworICAgIHNjcm9sbEV2
ZW50LT5zY3JvbGwuZGVsdGFfeSA9IGRlbHRhWTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0
YXRlID0gZXZlbnQtPnRvdWNoLnN0YXRlOwotICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5h
dGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCkpKTsKKyNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCAyMCwgMCkKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBpc1N0b3A7
CisjZW5kaWYKKyAgICByZXR1cm4gc2Nyb2xsRXZlbnQ7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjpzdGFydERyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQorewor
ICAgIEFTU0VSVCghbV9pbkRyYWcpOworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2
ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQoZXZlbnQsIG1fc3RhcnQueCgpLCBtX3N0YXJ0LnkoKSwg
MCwgMCwgRkFMU0UpOworICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVs
RXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2Fu
LCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNv
bnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwg
ZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIEFTU0VSVChtX2luRHJhZyk7CisgICAgR1VuaXF1
ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVudCwKKyAg
ICAgICAgbV9zdGFydC54KCksIG1fc3RhcnQueSgpLAorICAgICAgICAobV9vZmZzZXQueCgpIC0g
eCkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksCisgICAgICAgIChtX29mZnNldC55
KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwKKyAgICAgICAgRkFMU0Up
OworICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xs
RXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQsIFdlYldoZWVs
RXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUpKTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OmhhbmRsZVRhcChjb25zdCBHZGtFdmVudCogZXZlbnQpCkBAIC0xMjgsNiAr
MTUwLDcgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKERyYWdH
ZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsIGQKICAgICB1bnNpZ25lZCBkZWxheTsKICAg
ICBnX29iamVjdF9nZXQoZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25n
LXByZXNzLXRpbWUiLCAmZGVsYXksIG51bGxwdHIpOwogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQ
cmVzc1RpbWVvdXQuc3RhcnRPbmVTaG90KGRlbGF5IC8gMTAwMC4wKTsKKyAgICBkcmFnR2VzdHVy
ZS0+c3RhcnREcmFnKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNl
KSk7CiB9CiAKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJh
Z0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdl
c3R1cmUpCkBAIC0xNDksMTEgKzE3MiwxNCBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFn
R2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsCiB2b2lk
IEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6ZW5kKERyYWdHZXN0dXJlKiBkcmFnR2Vz
dHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UsIEd0a0dlc3R1cmUqIGdlc3R1cmUpCiB7
CiAgICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5zdG9wKCk7CisgICAgaWYgKCFn
dGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdlc3R1cmUsIHNlcXVlbmNlKSkgeworICAgICAg
ICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklF
RCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRy
YWcpIHsKICAgICAgICAgZHJhZ0dlc3R1cmUtPmhhbmRsZVRhcChndGtfZ2VzdHVyZV9nZXRfbGFz
dF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOwogICAgICAgICBndGtfZ2VzdHVyZV9zZXRfc3Rh
dGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7Ci0gICAgfSBlbHNlIGlmICgh
Z3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpCi0gICAgICAg
IGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVE
KTsKKyAgICB9CiB9CiAKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpsb25n
UHJlc3NGaXJlZCgpCkBAIC0xNzIsNiArMTk4LDMwIEBAIEdlc3R1cmVDb250cm9sbGVyOjpEcmFn
R2VzdHVyZTo6RHJhZ0dlc3R1cmUoV2ViUGFnZVByb3h5JiBwYWdlKQogICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJlbmQiLCBHX0NBTExCQUNLKGVuZCksIHRo
aXMpOwogfQogCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0TW9t
ZW50dW1TY3JvbGwoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgdmVsb2NpdHlYLCBkb3Vi
bGUgdmVsb2NpdHlZKQoreworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0g
Y3JlYXRlU2Nyb2xsRXZlbnQoZXZlbnQsIGV2ZW50LT50b3VjaC54LCBldmVudC0+dG91Y2gueSwg
dmVsb2NpdHlYLCB2ZWxvY2l0eVksIFRSVUUpOworICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50
KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBo
YXNlOjpQaGFzZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKSk7Cit9CisK
K3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3dpcGUoU3dpcGVHZXN0dXJl
KiBzd2lwZUdlc3R1cmUsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dl
c3R1cmUqIGdlc3R1cmUpCit7CisgICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtf
Z2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdl
c3R1cmUpKTsKKyAgICBpZiAoIWd0a19nZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwg
c2VxdWVuY2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVu
Y2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVuY2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsK
KworICAgIHN3aXBlR2VzdHVyZS0+c3RhcnRNb21lbnR1bVNjcm9sbChndGtfZ2VzdHVyZV9nZXRf
bGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSksIHZlbG9jaXR5WCwgdmVsb2NpdHlZKTsKK30K
KworR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6U3dpcGVHZXN0dXJlKFdlYlBhZ2VQ
cm94eSYgcGFnZSkKKyAgICA6IEdlc3R1cmUoZ3RrX2dlc3R1cmVfc3dpcGVfbmV3KHBhZ2Uudmll
d1dpZGdldCgpKSwgcGFnZSkKK3sKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29u
bHkoR1RLX0dFU1RVUkVfU0lOR0xFKG1fZ2VzdHVyZS5nZXQoKSksIFRSVUUpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJzd2lwZSIsIEdfQ0FMTEJBQ0so
c3dpcGUpLCB0aGlzKTsKK30KKwogSW50UG9pbnQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0
dXJlOjpjZW50ZXIoKSBjb25zdAogewogICAgIGRvdWJsZSB4LCB5OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCmluZGV4IDg2NzkyZGYuLmU5
NjAzMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmgKQEAgLTY3LDYgKzY3LDggQEAgcHJpdmF0ZToKICAgICAgICAgRHJhZ0dlc3R1cmUo
V2ViUGFnZVByb3h5Jik7CiAKICAgICBwcml2YXRlOgorICAgICAgICAvLyBOb3RpZnkgdGhhdCBh
IGRyYWcgc3RhcnRlZCwgYWxsb3dpbmcgdG8gc3RvcCBraW5ldGljIGRlY2VsZXJhdGlvbi4KKyAg
ICAgICAgdm9pZCBzdGFydERyYWcoY29uc3QgR2RrRXZlbnQqKTsKICAgICAgICAgdm9pZCBoYW5k
bGVEcmFnKGNvbnN0IEdka0V2ZW50KiwgZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICAgICAgdm9p
ZCBoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqKTsKICAgICAgICAgdm9pZCBsb25nUHJlc3NGaXJl
ZCgpOwpAQCAtODIsNiArODQsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2luRHJhZzsK
ICAgICB9OwogCisgICAgY2xhc3MgU3dpcGVHZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgU3dpcGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYpOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzdGFydE1vbWVudHVtU2Nyb2xsKGNvbnN0IEdka0V2
ZW50KiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSk7CisKKyAgICAgICAgc3Rh
dGljIHZvaWQgc3dpcGUoU3dpcGVHZXN0dXJlKiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZl
bG9jaXR5WSwgR3RrR2VzdHVyZSopOworICAgIH07CisKICAgICBjbGFzcyBab29tR2VzdHVyZSBm
aW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFpvb21HZXN0dXJl
KFdlYlBhZ2VQcm94eSYpOwpAQCAtMTAxLDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAog
ICAgIERyYWdHZXN0dXJlIG1fZHJhZ0dlc3R1cmU7CisgICAgU3dpcGVHZXN0dXJlIG1fc3dpcGVH
ZXN0dXJlOwogICAgIFpvb21HZXN0dXJlIG1fem9vbUdlc3R1cmU7CiB9OwogCg==
</data>
<flag name="review"
          id="305941"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="305945"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282136</attachid>
            <date>2016-06-27 09:10:24 -0700</date>
            <delta_ts>2016-06-27 09:18:46 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>inertial-scrolling-diff</filename>
            <type>text/plain</type>
            <size>41264</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNzRlNTE5NS4uMmNmMDhhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTc3LDYgKzc3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgbG9hZGVyL3NvdXAvU3VicmVzb3VyY2VMb2FkZXJTb3VwLmNwcAogCiAgICAg
cGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktp
bmV0aWMuY3BwCiAKICAgICBwbGF0Zm9ybS9hdWRpby9nbGliL0F1ZGlvQnVzR0xpYi5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCAwNzEz
NTVjLi5iNmY4NGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNj
cm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAogICAgIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGVudW0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2UgOiB1aW50OF90IHsKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VO
b25lICAgICAgICA9IDAsCiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4gICAg
ICAgPSAxIDw8IDAsCkBAIC0xNjIsNiArMTYyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBp
c0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1RyYW5zaXRp
b25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
ICAgIGJvb2wgdXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIGJvb2wgaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisgICAgICAg
IGJvb2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OworICAgICAgICBG
bG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25zdDsKICNlbHNlCiAgICAgICAgIGJvb2wgdXNl
TGF0Y2hlZEV2ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKQEAg
LTE4Nyw2ICsxOTIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVuc2lnbmVkIG1f
c2Nyb2xsQ291bnQ7CiAgICAgICAgIGZsb2F0IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
WDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZOworI2VsaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtX3BoYXNlIHsg
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlIG1fbW9tZW50dW1QaGFzZSB7IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSB9Owog
I2VuZGlmCiAgICAgfTsKIApAQCAtMjEyLDcgKzIyMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
Tm9uZSAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsK
ICAgICB9CisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAg
ICAgaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc0VuZE9mTm9uTW9tZW50dW1TY3Jv
bGwoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VFbmRlZCAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VOb25lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRp
b25LaW5ldGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA3MTMz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYy5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgi
CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKKy8qCisgKiBQZXJBeGlzRGF0YSBpcyBh
IHBvcnQgb2YgR3RrS2luZXRpY1Njcm9sbGluZyBhcyBvZiBHVEsrIDMuMjAsCisgKiBtaW1pY2tp
bmcgaXRzIEFQSSBhbmQgaXRzIGJlaGF2aW9yLgorICoKKyAqIEFsbCBvdXIgY3VydmVzIGFyZSBz
ZWNvbmQgZGVncmVlIGxpbmVhciBkaWZmZXJlbnRpYWwgZXF1YXRpb25zLCBhbmQKKyAqIHNvIHRo
ZXkgY2FuIGFsd2F5cyBiZSB3cml0dGVuIGFzIGxpbmVhciBjb21iaW5hdGlvbnMgb2YgMiBiYXNl
CisgKiBzb2x1dGlvbnMuIGNvZWYxIGFuZCBjb2VmMiBhcmUgdGhlIGNvZWZmaWNpZW50cyB0byB0
aGVzZSB0d28gYmFzZQorICogc29sdXRpb25zLCBhbmQgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGlu
aXRpYWwgcG9zaXRpb24gYW5kIHZlbG9jaXR5LgorICoKKyAqIEluIHRoZSBjYXNlIG9mIHNpbXBs
ZSBkZWNlbGVyYXRpb24sIHRoZSBkaWZmZXJlbnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHkn
JyA9IC1teScKKyAqCisgKiBXaXRoIG0gdGhlIHJlc2lzdGVuY2UgZmFjdG9yLiBGb3IgdGhpcyB3
ZSB1c2UgdGhlIGZvbGxvd2luZyAyCisgKiBiYXNlIHNvbHV0aW9uczoKKyAqCisgKiAgIGYxKHgp
ID0gMQorICogICBmMih4KSA9IGV4cCgtbXgpCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygb3ZlcnNo
b290LCB0aGUgZGlmZmVyZW50aWFsIGVxdWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknIC0g
a3kKKyAqCisgKiBXaXRoIG0gdGhlIHJlc2lzdGFuY2UsIGFuZCBrIHRoZSBzcHJpbmcgc3RpZmZu
ZXNzIGNvbnN0YW50LiBXZSBsZXQKKyAqIGsgPSBtXjIgLyA0LCBzbyB0aGF0IHRoZSBzeXN0ZW0g
aXMgY3JpdGljYWxseSBkYW1wZWQgKGllLCByZXR1cm5zIHRvIGl0cworICogZXF1aWxpYnJpdW0g
cG9zaXRpb24gYXMgcXVpY2tseSBhcyBwb3NzaWJsZSwgd2l0aG91dCBvc2NpbGxhdGluZyksIGFu
ZCBvZmZzZXQKKyAqIHRoZSB3aG9sZSB0aGluZywgc3VjaCB0aGF0IHRoZSBlcXVpbGlicml1bSBw
b3NpdGlvbiBpcyBhdCAwLiBUaGlzIGdpdmVzIHRoZQorICogYmFzZSBzb2x1dGlvbnMKKyAqCisg
KiAgIGYxKHgpID0gZXhwKC1teCAvIDIpCisgKiAgIGYyKHgpID0gdCBleHAoLW14IC8gMikKKyAq
LworCitzdGF0aWMgY29uc3QgZG91YmxlIGRlY2VsRnJpY3Rpb24gPSA0Oworc3RhdGljIGNvbnN0
IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRpbWVy
SW50ZXJ2YWwgPSAuMDAxOworCitzdGF0aWMgaW5saW5lIGRvdWJsZSBjbGFtcChkb3VibGUgeCwg
ZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCit7CisgICAgcmV0dXJuICh4ID4gaGlnaCkgPyBoaWdo
IDogKCh4IDwgbG93KSA/IGxvdyA6IHgpOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nj
cm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShkb3VibGUgbG93
ZXIsIGRvdWJsZSB1cHBlciwgZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91YmxlIGluaXRpYWxW
ZWxvY2l0eSkKKyAgICA6IG1fbG93ZXIobG93ZXIpCisgICAgLCBtX3VwcGVyKHVwcGVyKQorICAg
ICwgbV9jb2VmMShpbml0aWFsVmVsb2NpdHkgLyBkZWNlbEZyaWN0aW9uICsgaW5pdGlhbFBvc2l0
aW9uKQorICAgICwgbV9jb2VmMigtaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbikKKyAg
ICAsIG1fcG9zaXRpb24oY2xhbXAoaW5pdGlhbFBvc2l0aW9uLCBsb3dlciwgdXBwZXIpKQorICAg
ICwgbV92ZWxvY2l0eShpbml0aWFsUG9zaXRpb24gPCBsb3dlciB8fCBpbml0aWFsUG9zaXRpb24g
PiB1cHBlciA/IDAgOiBpbml0aWFsVmVsb2NpdHkpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoZG91YmxlIHRpbWVEZWx0YSkK
K3sKKyAgICBtX2VsYXBzZWRUaW1lICs9IHRpbWVEZWx0YTsKKworICAgIGRvdWJsZSBleHBvbmVu
dGlhbFBhcnQgPSBleHAoLWRlY2VsRnJpY3Rpb24gKiBtX2VsYXBzZWRUaW1lKTsKKyAgICBtX3Bv
c2l0aW9uID0gbV9jb2VmMSArIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisgICAgbV92ZWxv
Y2l0eSA9IC1kZWNlbEZyaWN0aW9uICogbV9jb2VmMiAqIGV4cG9uZW50aWFsUGFydDsKKworICAg
IGlmIChtX3Bvc2l0aW9uIDwgbV9sb3dlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV9sb3dl
cjsKKyAgICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChtX3Bvc2l0aW9uID4g
bV91cHBlcikgeworICAgICAgICBtX3Bvc2l0aW9uID0gbV91cHBlcjsKKyAgICAgICAgbV92ZWxv
Y2l0eSA9IDA7CisgICAgfSBlbHNlIGlmIChmYWJzKG1fdmVsb2NpdHkpIDwgMSkgeworICAgICAg
ICBtX3Bvc2l0aW9uID0gcm91bmQobV9wb3NpdGlvbik7CisgICAgICAgIG1fdmVsb2NpdHkgPSAw
OworICAgIH0KKworICAgIHJldHVybiBtX3ZlbG9jaXR5OworfQorCitTY3JvbGxBbmltYXRpb25L
aW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRpb25D
aGFuZ2VkRnVuY3Rpb24pCisgICAgOiBTY3JvbGxBbmltYXRpb24oc2Nyb2xsYWJsZUFyZWEpCisg
ICAgLCBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKFdURk1vdmUobm90aWZ5UG9zaXRp
b25DaGFuZ2VkRnVuY3Rpb24pKQorICAgICwgbV9hbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9s
bEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQpCit7Cit9CisKK1Njcm9sbEFu
aW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGljKCkKK3sKK30KKworYm9vbCBT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCwgZmxvYXQpCit7CisgICAgLy8gVGhpcyBtZXRob2QgaXNuJ3Qg
bmVlZGVkIGFuZCBzaG91bGRuJ3QgZG8gYW55dGhpbmcgYXMgJ3Njcm9sbCcgaXNuJ3QKKyAgICAv
LyBob3cgdGhpcyBhbmltYXRpb24gbmVlZHMgdG8gYmUgdXNlZCwgdXNlICdzdGFydCcgaW5zdGVh
ZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpz
dG9wKCkKK3sKKyAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRpb25LaW5ldGljOjpzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pCit7CisgICAgc3RvcCgpOworICAgIG1fcG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0
aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5KQoreworICAgIHN0b3AoKTsK
KyAgICBtX3Bvc2l0aW9uID0gaW5pdGlhbFBvc2l0aW9uOworCisgICAgaWYgKHZlbG9jaXR5Lmlz
T3JpZ2luKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faG9yaXpvbnRhbERhdGEgPSBQZXJB
eGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisgICAg
ICAgIG1fcG9zaXRpb24ueCgpLCB2ZWxvY2l0eS54KCkpOworICAgIG1fdmVydGljYWxEYXRhID0g
UGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCks
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpLAor
ICAgICAgICBtX3Bvc2l0aW9uLnkoKSwgdmVsb2NpdHkueSgpKTsKKworICAgIGFuaW1hdGlvblRp
bWVyRmlyZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25U
aW1lckZpcmVkKCkKK3sKKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKKyAgICBkb3VibGUgZGVsdGFUb05leHRGcmFtZSA9IGNlaWwoKGN1cnJl
bnRUaW1lIC0gbV9zdGFydFRpbWUpICogZnJhbWVSYXRlKSAvIGZyYW1lUmF0ZSAtIChjdXJyZW50
VGltZSAtIG1fc3RhcnRUaW1lKTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRpb24gPSBmYWxz
ZTsKKyAgICBpZiAobV9ob3Jpem9udGFsRGF0YS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJh
bWUpKQorICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9IHRydWU7CisgICAgaWYgKG1fdmVydGlj
YWxEYXRhLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05leHRGcmFtZSkpCisgICAgICAgIGNvbnRpbnVl
QW5pbWF0aW9uID0gdHJ1ZTsKKworICAgIGlmIChjb250aW51ZUFuaW1hdGlvbikKKyAgICAgICAg
bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qoc3RkOjptYXgobWluaW11bVRpbWVySW50ZXJ2
YWwsIGRlbHRhVG9OZXh0RnJhbWUpKTsKKworICAgIG1fcG9zaXRpb24gPSBGbG9hdFBvaW50KG1f
aG9yaXpvbnRhbERhdGEucG9zaXRpb24oKSwgbV92ZXJ0aWNhbERhdGEucG9zaXRpb24oKSk7CisK
KyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKEZsb2F0UG9pbnQobV9wb3NpdGlv
bikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWNiNGZkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAtMCwwICsxLDg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xs
QW5pbWF0aW9uS2luZXRpY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaAorCisj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgorI2lu
Y2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYWJs
ZUFyZWE7CisKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgZmluYWw6IHB1YmxpYyBTY3Jv
bGxBbmltYXRpb24geworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAgIHB1
YmxpYzoKKyAgICAgICAgUGVyQXhpc0RhdGEoKSA9IGRlbGV0ZTsKKyAgICAgICAgUGVyQXhpc0Rh
dGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRv
dWJsZSBpbml0aWFsVmVsb2NpdHkpOworCisgICAgICAgIGRvdWJsZSBwb3NpdGlvbigpIHsgcmV0
dXJuIG1fcG9zaXRpb247IH0KKworICAgICAgICBib29sIGFuaW1hdGVTY3JvbGwoZG91YmxlIHRp
bWVEZWx0YSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBkb3VibGUgbV9sb3dlciB7IDAgfTsK
KyAgICAgICAgZG91YmxlIG1fdXBwZXIgeyAwIH07CisKKyAgICAgICAgZG91YmxlIG1fY29lZjEg
eyAwIH07CisgICAgICAgIGRvdWJsZSBtX2NvZWYyIHsgMCB9OworCisgICAgICAgIGRvdWJsZSBt
X2VsYXBzZWRUaW1lIHsgMCB9OworICAgICAgICBkb3VibGUgbV9wb3NpdGlvbiB7IDAgfTsKKyAg
ICAgICAgZG91YmxlIG1fdmVsb2NpdHkgeyAwIH07CisgICAgfTsKKworcHVibGljOgorICAgIFNj
cm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
RmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbik7CisgICAgdmly
dHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xs
YmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0
aXBsaWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVw
ZGF0ZVZpc2libGVMZW5ndGhzKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRDdXJyZW50UG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgc3RhcnQoY29uc3Qg
RmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7CisKKyAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5j
dGlvbjsKKworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBQZXJBeGlzRGF0YSBtX2hv
cml6b250YWxEYXRhIHsgUGVyQXhpc0RhdGEoMCwgMCwgMCwgMCkgfTsKKyAgICBQZXJBeGlzRGF0
YSBtX3ZlcnRpY2FsRGF0YSB7IFBlckF4aXNEYXRhKDAsIDAsIDAsIDApIH07CisKKyAgICBkb3Vi
bGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgK
aW5kZXggMzJhNGE3ODcuLjhhNGEwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmgKQEAgLTEyMSw2ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3ggKiBtX3ggKyBtX3kgKiBtX3k7CiAgICAgfQogCisgICAgYm9vbCBpc09yaWdp
bigpIGNvbnN0IHsgcmV0dXJuICFtX3ggJiYgIW1feTsgfQorCiAgICAgV0VCQ09SRV9FWFBPUlQg
RmxvYXRQb2ludCBjb25zdHJhaW5lZEJldHdlZW4oY29uc3QgRmxvYXRQb2ludCYgbWluLCBjb25z
dCBGbG9hdFBvaW50JiBtYXgpIGNvbnN0OwogCiAgICAgRmxvYXRQb2ludCBzaHJ1bmtUbyhjb25z
dCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggMTA0NWM0NC4uY2M0ZTM5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxF
dmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hl
ZWxFdmVudEd0ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTgzLDYg
Kzg0LDIyIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50
U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7CiAgICAgbV93aGVl
bFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgbV9waGFzZSA9IGV2ZW50LT5pc19zdG9wID8K
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCA6CisgICAgICAgIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgbV9waGFzZSA9IGV2ZW50LT5kaXJl
Y3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIW1fZGVsdGFYICYmICFtX2RlbHRhWSA/Cisg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNlbHNlCisgICAgbV9waGFzZSA9IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgor
CisgICAgbV9tb21lbnR1bVBoYXNlID0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOworCiAg
ICAgbV9wb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0
aWNfY2FzdDxpbnQ+KGV2ZW50LT55KSk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50
KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQt
Pnlfcm9vdCkpOwogICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsK
QEAgLTkzLDQgKzExMCwxMCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVu
dChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQgUGxh
dGZvcm1XaGVlbEV2ZW50Ojpzd2lwZVZlbG9jaXR5KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3dp
cGluZyB2ZWxvY2l0eSBpcyBzdG9yZWQgaW4gdGhlIGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVjbGFy
aW5nIGl0LgorICAgIHJldHVybiBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgPyBG
bG9hdFBvaW50KG1fd2hlZWxUaWNrc1gsIG1fd2hlZWxUaWNrc1kpIDogRmxvYXRQb2ludCgpOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5p
bWF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9y
R3RrLmNwcAppbmRleCAxM2U2MzU0Li43OWZmZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKQEAgLTQwLDYgKzQwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZG91YmxlIG92ZXJmbG93U2Nyb2xsYmFy
c0FuaW1hdGlvbkR1cmF0aW9uID0gMTsKIHN0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3Jv
bGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5ID0gMjsKK3N0YXRpYyBjb25zdCBkb3VibGUgc2Nyb2xs
Q2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kcyA9IDE1MDsKIAogc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSkKIHsKQEAgLTUwLDYgKzUxLDE0IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjpTY3Jv
bGxBbmltYXRvckd0ayhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3Jv
bGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1h
dGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmlt
YXRpb25UaW1lckZpcmVkKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91
bmlxdWU8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYz4obV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZs
b2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBv
c2l0aW9uKSk7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgICAgIGlmIChtX3Nt
b290aEFuaW1hdGlvbikKKyAgICAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50
UG9zaXRpb24ocG9zaXRpb24pOworI2VuZGlmCisgICAgfSk7CisKICNpZiBFTkFCTEUoU01PT1RI
X1NDUk9MTElORykKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVk
KCkpCiAgICAgICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwpAQCAtNjMsNDgg
KzcyLDExMSBAQCBTY3JvbGxBbmltYXRvckd0azo6flNjcm9sbEFuaW1hdG9yR3RrKCkKICNpZiBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNt
b290aFNjcm9sbGluZ0FuaW1hdGlvbigpCiB7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQorICAgIGlm
IChtX3Ntb290aEFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hbmltYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJl
YSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKLSAg
ICAgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAg
ICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKLSAgICAgICAgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyAgICBtX3Ntb290aEFuaW1hdGlvbiA9IHN0ZDo6
bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBtX2N1
cnJlbnRQb3NpdGlvbiwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICB1
cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50KHBvc2l0aW9uKSk7CiAgICAgfSk7CiB9CisjZW5kaWYK
IAogYm9vbCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxv
YXQgbXVsdGlwbGllcikKIHsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAo
IW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkgfHwgZ3JhbnVsYXJpdHkg
PT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwpCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAg
ICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKTsKLSAgICByZXR1cm4gbV9hbmltYXRp
b24tPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwor
ICAgIHJldHVybiBtX3Ntb290aEFuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZWxzZQorICAgIHJldHVybiBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Cisj
ZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50IHBv
c2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQs
IHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkpKTsKLSAgICBpZiAo
bV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9z
aXRpb24pOworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKIAotICAgIEZsb2F0U2l6ZSBkZWx0
YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247Ci0gICAgbV9jdXJyZW50UG9zaXRpb24g
PSBwb3NpdGlvbjsKLSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOworI2lmIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAg
bV9zbW9vdGhBbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisjZW5kaWYK
KworICAgIHVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQocG9zaXRpb24pKTsKIH0KIAotdm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6d2lsbEVuZExpdmVSZXNpemUoKQorRmxvYXRQb2ludCBTY3JvbGxB
bmltYXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5KCkKIHsKLSAgICBpZiAobV9hbmltYXRpb24pCi0g
ICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworICAgIGlmIChtX3Nj
cm9sbEhpc3RvcnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworCisg
ICAgZG91YmxlIGZpcnN0ID0gbV9zY3JvbGxIaXN0b3J5WzBdLnRpbWVzdGFtcCgpOworICAgIGRv
dWJsZSBsYXN0ID0gbV9zY3JvbGxIaXN0b3J5LnJiZWdpbigpLT50aW1lc3RhbXAoKTsKKworICAg
IGlmIChsYXN0ID09IGZpcnN0KQorICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworCisgICAg
RmxvYXRQb2ludCBhY2N1bURlbHRhOworICAgIGZvciAoY29uc3QgYXV0byYgc2Nyb2xsRXZlbnQg
OiBtX3Njcm9sbEhpc3RvcnkpCisgICAgICAgIGFjY3VtRGVsdGEgKz0gRmxvYXRQb2ludChzY3Jv
bGxFdmVudC5kZWx0YVgoKSwgc2Nyb2xsRXZlbnQuZGVsdGFZKCkpOworCisgICAgbV9zY3JvbGxI
aXN0b3J5LmNsZWFyKCk7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChhY2N1bURlbHRhLngoKSAq
IC0xMDAwIC8gKGxhc3QgLSBmaXJzdCksIGFjY3VtRGVsdGEueSgpICogLTEwMDAgLyAobGFzdCAt
IGZpcnN0KSk7CiB9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRp
b24tPnN0b3AoKTsKKworICAgIG1fc2Nyb2xsSGlzdG9yeS5yZW1vdmVBbGxNYXRjaGluZyhbJl0g
KFBsYXRmb3JtV2hlZWxFdmVudCYgb3RoZXJFdmVudCkgLT4gYm9vbCB7CisgICAgICAgIHJldHVy
biBldmVudC50aW1lc3RhbXAoKSAtIG90aGVyRXZlbnQudGltZXN0YW1wKCkgPiBzY3JvbGxDYXB0
dXJlVGhyZXNob2xkTWlsbGlzZWNvbmRzOworICAgIH0pOworCisgICAgaWYgKGV2ZW50LmlzRW5k
T2ZOb25Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3Rh
cnQobV9jdXJyZW50UG9zaXRpb24sIGNvbXB1dGVWZWxvY2l0eSgpKTsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50dW1T
Y3JvbGwoKSkgeworICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKyAgICAgICAgbV9r
aW5ldGljQW5pbWF0aW9uLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgZXZlbnQuc3dpcGVWZWxv
Y2l0eSgpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3Njcm9sbEhp
c3RvcnkuYXBwZW5kKGV2ZW50KTsKKworICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxl
V2hlZWxFdmVudChldmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRM
aXZlUmVzaXplKCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5n
dGhzKCk7CisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAobV9zbW9vdGhB
bmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOwogI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OnVwZGF0ZVBvc2l0aW9u
KEZsb2F0UG9pbnQmJiBwb3NpdGlvbikKK3sKKyAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlv
biAtIG1fY3VycmVudFBvc2l0aW9uOworICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92ZShw
b3NpdGlvbik7CisgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKK30KIAogdm9pZCBT
Y3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Rocygp
OworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAgaWYgKG1fYW5pbWF0aW9uKQot
ICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9z
bW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxl
TGVuZ3RocygpOwogI2VuZGlmCiAgICAgaWYgKCFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTcsOSArMTg5LDExIEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQog
CiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgIGlmIChtX2Fu
aW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7Cisg
ICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBk
YXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAppbmRleCA3MGU1YjczLi4xNTMyYTAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaApAQCAt
MzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JvbGxBbmltYXRvckd0a19oCiAjZGVmaW5lIFNjcm9s
bEFuaW1hdG9yR3RrX2gKIAorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKICNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKQEAgLTQ0LDEx
ICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JHdGsoKTsKIAog
cHJpdmF0ZToKLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBib29sIHNjcm9sbChT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0
IG11bHRpcGxpZXIpIG92ZXJyaWRlOwogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHdpbGxFbmRMaXZl
UmVzaXplKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKKworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBZGRIb3Jp
em9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwpAQCAtNjMsMTYgKzY0LDIyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0
U2l6ZSYgZGVsdGEpIG92ZXJyaWRlOwogICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0
ZVRvSGlkZGVuKGJvb2wpIG92ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVQb3NpdGlvbihGbG9h
dFBvaW50JiYpOworCiAgICAgdm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJl
ZCgpOwogICAgIHZvaWQgc2hvd092ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCBoaWRlT3Zl
cmxheVNjcm9sbGJhcnMoKTsKICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0
eSgpOwogCisgICAgRmxvYXRQb2ludCBjb21wdXRlVmVsb2NpdHkoKTsKKwogI2lmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQogICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9u
KCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1hdGlvbjsK
ICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb25LaW5ldGljPiBtX2tp
bmV0aWNBbmltYXRpb247CisgICAgVmVjdG9yPFBsYXRmb3JtV2hlZWxFdmVudD4gbV9zY3JvbGxI
aXN0b3J5OwogICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51
bGxwdHIgfTsKICAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVs
bHB0ciB9OwogICAgIGJvb2wgbV9vdmVybGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCAxNTMzMjIy
Li40NTAxZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hl
ZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50
LmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5h
dGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpOwogICAgIE5hdGl2
ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqKTsKKyAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2
ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVt
UGhhc2UpOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoY29u
c3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCosIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYgdG9XZWJDb250ZW50LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHRvRGV2aWNl
U2NyZWVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAppbmRleCA0YmZhMGQ4Li45
N2ViZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApAQCAtMTc5LDcgKzE3OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQKICAgICB9OwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBl
bnVtIFBoYXNlIHsKICAgICAgICAgUGhhc2VOb25lICAgICAgICA9IDAsCiAgICAgICAgIFBoYXNl
QmVnYW4gICAgICAgPSAxIDw8IDAsCkBAIC0xOTYsNiArMTk2LDggQEAgcHVibGljOgogICAgIFdl
YldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVs
YXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tz
LCBHcmFudWxhcml0eSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQ
aGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQz
Ml90IHNjcm9sbENvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRT
Y3JvbGxpbmdEZWx0YSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdo
ZWVsVGlja3MsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSwgTW9kaWZp
ZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CkBAIC0yMTAsNiAr
MjEyLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpIGNv
bnN0IHsgcmV0dXJuIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsgfQogICAgIHVpbnQzMl90
IHNjcm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3VudDsgfQogICAgIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkgY29uc3Qg
eyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7IH0KKyNlbGlmIFBMQVRGT1JN
KEdUSykKKyAgICBQaGFzZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNl
PihtX3BoYXNlKTsgfQorICAgIFBoYXNlIG1vbWVudHVtUGhhc2UoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxQaGFzZT4obV9tb21lbnR1bVBoYXNlKTsgfQogI2VuZGlmCiAKICAgICB2b2lk
IGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwpAQCAtMjMwLDYgKzIzNSw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAgICAgdWlu
dDMyX3QgbV9zY3JvbGxDb3VudDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV91bmFjY2VsZXJh
dGVkU2Nyb2xsaW5nRGVsdGE7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgdWludDMyX3QgbV9w
aGFzZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsgLy8gUGhhc2UKKyAgICB1aW50MzJfdCBtX21vbWVu
dHVtUGhhc2UgeyBQaGFzZTo6UGhhc2VOb25lIH07IC8vIFBoYXNlCiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKaW5kZXggZWViNzQ0
MS4uZGY2MmJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29u
dmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lv
bi5jcHAKQEAgLTEyMyw2ICsxMjMsMzMgQEAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IHBs
YXRmb3JtKGNvbnN0IFdlYk1vdXNlRXZlbnQmIHdlYkV2ZW50KQogICAgIHJldHVybiBXZWJLaXQy
UGxhdGZvcm1Nb3VzZUV2ZW50KHdlYkV2ZW50KTsKIH0KIAorI2lmIFBMQVRGT1JNKEdUSykKK2lu
bGluZSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgb3BlcmF0b3J8PShXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSYgc2VsZiwgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2Ugb3RoZXIpCit7CisgICAgcmV0dXJuIHNlbGYgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4oc2VsZiB8IG90aGVyKTsKK30KKworc3RhdGljIFdl
YkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHRvUGxhdGZvcm1XaGVlbGV2ZW50UGhhc2Uo
V2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UpCit7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2UgcmVzdWx0ID0gV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OlBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKKworICAgIGlmIChwaGFzZSAmIFdlYldoZWVsRXZl
bnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKQorICAgICAgICByZXN1bHQgfD0gV2ViQ29yZTo6UGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2U6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW47CisgICAgaWYg
KHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlU3RhdGlvbmFyeSkKKyAgICAgICAg
cmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZVN0YXRpb25hcnk7CisgICAgaWYgKHBoYXNlICYgV2ViV2hlZWxFdmVudDo6UGhh
c2U6OlBoYXNlQ2hhbmdlZCkKKyAgICAgICAgcmVzdWx0IHw9IFdlYkNvcmU6OlBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisgICAgaWYgKHBo
YXNlICYgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQpCisgICAgICAgIHJlc3VsdCB8
PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2VFbmRlZDsKKyAgICBpZiAocGhhc2UgJiBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDYW5j
ZWxsZWQpCisgICAgICAgIHJlc3VsdCB8PSBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQ7CisgICAgaWYgKHBoYXNlICYgV2Vi
V2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTWF5QmVnaW4pCisgICAgICAgIHJlc3VsdCB8PSBXZWJD
b3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlC
ZWdpbjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwogY2xhc3MgV2ViS2l0MlBs
YXRmb3JtV2hlZWxFdmVudCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQgewog
cHVibGljOgogICAgIFdlYktpdDJQbGF0Zm9ybVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVu
dCYgd2ViRXZlbnQpCkBAIC0xNTgsNiArMTg1LDkgQEAgcHVibGljOgogICAgICAgICBtX3Njcm9s
bENvdW50ID0gd2ViRXZlbnQuc2Nyb2xsQ291bnQoKTsKICAgICAgICAgbV91bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGFYID0gd2ViRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCku
d2lkdGgoKTsKICAgICAgICAgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZID0gd2ViRXZl
bnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkuaGVpZ2h0KCk7CisjZWxpZiBQTEFURk9S
TShHVEspCisgICAgICAgIG1fcGhhc2UgPSB0b1BsYXRmb3JtV2hlZWxldmVudFBoYXNlKHdlYkV2
ZW50LnBoYXNlKCkpOworICAgICAgICBtX21vbWVudHVtUGhhc2UgPSB0b1BsYXRmb3JtV2hlZWxl
dmVudFBoYXNlKHdlYkV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CiAjZW5kaWYKICAgICB9CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCmluZGV4IGQyNTBhMTQuLmYzMTJm
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKQEAgLTY3LDYgKzY3
LDIwIEBAIFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQ
b2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50CiB7CiAgICAgQVNTRVJUKGlzV2hlZWxFdmVu
dFR5cGUodHlwZSkpOwogfQorI2VsaWYgUExBVEZPUk0oR1RLKQorV2ViV2hlZWxFdmVudDo6V2Vi
V2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9h
dFNpemUmIHdoZWVsVGlja3MsIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgTW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFt
cCkKKyAgICA6IFdlYkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQorICAgICwgbV9w
b3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24p
CisgICAgLCBtX2RlbHRhKGRlbHRhKQorICAgICwgbV93aGVlbFRpY2tzKHdoZWVsVGlja3MpCisg
ICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICwgbV9kaXJlY3Rpb25JbnZlcnRl
ZEZyb21EZXZpY2UoZmFsc2UpCisgICAgLCBtX3BoYXNlKHBoYXNlKQorICAgICwgbV9tb21lbnR1
bVBoYXNlKG1vbWVudHVtUGhhc2UpCit7CisgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlw
ZSkpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6QXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApAQCAtODUsNiArOTksOSBAQCB2b2lkIFdlYldoZWVs
RXZlbnQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBl
bmNvZGVyIDw8IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKICAgICBlbmNvZGVyIDw8IG1f
c2Nyb2xsQ291bnQ7CiAgICAgZW5jb2RlciA8PCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0
YTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBlbmNvZGVyIDw8IG1fcGhhc2U7CisgICAgZW5j
b2RlciA8PCBtX21vbWVudHVtUGhhc2U7CiAjZW5kaWYKIH0KIApAQCAtMTE1LDYgKzEzMiwxMSBA
QCBib29sIFdlYldoZWVsRXZlbnQ6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgV2ViV2hlZWxFdmVudCYgdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUodC5tX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHQubV9waGFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHQubV9tb21lbnR1bVBoYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9O
YXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcAppbmRleCBiMzY3NjEyLi4xNWYwMDkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5j
cHAKQEAgLTM3LDYgKzM3LDEyIEBAIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVs
RXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogfQogCitOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRp
dmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhh
c2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCisgICAgOiBXZWJXaGVlbEV2
ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudCwgcGhhc2UsIG1v
bWVudHVtUGhhc2UpKQorICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudCkp
Cit7Cit9CisKIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3Qg
TmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpKSkKICAgICAs
IG1fbmF0aXZlRXZlbnQoZ2RrX2V2ZW50X2NvcHkoZXZlbnQubmF0aXZlRXZlbnQoKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKaW5kZXggMmQ2NjM5
My4uNDIzYzQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVu
dEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0
b3J5LmNwcApAQCAtMTQzLDYgKzE0MywyNyBAQCBXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9y
eTo6Y3JlYXRlV2ViTW91c2VFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGludCBjdQogCiBX
ZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBH
ZGtFdmVudCogZXZlbnQpCiB7CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBn
ZGtfZXZlbnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQpID8KKyAgICAgICAgV2ViV2hlZWxF
dmVudDo6UGhhc2U6OlBoYXNlRW5kZWQgOgorICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6
UGhhc2VDaGFuZ2VkOworI2Vsc2UKKyAgICBkb3VibGUgZGVsdGFYLCBkZWx0YVk7CisgICAgZ2Rr
X2V2ZW50X2dldF9zY3JvbGxfZGVsdGFzKGV2ZW50LCAmZGVsdGFYLCAmZGVsdGFZKTsKKyAgICBX
ZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdE
S19TQ1JPTExfU01PT1RIICYmICFkZWx0YVggJiYgIWRlbHRhWSA/CisgICAgICAgIFdlYldoZWVs
RXZlbnQ6OlBoYXNlOjpQaGFzZUVuZGVkIDoKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6
OlBoYXNlQ2hhbmdlZDsKKyNlbmRpZgorI2Vsc2UKKyAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBw
aGFzZSA9IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZW5kaWYgLy8gR1RL
X0FQSV9WRVJTSU9OXzIKKworICAgIHJldHVybiBjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50LCBw
aGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSk7Cit9CisKK1dlYldoZWVsRXZl
bnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBl
dmVudCwgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1v
bWVudHVtUGhhc2UpCit7CiAgICAgZG91YmxlIHgsIHksIHhSb290LCB5Um9vdDsKICAgICBnZGtf
ZXZlbnRfZ2V0X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKICAgICBnZGtfZXZlbnRfZ2V0X3Jvb3Rf
Y29vcmRzKGV2ZW50LCAmeFJvb3QsICZ5Um9vdCk7CkBAIC0xNzksMTMgKzIwMCwxNSBAQCBXZWJX
aGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtF
dmVudCogZXZlbnQpCiAgICAgRmxvYXRTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lkdGgoKSAqIHN0
ZXAsIHdoZWVsVGlja3MuaGVpZ2h0KCkgKiBzdGVwKTsKIAogICAgIHJldHVybiBXZWJXaGVlbEV2
ZW50KFdlYkV2ZW50OjpXaGVlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4
LCB5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHdoZWVsVGlja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Ny
b2xsQnlQaXhlbFdoZWVsRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJz
Rm9yRXZlbnQoZXZlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRf
dGltZShldmVudCkpOworICAgICAgICBJbnRQb2ludCh4LCB5KSwKKyAgICAgICAgSW50UG9pbnQo
eFJvb3QsIHlSb290KSwKKyAgICAgICAgZGVsdGEsCisgICAgICAgIHdoZWVsVGlja3MsCisgICAg
ICAgIHBoYXNlLAorICAgICAgICBtb21lbnR1bVBoYXNlLAorICAgICAgICBXZWJXaGVlbEV2ZW50
OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKKyAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZl
bnQpLAorICAgICAgICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKTsKIH0KIAogV2ViS2V5Ym9h
cmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgR2Rr
RXZlbnQqIGV2ZW50LCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0
aW9uUmVzdWx0cywgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCmluZGV4IDI4YjY5NTMuLjhmZTdjZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMzgsNiArMzgs
NyBAQCBjbGFzcyBXZWJFdmVudEZhY3RvcnkgewogcHVibGljOgogICAgIHN0YXRpYyBXZWJNb3Vz
ZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBpbnQpOwogICAgIHN0
YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqKTsK
KyAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2
ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVt
UGhhc2UpOwogICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZl
bnQoY29uc3QgR2RrRXZlbnQqLCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmLCBW
ZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAg
IHN0YXRpYyBXZWJUb3VjaEV2ZW50IGNyZWF0ZVdlYlRvdWNoRXZlbnQoY29uc3QgR2RrRXZlbnQq
LCBWZWN0b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMDk3Y2ZjNS4uODQ1MmE5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE4MTYsNyArMTgxNiw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZl
bnQmIGV2ZW50KQogCiAgICAgaWYgKCFtX2N1cnJlbnRseVByb2Nlc3NlZFdoZWVsRXZlbnRzLmlz
RW1wdHkoKSkgewogICAgICAgICBtX3doZWVsRXZlbnRRdWV1ZS5hcHBlbmQoZXZlbnQpOwotICAg
ICAgICBpZiAobV93aGVlbEV2ZW50UXVldWUuc2l6ZSgpIDwgd2hlZWxFdmVudFF1ZXVlU2l6ZVRo
cmVzaG9sZCkKKyAgICAgICAgaWYgKG1fd2hlZWxFdmVudFF1ZXVlLnNpemUoKSA8IHdoZWVsRXZl
bnRRdWV1ZVNpemVUaHJlc2hvbGQgJiYgY2FuU2tpcFdoZWVsRXZlbnQoZXZlbnQpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAvLyBUaGUgcXVldWUgaGFzIHRvbyBtYW55IHdoZWVsIGV2
ZW50cywgc28gcHVzaCBhIG5ldyBldmVudC4KICAgICB9CkBAIC0xODU3LDYgKzE4NTcsMTMgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2
ZW50KQogICAgIG1fcHJvY2Vzcy0+aXNSZXNwb25zaXZlKG51bGxwdHIpOwogfQogCisjaWYgIVBM
QVRGT1JNKEdUSykKK2Jvb2wgV2ViUGFnZVByb3h5OjpjYW5Ta2lwV2hlZWxFdmVudChjb25zdCBX
ZWJXaGVlbEV2ZW50JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB2b2lkIFdl
YlBhZ2VQcm94eTo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAppbmRleCA2NDM2MjQyLi4zODc1M2Y0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xNDYyLDYgKzE0NjIsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBwcm9jZXNzTmV4dFF1ZXVlZFdoZWVsRXZlbnQoKTsKICAgICB2b2lkIHNlbmRX
aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Ta2lw
V2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogICAgIFdlYkNvcmU6OlRyYWNraW5nVHlwZSB0b3VjaEV2ZW50VHJhY2tpbmdUeXBlKGNv
bnN0IFdlYlRvdWNoRXZlbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggN2UxNTc3Yy4uNjkxMzAyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5j
cHAKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIEdlc3R1cmVDb250cm9s
bGVyOjpHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgOiBtX2RyYWdH
ZXN0dXJlKHBhZ2UpCisgICAgLCBtX3N3aXBlR2VzdHVyZShwYWdlKQogICAgICwgbV96b29tR2Vz
dHVyZShwYWdlKQogewogfQpAQCAtNDksMTMgKzUwLDE0IEBAIGJvb2wgR2VzdHVyZUNvbnRyb2xs
ZXI6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKICAgICBib29sIHdhc1By
b2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7CiAgICAgbV9kcmFnR2Vz
dHVyZS5oYW5kbGVFdmVudChldmVudCk7CisgICAgbV9zd2lwZUdlc3R1cmUuaGFuZGxlRXZlbnQo
ZXZlbnQpOwogICAgIG1fem9vbUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwogICAgIHJldHVy
biBldmVudC0+dHlwZSA9PSBHREtfVE9VQ0hfRU5EID8gd2FzUHJvY2Vzc2luZ0dlc3R1cmVzIDog
aXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKIH0KIAogYm9vbCBHZXN0dXJlQ29udHJvbGxlcjo6aXNQ
cm9jZXNzaW5nR2VzdHVyZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlz
QWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0FjdGl2ZSgpOworICAgIHJldHVybiBtX2RyYWdH
ZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV9zd2lwZUdlc3R1cmUuaXNBY3RpdmUoKSB8fCBtX3pvb21H
ZXN0dXJlLmlzQWN0aXZlKCk7CiB9CiAKIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpHZXN0
dXJlKEd0a0dlc3R1cmUqIGdlc3R1cmUsIFdlYlBhZ2VQcm94eSYgcGFnZSkKQEAgLTc1LDYgKzc3
LDI1IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KGNvbnN0
IEdka0V2ZW50KiBldmVudCkKICAgICBndGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQo
R1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQpOwogfQogCit2b2lk
IEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKGNvbnN0IEdka0V2ZW50
KiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2
ZW50PiBzY3JvbGxFdmVudChnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpKTsKKyAgICBzY3JvbGxF
dmVudC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsKKyAgICBzY3JvbGxFdmVudC0+
c2Nyb2xsLnggPSBtX3N0YXJ0LngoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSBtX3N0
YXJ0LnkoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnhfcm9vdCA9IGV2ZW50LT50b3VjaC54
X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55X3Jvb3QgPSBldmVudC0+dG91Y2gueV9y
b290OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9P
VEg7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gMDsKKyAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLmRlbHRhX3kgPSAwOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBl
dmVudC0+dG91Y2guc3RhdGU7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAg
c2Nyb2xsRXZlbnQtPnNjcm9sbC5pc19zdG9wID0gRkFMU0U7CisjZW5kaWYKKyAgICBtX3BhZ2Uu
aGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBX
ZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbiwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBo
YXNlTm9uZSkpOworfQorCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFu
ZGxlRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSkKIHsKICAg
ICBBU1NFUlQobV9pbkRyYWcpOwpAQCAtODgsNyArMTA5LDEwIEBAIHZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91
YmxlIHgsCiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gKG1fb2Zmc2V0LngoKSAt
IHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOwogICAgIHNjcm9sbEV2ZW50LT5z
Y3JvbGwuZGVsdGFfeSA9IChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnRvdWNo
LnN0YXRlOwotICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQo
c2Nyb2xsRXZlbnQuZ2V0KCkpKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBGQUxTRTsKKyNlbmRpZgorICAgIG1fcGFn
ZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCks
IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQsIFdlYldoZWVsRXZlbnQ6OlBoYXNl
OjpQaGFzZU5vbmUpKTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6
OmhhbmRsZVRhcChjb25zdCBHZGtFdmVudCogZXZlbnQpCkBAIC0xMjgsNiArMTUyLDcgQEAgdm9p
ZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKERyYWdHZXN0dXJlKiBkcmFn
R2VzdHVyZSwgZG91YmxlIHgsIGQKICAgICB1bnNpZ25lZCBkZWxheTsKICAgICBnX29iamVjdF9n
ZXQoZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUi
LCAmZGVsYXksIG51bGxwdHIpOwogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQu
c3RhcnRPbmVTaG90KGRlbGF5IC8gMTAwMC4wKTsKKyAgICBkcmFnR2VzdHVyZS0+c3RhcnREcmFn
KGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7CiB9CiAKIHZv
aWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRy
YWdHZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCkBAIC0x
NzIsNiArMTk3LDM5IEBAIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1
cmUoV2ViUGFnZVByb3h5JiBwYWdlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dl
c3R1cmUuZ2V0KCksICJlbmQiLCBHX0NBTExCQUNLKGVuZCksIHRoaXMpOwogfQogCit2b2lkIEdl
c3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0TW9tZW50dW1TY3JvbGwoY29uc3Qg
R2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZKQorewor
ICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXcoR0RLX1ND
Uk9MTCkpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2ZW50LT50b3VjaC50aW1l
OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IGV2ZW50LT50b3VjaC54OworICAgIHNjcm9s
bEV2ZW50LT5zY3JvbGwueSA9IGV2ZW50LT50b3VjaC55OworICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xs
Lnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5k
aXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRl
bHRhX3ggPSB2ZWxvY2l0eVg7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gdmVs
b2NpdHlZOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+dG91Y2guc3Rh
dGU7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgc2Nyb2xsRXZlbnQtPnNj
cm9sbC5pc19zdG9wID0gVFJVRTsKKyNlbmRpZgorICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50
KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBo
YXNlOjpQaGFzZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKSk7Cit9CisK
K3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3dpcGUoU3dpcGVHZXN0dXJl
KiBzd2lwZUdlc3R1cmUsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dl
c3R1cmUqIGdlc3R1cmUpCit7CisgICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtf
Z2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdl
c3R1cmUpKTsKKyAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2Vx
dWVuY2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAgIHN3aXBlR2VzdHVyZS0+
c3RhcnRNb21lbnR1bVNjcm9sbChndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBz
ZXF1ZW5jZSksIHZlbG9jaXR5WCwgdmVsb2NpdHlZKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6
OlN3aXBlR2VzdHVyZTo6U3dpcGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IEdl
c3R1cmUoZ3RrX2dlc3R1cmVfc3dpcGVfbmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKK3sK
KyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RLX0dFU1RVUkVfU0lOR0xF
KG1fZ2VzdHVyZS5nZXQoKSksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X2dlc3R1cmUuZ2V0KCksICJzd2lwZSIsIEdfQ0FMTEJBQ0soc3dpcGUpLCB0aGlzKTsKK30KKwog
SW50UG9pbnQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpjZW50ZXIoKSBjb25zdAog
ewogICAgIGRvdWJsZSB4LCB5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9H
ZXN0dXJlQ29udHJvbGxlci5oCmluZGV4IDg2NzkyZGYuLmU5NjAzMWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKQEAgLTY3LDYgKzY3
LDggQEAgcHJpdmF0ZToKICAgICAgICAgRHJhZ0dlc3R1cmUoV2ViUGFnZVByb3h5Jik7CiAKICAg
ICBwcml2YXRlOgorICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIGRyYWcgc3RhcnRlZCwgYWxsb3dp
bmcgdG8gc3RvcCBraW5ldGljIGRlY2VsZXJhdGlvbi4KKyAgICAgICAgdm9pZCBzdGFydERyYWco
Y29uc3QgR2RrRXZlbnQqKTsKICAgICAgICAgdm9pZCBoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50
KiwgZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICAgICAgdm9pZCBoYW5kbGVUYXAoY29uc3QgR2Rr
RXZlbnQqKTsKICAgICAgICAgdm9pZCBsb25nUHJlc3NGaXJlZCgpOwpAQCAtODIsNiArODQsMTYg
QEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2luRHJhZzsKICAgICB9OwogCisgICAgY2xhc3Mg
U3dpcGVHZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3dpcGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBzdGFydE1vbWVudHVtU2Nyb2xsKGNvbnN0IEdka0V2ZW50KiwgZG91YmxlIHZlbG9jaXR5
WCwgZG91YmxlIHZlbG9jaXR5WSk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUoU3dpcGVH
ZXN0dXJlKiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSop
OworICAgIH07CisKICAgICBjbGFzcyBab29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFpvb21HZXN0dXJlKFdlYlBhZ2VQcm94eSYpOwpAQCAt
MTAxLDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIERyYWdHZXN0dXJlIG1fZHJh
Z0dlc3R1cmU7CisgICAgU3dpcGVHZXN0dXJlIG1fc3dpcGVHZXN0dXJlOwogICAgIFpvb21HZXN0
dXJlIG1fem9vbUdlc3R1cmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggMmRiYWUwNS4uNjBmNWQ4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtMTQ4
LDQgKzE0OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0Q2VudGVyRm9yWm9vbUdlc3R1cmUo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNlbnRlckluVmlldwogfQogI2VuZGlmCiAKK2Jvb2wg
V2ViUGFnZVByb3h5OjpjYW5Ta2lwV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVu
dCkKK3sKKyAgICByZXR1cm4gZXZlbnQucGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6
UGhhc2VFbmRlZAorICAgICAgICB8fCBldmVudC5tb21lbnR1bVBoYXNlKCkgPT0gV2ViV2hlZWxF
dmVudDo6UGhhc2U6OlBoYXNlQmVnYW47Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282137</attachid>
            <date>2016-06-27 09:18:46 -0700</date>
            <delta_ts>2017-06-09 00:07:47 -0700</delta_ts>
            <desc>[GTK] Add kinetic scrolling</desc>
            <filename>kineticscrolling</filename>
            <type>text/plain</type>
            <size>48871</size>
            <attacher name="Adrien Plazas">aplazas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwMzc0YmQ0Li4wOTE3MTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTYtMDYtMjcgIEFkcmllbiBQbGF6YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMg
c2Nyb2xsaW5nIGFuaW1hdGlvbiBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGlu
ZzsgaXQgaXMgYmFzZWQgb24gR1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlw
ZS4KKworICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5k
IHN3aXBlIHZlbG9jaXR5IHRvIFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRp
bmcgb24gd2hldGhlciB0aGUgc2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBh
IHN3aXBlLCB0aGUgc2Nyb2xsIGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAg
dGhlIHN3aXBlIHZlbG9jaXR5IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3Ig
dXNlIHRoZSBvbmUgZnJvbSB0aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAg
ICAgbW9tZW50dW0gc2Nyb2xsaW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb246OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb246
OnVwZGF0ZVZpc2libGVMZW5ndGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlv
bjo6c2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRp
b25LaW5ldGljLmNwcDogQWRkZWQuCisgICAgICAgIChjbGFtcCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6UGVyQXhpc0RhdGE6OmFuaW1h
dGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6U2Ny
b2xsQW5pbWF0aW9uS2luZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25L
aW5ldGljOjp+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dGlvbktpbmV0aWM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktp
bmV0aWM6OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdGlvbktpbmV0aWMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0aW9uLmguCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3Jt
V2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OnN3aXBl
VmVsb2NpdHkpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6U2Nyb2xsQW5pbWF0b3JHdGsp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNtb290aFNjcm9s
bGluZ0FuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6c2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6
OmNvbXB1dGVWZWxvY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6
aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6
d2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6
OnVwZGF0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckd0azo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1Njcm9sbEFuaW1hdG9yR3RrLmg6CisKIDIwMTYtMDYtMjcgIE1pZ3VlbCBHb21leiAgPG1hZ29t
ZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtFRkxdIEJ1aWxkIHdpdGggdGhyZWFkZWQg
Y29tcG9zaXRvciBlbmFibGVkIGlzIGJyb2tlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRl
eCA3NGU1MTk1Li4yY2YwOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNzcsNiAr
NzcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvc291cC9TdWJy
ZXNvdXJjZUxvYWRlclNvdXAuY3BwCiAKICAgICBwbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwCisg
ICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKIAogICAgIHBsYXRmb3JtL2F1
ZGlvL2dsaWIvQXVkaW9CdXNHTGliLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDA3MTM1NWMuLjc2ZjZjNDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC01Myw3ICs1Myw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCiAgICAg
fTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9S
TShHVEspCiAgICAgZW51bSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSA6IHVpbnQ4X3QgewogICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgICAgICAgID0gMCwKICAgICAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbiAgICAgICA9IDEgPDwgMCwKQEAgLTc3LDggKzc3LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2RpcmVjdGlvbkludmVydGVk
RnJvbURldmljZShmYWxzZSkKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgICwgbV9o
YXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZhbHNlKQotICAgICAgICAgICAgLCBtX3BoYXNlKFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKLSAgICAgICAgICAgICwgbV9tb21lbnR1bVBoYXNl
KFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKICAgICAgICAgICAgICwgbV9zY3JvbGxDb3Vu
dCgwKQogICAgICAgICAgICAgLCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgoMCkKICAg
ICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKDApCkBAIC05OCw4ICs5
Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9kaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UoZmFsc2UpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICAs
IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyhmYWxzZSkKLSAgICAgICAgICAgICwgbV9waGFz
ZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpCi0gICAgICAgICAgICAsIG1fbW9tZW50dW1Q
aGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpCiAgICAgICAgICAgICAsIG1fc2Nyb2xs
Q291bnQoMCkKICAgICAgICAgICAgICwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYKDAp
CiAgICAgICAgICAgICAsIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSgwKQpAQCAtMTYw
LDEyICsxNTYsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHNob3VsZENv
bnNpZGVyTGF0Y2hpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBzaG91bGRSZXNldExhdGNoaW5n
KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7Ci0gICAgICAgIGJv
b2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogI2Vsc2UKICAgICAg
ICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyAgICAgICAg
Ym9vbCBpc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1Ry
YW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAgICAgRmxvYXRQb2ludCBzd2lwZVZlbG9jaXR5KCkgY29uc3Q7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQs
IFdQQVJBTSwgTFBBUkFNLCBib29sIGlzTW91c2VIV2hlZWwpOwogICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnQoSFdORCwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYXRpb24pOwpAQCAtMTgwLDEwICsxODMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBmbG9hdCBtX3doZWVsVGlja3NZOwogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFu
dWxhcml0eSBtX2dyYW51bGFyaXR5OwogICAgICAgICBib29sIG1fZGlyZWN0aW9uSW52ZXJ0ZWRG
cm9tRGV2aWNlOworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCisgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2UgeyBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZU5vbmUgfTsKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9tb21lbnR1bVBoYXNl
IHsgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lIH07CisjZW5kaWYKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7Ci0gICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fcGhhc2U7Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlIG1fbW9tZW50dW1QaGFzZTsKICAgICAgICAgdW5zaWduZWQgbV9zY3JvbGxDb3Vu
dDsKICAgICAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYOwogICAgICAg
ICBmbG9hdCBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVk7CkBAIC0yMTIsNyArMjE3LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZUVuZGVkOwogICAgIH0KKyNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6
OmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkICYmIG1fbW9tZW50dW1QaGFz
ZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdGlvbi5oCmluZGV4IDM5Mjk5OTcuLjJlNWY2M2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCkBAIC0zNiwxMCArMzYsMTAgQEAgY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxBbmltYXRpb24gewogcHVibGljOgogICAgIHZp
cnR1YWwgflNjcm9sbEFuaW1hdGlvbigpIHsgfTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllcikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCAvKiBzdGVwICovLCBmbG9hdCAvKiBtdWx0
aXBsaWVyICovKSB7IHJldHVybiB0cnVlOyB9OwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmxlTGVuZ3RocygpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgeyB9OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIHsgfTsKICAgICB2aXJ0dWFs
IHZvaWQgc2VydmljZUFuaW1hdGlvbigpIHsgfTsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJjZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKQEAgLTAsMCAr
MSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbktpbmV0aWMu
aCIKKworI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisKKy8qCisgKiBQZXJBeGlzRGF0YSBpcyBhIHBvcnQgb2YgR3RrS2luZXRpY1Njcm9s
bGluZyBhcyBvZiBHVEsrIDMuMjAsCisgKiBtaW1pY2tpbmcgaXRzIEFQSSBhbmQgaXRzIGJlaGF2
aW9yLgorICoKKyAqIEFsbCBvdXIgY3VydmVzIGFyZSBzZWNvbmQgZGVncmVlIGxpbmVhciBkaWZm
ZXJlbnRpYWwgZXF1YXRpb25zLCBhbmQKKyAqIHNvIHRoZXkgY2FuIGFsd2F5cyBiZSB3cml0dGVu
IGFzIGxpbmVhciBjb21iaW5hdGlvbnMgb2YgMiBiYXNlCisgKiBzb2x1dGlvbnMuIGNvZWYxIGFu
ZCBjb2VmMiBhcmUgdGhlIGNvZWZmaWNpZW50cyB0byB0aGVzZSB0d28gYmFzZQorICogc29sdXRp
b25zLCBhbmQgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24gYW5kIHZlbG9j
aXR5LgorICoKKyAqIEluIHRoZSBjYXNlIG9mIHNpbXBsZSBkZWNlbGVyYXRpb24sIHRoZSBkaWZm
ZXJlbnRpYWwgZXF1YXRpb24gaXMKKyAqCisgKiAgIHknJyA9IC1teScKKyAqCisgKiBXaXRoIG0g
dGhlIHJlc2lzdGVuY2UgZmFjdG9yLiBGb3IgdGhpcyB3ZSB1c2UgdGhlIGZvbGxvd2luZyAyCisg
KiBiYXNlIHNvbHV0aW9uczoKKyAqCisgKiAgIGYxKHgpID0gMQorICogICBmMih4KSA9IGV4cCgt
bXgpCisgKgorICogSW4gdGhlIGNhc2Ugb2Ygb3ZlcnNob290LCB0aGUgZGlmZmVyZW50aWFsIGVx
dWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXknIC0ga3kKKyAqCisgKiBXaXRoIG0gdGhlIHJl
c2lzdGFuY2UsIGFuZCBrIHRoZSBzcHJpbmcgc3RpZmZuZXNzIGNvbnN0YW50LiBXZSBsZXQKKyAq
IGsgPSBtXjIgLyA0LCBzbyB0aGF0IHRoZSBzeXN0ZW0gaXMgY3JpdGljYWxseSBkYW1wZWQgKGll
LCByZXR1cm5zIHRvIGl0cworICogZXF1aWxpYnJpdW0gcG9zaXRpb24gYXMgcXVpY2tseSBhcyBw
b3NzaWJsZSwgd2l0aG91dCBvc2NpbGxhdGluZyksIGFuZCBvZmZzZXQKKyAqIHRoZSB3aG9sZSB0
aGluZywgc3VjaCB0aGF0IHRoZSBlcXVpbGlicml1bSBwb3NpdGlvbiBpcyBhdCAwLiBUaGlzIGdp
dmVzIHRoZQorICogYmFzZSBzb2x1dGlvbnMKKyAqCisgKiAgIGYxKHgpID0gZXhwKC1teCAvIDIp
CisgKiAgIGYyKHgpID0gdCBleHAoLW14IC8gMikKKyAqLworCitzdGF0aWMgY29uc3QgZG91Ymxl
IGRlY2VsRnJpY3Rpb24gPSA0Oworc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUgPSA2MDsK
K3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwgPSAuMDAxOworCitzdGF0
aWMgaW5saW5lIGRvdWJsZSBjbGFtcChkb3VibGUgeCwgZG91YmxlIGxvdywgZG91YmxlIGhpZ2gp
Cit7CisgICAgQVNTRVJUKGxvdyA8PSBoaWdoKTsKKworICAgIHJldHVybiAoeCA+IGhpZ2gpID8g
aGlnaCA6ICgoeCA8IGxvdykgPyBsb3cgOiB4KTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoZG91Ymxl
IGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJsZSBpbml0aWFsUG9zaXRpb24sIGRvdWJsZSBpbml0
aWFsVmVsb2NpdHkpCisgICAgOiBtX2xvd2VyKGxvd2VyKQorICAgICwgbV91cHBlcih1cHBlcikK
KyAgICAsIG1fY29lZjEoaW5pdGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbiArIGluaXRpYWxQ
b3NpdGlvbikKKyAgICAsIG1fY29lZjIoLWluaXRpYWxWZWxvY2l0eSAvIGRlY2VsRnJpY3Rpb24p
CisgICAgLCBtX3Bvc2l0aW9uKGNsYW1wKGluaXRpYWxQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKSkK
KyAgICAsIG1fdmVsb2NpdHkoaW5pdGlhbFBvc2l0aW9uIDwgbG93ZXIgfHwgaW5pdGlhbFBvc2l0
aW9uID4gdXBwZXIgPyAwIDogaW5pdGlhbFZlbG9jaXR5KQoreworfQorCitib29sIFNjcm9sbEFu
aW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjphbmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1lRGVs
dGEpCit7CisgICAgbV9lbGFwc2VkVGltZSArPSB0aW1lRGVsdGE7CisKKyAgICBkb3VibGUgZXhw
b25lbnRpYWxQYXJ0ID0gZXhwKC1kZWNlbEZyaWN0aW9uICogbV9lbGFwc2VkVGltZSk7CisgICAg
bV9wb3NpdGlvbiA9IG1fY29lZjEgKyBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0OworICAgIG1f
dmVsb2NpdHkgPSAtZGVjZWxGcmljdGlvbiAqIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisK
KyAgICBpZiAobV9wb3NpdGlvbiA8IG1fbG93ZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1f
bG93ZXI7CisgICAgICAgIG1fdmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAobV9wb3NpdGlv
biA+IG1fdXBwZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1fdXBwZXI7CisgICAgICAgIG1f
dmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAoZmFicyhtX3ZlbG9jaXR5KSA8IDEpIHsKKyAg
ICAgICAgbV9wb3NpdGlvbiA9IHJvdW5kKG1fcG9zaXRpb24pOworICAgICAgICBtX3ZlbG9jaXR5
ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV92ZWxvY2l0eTsKK30KKworU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYzo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xs
YWJsZUFyZWEsIHN0ZDo6ZnVuY3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogU2Nyb2xsQW5pbWF0aW9uKHNjcm9sbGFibGVBcmVh
KQorICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIoKnRoaXMsICZT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKQoreworfQorCitTY3Jv
bGxBbmltYXRpb25LaW5ldGljOjp+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpCit7Cit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RvcCgpCit7CisgICAgbV9hbmltYXRpb25UaW1l
ci5zdG9wKCk7CisgICAgbV9ob3Jpem9udGFsRGF0YSA9IE51bGxvcHQ7CisgICAgbV92ZXJ0aWNh
bERhdGEgPSBOdWxsb3B0OworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0YXJ0
KGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgdmVs
b2NpdHksIGJvb2wgbWF5SFNjcm9sbCwgYm9vbCBtYXlWU2Nyb2xsKQoreworICAgIHN0b3AoKTsK
KworICAgIG1fcG9zaXRpb24gPSBpbml0aWFsUG9zaXRpb247CisKKyAgICBpZiAoIXZlbG9jaXR5
LngoKSAmJiAhdmVsb2NpdHkueSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWF5SFNj
cm9sbCkgeworICAgICAgICBtX2hvcml6b250YWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3JvbGxh
YmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisgICAgICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAgICAgICAgICAgIGluaXRp
YWxQb3NpdGlvbi54KCksIHZlbG9jaXR5LngoKSk7CisgICAgfQorICAgIGlmIChtYXlWU2Nyb2xs
KSB7CisgICAgICAgIG1fdmVydGljYWxEYXRhID0gUGVyQXhpc0RhdGEobV9zY3JvbGxhYmxlQXJl
YS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCksCisgICAgICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSwKKyAgICAgICAgICAgIGluaXRpYWxQb3Np
dGlvbi55KCksIHZlbG9jaXR5LnkoKSk7CisgICAgfQorCisgICAgYW5pbWF0aW9uVGltZXJGaXJl
ZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OmFuaW1hdGlvblRpbWVyRmly
ZWQoKQoreworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOworICAgIGRvdWJsZSBkZWx0YVRvTmV4dEZyYW1lID0gY2VpbCgoY3VycmVudFRpbWUg
LSBtX3N0YXJ0VGltZSkgKiBmcmFtZVJhdGUpIC8gZnJhbWVSYXRlIC0gKGN1cnJlbnRUaW1lIC0g
bV9zdGFydFRpbWUpOworCisgICAgaWYgKG1faG9yaXpvbnRhbERhdGEgJiYgIW1faG9yaXpvbnRh
bERhdGEudmFsdWUoKS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQorICAgICAgICBt
X2hvcml6b250YWxEYXRhID0gTnVsbG9wdDsKKworICAgIGlmIChtX3ZlcnRpY2FsRGF0YSAmJiAh
bV92ZXJ0aWNhbERhdGEudmFsdWUoKS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQor
ICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IE51bGxvcHQ7CisKKyAgICAvLyBJZiBvbmUgb2YgdGhl
IGF4ZXMgZGlkbid0IGZpbmlzaCBpdHMgYW5pbWF0aW9uIHdlIG11c3QgY29udGludWUgaXQuCisg
ICAgaWYgKG1faG9yaXpvbnRhbERhdGEgfHwgbV92ZXJ0aWNhbERhdGEpCisgICAgICAgIG1fYW5p
bWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6bWF4KG1pbmltdW1UaW1lckludGVydmFsLCBk
ZWx0YVRvTmV4dEZyYW1lKSk7CisKKyAgICBkb3VibGUgeCA9IG1faG9yaXpvbnRhbERhdGEgPyBt
X2hvcml6b250YWxEYXRhLnZhbHVlKCkucG9zaXRpb24oKSA6IG1fcG9zaXRpb24ueCgpOworICAg
IGRvdWJsZSB5ID0gbV92ZXJ0aWNhbERhdGEgPyBtX3ZlcnRpY2FsRGF0YS52YWx1ZSgpLnBvc2l0
aW9uKCkgOiBtX3Bvc2l0aW9uLnkoKTsKKyAgICBtX3Bvc2l0aW9uID0gRmxvYXRQb2ludCh4LCB5
KTsKKyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKEZsb2F0UG9pbnQobV9wb3Np
dGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODU5OGRhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuaApAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Ny
b2xsQW5pbWF0aW9uS2luZXRpY19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvbktpbmV0aWNfaAor
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsQW5p
bWF0aW9uS2luZXRpYyBmaW5hbDogcHVibGljIFNjcm9sbEFuaW1hdGlvbiB7Citwcml2YXRlOgor
ICAgIGNsYXNzIFBlckF4aXNEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBlckF4aXNEYXRh
KGRvdWJsZSBsb3dlciwgZG91YmxlIHVwcGVyLCBkb3VibGUgaW5pdGlhbFBvc2l0aW9uLCBkb3Vi
bGUgaW5pdGlhbFZlbG9jaXR5KTsKKworICAgICAgICBkb3VibGUgcG9zaXRpb24oKSB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CisKKyAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xsKGRvdWJsZSB0aW1l
RGVsdGEpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZG91YmxlIG1fbG93ZXIgeyAwIH07Cisg
ICAgICAgIGRvdWJsZSBtX3VwcGVyIHsgMCB9OworCisgICAgICAgIGRvdWJsZSBtX2NvZWYxIHsg
MCB9OworICAgICAgICBkb3VibGUgbV9jb2VmMiB7IDAgfTsKKworICAgICAgICBkb3VibGUgbV9l
bGFwc2VkVGltZSB7IDAgfTsKKyAgICAgICAgZG91YmxlIG1fcG9zaXRpb24geyAwIH07CisgICAg
ICAgIGRvdWJsZSBtX3ZlbG9jaXR5IHsgMCB9OworICAgIH07CisKK3B1YmxpYzoKKyAgICBTY3Jv
bGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVhJiwgc3RkOjpmdW5jdGlvbjx2b2lkKEZs
b2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24pOworICAgIHZpcnR1
YWwgflNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKTsKKworICAgIHZvaWQgc3RhcnQoY29uc3QgRmxv
YXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgYm9v
bCBtYXlIU2Nyb2xsLCBib29sIG1heVZTY3JvbGwpOworCitwcml2YXRlOgorICAgIHZvaWQgc3Rv
cCgpIG92ZXJyaWRlOworICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOworCisgICAgc3Rk
OjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+IG1fbm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVu
Y3Rpb247CisKKyAgICBPcHRpb25hbDxQZXJBeGlzRGF0YT4gbV9ob3Jpem9udGFsRGF0YTsKKyAg
ICBPcHRpb25hbDxQZXJBeGlzRGF0YT4gbV92ZXJ0aWNhbERhdGE7CisKKyAgICBkb3VibGUgbV9z
dGFydFRpbWUgeyAwIH07CisgICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKKyAgICBGbG9hdFBv
aW50IG1fcG9zaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBTY3JvbGxBbmltYXRpb25LaW5ldGljX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggMTA0NWM0NC4uYzMzNzg4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxF
dmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hl
ZWxFdmVudEd0ay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTgzLDYg
Kzg0LDIwIEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50
U2Nyb2xsKiBldmVudCkKICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7CiAgICAgbV93aGVl
bFRpY2tzWSA9IG1fZGVsdGFZOwogCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisgICAgbV9waGFzZSA9IGV2ZW50LT5pc19zdG9wID8K
KyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCA6CisgICAgICAgIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgbV9waGFzZSA9IGV2ZW50LT5kaXJl
Y3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIW1fZGVsdGFYICYmICFtX2RlbHRhWSA/Cisg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNlbHNlCisgICAgbV9waGFzZSA9IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgor
CiAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpLCBz
dGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55KSk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBv
aW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGludD4oZXZl
bnQtPnlfcm9vdCkpOwogICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVu
dDsKQEAgLTkzLDQgKzEwOCwxMCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxF
dmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQg
UGxhdGZvcm1XaGVlbEV2ZW50Ojpzd2lwZVZlbG9jaXR5KCkgY29uc3QKK3sKKyAgICAvLyBUaGUg
c3dpcGluZyB2ZWxvY2l0eSBpcyBzdG9yZWQgaW4gdGhlIGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVj
bGFyaW5nIGl0LgorICAgIHJldHVybiBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkg
PyBGbG9hdFBvaW50KG1fd2hlZWxUaWNrc1gsIG1fd2hlZWxUaWNrc1kpIDogRmxvYXRQb2ludCgp
OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
QW5pbWF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1h
dG9yR3RrLmNwcAppbmRleCAxM2U2MzU0Li44ODdlNGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvckd0ay5oIgogCisj
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1h
dGlvblNtb290aC5oIgogI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgY29uc3QgZG91YmxlIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkR1cmF0aW9uID0g
MTsKIHN0YXRpYyBjb25zdCBkb3VibGUgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURl
bGF5ID0gMjsKK3N0YXRpYyBjb25zdCBkb3VibGUgc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZE1pbGxp
c2Vjb25kcyA9IDE1MDsKIAogc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxB
bmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKQEAgLTUw
LDYgKzUyLDE0IEBAIFNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayhTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxl
QXJlYSkKICAgICAsIG1fb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Ny
b2xsQW5pbWF0b3JHdGs6Om92ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lckZpcmVkKQogewor
ICAgIG1fa2luZXRpY0FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0aW9u
S2luZXRpYz4obV9zY3JvbGxhYmxlQXJlYSwgW3RoaXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikg
eworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgICAgICBpZiAobV9zbW9vdGhBbmlt
YXRpb24pCisgICAgICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9u
KHBvc2l0aW9uKTsKKyNlbmRpZgorICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3ZlKHBvc2l0
aW9uKSk7CisgICAgfSk7CisKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBpZiAo
c2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCiAgICAgICAgIGVuc3VyZVNt
b290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwpAQCAtNjMsNDggKzczLDEwOCBAQCBTY3JvbGxBbmlt
YXRvckd0azo6flNjcm9sbEFuaW1hdG9yR3RrKCkKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlv
bigpCiB7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQorICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hbmltYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNj
cm9sbEFuaW1hdGlvblNtb290aD4obV9zY3JvbGxhYmxlQXJlYSwgbV9jdXJyZW50UG9zaXRpb24s
IFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKLSAgICAgICAgRmxvYXRTaXplIGRlbHRh
ID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAgICAgICAgbV9jdXJyZW50UG9zaXRp
b24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKLSAgICAgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRl
bHRhKTsKKyAgICBtX3Ntb290aEFuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5p
bWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBtX2N1cnJlbnRQb3NpdGlvbiwgW3RoaXNd
KEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgeworICAgICAgICB1cGRhdGVQb3NpdGlvbihXVEZNb3Zl
KHBvc2l0aW9uKSk7CiAgICAgfSk7CiB9CisjZW5kaWYKIAorI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQogYm9vbCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3Rl
cCwgZmxvYXQgbXVsdGlwbGllcikKIHsKICAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xs
QW5pbWF0b3JFbmFibGVkKCkgfHwgZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQcmVjaXNlUGl4ZWwp
CiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFu
dWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAgICBlbnN1cmVTbW9vdGhTY3JvbGxpbmdB
bmltYXRpb24oKTsKLSAgICByZXR1cm4gbV9hbmltYXRpb24tPnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX3Ntb290aEFuaW1h
dGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7
CiB9CisjZW5kaWYKIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6c2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50
IHBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZz
ZXQsIHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkpKTsKLSAgICBp
ZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24o
cG9zaXRpb24pOworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOworICAgIG1fc2Nyb2xs
SGlzdG9yeS5jbGVhcigpOwogCi0gICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1
cnJlbnRQb3NpdGlvbjsKLSAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIG5v
dGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
CisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+
c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uKTsKKyNlbmRpZgorCisgICAgdXBkYXRlUG9zaXRp
b24oV1RGTW92ZShwb3NpdGlvbikpOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3aWxs
RW5kTGl2ZVJlc2l6ZSgpCitGbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yR3RrOjpjb21wdXRlVmVs
b2NpdHkoKQogewotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVw
ZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc2Nyb2xsSGlzdG9yeS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBkb3VibGUgZmlyc3QgPSBtX3Njcm9sbEhpc3Rv
cnlbMF0udGltZXN0YW1wKCk7CisgICAgZG91YmxlIGxhc3QgPSBtX3Njcm9sbEhpc3RvcnkucmJl
Z2luKCktPnRpbWVzdGFtcCgpOworCisgICAgaWYgKGxhc3QgPT0gZmlyc3QpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBGbG9hdFBvaW50IGFjY3VtRGVsdGE7CisgICAgZm9yIChjb25zdCBh
dXRvJiBzY3JvbGxFdmVudCA6IG1fc2Nyb2xsSGlzdG9yeSkKKyAgICAgICAgYWNjdW1EZWx0YSAr
PSBGbG9hdFBvaW50KHNjcm9sbEV2ZW50LmRlbHRhWCgpLCBzY3JvbGxFdmVudC5kZWx0YVkoKSk7
CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsKKworICAgIHJldHVybiBGbG9hdFBvaW50
KGFjY3VtRGVsdGEueCgpICogLTEwMDAgLyAobGFzdCAtIGZpcnN0KSwgYWNjdW1EZWx0YS55KCkg
KiAtMTAwMCAvIChsYXN0IC0gZmlyc3QpKTsKIH0KKworYm9vbCBTY3JvbGxBbmltYXRvckd0azo6
aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQoreworICAg
IG1fa2luZXRpY0FuaW1hdGlvbi0+c3RvcCgpOworCisgICAgbV9zY3JvbGxIaXN0b3J5LnJlbW92
ZUFsbE1hdGNoaW5nKFsmZXZlbnRdIChQbGF0Zm9ybVdoZWVsRXZlbnQmIG90aGVyRXZlbnQpIC0+
IGJvb2wgeworICAgICAgICByZXR1cm4gZXZlbnQudGltZXN0YW1wKCkgLSBvdGhlckV2ZW50LnRp
bWVzdGFtcCgpID4gc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZE1pbGxpc2Vjb25kczsKKyAgICB9KTsK
KworICAgIGlmIChldmVudC5pc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgZXZlbnQgdG8gdGhlIGhpc3RvcnkgYXMgaXRzIGRl
bHRhIHdpbGwgYmUgKDAsIDApLgorICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRpb25L
aW5ldGljKj4obV9raW5ldGljQW5pbWF0aW9uLmdldCgpKS0+c3RhcnQobV9jdXJyZW50UG9zaXRp
b24sIGNvbXB1dGVWZWxvY2l0eSgpLCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxi
YXIoKSwgbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGlmIChldmVudC5pc1RyYW5zaXRpb25pbmdUb01vbWVudHVt
U2Nyb2xsKCkpIHsKKyAgICAgICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7CisgICAgICAgIHN0
YXRpY19jYXN0PFNjcm9sbEFuaW1hdGlvbktpbmV0aWMqPihtX2tpbmV0aWNBbmltYXRpb24uZ2V0
KCkpLT5zdGFydChtX2N1cnJlbnRQb3NpdGlvbiwgZXZlbnQuc3dpcGVWZWxvY2l0eSgpLCBtX3Nj
cm9sbGFibGVBcmVhLmhvcml6b250YWxTY3JvbGxiYXIoKSwgbV9zY3JvbGxhYmxlQXJlYS52ZXJ0
aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9z
Y3JvbGxIaXN0b3J5LmFwcGVuZChldmVudCk7CisKKyAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6
OmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp3
aWxsRW5kTGl2ZVJlc2l6ZSgpCit7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRhdGVWaXNp
YmxlTGVuZ3RocygpOworCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgaWYgKG1f
c21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKTsKICNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjp1cGRhdGVQ
b3NpdGlvbihGbG9hdFBvaW50JiYgcG9zaXRpb24pCit7CisgICAgRmxvYXRTaXplIGRlbHRhID0g
cG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IFdU
Rk1vdmUocG9zaXRpb24pOworICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7Cit9CiAK
IHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxl
bmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotICAgIGlmIChtX2FuaW1h
dGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisgICAg
aWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Ntb290aEFuaW1hdGlvbi0+dXBkYXRl
VmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlmICghc2Nyb2xsYmFyLT5pc092ZXJsYXlT
Y3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3LDkgKzE4NywxMSBAQCB2b2lkIFNj
cm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0
ZVZpc2libGVMZW5ndGhzKCk7CisKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKLSAgICBp
ZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOworICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9vdGhBbmltYXRp
b24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5kaWYKICAgICBpZiAoIXNjcm9sbGJhci0+
aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmgKaW5kZXggNzBlNWI3My4uZGY1NzA3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9y
R3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmgKQEAgLTQ2LDkgKzQ2LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAjaWYgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCiAgICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKSBvdmVycmlkZTsKKyNl
bmRpZgogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkgb3ZlcnJpZGU7
Ci0jZW5kaWYKKworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Ny
b2xsYmFyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNj
cm9sbGJhciopIG92ZXJyaWRlOwpAQCAtNjMsMTYgKzY1LDIyIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJy
aWRlOwogICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92
ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYpOworCiAgICAg
dm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2hv
d092ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsK
ICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwogCisgICAgRmxvYXRQ
b2ludCBjb21wdXRlVmVsb2NpdHkoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQog
ICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fa2luZXRpY0FuaW1hdGlvbjsKKyAgICBWZWN0
b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhpc3Rvcnk7CiAgICAgU2Nyb2xsYmFyKiBt
X2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwogICAgIFNjcm9sbGJhciog
bV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07CiAgICAgYm9vbCBtX292ZXJs
YXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0MTM3ZTZhLi5kMDk0
NDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTYtMDYtMjcgIEFkcmllbiBQbGF6
YXMgIDxhcGxhemFzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIGtpbmV0aWMgc2Ny
b2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTU3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdGhlIG5vdGlvbiBvZiBwaGFzZSBhbmQgbW9tZW50dW0gcGhhc2UgdG8gV2ViV2hlZWxFdmVu
dC4KKworICAgICAgICBNYWtlIFdlYldoZWVsRXZlbnQgbWFuYWdlIHRoZSAnaXNfc3RvcCcgYXR0
cmlidXRlIG9mIEdka0V2ZW50U2Nyb2xsIHRvIGNyZWF0ZSB0aGUgY29ycmVzcG9uZGluZyBXZWJX
aGVlbEV2ZW50CisgICAgICAgIHdpdGggdGhlIGNvcnJlY3QgcGhhc2VzIGFuZCBkZWx0YXMuCisK
KyAgICAgICAgTWFrZSBHZXN0dXJlQ29udHJvbGxlciBtYW5hZ2Ugc3dpcGVzIHRvIGNyZWF0ZSB0
aGUgY29ycmVzcG9uZGluZyBXZWJXaGVlbEV2ZW50IHdpdGggdGhlIGNvcnJlY3QgcGhhc2VzIGFu
ZAorICAgICAgICBkZWx0YXMuCisKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVu
dC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJF
dmVudENvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXQyUGxhdGZvcm1XaGVl
bEV2ZW50OjpXZWJLaXQyUGxhdGZvcm1XaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvV2Vi
V2hlZWxFdmVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OldlYldoZWVs
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50OjplbmNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9ndGsv
TmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYldo
ZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2Vi
RXZlbnRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVh
dGVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNob3VsZFByb2Nlc3NXaGVlbEV2ZW50Tm93KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjppc1Byb2Nlc3NpbmdHZXN0
dXJlcyk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZVNjcm9sbEV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpzdGFydERyYWcpOgorICAgICAg
ICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcpOgor
ICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjplbmQpOgor
ICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzdGFydE1v
bWVudHVtU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBl
R2VzdHVyZTo6c3dpcGUpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6U3dp
cGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVy
ZUNvbnRyb2xsZXIuaDoKKwogMjAxNi0wNi0yNyAgTWlndWVsIEdvbWV6ICA8bWFnb21lekBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdW0VGTF0gQnVpbGQgd2l0aCB0aHJlYWRlZCBjb21wb3Np
dG9yIGVuYWJsZWQgaXMgYnJva2VuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmF0aXZlV2ViV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldo
ZWVsRXZlbnQuaAppbmRleCAxNTMzMjIyLi40NTAxZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogI2Vs
aWYgUExBVEZPUk0oR1RLKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2Vi
V2hlZWxFdmVudCYpOwogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqKTsKKyAgICBO
YXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldo
ZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAg
IE5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCosIGNvbnN0
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgdG9XZWJDb250ZW50LCBjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mIHRvRGV2aWNlU2NyZWVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
RXZlbnQuaAppbmRleCA0YmZhMGQ4Li4xOGJmZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQu
aApAQCAtMTc5LDcgKzE3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVs
RXZlbnQKICAgICB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0Ep
IHx8IFBMQVRGT1JNKEdUSykKICAgICBlbnVtIFBoYXNlIHsKICAgICAgICAgUGhhc2VOb25lICAg
ICAgICA9IDAsCiAgICAgICAgIFBoYXNlQmVnYW4gICAgICAgPSAxIDw8IDAsCkBAIC0xOTYsNiAr
MTk2LDggQEAgcHVibGljOgogICAgIFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRp
b24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFt
cCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9i
YWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSwgYm9vbCBkaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNp
c2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQzMl90IHNjcm9sbENvdW50LCBjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSwgTW9kaWZpZXJzLCBkb3VibGUg
dGltZXN0YW1wKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBXZWJXaGVlbEV2ZW50KFR5cGUs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBo
YXNlLCBHcmFudWxhcml0eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgog
CiAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3Bvc2l0aW9uOyB9CkBAIC0yMDQsOSArMjA2LDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUgd2hlZWxUaWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxUaWNrczsg
fQogICAgIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8R3JhbnVsYXJpdHk+KG1fZ3JhbnVsYXJpdHkpOyB9CiAgICAgYm9vbCBkaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbkludmVydGVkRnJvbURl
dmljZTsgfQotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFU
Rk9STShHVEspCiAgICAgUGhhc2UgcGhhc2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
aGFzZT4obV9waGFzZSk7IH0KICAgICBQaGFzZSBtb21lbnR1bVBoYXNlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8UGhhc2U+KG1fbW9tZW50dW1QaGFzZSk7IH0KKyNlbmRpZgorI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhczsgfQogICAgIHVpbnQzMl90IHNj
cm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3VudDsgfQogICAgIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7IH0KQEAgLTIyNCw5ICsyMjgsMTEg
QEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV93aGVlbFRpY2tzOwogICAgIHVp
bnQzMl90IG1fZ3JhbnVsYXJpdHk7IC8vIEdyYW51bGFyaXR5CiAgICAgYm9vbCBtX2RpcmVjdGlv
bkludmVydGVkRnJvbURldmljZTsKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RL
KQorICAgIHVpbnQzMl90IG1fcGhhc2UgeyBQaGFzZTo6UGhhc2VOb25lIH07CisgICAgdWludDMy
X3QgbV9tb21lbnR1bVBoYXNlIHsgUGhhc2U6OlBoYXNlTm9uZSB9OworI2VuZGlmCiAjaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgdWludDMyX3QgbV9waGFzZTsgLy8gUGhhc2UKLSAgICB1aW50MzJf
dCBtX21vbWVudHVtUGhhc2U7IC8vIFBoYXNlCiAgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxp
bmdEZWx0YXM7CiAgICAgdWludDMyX3QgbV9zY3JvbGxDb3VudDsKICAgICBXZWJDb3JlOjpGbG9h
dFNpemUgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwCmluZGV4IGVlYjc0NDEuLmU3ODM4ZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwCkBAIC0xNTEsOSAr
MTUxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV93aGVlbFRpY2tzWSA9IHdlYkV2ZW50LndoZWVs
VGlja3MoKS5oZWlnaHQoKTsKICAgICAgICAgbV9ncmFudWxhcml0eSA9ICh3ZWJFdmVudC5ncmFu
dWxhcml0eSgpID09IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpID8gV2Vi
Q29yZTo6U2Nyb2xsQnlQYWdlV2hlZWxFdmVudCA6IFdlYkNvcmU6OlNjcm9sbEJ5UGl4ZWxXaGVl
bEV2ZW50OwogICAgICAgICBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSA9IHdlYkV2ZW50
LmRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSgpOwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lm
IFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgICAgIG1fcGhhc2UgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4od2ViRXZlbnQucGhhc2Uo
KSk7CiAgICAgICAgIG1fbW9tZW50dW1QaGFzZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlPih3ZWJFdmVudC5tb21lbnR1bVBoYXNlKCkpOworI2VuZGlmCisj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyA9
IHdlYkV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoKTsKICAgICAgICAgbV9zY3JvbGxD
b3VudCA9IHdlYkV2ZW50LnNjcm9sbENvdW50KCk7CiAgICAgICAgIG1fdW5hY2NlbGVyYXRlZFNj
cm9sbGluZ0RlbHRhWCA9IHdlYkV2ZW50LnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSgpLndp
ZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKaW5kZXggZDI1MGEx
NC4uNTYzMTk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcApAQCAt
NjcsNiArNjcsMjAgQEAgV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQKIHsKICAgICBBU1NFUlQoaXNX
aGVlbEV2ZW50VHlwZSh0eXBlKSk7CiB9CisjZWxpZiBQTEFURk9STShHVEspCitXZWJXaGVlbEV2
ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEsIGNv
bnN0IEZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgUGhhc2UgcGhhc2UsIFBoYXNlIG1vbWVudHVtUGhh
c2UsIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBNb2RpZmllcnMgbW9kaWZpZXJzLCBkb3VibGUg
dGltZXN0YW1wKQorICAgIDogV2ViRXZlbnQodHlwZSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApCisg
ICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQ
b3NpdGlvbikKKyAgICAsIG1fZGVsdGEoZGVsdGEpCisgICAgLCBtX3doZWVsVGlja3Mod2hlZWxU
aWNrcykKKyAgICAsIG1fZ3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpCisgICAgLCBtX2RpcmVjdGlv
bkludmVydGVkRnJvbURldmljZShmYWxzZSkKKyAgICAsIG1fcGhhc2UocGhhc2UpCisgICAgLCBt
X21vbWVudHVtUGhhc2UobW9tZW50dW1QaGFzZSkKK3sKKyAgICBBU1NFUlQoaXNXaGVlbEV2ZW50
VHlwZSh0eXBlKSk7Cit9CiAjZW5kaWYKIAogdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBD
OjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkBAIC03OSw5ICs5MywxMSBAQCB2b2lk
IFdlYldoZWVsRXZlbnQ6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29u
c3QKICAgICBlbmNvZGVyIDw8IG1fd2hlZWxUaWNrczsKICAgICBlbmNvZGVyIDw8IG1fZ3JhbnVs
YXJpdHk7CiAgICAgZW5jb2RlciA8PCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZTsKLSNp
ZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQog
ICAgIGVuY29kZXIgPDwgbV9waGFzZTsKICAgICBlbmNvZGVyIDw8IG1fbW9tZW50dW1QaGFzZTsK
KyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVuY29kZXIgPDwgbV9oYXNQcmVjaXNl
U2Nyb2xsaW5nRGVsdGFzOwogICAgIGVuY29kZXIgPDwgbV9zY3JvbGxDb3VudDsKICAgICBlbmNv
ZGVyIDw8IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhOwpAQCAtMTA0LDExICsxMjAsMTMg
QEAgYm9vbCBXZWJXaGVlbEV2ZW50OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29k
ZXIsIFdlYldoZWVsRXZlbnQmIHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHQubV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV9waGFzZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV9tb21lbnR1bVBo
YXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV9zY3Jv
bGxDb3VudCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdl
YldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJX
aGVlbEV2ZW50R3RrLmNwcAppbmRleCBiMzY3NjEyLi41Y2FmM2QyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKQEAgLTM3
LDggKzM3LDE0IEBAIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoR2Rr
RXZlbnQqIGV2ZW50KQogewogfQogCitOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVl
bEV2ZW50KEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UsIFdlYldo
ZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCisgICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudCwgcGhhc2UsIG1vbWVudHVtUGhh
c2UpKQorICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudCkpCit7Cit9CisK
IE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2Vi
V2hlZWxFdmVudCYgZXZlbnQpCi0gICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6
Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpKSkKKyAgICA6IFdlYldoZWVs
RXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50Lm5hdGl2ZUV2
ZW50KCksIGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSkpCiAgICAgLCBtX25h
dGl2ZUV2ZW50KGdka19ldmVudF9jb3B5KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQogewogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCmluZGV4IDJkNjYz
OTMuLjQyM2M0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFj
dG9yeS5jcHAKQEAgLTE0Myw2ICsxNDMsMjcgQEAgV2ViTW91c2VFdmVudCBXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBpbnQgY3UKIAog
V2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3Qg
R2RrRXZlbnQqIGV2ZW50KQogeworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDIwLCAwKQorICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0g
Z2RrX2V2ZW50X2lzX3Njcm9sbF9zdG9wX2V2ZW50KGV2ZW50KSA/CisgICAgICAgIFdlYldoZWVs
RXZlbnQ6OlBoYXNlOjpQaGFzZUVuZGVkIDoKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6
OlBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAgZG91YmxlIGRlbHRhWCwgZGVsdGFZOworICAgIGdk
a19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhldmVudCwgJmRlbHRhWCwgJmRlbHRhWSk7CisgICAg
V2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9PSBH
REtfU0NST0xMX1NNT09USCAmJiAhZGVsdGFYICYmICFkZWx0YVkgPworICAgICAgICBXZWJXaGVl
bEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCA6CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNl
OjpQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNlbHNlCisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2Ug
cGhhc2UgPSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworI2VuZGlmIC8vIEdU
S19BUElfVkVSU0lPTl8yCisKKyAgICByZXR1cm4gY3JlYXRlV2ViV2hlZWxFdmVudChldmVudCwg
cGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUpOworfQorCitXZWJXaGVlbEV2
ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCog
ZXZlbnQsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBt
b21lbnR1bVBoYXNlKQorewogICAgIGRvdWJsZSB4LCB5LCB4Um9vdCwgeVJvb3Q7CiAgICAgZ2Rr
X2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7CiAgICAgZ2RrX2V2ZW50X2dldF9yb290
X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3QpOwpAQCAtMTc5LDEzICsyMDAsMTUgQEAgV2Vi
V2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2Rr
RXZlbnQqIGV2ZW50KQogICAgIEZsb2F0U2l6ZSBkZWx0YSh3aGVlbFRpY2tzLndpZHRoKCkgKiBz
dGVwLCB3aGVlbFRpY2tzLmhlaWdodCgpICogc3RlcCk7CiAKICAgICByZXR1cm4gV2ViV2hlZWxF
dmVudChXZWJFdmVudDo6V2hlZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQo
eCwgeSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQoeFJvb3QsIHlSb290KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICB3aGVlbFRpY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNj
cm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVy
c0ZvckV2ZW50KGV2ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfZXZlbnRfZ2V0
X3RpbWUoZXZlbnQpKTsKKyAgICAgICAgSW50UG9pbnQoeCwgeSksCisgICAgICAgIEludFBvaW50
KHhSb290LCB5Um9vdCksCisgICAgICAgIGRlbHRhLAorICAgICAgICB3aGVlbFRpY2tzLAorICAg
ICAgICBwaGFzZSwKKyAgICAgICAgbW9tZW50dW1QaGFzZSwKKyAgICAgICAgV2ViV2hlZWxFdmVu
dDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCisgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2
ZW50KSwKKyAgICAgICAgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CiB9CiAKIFdlYktleWJv
YXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdk
a0V2ZW50KiBldmVudCwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3Np
dGlvblJlc3VsdHMsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaAppbmRleCAyOGI2OTUzLi44ZmU3Y2RjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTM4LDYgKzM4
LDcgQEAgY2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViTW91
c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KGNvbnN0IEdka0V2ZW50KiwgaW50KTsKICAgICBz
dGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50Kik7
CisgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtF
dmVudCosIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1
bVBoYXNlKTsKICAgICBzdGF0aWMgV2ViS2V5Ym9hcmRFdmVudCBjcmVhdGVXZWJLZXlib2FyZEV2
ZW50KGNvbnN0IEdka0V2ZW50KiwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRzJiwg
VmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAg
ICBzdGF0aWMgV2ViVG91Y2hFdmVudCBjcmVhdGVXZWJUb3VjaEV2ZW50KGNvbnN0IEdka0V2ZW50
KiwgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQb2ludD4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGUxNDI5NjkuLmM3YzUyZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xODM2LDcgKzE4MzYsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2
ZW50JiBldmVudCkKIAogICAgIGlmICghbV9jdXJyZW50bHlQcm9jZXNzZWRXaGVlbEV2ZW50cy5p
c0VtcHR5KCkpIHsKICAgICAgICAgbV93aGVlbEV2ZW50UXVldWUuYXBwZW5kKGV2ZW50KTsKLSAg
ICAgICAgaWYgKG1fd2hlZWxFdmVudFF1ZXVlLnNpemUoKSA8IHdoZWVsRXZlbnRRdWV1ZVNpemVU
aHJlc2hvbGQpCisgICAgICAgIGlmICghc2hvdWxkUHJvY2Vzc1doZWVsRXZlbnROb3coZXZlbnQp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBUaGUgcXVldWUgaGFzIHRvbyBtYW55
IHdoZWVsIGV2ZW50cywgc28gcHVzaCBhIG5ldyBldmVudC4KICAgICB9CkBAIC0xODc3LDYgKzE4
NzcsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVs
RXZlbnQmIGV2ZW50KQogICAgIG1fcHJvY2Vzcy0+aXNSZXNwb25zaXZlKG51bGxwdHIpOwogfQog
Citib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxkUHJvY2Vzc1doZWVsRXZlbnROb3coY29uc3QgV2Vi
V2hlZWxFdmVudCYgZXZlbnQpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIERv
bid0IHF1ZXVlIGV2ZW50cyByZXByZXNlbnRpbmcgYSBub24tdHJpdmlhbCBzY3JvbGxpbmcgcGhh
c2UgdG8KKyAgICAvLyBhdm9pZCBoYXZpbmcgdGhlbSB0cmFwcGVkIGluIHRoZSBxdWV1ZSwgcG90
ZW50aWFsbHkgcHJldmVudGluZyBhCisgICAgLy8gc2Nyb2xsaW5nIHNlc3Npb24gdG8gYmVnaW5u
aW5nIG9yIGVuZCBjb3JyZWN0bHkuCisgICAgLy8gVGhpcyBpcyBvbmx5IG5lZWRlZCBieSBwbGF0
Zm9ybXMgd2hvc2UgV2ViV2hlZWxFdmVudCBoYXMgdGhpcyBwaGFzZQorICAgIC8vIGluZm9ybWF0
aW9uIChDb2NvYSBhbmQgR1RLKykgYnV0IENvY29hIHdhcyBmaW5lIHdpdGhvdXQgaXQuCisgICAg
aWYgKGV2ZW50LnBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZQorICAg
ICAgICB8fCBldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5n
ZWQKKyAgICAgICAgfHwgZXZlbnQubW9tZW50dW1QaGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBo
YXNlOjpQaGFzZU5vbmUKKyAgICAgICAgfHwgZXZlbnQubW9tZW50dW1QaGFzZSgpID09IFdlYldo
ZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworI2VuZGlmCisgICAgaWYgKG1fd2hlZWxFdmVu
dFF1ZXVlLnNpemUoKSA+PSB3aGVlbEV2ZW50UXVldWVTaXplVGhyZXNob2xkKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQog
ewogICAgIGlmICghaXNWYWxpZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCmluZGV4IDg3NzI2ZTIuLjQyMmQwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKQEAgLTE0NjMsNiArMTQ2Myw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBy
b2Nlc3NOZXh0UXVldWVkV2hlZWxFdmVudCgpOwogICAgIHZvaWQgc2VuZFdoZWVsRXZlbnQoY29u
c3QgV2ViV2hlZWxFdmVudCYpOworICAgIGJvb2wgc2hvdWxkUHJvY2Vzc1doZWVsRXZlbnROb3co
Y29uc3QgV2ViV2hlZWxFdmVudCYpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
ICAgICB2b2lkIHVwZGF0ZVRvdWNoRXZlbnRUcmFja2luZyhjb25zdCBXZWJUb3VjaEV2ZW50Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIu
Y3BwCmluZGV4IDdlMTU3N2MuLjkzNjk5OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZUNvbnRyb2xsZXIoV2Vi
UGFnZVByb3h5JiBwYWdlKQogICAgIDogbV9kcmFnR2VzdHVyZShwYWdlKQorICAgICwgbV9zd2lw
ZUdlc3R1cmUocGFnZSkKICAgICAsIG1fem9vbUdlc3R1cmUocGFnZSkKIHsKIH0KQEAgLTQ5LDEz
ICs1MCwxNCBAQCBib29sIEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChjb25zdCBHZGtF
dmVudCogZXZlbnQpCiB7CiAgICAgYm9vbCB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgPSBpc1Byb2Nl
c3NpbmdHZXN0dXJlcygpOwogICAgIG1fZHJhZ0dlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwor
ICAgIG1fc3dpcGVHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKICAgICBtX3pvb21HZXN0dXJl
LmhhbmRsZUV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPnR5cGUgPT0gR0RLX1RPVUNI
X0VORCA/IHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA6IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7CiB9
CiAKIGJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fem9vbUdlc3R1cmUu
aXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fc3dp
cGVHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0FjdGl2ZSgpOwogfQogCiBH
ZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6R2VzdHVyZShHdGtHZXN0dXJlKiBnZXN0dXJlLCBX
ZWJQYWdlUHJveHkmIHBhZ2UpCkBAIC03NSwyMCArNzcsNDAgQEAgdm9pZCBHZXN0dXJlQ29udHJv
bGxlcjo6R2VzdHVyZTo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAgIGd0
a19ldmVudF9jb250cm9sbGVyX2hhbmRsZV9ldmVudChHVEtfRVZFTlRfQ09OVFJPTExFUihtX2dl
c3R1cmUuZ2V0KCkpLCBldmVudCk7CiB9CiAKLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdH
ZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJs
ZSB5KQorc3RhdGljIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0ZVNjcm9sbEV2ZW50KGNvbnN0
IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgZGVsdGFYLCBkb3Vi
bGUgZGVsdGFZLCBnYm9vbGVhbiBpc1N0b3ApCiB7Ci0gICAgQVNTRVJUKG1faW5EcmFnKTsKICAg
ICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudChnZGtfZXZlbnRfbmV3KEdES19TQ1JP
TEwpKTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsK
LSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnggPSBtX3N0YXJ0LngoKTsKLSAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLnkgPSBtX3N0YXJ0LnkoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnggPSB4
OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IHk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9s
bC54X3Jvb3QgPSBldmVudC0+dG91Y2gueF9yb290OwogICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwu
eV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRp
cmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOwotICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVs
dGFfeCA9IChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KTsKLSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kgPSAobV9vZmZzZXQueSgpIC0geSkg
LyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9s
bC5kZWx0YV94ID0gZGVsdGFYOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IGRl
bHRhWTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnRvdWNoLnN0YXRl
OwotICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xs
RXZlbnQuZ2V0KCkpKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAgICBzY3Jv
bGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBpc1N0b3A7CisjZW5kaWYKKyAgICByZXR1cm4gc2Ny
b2xsRXZlbnQ7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpzdGFy
dERyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVCghbV9pbkRyYWcpOwor
ICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQo
ZXZlbnQsIG1fc3RhcnQueCgpLCBtX3N0YXJ0LnkoKSwgMCwgMCwgRkFMU0UpOworICAgIG1fcGFn
ZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCks
IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6
UGhhc2VOb25lKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpo
YW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5KQorewor
ICAgIEFTU0VSVChtX2luRHJhZyk7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZl
bnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVudCwKKyAgICAgICAgbV9zdGFydC54KCksIG1fc3Rh
cnQueSgpLAorICAgICAgICAobV9vZmZzZXQueCgpIC0geCkgLyBTY3JvbGxiYXI6OnBpeGVsc1Bl
ckxpbmVTdGVwKCksCisgICAgICAgIChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwKKyAgICAgICAgRkFMU0UpOworICAgIG1fcGFnZS5oYW5kbGVXaGVl
bEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZl
bnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUp
KTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZVRhcChj
b25zdCBHZGtFdmVudCogZXZlbnQpCkBAIC0xMjgsNiArMTUwLDcgQEAgdm9pZCBHZXN0dXJlQ29u
dHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91
YmxlIHgsIGQKICAgICB1bnNpZ25lZCBkZWxheTsKICAgICBnX29iamVjdF9nZXQoZ3RrX3dpZGdl
dF9nZXRfc2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUiLCAmZGVsYXksIG51
bGxwdHIpOwogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RhcnRPbmVTaG90
KGRlbGF5IC8gMTAwMC4wKTsKKyAgICBkcmFnR2VzdHVyZS0+c3RhcnREcmFnKGd0a19nZXN0dXJl
X2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7CiB9CiAKIHZvaWQgR2VzdHVyZUNv
bnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBk
b3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCkBAIC0xNDksMTEgKzE3Miwx
NCBAQCB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0
dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsCiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFn
R2VzdHVyZTo6ZW5kKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSog
c2VxdWVuY2UsIEd0a0dlc3R1cmUqIGdlc3R1cmUpCiB7CiAgICAgZHJhZ0dlc3R1cmUtPm1fbG9u
Z1ByZXNzVGltZW91dC5zdG9wKCk7CisgICAgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVl
bmNlKGdlc3R1cmUsIHNlcXVlbmNlKSkgeworICAgICAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUo
Z2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcpIHsKICAgICAgICAgZHJhZ0dlc3R1
cmUtPmhhbmRsZVRhcChndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5j
ZSkpOwogICAgICAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NF
UVVFTkNFX0RFTklFRCk7Ci0gICAgfSBlbHNlIGlmICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1
ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpCi0gICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShn
ZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsKKyAgICB9CiB9CiAKIHZvaWQgR2Vz
dHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpsb25nUHJlc3NGaXJlZCgpCkBAIC0xNzIsNiAr
MTk4LDMwIEBAIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1cmUoV2Vi
UGFnZVByb3h5JiBwYWdlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUu
Z2V0KCksICJlbmQiLCBHX0NBTExCQUNLKGVuZCksIHRoaXMpOwogfQogCit2b2lkIEdlc3R1cmVD
b250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0TW9tZW50dW1TY3JvbGwoY29uc3QgR2RrRXZl
bnQqIGV2ZW50LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZKQoreworICAgIEdV
bmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQoZXZlbnQs
IGV2ZW50LT50b3VjaC54LCBldmVudC0+dG91Y2gueSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVksIFRS
VUUpOworICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Ny
b2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUsIFdlYldoZWVs
RXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6
OlN3aXBlR2VzdHVyZTo6c3dpcGUoU3dpcGVHZXN0dXJlKiBzd2lwZUdlc3R1cmUsIGRvdWJsZSB2
ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCit7CisgICAg
R2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJl
bnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKKyAgICBpZiAoIWd0a19n
ZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQorICAgICAgICByZXR1
cm47CisKKyAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVu
Y2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAgIHN3aXBlR2VzdHVyZS0+c3Rh
cnRNb21lbnR1bVNjcm9sbChndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1
ZW5jZSksIHZlbG9jaXR5WCwgdmVsb2NpdHlZKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6OlN3
aXBlR2VzdHVyZTo6U3dpcGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IEdlc3R1
cmUoZ3RrX2dlc3R1cmVfc3dpcGVfbmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKK3sKKyAg
ICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RLX0dFU1RVUkVfU0lOR0xFKG1f
Z2VzdHVyZS5nZXQoKSksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dl
c3R1cmUuZ2V0KCksICJzd2lwZSIsIEdfQ0FMTEJBQ0soc3dpcGUpLCB0aGlzKTsKK30KKwogSW50
UG9pbnQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpjZW50ZXIoKSBjb25zdAogewog
ICAgIGRvdWJsZSB4LCB5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9HZXN0dXJlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0
dXJlQ29udHJvbGxlci5oCmluZGV4IDg2NzkyZGYuLmU5NjAzMWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKQEAgLTY3LDYgKzY3LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgRHJhZ0dlc3R1cmUoV2ViUGFnZVByb3h5Jik7CiAKICAgICBw
cml2YXRlOgorICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIGRyYWcgc3RhcnRlZCwgYWxsb3dpbmcg
dG8gc3RvcCBraW5ldGljIGRlY2VsZXJhdGlvbi4KKyAgICAgICAgdm9pZCBzdGFydERyYWcoY29u
c3QgR2RrRXZlbnQqKTsKICAgICAgICAgdm9pZCBoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50Kiwg
ZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICAgICAgdm9pZCBoYW5kbGVUYXAoY29uc3QgR2RrRXZl
bnQqKTsKICAgICAgICAgdm9pZCBsb25nUHJlc3NGaXJlZCgpOwpAQCAtODIsNiArODQsMTYgQEAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBtX2luRHJhZzsKICAgICB9OwogCisgICAgY2xhc3MgU3dp
cGVHZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
U3dpcGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9p
ZCBzdGFydE1vbWVudHVtU2Nyb2xsKGNvbnN0IEdka0V2ZW50KiwgZG91YmxlIHZlbG9jaXR5WCwg
ZG91YmxlIHZlbG9jaXR5WSk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUoU3dpcGVHZXN0
dXJlKiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSopOwor
ICAgIH07CisKICAgICBjbGFzcyBab29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIFpvb21HZXN0dXJlKFdlYlBhZ2VQcm94eSYpOwpAQCAtMTAx
LDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIERyYWdHZXN0dXJlIG1fZHJhZ0dl
c3R1cmU7CisgICAgU3dpcGVHZXN0dXJlIG1fc3dpcGVHZXN0dXJlOwogICAgIFpvb21HZXN0dXJl
IG1fem9vbUdlc3R1cmU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312397</attachid>
            <date>2017-06-09 00:07:51 -0700</date>
            <delta_ts>2017-06-09 01:02:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155750-20170609160750.patch</filename>
            <type>text/plain</type>
            <size>51335</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE3OTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdhYzc1NTRjODA3ZmMw
M2QwMmVhYzJlNDNiMWVmZmZkYmM3YmJjZi4uOTllOTQ2MjAyNzdjMWVlNjJmNDlmNzdmMTFhMTNh
ZmVlNWEwNGQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA2LTA5ICBBZHJp
ZW4gUGxhemFzICA8YXBsYXphc0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBraW5l
dGljIHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU1NzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2FybG9zIEdhcmNpYSBDYW1wb3Mu
CisKKyAgICAgICAgUGF0Y2ggYnkgQWRyaWVuIFBsYXphcyBhbmQgWXVzdWtlIFN1enVraS4KKwor
ICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgc2Nyb2xsaW5nIGFuaW1hdGlv
biBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGluZzsgaXQgaXMgYmFzZWQgb24g
R1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlwZS4KKworICAgICAgICBBZGQg
dGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5kIHN3aXBlIHZlbG9jaXR5IHRv
IFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRpbmcgb24gd2hldGhlciB0aGUg
c2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBhIHN3aXBlLCB0aGUgc2Nyb2xs
IGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAgdGhlIHN3aXBlIHZlbG9jaXR5
IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3IgdXNlIHRoZSBvbmUgZnJvbSB0
aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAgICAgbW9tZW50dW0gc2Nyb2xs
aW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnQ6OnNldEhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1XaGVlbEV2ZW50OjpwaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVs
RXZlbnQ6Om1vbWVudHVtUGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50Ojppc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbjo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbjo6dXBkYXRlVmlzaWJs
ZUxlbmd0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uOjpzZXRDdXJyZW50
UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKGNsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dGlvbktpbmV0aWM6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0YTo6YW5pbWF0ZVNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25L
aW5ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6On5TY3Jv
bGxBbmltYXRpb25LaW5ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktp
bmV0aWM6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0
aW9uVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24u
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6c3dpcGVWZWxvY2l0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6Y29tcHV0ZVZlbG9j
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpoYW5kbGVXaGVlbEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJl
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6dXBkYXRlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRI
b3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0
b3JHdGsuaDoKKwogMjAxNy0wNi0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IHVudXNlZCBwYXJhbWV0ZXIgd2Fy
bmluZyBhZnRlciByMjE3OTU1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGMyNzYyODljNWIyMWE4MjFlMmE2N2M5
NWY4ZTAyYjI0ZDk3ODgxNTMuLjJhYjA1ZDU5MWE5ZWQ2NGJiMWJhYmI3MWEzYjM2YTcwMWQ3MmJh
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxNy0wNi0wOSAgQWRyaWVuIFBsYXph
cyAgPGFwbGF6YXNAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQga2luZXRpYyBzY3Jv
bGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisgICAg
ICAgIFBhdGNoIGJ5IEFkcmllbiBQbGF6YXMgYW5kIFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAg
QWRkIHRoZSBub3Rpb24gb2YgcGhhc2UgYW5kIG1vbWVudHVtIHBoYXNlIHRvIFdlYldoZWVsRXZl
bnQuCisKKyAgICAgICAgTWFrZSBXZWJXaGVlbEV2ZW50IG1hbmFnZSB0aGUgJ2lzX3N0b3AnIGF0
dHJpYnV0ZSBvZiBHZGtFdmVudFNjcm9sbCB0byBjcmVhdGUgdGhlIGNvcnJlc3BvbmRpbmcgV2Vi
V2hlZWxFdmVudAorICAgICAgICB3aXRoIHRoZSBjb3JyZWN0IHBoYXNlcyBhbmQgZGVsdGFzLgor
CisgICAgICAgIE1ha2UgR2VzdHVyZUNvbnRyb2xsZXIgbWFuYWdlIHN3aXBlcyB0byBjcmVhdGUg
dGhlIGNvcnJlc3BvbmRpbmcgV2ViV2hlZWxFdmVudCB3aXRoIHRoZSBjb3JyZWN0IHBoYXNlcyBh
bmQKKyAgICAgICAgZGVsdGFzLgorCisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZl
bnQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2Vi
RXZlbnRDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0MlBsYXRmb3JtV2hl
ZWxFdmVudDo6V2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL1dl
YldoZWVsRXZlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50OjpXZWJXaGVl
bEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvZ3Rr
L05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJX
aGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dl
YkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rvcnku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzaG91bGRQcm9jZXNzV2hlZWxFdmVudE5vdyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZUNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6aXNQcm9jZXNzaW5nR2Vz
dHVyZXMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTY3JvbGxFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKToKKyAgICAg
ICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKToK
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbik6
CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6ZW5kKToK
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3RhcnRN
b21lbnR1bVNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpTd2lw
ZUdlc3R1cmU6OnN3aXBlKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OlN3
aXBlR2VzdHVyZTo6U3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1
cmVDb250cm9sbGVyLmg6CisKIDIwMTctMDYtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVzZSBBUEk6OkZvcm1DbGllbnQgaW5z
dGVhZCBvZiB0aGUgQyBBUEkgaW4gV2ViS2l0Rm9ybUNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQppbmRleCAyNDY5OWZkYzM0NDY3NDAyN2RmZjQ4MWE4M2ZhMzI0ZWUxZWZiN2JlLi45MGUx
ZmUxYWVlMDFhZTJhZjMyYmFmMTczMzBkYmYyMDBmNTg1MjdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQpAQCAtNjMsNiArNjMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VUaHJlYWRMaW51eC5jcHAKIAogICAgIHBsYXRmb3Jt
L0tpbGxSaW5nTm9uZS5jcHAKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNw
cAogICAgIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwCiAgICAgcGxhdGZvcm0vVXNlckFn
ZW50UXVpcmtzLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxF
dmVudC5oCmluZGV4IDQ1ZGQ4MDZlMzhhYzBkZWUwMzc5N2MxOGVlNmI1ZjhkMWQ4MmI0YTkuLjZk
NDU4YmVmNGI4MDRmNTJiZGUyOTRkMTY3OWIxNjEzZmM5MDI0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC00OCw3ICs0OCw3IEBAIGVudW0g
UGxhdGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHkgOiB1aW50OF90IHsKICAgICBTY3JvbGxCeVBp
eGVsV2hlZWxFdmVudCwKIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShD
T0NPQSkgfHwgUExBVEZPUk0oR1RLKQogCiBlbnVtIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIDog
dWludDhfdCB7CiAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lID0gMCwKQEAgLTExNywx
MyArMTE3LDEyIEBAIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudCA6IHB1YmxpYyBQbGF0Zm9ybUV2
ZW50IHsKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICBleHBsaWNpdCBQbGF0Zm9ybVdoZWVsRXZl
bnQoR2RrRXZlbnRTY3JvbGwqKTsKKyAgICBGbG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25z
dDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgYm9vbCBoYXNQcmVjaXNlU2Ny
b2xsaW5nRGVsdGFzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFz
OyB9CiAgICAgdm9pZCBzZXRIYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGJvb2wgaGFzUHJlY2lz
ZVNjcm9sbGluZ0RlbHRhcykgeyBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBoYXNQcmVj
aXNlU2Nyb2xsaW5nRGVsdGFzOyB9Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2Uo
KSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2Ug
bW9tZW50dW1QaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9tZW50dW1QaGFzZTsgfQogICAgIHVu
c2lnbmVkIHNjcm9sbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3VudDsgfQogICAg
IGZsb2F0IHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX3Vu
YWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7IH0KICAgICBmbG9hdCB1bmFjY2VsZXJhdGVkU2Ny
b2xsaW5nRGVsdGFZKCkgY29uc3QgeyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVs
dGFZOyB9CkBAIC0xMzEsMTIgKzEzMCwxNyBAQCBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQgOiBw
dWJsaWMgUGxhdGZvcm1FdmVudCB7CiAgICAgYm9vbCBzaG91bGRDb25zaWRlckxhdGNoaW5nKCkg
Y29uc3Q7CiAgICAgYm9vbCBzaG91bGRSZXNldExhdGNoaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBp
c0VuZE9mTW9tZW50dW1TY3JvbGwoKSBjb25zdDsKLSAgICBib29sIGlzRW5kT2ZOb25Nb21lbnR1
bVNjcm9sbCgpIGNvbnN0OwotICAgIGJvb2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9s
bCgpIGNvbnN0OwogI2Vsc2UKICAgICBib29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExB
VEZPUk0oR1RLKQorICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9waGFzZTsgfQorICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhh
c2UoKSBjb25zdCB7IHJldHVybiBtX21vbWVudHVtUGhhc2U7IH0KKyAgICBib29sIGlzRW5kT2ZO
b25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OworICAgIGJvb2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21l
bnR1bVNjcm9sbCgpIGNvbnN0OworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50KEhXTkQsIFdQQVJBTSwgTFBBUkFNLCBib29sIGlzTW91c2VIV2hlZWwp
OwogICAgIFBsYXRmb3JtV2hlZWxFdmVudChIV05ELCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBj
b25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbik7CkBAIC0xNTUsMTAgKzE1OSwxMiBAQCBjbGFzcyBQ
bGF0Zm9ybVdoZWVsRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1FdmVudCB7CiAgICAgLy8gU2Nyb2xs
aW5nIHZlbG9jaXR5IGluIHBpeGVscyBwZXIgc2Vjb25kLgogICAgIEZsb2F0U2l6ZSBtX3Njcm9s
bGluZ1ZlbG9jaXR5OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCBtX2hhc1ByZWNp
c2VTY3JvbGxpbmdEZWx0YXMgeyBmYWxzZSB9OworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFU
Rk9STShHVEspCiAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZSB7IFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlTm9uZSB9OwogICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fbW9t
ZW50dW1QaGFzZSB7IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSB9OworI2VuZGlmCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgeyBm
YWxzZSB9OwogICAgIHVuc2lnbmVkIG1fc2Nyb2xsQ291bnQgeyAwIH07CiAgICAgZmxvYXQgbV91
bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYIHsgMCB9OwogICAgIGZsb2F0IG1fdW5hY2NlbGVy
YXRlZFNjcm9sbGluZ0RlbHRhWSB7IDAgfTsKQEAgLTE5MSw2ICsxOTcsMTAgQEAgaW5saW5lIGJv
b2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBjb25zdAogICAg
IHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAmJiBtX21vbWVu
dHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsKIH0KIAorI2VuZGlmCisK
KyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQorCiBpbmxpbmUgYm9vbCBQbGF0
Zm9ybVdoZWVsRXZlbnQ6OmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCAmJiBtX21vbWVu
dHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lOwpAQCAtMjAwLDcgKzIxMCw2
IEBAIGlubGluZSBib29sIFBsYXRmb3JtV2hlZWxFdmVudDo6aXNUcmFuc2l0aW9uaW5nVG9Nb21l
bnR1bVNjcm9sbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZUJlZ2FuOwogfQotCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaAppbmRleCAzOTI5OTk3NzJiMzRiNWIz
MGQyMzU5MWU1ZjYzZjdkYjNiOGFiOTA2Li4yZTVmNjNiY2VmMmJmZGZjZmY5MjE2ZDk4NmIwZjQz
NjBjNjgwYjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaApA
QCAtMzYsMTAgKzM2LDEwIEBAIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsQW5p
bWF0aW9uIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRpb24oKSB7IH07Ci0g
ICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
Lyogc3RlcCAqLywgZmxvYXQgLyogbXVsdGlwbGllciAqLykgeyByZXR1cm4gdHJ1ZTsgfTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlzaWJs
ZUxlbmd0aHMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmKSB7IH07CiAgICAgdmlydHVhbCB2b2lkIHNlcnZpY2VBbmltYXRpb24oKSB7IH07CiAK
IHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdGlvbktpbmV0aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
aW9uS2luZXRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhhNTUxMGQ5ZWZkNzE3YTBjYjE0YmFjYTA0MjU2
NWQ5MmNkNWMzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdGlvbktpbmV0aWMuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25LaW5ldGljLmgiCisKKyNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCisvKgorICogUGVyQXhp
c0RhdGEgaXMgYSBwb3J0IG9mIEd0a0tpbmV0aWNTY3JvbGxpbmcgYXMgb2YgR1RLKyAzLjIwLAor
ICogbWltaWNraW5nIGl0cyBBUEkgYW5kIGl0cyBiZWhhdmlvci4KKyAqCisgKiBBbGwgb3VyIGN1
cnZlcyBhcmUgc2Vjb25kIGRlZ3JlZSBsaW5lYXIgZGlmZmVyZW50aWFsIGVxdWF0aW9ucywgYW5k
CisgKiBzbyB0aGV5IGNhbiBhbHdheXMgYmUgd3JpdHRlbiBhcyBsaW5lYXIgY29tYmluYXRpb25z
IG9mIDIgYmFzZQorICogc29sdXRpb25zLiBjb2VmMSBhbmQgY29lZjIgYXJlIHRoZSBjb2VmZmlj
aWVudHMgdG8gdGhlc2UgdHdvIGJhc2UKKyAqIHNvbHV0aW9ucywgYW5kIGFyZSBjb21wdXRlZCBm
cm9tIHRoZSBpbml0aWFsIHBvc2l0aW9uIGFuZCB2ZWxvY2l0eS4KKyAqCisgKiBJbiB0aGUgY2Fz
ZSBvZiBzaW1wbGUgZGVjZWxlcmF0aW9uLCB0aGUgZGlmZmVyZW50aWFsIGVxdWF0aW9uIGlzCisg
KgorICogICB5JycgPSAtbXknCisgKgorICogV2l0aCBtIHRoZSByZXNpc3RlbmNlIGZhY3Rvci4g
Rm9yIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgMgorICogYmFzZSBzb2x1dGlvbnM6CisgKgor
ICogICBmMSh4KSA9IDEKKyAqICAgZjIoeCkgPSBleHAoLW14KQorICoKKyAqIEluIHRoZSBjYXNl
IG9mIG92ZXJzaG9vdCwgdGhlIGRpZmZlcmVudGlhbCBlcXVhdGlvbiBpcworICoKKyAqICAgeScn
ID0gLW15JyAtIGt5CisgKgorICogV2l0aCBtIHRoZSByZXNpc3RhbmNlLCBhbmQgayB0aGUgc3By
aW5nIHN0aWZmbmVzcyBjb25zdGFudC4gV2UgbGV0CisgKiBrID0gbV4yIC8gNCwgc28gdGhhdCB0
aGUgc3lzdGVtIGlzIGNyaXRpY2FsbHkgZGFtcGVkIChpZSwgcmV0dXJucyB0byBpdHMKKyAqIGVx
dWlsaWJyaXVtIHBvc2l0aW9uIGFzIHF1aWNrbHkgYXMgcG9zc2libGUsIHdpdGhvdXQgb3NjaWxs
YXRpbmcpLCBhbmQgb2Zmc2V0CisgKiB0aGUgd2hvbGUgdGhpbmcsIHN1Y2ggdGhhdCB0aGUgZXF1
aWxpYnJpdW0gcG9zaXRpb24gaXMgYXQgMC4gVGhpcyBnaXZlcyB0aGUKKyAqIGJhc2Ugc29sdXRp
b25zCisgKgorICogICBmMSh4KSA9IGV4cCgtbXggLyAyKQorICogICBmMih4KSA9IHQgZXhwKC1t
eCAvIDIpCisgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZSBkZWNlbEZyaWN0aW9uID0gNDsKK3N0
YXRpYyBjb25zdCBkb3VibGUgZnJhbWVSYXRlID0gNjA7CitzdGF0aWMgY29uc3QgU2Vjb25kcyB0
aWNrVGltZSA9IDFfcyAvIGZyYW1lUmF0ZTsKK3N0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1U
aW1lckludGVydmFsIHsgMV9tcyB9OworCitzdGF0aWMgaW5saW5lIGRvdWJsZSBjbGFtcChkb3Vi
bGUgeCwgZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpCit7CisgICAgQVNTRVJUKGxvdyA8PSBoaWdo
KTsKKworICAgIHJldHVybiAoeCA+IGhpZ2gpID8gaGlnaCA6ICgoeCA8IGxvdykgPyBsb3cgOiB4
KTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQ
ZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoZG91YmxlIGxvd2VyLCBkb3VibGUgdXBwZXIsIGRvdWJs
ZSBpbml0aWFsUG9zaXRpb24sIGRvdWJsZSBpbml0aWFsVmVsb2NpdHkpCisgICAgOiBtX2xvd2Vy
KGxvd2VyKQorICAgICwgbV91cHBlcih1cHBlcikKKyAgICAsIG1fY29lZjEoaW5pdGlhbFZlbG9j
aXR5IC8gZGVjZWxGcmljdGlvbiArIGluaXRpYWxQb3NpdGlvbikKKyAgICAsIG1fY29lZjIoLWlu
aXRpYWxWZWxvY2l0eSAvIGRlY2VsRnJpY3Rpb24pCisgICAgLCBtX3Bvc2l0aW9uKGNsYW1wKGlu
aXRpYWxQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKSkKKyAgICAsIG1fdmVsb2NpdHkoaW5pdGlhbFBv
c2l0aW9uIDwgbG93ZXIgfHwgaW5pdGlhbFBvc2l0aW9uID4gdXBwZXIgPyAwIDogaW5pdGlhbFZl
bG9jaXR5KQoreworfQorCitib29sIFNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4aXNEYXRh
OjphbmltYXRlU2Nyb2xsKFNlY29uZHMgdGltZURlbHRhKQoreworICAgIG1fZWxhcHNlZFRpbWUg
Kz0gdGltZURlbHRhOworCisgICAgZG91YmxlIGV4cG9uZW50aWFsUGFydCA9IGV4cCgtZGVjZWxG
cmljdGlvbiAqIG1fZWxhcHNlZFRpbWUudmFsdWUoKSk7CisgICAgbV9wb3NpdGlvbiA9IG1fY29l
ZjEgKyBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0OworICAgIG1fdmVsb2NpdHkgPSAtZGVjZWxG
cmljdGlvbiAqIG1fY29lZjIgKiBleHBvbmVudGlhbFBhcnQ7CisKKyAgICBpZiAobV9wb3NpdGlv
biA8IG1fbG93ZXIpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9IG1fbG93ZXI7CisgICAgICAgIG1f
dmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSBpZiAobV9wb3NpdGlvbiA+IG1fdXBwZXIpIHsKKyAg
ICAgICAgbV9wb3NpdGlvbiA9IG1fdXBwZXI7CisgICAgICAgIG1fdmVsb2NpdHkgPSAwOworICAg
IH0gZWxzZSBpZiAoZmFicyhtX3ZlbG9jaXR5KSA8IDEpIHsKKyAgICAgICAgbV9wb3NpdGlvbiA9
IHJvdW5kKG1fcG9zaXRpb24pOworICAgICAgICBtX3ZlbG9jaXR5ID0gMDsKKyAgICB9CisKKyAg
ICByZXR1cm4gbV92ZWxvY2l0eTsKK30KKworU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6U2Nyb2xs
QW5pbWF0aW9uS2luZXRpYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIHN0ZDo6ZnVu
Y3Rpb248dm9pZChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9u
KQorICAgIDogU2Nyb2xsQW5pbWF0aW9uKHNjcm9sbGFibGVBcmVhKQorICAgICwgbV9ub3RpZnlQ
b3NpdGlvbkNoYW5nZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0
aW9uKSkKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRpb25LaW5l
dGljOjphbmltYXRpb25UaW1lckZpcmVkKQoreworfQorCitTY3JvbGxBbmltYXRpb25LaW5ldGlj
Ojp+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpCit7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9u
S2luZXRpYzo6c3RvcCgpCit7CisgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CisgICAgbV9o
b3Jpem9udGFsRGF0YSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ZlcnRpY2FsRGF0YSA9IHN0ZDo6
bnVsbG9wdDsKK30KKwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpzdGFydChjb25zdCBG
bG9hdFBvaW50JiBpbml0aWFsUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBi
b29sIG1heUhTY3JvbGwsIGJvb2wgbWF5VlNjcm9sbCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBt
X3Bvc2l0aW9uID0gaW5pdGlhbFBvc2l0aW9uOworCisgICAgaWYgKCF2ZWxvY2l0eS54KCkgJiYg
IXZlbG9jaXR5LnkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1heUhTY3JvbGwpIHsK
KyAgICAgICAgbV9ob3Jpem9udGFsRGF0YSA9IFBlckF4aXNEYXRhKG1fc2Nyb2xsYWJsZUFyZWEu
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpLAorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCksCisgICAgICAgICAgICBpbml0aWFsUG9zaXRp
b24ueCgpLCB2ZWxvY2l0eS54KCkpOworICAgIH0KKyAgICBpZiAobWF5VlNjcm9sbCkgeworICAg
ICAgICBtX3ZlcnRpY2FsRGF0YSA9IFBlckF4aXNEYXRhKG1fc2Nyb2xsYWJsZUFyZWEubWluaW11
bVNjcm9sbFBvc2l0aW9uKCkueSgpLAorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5tYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKS55KCksCisgICAgICAgICAgICBpbml0aWFsUG9zaXRpb24ueSgp
LCB2ZWxvY2l0eS55KCkpOworICAgIH0KKworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGlt
ZTo6bm93KCkgLSB0aWNrVGltZSAvIDIuOworICAgIGFuaW1hdGlvblRpbWVyRmlyZWQoKTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjphbmltYXRpb25UaW1lckZpcmVkKCkKK3sK
KyAgICBNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cisg
ICAgU2Vjb25kcyBkZWx0YVRvTmV4dEZyYW1lID0gMV9zICogY2VpbCgoY3VycmVudFRpbWUgLSBt
X3N0YXJ0VGltZSkudmFsdWUoKSAqIGZyYW1lUmF0ZSkgLyBmcmFtZVJhdGUgLSAoY3VycmVudFRp
bWUgLSBtX3N0YXJ0VGltZSk7CisKKyAgICBpZiAobV9ob3Jpem9udGFsRGF0YSAmJiAhbV9ob3Jp
em9udGFsRGF0YS52YWx1ZSgpLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05leHRGcmFtZSkpCisgICAg
ICAgIG1faG9yaXpvbnRhbERhdGEgPSBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAobV92ZXJ0aWNh
bERhdGEgJiYgIW1fdmVydGljYWxEYXRhLnZhbHVlKCkuYW5pbWF0ZVNjcm9sbChkZWx0YVRvTmV4
dEZyYW1lKSkKKyAgICAgICAgbV92ZXJ0aWNhbERhdGEgPSBzdGQ6Om51bGxvcHQ7CisKKyAgICAv
LyBJZiBvbmUgb2YgdGhlIGF4ZXMgZGlkbid0IGZpbmlzaCBpdHMgYW5pbWF0aW9uIHdlIG11c3Qg
Y29udGludWUgaXQuCisgICAgaWYgKG1faG9yaXpvbnRhbERhdGEgfHwgbV92ZXJ0aWNhbERhdGEp
CisgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6bWF4KG1pbmltdW1U
aW1lckludGVydmFsLCBkZWx0YVRvTmV4dEZyYW1lKSk7CisKKyAgICBkb3VibGUgeCA9IG1faG9y
aXpvbnRhbERhdGEgPyBtX2hvcml6b250YWxEYXRhLnZhbHVlKCkucG9zaXRpb24oKSA6IG1fcG9z
aXRpb24ueCgpOworICAgIGRvdWJsZSB5ID0gbV92ZXJ0aWNhbERhdGEgPyBtX3ZlcnRpY2FsRGF0
YS52YWx1ZSgpLnBvc2l0aW9uKCkgOiBtX3Bvc2l0aW9uLnkoKTsKKyAgICBtX3Bvc2l0aW9uID0g
RmxvYXRQb2ludCh4LCB5KTsKKyAgICBtX25vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKEZs
b2F0UG9pbnQobV9wb3NpdGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTQ1OGM1MzMwNzU0NzVmOWU5MjE3NTkzMDBkNWE2M2NhOWRkNTVjYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMu
aApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbEFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxh
YmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYyBmaW5hbDogcHVibGljIFNj
cm9sbEFuaW1hdGlvbiB7Citwcml2YXRlOgorICAgIGNsYXNzIFBlckF4aXNEYXRhIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFBlckF4aXNEYXRhKGRvdWJsZSBsb3dlciwgZG91YmxlIHVwcGVyLCBk
b3VibGUgaW5pdGlhbFBvc2l0aW9uLCBkb3VibGUgaW5pdGlhbFZlbG9jaXR5KTsKKworICAgICAg
ICBkb3VibGUgcG9zaXRpb24oKSB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisKKyAgICAgICAgYm9v
bCBhbmltYXRlU2Nyb2xsKFNlY29uZHMgdGltZURlbHRhKTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIGRvdWJsZSBtX2xvd2VyIHsgMCB9OworICAgICAgICBkb3VibGUgbV91cHBlciB7IDAgfTsK
KworICAgICAgICBkb3VibGUgbV9jb2VmMSB7IDAgfTsKKyAgICAgICAgZG91YmxlIG1fY29lZjIg
eyAwIH07CisKKyAgICAgICAgU2Vjb25kcyBtX2VsYXBzZWRUaW1lOworICAgICAgICBkb3VibGUg
bV9wb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgZG91YmxlIG1fdmVsb2NpdHkgeyAwIH07CisgICAg
fTsKKworcHVibGljOgorICAgIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEm
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5n
ZWRGdW5jdGlvbik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0aW9uS2luZXRpYygpOworCisg
ICAgdm9pZCBzdGFydChjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsUG9zaXRpb24sIGNvbnN0IEZs
b2F0UG9pbnQmIHZlbG9jaXR5LCBib29sIG1heUhTY3JvbGwsIGJvb2wgbWF5VlNjcm9sbCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhbmltYXRpb25U
aW1lckZpcmVkKCk7CisKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4gbV9u
b3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbjsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGVyQXhp
c0RhdGE+IG1faG9yaXpvbnRhbERhdGE7CisgICAgc3RkOjpvcHRpb25hbDxQZXJBeGlzRGF0YT4g
bV92ZXJ0aWNhbERhdGE7CisKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOworICAgIFRp
bWVyIG1fYW5pbWF0aW9uVGltZXI7CisgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcAppbmRleCBkODI2MDc1YTk5OTE3NmRlYjRk
ZjQ2NmY2NDFhZGM0YjZjZTFjYzBmLi4zYjBlNTkwNmZjZDUwMmNmOWM1ZDdkY2FhOWVjN2EyZDlh
YzIzYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1X
aGVlbEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZv
cm1XaGVlbEV2ZW50R3RrLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogCisjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhci5oIgogI2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTg1LDYgKzg2LDIwIEBAIFBsYXRmb3Jt
V2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKICAg
ICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7CiAgICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZ
OwogCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywg
MjAsIDApCisgICAgbV9waGFzZSA9IGV2ZW50LT5pc19zdG9wID8KKyAgICAgICAgUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VFbmRlZCA6CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hh
bmdlZDsKKyNlbHNlCisgICAgbV9waGFzZSA9IGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9M
TF9TTU9PVEggJiYgIW1fZGVsdGFYICYmICFtX2RlbHRhWSA/CisgICAgICAgIFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlRW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5n
ZWQ7CisjZW5kaWYKKyNlbHNlCisgICAgbV9waGFzZSA9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
Q2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCiAgICAgbV9wb3NpdGlvbiA9
IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2
ZW50LT55KSk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGlu
dD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnlfcm9vdCkpOwogICAg
IG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKQEAgLTk1LDQgKzExMCwx
MCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9s
bCogZXZlbnQpCiAgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CiB9CiAKK0Zsb2F0UG9pbnQgUGxhdGZvcm1XaGVlbEV2ZW50
Ojpzd2lwZVZlbG9jaXR5KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3dpcGluZyB2ZWxvY2l0eSBp
cyBzdG9yZWQgaW4gdGhlIGRlbHRhcyBvZiB0aGUgZXZlbnQgZGVjbGFyaW5nIGl0LgorICAgIHJl
dHVybiBpc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkgPyBGbG9hdFBvaW50KG1fd2hl
ZWxUaWNrc1gsIG1fd2hlZWxUaWNrc1kpIDogRmxvYXRQb2ludCgpOworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcAppbmRleCAx
Yjk1NDgxZjg1YWQyNzI1ZWZhYWU0MGRlMWExZGFlNmQ1NThmNGE4Li5jMmFhOWRjMDFmNzY3ZWVh
OThlMzEzYTg2NGE2YTI3ODJiYThmMDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvckd0ay5oIgogCisjaW5jbHVkZSAi
U2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlvblNtb290
aC5oIgogI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWUuaCIKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29u
c3QgU2Vjb25kcyBvdmVyZmxvd1Njcm9sbGJhcnNBbmltYXRpb25EdXJhdGlvbiB7IDFfcyB9Owog
c3RhdGljIGNvbnN0IFNlY29uZHMgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uSGlkZURlbGF5
IHsgMl9zIH07CitzdGF0aWMgY29uc3QgU2Vjb25kcyBzY3JvbGxDYXB0dXJlVGhyZXNob2xkIHsg
MTUwX21zIH07CiAKIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0
b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiB7CkBAIC01MCw2ICs1
MiwxNCBAQCBTY3JvbGxBbmltYXRvckd0azo6U2Nyb2xsQW5pbWF0b3JHdGsoU2Nyb2xsYWJsZUFy
ZWEmIHNjcm9sbGFibGVBcmVhKQogICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEp
CiAgICAgLCBtX292ZXJsYXlTY3JvbGxiYXJBbmltYXRpb25UaW1lcigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yR3RrOjpvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCkKIHsKKyAgICBt
X2tpbmV0aWNBbmltYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvbktpbmV0
aWM+KG1fc2Nyb2xsYWJsZUFyZWEsIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKKyNp
ZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICAgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9u
KQorICAgICAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3Np
dGlvbik7CisjZW5kaWYKKyAgICAgICAgdXBkYXRlUG9zaXRpb24oV1RGTW92ZShwb3NpdGlvbikp
OworICAgIH0pOworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAgICAgaWYgKHNjcm9s
bGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQogICAgICAgICBlbnN1cmVTbW9vdGhT
Y3JvbGxpbmdBbmltYXRpb24oKTsKQEAgLTYzLDQ4ICs3MywxMDggQEAgU2Nyb2xsQW5pbWF0b3JH
dGs6On5TY3JvbGxBbmltYXRvckd0aygpCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiB2
b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjplbnN1cmVTbW9vdGhTY3JvbGxpbmdBbmltYXRpb24oKQog
ewotICAgIGlmIChtX2FuaW1hdGlvbikKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fYW5pbWF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxB
bmltYXRpb25TbW9vdGg+KG1fc2Nyb2xsYWJsZUFyZWEsIG1fY3VycmVudFBvc2l0aW9uLCBbdGhp
c10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBv
c2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247Ci0gICAgICAgIG1fY3VycmVudFBvc2l0aW9uID0g
V1RGTW92ZShwb3NpdGlvbik7Ci0gICAgICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7
CisgICAgbV9zbW9vdGhBbmltYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlv
blNtb290aD4obV9zY3JvbGxhYmxlQXJlYSwgbV9jdXJyZW50UG9zaXRpb24sIFt0aGlzXShGbG9h
dFBvaW50JiYgcG9zaXRpb24pIHsKKyAgICAgICAgdXBkYXRlUG9zaXRpb24oV1RGTW92ZShwb3Np
dGlvbikpOwogICAgIH0pOwogfQorI2VuZGlmCiAKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKIGJvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZs
b2F0IG11bHRpcGxpZXIpCiB7CiAgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1h
dG9yRW5hYmxlZCgpIHx8IGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UHJlY2lzZVBpeGVsKQogICAg
ICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJp
dHksIHN0ZXAsIG11bHRpcGxpZXIpOwogCiAgICAgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0
aW9uKCk7Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51
bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gbV9zbW9vdGhBbmltYXRpb24t
PnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwogfQor
I2VuZGlmCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCiB7CiAgICAgRmxvYXRQb2ludCBwb3Np
dGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0LCB0
b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigpKSk7Ci0gICAgaWYgKG1f
YW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKyAgICBtX3Njcm9sbEhpc3Rv
cnkuY2xlYXIoKTsKIAotICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50
UG9zaXRpb247Ci0gICAgbV9jdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBub3RpZnlQ
b3NpdGlvbkNoYW5nZWQoZGVsdGEpOworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAg
IGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnNldEN1
cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7CisjZW5kaWYKKworICAgIHVwZGF0ZVBvc2l0aW9uKFdU
Rk1vdmUocG9zaXRpb24pKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvckd0azo6d2lsbEVuZExp
dmVSZXNpemUoKQorRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5
KCkKIHsKLSAgICBpZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVW
aXNpYmxlTGVuZ3RocygpOworICAgIGlmIChtX3Njcm9sbEhpc3RvcnkuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgZG91YmxlIGZpcnN0ID0gbV9zY3JvbGxIaXN0b3J5WzBd
LnRpbWVzdGFtcCgpOworICAgIGRvdWJsZSBsYXN0ID0gbV9zY3JvbGxIaXN0b3J5LnJiZWdpbigp
LT50aW1lc3RhbXAoKTsKKworICAgIGlmIChsYXN0ID09IGZpcnN0KQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgRmxvYXRQb2ludCBhY2N1bURlbHRhOworICAgIGZvciAoY29uc3QgYXV0byYg
c2Nyb2xsRXZlbnQgOiBtX3Njcm9sbEhpc3RvcnkpCisgICAgICAgIGFjY3VtRGVsdGEgKz0gRmxv
YXRQb2ludChzY3JvbGxFdmVudC5kZWx0YVgoKSwgc2Nyb2xsRXZlbnQuZGVsdGFZKCkpOworCisg
ICAgbV9zY3JvbGxIaXN0b3J5LmNsZWFyKCk7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChhY2N1
bURlbHRhLngoKSAqIC0xMDAwIC8gKGxhc3QgLSBmaXJzdCksIGFjY3VtRGVsdGEueSgpICogLTEw
MDAgLyAobGFzdCAtIGZpcnN0KSk7CiB9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JHdGs6OmhhbmRs
ZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBtX2tp
bmV0aWNBbmltYXRpb24tPnN0b3AoKTsKKworICAgIG1fc2Nyb2xsSGlzdG9yeS5yZW1vdmVBbGxN
YXRjaGluZyhbJmV2ZW50XSAoUGxhdGZvcm1XaGVlbEV2ZW50JiBvdGhlckV2ZW50KSAtPiBib29s
IHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoZXZlbnQudGltZXN0
YW1wKCkgLSBvdGhlckV2ZW50LnRpbWVzdGFtcCgpKSA+IHNjcm9sbENhcHR1cmVUaHJlc2hvbGQ7
CisgICAgfSk7CisKKyAgICBpZiAoZXZlbnQuaXNFbmRPZk5vbk1vbWVudHVtU2Nyb2xsKCkpIHsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBhZGQgdGhlIGV2ZW50IHRvIHRoZSBoaXN0b3J5
IGFzIGl0cyBkZWx0YSB3aWxsIGJlICgwLCAwKS4KKyAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xs
QW5pbWF0aW9uS2luZXRpYyo+KG1fa2luZXRpY0FuaW1hdGlvbi5nZXQoKSktPnN0YXJ0KG1fY3Vy
cmVudFBvc2l0aW9uLCBjb21wdXRlVmVsb2NpdHkoKSwgbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCksIG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoZXZlbnQuaXNUcmFuc2l0aW9uaW5n
VG9Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVhcigpOwor
ICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRpb25LaW5ldGljKj4obV9raW5ldGljQW5p
bWF0aW9uLmdldCgpKS0+c3RhcnQobV9jdXJyZW50UG9zaXRpb24sIGV2ZW50LnN3aXBlVmVsb2Np
dHkoKSwgbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIG1fc2Nyb2xsYWJs
ZUFyZWEudmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIG1fc2Nyb2xsSGlzdG9yeS5hcHBlbmQoZXZlbnQpOworCisgICAgcmV0dXJuIFNjcm9s
bEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvckd0azo6d2lsbEVuZExpdmVSZXNpemUoKQoreworICAgIG1fa2luZXRpY0FuaW1hdGlvbi0+
dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQor
ICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9vdGhBbmltYXRpb24tPnVw
ZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckd0
azo6dXBkYXRlUG9zaXRpb24oRmxvYXRQb2ludCYmIHBvc2l0aW9uKQoreworICAgIEZsb2F0U2l6
ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247CisgICAgbV9jdXJyZW50UG9z
aXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKKyAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVs
dGEpOworfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cihTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKKyAgICBtX2tpbmV0aWNBbmltYXRpb24tPnVwZGF0
ZVZpc2libGVMZW5ndGhzKCk7CisKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKLSAgICBp
ZiAobV9hbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOworICAgIGlmIChtX3Ntb290aEFuaW1hdGlvbikKKyAgICAgICAgbV9zbW9vdGhBbmltYXRp
b24tPnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CiAjZW5kaWYKICAgICBpZiAoIXNjcm9sbGJhci0+
aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNyw5ICsxODcsMTEg
QEAgdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CisgICAgbV9raW5ldGljQW5pbWF0
aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJ
TkcpCi0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlz
aWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21v
b3RoQW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCiAgICAgaWYgKCFz
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCmluZGV4IGM0MjUz
ZTVhZGI5MWY3MDQxMzMwNDY4NDFjMjk3NGJmN2RkOGNlY2QuLjk2MTRlNjM2ZDYwYzExZjAzZDEz
YmNlNmNjODc5OTViZjE3ZTNmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxBbmltYXRvckd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxBbmltYXRvckd0ay5oCkBAIC00Niw5ICs0NiwxMSBAQCBjbGFzcyBTY3JvbGxBbmlt
YXRvckd0ayBmaW5hbCA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CiBwcml2YXRlOgogI2lmIEVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikgb3Zl
cnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihj
b25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgp
IG92ZXJyaWRlOwotI2VuZGlmCisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRpZEFkZFZlcnRpY2FsU2Ny
b2xsYmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKQEAgLTYzLDE2ICs2NSwyMiBAQCBjbGFzcyBT
Y3JvbGxBbmltYXRvckd0ayBmaW5hbCA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CiAgICAgdm9p
ZCBub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIG92ZXJy
aWRlOwogICAgIHZvaWQgbG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGJvb2wpIG92
ZXJyaWRlOwogCisgICAgdm9pZCB1cGRhdGVQb3NpdGlvbihGbG9hdFBvaW50JiYpOworCiAgICAg
dm9pZCBvdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2hv
d092ZXJsYXlTY3JvbGxiYXJzKCk7CiAgICAgdm9pZCBoaWRlT3ZlcmxheVNjcm9sbGJhcnMoKTsK
ICAgICB2b2lkIHVwZGF0ZU92ZXJsYXlTY3JvbGxiYXJzT3BhY2l0eSgpOwogCisgICAgRmxvYXRQ
b2ludCBjb21wdXRlVmVsb2NpdHkoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQog
ICAgIHZvaWQgZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCk7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2Nyb2xsQW5pbWF0aW9uPiBtX3Ntb290aEFuaW1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRpb24+IG1fa2luZXRpY0FuaW1hdGlvbjsKKyAgICBWZWN0
b3I8UGxhdGZvcm1XaGVlbEV2ZW50PiBtX3Njcm9sbEhpc3Rvcnk7CiAgICAgU2Nyb2xsYmFyKiBt
X2hvcml6b250YWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwogICAgIFNjcm9sbGJhciog
bV92ZXJ0aWNhbE92ZXJsYXlTY3JvbGxiYXIgeyBudWxscHRyIH07CiAgICAgYm9vbCBtX292ZXJs
YXlTY3JvbGxiYXJzTG9ja2VkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0
aXZlV2ViV2hlZWxFdmVudC5oCmluZGV4IDE1Zjk1ODY3MTczMDk2MzNmZWNmYjY4ZTc4MzU1NTM3
MWUyNzU1YWIuLmYzNTcyYWYyOTFmYTY1M2IzNTg4MGNiNmY2YzMwMzRmYzYxMzgyNTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaApAQCAtNTEsNiArNTEs
NyBAQCBjbGFzcyBOYXRpdmVXZWJXaGVlbEV2ZW50IDogcHVibGljIFdlYldoZWVsRXZlbnQgewog
I2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoY29uc3QgTmF0aXZl
V2ViV2hlZWxFdmVudCYpOwogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqKTsKKyAg
ICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdl
YldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2VsaWYgUExBVEZPUk0oV1BFKQog
ICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCmlu
ZGV4IDRlYjUxZTM5N2FhYTgwOGU0ZDBhMTc2NjJkMTRmM2VjOTMxYmU3ZDYuLmVjZDdjMzg4YjM2
ODNkODE3MzI4YzYyODVmNDk3OWUyNzcwODk5ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5o
CkBAIC0xODMsNyArMTgzLDcgQEAgY2xhc3MgV2ViV2hlZWxFdmVudCA6IHB1YmxpYyBXZWJFdmVu
dCB7CiAgICAgICAgIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50CiAgICAgfTsKIAotI2lmIFBMQVRG
T1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgZW51
bSBQaGFzZSB7CiAgICAgICAgIFBoYXNlTm9uZSAgICAgICAgPSAwLAogICAgICAgICBQaGFzZUJl
Z2FuICAgICAgID0gMSA8PCAwLApAQCAtMjAwLDYgKzIwMCw4IEBAIGNsYXNzIFdlYldoZWVsRXZl
bnQgOiBwdWJsaWMgV2ViRXZlbnQgewogICAgIFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFs
UG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRp
bWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgV2ViV2hlZWxFdmVudChUeXBlLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0YSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSwgYm9vbCBkaXJlY3Rp
b25JbnZlcnRlZEZyb21EZXZpY2UsIFBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhh
c1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHVpbnQzMl90IHNjcm9sbENvdW50LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSwgTW9kaWZpZXJzLCBk
b3VibGUgdGltZXN0YW1wKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBXZWJXaGVlbEV2ZW50
KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRh
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIFBoYXNlLCBQaGFzZSBtb21l
bnR1bVBoYXNlLCBHcmFudWxhcml0eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNl
bmRpZgogCiAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3Bvc2l0aW9uOyB9CkBAIC0yMDgsOSArMjEwLDExIEBAIGNsYXNzIFdlYldoZWVsRXZl
bnQgOiBwdWJsaWMgV2ViRXZlbnQgewogICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSB3aGVl
bFRpY2tzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbFRpY2tzOyB9CiAgICAgR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHcmFudWxhcml0eT4obV9n
cmFudWxhcml0eSk7IH0KICAgICBib29sIGRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlOyB9Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBQaGFz
ZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBoYXNlPihtX3BoYXNlKTsgfQog
ICAgIFBoYXNlIG1vbWVudHVtUGhhc2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQaGFz
ZT4obV9tb21lbnR1bVBoYXNlKTsgfQorI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
Ym9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQcmVj
aXNlU2Nyb2xsaW5nRGVsdGFzOyB9CiAgICAgdWludDMyX3Qgc2Nyb2xsQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbENvdW50OyB9CiAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB1
bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3VuYWNjZWxlcmF0
ZWRTY3JvbGxpbmdEZWx0YTsgfQpAQCAtMjI4LDkgKzIzMiwxMSBAQCBjbGFzcyBXZWJXaGVlbEV2
ZW50IDogcHVibGljIFdlYkV2ZW50IHsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV93aGVlbFRp
Y2tzOwogICAgIHVpbnQzMl90IG1fZ3JhbnVsYXJpdHk7IC8vIEdyYW51bGFyaXR5CiAgICAgYm9v
bCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZTsKKyNpZiBQTEFURk9STShDT0NPQSkgfHwg
UExBVEZPUk0oR1RLKQorICAgIHVpbnQzMl90IG1fcGhhc2UgeyBQaGFzZTo6UGhhc2VOb25lIH07
CisgICAgdWludDMyX3QgbV9tb21lbnR1bVBoYXNlIHsgUGhhc2U6OlBoYXNlTm9uZSB9OworI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdWludDMyX3QgbV9waGFzZTsgLy8gUGhhc2UK
LSAgICB1aW50MzJfdCBtX21vbWVudHVtUGhhc2U7IC8vIFBoYXNlCiAgICAgYm9vbCBtX2hhc1By
ZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAgICAgdWludDMyX3QgbV9zY3JvbGxDb3VudDsKICAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3BwCmluZGV4IGM0NmJmNzQzMTQ4
ZjJkMzdmMTQ3OWVjYTA1M2JlYjdjMDI4ZWU4YjEuLjcwYjkyODA3MTAwYWIxN2M0ZWVkY2QyY2Uz
YzI0MWFmYmIyY2YzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVu
dENvbnZlcnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZl
cnNpb24uY3BwCkBAIC0xNTUsOSArMTU1LDExIEBAIGNsYXNzIFdlYktpdDJQbGF0Zm9ybVdoZWVs
RXZlbnQgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50IHsKICAgICAgICAgbV93
aGVlbFRpY2tzWSA9IHdlYkV2ZW50LndoZWVsVGlja3MoKS5oZWlnaHQoKTsKICAgICAgICAgbV9n
cmFudWxhcml0eSA9ICh3ZWJFdmVudC5ncmFudWxhcml0eSgpID09IFdlYldoZWVsRXZlbnQ6OlNj
cm9sbEJ5UGFnZVdoZWVsRXZlbnQpID8gV2ViQ29yZTo6U2Nyb2xsQnlQYWdlV2hlZWxFdmVudCA6
IFdlYkNvcmU6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwogICAgICAgICBtX2RpcmVjdGlvbklu
dmVydGVkRnJvbURldmljZSA9IHdlYkV2ZW50LmRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSgp
OwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShH
VEspCiAgICAgICAgIG1fcGhhc2UgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZT4od2ViRXZlbnQucGhhc2UoKSk7CiAgICAgICAgIG1fbW9tZW50dW1QaGFzZSA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudFBoYXNlPih3ZWJFdmVudC5t
b21lbnR1bVBoYXNlKCkpOworI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1f
aGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyA9IHdlYkV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdE
ZWx0YXMoKTsKICAgICAgICAgbV9zY3JvbGxDb3VudCA9IHdlYkV2ZW50LnNjcm9sbENvdW50KCk7
CiAgICAgICAgIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCA9IHdlYkV2ZW50LnVuYWNj
ZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSgpLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
V2hlZWxFdmVudC5jcHAKaW5kZXggN2RkY2UwY2JiZTk2MjcxYjlkZmMzNzViMjUzZTA0N2M1OTc2
MmY3YS4uMTNmZTQ4ZGU5OWQ5OGRjOWY2ZWFhYmY2Zjg0NTJjZmFiMTQ0ZDI0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcApAQCAtNjYsNiArNjYsMjAgQEAgV2ViV2hl
ZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlv
biwgY29uc3QgSW50UG9pbnQKIHsKICAgICBBU1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0eXBlKSk7
CiB9CisjZWxpZiBQTEFURk9STShHVEspCitXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5
cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFs
UG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IEZsb2F0U2l6ZSYgd2hlZWxU
aWNrcywgUGhhc2UgcGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsIEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBNb2RpZmllcnMgbW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKQorICAgIDogV2Vi
RXZlbnQodHlwZSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApCisgICAgLCBtX3Bvc2l0aW9uKHBvc2l0
aW9uKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKKyAgICAsIG1fZGVs
dGEoZGVsdGEpCisgICAgLCBtX3doZWVsVGlja3Mod2hlZWxUaWNrcykKKyAgICAsIG1fZ3JhbnVs
YXJpdHkoZ3JhbnVsYXJpdHkpCisgICAgLCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZShm
YWxzZSkKKyAgICAsIG1fcGhhc2UocGhhc2UpCisgICAgLCBtX21vbWVudHVtUGhhc2UobW9tZW50
dW1QaGFzZSkKK3sKKyAgICBBU1NFUlQoaXNXaGVlbEV2ZW50VHlwZSh0eXBlKSk7Cit9CiAjZW5k
aWYKIAogdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdApAQCAtNzgsOSArOTIsMTEgQEAgdm9pZCBXZWJXaGVlbEV2ZW50OjplbmNvZGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV93aGVlbFRpY2tzOwogICAg
IGVuY29kZXIgPDwgbV9ncmFudWxhcml0eTsKICAgICBlbmNvZGVyIDw8IG1fZGlyZWN0aW9uSW52
ZXJ0ZWRGcm9tRGV2aWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09B
KSB8fCBQTEFURk9STShHVEspCiAgICAgZW5jb2RlciA8PCBtX3BoYXNlOwogICAgIGVuY29kZXIg
PDwgbV9tb21lbnR1bVBoYXNlOworI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZW5j
b2RlciA8PCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXM7CiAgICAgZW5jb2RlciA8PCBtX3Nj
cm9sbENvdW50OwogICAgIGVuY29kZXIgPDwgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGE7
CkBAIC0xMDMsMTEgKzExOSwxMyBAQCBib29sIFdlYldoZWVsRXZlbnQ6OmRlY29kZShJUEM6OkRl
Y29kZXImIGRlY29kZXIsIFdlYldoZWVsRXZlbnQmIHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2Up
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQubV9w
aGFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHQu
bV9tb21lbnR1bVBoYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1faGFzUHJlY2lzZVNjcm9s
bGluZ0RlbHRhcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHQubV9zY3JvbGxDb3VudCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcAppbmRleCBiMzY3NjEyMDg3NDM2NmRiM2FhNzM5
MmUxMGMyNTYzN2JjMzNmOWUzLi41Y2FmM2QyM2FiMTZjMDNmZDIzNzEyNDFiMjY5NjMxMTI1YTk5
ZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVs
RXZlbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViV2hl
ZWxFdmVudEd0ay5jcHAKQEAgLTM3LDggKzM3LDE0IEBAIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5h
dGl2ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogfQogCitOYXRpdmVXZWJXaGVl
bEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCwgV2ViV2hlZWxFdmVu
dDo6UGhhc2UgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpCisgICAg
OiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVu
dCwgcGhhc2UsIG1vbWVudHVtUGhhc2UpKQorICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRf
Y29weShldmVudCkpCit7Cit9CisKIE5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVs
RXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCi0gICAgOiBXZWJXaGVlbEV2
ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVudC5uYXRpdmVFdmVu
dCgpKSkKKyAgICA6IFdlYldoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVl
bEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCksIGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVt
UGhhc2UoKSkpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVudF9jb3B5KGV2ZW50Lm5hdGl2
ZUV2ZW50KCkpKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9X
ZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZh
Y3RvcnkuY3BwCmluZGV4IGFmYjVmODQ1MTdlYWQ3NjMyM2FjMjg1MzkxMTg2NGU5MzZiM2U3ZjMu
LjY4ZDZkMzg4NTlhMDIwNzNlOThhN2M4YTdlZTYyNmUzMDlhZGQ1ZGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTE0NSw2ICsxNDUsMjcg
QEAgV2ViTW91c2VFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoY29u
c3QgR2RrRXZlbnQqIGV2ZW50LCBpbnQgY3UKIAogV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogeworI2lmbmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQorICAg
IFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gZ2RrX2V2ZW50X2lzX3Njcm9sbF9zdG9wX2V2
ZW50KGV2ZW50KSA/CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUVuZGVkIDoK
KyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZDsKKyNlbHNlCisgICAg
ZG91YmxlIGRlbHRhWCwgZGVsdGFZOworICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhl
dmVudCwgJmRlbHRhWCwgJmRlbHRhWSk7CisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2Ug
PSBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1NNT09USCAmJiAhZGVsdGFY
ICYmICFkZWx0YVkgPworICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCA6
CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZW5kaWYKKyNl
bHNlCisgICAgV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UgPSBXZWJXaGVlbEV2ZW50OjpQaGFz
ZTo6UGhhc2VDaGFuZ2VkOworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisKKyAgICByZXR1
cm4gY3JlYXRlV2ViV2hlZWxFdmVudChldmVudCwgcGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNl
OjpQaGFzZU5vbmUpOworfQorCitXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRl
V2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIFdlYldoZWVsRXZlbnQ6OlBoYXNl
IHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKQorewogICAgIGRvdWJs
ZSB4LCB5LCB4Um9vdCwgeVJvb3Q7CiAgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4
LCAmeSk7CiAgICAgZ2RrX2V2ZW50X2dldF9yb290X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJv
b3QpOwpAQCAtMTgxLDEzICsyMDIsMTUgQEAgV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAgIEZsb2F0U2l6
ZSBkZWx0YSh3aGVlbFRpY2tzLndpZHRoKCkgKiBzdGVwLCB3aGVlbFRpY2tzLmhlaWdodCgpICog
c3RlcCk7CiAKICAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQoeCwgeSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgSW50UG9pbnQoeFJvb3QsIHlSb290KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB3aGVlbFRpY2tzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpKTsKKyAgICAgICAgSW50
UG9pbnQoeCwgeSksCisgICAgICAgIEludFBvaW50KHhSb290LCB5Um9vdCksCisgICAgICAgIGRl
bHRhLAorICAgICAgICB3aGVlbFRpY2tzLAorICAgICAgICBwaGFzZSwKKyAgICAgICAgbW9tZW50
dW1QaGFzZSwKKyAgICAgICAgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQs
CisgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KSwKKyAgICAgICAgZ2RrX2V2ZW50X2dl
dF90aW1lKGV2ZW50KSk7CiB9CiAKIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgY29uc3QgV2ViQ29y
ZTo6Q29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMsIFZlY3RvcjxTdHJpbmc+
JiYgY29tbWFuZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2
ZW50RmFjdG9yeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rvcnku
aAppbmRleCAyOGI2OTUzOGUyMmJiMzZiYTQyNTU2MGZiMDNkMWI1YTEzMjZiMGY2Li44ZmU3Y2Rj
ZTU2ZjA2M2FkYTQxNTVlMDA4ZWYwNzBiOGQxY2QzZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgV2ViRXZl
bnRGYWN0b3J5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJN
b3VzZUV2ZW50KGNvbnN0IEdka0V2ZW50KiwgaW50KTsKICAgICBzdGF0aWMgV2ViV2hlZWxFdmVu
dCBjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50Kik7CisgICAgc3RhdGljIFdlYldo
ZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCosIFdlYldoZWVsRXZl
bnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKTsKICAgICBzdGF0
aWMgV2ViS2V5Ym9hcmRFdmVudCBjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50
KiwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRzJiwgVmVjdG9yPFN0cmluZz4mJiBj
b21tYW5kcyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBzdGF0aWMgV2ViVG91Y2hF
dmVudCBjcmVhdGVXZWJUb3VjaEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgVmVjdG9yPFdlYlBsYXRm
b3JtVG91Y2hQb2ludD4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCmluZGV4IDNhNDc4OTQ5NTJhZDdjMTc0MDkzY2ZjMWQ4YjgwMzdjYzFmY2M2OWEuLmIxNzAy
YzUwZWY2NjE1YTU1MWJlMTVmMWYzYThlZDFmYjU1YTJlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xODg2LDcgKzE4ODYsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVu
dCkKIAogICAgIGlmICghbV9jdXJyZW50bHlQcm9jZXNzZWRXaGVlbEV2ZW50cy5pc0VtcHR5KCkp
IHsKICAgICAgICAgbV93aGVlbEV2ZW50UXVldWUuYXBwZW5kKGV2ZW50KTsKLSAgICAgICAgaWYg
KG1fd2hlZWxFdmVudFF1ZXVlLnNpemUoKSA8IHdoZWVsRXZlbnRRdWV1ZVNpemVUaHJlc2hvbGQp
CisgICAgICAgIGlmICghc2hvdWxkUHJvY2Vzc1doZWVsRXZlbnROb3coZXZlbnQpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAvLyBUaGUgcXVldWUgaGFzIHRvbyBtYW55IHdoZWVsIGV2
ZW50cywgc28gcHVzaCBhIG5ldyBldmVudC4KICAgICB9CkBAIC0xOTI3LDYgKzE5MjcsMjcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2
ZW50KQogICAgIG1fcHJvY2Vzcy0+aXNSZXNwb25zaXZlKG51bGxwdHIpOwogfQogCitib29sIFdl
YlBhZ2VQcm94eTo6c2hvdWxkUHJvY2Vzc1doZWVsRXZlbnROb3coY29uc3QgV2ViV2hlZWxFdmVu
dCYgZXZlbnQpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIERvbid0IHF1ZXVl
IGV2ZW50cyByZXByZXNlbnRpbmcgYSBub24tdHJpdmlhbCBzY3JvbGxpbmcgcGhhc2UgdG8KKyAg
ICAvLyBhdm9pZCBoYXZpbmcgdGhlbSB0cmFwcGVkIGluIHRoZSBxdWV1ZSwgcG90ZW50aWFsbHkg
cHJldmVudGluZyBhCisgICAgLy8gc2Nyb2xsaW5nIHNlc3Npb24gdG8gYmVnaW5uaW5nIG9yIGVu
ZCBjb3JyZWN0bHkuCisgICAgLy8gVGhpcyBpcyBvbmx5IG5lZWRlZCBieSBwbGF0Zm9ybXMgd2hv
c2UgV2ViV2hlZWxFdmVudCBoYXMgdGhpcyBwaGFzZQorICAgIC8vIGluZm9ybWF0aW9uIChDb2Nv
YSBhbmQgR1RLKykgYnV0IENvY29hIHdhcyBmaW5lIHdpdGhvdXQgaXQuCisgICAgaWYgKGV2ZW50
LnBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZQorICAgICAgICB8fCBl
dmVudC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQKKyAgICAg
ICAgfHwgZXZlbnQubW9tZW50dW1QaGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFz
ZU5vbmUKKyAgICAgICAgfHwgZXZlbnQubW9tZW50dW1QaGFzZSgpID09IFdlYldoZWVsRXZlbnQ6
OlBoYXNlOjpQaGFzZUNoYW5nZWQpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oZXZlbnQpOworI2VuZGlmCisgICAgaWYgKG1fd2hlZWxFdmVudFF1ZXVlLnNp
emUoKSA+PSB3aGVlbEV2ZW50UXVldWVTaXplVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVLZXli
b2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIGlm
ICghaXNWYWxpZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4
IGY4MmMwMjA1OGI1NTc3Mzk3N2QzZmI2ZTM1Y2QzZjQ1NjE4MjM2MzEuLmU1MzViYWMwMTMzZjAw
NGE4ODY0NGE5NzBmYzg4OTViOTY1NDZlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKQEAgLTE1NTcsNiArMTU1Nyw3IEBAIGNsYXNzIFdlYlBhZ2VQcm94eSA6IHB1
YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlBhZ2U+CiAKICAgICB2b2lk
IHByb2Nlc3NOZXh0UXVldWVkV2hlZWxFdmVudCgpOwogICAgIHZvaWQgc2VuZFdoZWVsRXZlbnQo
Y29uc3QgV2ViV2hlZWxFdmVudCYpOworICAgIGJvb2wgc2hvdWxkUHJvY2Vzc1doZWVsRXZlbnRO
b3coY29uc3QgV2ViV2hlZWxFdmVudCYpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKICAgICB2b2lkIHVwZGF0ZVRvdWNoRXZlbnRUcmFja2luZyhjb25zdCBXZWJUb3VjaEV2ZW50
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGEzNzM0MjljMWM1YzI3ODEzZWRlNTExOTUwZjllYTIyNDQxZmMzMjkuLjEx
NGNjNWYxYzYxMmIxNzYwODY3MWJhNDA0NjVlMDQwZjhmMGJlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCkBAIC00MSw2ICs0
MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZUNv
bnRyb2xsZXIoV2ViUGFnZVByb3h5JiBwYWdlKQogICAgIDogbV9kcmFnR2VzdHVyZShwYWdlKQor
ICAgICwgbV9zd2lwZUdlc3R1cmUocGFnZSkKICAgICAsIG1fem9vbUdlc3R1cmUocGFnZSkKIHsK
IH0KQEAgLTQ5LDEzICs1MCwxNCBAQCBib29sIEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVu
dChjb25zdCBHZGtFdmVudCogZXZlbnQpCiB7CiAgICAgYm9vbCB3YXNQcm9jZXNzaW5nR2VzdHVy
ZXMgPSBpc1Byb2Nlc3NpbmdHZXN0dXJlcygpOwogICAgIG1fZHJhZ0dlc3R1cmUuaGFuZGxlRXZl
bnQoZXZlbnQpOworICAgIG1fc3dpcGVHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKICAgICBt
X3pvb21HZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPnR5cGUg
PT0gR0RLX1RPVUNIX0VORCA/IHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA6IGlzUHJvY2Vzc2luZ0dl
c3R1cmVzKCk7CiB9CiAKIGJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1
cmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1f
em9vbUdlc3R1cmUuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0FjdGl2
ZSgpIHx8IG1fc3dpcGVHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0FjdGl2
ZSgpOwogfQogCiBHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6R2VzdHVyZShHdGtHZXN0dXJl
KiBnZXN0dXJlLCBXZWJQYWdlUHJveHkmIHBhZ2UpCkBAIC03NSwyMCArNzcsNDAgQEAgdm9pZCBH
ZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2
ZW50KQogICAgIGd0a19ldmVudF9jb250cm9sbGVyX2hhbmRsZV9ldmVudChHVEtfRVZFTlRfQ09O
VFJPTExFUihtX2dlc3R1cmUuZ2V0KCkpLCBldmVudCk7CiB9CiAKLXZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91
YmxlIHgsIGRvdWJsZSB5KQorc3RhdGljIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0ZVNjcm9s
bEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUg
ZGVsdGFYLCBkb3VibGUgZGVsdGFZLCBnYm9vbGVhbiBpc1N0b3ApCiB7Ci0gICAgQVNTRVJUKG1f
aW5EcmFnKTsKICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudChnZGtfZXZlbnRf
bmV3KEdES19TQ1JPTEwpKTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+
dG91Y2gudGltZTsKLSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnggPSBtX3N0YXJ0LngoKTsKLSAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSBtX3N0YXJ0LnkoKTsKKyAgICBzY3JvbGxFdmVudC0+
c2Nyb2xsLnggPSB4OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IHk7CiAgICAgc2Nyb2xs
RXZlbnQtPnNjcm9sbC54X3Jvb3QgPSBldmVudC0+dG91Y2gueF9yb290OwogICAgIHNjcm9sbEV2
ZW50LT5zY3JvbGwueV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKICAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOwotICAgIHNjcm9sbEV2ZW50
LT5zY3JvbGwuZGVsdGFfeCA9IChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKTsKLSAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kgPSAobV9vZmZz
ZXQueSgpIC0geSkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgc2Nyb2xs
RXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gZGVsdGFYOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwu
ZGVsdGFfeSA9IGRlbHRhWTsKICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQt
PnRvdWNoLnN0YXRlOwotICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVs
RXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCkpKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwg
MCkKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBpc1N0b3A7CisjZW5kaWYKKyAg
ICByZXR1cm4gc2Nyb2xsRXZlbnQ7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdH
ZXN0dXJlOjpzdGFydERyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVCgh
bV9pbkRyYWcpOworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRl
U2Nyb2xsRXZlbnQoZXZlbnQsIG1fc3RhcnQueCgpLCBtX3N0YXJ0LnkoKSwgMCwgMCwgRkFMU0Up
OworICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xs
RXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuLCBXZWJXaGVlbEV2
ZW50OjpQaGFzZTo6UGhhc2VOb25lKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRy
YWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRv
dWJsZSB5KQoreworICAgIEFTU0VSVChtX2luRHJhZyk7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVu
dD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVudCwKKyAgICAgICAgbV9zdGFy
dC54KCksIG1fc3RhcnQueSgpLAorICAgICAgICAobV9vZmZzZXQueCgpIC0geCkgLyBTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksCisgICAgICAgIChtX29mZnNldC55KCkgLSB5KSAvIFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwKKyAgICAgICAgRkFMU0UpOworICAgIG1fcGFn
ZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCks
IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQsIFdlYldoZWVsRXZlbnQ6OlBoYXNl
OjpQaGFzZU5vbmUpKTsKIH0KIAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6
OmhhbmRsZVRhcChjb25zdCBHZGtFdmVudCogZXZlbnQpCkBAIC0xMjgsNiArMTUwLDcgQEAgdm9p
ZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKERyYWdHZXN0dXJlKiBkcmFn
R2VzdHVyZSwgZG91YmxlIHgsIGQKICAgICB1bnNpZ25lZCBkZWxheTsKICAgICBnX29iamVjdF9n
ZXQoZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUi
LCAmZGVsYXksIG51bGxwdHIpOwogICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQu
c3RhcnRPbmVTaG90KDFfbXMgKiBkZWxheSk7CisgICAgZHJhZ0dlc3R1cmUtPnN0YXJ0RHJhZyhn
dGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOwogfQogCiB2b2lk
IEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0dXJlKiBkcmFn
R2VzdHVyZSwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQpAQCAtMTQ5
LDExICsxNzIsMTQgQEAgdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnVwZGF0
ZShEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LAogdm9pZCBHZXN0dXJlQ29udHJv
bGxlcjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIEdka0V2ZW50
U2VxdWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQogewogICAgIGRyYWdHZXN0
dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RvcCgpOworICAgIGlmICghZ3RrX2dlc3R1cmVfaGFu
ZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpIHsKKyAgICAgICAgZ3RrX2dlc3R1cmVf
c2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIGlmICghZHJhZ0dlc3R1cmUtPm1faW5EcmFnKSB7CiAgICAgICAg
IGRyYWdHZXN0dXJlLT5oYW5kbGVUYXAoZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVy
ZSwgc2VxdWVuY2UpKTsKICAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdU
S19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOwotICAgIH0gZWxzZSBpZiAoIWd0a19nZXN0dXJlX2hh
bmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQotICAgICAgICBndGtfZ2VzdHVyZV9z
ZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7CisgICAgfQogfQog
CiB2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6bG9uZ1ByZXNzRmlyZWQoKQpA
QCAtMTcyLDYgKzE5OCwzMCBAQCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OkRyYWdH
ZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9nZXN0dXJlLmdldCgpLCAiZW5kIiwgR19DQUxMQkFDSyhlbmQpLCB0aGlzKTsKIH0KIAordm9p
ZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzdGFydE1vbWVudHVtU2Nyb2xsKGNv
bnN0IEdka0V2ZW50KiBldmVudCwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSkK
K3sKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9IGNyZWF0ZVNjcm9sbEV2
ZW50KGV2ZW50LCBldmVudC0+dG91Y2gueCwgZXZlbnQtPnRvdWNoLnksIHZlbG9jaXR5WCwgdmVs
b2NpdHlZLCBUUlVFKTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVl
bEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25l
LCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbikpOworfQorCit2b2lkIEdlc3R1cmVD
b250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN3aXBlKFN3aXBlR2VzdHVyZSogc3dpcGVHZXN0dXJl
LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZLCBHdGtHZXN0dXJlKiBnZXN0dXJl
KQoreworICAgIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlID0gZ3RrX2dlc3R1cmVfc2luZ2xl
X2dldF9jdXJyZW50X3NlcXVlbmNlKEdUS19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSk7CisgICAg
aWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdlc3R1cmUsIHNlcXVlbmNlKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ3RrX2dlc3R1cmVfc2V0X3NlcXVlbmNlX3N0YXRlKGdlc3R1
cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7CisKKyAgICBzd2lwZUdl
c3R1cmUtPnN0YXJ0TW9tZW50dW1TY3JvbGwoZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2Vz
dHVyZSwgc2VxdWVuY2UpLCB2ZWxvY2l0eVgsIHZlbG9jaXR5WSk7Cit9CisKK0dlc3R1cmVDb250
cm9sbGVyOjpTd2lwZUdlc3R1cmU6OlN3aXBlR2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCisg
ICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3N3aXBlX25ldyhwYWdlLnZpZXdXaWRnZXQoKSksIHBh
Z2UpCit7CisgICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJF
X1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic3dpcGUiLCBHX0NBTExCQUNLKHN3aXBlKSwgdGhpcyk7
Cit9CisKIEludFBvaW50IEdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6Y2VudGVyKCkg
Y29uc3QKIHsKICAgICBkb3VibGUgeCwgeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCA4Njc5MmRmNDJjZjRjMzRmODlkOGRmZDdj
MDE5MTE5OTA0MTY3NGNhLi5lOTYwMzFmYjllMmEzMjdhZTljNjE4ZDE0ZmU5ZTQzMjU4NmNlYjA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxl
ci5oCkBAIC02Nyw2ICs2Nyw4IEBAIGNsYXNzIEdlc3R1cmVDb250cm9sbGVyIHsKICAgICAgICAg
RHJhZ0dlc3R1cmUoV2ViUGFnZVByb3h5Jik7CiAKICAgICBwcml2YXRlOgorICAgICAgICAvLyBO
b3RpZnkgdGhhdCBhIGRyYWcgc3RhcnRlZCwgYWxsb3dpbmcgdG8gc3RvcCBraW5ldGljIGRlY2Vs
ZXJhdGlvbi4KKyAgICAgICAgdm9pZCBzdGFydERyYWcoY29uc3QgR2RrRXZlbnQqKTsKICAgICAg
ICAgdm9pZCBoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiwgZG91YmxlIHgsIGRvdWJsZSB5KTsK
ICAgICAgICAgdm9pZCBoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqKTsKICAgICAgICAgdm9pZCBs
b25nUHJlc3NGaXJlZCgpOwpAQCAtODIsNiArODQsMTYgQEAgY2xhc3MgR2VzdHVyZUNvbnRyb2xs
ZXIgewogICAgICAgICBib29sIG1faW5EcmFnOwogICAgIH07CiAKKyAgICBjbGFzcyBTd2lwZUdl
c3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBTd2lw
ZUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHN0
YXJ0TW9tZW50dW1TY3JvbGwoY29uc3QgR2RrRXZlbnQqLCBkb3VibGUgdmVsb2NpdHlYLCBkb3Vi
bGUgdmVsb2NpdHlZKTsKKworICAgICAgICBzdGF0aWMgdm9pZCBzd2lwZShTd2lwZUdlc3R1cmUq
LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZLCBHdGtHZXN0dXJlKik7CisgICAg
fTsKKwogICAgIGNsYXNzIFpvb21HZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgewogICAg
IHB1YmxpYzoKICAgICAgICAgWm9vbUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CkBAIC0xMDEsNiAr
MTEzLDcgQEAgY2xhc3MgR2VzdHVyZUNvbnRyb2xsZXIgewogICAgIH07CiAKICAgICBEcmFnR2Vz
dHVyZSBtX2RyYWdHZXN0dXJlOworICAgIFN3aXBlR2VzdHVyZSBtX3N3aXBlR2VzdHVyZTsKICAg
ICBab29tR2VzdHVyZSBtX3pvb21HZXN0dXJlOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312405</attachid>
            <date>2017-06-09 01:03:00 -0700</date>
            <delta_ts>2017-06-09 01:53:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155750-20170609170259.patch</filename>
            <type>text/plain</type>
            <size>51165</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE3OTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdhYzc1NTRjODA3ZmMw
M2QwMmVhYzJlNDNiMWVmZmZkYmM3YmJjZi4uMTc5YzRjYWRjZDg4YzYzZjE5Mzc3MmI0OTU3NzIx
NTMyOTkzMGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA2LTA5ICBBZHJp
ZW4gUGxhemFzICA8YXBsYXphc0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBraW5l
dGljIHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU1NzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2FybG9zIEdhcmNpYSBDYW1wb3Mu
CisKKyAgICAgICAgUGF0Y2ggYnkgQWRyaWVuIFBsYXphcyBhbmQgWXVzdWtlIFN1enVraS4KKwor
ICAgICAgICBBZGQgdGhlIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgc2Nyb2xsaW5nIGFuaW1hdGlv
biBhbGxvd2luZyB0byBwZXJmb3JtIG1vbWVudHVtIHNjcm9sbGluZzsgaXQgaXMgYmFzZWQgb24g
R1RLKydzCisgICAgICAgIEd0a0tpbmV0aWNTY3JvbGxpbmcgdHlwZS4KKworICAgICAgICBBZGQg
dGhlIG5vdGlvbiBvZiBwaGFzZSwgbW9tZW50dW0gcGhhc2UgYW5kIHN3aXBlIHZlbG9jaXR5IHRv
IFBsYXRmb3JtV2hlZWxFdmVudC4KKworICAgICAgICBEZXBlbmRpbmcgb24gd2hldGhlciB0aGUg
c2Nyb2xsaW5nIGVuZGVkIG5vcm1hbGx5IG9yIHRyaWdnZXJlZCBhIHN3aXBlLCB0aGUgc2Nyb2xs
IGFuaW1hdG9yIHdpbGwgZWl0aGVyIGNvbXB1dGUKKyAgICAgICAgdGhlIHN3aXBlIHZlbG9jaXR5
IGZyb20gdGhlIHByZXZpb3VzIHNjcm9sbGluZyBldmVudHMgb3IgdXNlIHRoZSBvbmUgZnJvbSB0
aGUgc3dpcGUgZ2VzdHVyZSB0byBpbml0aWF0ZSB0aGUKKyAgICAgICAgbW9tZW50dW0gc2Nyb2xs
aW5nLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnQ6OnNldEhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1XaGVlbEV2ZW50OjpwaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVs
RXZlbnQ6Om1vbWVudHVtUGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50Ojppc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbjo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbjo6dXBkYXRlVmlzaWJs
ZUxlbmd0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uOjpzZXRDdXJyZW50
UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBlckF4
aXNEYXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25L
aW5ldGljOjpQZXJBeGlzRGF0YTo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRpb25LaW5ldGljOjpTY3JvbGxBbmltYXRpb25LaW5ldGljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6On5TY3JvbGxBbmltYXRpb25LaW5ldGlj
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbktpbmV0aWM6OnN0b3ApOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9uVGltZXJGaXJlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtV2hlZWxFdmVudDo6c3dpcGVWZWxvY2l0eSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yR3RrOjpTY3JvbGxBbmltYXRvckd0ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckd0azo6ZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JHdGs6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6Y29tcHV0ZVZlbG9jaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckd0azo6dXBkYXRlUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaDoKKwogMjAxNy0w
Ni0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gRml4IHVudXNlZCBwYXJhbWV0ZXIgd2FybmluZyBhZnRlciByMjE3OTU1
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGMyNzYyODljNWIyMWE4MjFlMmE2N2M5NWY4ZTAyYjI0ZDk3ODgxNTMu
LjJhYjA1ZDU5MWE5ZWQ2NGJiMWJhYmI3MWEzYjM2YTcwMWQ3MmJhOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw1MSBAQAorMjAxNy0wNi0wOSAgQWRyaWVuIFBsYXphcyAgPGFwbGF6YXNAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXSBBZGQga2luZXRpYyBzY3JvbGxpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTc1MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisgICAgICAgIFBhdGNoIGJ5IEFkcmll
biBQbGF6YXMgYW5kIFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgQWRkIHRoZSBub3Rpb24gb2Yg
cGhhc2UgYW5kIG1vbWVudHVtIHBoYXNlIHRvIFdlYldoZWVsRXZlbnQuCisKKyAgICAgICAgTWFr
ZSBXZWJXaGVlbEV2ZW50IG1hbmFnZSB0aGUgJ2lzX3N0b3AnIGF0dHJpYnV0ZSBvZiBHZGtFdmVu
dFNjcm9sbCB0byBjcmVhdGUgdGhlIGNvcnJlc3BvbmRpbmcgV2ViV2hlZWxFdmVudAorICAgICAg
ICB3aXRoIHRoZSBjb3JyZWN0IHBoYXNlcyBhbmQgZGVsdGFzLgorCisgICAgICAgIE1ha2UgR2Vz
dHVyZUNvbnRyb2xsZXIgbWFuYWdlIHN3aXBlcyB0byBjcmVhdGUgdGhlIGNvcnJlc3BvbmRpbmcg
V2ViV2hlZWxFdmVudCB3aXRoIHRoZSBjb3JyZWN0IHBoYXNlcyBhbmQKKyAgICAgICAgZGVsdGFz
LgorCisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAgKiBT
aGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0MlBsYXRmb3JtV2hlZWxFdmVudDo6V2ViS2l0MlBs
YXRmb3JtV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViV2hlZWxFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hl
ZWxFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZl
bnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVX
ZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudCk6
CisgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpo
YW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGRQ
cm9jZXNzV2hlZWxFdmVudE5vdyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZUNvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMpOgorICAgICAgICAo
V2ViS2l0OjpjcmVhdGVTY3JvbGxFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250
cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVy
ZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKToKKyAgICAgICAgKFdlYktpdDo6
R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbik6CisgICAgICAgIChXZWJLaXQ6
Okdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6ZW5kKToKKyAgICAgICAgKFdlYktpdDo6
R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3RhcnRNb21lbnR1bVNjcm9sbCk6Cisg
ICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN3aXBlKToK
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6U3dpcGVH
ZXN0dXJlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmg6CisK
IDIwMTctMDYtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdIFVzZSBBUEk6OkZvcm1DbGllbnQgaW5zdGVhZCBvZiB0aGUgQyBBUEkg
aW4gV2ViS2l0Rm9ybUNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAyNDY5OWZk
YzM0NDY3NDAyN2RmZjQ4MWE4M2ZhMzI0ZWUxZWZiN2JlLi45MGUxZmUxYWVlMDFhZTJhZjMyYmFm
MTczMzBkYmYyMDBmNTg1MjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNjMsNiAr
NjMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdlL2xpbnV4L1Jlc291
cmNlVXNhZ2VUaHJlYWRMaW51eC5jcHAKIAogICAgIHBsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAK
KyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcAogICAgIHBsYXRmb3JtL1N0
YXRpY1Bhc3RlYm9hcmQuY3BwCiAgICAgcGxhdGZvcm0vVXNlckFnZW50UXVpcmtzLmNwcAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDQ1ZGQ4
MDZlMzhhYzBkZWUwMzc5N2MxOGVlNmI1ZjhkMWQ4MmI0YTkuLjZkNDU4YmVmNGI4MDRmNTJiZGUy
OTRkMTY3OWIxNjEzZmM5MDI0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtV2hlZWxFdmVudC5oCkBAIC00OCw3ICs0OCw3IEBAIGVudW0gUGxhdGZvcm1XaGVlbEV2ZW50
R3JhbnVsYXJpdHkgOiB1aW50OF90IHsKICAgICBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKIH07
CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0o
R1RLKQogCiBlbnVtIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIDogdWludDhfdCB7CiAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lID0gMCwKQEAgLTExNywxMyArMTE3LDEyIEBAIGNsYXNz
IFBsYXRmb3JtV2hlZWxFdmVudCA6IHB1YmxpYyBQbGF0Zm9ybUV2ZW50IHsKIAogI2lmIFBMQVRG
T1JNKEdUSykKICAgICBleHBsaWNpdCBQbGF0Zm9ybVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwq
KTsKKyAgICBGbG9hdFBvaW50IHN3aXBlVmVsb2NpdHkoKSBjb25zdDsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgYm9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOyB9CiAgICAgdm9pZCBzZXRI
YXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcykg
eyBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFz
OyB9Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UoKSBjb25zdCB7IHJldHVybiBt
X3BoYXNlOyB9Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbW9tZW50dW1QaGFzZTsgfQogICAgIHVuc2lnbmVkIHNjcm9sbENvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3VudDsgfQogICAgIGZsb2F0IHVuYWNjZWxlcmF0
ZWRTY3JvbGxpbmdEZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxp
bmdEZWx0YVg7IH0KICAgICBmbG9hdCB1bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKCkgY29u
c3QgeyByZXR1cm4gbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZOyB9CkBAIC0xMzEsMTIg
KzEzMCwxNyBAQCBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1FdmVu
dCB7CiAgICAgYm9vbCBzaG91bGRDb25zaWRlckxhdGNoaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBz
aG91bGRSZXNldExhdGNoaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBpc0VuZE9mTW9tZW50dW1TY3Jv
bGwoKSBjb25zdDsKLSAgICBib29sIGlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0Owot
ICAgIGJvb2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogI2Vsc2UK
ICAgICBib29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQorICAgIFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQor
ICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UoKSBjb25zdCB7IHJldHVy
biBtX21vbWVudHVtUGhhc2U7IH0KKyAgICBib29sIGlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgp
IGNvbnN0OworICAgIGJvb2wgaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0
OworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhX
TkQsIFdQQVJBTSwgTFBBUkFNLCBib29sIGlzTW91c2VIV2hlZWwpOwogICAgIFBsYXRmb3JtV2hl
ZWxFdmVudChIV05ELCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhdGlvbik7CkBAIC0xNTUsMTAgKzE1OSwxMiBAQCBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQg
OiBwdWJsaWMgUGxhdGZvcm1FdmVudCB7CiAgICAgLy8gU2Nyb2xsaW5nIHZlbG9jaXR5IGluIHBp
eGVscyBwZXIgc2Vjb25kLgogICAgIEZsb2F0U2l6ZSBtX3Njcm9sbGluZ1ZlbG9jaXR5OwogCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMg
eyBmYWxzZSB9OworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UgbV9waGFzZSB7IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9u
ZSB9OwogICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1fbW9tZW50dW1QaGFzZSB7IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlTm9uZSB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgYm9vbCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgeyBmYWxzZSB9OwogICAgIHVuc2ln
bmVkIG1fc2Nyb2xsQ291bnQgeyAwIH07CiAgICAgZmxvYXQgbV91bmFjY2VsZXJhdGVkU2Nyb2xs
aW5nRGVsdGFYIHsgMCB9OwogICAgIGZsb2F0IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
WSB7IDAgfTsKQEAgLTE5MSw2ICsxOTcsMTAgQEAgaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2
ZW50Ojppc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBjb25zdAogICAgIHJldHVybiBtX3BoYXNlID09
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2VFbmRlZDsKIH0KIAorI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NP
QSkgfHwgUExBVEZPUk0oR1RLKQorCiBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6Omlz
RW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2VOb25lOwpAQCAtMjAwLDcgKzIxMCw2IEBAIGlubGluZSBib29sIFBs
YXRmb3JtV2hlZWxFdmVudDo6aXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYm
IG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOwogfQotCiAj
ZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRpb24uaAppbmRleCAzOTI5OTk3NzJiMzRiNWIzMGQyMzU5MWU1ZjYzZjdkYjNi
OGFiOTA2Li4yZTVmNjNiY2VmMmJmZGZjZmY5MjE2ZDk4NmIwZjQzNjBjNjgwYjQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaApAQCAtMzYsMTAgKzM2LDEwIEBA
IGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsQW5pbWF0aW9uIHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRpb24oKSB7IH07Ci0gICAgdmlydHVhbCBib29sIHNj
cm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAs
IGZsb2F0IG11bHRpcGxpZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgLyogc3RlcCAqLywgZmxvYXQg
LyogbXVsdGlwbGllciAqLykgeyByZXR1cm4gdHJ1ZTsgfTsKICAgICB2aXJ0dWFsIHZvaWQgc3Rv
cCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmxlTGVuZ3RocygpIHsgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSB7IH07CiAgICAg
dmlydHVhbCB2b2lkIHNlcnZpY2VBbmltYXRpb24oKSB7IH07CiAKIHByb3RlY3RlZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0aWMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmU5YjlhMDY1M2E5YmUxN2EwNjI2ODJhZjUxN2Y0NDIzMWNiMGIyMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbktpbmV0
aWMuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxB
bmltYXRpb25LaW5ldGljLmgiCisKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCisvKgorICogUGVyQXhpc0RhdGEgaXMgYSBwb3J0IG9m
IEd0a0tpbmV0aWNTY3JvbGxpbmcgYXMgb2YgR1RLKyAzLjIwLAorICogbWltaWNraW5nIGl0cyBB
UEkgYW5kIGl0cyBiZWhhdmlvci4KKyAqCisgKiBBbGwgb3VyIGN1cnZlcyBhcmUgc2Vjb25kIGRl
Z3JlZSBsaW5lYXIgZGlmZmVyZW50aWFsIGVxdWF0aW9ucywgYW5kCisgKiBzbyB0aGV5IGNhbiBh
bHdheXMgYmUgd3JpdHRlbiBhcyBsaW5lYXIgY29tYmluYXRpb25zIG9mIDIgYmFzZQorICogc29s
dXRpb25zLiBjb2VmMSBhbmQgY29lZjIgYXJlIHRoZSBjb2VmZmljaWVudHMgdG8gdGhlc2UgdHdv
IGJhc2UKKyAqIHNvbHV0aW9ucywgYW5kIGFyZSBjb21wdXRlZCBmcm9tIHRoZSBpbml0aWFsIHBv
c2l0aW9uIGFuZCB2ZWxvY2l0eS4KKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBzaW1wbGUgZGVjZWxl
cmF0aW9uLCB0aGUgZGlmZmVyZW50aWFsIGVxdWF0aW9uIGlzCisgKgorICogICB5JycgPSAtbXkn
CisgKgorICogV2l0aCBtIHRoZSByZXNpc3RlbmNlIGZhY3Rvci4gRm9yIHRoaXMgd2UgdXNlIHRo
ZSBmb2xsb3dpbmcgMgorICogYmFzZSBzb2x1dGlvbnM6CisgKgorICogICBmMSh4KSA9IDEKKyAq
ICAgZjIoeCkgPSBleHAoLW14KQorICoKKyAqIEluIHRoZSBjYXNlIG9mIG92ZXJzaG9vdCwgdGhl
IGRpZmZlcmVudGlhbCBlcXVhdGlvbiBpcworICoKKyAqICAgeScnID0gLW15JyAtIGt5CisgKgor
ICogV2l0aCBtIHRoZSByZXNpc3RhbmNlLCBhbmQgayB0aGUgc3ByaW5nIHN0aWZmbmVzcyBjb25z
dGFudC4gV2UgbGV0CisgKiBrID0gbV4yIC8gNCwgc28gdGhhdCB0aGUgc3lzdGVtIGlzIGNyaXRp
Y2FsbHkgZGFtcGVkIChpZSwgcmV0dXJucyB0byBpdHMKKyAqIGVxdWlsaWJyaXVtIHBvc2l0aW9u
IGFzIHF1aWNrbHkgYXMgcG9zc2libGUsIHdpdGhvdXQgb3NjaWxsYXRpbmcpLCBhbmQgb2Zmc2V0
CisgKiB0aGUgd2hvbGUgdGhpbmcsIHN1Y2ggdGhhdCB0aGUgZXF1aWxpYnJpdW0gcG9zaXRpb24g
aXMgYXQgMC4gVGhpcyBnaXZlcyB0aGUKKyAqIGJhc2Ugc29sdXRpb25zCisgKgorICogICBmMSh4
KSA9IGV4cCgtbXggLyAyKQorICogICBmMih4KSA9IHQgZXhwKC1teCAvIDIpCisgKi8KKworc3Rh
dGljIGNvbnN0IGRvdWJsZSBkZWNlbEZyaWN0aW9uID0gNDsKK3N0YXRpYyBjb25zdCBkb3VibGUg
ZnJhbWVSYXRlID0gNjA7CitzdGF0aWMgY29uc3QgU2Vjb25kcyB0aWNrVGltZSA9IDFfcyAvIGZy
YW1lUmF0ZTsKK3N0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1UaW1lckludGVydmFsIHsgMV9t
cyB9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6OlBl
ckF4aXNEYXRhOjpQZXJBeGlzRGF0YShkb3VibGUgbG93ZXIsIGRvdWJsZSB1cHBlciwgZG91Ymxl
IGluaXRpYWxQb3NpdGlvbiwgZG91YmxlIGluaXRpYWxWZWxvY2l0eSkKKyAgICA6IG1fbG93ZXIo
bG93ZXIpCisgICAgLCBtX3VwcGVyKHVwcGVyKQorICAgICwgbV9jb2VmMShpbml0aWFsVmVsb2Np
dHkgLyBkZWNlbEZyaWN0aW9uICsgaW5pdGlhbFBvc2l0aW9uKQorICAgICwgbV9jb2VmMigtaW5p
dGlhbFZlbG9jaXR5IC8gZGVjZWxGcmljdGlvbikKKyAgICAsIG1fcG9zaXRpb24oY2xhbXBUbyhp
bml0aWFsUG9zaXRpb24sIGxvd2VyLCB1cHBlcikpCisgICAgLCBtX3ZlbG9jaXR5KGluaXRpYWxQ
b3NpdGlvbiA8IGxvd2VyIHx8IGluaXRpYWxQb3NpdGlvbiA+IHVwcGVyID8gMCA6IGluaXRpYWxW
ZWxvY2l0eSkKK3sKK30KKworYm9vbCBTY3JvbGxBbmltYXRpb25LaW5ldGljOjpQZXJBeGlzRGF0
YTo6YW5pbWF0ZVNjcm9sbChTZWNvbmRzIHRpbWVEZWx0YSkKK3sKKyAgICBtX2VsYXBzZWRUaW1l
ICs9IHRpbWVEZWx0YTsKKworICAgIGRvdWJsZSBleHBvbmVudGlhbFBhcnQgPSBleHAoLWRlY2Vs
RnJpY3Rpb24gKiBtX2VsYXBzZWRUaW1lLnZhbHVlKCkpOworICAgIG1fcG9zaXRpb24gPSBtX2Nv
ZWYxICsgbV9jb2VmMiAqIGV4cG9uZW50aWFsUGFydDsKKyAgICBtX3ZlbG9jaXR5ID0gLWRlY2Vs
RnJpY3Rpb24gKiBtX2NvZWYyICogZXhwb25lbnRpYWxQYXJ0OworCisgICAgaWYgKG1fcG9zaXRp
b24gPCBtX2xvd2VyKSB7CisgICAgICAgIG1fcG9zaXRpb24gPSBtX2xvd2VyOworICAgICAgICBt
X3ZlbG9jaXR5ID0gMDsKKyAgICB9IGVsc2UgaWYgKG1fcG9zaXRpb24gPiBtX3VwcGVyKSB7Cisg
ICAgICAgIG1fcG9zaXRpb24gPSBtX3VwcGVyOworICAgICAgICBtX3ZlbG9jaXR5ID0gMDsKKyAg
ICB9IGVsc2UgaWYgKGZhYnMobV92ZWxvY2l0eSkgPCAxKSB7CisgICAgICAgIG1fcG9zaXRpb24g
PSByb3VuZChtX3Bvc2l0aW9uKTsKKyAgICAgICAgbV92ZWxvY2l0eSA9IDA7CisgICAgfQorCisg
ICAgcmV0dXJuIG1fdmVsb2NpdHk7Cit9CisKK1Njcm9sbEFuaW1hdGlvbktpbmV0aWM6OlNjcm9s
bEFuaW1hdGlvbktpbmV0aWMoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoRmxvYXRQb2ludCYmKT4mJiBub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlv
bikKKyAgICA6IFNjcm9sbEFuaW1hdGlvbihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1fbm90aWZ5
UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb24oV1RGTW92ZShub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5j
dGlvbikpCisgICAgLCBtX2FuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0aW9uS2lu
ZXRpYzo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yzo6flNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKQoreworfQorCit2b2lkIFNjcm9sbEFuaW1hdGlv
bktpbmV0aWM6OnN0b3AoKQoreworICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworICAgIG1f
aG9yaXpvbnRhbERhdGEgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV92ZXJ0aWNhbERhdGEgPSBzdGQ6
Om51bGxvcHQ7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6c3RhcnQoY29uc3Qg
RmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwg
Ym9vbCBtYXlIU2Nyb2xsLCBib29sIG1heVZTY3JvbGwpCit7CisgICAgc3RvcCgpOworCisgICAg
bV9wb3NpdGlvbiA9IGluaXRpYWxQb3NpdGlvbjsKKworICAgIGlmICghdmVsb2NpdHkueCgpICYm
ICF2ZWxvY2l0eS55KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtYXlIU2Nyb2xsKSB7
CisgICAgICAgIG1faG9yaXpvbnRhbERhdGEgPSBQZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVh
Lm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSwKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEubWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpLAorICAgICAgICAgICAgaW5pdGlhbFBvc2l0
aW9uLngoKSwgdmVsb2NpdHkueCgpKTsKKyAgICB9CisgICAgaWYgKG1heVZTY3JvbGwpIHsKKyAg
ICAgICAgbV92ZXJ0aWNhbERhdGEgPSBQZXJBeGlzRGF0YShtX3Njcm9sbGFibGVBcmVhLm1pbmlt
dW1TY3JvbGxQb3NpdGlvbigpLnkoKSwKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEubWF4
aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpLAorICAgICAgICAgICAgaW5pdGlhbFBvc2l0aW9uLnko
KSwgdmVsb2NpdHkueSgpKTsKKyAgICB9CisKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpIC0gdGlja1RpbWUgLyAyLjsKKyAgICBhbmltYXRpb25UaW1lckZpcmVkKCk7Cit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uS2luZXRpYzo6YW5pbWF0aW9uVGltZXJGaXJlZCgpCit7
CisgICAgTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwor
ICAgIFNlY29uZHMgZGVsdGFUb05leHRGcmFtZSA9IDFfcyAqIGNlaWwoKGN1cnJlbnRUaW1lIC0g
bV9zdGFydFRpbWUpLnZhbHVlKCkgKiBmcmFtZVJhdGUpIC8gZnJhbWVSYXRlIC0gKGN1cnJlbnRU
aW1lIC0gbV9zdGFydFRpbWUpOworCisgICAgaWYgKG1faG9yaXpvbnRhbERhdGEgJiYgIW1faG9y
aXpvbnRhbERhdGEudmFsdWUoKS5hbmltYXRlU2Nyb2xsKGRlbHRhVG9OZXh0RnJhbWUpKQorICAg
ICAgICBtX2hvcml6b250YWxEYXRhID0gc3RkOjpudWxsb3B0OworCisgICAgaWYgKG1fdmVydGlj
YWxEYXRhICYmICFtX3ZlcnRpY2FsRGF0YS52YWx1ZSgpLmFuaW1hdGVTY3JvbGwoZGVsdGFUb05l
eHRGcmFtZSkpCisgICAgICAgIG1fdmVydGljYWxEYXRhID0gc3RkOjpudWxsb3B0OworCisgICAg
Ly8gSWYgb25lIG9mIHRoZSBheGVzIGRpZG4ndCBmaW5pc2ggaXRzIGFuaW1hdGlvbiB3ZSBtdXN0
IGNvbnRpbnVlIGl0LgorICAgIGlmIChtX2hvcml6b250YWxEYXRhIHx8IG1fdmVydGljYWxEYXRh
KQorICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChzdGQ6Om1heChtaW5pbXVt
VGltZXJJbnRlcnZhbCwgZGVsdGFUb05leHRGcmFtZSkpOworCisgICAgZG91YmxlIHggPSBtX2hv
cml6b250YWxEYXRhID8gbV9ob3Jpem9udGFsRGF0YS52YWx1ZSgpLnBvc2l0aW9uKCkgOiBtX3Bv
c2l0aW9uLngoKTsKKyAgICBkb3VibGUgeSA9IG1fdmVydGljYWxEYXRhID8gbV92ZXJ0aWNhbERh
dGEudmFsdWUoKS5wb3NpdGlvbigpIDogbV9wb3NpdGlvbi55KCk7CisgICAgbV9wb3NpdGlvbiA9
IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbihG
bG9hdFBvaW50KG1fcG9zaXRpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRpYy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU0NThjNTMzMDc1NDc1ZjllOTIxNzU5MzAwZDVhNjNjYTlkZDU1Y2EKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGlj
LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNp
bmNsdWRlICJTY3JvbGxBbmltYXRpb24uaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xs
YWJsZUFyZWE7CisKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbktpbmV0aWMgZmluYWw6IHB1YmxpYyBT
Y3JvbGxBbmltYXRpb24geworcHJpdmF0ZToKKyAgICBjbGFzcyBQZXJBeGlzRGF0YSB7CisgICAg
cHVibGljOgorICAgICAgICBQZXJBeGlzRGF0YShkb3VibGUgbG93ZXIsIGRvdWJsZSB1cHBlciwg
ZG91YmxlIGluaXRpYWxQb3NpdGlvbiwgZG91YmxlIGluaXRpYWxWZWxvY2l0eSk7CisKKyAgICAg
ICAgZG91YmxlIHBvc2l0aW9uKCkgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorCisgICAgICAgIGJv
b2wgYW5pbWF0ZVNjcm9sbChTZWNvbmRzIHRpbWVEZWx0YSk7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBkb3VibGUgbV9sb3dlciB7IDAgfTsKKyAgICAgICAgZG91YmxlIG1fdXBwZXIgeyAwIH07
CisKKyAgICAgICAgZG91YmxlIG1fY29lZjEgeyAwIH07CisgICAgICAgIGRvdWJsZSBtX2NvZWYy
IHsgMCB9OworCisgICAgICAgIFNlY29uZHMgbV9lbGFwc2VkVGltZTsKKyAgICAgICAgZG91Ymxl
IG1fcG9zaXRpb24geyAwIH07CisgICAgICAgIGRvdWJsZSBtX3ZlbG9jaXR5IHsgMCB9OworICAg
IH07CisKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRpb25LaW5ldGljKFNjcm9sbGFibGVBcmVh
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+JiYgbm90aWZ5UG9zaXRpb25DaGFu
Z2VkRnVuY3Rpb24pOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdGlvbktpbmV0aWMoKTsKKwor
ICAgIHZvaWQgc3RhcnQoY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbFBvc2l0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiB2ZWxvY2l0eSwgYm9vbCBtYXlIU2Nyb2xsLCBib29sIG1heVZTY3JvbGwpOwor
Citwcml2YXRlOgorICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgYW5pbWF0aW9u
VGltZXJGaXJlZCgpOworCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEZsb2F0UG9pbnQmJik+IG1f
bm90aWZ5UG9zaXRpb25DaGFuZ2VkRnVuY3Rpb247CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBlckF4
aXNEYXRhPiBtX2hvcml6b250YWxEYXRhOworICAgIHN0ZDo6b3B0aW9uYWw8UGVyQXhpc0RhdGE+
IG1fdmVydGljYWxEYXRhOworCisgICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKKyAgICBU
aW1lciBtX2FuaW1hdGlvblRpbWVyOworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggZDgyNjA3NWE5OTkxNzZkZWI0
ZGY0NjZmNjQxYWRjNGI2Y2UxY2MwZi4uM2IwZTU5MDZmY2Q1MDJjZjljNWQ3ZGNhYTllYzdhMmQ5
YWMyM2M4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
V2hlZWxFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRm
b3JtV2hlZWxFdmVudEd0ay5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKIAorI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJTY3Jv
bGxiYXIuaCIKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CkBAIC04NSw2ICs4NiwyMCBAQCBQbGF0Zm9y
bVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCiAg
ICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYOwogICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRh
WTsKIAorI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMs
IDIwLCAwKQorICAgIG1fcGhhc2UgPSBldmVudC0+aXNfc3RvcCA/CisgICAgICAgIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlRW5kZWQgOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNo
YW5nZWQ7CisjZWxzZQorICAgIG1fcGhhc2UgPSBldmVudC0+ZGlyZWN0aW9uID09IEdES19TQ1JP
TExfU01PT1RIICYmICFtX2RlbHRhWCAmJiAhbV9kZWx0YVkgPworICAgICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZUVuZGVkIDoKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFu
Z2VkOworI2VuZGlmCisjZWxzZQorICAgIG1fcGhhc2UgPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZUNoYW5nZWQ7CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKwogICAgIG1fcG9zaXRpb24g
PSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54KSwgc3RhdGljX2Nhc3Q8aW50Pihl
dmVudC0+eSkpOwogICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxp
bnQ+KGV2ZW50LT54X3Jvb3QpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55X3Jvb3QpKTsKICAg
ICBtX2dyYW51bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CkBAIC05NSw0ICsxMTAs
MTAgQEAgUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoR2RrRXZlbnRTY3Jv
bGwqIGV2ZW50KQogICAgIG1fZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCkpOwogfQogCitGbG9hdFBvaW50IFBsYXRmb3JtV2hlZWxFdmVu
dDo6c3dpcGVWZWxvY2l0eSgpIGNvbnN0Cit7CisgICAgLy8gVGhlIHN3aXBpbmcgdmVsb2NpdHkg
aXMgc3RvcmVkIGluIHRoZSBkZWx0YXMgb2YgdGhlIGV2ZW50IGRlY2xhcmluZyBpdC4KKyAgICBy
ZXR1cm4gaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpID8gRmxvYXRQb2ludChtX3do
ZWVsVGlja3NYLCBtX3doZWVsVGlja3NZKSA6IEZsb2F0UG9pbnQoKTsKK30KKwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5jcHAKaW5kZXgg
MWI5NTQ4MWY4NWFkMjcyNWVmYWFlNDBkZTFhMWRhZTZkNTU4ZjRhOC4uYzJhYTlkYzAxZjc2N2Vl
YTk4ZTMxM2E4NjRhNmEyNzgyYmE4ZjA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JHdGsuaCIKIAorI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdGlvbktpbmV0aWMuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25TbW9v
dGguaCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNv
bnN0IFNlY29uZHMgb3ZlcmZsb3dTY3JvbGxiYXJzQW5pbWF0aW9uRHVyYXRpb24geyAxX3MgfTsK
IHN0YXRpYyBjb25zdCBTZWNvbmRzIG92ZXJmbG93U2Nyb2xsYmFyc0FuaW1hdGlvbkhpZGVEZWxh
eSB7IDJfcyB9Oworc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xsQ2FwdHVyZVRocmVzaG9sZCB7
IDE1MF9tcyB9OwogCiBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1h
dG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewpAQCAtNTAsNiAr
NTIsMTQgQEAgU2Nyb2xsQW5pbWF0b3JHdGs6OlNjcm9sbEFuaW1hdG9yR3RrKFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVh
KQogICAgICwgbV9vdmVybGF5U2Nyb2xsYmFyQW5pbWF0aW9uVGltZXIoKnRoaXMsICZTY3JvbGxB
bmltYXRvckd0azo6b3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQpCiB7CisgICAg
bV9raW5ldGljQW5pbWF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25LaW5l
dGljPihtX3Njcm9sbGFibGVBcmVhLCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7Cisj
aWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgICAgIGlmIChtX3Ntb290aEFuaW1hdGlv
bikKKyAgICAgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT5zZXRDdXJyZW50UG9zaXRpb24ocG9z
aXRpb24pOworI2VuZGlmCisgICAgICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1vdmUocG9zaXRpb24p
KTsKKyAgICB9KTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogICAgIGlmIChzY3Jv
bGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKICAgICAgICAgZW5zdXJlU21vb3Ro
U2Nyb2xsaW5nQW5pbWF0aW9uKCk7CkBAIC02Myw0OCArNzMsMTA4IEBAIFNjcm9sbEFuaW1hdG9y
R3RrOjp+U2Nyb2xsQW5pbWF0b3JHdGsoKQogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQog
dm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZW5zdXJlU21vb3RoU2Nyb2xsaW5nQW5pbWF0aW9uKCkK
IHsKLSAgICBpZiAobV9hbmltYXRpb24pCisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2FuaW1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xs
QW5pbWF0aW9uU21vb3RoPihtX3Njcm9sbGFibGVBcmVhLCBtX2N1cnJlbnRQb3NpdGlvbiwgW3Ro
aXNdKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikgewotICAgICAgICBGbG9hdFNpemUgZGVsdGEgPSBw
b3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9uOwotICAgICAgICBtX2N1cnJlbnRQb3NpdGlvbiA9
IFdURk1vdmUocG9zaXRpb24pOwotICAgICAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEp
OworICAgIG1fc21vb3RoQW5pbWF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRp
b25TbW9vdGg+KG1fc2Nyb2xsYWJsZUFyZWEsIG1fY3VycmVudFBvc2l0aW9uLCBbdGhpc10oRmxv
YXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAgICAgIHVwZGF0ZVBvc2l0aW9uKFdURk1vdmUocG9z
aXRpb24pKTsKICAgICB9KTsKIH0KKyNlbmRpZgogCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJ
TkcpCiBib29sIFNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBm
bG9hdCBtdWx0aXBsaWVyKQogewogICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmlt
YXRvckVuYWJsZWQoKSB8fCBncmFudWxhcml0eSA9PSBTY3JvbGxCeVByZWNpc2VQaXhlbCkKICAg
ICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFy
aXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIAogICAgIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1h
dGlvbigpOwotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFu
dWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1fc21vb3RoQW5pbWF0aW9u
LT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIH0K
KyNlbmRpZgogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQogewogICAgIEZsb2F0UG9pbnQgcG9z
aXRpb24gPSBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCwg
dG9GbG9hdFNpemUobV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKSkpOwotICAgIGlmICht
X2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3Np
dGlvbik7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT5zdG9wKCk7CisgICAgbV9zY3JvbGxIaXN0
b3J5LmNsZWFyKCk7CiAKLSAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVu
dFBvc2l0aW9uOwotICAgIG1fY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgbm90aWZ5
UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAg
ICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT5zZXRD
dXJyZW50UG9zaXRpb24ocG9zaXRpb24pOworI2VuZGlmCisKKyAgICB1cGRhdGVQb3NpdGlvbihX
VEZNb3ZlKHBvc2l0aW9uKSk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OndpbGxFbmRM
aXZlUmVzaXplKCkKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JHdGs6OmNvbXB1dGVWZWxvY2l0
eSgpCiB7Ci0gICAgaWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRl
VmlzaWJsZUxlbmd0aHMoKTsKKyAgICBpZiAobV9zY3JvbGxIaXN0b3J5LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIGRvdWJsZSBmaXJzdCA9IG1fc2Nyb2xsSGlzdG9yeVsw
XS50aW1lc3RhbXAoKTsKKyAgICBkb3VibGUgbGFzdCA9IG1fc2Nyb2xsSGlzdG9yeS5yYmVnaW4o
KS0+dGltZXN0YW1wKCk7CisKKyAgICBpZiAobGFzdCA9PSBmaXJzdCkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIEZsb2F0UG9pbnQgYWNjdW1EZWx0YTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHNjcm9sbEV2ZW50IDogbV9zY3JvbGxIaXN0b3J5KQorICAgICAgICBhY2N1bURlbHRhICs9IEZs
b2F0UG9pbnQoc2Nyb2xsRXZlbnQuZGVsdGFYKCksIHNjcm9sbEV2ZW50LmRlbHRhWSgpKTsKKwor
ICAgIG1fc2Nyb2xsSGlzdG9yeS5jbGVhcigpOworCisgICAgcmV0dXJuIEZsb2F0UG9pbnQoYWNj
dW1EZWx0YS54KCkgKiAtMTAwMCAvIChsYXN0IC0gZmlyc3QpLCBhY2N1bURlbHRhLnkoKSAqIC0x
MDAwIC8gKGxhc3QgLSBmaXJzdCkpOwogfQorCitib29sIFNjcm9sbEFuaW1hdG9yR3RrOjpoYW5k
bGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgbV9r
aW5ldGljQW5pbWF0aW9uLT5zdG9wKCk7CisKKyAgICBtX3Njcm9sbEhpc3RvcnkucmVtb3ZlQWxs
TWF0Y2hpbmcoWyZldmVudF0gKFBsYXRmb3JtV2hlZWxFdmVudCYgb3RoZXJFdmVudCkgLT4gYm9v
bCB7CisgICAgICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKGV2ZW50LnRpbWVz
dGFtcCgpIC0gb3RoZXJFdmVudC50aW1lc3RhbXAoKSkgPiBzY3JvbGxDYXB0dXJlVGhyZXNob2xk
OworICAgIH0pOworCisgICAgaWYgKGV2ZW50LmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpKSB7
CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYWRkIHRoZSBldmVudCB0byB0aGUgaGlzdG9y
eSBhcyBpdHMgZGVsdGEgd2lsbCBiZSAoMCwgMCkuCisgICAgICAgIHN0YXRpY19jYXN0PFNjcm9s
bEFuaW1hdGlvbktpbmV0aWMqPihtX2tpbmV0aWNBbmltYXRpb24uZ2V0KCkpLT5zdGFydChtX2N1
cnJlbnRQb3NpdGlvbiwgY29tcHV0ZVZlbG9jaXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpv
bnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGV2ZW50LmlzVHJhbnNpdGlvbmlu
Z1RvTW9tZW50dW1TY3JvbGwoKSkgeworICAgICAgICBtX3Njcm9sbEhpc3RvcnkuY2xlYXIoKTsK
KyAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0aW9uS2luZXRpYyo+KG1fa2luZXRpY0Fu
aW1hdGlvbi5nZXQoKSktPnN0YXJ0KG1fY3VycmVudFBvc2l0aW9uLCBldmVudC5zd2lwZVZlbG9j
aXR5KCksIG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBtX3Njcm9sbGFi
bGVBcmVhLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBtX3Njcm9sbEhpc3RvcnkuYXBwZW5kKGV2ZW50KTsKKworICAgIHJldHVybiBTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChldmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JHdGs6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sKKyAgICBtX2tpbmV0aWNBbmltYXRpb24t
PnVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykK
KyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0aW9uLT51
cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JH
dGs6OnVwZGF0ZVBvc2l0aW9uKEZsb2F0UG9pbnQmJiBwb3NpdGlvbikKK3sKKyAgICBGbG9hdFNp
emUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0aW9uOworICAgIG1fY3VycmVudFBv
c2l0aW9uID0gV1RGTW92ZShwb3NpdGlvbik7CisgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRl
bHRhKTsKK30KIAogdm9pZCBTY3JvbGxBbmltYXRvckd0azo6ZGlkQWRkVmVydGljYWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CisgICAgbV9raW5ldGljQW5pbWF0aW9uLT51cGRh
dGVWaXNpYmxlTGVuZ3RocygpOworCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi0gICAg
aWYgKG1fYW5pbWF0aW9uKQotICAgICAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0
aHMoKTsKKyAgICBpZiAobV9zbW9vdGhBbmltYXRpb24pCisgICAgICAgIG1fc21vb3RoQW5pbWF0
aW9uLT51cGRhdGVWaXNpYmxlTGVuZ3RocygpOwogI2VuZGlmCiAgICAgaWYgKCFzY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTcsOSArMTg3LDEx
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JHdGs6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yR3RrOjpkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogeworICAgIG1fa2luZXRpY0FuaW1h
dGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKwogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xM
SU5HKQotICAgIGlmIChtX2FuaW1hdGlvbikKLSAgICAgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZp
c2libGVMZW5ndGhzKCk7CisgICAgaWYgKG1fc21vb3RoQW5pbWF0aW9uKQorICAgICAgICBtX3Nt
b290aEFuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKICNlbmRpZgogICAgIGlmICgh
c2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3RrLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAppbmRleCBjNDI1
M2U1YWRiOTFmNzA0MTMzMDQ2ODQxYzI5NzRiZjdkZDhjZWNkLi45NjE0ZTYzNmQ2MGMxMWYwM2Qx
M2JjZTZjYzg3OTk1YmYxN2UzZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsQW5pbWF0b3JHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2Nyb2xsQW5pbWF0b3JHdGsuaApAQCAtNDYsOSArNDYsMTEgQEAgY2xhc3MgU2Nyb2xsQW5p
bWF0b3JHdGsgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewogcHJpdmF0ZToKICNpZiBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKICAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRh
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92
ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbEVuZExpdmVSZXNpemUo
KSBvdmVycmlkZTsKLSNlbmRpZgorCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEFkZEhvcml6b250YWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKikgb3ZlcnJpZGU7CkBAIC02MywxNiArNjUsMjIgQEAgY2xhc3Mg
U2Nyb2xsQW5pbWF0b3JHdGsgZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgewogICAgIHZv
aWQgbm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKSBvdmVy
cmlkZTsKICAgICB2b2lkIGxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihib29sKSBv
dmVycmlkZTsKIAorICAgIHZvaWQgdXBkYXRlUG9zaXRpb24oRmxvYXRQb2ludCYmKTsKKwogICAg
IHZvaWQgb3ZlcmxheVNjcm9sbGJhckFuaW1hdGlvblRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHNo
b3dPdmVybGF5U2Nyb2xsYmFycygpOwogICAgIHZvaWQgaGlkZU92ZXJsYXlTY3JvbGxiYXJzKCk7
CiAgICAgdm9pZCB1cGRhdGVPdmVybGF5U2Nyb2xsYmFyc09wYWNpdHkoKTsKIAorICAgIEZsb2F0
UG9pbnQgY29tcHV0ZVZlbG9jaXR5KCk7CisKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykK
ICAgICB2b2lkIGVuc3VyZVNtb290aFNjcm9sbGluZ0FuaW1hdGlvbigpOwogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9hbmltYXRpb247CisgICAgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9zbW9vdGhBbmltYXRpb247CiAjZW5kaWYKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2tpbmV0aWNBbmltYXRpb247CisgICAgVmVj
dG9yPFBsYXRmb3JtV2hlZWxFdmVudD4gbV9zY3JvbGxIaXN0b3J5OwogICAgIFNjcm9sbGJhciog
bV9ob3Jpem9udGFsT3ZlcmxheVNjcm9sbGJhciB7IG51bGxwdHIgfTsKICAgICBTY3JvbGxiYXIq
IG1fdmVydGljYWxPdmVybGF5U2Nyb2xsYmFyIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9vdmVy
bGF5U2Nyb2xsYmFyc0xvY2tlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05h
dGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCAxNWY5NTg2NzE3MzA5NjMzZmVjZmI2OGU3ODM1NTUz
NzFlMjc1NWFiLi5mMzU3MmFmMjkxZmE2NTNiMzU4ODBjYjZmNmMzMDM0ZmM2MTM4MjU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKQEAgLTUxLDYgKzUx
LDcgQEAgY2xhc3MgTmF0aXZlV2ViV2hlZWxFdmVudCA6IHB1YmxpYyBXZWJXaGVlbEV2ZW50IHsK
ICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KGNvbnN0IE5hdGl2
ZVdlYldoZWVsRXZlbnQmKTsKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50Kik7Cisg
ICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCosIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBX
ZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKTsKICNlbGlmIFBMQVRGT1JNKFdQRSkK
ICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCosIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaApp
bmRleCA0ZWI1MWUzOTdhYWE4MDhlNGQwYTE3NjYyZDE0ZjNlYzkzMWJlN2Q2Li5lY2Q3YzM4OGIz
NjgzZDgxNzMyOGM2Mjg1ZjQ5NzllMjc3MDg5OWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQu
aApAQCAtMTgzLDcgKzE4Myw3IEBAIGNsYXNzIFdlYldoZWVsRXZlbnQgOiBwdWJsaWMgV2ViRXZl
bnQgewogICAgICAgICBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudAogICAgIH07CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGVu
dW0gUGhhc2UgewogICAgICAgICBQaGFzZU5vbmUgICAgICAgID0gMCwKICAgICAgICAgUGhhc2VC
ZWdhbiAgICAgICA9IDEgPDwgMCwKQEAgLTIwMCw2ICsyMDAsOCBAQCBjbGFzcyBXZWJXaGVlbEV2
ZW50IDogcHVibGljIFdlYkV2ZW50IHsKICAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2Jh
bFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBNb2RpZmllcnMsIGRvdWJsZSB0
aW1lc3RhbXApOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdlYldoZWVsRXZlbnQoVHlwZSwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIGJvb2wgZGlyZWN0
aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlLCBQaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgYm9vbCBo
YXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzLCB1aW50MzJfdCBzY3JvbGxDb3VudCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiB1bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEsIE1vZGlmaWVycywg
ZG91YmxlIHRpbWVzdGFtcCk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgV2ViV2hlZWxFdmVu
dChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0
YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBQaGFzZSwgUGhhc2UgbW9t
ZW50dW1QaGFzZSwgR3JhbnVsYXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAj
ZW5kaWYKIAogICAgIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQpAQCAtMjA4LDkgKzIxMCwxMSBAQCBjbGFzcyBXZWJXaGVlbEV2
ZW50IDogcHVibGljIFdlYkV2ZW50IHsKICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUgd2hl
ZWxUaWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxUaWNrczsgfQogICAgIEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R3JhbnVsYXJpdHk+KG1f
Z3JhbnVsYXJpdHkpOyB9CiAgICAgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoKSBj
b25zdCB7IHJldHVybiBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZTsgfQotI2lmIFBMQVRG
T1JNKENPQ09BKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgUGhh
c2UgcGhhc2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQaGFzZT4obV9waGFzZSk7IH0K
ICAgICBQaGFzZSBtb21lbnR1bVBoYXNlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UGhh
c2U+KG1fbW9tZW50dW1QaGFzZSk7IH0KKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUHJl
Y2lzZVNjcm9sbGluZ0RlbHRhczsgfQogICAgIHVpbnQzMl90IHNjcm9sbENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxDb3VudDsgfQogICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
dW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCkgY29uc3QgeyByZXR1cm4gbV91bmFjY2VsZXJh
dGVkU2Nyb2xsaW5nRGVsdGE7IH0KQEAgLTIyOCw5ICsyMzIsMTEgQEAgY2xhc3MgV2ViV2hlZWxF
dmVudCA6IHB1YmxpYyBXZWJFdmVudCB7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fd2hlZWxU
aWNrczsKICAgICB1aW50MzJfdCBtX2dyYW51bGFyaXR5OyAvLyBHcmFudWxhcml0eQogICAgIGJv
b2wgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKEdUSykKKyAgICB1aW50MzJfdCBtX3BoYXNlIHsgUGhhc2U6OlBoYXNlTm9uZSB9
OworICAgIHVpbnQzMl90IG1fbW9tZW50dW1QaGFzZSB7IFBoYXNlOjpQaGFzZU5vbmUgfTsKKyNl
bmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHVpbnQzMl90IG1fcGhhc2U7IC8vIFBoYXNl
Ci0gICAgdWludDMyX3QgbV9tb21lbnR1bVBoYXNlOyAvLyBQaGFzZQogICAgIGJvb2wgbV9oYXNQ
cmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwogICAgIHVpbnQzMl90IG1fc2Nyb2xsQ291bnQ7CiAgICAg
V2ViQ29yZTo6RmxvYXRTaXplIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAppbmRleCBjNDZiZjc0MzE0
OGYyZDM3ZjE0NzllY2EwNTNiZWI3YzAyOGVlOGIxLi43MGI5MjgwNzEwMGFiMTdjNGVlZGNkMmNl
M2MyNDFhZmJiMmNmMzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZl
bnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252
ZXJzaW9uLmNwcApAQCAtMTU1LDkgKzE1NSwxMSBAQCBjbGFzcyBXZWJLaXQyUGxhdGZvcm1XaGVl
bEV2ZW50IDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCB7CiAgICAgICAgIG1f
d2hlZWxUaWNrc1kgPSB3ZWJFdmVudC53aGVlbFRpY2tzKCkuaGVpZ2h0KCk7CiAgICAgICAgIG1f
Z3JhbnVsYXJpdHkgPSAod2ViRXZlbnQuZ3JhbnVsYXJpdHkoKSA9PSBXZWJXaGVlbEV2ZW50OjpT
Y3JvbGxCeVBhZ2VXaGVlbEV2ZW50KSA/IFdlYkNvcmU6OlNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQg
OiBXZWJDb3JlOjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKICAgICAgICAgbV9kaXJlY3Rpb25J
bnZlcnRlZEZyb21EZXZpY2UgPSB3ZWJFdmVudC5kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2Uo
KTsKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0o
R1RLKQogICAgICAgICBtX3BoYXNlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U+KHdlYkV2ZW50LnBoYXNlKCkpOwogICAgICAgICBtX21vbWVudHVtUGhhc2Ug
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4od2ViRXZlbnQu
bW9tZW50dW1QaGFzZSgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBt
X2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSB3ZWJFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5n
RGVsdGFzKCk7CiAgICAgICAgIG1fc2Nyb2xsQ291bnQgPSB3ZWJFdmVudC5zY3JvbGxDb3VudCgp
OwogICAgICAgICBtX3VuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVggPSB3ZWJFdmVudC51bmFj
Y2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEoKS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YldoZWVsRXZlbnQuY3BwCmluZGV4IDdkZGNlMGNiYmU5NjI3MWI5ZGZjMzc1YjI1M2UwNDdjNTk3
NjJmN2EuLjEzZmU0OGRlOTlkOThkYzlmNmVhYWJmNmY4NDUyY2ZhYjE0NGQyNGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAKQEAgLTY2LDYgKzY2LDIwIEBAIFdlYldo
ZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IEludFBvaW50CiB7CiAgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkp
OwogfQorI2VsaWYgUExBVEZPUk0oR1RLKQorV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChU
eXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2Jh
bFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVs
VGlja3MsIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgTW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdl
YkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQorICAgICwgbV9wb3NpdGlvbihwb3Np
dGlvbikKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgLCBtX2Rl
bHRhKGRlbHRhKQorICAgICwgbV93aGVlbFRpY2tzKHdoZWVsVGlja3MpCisgICAgLCBtX2dyYW51
bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICwgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2Uo
ZmFsc2UpCisgICAgLCBtX3BoYXNlKHBoYXNlKQorICAgICwgbV9tb21lbnR1bVBoYXNlKG1vbWVu
dHVtUGhhc2UpCit7CisgICAgQVNTRVJUKGlzV2hlZWxFdmVudFR5cGUodHlwZSkpOworfQogI2Vu
ZGlmCiAKIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKQEAgLTc4LDkgKzkyLDExIEBAIHZvaWQgV2ViV2hlZWxFdmVudDo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IG1fd2hlZWxUaWNrczsKICAg
ICBlbmNvZGVyIDw8IG1fZ3JhbnVsYXJpdHk7CiAgICAgZW5jb2RlciA8PCBtX2RpcmVjdGlvbklu
dmVydGVkRnJvbURldmljZTsKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NP
QSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGVuY29kZXIgPDwgbV9waGFzZTsKICAgICBlbmNvZGVy
IDw8IG1fbW9tZW50dW1QaGFzZTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVu
Y29kZXIgPDwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwogICAgIGVuY29kZXIgPDwgbV9z
Y3JvbGxDb3VudDsKICAgICBlbmNvZGVyIDw8IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
OwpAQCAtMTAzLDExICsxMTksMTMgQEAgYm9vbCBXZWJXaGVlbEV2ZW50OjpkZWNvZGUoSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJXaGVlbEV2ZW50JiB0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0Lm1f
cGhhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0
Lm1fbW9tZW50dW1QaGFzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodC5tX2hhc1ByZWNpc2VTY3Jv
bGxpbmdEZWx0YXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh0Lm1fc2Nyb2xsQ291bnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvTmF0aXZlV2ViV2hlZWxFdmVudEd0ay5jcHAKaW5kZXggYjM2NzYxMjA4NzQzNjZkYjNhYTcz
OTJlMTBjMjU2MzdiYzMzZjllMy4uNWNhZjNkMjNhYjE2YzAzZmQyMzcxMjQxYjI2OTYzMTEyNWE5
OWVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVl
bEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldo
ZWVsRXZlbnRHdGsuY3BwCkBAIC0zNyw4ICszNywxNCBAQCBOYXRpdmVXZWJXaGVlbEV2ZW50OjpO
YXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiBldmVudCkKIHsKIH0KIAorTmF0aXZlV2ViV2hl
ZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVudCogZXZlbnQsIFdlYldoZWVsRXZl
bnQ6OlBoYXNlIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBoYXNlKQorICAg
IDogV2ViV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZl
bnQsIHBoYXNlLCBtb21lbnR1bVBoYXNlKSkKKyAgICAsIG1fbmF0aXZlRXZlbnQoZ2RrX2V2ZW50
X2NvcHkoZXZlbnQpKQoreworfQorCiBOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVl
bEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQotICAgIDogV2ViV2hlZWxF
dmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQubmF0aXZlRXZl
bnQoKSkpCisgICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hl
ZWxFdmVudChldmVudC5uYXRpdmVFdmVudCgpLCBldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1
bVBoYXNlKCkpKQogICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29weShldmVudC5uYXRp
dmVFdmVudCgpKSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
V2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRG
YWN0b3J5LmNwcAppbmRleCBhZmI1Zjg0NTE3ZWFkNzYzMjNhYzI4NTM5MTE4NjRlOTM2YjNlN2Yz
Li42OGQ2ZDM4ODU5YTAyMDczZTk4YTdjOGE3ZWU2MjZlMzA5YWRkNWRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0xNDUsNiArMTQ1LDI3
IEBAIFdlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGNv
bnN0IEdka0V2ZW50KiBldmVudCwgaW50IGN1CiAKIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0
b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKIHsKKyNpZm5k
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKKyAg
ICBXZWJXaGVlbEV2ZW50OjpQaGFzZSBwaGFzZSA9IGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9l
dmVudChldmVudCkgPworICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VFbmRlZCA6
CisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQ7CisjZWxzZQorICAg
IGRvdWJsZSBkZWx0YVgsIGRlbHRhWTsKKyAgICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMo
ZXZlbnQsICZkZWx0YVgsICZkZWx0YVkpOworICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNl
ID0gZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9TTU9PVEggJiYgIWRlbHRh
WCAmJiAhZGVsdGFZID8KKyAgICAgICAgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlRW5kZWQg
OgorICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkOworI2VuZGlmCisj
ZWxzZQorICAgIFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlID0gV2ViV2hlZWxFdmVudDo6UGhh
c2U6OlBoYXNlQ2hhbmdlZDsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCisgICAgcmV0
dXJuIGNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQsIHBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFz
ZTo6UGhhc2VOb25lKTsKK30KKworV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBXZWJXaGVlbEV2ZW50OjpQaGFz
ZSBwaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSkKK3sKICAgICBkb3Vi
bGUgeCwgeSwgeFJvb3QsIHlSb290OwogICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAm
eCwgJnkpOwogICAgIGdka19ldmVudF9nZXRfcm9vdF9jb29yZHMoZXZlbnQsICZ4Um9vdCwgJnlS
b290KTsKQEAgLTE4MSwxMyArMjAyLDE1IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKICAgICBGbG9hdFNp
emUgZGVsdGEod2hlZWxUaWNrcy53aWR0aCgpICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQoKSAq
IHN0ZXApOwogCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHgsIHkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIEludFBvaW50KHhSb290LCB5Um9vdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWxUaWNrcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CisgICAgICAgIElu
dFBvaW50KHgsIHkpLAorICAgICAgICBJbnRQb2ludCh4Um9vdCwgeVJvb3QpLAorICAgICAgICBk
ZWx0YSwKKyAgICAgICAgd2hlZWxUaWNrcywKKyAgICAgICAgcGhhc2UsCisgICAgICAgIG1vbWVu
dHVtUGhhc2UsCisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50
LAorICAgICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCisgICAgICAgIGdka19ldmVudF9n
ZXRfdGltZShldmVudCkpOwogfQogCiBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6
Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0IFdlYkNv
cmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzLCBWZWN0b3I8U3RyaW5n
PiYmIGNvbW1hbmRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJF
dmVudEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5
LmgKaW5kZXggMjhiNjk1MzhlMjJiYjM2YmE0MjU1NjBmYjAzZDFiNWExMzI2YjBmNi4uOGZlN2Nk
Y2U1NmYwNjNhZGE0MTU1ZTAwOGVmMDcwYjhkMWNkM2YzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIFdlYkV2
ZW50RmFjdG9yeSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2Vi
TW91c2VFdmVudChjb25zdCBHZGtFdmVudCosIGludCk7CiAgICAgc3RhdGljIFdlYldoZWVsRXZl
bnQgY3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCopOworICAgIHN0YXRpYyBXZWJX
aGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBXZWJXaGVlbEV2
ZW50OjpQaGFzZSwgV2ViV2hlZWxFdmVudDo6UGhhc2UgbW9tZW50dW1QaGFzZSk7CiAgICAgc3Rh
dGljIFdlYktleWJvYXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVu
dCosIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYsIFZlY3RvcjxTdHJpbmc+JiYg
Y29tbWFuZHMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgc3RhdGljIFdlYlRvdWNo
RXZlbnQgY3JlYXRlV2ViVG91Y2hFdmVudChjb25zdCBHZGtFdmVudCosIFZlY3RvcjxXZWJQbGF0
Zm9ybVRvdWNoUG9pbnQ+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAppbmRleCAzYTQ3ODk0OTUyYWQ3YzE3NDA5M2NmYzFkOGI4MDM3Y2MxZmNjNjlhLi5iMTcw
MmM1MGVmNjYxNWE1NTFiZTE1ZjFmM2E4ZWQxZmI1NWEyZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTg4Niw3ICsxODg2LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZl
bnQpCiAKICAgICBpZiAoIW1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVudHMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIG1fd2hlZWxFdmVudFF1ZXVlLmFwcGVuZChldmVudCk7Ci0gICAgICAgIGlm
IChtX3doZWVsRXZlbnRRdWV1ZS5zaXplKCkgPCB3aGVlbEV2ZW50UXVldWVTaXplVGhyZXNob2xk
KQorICAgICAgICBpZiAoIXNob3VsZFByb2Nlc3NXaGVlbEV2ZW50Tm93KGV2ZW50KSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgLy8gVGhlIHF1ZXVlIGhhcyB0b28gbWFueSB3aGVlbCBl
dmVudHMsIHNvIHB1c2ggYSBuZXcgZXZlbnQuCiAgICAgfQpAQCAtMTkyNyw2ICsxOTI3LDI3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBl
dmVudCkKICAgICBtX3Byb2Nlc3MtPmlzUmVzcG9uc2l2ZShudWxscHRyKTsKIH0KIAorYm9vbCBX
ZWJQYWdlUHJveHk6OnNob3VsZFByb2Nlc3NXaGVlbEV2ZW50Tm93KGNvbnN0IFdlYldoZWVsRXZl
bnQmIGV2ZW50KSBjb25zdAoreworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBEb24ndCBxdWV1
ZSBldmVudHMgcmVwcmVzZW50aW5nIGEgbm9uLXRyaXZpYWwgc2Nyb2xsaW5nIHBoYXNlIHRvCisg
ICAgLy8gYXZvaWQgaGF2aW5nIHRoZW0gdHJhcHBlZCBpbiB0aGUgcXVldWUsIHBvdGVudGlhbGx5
IHByZXZlbnRpbmcgYQorICAgIC8vIHNjcm9sbGluZyBzZXNzaW9uIHRvIGJlZ2lubmluZyBvciBl
bmQgY29ycmVjdGx5LgorICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgYnkgcGxhdGZvcm1zIHdo
b3NlIFdlYldoZWVsRXZlbnQgaGFzIHRoaXMgcGhhc2UKKyAgICAvLyBpbmZvcm1hdGlvbiAoQ29j
b2EgYW5kIEdUSyspIGJ1dCBDb2NvYSB3YXMgZmluZSB3aXRob3V0IGl0LgorICAgIGlmIChldmVu
dC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUKKyAgICAgICAgfHwg
ZXZlbnQucGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkCisgICAg
ICAgIHx8IGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhh
c2VOb25lCisgICAgICAgIHx8IGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50
OjpQaGFzZTo6UGhhc2VDaGFuZ2VkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGV2ZW50KTsKKyNlbmRpZgorICAgIGlmIChtX3doZWVsRXZlbnRRdWV1ZS5z
aXplKCkgPj0gd2hlZWxFdmVudFF1ZXVlU2l6ZVRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlS2V5
Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBp
ZiAoIWlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRl
eCBmODJjMDIwNThiNTU3NzM5NzdkM2ZiNmUzNWNkM2Y0NTYxODIzNjMxLi5lNTM1YmFjMDEzM2Yw
MDRhODg2NDRhOTcwZmM4ODk1Yjk2NTQ2ZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCkBAIC0xNTU3LDYgKzE1NTcsNyBAQCBjbGFzcyBXZWJQYWdlUHJveHkgOiBw
dWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpQYWdlPgogCiAgICAgdm9p
ZCBwcm9jZXNzTmV4dFF1ZXVlZFdoZWVsRXZlbnQoKTsKICAgICB2b2lkIHNlbmRXaGVlbEV2ZW50
KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICBib29sIHNob3VsZFByb2Nlc3NXaGVlbEV2ZW50
Tm93KGNvbnN0IFdlYldoZWVsRXZlbnQmKSBjb25zdDsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAgICAgdm9pZCB1cGRhdGVUb3VjaEV2ZW50VHJhY2tpbmcoY29uc3QgV2ViVG91Y2hFdmVu
dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9s
bGVyLmNwcAppbmRleCBhMzczNDI5YzFjNWMyNzgxM2VkZTUxMTk1MGY5ZWEyMjQ0MWZjMzI5Li4x
MTRjYzVmMWM2MTJiMTc2MDg2NzFiYTQwNDY1ZTA0MGY4ZjBiZTA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcApAQCAtNDEsNiAr
NDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmVD
b250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAgICA6IG1fZHJhZ0dlc3R1cmUocGFnZSkK
KyAgICAsIG1fc3dpcGVHZXN0dXJlKHBhZ2UpCiAgICAgLCBtX3pvb21HZXN0dXJlKHBhZ2UpCiB7
CiB9CkBAIC00OSwxMyArNTAsMTQgQEAgYm9vbCBHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZl
bnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogewogICAgIGJvb2wgd2FzUHJvY2Vzc2luZ0dlc3R1
cmVzID0gaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKICAgICBtX2RyYWdHZXN0dXJlLmhhbmRsZUV2
ZW50KGV2ZW50KTsKKyAgICBtX3N3aXBlR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CiAgICAg
bV96b29tR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT50eXBl
ID09IEdES19UT1VDSF9FTkQgPyB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgOiBpc1Byb2Nlc3NpbmdH
ZXN0dXJlcygpOwogfQogCiBib29sIEdlc3R1cmVDb250cm9sbGVyOjppc1Byb2Nlc3NpbmdHZXN0
dXJlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHJhZ0dlc3R1cmUuaXNBY3RpdmUoKSB8fCBt
X3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fZHJhZ0dlc3R1cmUuaXNBY3Rp
dmUoKSB8fCBtX3N3aXBlR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fem9vbUdlc3R1cmUuaXNBY3Rp
dmUoKTsKIH0KIAogR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6Okdlc3R1cmUoR3RrR2VzdHVy
ZSogZ2VzdHVyZSwgV2ViUGFnZVByb3h5JiBwYWdlKQpAQCAtNzUsMjAgKzc3LDQwIEBAIHZvaWQg
R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBl
dmVudCkKICAgICBndGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQoR1RLX0VWRU5UX0NP
TlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQpOwogfQogCi12b2lkIEdlc3R1cmVDb250
cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRv
dWJsZSB4LCBkb3VibGUgeSkKK3N0YXRpYyBHVW5pcXVlUHRyPEdka0V2ZW50PiBjcmVhdGVTY3Jv
bGxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91Ymxl
IGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgZ2Jvb2xlYW4gaXNTdG9wKQogewotICAgIEFTU0VSVCht
X2luRHJhZyk7CiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQoZ2RrX2V2ZW50
X25ldyhHREtfU0NST0xMKSk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC50aW1lID0gZXZlbnQt
PnRvdWNoLnRpbWU7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54ID0gbV9zdGFydC54KCk7Ci0g
ICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55ID0gbV9zdGFydC55KCk7CisgICAgc2Nyb2xsRXZlbnQt
PnNjcm9sbC54ID0geDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkgPSB5OwogICAgIHNjcm9s
bEV2ZW50LT5zY3JvbGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsKICAgICBzY3JvbGxF
dmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CiAgICAgc2Nyb2xsRXZl
bnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKLSAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLmRlbHRhX3ggPSAobV9vZmZzZXQueCgpIC0geCkgLyBTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCk7Ci0gICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gKG1fb2Zm
c2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgIHNjcm9s
bEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IGRlbHRhWDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xs
LmRlbHRhX3kgPSBkZWx0YVk7CiAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5zdGF0ZSA9IGV2ZW50
LT50b3VjaC5zdGF0ZTsKLSAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVl
bEV2ZW50KHNjcm9sbEV2ZW50LmdldCgpKSk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAs
IDApCisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5pc19zdG9wID0gaXNTdG9wOworI2VuZGlmCisg
ICAgcmV0dXJuIHNjcm9sbEV2ZW50OworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFn
R2VzdHVyZTo6c3RhcnREcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQo
IW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9IGNyZWF0
ZVNjcm9sbEV2ZW50KGV2ZW50LCBtX3N0YXJ0LngoKSwgbV9zdGFydC55KCksIDAsIDAsIEZBTFNF
KTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9s
bEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbiwgV2ViV2hlZWxF
dmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpE
cmFnR2VzdHVyZTo6aGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBk
b3VibGUgeSkKK3sKKyAgICBBU1NFUlQobV9pbkRyYWcpOworICAgIEdVbmlxdWVQdHI8R2RrRXZl
bnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQoZXZlbnQsCisgICAgICAgIG1fc3Rh
cnQueCgpLCBtX3N0YXJ0LnkoKSwKKyAgICAgICAgKG1fb2Zmc2V0LngoKSAtIHgpIC8gU2Nyb2xs
YmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLAorICAgICAgICAobV9vZmZzZXQueSgpIC0geSkgLyBT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksCisgICAgICAgIEZBTFNFKTsKKyAgICBtX3Bh
Z2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHNjcm9sbEV2ZW50LmdldCgp
LCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkLCBXZWJXaGVlbEV2ZW50OjpQaGFz
ZTo6UGhhc2VOb25lKSk7CiB9CiAKIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJl
OjpoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQpAQCAtMTI4LDYgKzE1MCw3IEBAIHZv
aWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVyZSogZHJh
Z0dlc3R1cmUsIGRvdWJsZSB4LCBkCiAgICAgdW5zaWduZWQgZGVsYXk7CiAgICAgZ19vYmplY3Rf
Z2V0KGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKHdpZGdldCksICJndGstbG9uZy1wcmVzcy10aW1l
IiwgJmRlbGF5LCBudWxscHRyKTsKICAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0
LnN0YXJ0T25lU2hvdCgxX21zICogZGVsYXkpOworICAgIGRyYWdHZXN0dXJlLT5zdGFydERyYWco
Z3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKTsKIH0KIAogdm9p
ZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OnVwZGF0ZShEcmFnR2VzdHVyZSogZHJh
Z0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKQEAgLTE0
OSwxMSArMTcyLDE0IEBAIHZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRh
dGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUgeCwKIHZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjplbmQoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBHZGtFdmVu
dFNlcXVlbmNlKiBzZXF1ZW5jZSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKIHsKICAgICBkcmFnR2Vz
dHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LnN0b3AoKTsKKyAgICBpZiAoIWd0a19nZXN0dXJlX2hh
bmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKSB7CisgICAgICAgIGd0a19nZXN0dXJl
X3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICBpZiAoIWRyYWdHZXN0dXJlLT5tX2luRHJhZykgewogICAgICAg
ICBkcmFnR2VzdHVyZS0+aGFuZGxlVGFwKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1
cmUsIHNlcXVlbmNlKSk7CiAgICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBH
VEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsKLSAgICB9IGVsc2UgaWYgKCFndGtfZ2VzdHVyZV9o
YW5kbGVzX3NlcXVlbmNlKGdlc3R1cmUsIHNlcXVlbmNlKSkKLSAgICAgICAgZ3RrX2dlc3R1cmVf
c2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOworICAgIH0KIH0K
IAogdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmxvbmdQcmVzc0ZpcmVkKCkK
QEAgLTE3Miw2ICsxOTgsMzAgQEAgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFn
R2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fZ2VzdHVyZS5nZXQoKSwgImVuZCIsIEdfQ0FMTEJBQ0soZW5kKSwgdGhpcyk7CiB9CiAKK3Zv
aWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3RhcnRNb21lbnR1bVNjcm9sbChj
b25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVkp
Cit7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxF
dmVudChldmVudCwgZXZlbnQtPnRvdWNoLngsIGV2ZW50LT50b3VjaC55LCB2ZWxvY2l0eVgsIHZl
bG9jaXR5WSwgVFJVRSk7CisgICAgbV9wYWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hl
ZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9u
ZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQmVnYW4pKTsKK30KKwordm9pZCBHZXN0dXJl
Q29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzd2lwZShTd2lwZUdlc3R1cmUqIHN3aXBlR2VzdHVy
ZSwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSogZ2VzdHVy
ZSkKK3sKKyAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3Npbmds
ZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOworICAg
IGlmICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGd0a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0
dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisgICAgc3dpcGVH
ZXN0dXJlLT5zdGFydE1vbWVudHVtU2Nyb2xsKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdl
c3R1cmUsIHNlcXVlbmNlKSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVkpOworfQorCitHZXN0dXJlQ29u
dHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUoV2ViUGFnZVByb3h5JiBwYWdlKQor
ICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV9zd2lwZV9uZXcocGFnZS52aWV3V2lkZ2V0KCkpLCBw
YWdlKQoreworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVS
RV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgInN3aXBlIiwgR19DQUxMQkFDSyhzd2lwZSksIHRoaXMp
OworfQorCiBJbnRQb2ludCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNlbnRlcigp
IGNvbnN0CiB7CiAgICAgZG91YmxlIHgsIHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggODY3OTJkZjQyY2Y0YzM0Zjg5ZDhkZmQ3
YzAxOTExOTkwNDE2NzRjYS4uZTk2MDMxZmI5ZTJhMzI3YWU5YzYxOGQxNGZlOWU0MzI1ODZjZWIw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xs
ZXIuaApAQCAtNjcsNiArNjcsOCBAQCBjbGFzcyBHZXN0dXJlQ29udHJvbGxlciB7CiAgICAgICAg
IERyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8g
Tm90aWZ5IHRoYXQgYSBkcmFnIHN0YXJ0ZWQsIGFsbG93aW5nIHRvIHN0b3Aga2luZXRpYyBkZWNl
bGVyYXRpb24uCisgICAgICAgIHZvaWQgc3RhcnREcmFnKGNvbnN0IEdka0V2ZW50Kik7CiAgICAg
ICAgIHZvaWQgaGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCosIGRvdWJsZSB4LCBkb3VibGUgeSk7
CiAgICAgICAgIHZvaWQgaGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50Kik7CiAgICAgICAgIHZvaWQg
bG9uZ1ByZXNzRmlyZWQoKTsKQEAgLTgyLDYgKzg0LDE2IEBAIGNsYXNzIEdlc3R1cmVDb250cm9s
bGVyIHsKICAgICAgICAgYm9vbCBtX2luRHJhZzsKICAgICB9OwogCisgICAgY2xhc3MgU3dpcGVH
ZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3dp
cGVHZXN0dXJlKFdlYlBhZ2VQcm94eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBz
dGFydE1vbWVudHVtU2Nyb2xsKGNvbnN0IEdka0V2ZW50KiwgZG91YmxlIHZlbG9jaXR5WCwgZG91
YmxlIHZlbG9jaXR5WSk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUoU3dpcGVHZXN0dXJl
KiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSopOworICAg
IH07CisKICAgICBjbGFzcyBab29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFpvb21HZXN0dXJlKFdlYlBhZ2VQcm94eSYpOwpAQCAtMTAxLDYg
KzExMyw3IEBAIGNsYXNzIEdlc3R1cmVDb250cm9sbGVyIHsKICAgICB9OwogCiAgICAgRHJhZ0dl
c3R1cmUgbV9kcmFnR2VzdHVyZTsKKyAgICBTd2lwZUdlc3R1cmUgbV9zd2lwZUdlc3R1cmU7CiAg
ICAgWm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKIH07CiAK
</data>
<flag name="review"
          id="333340"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>