<?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>80607</bug_id>
          
          <creation_ts>2012-03-08 10:18:38 -0800</creation_ts>
          <short_desc>[chromium] Wire up PlatformGestureCurves for CC, ScrollAnimatorNone.</short_desc>
          <delta_ts>2012-03-15 15:31:58 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>79827</dependson>
          <blocked>80858</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="W. James MacLean">wjmaclean</reporter>
          <assigned_to name="W. James MacLean">wjmaclean</assigned_to>
          <cc>abarth</cc>
    
    <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>rjkroege</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>573907</commentid>
    <comment_count>0</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 10:18:38 -0800</bug_when>
    <thetext>[chromium] Wire up PlatformGestureCurves for CC, ScrollAnimatorNone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573908</commentid>
    <comment_count>1</comment_count>
      <attachid>130840</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 10:20:02 -0800</bug_when>
    <thetext>Created attachment 130840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573912</commentid>
    <comment_count>2</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 10:21:45 -0800</bug_when>
    <thetext>This will fail on the bots, as it depends on 79827.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573915</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-08 10:22:38 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573918</commentid>
    <comment_count>4</comment_count>
      <attachid>130840</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-08 10:25:29 -0800</bug_when>
    <thetext>Comment on attachment 130840
Patch

Attachment 130840 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11865351</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573930</commentid>
    <comment_count>5</comment_count>
      <attachid>130840</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-08 10:36:32 -0800</bug_when>
    <thetext>Comment on attachment 130840
Patch

Attachment 130840 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11861379</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574071</commentid>
    <comment_count>6</comment_count>
      <attachid>130876</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 12:21:12 -0800</bug_when>
    <thetext>Created attachment 130876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574072</commentid>
    <comment_count>7</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 12:21:52 -0800</bug_when>
    <thetext>Revised patch to remove icky cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574334</commentid>
    <comment_count>8</comment_count>
      <attachid>130876</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-08 15:49:21 -0800</bug_when>
    <thetext>Comment on attachment 130876
Patch

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

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:517
&gt; +// Implementation of PlatformGestureCurveTarget interface functions.

dont need this comment

&gt; Source/WebCore/platform/ScrollAnimatorNone.h:91
&gt; +    // Declaration of PlatformGestureCurveTarget interface function.

I think we typically say something like
// PlatformGestureCurveTarget implementation.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:747
&gt; +        m_client-&gt;setNeedsRedrawOnImplThread();

I think you need this conditional on isContinuing?

isContinuning -&gt; animationStillRunning?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:30
&gt; +#include &quot;cc/CCGestureCurve.h&quot;

can we get away with predeclaring? I dont see a use of the curve here... but Im probably blind.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:77
&gt; +    virtual void clearActiveGestureAnimation();

Can we just make setActiveGestureANimation(nullptr) work as you&apos;d expect it? If so, put comments on the CCInputHandlerClient class explaining to pass nullptr to clear.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:30
&gt; +#include &quot;PlatformGestureCurve.h&quot;

needed?

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:32
&gt; +#include &quot;TouchFlingPlatformGestureCurve.h&quot;

Dont the TouchFlingPlatformGestureCurve subclasses bring in the platformgesturecurve base class?

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:39
&gt; +#include &quot;cc/CCLayerTreeHostImpl.h&quot;

Shouldn&apos;t be including this... what&apos;s causing us to include this? Lets kill it with fire.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:42
&gt; +#include &lt;wtf/CurrentTime.h&gt;

whats causing us to bring this in? ideally, we dont.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:58
&gt; +class CCToPlatformGestureCurveTargetAdapter : public PlatformGestureCurveTarget {

Since this is instantiated just inside the apply function of the curve adapter, then it should just be an inner class of that class.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:63
&gt; +    virtual void setScrollIncrement(const IntPoint&amp;);

You can implement inline when you&apos;re in cpp files. For simple stuff like this, for certain.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:103
&gt; +    CCToPlatformGestureCurveTargetAdapter adapter(target);

This should just be an inner class called TargetAdapter

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:107
&gt; +class GestureCurveTarget : public CCGestureCurveTarget {

instead of having this, we can make WebCompositorInputHandlerImpl implement CCGestureCurveTarget? Then you&apos;d just pass &quot;this&quot; into the CCActiveGestureAnimation::create function&apos;s second argument.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:272
&gt; +                                                                    PlatformGestureCurveToCCGestureCurveAdapter::create(flingCurve.release()),

indent is funky here. one more temporary variable maybe?

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:273
&gt; +                                                                    m_gestureCurveTarget.get()));

Indewhy not just make a class

GestureCurveTarget : CCGestureCurve, PlatformGestureCCurve</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574583</commentid>
    <comment_count>9</comment_count>
      <attachid>130876</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 21:17:26 -0800</bug_when>
    <thetext>Comment on attachment 130876
Patch

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

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:517
&gt;&gt; +// Implementation of PlatformGestureCurveTarget interface functions.
&gt; 
&gt; dont need this comment

Removed.

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.h:91
&gt;&gt; +    // Declaration of PlatformGestureCurveTarget interface function.
&gt; 
&gt; I think we typically say something like
&gt; // PlatformGestureCurveTarget implementation.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:747
&gt;&gt; +        m_client-&gt;setNeedsRedrawOnImplThread();
&gt; 
&gt; I think you need this conditional on isContinuing?
&gt; 
&gt; isContinuning -&gt; animationStillRunning?

I wasn&apos;t clear on this ... fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:30
&gt;&gt; +#include &quot;cc/CCGestureCurve.h&quot;
&gt; 
&gt; can we get away with predeclaring? I dont see a use of the curve here... but Im probably blind.

We can just remove it ... it&apos;s a remnant from an earlier iteration.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:77
&gt;&gt; +    virtual void clearActiveGestureAnimation();
&gt; 
&gt; Can we just make setActiveGestureANimation(nullptr) work as you&apos;d expect it? If so, put comments on the CCInputHandlerClient class explaining to pass nullptr to clear.

Hmm, not sure how that works with PassOwnPtr&lt;&gt; but will investigate.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:30
&gt;&gt; +#include &quot;PlatformGestureCurve.h&quot;
&gt; 
&gt; needed?

Nope, based on your reasoning below. Removed.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:32
&gt;&gt; +#include &quot;TouchFlingPlatformGestureCurve.h&quot;
&gt; 
&gt; Dont the TouchFlingPlatformGestureCurve subclasses bring in the platformgesturecurve base class?

Yes.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:39
&gt;&gt; +#include &quot;cc/CCLayerTreeHostImpl.h&quot;
&gt; 
&gt; Shouldn&apos;t be including this... what&apos;s causing us to include this? Lets kill it with fire.

Ooops, remnant from the icky cast we got rid of (this *was* necessary for that, part of why it was icky).

Removed.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:42
&gt;&gt; +#include &lt;wtf/CurrentTime.h&gt;
&gt; 
&gt; whats causing us to bring this in? ideally, we dont.

We need to set a start time for the animation, and therefore need monotonicallyIncreasingTime. I&apos;m not sure how we can avoid this (save maybe have *all* gesture animation types set this internally in their constructors, but that seems limiting).

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:58
&gt;&gt; +class CCToPlatformGestureCurveTargetAdapter : public PlatformGestureCurveTarget {
&gt; 
&gt; Since this is instantiated just inside the apply function of the curve adapter, then it should just be an inner class of that class.

Done.

I assume it&apos;s OK to drop the WTF_MAKE_NONCOPYABLE since no-one outside the class can make one anyways?

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:63
&gt;&gt; +    virtual void setScrollIncrement(const IntPoint&amp;);
&gt; 
&gt; You can implement inline when you&apos;re in cpp files. For simple stuff like this, for certain.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:103
&gt;&gt; +    CCToPlatformGestureCurveTargetAdapter adapter(target);
&gt; 
&gt; This should just be an inner class called TargetAdapter

Done.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:107
&gt;&gt; +class GestureCurveTarget : public CCGestureCurveTarget {
&gt; 
&gt; instead of having this, we can make WebCompositorInputHandlerImpl implement CCGestureCurveTarget? Then you&apos;d just pass &quot;this&quot; into the CCActiveGestureAnimation::create function&apos;s second argument.

OK, that works - done.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:272
&gt;&gt; +                                                                    PlatformGestureCurveToCCGestureCurveAdapter::create(flingCurve.release()),
&gt; 
&gt; indent is funky here. one more temporary variable maybe?

Done.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:273
&gt;&gt; +                                                                    m_gestureCurveTarget.get()));
&gt; 
&gt; Indewhy not just make a class
&gt; 
&gt; GestureCurveTarget : CCGestureCurve, PlatformGestureCCurve

Not quite sure what you have in mind here. It&apos;s late, so I&apos;ll submit this patch shortly and we&apos;ll pick up on the next iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574605</commentid>
    <comment_count>10</comment_count>
      <attachid>130978</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-08 21:45:55 -0800</bug_when>
    <thetext>Created attachment 130978
Patch

Sorry about the lack of Changelog entries, but it&apos;s late and I can&apos;t get &quot;webkit-patch upload -g&quot; to work for me.

This is not the final version I suspect, so we&apos;ll get the changelogs in the next round.

As before, the bots won&apos;t be able to process this until 79827 lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574633</commentid>
    <comment_count>11</comment_count>
      <attachid>130978</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-08 22:19:53 -0800</bug_when>
    <thetext>Comment on attachment 130978
Patch

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

Ima happy. LGTM from my PoV. But, I&apos;d wait for jamesr feedback before applying my lingering ints. He might disagree on some of the style points, and he&apos;s TeH Boss around these parts. :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:741
&gt; +    if (m_activeGestureAnimation) {

can probably rewrite this
  if(!m_active) return

then unindent the remainder

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:75
&gt; +    // To clear an active animation, pass nullptr.

I&apos;d put this comment on the client .h instead of on the implementation

&gt; Source/WebKit/chromium/public/WebInputEvent.h:200
&gt; +            || type == GestureTapDown // Include GestureTapDown, as it is used to cancel in-flight scroll animations.

This comment baffles me but maybe its because I dont have context?

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:65
&gt; +        : m_target(target)

indentation

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:82
&gt; +PassOwnPtr&lt;CCGestureCurve&gt; PlatformGestureCurveToCCGestureCurveAdapter::create(PassOwnPtr&lt;PlatformGestureCurve&gt; platformCurve)

put these inline

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:87
&gt; +PlatformGestureCurveToCCGestureCurveAdapter::PlatformGestureCurveToCCGestureCurveAdapter(PassOwnPtr&lt;PlatformGestureCurve&gt; curve)

inline

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:92
&gt; +bool PlatformGestureCurveToCCGestureCurveAdapter::apply(double time, CCGestureCurveTarget* target)

inline

&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:320
&gt; +    ASSERT_TRUE(mockInputHandler.activeGestureAnimation());

assert or expect, here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575245</commentid>
    <comment_count>12</comment_count>
      <attachid>130978</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-09 14:40:12 -0800</bug_when>
    <thetext>Comment on attachment 130978
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:741
&gt;&gt; +    if (m_activeGestureAnimation) {
&gt; 
&gt; can probably rewrite this
&gt;   if(!m_active) return
&gt; 
&gt; then unindent the remainder

Done.

&gt;&gt; Source/WebKit/chromium/public/WebInputEvent.h:200
&gt;&gt; +            || type == GestureTapDown // Include GestureTapDown, as it is used to cancel in-flight scroll animations.
&gt; 
&gt; This comment baffles me but maybe its because I dont have context?

Removed.

It was motivated by the comment on the line below, as it was obviously puzzling to someone as to why GestureTap was on the list of ScrollGestureEvents ... since GestureTapDown will cancel in-flight gesture animations, I though I should forestall anyone being curious about why it was on the list.

Howver, if the comment out-of-context is confusing, better to remove it.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:65
&gt;&gt; +        : m_target(target)
&gt; 
&gt; indentation

Fixed.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:82
&gt;&gt; +PassOwnPtr&lt;CCGestureCurve&gt; PlatformGestureCurveToCCGestureCurveAdapter::create(PassOwnPtr&lt;PlatformGestureCurve&gt; platformCurve)
&gt; 
&gt; put these inline

Done.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:87
&gt;&gt; +PlatformGestureCurveToCCGestureCurveAdapter::PlatformGestureCurveToCCGestureCurveAdapter(PassOwnPtr&lt;PlatformGestureCurve&gt; curve)
&gt; 
&gt; inline

Done.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:92
&gt;&gt; +bool PlatformGestureCurveToCCGestureCurveAdapter::apply(double time, CCGestureCurveTarget* target)
&gt; 
&gt; inline

Done.

&gt;&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:320
&gt;&gt; +    ASSERT_TRUE(mockInputHandler.activeGestureAnimation());
&gt; 
&gt; assert or expect, here?

So far as I know it should be assert, as I want the test to abort if mockInputHandler.activeGestureAnimation() returns null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575249</commentid>
    <comment_count>13</comment_count>
      <attachid>131113</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-09 14:41:36 -0800</bug_when>
    <thetext>Created attachment 131113
Patch

Addresses Nat&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575342</commentid>
    <comment_count>14</comment_count>
      <attachid>131113</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-09 16:44:07 -0800</bug_when>
    <thetext>Comment on attachment 131113
Patch

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

This needs ChangeLogs, as I&apos;m sure you know.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:221
&gt; +            // GestureScrollEnd with non-zero velocity (deltaX/Y) signals start of Fling.

this is getting to be way too much logic in handleInputEvent - please split this out into its own function

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:233
&gt; +                            CCActiveGestureAnimation::create(monotonicallyIncreasingTime(), PlatformGestureCurveToCCGestureCurveAdapter::create(flingCurve.release()), this);

i&apos;m not sure this is really the right model - do we want to grab a timestamp when we handle the event, or put the animation in a &quot;waiting for start&quot; state and let the animation subsystem decide when the animation starts? this will change whether or not you &apos;miss&apos; the start of the curve if the compositor doesn&apos;t tick for a short period of time after the input is handled.

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:296
&gt; +void WebCompositorInputHandlerImpl::setScrollIncrement(const IntPoint&amp; increment)
&gt; +{
&gt; +    if (m_inputHandlerClient)
&gt; +        m_inputHandlerClient-&gt;scrollBy(IntSize(increment.x(), increment.y()));
&gt; +}

now that i see the implementation this function name really confuses me. I thought that setScrollIncrement sets a value that changes the granularity of scrolls, but it looks like it just scrolls you.  What&apos;s the meaning of the &quot;incremeent&quot; in the name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575343</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-09 16:45:00 -0800</bug_when>
    <thetext>+cc Ian - can you let us know if this is starting the gesture animation in the right way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575352</commentid>
    <comment_count>16</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-03-09 17:02:10 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; +cc Ian - can you let us know if this is starting the gesture animation in the right way?

I do think there is a chance of a slight hiccup if there&apos;s a pause between the scheduling of the animation and the first tick. I like your idea of putting the animation in a waiting-to-start state and then setting the start time to be the time of the first tick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575370</commentid>
    <comment_count>17</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-09 17:25:55 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; +cc Ian - can you let us know if this is starting the gesture animation in the right way?
&gt; 
&gt; I do think there is a chance of a slight hiccup if there&apos;s a pause between the scheduling of the animation and the first tick. I like your idea of putting the animation in a waiting-to-start state and then setting the start time to be the time of the first tick.


I dont think this is particularly likely. We&apos;re on the impl thread remember? There&apos;s so much noise in the input handling system getting to this point that by comparison, the impl thread runs like clockwork. Besdies which, if we had a delay on the impl thread, you&apos;d want the exact opposite: lests say you do a fling and then the thread gets descheduled for 500ms. You want the fling to be mostly over by the time the thread comes back alive, not for the fling to start at that point!

I really think that the existing system --- creating a gesture animation in a started state with the input event time is sufficient and correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575396</commentid>
    <comment_count>18</comment_count>
      <attachid>131113</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-09 18:24:11 -0800</bug_when>
    <thetext>Comment on attachment 131113
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:221
&gt;&gt; +            // GestureScrollEnd with non-zero velocity (deltaX/Y) signals start of Fling.
&gt; 
&gt; this is getting to be way too much logic in handleInputEvent - please split this out into its own function

Will do.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:233
&gt;&gt; +                            CCActiveGestureAnimation::create(monotonicallyIncreasingTime(), PlatformGestureCurveToCCGestureCurveAdapter::create(flingCurve.release()), this);
&gt; 
&gt; i&apos;m not sure this is really the right model - do we want to grab a timestamp when we handle the event, or put the animation in a &quot;waiting for start&quot; state and let the animation subsystem decide when the animation starts? this will change whether or not you &apos;miss&apos; the start of the curve if the compositor doesn&apos;t tick for a short period of time after the input is handled.

I can see merit for this for some gestures, e.g. GestureDoubleTap.

But, for something like GestureFling, which is really a continuation of GestureScroll, I&apos;m concerned pushing the start time back to the start of the next tick might cause a hiccup in the transition from GestureScroll to GestureFling. Rob, can you weigh in on this?

Perhaps provide a means of using both mechanisms? E.g. a start-time of 0 means wait for the next tick, but a non-zero start time works as per the current implementation.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:296
&gt;&gt; +}
&gt; 
&gt; now that i see the implementation this function name really confuses me. I thought that setScrollIncrement sets a value that changes the granularity of scrolls, but it looks like it just scrolls you.  What&apos;s the meaning of the &quot;incremeent&quot; in the name?

It&apos;s scrolling by a displacement, not scrolling to an absolute position. I&apos;ll rename it to setScrollDelta()? Or would that be confusing with how the same name is used in CCLayerImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575405</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-09 18:51:19 -0800</bug_when>
    <thetext>I think you just want scroll() then (or scrollBy() perhaps). You aren&apos;t setting a field, so don&apos;t name it like a setter.  It should be named something verb-y.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575413</commentid>
    <comment_count>20</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-09 19:03:04 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; I think you just want scroll() then (or scrollBy() perhaps). You aren&apos;t setting a field, so don&apos;t name it like a setter.  It should be named something verb-y.

Sure, that sounds good - thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575516</commentid>
    <comment_count>21</comment_count>
      <attachid>131113</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-10 07:37:07 -0800</bug_when>
    <thetext>Comment on attachment 131113
Patch

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

&gt;&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:233
&gt;&gt;&gt; +                            CCActiveGestureAnimation::create(monotonicallyIncreasingTime(), PlatformGestureCurveToCCGestureCurveAdapter::create(flingCurve.release()), this);
&gt;&gt; 
&gt;&gt; i&apos;m not sure this is really the right model - do we want to grab a timestamp when we handle the event, or put the animation in a &quot;waiting for start&quot; state and let the animation subsystem decide when the animation starts? this will change whether or not you &apos;miss&apos; the start of the curve if the compositor doesn&apos;t tick for a short period of time after the input is handled.
&gt; 
&gt; I can see merit for this for some gestures, e.g. GestureDoubleTap.
&gt; 
&gt; But, for something like GestureFling, which is really a continuation of GestureScroll, I&apos;m concerned pushing the start time back to the start of the next tick might cause a hiccup in the transition from GestureScroll to GestureFling. Rob, can you weigh in on this?
&gt; 
&gt; Perhaps provide a means of using both mechanisms? E.g. a start-time of 0 means wait for the next tick, but a non-zero start time works as per the current implementation.

I&apos;m mostly in agreement with jamesr -- assuming that my understanding is correct that we redraw on (roughly) monotonic ticks that should be aligning with the vsync.

If so, then deferring the animation to start at the next tick after receipt of the ScrollEnd event ought to proceed something like this:

tick_i:  receive event ScrollUpdate j
tick_i+1: draw page with displacements for ScrollUpdate j, receive event ScrollUpdate j+1
tick_i+2: SwapBuffers, show tick_i+1&apos;s frame, draw page with displacement ScrollUpdate j+1, receive ScrollEnd j+2, post request to start animation on next tick.
tick_i+3: SwapBuffers to show tick_i+2&apos;s frame, draw page displaced by velocity * (time(tick_i+4) - time(ScrollEnd)).  (1 tick length + time from ScrollEnd to next tick,)
tick_i+4: Swap, to i+3, draw page displaced by velocity * tick length.

and would therefore be find.

A much larger disconnect is probably a user&apos;s sense that the finger was still be accelerating the surface after the finger is no longer in contact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575600</commentid>
    <comment_count>22</comment_count>
      <attachid>131198</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-10 18:14:38 -0800</bug_when>
    <thetext>Created attachment 131198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575601</commentid>
    <comment_count>23</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-10 18:15:41 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=131198) [details]
&gt; Patch

Covers all suggestions, converts to &quot;start on next tick&quot; animation model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575603</commentid>
    <comment_count>24</comment_count>
      <attachid>131198</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-10 18:21:40 -0800</bug_when>
    <thetext>Comment on attachment 131198
Patch

Ugh, needs rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575609</commentid>
    <comment_count>25</comment_count>
      <attachid>131199</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-10 19:01:46 -0800</bug_when>
    <thetext>Created attachment 131199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577896</commentid>
    <comment_count>26</comment_count>
      <attachid>131199</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-13 15:36:05 -0700</bug_when>
    <thetext>Comment on attachment 131199
Patch

In an ideal world, this would be 4 patches [add input event enum, change animation start model, hook curves into scroll animator none, hook curves into wcih].

I appreciate that we are under immense time and schedule pressure.

This LGTM. James, this is ready for your review. If the patch is too large, let me know and I&apos;ll be happy to break it up into smaller patches for easier consumption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578080</commentid>
    <comment_count>27</comment_count>
      <attachid>131199</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-13 18:35:29 -0700</bug_when>
    <thetext>Comment on attachment 131199
Patch

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

Getting there, down to mostly small issues.

&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.cpp:32
&gt; +#include &lt;wtf/CurrentTime.h&gt;

don&apos;t need. in general code in the animation system outside the controller shouldn&apos;t need to lock at any clocks, it should just used the controller&apos;s clock for everything

&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.cpp:56
&gt; +        m_startTime = monotonicallyIncreasingTime();

you should use the passed-in time and not look at the clock again. this is wasteful and means that you might start off at some point inside the curve instead of at the very start

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp:30
&gt; +#include &lt;wtf/CurrentTime.h&gt;

do not need

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp:54
&gt; +        m_startTime = monotonicallyIncreasingTime();

this should use the pass-in time, it shouldn&apos;t look at the clock again

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:76
&gt; +    virtual CCActiveGestureAnimation* activeGestureAnimation() { return m_activeGestureAnimation.get(    ); }

why all the spaces in get(     ) ?

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:50
&gt; +using namespace WebCore;

this code is in namespace WebCore, no need for a using declaration

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:71
&gt; +    class TargetAdapter : public PlatformGestureCurveTarget {

why do we need two layers of adapter here? why can&apos;t the PlatformGestureCurveToCCGestureCurveAdapter simply implement PlatformGestureCurveTarget and do the right thing in the scrollBy implementation?

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:249
&gt; +        m_client-&gt;didHandleInputEvent();
&gt; +        return;

are you sure we want to eat the tap even if they didn&apos;t have an active scroll gesture?

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:259
&gt; +    ASSERT(event.type == WebInputEvent::GestureScrollEnd);
&gt; +
&gt; +    const WebGestureEvent&amp; gestureEvent = *static_cast&lt;const WebGestureEvent*&gt;(&amp;event);

i think it would be better to do the type conversion in the caller since that&apos;s inside a switch on type already

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:271
&gt; +        if (m_inputHandlerClient-&gt;activeGestureAnimation())
&gt; +            m_inputHandlerClient-&gt;setActiveGestureAnimation(nullptr);

this seems unnecessary - we&apos;re about to overwrite the animation

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:275
&gt; +                CCActiveGestureAnimation::create(PlatformGestureCurveToCCGestureCurveAdapter::create(flingCurve.release()), this);

i personally wouldn&apos;t line wrap this. if you do want to wrap it, though, it should have a 4-space indentation

&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:304
&gt; +        m_inputHandlerClient-&gt;scrollBy(IntSize(increment.x(), increment.y()));

increment.toSize()

&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:37
&gt; +#include &lt;wtf/CurrentTime.h&gt;

it&apos;s weird for a test to depend on an actual wall clock time - if there is a bug exposed by the value, you&apos;ll have a hell of a time trying to reproduce it. much better to use a mock clock

&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:65
&gt; +    double startTime = monotonicallyIncreasingTime();

i think you need to mock this clock out

&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:80
&gt; +    startTime = monotonicallyIncreasingTime();

same here

&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:98
&gt; +    double startTime = monotonicallyIncreasingTime();

and here

&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:73
&gt; +    virtual void clearActiveGestureAnimation() { m_activeGestureAnimation.clear(); }

there&apos;s no caller to this - remove?

&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:299
&gt; +#ifndef NDEBUG
&gt; +    // WebCompositorInputHandler APIs can only be called from the compositor thread.
&gt; +    WebCore::DebugScopedSetImplThread alwaysImplThread;
&gt; +#endif

the internals of DebugScopedSetImplThread are #ifndef NDEBUG guarded, you don&apos;t need to guard them yourself

&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:326
&gt; +    // Verify that a GestureTapDown during an animation cancels it.

you should also test the behavior of a tap with no active scroll</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578865</commentid>
    <comment_count>28</comment_count>
      <attachid>131199</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-14 15:42:34 -0700</bug_when>
    <thetext>Comment on attachment 131199
Patch

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

&gt;&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.cpp:32
&gt;&gt; +#include &lt;wtf/CurrentTime.h&gt;
&gt; 
&gt; don&apos;t need. in general code in the animation system outside the controller shouldn&apos;t need to lock at any clocks, it should just used the controller&apos;s clock for everything

Removed.

&gt;&gt; Source/WebCore/platform/ActivePlatformGestureAnimation.cpp:56
&gt;&gt; +        m_startTime = monotonicallyIncreasingTime();
&gt; 
&gt; you should use the passed-in time and not look at the clock again. this is wasteful and means that you might start off at some point inside the curve instead of at the very start

D&apos;oh - you&apos;re absolutely right - not sure what was crawling through my head when I did this.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp:30
&gt;&gt; +#include &lt;wtf/CurrentTime.h&gt;
&gt; 
&gt; do not need

Removed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveGestureAnimation.cpp:54
&gt;&gt; +        m_startTime = monotonicallyIncreasingTime();
&gt; 
&gt; this should use the pass-in time, it shouldn&apos;t look at the clock again

Ditto above.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:76
&gt;&gt; +    virtual CCActiveGestureAnimation* activeGestureAnimation() { return m_activeGestureAnimation.get(    ); }
&gt; 
&gt; why all the spaces in get(     ) ?

That&apos;s bizarre - even my clumsy typing can&apos;t account for that!

Removed.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:50
&gt;&gt; +using namespace WebCore;
&gt; 
&gt; this code is in namespace WebCore, no need for a using declaration

Removed.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:71
&gt;&gt; +    class TargetAdapter : public PlatformGestureCurveTarget {
&gt; 
&gt; why do we need two layers of adapter here? why can&apos;t the PlatformGestureCurveToCCGestureCurveAdapter simply implement PlatformGestureCurveTarget and do the right thing in the scrollBy implementation?

OK. I&apos;ve renamed to reflect the fact the adapter is now doing double-duty.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:249
&gt;&gt; +        return;
&gt; 
&gt; are you sure we want to eat the tap even if they didn&apos;t have an active scroll gesture?

Hmm, probably not, but perhaps Rob K can confirm?

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:259
&gt;&gt; +    const WebGestureEvent&amp; gestureEvent = *static_cast&lt;const WebGestureEvent*&gt;(&amp;event);
&gt; 
&gt; i think it would be better to do the type conversion in the caller since that&apos;s inside a switch on type already

OK. I put it here trying to keep things simpler in the caller (and the .h file), but I&apos;m happy enough to move it back.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:271
&gt;&gt; +            m_inputHandlerClient-&gt;setActiveGestureAnimation(nullptr);
&gt; 
&gt; this seems unnecessary - we&apos;re about to overwrite the animation

Removed.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:275
&gt;&gt; +                CCActiveGestureAnimation::create(PlatformGestureCurveToCCGestureCurveAdapter::create(flingCurve.release()), this);
&gt; 
&gt; i personally wouldn&apos;t line wrap this. if you do want to wrap it, though, it should have a 4-space indentation

Unwrapped.

&gt;&gt; Source/WebKit/chromium/src/WebCompositorInputHandlerImpl.cpp:304
&gt;&gt; +        m_inputHandlerClient-&gt;scrollBy(IntSize(increment.x(), increment.y()));
&gt; 
&gt; increment.toSize()

Done.

&gt;&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:37
&gt;&gt; +#include &lt;wtf/CurrentTime.h&gt;
&gt; 
&gt; it&apos;s weird for a test to depend on an actual wall clock time - if there is a bug exposed by the value, you&apos;ll have a hell of a time trying to reproduce it. much better to use a mock clock

No longer necessary, so removed.

&gt;&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:65
&gt;&gt; +    double startTime = monotonicallyIncreasingTime();
&gt; 
&gt; i think you need to mock this clock out

No longer an issue.

&gt;&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:80
&gt;&gt; +    startTime = monotonicallyIncreasingTime();
&gt; 
&gt; same here

Ditto.

&gt;&gt; Source/WebKit/chromium/tests/PlatformGestureCurveTest.cpp:98
&gt;&gt; +    double startTime = monotonicallyIncreasingTime();
&gt; 
&gt; and here

Ditto.

&gt;&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:73
&gt;&gt; +    virtual void clearActiveGestureAnimation() { m_activeGestureAnimation.clear(); }
&gt; 
&gt; there&apos;s no caller to this - remove?

Yup ... originally included to allow CCInputHandler to be instantiated, but now obsolete.

&gt;&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:299
&gt;&gt; +#endif
&gt; 
&gt; the internals of DebugScopedSetImplThread are #ifndef NDEBUG guarded, you don&apos;t need to guard them yourself

I borrowed this from the gesturePinch test - have removed.

&gt;&gt; Source/WebKit/chromium/tests/WebCompositorInputHandlerImplTest.cpp:326
&gt;&gt; +    // Verify that a GestureTapDown during an animation cancels it.
&gt; 
&gt; you should also test the behavior of a tap with no active scroll

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578866</commentid>
    <comment_count>29</comment_count>
      <attachid>131943</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-14 15:43:53 -0700</bug_when>
    <thetext>Created attachment 131943
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578875</commentid>
    <comment_count>30</comment_count>
      <attachid>131943</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-14 15:54:45 -0700</bug_when>
    <thetext>Comment on attachment 131943
Patch

Looks good, thanks for all the fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578877</commentid>
    <comment_count>31</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-14 15:56:28 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 131943 [details])
&gt; Looks good, thanks for all the fixes.

NP, thanks for all the good ideas!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579814</commentid>
    <comment_count>32</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-03-15 15:31:58 -0700</bug_when>
    <thetext>Committed r110898: &lt;http://trac.webkit.org/changeset/110898&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130840</attachid>
            <date>2012-03-08 10:20:02 -0800</date>
            <delta_ts>2012-03-08 12:21:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80607-20120308132001.patch</filename>
            <type>text/plain</type>
            <size>27711</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWVmNmVhZjc3M2Y5NWRm
NTRiY2NjOGUxOTAyMmE1YjlhYjI4MDBkNC4uNDI1YjIzYTZjYzRkOGU5YWE3Yzk4NDgxNTNlYTY3
ODA5OWJlMjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAzLTA4ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFdpcmUgdXAgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGZvciBDQywgU2Nyb2xsQW5pbWF0b3JO
b25lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2
MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0
IHRlc3RzIGFkZGVkLiBMYXlvdXQgdGVzdHMgdG8gZm9sbG93LgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JO
b25lOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTm9uZTo6c2V0U2Nyb2xsSW5jcmVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRvck5vbmUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Nyb2xsQW5pbWF0
b3JOb25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhckFjdGl2
ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6c2V0U2Nyb2xsSW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmFuaW1hdGVHZXN0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorCiAyMDEyLTAzLTA4ICBJbHlhIFRp
a2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHNp
bmdsZSBsaW5lIGZpeC4gVGhlIGZ1bmN0aW9uIGhhZCB0byByZXR1cm4gYSBoYXNoIGJ1dCBpdCBy
ZXR1cm5lZCBqdXN0IGFkZHJlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc2MDcz
YWYyZmU1YTBkMmNiZTllMTdmYTk1MDRjZWFkY2FmYTZhOGUuLmEzNWM3NmQ4ZmExYmVhYTcwOTEx
NjU1NGUwN2JhODFmMWFmNDhmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjggQEAKKzIwMTItMDMtMDggIFcuIEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gV2lyZSB1cCBQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZXMgZm9yIENDLCBTY3JvbGxBbmltYXRvck5vbmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDYwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL1dlYklucHV0RXZlbnQuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5wdXRFdmVudDo6aXNTY3JvbGxHZXN0dXJlRXZlbnRUeXBlKToKKyAgICAg
ICAgKiBzcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXI6
OkNDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlcjo6c2V0U2Nyb2xsSW5jcmVt
ZW50KToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1
cnZlQWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUN1
cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1
cmVDdXJ2ZUFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlQ3VydmVU
b0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5w
dXRFdmVudCk6CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsKToKKyAgICAgICAgKiB0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3Qu
Y3BwOgorCiAyMDEyLTAzLTA3ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZW1vdmUgbWVhbmluZ2xlc3MgY29kZSBpbiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCAzNDc4MmJmODM3OWQ5ZjcxNTlkN2U4YTc1ZjdmOWNhNTg5YTc5NGQxLi4xZjI5YTcx
NTYxODhlMmU1MzViNGM2YTZlOTAwZGRlNDM2YjMxMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTI5ODMsNiArMjk4Myw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uaCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQXJlbmEuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lz
dGVtLmNwcCBcCkBAIC0zNDIxLDYgKzM0MjMsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtRXhwb3J0TWFjcm9zLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
R2VzdHVyZUN1cnZlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVy
ZUV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5o
IFwKQEAgLTM1NDIsNiArMzU0NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVW5pY29kZVJhbmdlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNo
RmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
aGVtZVR5cGVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCmluZGV4IDBiMTBlMWI4
N2E1MGI3YzhhNzZkOTY1MzRhZTRiMjE4YWNmNWIzOWMuLmJmNzc1MmM2OTJkOTYwNmE3NTY1YTFk
ZGE2OWU0NzAyOTY1N2UxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcApAQCAtMzQsMTIgKzM0LDE0IEBACiAKICNpbmNsdWRlICJTY3JvbGxB
bmltYXRvck5vbmUuaCIKIAorI2luY2x1ZGUgIkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlv
bi5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIk93bkFycmF5UHRyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZl
bnQuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCisjaW5jbHVkZSAiVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CkBAIC00NDcsNiArNDQ5LDExIEBAIHZvaWQgU2Nyb2xsQW5pbWF0
b3JOb25lOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYg
b2Zmc2V0CiAgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JOb25lOjpjYW5jZWxBbmltYXRpb25zKCkKK3sKKyAgICBtX2dlc3R1cmVBbmltYXRpb24u
Y2xlYXIoKTsKK30KKwogdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OndpbGxFbmRMaXZlUmVzaXpl
KCkKIHsKICAgICB1cGRhdGVWaXNpYmxlTGVuZ3RocygpOwpAQCAtNDgzLDYgKzQ5MCwxMyBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6YW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxB
bmltYXRvck5vbmU+KiB0aW1lcikKICAgICBpZiAobV92ZXJ0aWNhbERhdGEubV9zdGFydFRpbWUg
JiYgbV92ZXJ0aWNhbERhdGEuYW5pbWF0ZVNjcm9sbChjdXJyZW50VGltZSArIGRlbHRhVG9OZXh0
RnJhbWUpKQogICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9IHRydWU7CiAKKyAgICBpZiAobV9n
ZXN0dXJlQW5pbWF0aW9uKSB7CisgICAgICAgIGlmIChtX2dlc3R1cmVBbmltYXRpb24tPmFuaW1h
dGUoY3VycmVudFRpbWUpKQorICAgICAgICAgICAgY29udGludWVBbmltYXRpb24gPSB0cnVlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2dlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKKyAg
ICB9CisKICAgICBpZiAoY29udGludWVBbmltYXRpb24pIHsKICAgICAgICAgZG91YmxlIG5leHRU
aW1lckludGVydmFsID0gbWF4KGtNaW5pbXVtVGltZXJJbnRlcnZhbCwgZGVsdGFUb05leHRGcmFt
ZSk7CiAgICAgICAgIHRpbWVyLT5zdGFydE9uZVNob3QobmV4dFRpbWVySW50ZXJ2YWwpOwpAQCAt
NTAwLDYgKzUxNCwxMyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c3RvcEFuaW1hdGlvblRp
bWVySWZOZWVkZWQoKQogICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKIH0KIAorLy8g
SW1wbGVtZW50YXRpb24gb2YgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgaW50ZXJmYWNlIGZ1
bmN0aW9ucy4KK3ZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzZXRTY3JvbGxJbmNyZW1lbnQoY29u
c3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIG1fY3VycmVudFBvc1ggKz0gbG9jYXRpb24u
eCgpOworICAgIG1fY3VycmVudFBvc1kgKz0gbG9jYXRpb24ueSgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKaW5kZXggNGQ2OWE3YzRh
NjQ2MzcyNWJlMTBhNmE2NjVjZWI3OWRhMzIxNWI4Yi4uYjcwZjNlMWNkZTQ2M2JjOWUwMGVjN2Ri
ZDMyMGFjZWM2OTIyNjM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JOb25lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmgKQEAgLTMzLDE2ICszMywyMCBAQAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JP
TExJTkcpCiAKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgogI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAKIGNsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb247CiBzdHJ1Y3QgU2Nyb2xsQW5pbWF0b3JQYXJhbWV0ZXJzOwogCi1jbGFzcyBTY3Jv
bGxBbmltYXRvck5vbmUgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworY2xhc3MgU2Nyb2xsQW5p
bWF0b3JOb25lIDogcHVibGljIFNjcm9sbEFuaW1hdG9yLCBwdWJsaWMgUGxhdGZvcm1HZXN0dXJl
Q3VydmVUYXJnZXQgewogcHVibGljOgogICAgIFNjcm9sbEFuaW1hdG9yTm9uZShTY3JvbGxhYmxl
QXJlYSopOwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9uZSgpOwpAQCAtNTAsNiArNTQs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwogICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYpOwogCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKTsKICAgICB2aXJ0
dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6
b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CkBAIC04Myw2ICs4OCw5IEBAIHB1YmxpYzoKICAg
ICAgICAgZG91YmxlIG1fbWF4aW11bUNvYXN0VGltZTsKICAgICB9OwogCisgICAgLy8gRGVjbGFy
YXRpb24gb2YgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgaW50ZXJmYWNlIGZ1bmN0aW9uLgor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKTsKKwog
cHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyA6OlNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAK
QEAgLTEzNSw2ICsxNDMsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBkb3VibGUgbV9zdGFydFRpbWU7
CiAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JOb25lPiBtX2FuaW1hdGlvblRpbWVyOworCisgICAg
T3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbj4gbV9nZXN0dXJlQW5pbWF0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgK
aW5kZXggNmMwNTU5OTRjNThlY2E0MTEzMTlhOWM5OWQxNDNmOWMxN2YzZTJjMi4uNGE0ZDgyMmNk
YTkxZDJlOGQzZWZjMDkwMzY2ZmE3OGY4OTY3YTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxl
ci5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uOworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFz
cyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7CiAKQEAgLTc1LDYgKzc3LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0VGlt
ZU1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHVy
YXRpb25NcykgPSAwOwogCisgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFj
dGl2ZUdlc3R1cmVBbmltYXRpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdl
c3R1cmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpID0gMDsKKwog
cHJvdGVjdGVkOgogICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50KCkgeyB9CiAgICAgdmlydHVhbCB+
Q0NJbnB1dEhhbmRsZXJDbGllbnQoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKaW5kZXggOTI1YzhjYzRjMDY2MTJkNDE1MmYwOTlhZDcyNjA4YTM3ODIwYzgwYS4u
M2E5MWI1NDcwZDgyMWY5YjMwN2VjNjhhMGNiMTgxZmFjY2NkMGRiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMwLDcgKzMwLDkgQEAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJjYy9D
Q0dlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oIgpAQCAtMTAxLDYgKzEwMyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5p
bWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKIHsKICAgICBhbmltYXRlUGFnZVNjYWxlKGZy
YW1lQmVnaW5UaW1lTXMpOwogICAgIGFuaW1hdGVMYXllcnMoZnJhbWVCZWdpblRpbWVNcyk7Cisg
ICAgYW5pbWF0ZUdlc3R1cmVzKGZyYW1lQmVnaW5UaW1lTXMpOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdl
dFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFy
dFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMpCkBAIC0xMjgsNiArMTMxLDI0IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYg
dGFyZ2V0UG9zaXRpb24sCiAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFk
KCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0QWN0aXZlR2VzdHVyZUFuaW1h
dGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gZ2VzdHVyZUFuaW1hdGlv
bikKK3sKKyAgICBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24gPSBnZXN0dXJlQW5pbWF0aW9uOwor
CisgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7Cit9CisKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkKK3sKKyAg
ICBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQor
eworICAgIHNjcm9sbEJ5KEludFNpemUobG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCkpKTsKKyAg
ICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKK30KKwogdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiBy
b290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkK
IHsKICAgICAvLyBGb3Igbm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNvbXB1dGUgYSBn
bG9iYWwgc2Npc3Nvci4gVG8gZG8gdGhpcywgd2UgbXVzdApAQCAtNzI1LDQgKzc0NiwxNCBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNlbmREaWRMb3NlQ29udGV4dFJlY3Vyc2l2ZShDQ0xh
eWVySW1wbCogY3VycmVudCkKICAgICAgICAgc2VuZERpZExvc2VDb250ZXh0UmVjdXJzaXZlKGN1
cnJlbnQtPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmFuaW1hdGVHZXN0dXJlcyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKK3sKKyAgICBpZiAo
bV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKSB7CisgICAgICAgIGJvb2wgaXNDb250aW51aW5nID0g
bV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uLT5hbmltYXRlKGZyYW1lQmVnaW5UaW1lTXMgLyAxMDAw
KTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAg
ICAgIGlmICghaXNDb250aW51aW5nKQorICAgICAgICAgICAgbV9hY3RpdmVHZXN0dXJlQW5pbWF0
aW9uLmNsZWFyKCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYTBiMzVmMmRjOTg4ZWQ4OWJiYTU5Yzhi
YTI4NGIwNGVkYTQwM2QwMy4uMGNlYTg5MDM1ODQwNzc4NGRmMmMwYzc3ZjM2ZDYwN2UwOTg4ODdi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25FdmVudHMuaCIKKyNpbmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZS5oIgogI2luY2x1
ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgpAQCAtMzcsNiArMzgsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKIGNsYXNz
IENDQ29tcGxldGlvbkV2ZW50OwogY2xhc3MgQ0NQYWdlU2NhbGVBbmltYXRpb247CiBjbGFzcyBD
Q0xheWVySW1wbDsKQEAgLTU1LDcgKzU3LDcgQEAgcHVibGljOgogfTsKIAogLy8gQ0NMYXllclRy
ZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRl
ZCByZW5kZXJpbmcgc3RhdGUKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgOiBwdWJsaWMgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQsIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCB7CitjbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsIDogcHVibGljIENDSW5wdXRIYW5kbGVyQ2xpZW50LCBwdWJsaWMg
Q0NHZXN0dXJlQ3VydmVUYXJnZXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbCk7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKGNvbnN0IENDU2V0
dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CkBAIC03MCw2ICs3MiwxMiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCwgY29uc3Qg
SW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlRW5kKCk7CiAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBv
c2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRp
bWVNcywgZG91YmxlIGR1cmF0aW9uTXMpOworICAgIHZpcnR1YWwgQ0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgeyByZXR1cm4gbV9hY3RpdmVHZXN0dXJl
QW5pbWF0aW9uLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmlt
YXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCk7CisKKyAgICAvLyBDQ0dlc3R1cmVD
dXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNy
ZW1lbnQoY29uc3QgSW50UG9pbnQmKTsKIAogICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CkBAIC0xMzMsNiArMTQxLDcgQEAgcHJvdGVj
dGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYsIENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqKTsKIAogICAgIHZvaWQgYW5pbWF0ZVBhZ2VTY2FsZShkb3VibGUg
ZnJhbWVCZWdpblRpbWVNcyk7CisgICAgdm9pZCBhbmltYXRlR2VzdHVyZXMoZG91YmxlIGZyYW1l
QmVnaW5UaW1lTXMpOwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KICAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CkBAIC0xNzcsNiAr
MTg2LDcgQEAgcHJpdmF0ZToKICAgICBJbnRQb2ludCBtX3ByZXZpb3VzUGluY2hBbmNob3I7CiAK
ICAgICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+IG1fcGFnZVNjYWxlQW5pbWF0aW9uOwor
ICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IG1fYWN0aXZlR2VzdHVyZUFuaW1h
dGlvbjsKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5oCmluZGV4IGU0MmU0NTEzNGFlMjg2
NGY4YWVkNzU1ZTZmNThlMzI3N2QzMzliMmUuLjMzY2I2Mjg2MTJmZjQ0Y2M3ZTZiYTI0ZDAyNDY3
ZThjMmExNTUzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YklucHV0RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1
dEV2ZW50LmgKQEAgLTE5Nyw2ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB8fCB0eXBl
ID09IEdlc3R1cmVTY3JvbGxVcGRhdGUKICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZUZs
aW5nU3RhcnQKICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZUZsaW5nQ2FuY2VsCisgICAg
ICAgICAgICB8fCB0eXBlID09IEdlc3R1cmVUYXBEb3duIC8vIEluY2x1ZGUgR2VzdHVyZVRhcERv
d24sIGFzIGl0IGlzIHVzZWQgdG8gY2FuY2VsIGluLWZsaWdodCBzY3JvbGwgYW5pbWF0aW9ucy4K
ICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZVRhcDsgLy8gRklYTUU6IFdoeSBpcyBHZXN0
dXJlVGFwIG9uIHRoaXMgbGlzdD8KICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCmlu
ZGV4IDM5NzMwOGI1MjljYzQxNzQ3MTg3YzdmODY3ZDEyMWI5YjIzZmNhZWUuLjdmZTc0OTAyYjVi
NGEyNmUwODhlOGE5MDVkMWExNzI2NjQyMTA5MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAK
QEAgLTI3LDEyICsyNywxOSBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwuaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKKyNpbmNsdWRlICJUb3VjaEZsaW5nUGxhdGZv
cm1HZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW1wbC5oIgogI2luY2x1
ZGUgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0
UGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
LmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNDQsNiArNTEsNjAgQEAgUGFzc093blB0cjxDQ0lucHV0SGFuZGxlcj4g
Q0NJbnB1dEhhbmRsZXI6OmNyZWF0ZShDQ0lucHV0SGFuZGxlckNsaWVudCogaW5wdXRIYW4KICAg
ICByZXR1cm4gV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKGlu
cHV0SGFuZGxlckNsaWVudCk7CiB9CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFz
cyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldDsKKworY2xhc3MgQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0QWRhcHRlciA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRl
cik7CitwdWJsaWM6CisgICAgQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlcihD
Q0dlc3R1cmVDdXJ2ZVRhcmdldCopOworCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3Jl
bWVudChjb25zdCBJbnRQb2ludCYpOworCitwcml2YXRlOgorICAgIENDR2VzdHVyZUN1cnZlVGFy
Z2V0KiBtX3RhcmdldDsKK307CisKK0NDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0
ZXI6OkNDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIoQ0NHZXN0dXJlQ3VydmVU
YXJnZXQqIHRhcmdldCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKK30KKwordm9pZCBDQ1Rv
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyOjpzZXRTY3JvbGxJbmNyZW1lbnQoY29u
c3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIEFTU0VSVChtX3RhcmdldCk7CisgICAgbV90
YXJnZXQtPnNldFNjcm9sbEluY3JlbWVudChsb2NhdGlvbik7Cit9CisKK2NsYXNzIFBsYXRmb3Jt
R2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIgOiBwdWJsaWMgQ0NHZXN0dXJlQ3Vy
dmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBjcmVh
dGUoUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4pOworCisgICAgdmlydHVhbCBib29s
IGFwcGx5KGRvdWJsZSB0cywgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKworcHJpdmF0ZToKKyAg
ICBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKFBhc3NPd25QdHI8
UGxhdGZvcm1HZXN0dXJlQ3VydmU+KTsKKyAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+
IG1fY3VydmU7Cit9OworCitQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpjcmVhdGUoUGFzc093blB0cjxQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZT4gcGxhdGZvcm1DdXJ2ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIocGxhdGZvcm1DdXJ2
ZSkpOworfQorCitQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKFBhc3NPd25QdHI8UGxh
dGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlKQorICAgIDogbV9jdXJ2ZShjdXJ2ZSkKK3sKK30KKwor
Ym9vbCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjphcHBseShk
b3VibGUgdHMsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCit7CisgICAgQ0NUb1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlciBhZGFwdGVyKHRhcmdldCk7CisgICAgcmV0dXJu
IG1fY3VydmUtPmFwcGx5KHRzLCAmYWRhcHRlcik7Cit9CisKKwogfQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKQEAgLTgxLDYgKzE0Miw3IEBAIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbChDQ0lucHV0SGFuZGxlckNsaWVuCiAgICAgOiBt
X2NsaWVudCgwKQogICAgICwgbV9pZGVudGlmaWVyKHNfbmV4dEF2YWlsYWJsZUlkZW50aWZpZXIr
KykKICAgICAsIG1faW5wdXRIYW5kbGVyQ2xpZW50KGlucHV0SGFuZGxlckNsaWVudCkKKyAgICAs
IG1fZ2VzdHVyZUN1cnZlVGFyZ2V0KDApCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9leHBlY3RT
Y3JvbGxVcGRhdGVFbmQoZmFsc2UpCiAgICAgLCBtX2V4cGVjdFBpbmNoVXBkYXRlRW5kKGZhbHNl
KQpAQCAtOTIsNiArMTU0LDkgQEAgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OldlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKENDSW5wdXRIYW5kbGVyQ2xpZW4KICAgICBpZiAoIXNf
Y29tcG9zaXRvcnMpCiAgICAgICAgIHNfY29tcG9zaXRvcnMgPSBuZXcgSGFzaFNldDxXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbCo+OwogICAgIHNfY29tcG9zaXRvcnMtPmFkZCh0aGlzKTsK
KworICAgIC8vIENyZWF0ZSBwb2ludGVyIGZvciBnZXN0dXJlIGFuaW1hdGlvbiB0YXJnZXQuCisg
ICAgbV9nZXN0dXJlQ3VydmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RJbXBs
Kj4oaW5wdXRIYW5kbGVyQ2xpZW50KTsKIH0KIAogV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw6On5XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCgpCkBAIC0xMjYsNiArMTkxLDcgQEAg
dm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25z
dCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNj
cm9sbFN0YXR1cyBzY3JvbGxTdGF0dXMgPSBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsQmVn
aW4oSW50UG9pbnQod2hlZWxFdmVudC54LCB3aGVlbEV2ZW50LnkpLCBDQ0lucHV0SGFuZGxlckNs
aWVudDo6V2hlZWwpOwogICAgICAgICBzd2l0Y2ggKHNjcm9sbFN0YXR1cykgewogICAgICAgICBj
YXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOgorICAgICAgICAgICAgLy8g
RklYTUU6IHVzZSBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUgaGVyZSB0byBnZXQgc21v
b3RoIHdoZWVsIHNjcm9sbGluZz8KICAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5z
Y3JvbGxCeShJbnRTaXplKC13aGVlbEV2ZW50LmRlbHRhWCwgLXdoZWVsRXZlbnQuZGVsdGFZKSk7
CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsRW5kKCk7CiAgICAgICAg
ICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwpAQCAtMTcwLDkgKzIzNiwzNSBA
QCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNv
bnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogI2VuZGlmCiAgICAgICAgIGlmIChtX3Njcm9sbFN0
YXJ0ZWQpIHsKICAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsK
LSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CiAgICAgICAgICAg
ICBtX3Njcm9sbFN0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgLy8gR2VzdHVyZVNjcm9sbEVuZCB3aXRoIG5vbi16ZXJvIHZlbG9jaXR5IChkZWx0YVgv
WSkgc2lnbmFscyBzdGFydCBvZiBGbGluZy4KKyAgICAgICAgICAgIGNvbnN0IFdlYkdlc3R1cmVF
dmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1cmVFdmVudCo+
KCZldmVudCk7CisgICAgICAgICAgICBpZiAoZ2VzdHVyZUV2ZW50LmRlbHRhWCB8fCBnZXN0dXJl
RXZlbnQuZGVsdGFZKSB7CisgICAgICAgICAgICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBn
ZXN0dXJlRXZlbnQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50
KTsKKyAgICAgICAgICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHNj
cm9sbFN0YXR1cyA9IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCZWdpbihJbnRQb2ludChn
ZXN0dXJlRXZlbnQueCwgZ2VzdHVyZUV2ZW50LnkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6R2Vz
dHVyZSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOiB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2lucHV0SGFuZGxlckNsaWVudC0+YWN0aXZlR2VzdHVyZUFu
aW1hdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQt
PmNsZWFyQWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpOworCisgICAgICAgICAgICAgICAgICAgIE93
blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gZmxpbmdDdXJ2ZSA9IFRvdWNoRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgZ2Vz
dHVyZUV2ZW50LmRlbHRhWSkpOworICAgICAgICAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNs
aWVudC0+c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb246
OmNyZWF0ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZv
cm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6Y3JlYXRlKGZsaW5nQ3VydmUu
cmVsZWFzZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9nZXN0dXJlQ3VydmVUYXJnZXQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNl
IENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25vcmVkOgorICAgICAgICAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVudChmYWxzZSAvKiBzZW5kVG9XaWRnZXQg
Ki8pOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVudC50
eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEJlZ2luKSB7CiAgICAgICAgIEFTU0VS
VCghbV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CkBAIC0xOTYsNyArMjg4LDEzIEBAIHZvaWQgV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5w
dXRFdmVudCYgZXZlbnQpCiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1
cmVVcGRhdGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgSW50UG9pbnQoZ2VzdHVyZUV2ZW50LngsIGdl
c3R1cmVFdmVudC55KSk7CiAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7
CiAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRF
dmVudDo6R2VzdHVyZVRhcERvd24pIHsKKyAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVyQ2xpZW50
LT5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpCisgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNs
aWVudC0+Y2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCk7CisgICAgICAgIG1fY2xpZW50LT5k
aWRIYW5kbGVJbnB1dEV2ZW50KCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKICAgICBtX2Ns
aWVudC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVudCh0cnVlIC8qIHNlbmRUb1dpZGdldCAqLyk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbC5oCmluZGV4IGEyZjEzMDI1ZDlmMTdiZmQxOGMxNDRmOTMxN2Q4
MmE2ZWExMDllYzUuLjU3NjFlZDBlOGQ0YmMxY2FkMmJkMzc1MTEzYWExZWFlZThjN2YwZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwuaApAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBNdXRleDsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFzcyBD
Q0lucHV0SGFuZGxlckNsaWVudDsKIGNsYXNzIENDVGhyZWFkOwogfQpAQCAtNjksNiArNzAsNyBA
QCBwcml2YXRlOgogICAgIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQqIG1fY2xpZW50
OwogICAgIGludCBtX2lkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGll
bnQqIG1faW5wdXRIYW5kbGVyQ2xpZW50OworICAgIFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFy
Z2V0KiBtX2dlc3R1cmVDdXJ2ZVRhcmdldDsKIAogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1f
ZXhwZWN0U2Nyb2xsVXBkYXRlRW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3Bw
CmluZGV4IDQ1OTI1NWUwMmEyODMzMTlkZmI1ZTkyOWE4ZDhmNWQ5OTM1YTQ0NGQuLmY5MzA0Nzg2
Nzc2MGJlODk2ZjUzZDVjNjM1ZTgzYmUyNGFjNTQzNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsVGVzdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXZWJDb21wb3NpdG9y
LmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudC5oIgogI2luY2x1
ZGUgIldlYklucHV0RXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b24uaCIKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgImNjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCIKIApAQCAtNDEsNyArNDIsNyBAQCB1c2luZyBXZWJLaXQ6OldlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOwogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBNb2NrSW5w
dXRIYW5kbGVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50IHsK
K2NsYXNzIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NJbnB1dEhh
bmRsZXJDbGllbnQsIHB1YmxpYyBXZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTW9ja0lucHV0SGFuZGxlckNsaWVudCk7CiBwdWJsaWM6CiAg
ICAgTW9ja0lucHV0SGFuZGxlckNsaWVudCgpCkBAIC00OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX3BpbmNoU3RhcnRlZChmYWxzZSkKICAgICAgICAgLCBtX3BpbmNoRW5kZWQoZmFs
c2UpCiAgICAgICAgICwgbV9waW5jaE1hZ25pZmljYXRpb24oMCkKKyAgICAgICAgLCBtX3Njcm9s
bEJ5Q2FsbGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgdmlydHVhbCB+TW9ja0lucHV0SGFu
ZGxlckNsaWVudCgpIHsgfQpAQCAtNTgsMjAgKzYwLDI3IEBAIHB1YmxpYzoKICAgICBib29sIHBp
bmNoU3RhcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGluY2hTdGFydGVkOyB9CiAgICAgYm9vbCBw
aW5jaEVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9waW5jaEVuZGVkOyB9CiAgICAgZmxvYXQgcGlu
Y2hNYWdpbmlmY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9waW5jaE1hZ25pZmljYXRpb247IH0K
KyAgICBib29sIHNjcm9sbEJ5Q2FsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxCeUNhbGxl
ZDsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcCkgeyBzY3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKHAueCgpLCBwLnkoKSkp
OyB9CiAKICAgICB2b2lkIHJlc2V0UGluY2goKQogICAgIHsKLSAgICAgICAgbV9waW5jaFN0YXJ0
ZWQgPSBtX3BpbmNoRW5kZWQgPSBmYWxzZTsKKyAgICAgICAgbV9waW5jaFN0YXJ0ZWQgPSBtX3Bp
bmNoRW5kZWQgPSBtX3Njcm9sbEJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgICAgIG1fcGluY2hNYWdu
aWZpY2F0aW9uID0gMDsKICAgICB9CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYWN0aXZl
R2VzdHVyZUFuaW1hdGlvbi5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
PiBhbmltYXRpb24pIHsgbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyQWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgbV9hY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7IH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNSZWRyYXcoKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIFNjcm9sbFN0YXR1cyBz
Y3JvbGxCZWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNDSW5wdXRIYW5k
bGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUpIE9WRVJSSURFCiAgICAgewogICAgICAgICByZXR1
cm4gbV9zY3JvbGxTdGF0dXM7CiAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjcm9s
bEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBPVkVSUklERSB7IG1fc2Nyb2xsQnlDYWxsZWQg
PSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbEVuZCgpIE9WRVJSSURFIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZUJlZ2luKCkgT1ZFUlJJREUKQEAgLTk2LDYgKzEw
NSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BpbmNoU3RhcnRlZDsKICAgICBib29sIG1fcGlu
Y2hFbmRlZDsKICAgICBmbG9hdCBtX3BpbmNoTWFnbmlmaWNhdGlvbjsKKyAgICBib29sIG1fc2Ny
b2xsQnlDYWxsZWQ7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uPiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb247CiB9OwogCiBjbGFzcyBNb2NrV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckNsaWVudCA6IHB1YmxpYyBXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJDbGllbnQgewpAQCAtMjgwLDQgKzI5Miw0NiBAQCBURVNUKFdlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlUGluY2gpCiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9y
OjpzaHV0ZG93bigpOwogfQogCitURVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBn
ZXN0dXJlRmxpbmcpCit7CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDAp
OworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIEFQSXMg
Y2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgIFdlYkNv
cmU6OkRlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBhbHdheXNJbXBsVGhyZWFkOworI2VuZGlmCisK
KyAgICBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tJbnB1dEhhbmRsZXI7CisgICAgT3duUHRy
PFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRlKCZtb2NrSW5wdXRIYW5kbGVyKTsKKyAgICBNb2Nr
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBtb2NrQ2xpZW50OworICAgIGlucHV0SGFu
ZGxlci0+c2V0Q2xpZW50KCZtb2NrQ2xpZW50KTsKKworICAgIFdlYktpdDo6V2ViR2VzdHVyZUV2
ZW50IGdlc3R1cmU7CisKKyAgICAvLyBOZWVkIHNjcm9sbEJlZ2luIGJlZm9yZSBzZW5kaW5nIGEg
c2Nyb2xsRW5kIGV2ZW50LgorICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVNjcm9sbEJlZ2luOworICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVu
dChnZXN0dXJlKTsKKyAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOworICAgIG1vY2tDbGllbnQu
cmVzZXQoKTsKKworICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2Vz
dHVyZVNjcm9sbEVuZDsKKyAgICBnZXN0dXJlLmRlbHRhWCA9IDI7CisgICAgaW5wdXRIYW5kbGVy
LT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQu
aGFuZGxlZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7
CisgICAgQVNTRVJUX1RSVUUobW9ja0lucHV0SGFuZGxlci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9GQUxTRShtb2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkp
OworICAgIG1vY2tJbnB1dEhhbmRsZXIuYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpLT5hbmltYXRl
KDAuMDAxKTsKKyAgICBFWFBFQ1RfVFJVRShtb2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVk
KCkpOworICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKworICAgIC8vIFZlcmlmeSB0aGF0IGEgR2Vz
dHVyZVRhcERvd24gZHVyaW5nIGFuIGFuaW1hdGlvbiBjYW5jZWxzIGl0LgorICAgIGdlc3R1cmUu
dHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcERvd247CisgICAgaW5wdXRI
YW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworICAgIEVYUEVDVF9GQUxTRShtb2Nr
SW5wdXRIYW5kbGVyLmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSk7CisKKyAgICBpbnB1dEhhbmRs
ZXItPnNldENsaWVudCgwKTsKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7
Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130876</attachid>
            <date>2012-03-08 12:21:12 -0800</date>
            <delta_ts>2012-03-09 14:41:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80607-20120308152111.patch</filename>
            <type>text/plain</type>
            <size>26886</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWVmNmVhZjc3M2Y5NWRm
NTRiY2NjOGUxOTAyMmE1YjlhYjI4MDBkNC4uNzAyMzg4NGNiMzNhNzdlMTA5NTA5NjhjNTI0Yjk1
ZmRhMWE4ODc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTAzLTA4ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFdpcmUgdXAgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGZvciBDQywgU2Nyb2xsQW5pbWF0b3JO
b25lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2
MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0
IHRlc3RzIGFkZGVkLiBMYXlvdXQgdGVzdHMgdG8gZm9sbG93LgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpjYW5jZWxBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JO
b25lOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTm9uZTo6c2V0U2Nyb2xsSW5jcmVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRvck5vbmUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Nyb2xsQW5pbWF0
b3JOb25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjbGVhckFjdGl2
ZUdlc3R1cmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bDo6YW5pbWF0ZUdlc3R1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgor
ICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisKIDIwMTItMDMtMDggIElseWEgVGlraG9u
b3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgc2luZ2xl
IGxpbmUgZml4LiBUaGUgZnVuY3Rpb24gaGFkIHRvIHJldHVybiBhIGhhc2ggYnV0IGl0IHJldHVy
bmVkIGp1c3QgYWRkcmVzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzYwNzNhZjJm
ZTVhMGQyY2JlOWUxN2ZhOTUwNGNlYWRjYWZhNmE4ZS4uOGRiZDM2MDJjZTYxZTIyYTg5Yzk4YzRh
YzEzY2QzODVkYzQ5NzJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MyBAQAorMjAxMi0wMy0wOCAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBXaXJlIHVwIFBsYXRmb3JtR2VzdHVyZUN1cnZlcyBm
b3IgQ0MsIFNjcm9sbEFuaW1hdG9yTm9uZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgwNjA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSW5wdXRFdmVudC5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnB1dEV2ZW50Ojppc1Njcm9sbEdlc3R1cmVFdmVudFR5cGUpOgorICAgICAgICAq
IHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlcjo6Q0NU
b1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyOjpzZXRTY3JvbGxJbmNyZW1lbnQp
OgorICAgICAgICAoUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVB
ZGFwdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlQ3VydmVU
b0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6UGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1
cnZlQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NH
ZXN0dXJlQ3VydmVBZGFwdGVyOjphcHBseSk6CisgICAgICAgIChHZXN0dXJlQ3VydmVUYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZUN1cnZlVGFyZ2V0Ojp+R2VzdHVyZUN1cnZlVGFy
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVDdXJ2ZVRhcmdldDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okdlc3R1cmVDdXJ2ZVRhcmdldDo6c2V0U2Nyb2xsSW5jcmVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVDdXJ2ZVRhcmdldDo6R2VzdHVyZUN1cnZlVGFyZ2V0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OldlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAqIHNyYy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCk6CisgICAgICAgICogdGVzdHMvV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcDoKKwogMjAxMi0wMy0wNyAgS2VudCBUYW11
cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIG1lYW5pbmdsZXNzIGNv
ZGUgaW4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzQ3ODJiZjgzNzlkOWY3MTU5ZDdl
OGE3NWY3ZjljYTU4OWE3OTRkMS4uMWYyOWE3MTU2MTg4ZTJlNTM1YjRjNmE2ZTkwMGRkZTQzNmIz
MTBkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yOTgzLDYgKzI5ODMsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlv
bi9BbmltYXRpb25MaXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25VdGlsaXRpZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9u
L1RpbWluZ0Z1bmN0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2
ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9B
cmVuYS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAgXApAQCAtMzQyMSw2ICszNDIzLDcg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bUV2ZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaCBcCkBAIC0zNTQyLDYgKzM1NDUsOCBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZUJp
ZGkuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWVUeXBlcy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaHJlYWRDaGVjay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJl
YWRHbG9iYWxEYXRhLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JOb25lLmNwcAppbmRleCAwYjEwZTFiODdhNTBiN2M4YTc2ZDk2NTM0YWU0YjIxOGFjZjVi
MzljLi5iZjc3NTJjNjkyZDk2MDZhNzU2NWExZGRhNjllNDcwMjk2NTdlMTdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKQEAgLTM0LDEyICsz
NCwxNCBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JOb25lLmgiCiAKKyNpbmNsdWRlICJB
Y3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJPd25BcnJheVB0ci5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlRvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNDQ3LDYg
KzQ0OSwxMSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldAogICAgIG5vdGlmeVBvc2l0aW9uQ2hh
bmdlZCgpOwogfQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6Y2FuY2VsQW5pbWF0aW9ucygp
Cit7CisgICAgbV9nZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7Cit9CisKIHZvaWQgU2Nyb2xsQW5p
bWF0b3JOb25lOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCiB7CiAgICAgdXBkYXRlVmlzaWJsZUxlbmd0
aHMoKTsKQEAgLTQ4Myw2ICs0OTAsMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmFuaW1h
dGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JOb25lPiogdGltZXIpCiAgICAgaWYg
KG1fdmVydGljYWxEYXRhLm1fc3RhcnRUaW1lICYmIG1fdmVydGljYWxEYXRhLmFuaW1hdGVTY3Jv
bGwoY3VycmVudFRpbWUgKyBkZWx0YVRvTmV4dEZyYW1lKSkKICAgICAgICAgY29udGludWVBbmlt
YXRpb24gPSB0cnVlOwogCisgICAgaWYgKG1fZ2VzdHVyZUFuaW1hdGlvbikgeworICAgICAgICBp
ZiAobV9nZXN0dXJlQW5pbWF0aW9uLT5hbmltYXRlKGN1cnJlbnRUaW1lKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9n
ZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7CisgICAgfQorCiAgICAgaWYgKGNvbnRpbnVlQW5pbWF0
aW9uKSB7CiAgICAgICAgIGRvdWJsZSBuZXh0VGltZXJJbnRlcnZhbCA9IG1heChrTWluaW11bVRp
bWVySW50ZXJ2YWwsIGRlbHRhVG9OZXh0RnJhbWUpOwogICAgICAgICB0aW1lci0+c3RhcnRPbmVT
aG90KG5leHRUaW1lckludGVydmFsKTsKQEAgLTUwMCw2ICs1MTQsMTMgQEAgdm9pZCBTY3JvbGxB
bmltYXRvck5vbmU6OnN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCkKICAgICAgICAgbV9hbmlt
YXRpb25UaW1lci5zdG9wKCk7CiB9CiAKKy8vIEltcGxlbWVudGF0aW9uIG9mIFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0IGludGVyZmFjZSBmdW5jdGlvbnMuCit2b2lkIFNjcm9sbEFuaW1hdG9y
Tm9uZTo6c2V0U2Nyb2xsSW5jcmVtZW50KGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikKK3sKKyAg
ICBtX2N1cnJlbnRQb3NYICs9IGxvY2F0aW9uLngoKTsKKyAgICBtX2N1cnJlbnRQb3NZICs9IGxv
Y2F0aW9uLnkoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yTm9uZS5oCmluZGV4IDRkNjlhN2M0YTY0NjM3MjViZTEwYTZhNjY1Y2ViNzlkYTMyMTVi
OGIuLmI3MGYzZTFjZGU0NjNiYzllMDBlYzdkYmQzMjBhY2VjNjkyMjYzNjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCkBAIC0zMywxNiArMzMsMjAg
QEAKIAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogCisjaW5jbHVkZSAiUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBjbGFzcyBTY3JvbGxBbmlt
YXRvck5vbmVUZXN0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEludFBvaW50Owor
Y2xhc3MgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOwogc3RydWN0IFNjcm9sbEFuaW1h
dG9yUGFyYW1ldGVyczsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25lIDogcHVibGljIFNjcm9s
bEFuaW1hdG9yIHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZSA6IHB1YmxpYyBTY3JvbGxBbmlt
YXRvciwgcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsKIHB1YmxpYzoKICAgICBT
Y3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxB
bmltYXRvck5vbmUoKTsKQEAgLTUwLDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBz
dGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxBbmltYXRpb25zKCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciopOwpA
QCAtODMsNiArODgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBtX21heGltdW1Db2FzdFRp
bWU7CiAgICAgfTsKIAorICAgIC8vIERlY2xhcmF0aW9uIG9mIFBsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0IGludGVyZmFjZSBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsSW5j
cmVtZW50KGNvbnN0IEludFBvaW50Jik7CisKIHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3Mg
OjpTY3JvbGxBbmltYXRvck5vbmVUZXN0OwogCkBAIC0xMzUsNiArMTQzLDggQEAgcHJvdGVjdGVk
OgogCiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwogICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yTm9u
ZT4gbV9hbmltYXRpb25UaW1lcjsKKworICAgIE93blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb24+IG1fZ2VzdHVyZUFuaW1hdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCmluZGV4IDZjMDU1OTk0YzU4ZWNhNDExMzE5YTlj
OTlkMTQzZjljMTdmM2UyYzIuLjRhNGQ4MjJjZGE5MWQyZThkM2VmYzA5MDM2NmZhNzhmODk2N2Ey
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKK2NsYXNz
IENDR2VzdHVyZUN1cnZlVGFyZ2V0OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRTaXplOwog
CkBAIC03NSw2ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBzdGFydFRpbWVNcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTXMpID0gMDsKIAorICAgIHZpcnR1YWwg
Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFjdGl2
ZUdlc3R1cmVBbmltYXRpb24oKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBDQ0lucHV0SGFuZGxl
ckNsaWVudCgpIHsgfQogICAgIHZpcnR1YWwgfkNDSW5wdXRIYW5kbGVyQ2xpZW50KCkgeyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDkyNWM4Y2M0YzA2NjEy
ZDQxNTJmMDk5YWQ3MjYwOGEzNzgyMGM4MGEuLmM1MDEwNzgxZDIxOTIyZjViMWVkMmNjMWI5ZWY4
MDJlNTY3ZTkzNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBA
IC0zMCw3ICszMCw5IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5j
bHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1h
Z2VUcmFja2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKQEAgLTEwMSw2ICsxMDMsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMp
CiB7CiAgICAgYW5pbWF0ZVBhZ2VTY2FsZShmcmFtZUJlZ2luVGltZU1zKTsKICAgICBhbmltYXRl
TGF5ZXJzKGZyYW1lQmVnaW5UaW1lTXMpOworICAgIGFuaW1hdGVHZXN0dXJlcyhmcmFtZUJlZ2lu
VGltZU1zKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFu
aW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwg
ZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lTXMsIGRvdWJsZSBkdXJhdGlvbk1zKQpA
QCAtMTI4LDYgKzEzMSwxOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNj
YWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIG1fY2xpZW50
LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1
cmVBbmltYXRpb24+IGdlc3R1cmVBbmltYXRpb24pCit7CisgICAgbV9hY3RpdmVHZXN0dXJlQW5p
bWF0aW9uID0gZ2VzdHVyZUFuaW1hdGlvbjsKKworICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJh
d09uSW1wbFRocmVhZCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNsZWFyQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbigpCit7CisgICAgbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNs
ZWFyKCk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxT
dXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgLy8gRm9yIG5vdywgd2UgdXNlIGRhbWFnZSB0
cmFja2luZyB0byBjb21wdXRlIGEgZ2xvYmFsIHNjaXNzb3IuIFRvIGRvIHRoaXMsIHdlIG11c3QK
QEAgLTcyNSw0ICs3NDAsMTQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZW5kRGlkTG9z
ZUNvbnRleHRSZWN1cnNpdmUoQ0NMYXllckltcGwqIGN1cnJlbnQpCiAgICAgICAgIHNlbmREaWRM
b3NlQ29udGV4dFJlY3Vyc2l2ZShjdXJyZW50LT5jaGlsZHJlbigpW2ldLmdldCgpKTsKIH0KIAor
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlR2VzdHVyZXMoZG91YmxlIGZyYW1lQmVn
aW5UaW1lTXMpCit7CisgICAgaWYgKG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbikgeworICAgICAg
ICBib29sIGlzQ29udGludWluZyA9IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi0+YW5pbWF0ZShm
cmFtZUJlZ2luVGltZU1zIC8gMTAwMCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJh
d09uSW1wbFRocmVhZCgpOworICAgICAgICBpZiAoIWlzQ29udGludWluZykKKyAgICAgICAgICAg
IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jbGVhcigpOworICAgIH0KK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGEw
YjM1ZjJkYzk4OGVkODliYmE1OWM4YmEyODRiMDRlZGE0MDNkMDMuLmMzNDM0OTViZTQxYzRmYjBj
ZmY0ZWZjZDlhY2EwOTc2MWQwZDc4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCisjaW5jbHVkZSAiY2MvQ0NH
ZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKQEAg
LTM3LDYgKzM4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb247CiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKIGNsYXNzIENDUGFnZVNj
YWxlQW5pbWF0aW9uOwogY2xhc3MgQ0NMYXllckltcGw7CkBAIC03MCw2ICs3Miw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0LCBjb25zdCBJbnRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVFbmQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRp
b24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZU1z
LCBkb3VibGUgZHVyYXRpb25Ncyk7CisgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24uZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlv
bihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4pOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKTsKIAogICAgIC8vIFZpcnR1YWwgZm9yIHRl
c3RpbmcuCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CkBAIC0xMzMsNiArMTM4LDcg
QEAgcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYs
IENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKIAogICAgIHZvaWQgYW5pbWF0ZVBhZ2VTY2Fs
ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CisgICAgdm9pZCBhbmltYXRlR2VzdHVyZXMoZG91
YmxlIGZyYW1lQmVnaW5UaW1lTXMpOwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KICAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CkBA
IC0xNzcsNiArMTgzLDcgQEAgcHJpdmF0ZToKICAgICBJbnRQb2ludCBtX3ByZXZpb3VzUGluY2hB
bmNob3I7CiAKICAgICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+IG1fcGFnZVNjYWxlQW5p
bWF0aW9uOworICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IG1fYWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbjsKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5oCmluZGV4IGU0MmU0
NTEzNGFlMjg2NGY4YWVkNzU1ZTZmNThlMzI3N2QzMzliMmUuLjMzY2I2Mjg2MTJmZjQ0Y2M3ZTZi
YTI0ZDAyNDY3ZThjMmExNTUzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYklucHV0RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJbnB1dEV2ZW50LmgKQEAgLTE5Nyw2ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICB8fCB0eXBlID09IEdlc3R1cmVTY3JvbGxVcGRhdGUKICAgICAgICAgICAgIHx8IHR5cGUgPT0g
R2VzdHVyZUZsaW5nU3RhcnQKICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZUZsaW5nQ2Fu
Y2VsCisgICAgICAgICAgICB8fCB0eXBlID09IEdlc3R1cmVUYXBEb3duIC8vIEluY2x1ZGUgR2Vz
dHVyZVRhcERvd24sIGFzIGl0IGlzIHVzZWQgdG8gY2FuY2VsIGluLWZsaWdodCBzY3JvbGwgYW5p
bWF0aW9ucy4KICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZVRhcDsgLy8gRklYTUU6IFdo
eSBpcyBHZXN0dXJlVGFwIG9uIHRoaXMgbGlzdD8KICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGwuY3BwCmluZGV4IDM5NzMwOGI1MjljYzQxNzQ3MTg3YzdmODY3ZDEyMWI5YjIzZmNhZWUuLjIw
NDc5ZjI5MTk0Mzk5ZGI2MzcwM2U2NThhNWNjYzhiMWEwYmE0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbC5jcHAKQEAgLTI3LDEyICsyNywxOSBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKKyNpbmNsdWRlICJUb3VjaEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW1wbC5o
IgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJJbnB1dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAicGxhdGZv
cm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1
ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDQsNiArNTEsODIgQEAgUGFzc093blB0cjxDQ0lucHV0
SGFuZGxlcj4gQ0NJbnB1dEhhbmRsZXI6OmNyZWF0ZShDQ0lucHV0SGFuZGxlckNsaWVudCogaW5w
dXRIYW4KICAgICByZXR1cm4gV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6
Y3JlYXRlKGlucHV0SGFuZGxlckNsaWVudCk7CiB9CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitjbGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldDsKKworY2xhc3MgQ0NUb1BsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0QWRhcHRlciA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFy
Z2V0QWRhcHRlcik7CitwdWJsaWM6CisgICAgQ0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
QWRhcHRlcihDQ0dlc3R1cmVDdXJ2ZVRhcmdldCopOworCisgICAgdmlydHVhbCB2b2lkIHNldFNj
cm9sbEluY3JlbWVudChjb25zdCBJbnRQb2ludCYpOworCitwcml2YXRlOgorICAgIENDR2VzdHVy
ZUN1cnZlVGFyZ2V0KiBtX3RhcmdldDsKK307CisKK0NDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRh
cmdldEFkYXB0ZXI6OkNDVG9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldEFkYXB0ZXIoQ0NHZXN0
dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKK30KKwor
dm9pZCBDQ1RvUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXRBZGFwdGVyOjpzZXRTY3JvbGxJbmNy
ZW1lbnQoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIEFTU0VSVChtX3RhcmdldCk7
CisgICAgbV90YXJnZXQtPnNldFNjcm9sbEluY3JlbWVudChsb2NhdGlvbik7Cit9CisKK2NsYXNz
IFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIgOiBwdWJsaWMgQ0NH
ZXN0dXJlQ3VydmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDR2VzdHVyZUN1
cnZlPiBjcmVhdGUoUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4pOworCisgICAgdmly
dHVhbCBib29sIGFwcGx5KGRvdWJsZSB0cywgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKworcHJp
dmF0ZToKKyAgICBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKFBh
c3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+KTsKKyAgICBPd25QdHI8UGxhdGZvcm1HZXN0
dXJlQ3VydmU+IG1fY3VydmU7Cit9OworCitQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpjcmVhdGUoUGFzc093blB0
cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gcGxhdGZvcm1DdXJ2ZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIocGxh
dGZvcm1DdXJ2ZSkpOworfQorCitQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVB
ZGFwdGVyOjpQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKFBhc3NP
d25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlKQorICAgIDogbV9jdXJ2ZShjdXJ2ZSkK
K3sKK30KKworYm9vbCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVy
OjphcHBseShkb3VibGUgdHMsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCit7CisgICAg
Q0NUb1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0QWRhcHRlciBhZGFwdGVyKHRhcmdldCk7Cisg
ICAgcmV0dXJuIG1fY3VydmUtPmFwcGx5KHRzLCAmYWRhcHRlcik7Cit9CisKK2NsYXNzIEdlc3R1
cmVDdXJ2ZVRhcmdldCA6IHB1YmxpYyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+R2VzdHVyZUN1cnZlVGFyZ2V0KCkgeyB9CisKKyAgICBzdGF0aWMgUGFzc093
blB0cjxHZXN0dXJlQ3VydmVUYXJnZXQ+IGNyZWF0ZShDQ0lucHV0SGFuZGxlckNsaWVudCogY2xp
ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXN0dXJlQ3VydmVUYXJn
ZXQoY2xpZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVu
dChjb25zdCBJbnRQb2ludCYgc2Nyb2xsRGVsdGEpCisgICAgeworICAgICAgICBtX2NsaWVudC0+
c2Nyb2xsQnkoSW50U2l6ZShzY3JvbGxEZWx0YS54KCksIHNjcm9sbERlbHRhLnkoKSkpOworICAg
IH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgR2VzdHVyZUN1cnZlVGFyZ2V0KENDSW5wdXRIYW5k
bGVyQ2xpZW50KiBjbGllbnQpCisgICAgICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgIHsKKyAg
ICB9CisKKyAgICBDQ0lucHV0SGFuZGxlckNsaWVudCogbV9jbGllbnQ7Cit9OworCisKIH0KIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC04MSw2ICsxNjQsNyBAQCBXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwoQ0NJbnB1dEhhbmRsZXJD
bGllbgogICAgIDogbV9jbGllbnQoMCkKICAgICAsIG1faWRlbnRpZmllcihzX25leHRBdmFpbGFi
bGVJZGVudGlmaWVyKyspCiAgICAgLCBtX2lucHV0SGFuZGxlckNsaWVudChpbnB1dEhhbmRsZXJD
bGllbnQpCisgICAgLCBtX2dlc3R1cmVDdXJ2ZVRhcmdldChHZXN0dXJlQ3VydmVUYXJnZXQ6OmNy
ZWF0ZShpbnB1dEhhbmRsZXJDbGllbnQpKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fZXhwZWN0
U2Nyb2xsVXBkYXRlRW5kKGZhbHNlKQogICAgICwgbV9leHBlY3RQaW5jaFVwZGF0ZUVuZChmYWxz
ZSkKQEAgLTEyNiw2ICsyMTAsNyBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
OjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogICAgICAgICBD
Q0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVzIHNjcm9sbFN0YXR1cyA9IG1faW5wdXRI
YW5kbGVyQ2xpZW50LT5zY3JvbGxCZWdpbihJbnRQb2ludCh3aGVlbEV2ZW50LngsIHdoZWVsRXZl
bnQueSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpXaGVlbCk7CiAgICAgICAgIHN3aXRjaCAoc2Ny
b2xsU3RhdHVzKSB7CiAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0
YXJ0ZWQ6CisgICAgICAgICAgICAvLyBGSVhNRTogdXNlIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZSBoZXJlIHRvIGdldCBzbW9vdGggd2hlZWwgc2Nyb2xsaW5nPwogICAgICAgICAgICAg
bV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJ5KEludFNpemUoLXdoZWVsRXZlbnQuZGVsdGFY
LCAtd2hlZWxFdmVudC5kZWx0YVkpKTsKICAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50
LT5zY3JvbGxFbmQoKTsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50
KCk7CkBAIC0xNzAsOSArMjU1LDM1IEBAIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiAjZW5kaWYK
ICAgICAgICAgaWYgKG1fc2Nyb2xsU3RhcnRlZCkgewogICAgICAgICAgICAgbV9pbnB1dEhhbmRs
ZXJDbGllbnQtPnNjcm9sbEVuZCgpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlu
cHV0RXZlbnQoKTsKICAgICAgICAgICAgIG1fc2Nyb2xsU3RhcnRlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBHZXN0dXJlU2Nyb2xsRW5kIHdpdGggbm9u
LXplcm8gdmVsb2NpdHkgKGRlbHRhWC9ZKSBzaWduYWxzIHN0YXJ0IG9mIEZsaW5nLgorICAgICAg
ICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQgPSAqc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50KTsKKyAgICAgICAgICAgIGlmIChnZXN0dXJl
RXZlbnQuZGVsdGFYIHx8IGdlc3R1cmVFdmVudC5kZWx0YVkpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxjb25zdCBX
ZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOworICAgICAgICAgICAgICAgIENDSW5wdXRIYW5kbGVy
Q2xpZW50OjpTY3JvbGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQt
PnNjcm9sbEJlZ2luKEludFBvaW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSksIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNj
cm9sbFN0YXR1cykgeworICAgICAgICAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6
OlNjcm9sbFN0YXJ0ZWQ6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVy
Q2xpZW50LT5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2lucHV0SGFuZGxlckNsaWVudC0+Y2xlYXJBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBmbGluZ0N1
cnZlID0gVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludChn
ZXN0dXJlRXZlbnQuZGVsdGFYLCBnZXN0dXJlRXZlbnQuZGVsdGFZKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKEND
QWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFw
dGVyOjpjcmVhdGUoZmxpbmdDdXJ2ZS5yZWxlYXNlKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dlc3R1cmVD
dXJ2ZVRhcmdldC5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSGFu
ZGxlSW5wdXRFdmVudCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9s
bElnbm9yZWQ6CisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWROb3RIYW5kbGVJbnB1
dEV2ZW50KGZhbHNlIC8qIHNlbmRUb1dpZGdldCAqLyk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxG
YWlsZWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlu
cHV0RXZlbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVy
ZVBpbmNoQmVnaW4pIHsKICAgICAgICAgQVNTRVJUKCFtX2V4cGVjdFBpbmNoVXBkYXRlRW5kKTsK
QEAgLTE5Niw3ICszMDcsMTMgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6
aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICAgICAgbV9p
bnB1dEhhbmRsZXJDbGllbnQtPnBpbmNoR2VzdHVyZVVwZGF0ZShnZXN0dXJlRXZlbnQuZGVsdGFY
LCBJbnRQb2ludChnZXN0dXJlRXZlbnQueCwgZ2VzdHVyZUV2ZW50LnkpKTsKICAgICAgICAgbV9j
bGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0gZWxz
ZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bikgeworICAg
ICAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQtPmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSkK
KyAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5jbGVhckFjdGl2ZUdlc3R1cmVBbmlt
YXRpb24oKTsKKyAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKwogICAgIG1fY2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50
KHRydWUgLyogc2VuZFRvV2lkZ2V0ICovKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKaW5kZXgg
YTJmMTMwMjVkOWYxN2JmZDE4YzE0NGY5MzE3ZDgyYTZlYTEwOWVjNS4uNWE0MDcwMmJmM2Y1YmY5
ZTcwZjhjYmMxYTJhNmVjMDAzYjM4MmM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCkBAIC0zOCw2
ICszOCw3IEBAIGNsYXNzIE11dGV4OwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBD
Q0dlc3R1cmVDdXJ2ZVRhcmdldDsKIGNsYXNzIENDSW5wdXRIYW5kbGVyQ2xpZW50OwogY2xhc3Mg
Q0NUaHJlYWQ7CiB9CkBAIC02OSw2ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckNsaWVudCogbV9jbGllbnQ7CiAgICAgaW50IG1faWRlbnRpZmllcjsKICAg
ICBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCogbV9pbnB1dEhhbmRsZXJDbGllbnQ7Cisg
ICAgT3duUHRyPFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFyZ2V0Kj4gbV9nZXN0dXJlQ3VydmVU
YXJnZXQ7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2V4cGVjdFNjcm9sbFVwZGF0ZUVu
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcAppbmRleCA0NTkyNTVlMDJhMjgz
MzE5ZGZiNWU5MjlhOGQ4ZjVkOTkzNWE0NDRkLi42YzJjOWI2OGVlMmQxYzI1ZTFhNDdiZTU1MWVm
NDY4NjhmOTFhMDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50Lmgi
CisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAK
QEAgLTQ5LDYgKzUwLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fcGluY2hTdGFydGVkKGZhbHNl
KQogICAgICAgICAsIG1fcGluY2hFbmRlZChmYWxzZSkKICAgICAgICAgLCBtX3BpbmNoTWFnbmlm
aWNhdGlvbigwKQorICAgICAgICAsIG1fc2Nyb2xsQnlDYWxsZWQoZmFsc2UpCiAgICAgewogICAg
IH0KICAgICB2aXJ0dWFsIH5Nb2NrSW5wdXRIYW5kbGVyQ2xpZW50KCkgeyB9CkBAIC01OCwyMCAr
NjAsMjUgQEAgcHVibGljOgogICAgIGJvb2wgcGluY2hTdGFydGVkKCkgY29uc3QgeyByZXR1cm4g
bV9waW5jaFN0YXJ0ZWQ7IH0KICAgICBib29sIHBpbmNoRW5kZWQoKSBjb25zdCB7IHJldHVybiBt
X3BpbmNoRW5kZWQ7IH0KICAgICBmbG9hdCBwaW5jaE1hZ2luaWZjYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3BpbmNoTWFnbmlmaWNhdGlvbjsgfQorICAgIGJvb2wgc2Nyb2xsQnlDYWxsZWQoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbEJ5Q2FsbGVkOyB9CiAKICAgICB2b2lkIHJlc2V0UGluY2go
KQogICAgIHsKLSAgICAgICAgbV9waW5jaFN0YXJ0ZWQgPSBtX3BpbmNoRW5kZWQgPSBmYWxzZTsK
KyAgICAgICAgbV9waW5jaFN0YXJ0ZWQgPSBtX3BpbmNoRW5kZWQgPSBtX3Njcm9sbEJ5Q2FsbGVk
ID0gZmFsc2U7CiAgICAgICAgIG1fcGluY2hNYWduaWZpY2F0aW9uID0gMDsKICAgICB9CiAKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbiogYWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5nZXQoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8V2Vi
Q29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24pIHsgbV9hY3RpdmVHZXN0
dXJlQW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbigpIHsgbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7IH0K
KwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKSBPVkVSUklERSB7
IH0KICAgICB2aXJ0dWFsIFNjcm9sbFN0YXR1cyBzY3JvbGxCZWdpbihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJbnB1dFR5cGUp
IE9WRVJSSURFCiAgICAgewogICAgICAgICByZXR1cm4gbV9zY3JvbGxTdGF0dXM7CiAgICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJ
REUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KSBPVkVSUklERSB7IG1fc2Nyb2xsQnlDYWxsZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbEVuZCgpIE9WRVJSSURFIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVy
ZUJlZ2luKCkgT1ZFUlJJREUKQEAgLTk2LDYgKzEwMyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3BpbmNoU3RhcnRlZDsKICAgICBib29sIG1fcGluY2hFbmRlZDsKICAgICBmbG9hdCBtX3BpbmNo
TWFnbmlmaWNhdGlvbjsKKyAgICBib29sIG1fc2Nyb2xsQnlDYWxsZWQ7CisKKyAgICBPd25QdHI8
V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRp
b247CiB9OwogCiBjbGFzcyBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCA6IHB1
YmxpYyBXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQgewpAQCAtMjgwLDQg
KzI5MCw0NiBAQCBURVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlUGlu
Y2gpCiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwogfQogCitURVNUKFdl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJlRmxpbmcpCit7CisgICAgV2ViS2l0
OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhl
IGNvbXBvc2l0b3IgdGhyZWFkLgorICAgIFdlYkNvcmU6OkRlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBhbHdheXNJbXBsVGhyZWFkOworI2VuZGlmCisKKyAgICBNb2NrSW5wdXRIYW5kbGVyQ2xpZW50
IG1vY2tJbnB1dEhhbmRsZXI7CisgICAgT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6Y3JlYXRl
KCZtb2NrSW5wdXRIYW5kbGVyKTsKKyAgICBNb2NrV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNs
aWVudCBtb2NrQ2xpZW50OworICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50KCZtb2NrQ2xpZW50
KTsKKworICAgIFdlYktpdDo6V2ViR2VzdHVyZUV2ZW50IGdlc3R1cmU7CisKKyAgICAvLyBOZWVk
IHNjcm9sbEJlZ2luIGJlZm9yZSBzZW5kaW5nIGEgc2Nyb2xsRW5kIGV2ZW50LgorICAgIGdlc3R1
cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOworICAg
IGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKyAgICBFWFBFQ1RfVFJV
RShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuc2Vu
ZFRvV2lkZ2V0KCkpOworICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKworICAgIGdlc3R1cmUudHlw
ZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEVuZDsKKyAgICBnZXN0dXJl
LmRlbHRhWCA9IDI7CisgICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUp
OworICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7CisgICAgQVNTRVJUX1RSVUUobW9ja0lucHV0
SGFuZGxlci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9GQUxTRShtb2Nr
SW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkpOworICAgIG1vY2tJbnB1dEhhbmRsZXIuYWN0
aXZlR2VzdHVyZUFuaW1hdGlvbigpLT5hbmltYXRlKDAuMDAxKTsKKyAgICBFWFBFQ1RfVFJVRSht
b2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkpOworICAgIG1vY2tDbGllbnQucmVzZXQo
KTsKKworICAgIC8vIFZlcmlmeSB0aGF0IGEgR2VzdHVyZVRhcERvd24gZHVyaW5nIGFuIGFuaW1h
dGlvbiBjYW5jZWxzIGl0LgorICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVRhcERvd247CisgICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdl
c3R1cmUpOworICAgIEVYUEVDVF9GQUxTRShtb2NrSW5wdXRIYW5kbGVyLmFjdGl2ZUdlc3R1cmVB
bmltYXRpb24oKSk7CisKKyAgICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgwKTsKKyAgICBXZWJL
aXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130978</attachid>
            <date>2012-03-08 21:45:55 -0800</date>
            <delta_ts>2012-03-09 14:41:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wjmCCGestures2.v4a.diff</filename>
            <type>text/plain</type>
            <size>22618</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM0NzgyYmYuLjFmMjlhNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjk4Myw2ICsyOTgzLDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9u
TGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRp
bGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5j
dGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdl
c3R1cmVBbmltYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXJlbmEuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwIFwKQEAgLTM0MjEsNiArMzQyMyw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
TWVudURlc2NyaXB0aW9uLmggXApAQCAtMzU0Miw2ICszNTQ1LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVCaWRpLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuaCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RoZW1lVHlwZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkQ2hlY2suaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0
YS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5j
cHAKaW5kZXggMGIxMGUxYi4uNTFiODAzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCkBAIC0zNCwxMiArMzQsMTQgQEAKIAogI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yTm9uZS5oIgogCisjaW5jbHVkZSAiQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUdl
c3R1cmVFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTQ0Nyw2ICs0NDksMTEgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvck5vbmU6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiBvZmZzZXQKICAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKIH0KIAordm9pZCBT
Y3JvbGxBbmltYXRvck5vbmU6OmNhbmNlbEFuaW1hdGlvbnMoKQoreworICAgIG1fZ2VzdHVyZUFu
aW1hdGlvbi5jbGVhcigpOworfQorCiB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6d2lsbEVuZExp
dmVSZXNpemUoKQogewogICAgIHVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CkBAIC00ODMsNiArNDkw
LDEzIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVy
PFNjcm9sbEFuaW1hdG9yTm9uZT4qIHRpbWVyKQogICAgIGlmIChtX3ZlcnRpY2FsRGF0YS5tX3N0
YXJ0VGltZSAmJiBtX3ZlcnRpY2FsRGF0YS5hbmltYXRlU2Nyb2xsKGN1cnJlbnRUaW1lICsgZGVs
dGFUb05leHRGcmFtZSkpCiAgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKIAorICAg
IGlmIChtX2dlc3R1cmVBbmltYXRpb24pIHsKKyAgICAgICAgaWYgKG1fZ2VzdHVyZUFuaW1hdGlv
bi0+YW5pbWF0ZShjdXJyZW50VGltZSkpCisgICAgICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9
IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZ2VzdHVyZUFuaW1hdGlvbi5jbGVh
cigpOworICAgIH0KKwogICAgIGlmIChjb250aW51ZUFuaW1hdGlvbikgewogICAgICAgICBkb3Vi
bGUgbmV4dFRpbWVySW50ZXJ2YWwgPSBtYXgoa01pbmltdW1UaW1lckludGVydmFsLCBkZWx0YVRv
TmV4dEZyYW1lKTsKICAgICAgICAgdGltZXItPnN0YXJ0T25lU2hvdChuZXh0VGltZXJJbnRlcnZh
bCk7CkBAIC01MDAsNiArNTE0LDEyIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzdG9wQW5p
bWF0aW9uVGltZXJJZk5lZWRlZCgpCiAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwog
fQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2V0U2Nyb2xsSW5jcmVtZW50KGNvbnN0IElu
dFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICBtX2N1cnJlbnRQb3NYICs9IGxvY2F0aW9uLngoKTsK
KyAgICBtX2N1cnJlbnRQb3NZICs9IGxvY2F0aW9uLnkoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCmluZGV4IDRkNjlhN2MuLjJjNzMw
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCkBA
IC0zMywxNiArMzMsMjAgQEAKIAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogCisjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBj
bGFzcyBTY3JvbGxBbmltYXRvck5vbmVUZXN0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEludFBvaW50OworY2xhc3MgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOwogc3Ry
dWN0IFNjcm9sbEFuaW1hdG9yUGFyYW1ldGVyczsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25l
IDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZSA6IHB1
YmxpYyBTY3JvbGxBbmltYXRvciwgcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsK
IHB1YmxpYzoKICAgICBTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEqKTsKICAgICB2
aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5vbmUoKTsKQEAgLTUwLDYgKzU0LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51
bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIAorICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxF
bmRMaXZlUmVzaXplKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFy
KFNjcm9sbGJhciopOwpAQCAtODMsNiArODgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBt
X21heGltdW1Db2FzdFRpbWU7CiAgICAgfTsKIAorICAgIC8vIFBsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1l
bnQoY29uc3QgSW50UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyA6OlNj
cm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKQEAgLTEzNSw2ICsxNDMsOCBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JOb25lPiBt
X2FuaW1hdGlvblRpbWVyOworCisgICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1h
dGlvbj4gbV9nZXN0dXJlQW5pbWF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NHZXN0dXJlQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDR2VzdHVyZUN1cnZlLmgKaW5kZXggM2VmOTM1Yi4uODUxODNjNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJl
Q3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0dlc3R1cmVDdXJ2ZS5oCkBAIC0zMSwxMSArMzEsMTAgQEAgY2xhc3MgSW50UG9pbnQ7CiAK
IGNsYXNzIENDR2VzdHVyZUN1cnZlVGFyZ2V0IHsKIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0dl
c3R1cmVDdXJ2ZVRhcmdldCgpIHsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3Jl
bWVudChjb25zdCBJbnRQb2ludCYpID0gMDsKICAgICAvLyBGSVhNRTogYWRkIGludGVyZmFjZXMg
Zm9yIHNldFNjcm9sbCgpLCBzZXRQYWdlU2NhbGVBbmRTY3JvbGwoKSwgZXRjLgotCi1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB+Q0NHZXN0dXJlQ3VydmVUYXJnZXQoKSB7IH0KIH07CiAKIGNsYXNz
IENDR2VzdHVyZUN1cnZlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCmluZGV4IDZjMDU1OTku
LjAyMGQ0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaApAQCAtMjksNiArMjksOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsK
K2NsYXNzIENDR2VzdHVyZUN1cnZlVGFyZ2V0OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRT
aXplOwogCkBAIC03NSw2ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0VGltZU1zLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHVyYXRpb25NcykgPSAwOwogCisgICAgdmly
dHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0
cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBDQ0lu
cHV0SGFuZGxlckNsaWVudCgpIHsgfQogICAgIHZpcnR1YWwgfkNDSW5wdXRIYW5kbGVyQ2xpZW50
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDkyNWM4
Y2MuLmUxNDgzYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBA
IC0zMCw3ICszMCw5IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5j
bHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1h
Z2VUcmFja2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKQEAgLTEwMSw2ICsxMDMsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMp
CiB7CiAgICAgYW5pbWF0ZVBhZ2VTY2FsZShmcmFtZUJlZ2luVGltZU1zKTsKICAgICBhbmltYXRl
TGF5ZXJzKGZyYW1lQmVnaW5UaW1lTXMpOworICAgIGFuaW1hdGVHZXN0dXJlcyhmcmFtZUJlZ2lu
VGltZU1zKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFu
aW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwg
ZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lTXMsIGRvdWJsZSBkdXJhdGlvbk1zKQpA
QCAtMTI4LDYgKzEzMSwxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNj
YWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIG1fY2xpZW50
LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1
cmVBbmltYXRpb24+IGdlc3R1cmVBbmltYXRpb24pCit7CisgICAgbV9hY3RpdmVHZXN0dXJlQW5p
bWF0aW9uID0gZ2VzdHVyZUFuaW1hdGlvbjsKKworICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24pCisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwor
fQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMo
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQogewogICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcg
dG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0CkBAIC03MjUs
NCArNzM2LDE1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2VuZERpZExvc2VDb250ZXh0
UmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50KQogICAgICAgICBzZW5kRGlkTG9zZUNvbnRl
eHRSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiB9CiAKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1z
KQoreworICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24pIHsKKyAgICAgICAgYm9vbCBp
c0NvbnRpbnVpbmcgPSBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24tPmFuaW1hdGUoZnJhbWVCZWdp
blRpbWVNcyAvIDEwMDApOworICAgICAgICBpZiAoaXNDb250aW51aW5nKQorICAgICAgICAgICAg
bV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jbGVhcigpOworICAgIH0KK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CmluZGV4IGEwYjM1ZjIuLmE3MTA4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBD
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb247CiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKIGNsYXNz
IENDUGFnZVNjYWxlQW5pbWF0aW9uOwogY2xhc3MgQ0NMYXllckltcGw7CkBAIC03MCw2ICs3MSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0LCBj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVFbmQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFy
Z2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0
YXJ0VGltZU1zLCBkb3VibGUgZHVyYXRpb25Ncyk7CisgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1
cmVBbmltYXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdl
c3R1cmVBbmltYXRpb24uZ2V0KCk7IH0KKyAgICAvLyBUbyBjbGVhciBhbiBhY3RpdmUgYW5pbWF0
aW9uLCBwYXNzIG51bGxwdHIuCisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmlt
YXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KTsKIAogICAgIC8vIFZp
cnR1YWwgZm9yIHRlc3RpbmcuCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CkBAIC0x
MzMsNiArMTM3LDcgQEAgcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3Qg
Q0NTZXR0aW5ncyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKIAogICAgIHZvaWQgYW5p
bWF0ZVBhZ2VTY2FsZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CisgICAgdm9pZCBhbmltYXRl
R2VzdHVyZXMoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMpOwogCiAgICAgLy8gVmlydHVhbCBmb3Ig
dGVzdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdp
blRpbWVNcyk7CkBAIC0xNzcsNiArMTgyLDcgQEAgcHJpdmF0ZToKICAgICBJbnRQb2ludCBtX3By
ZXZpb3VzUGluY2hBbmNob3I7CiAKICAgICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+IG1f
cGFnZVNjYWxlQW5pbWF0aW9uOworICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+
IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNv
cnRlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5w
dXRFdmVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5o
CmluZGV4IGU0MmU0NTEuLjMzY2I2MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYklucHV0RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJbnB1dEV2ZW50LmgKQEAgLTE5Nyw2ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB8fCB0eXBlID09IEdlc3R1cmVTY3JvbGxVcGRhdGUKICAgICAgICAgICAgIHx8IHR5cGUg
PT0gR2VzdHVyZUZsaW5nU3RhcnQKICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZUZsaW5n
Q2FuY2VsCisgICAgICAgICAgICB8fCB0eXBlID09IEdlc3R1cmVUYXBEb3duIC8vIEluY2x1ZGUg
R2VzdHVyZVRhcERvd24sIGFzIGl0IGlzIHVzZWQgdG8gY2FuY2VsIGluLWZsaWdodCBzY3JvbGwg
YW5pbWF0aW9ucy4KICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZVRhcDsgLy8gRklYTUU6
IFdoeSBpcyBHZXN0dXJlVGFwIG9uIHRoaXMgbGlzdD8KICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwuY3BwCmluZGV4IDM5NzMwOGIuLmVjNjFhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5j
cHAKQEAgLTI3LDEyICsyNywxNiBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisj
aW5jbHVkZSAiVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiV2Vi
Q29tcG9zaXRvckltcGwuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgot
I2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgImNj
L0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ0LDYgKzQ4LDUzIEBAIFBhc3NPd25QdHI8Q0NJ
bnB1dEhhbmRsZXI+IENDSW5wdXRIYW5kbGVyOjpjcmVhdGUoQ0NJbnB1dEhhbmRsZXJDbGllbnQq
IGlucHV0SGFuCiAgICAgcmV0dXJuIFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGw6OmNyZWF0ZShpbnB1dEhhbmRsZXJDbGllbnQpOwogfQogCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRl
ciA6IHB1YmxpYyBDQ0dlc3R1cmVDdXJ2ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NHZXN0dXJlQ3VydmU+IGNyZWF0ZShQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZl
Pik7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91YmxlIHRpbWUsIENDR2VzdHVyZUN1cnZl
VGFyZ2V0Kik7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVy
ZUN1cnZlQWRhcHRlcihQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPik7CisKKyAgICBj
bGFzcyBUYXJnZXRBZGFwdGVyIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFRhcmdldEFkYXB0ZXIoQ0NHZXN0dXJlQ3VydmVUYXJnZXQq
IHRhcmdldCkKKyAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9p
bnQmIGluY3JlbWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fdGFyZ2V0KTsK
KyAgICAgICAgICAgIG1fdGFyZ2V0LT5zZXRTY3JvbGxJbmNyZW1lbnQoaW5jcmVtZW50KTsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIG1f
dGFyZ2V0OworICAgIH07CisKKyAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IG1fY3Vy
dmU7Cit9OworCitQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpjcmVhdGUoUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZT4gcGxhdGZvcm1DdXJ2ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBsYXRm
b3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIocGxhdGZvcm1DdXJ2ZSkpOwor
fQorCitQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKFBhc3NPd25QdHI8UGxhdGZvcm1H
ZXN0dXJlQ3VydmU+IGN1cnZlKQorICAgIDogbV9jdXJ2ZShjdXJ2ZSkKK3sKK30KKworYm9vbCBQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjphcHBseShkb3VibGUg
dGltZSwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKK3sKKyAgICBUYXJnZXRBZGFwdGVy
IGFkYXB0ZXIodGFyZ2V0KTsKKyAgICByZXR1cm4gbV9jdXJ2ZS0+YXBwbHkodGltZSwgJmFkYXB0
ZXIpOworfQorCiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTI2LDYgKzE3Nyw3IEBAIHZv
aWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3Qg
V2ViSW5wdXRFdmVudCYgZXZlbnQpCiAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2lu
KEludFBvaW50KHdoZWVsRXZlbnQueCwgd2hlZWxFdmVudC55KSwgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OldoZWVsKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMpIHsKICAgICAgICAgY2Fz
ZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiB1c2UgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIGhlcmUgdG8gZ2V0IHNtb290
aCB3aGVlbCBzY3JvbGxpbmc/CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Ny
b2xsQnkoSW50U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgsIC13aGVlbEV2ZW50LmRlbHRhWSkpOwog
ICAgICAgICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEVuZCgpOwogICAgICAgICAg
ICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKQEAgLTE3MCw5ICsyMjIsMzYgQEAg
dm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25z
dCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICNlbmRpZgogICAgICAgICBpZiAobV9zY3JvbGxTdGFy
dGVkKSB7CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsRW5kKCk7Ci0g
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwogICAgICAgICAgICAg
bV9zY3JvbGxTdGFydGVkID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIC8vIEdlc3R1cmVTY3JvbGxFbmQgd2l0aCBub24temVybyB2ZWxvY2l0eSAoZGVsdGFYL1kp
IHNpZ25hbHMgc3RhcnQgb2YgRmxpbmcuCisgICAgICAgICAgICBjb25zdCBXZWJHZXN0dXJlRXZl
bnQmIGdlc3R1cmVFdmVudCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJHZXN0dXJlRXZlbnQqPigm
ZXZlbnQpOworICAgICAgICAgICAgaWYgKGdlc3R1cmVFdmVudC5kZWx0YVggfHwgZ2VzdHVyZUV2
ZW50LmRlbHRhWSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZ2Vz
dHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1cmVFdmVudCo+KCZldmVudCk7
CisgICAgICAgICAgICAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBzY3Jv
bGxTdGF0dXMgPSBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQoZ2Vz
dHVyZUV2ZW50LngsIGdlc3R1cmVFdmVudC55KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1
cmUpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoc2Nyb2xsU3RhdHVzKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDogeworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQtPmFjdGl2ZUdlc3R1cmVBbmlt
YXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5z
ZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKG51bGxwdHIpOworCisgICAgICAgICAgICAgICAgICAg
IE93blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gZmxpbmdDdXJ2ZSA9IFRvdWNoRmxpbmdQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoZ2VzdHVyZUV2ZW50LmRlbHRhWCwg
Z2VzdHVyZUV2ZW50LmRlbHRhWSkpOworICAgICAgICAgICAgICAgICAgICBPd25QdHI8Q0NBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpj
cmVhdGUoZmxpbmdDdXJ2ZS5yZWxlYXNlKCkpLCB0aGlzKTsKKworICAgICAgICAgICAgICAgICAg
ICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihhbmltYXRp
b24ucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlu
cHV0RXZlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxJZ25v
cmVkOgorICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVu
dChmYWxzZSAvKiBzZW5kVG9XaWRnZXQgKi8pOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVk
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2
ZW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5j
aEJlZ2luKSB7CiAgICAgICAgIEFTU0VSVCghbV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CkBAIC0x
OTYsNyArMjc1LDEzIEBAIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRs
ZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiAgICAgICAgIG1faW5wdXRI
YW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1cmVVcGRhdGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgSW50
UG9pbnQoZ2VzdHVyZUV2ZW50LngsIGdlc3R1cmVFdmVudC55KSk7CiAgICAgICAgIG1fY2xpZW50
LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYg
KGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcERvd24pIHsKKyAgICAgICAg
aWYgKG1faW5wdXRIYW5kbGVyQ2xpZW50LT5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpCisgICAg
ICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihu
dWxscHRyKTsKKyAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKwogICAgIG1fY2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50
KHRydWUgLyogc2VuZFRvV2lkZ2V0ICovKTsKIH0KIApAQCAtMjEwLDQgKzI5NSwxMCBAQCB2b2lk
IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjp3aWxsRHJhdyhkb3VibGUgZnJhbWVCZWdp
blRpbWVNcykKIHsKIH0KIAordm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2V0
U2Nyb2xsSW5jcmVtZW50KGNvbnN0IEludFBvaW50JiBpbmNyZW1lbnQpCit7CisgICAgaWYgKG1f
aW5wdXRIYW5kbGVyQ2xpZW50KQorICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xs
QnkoSW50U2l6ZShpbmNyZW1lbnQueCgpLCBpbmNyZW1lbnQueSgpKSk7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbC5oCmluZGV4IGEyZjEzMDIuLjJjYmQxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwu
aApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1
ZGUgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0dlc3R1cmVD
dXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTM4LDYgKzM5LDcgQEAg
Y2xhc3MgTXV0ZXg7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDR2VzdHVyZUN1
cnZlVGFyZ2V0OwogY2xhc3MgQ0NJbnB1dEhhbmRsZXJDbGllbnQ7CiBjbGFzcyBDQ1RocmVhZDsK
IH0KQEAgLTQ3LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVyQ2xpZW50OwogCiAvLyBUZW1wb3JhcmlseSBzdWJjbGFzc2luZyBmcm9t
IFdlYkNvbXBvc2l0b3Igd2hpbGUgZG93bnN0cmVhbSBjaGFuZ2VzIGxhbmQuCi1jbGFzcyBXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCA6IHB1YmxpYyBXZWJDb21wb3NpdG9yLCBwdWJsaWMg
V2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXIgeworY2xhc3MgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwgOiBwdWJsaWMgV2ViQ29tcG9zaXRvciwgcHVibGljIFdlYkNvcmU6OkNDSW5wdXRIYW5k
bGVyLCBwdWJsaWMgV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKTsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc093blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gY3JlYXRl
KFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50Kik7CkBAIC02Myw2ICs2NSw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHdpbGxEcmF3KGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKTsKIAorICAgIC8vIFdlYkNvcmU6OkND
R2VzdHVyZUN1cnZlVGFyZ2V0IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxJbmNyZW1lbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKwogcHJpdmF0ZToKICAg
ICBleHBsaWNpdCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbChXZWJDb3JlOjpDQ0lucHV0
SGFuZGxlckNsaWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKaW5k
ZXggNDU5MjU1ZS4uNmMyYzliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNw
cApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRl
ICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRF
dmVudC5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1
ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oIgogCkBAIC00OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3BpbmNoU3RhcnRl
ZChmYWxzZSkKICAgICAgICAgLCBtX3BpbmNoRW5kZWQoZmFsc2UpCiAgICAgICAgICwgbV9waW5j
aE1hZ25pZmljYXRpb24oMCkKKyAgICAgICAgLCBtX3Njcm9sbEJ5Q2FsbGVkKGZhbHNlKQogICAg
IHsKICAgICB9CiAgICAgdmlydHVhbCB+TW9ja0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpAQCAt
NTgsMjAgKzYwLDI1IEBAIHB1YmxpYzoKICAgICBib29sIHBpbmNoU3RhcnRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGluY2hTdGFydGVkOyB9CiAgICAgYm9vbCBwaW5jaEVuZGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9waW5jaEVuZGVkOyB9CiAgICAgZmxvYXQgcGluY2hNYWdpbmlmY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9waW5jaE1hZ25pZmljYXRpb247IH0KKyAgICBib29sIHNjcm9sbEJ5Q2Fs
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxCeUNhbGxlZDsgfQogCiAgICAgdm9pZCByZXNl
dFBpbmNoKCkKICAgICB7Ci0gICAgICAgIG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0g
ZmFsc2U7CisgICAgICAgIG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0gbV9zY3JvbGxC
eUNhbGxlZCA9IGZhbHNlOwogICAgICAgICBtX3BpbmNoTWFnbmlmaWNhdGlvbiA9IDA7CiAgICAg
fQogCisgICAgdmlydHVhbCBXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2
ZUdlc3R1cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uZ2V0
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3du
UHRyPFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gYW5pbWF0aW9uKSB7IG1fYWN0
aXZlR2VzdHVyZUFuaW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSB7IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jbGVh
cigpOyB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgT1ZF
UlJJREUgeyB9CiAgICAgdmlydHVhbCBTY3JvbGxTdGF0dXMgc2Nyb2xsQmVnaW4oY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5w
dXRUeXBlKSBPVkVSUklERQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsU3RhdHVzOwog
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
IE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikgT1ZFUlJJREUgeyBtX3Njcm9sbEJ5Q2FsbGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxFbmQoKSBPVkVSUklERSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwaW5j
aEdlc3R1cmVCZWdpbigpIE9WRVJSSURFCkBAIC05Niw2ICsxMDMsOSBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9waW5jaFN0YXJ0ZWQ7CiAgICAgYm9vbCBtX3BpbmNoRW5kZWQ7CiAgICAgZmxvYXQg
bV9waW5jaE1hZ25pZmljYXRpb247CisgICAgYm9vbCBtX3Njcm9sbEJ5Q2FsbGVkOworCisgICAg
T3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV9hY3RpdmVHZXN0dXJl
QW5pbWF0aW9uOwogfTsKIAogY2xhc3MgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGll
bnQgOiBwdWJsaWMgV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IHsKQEAg
LTI4MCw0ICsyOTAsNDYgQEAgVEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2Vz
dHVyZVBpbmNoKQogICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKIH0KIAor
VEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2VzdHVyZUZsaW5nKQoreworICAg
IFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLy8gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBBUElzIGNhbiBvbmx5IGJlIGNhbGxlZCBm
cm9tIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICBXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgYWx3YXlzSW1wbFRocmVhZDsKKyNlbmRpZgorCisgICAgTW9ja0lucHV0SGFuZGxl
ckNsaWVudCBtb2NrSW5wdXRIYW5kbGVyOworICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbD4gaW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6
OmNyZWF0ZSgmbW9ja0lucHV0SGFuZGxlcik7CisgICAgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJDbGllbnQgbW9ja0NsaWVudDsKKyAgICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgmbW9j
a0NsaWVudCk7CisKKyAgICBXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCBnZXN0dXJlOworCisgICAg
Ly8gTmVlZCBzY3JvbGxCZWdpbiBiZWZvcmUgc2VuZGluZyBhIHNjcm9sbEVuZCBldmVudC4KKyAg
ICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdp
bjsKKyAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CisgICAgRVhQ
RUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOworICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xp
ZW50LnNlbmRUb1dpZGdldCgpKTsKKyAgICBtb2NrQ2xpZW50LnJlc2V0KCk7CisKKyAgICBnZXN0
dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ7CisgICAg
Z2VzdHVyZS5kZWx0YVggPSAyOworICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChn
ZXN0dXJlKTsKKyAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOworICAgIEFTU0VSVF9UUlVFKG1v
Y2tJbnB1dEhhbmRsZXIuYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRkFM
U0UobW9ja0lucHV0SGFuZGxlci5zY3JvbGxCeUNhbGxlZCgpKTsKKyAgICBtb2NrSW5wdXRIYW5k
bGVyLmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKS0+YW5pbWF0ZSgwLjAwMSk7CisgICAgRVhQRUNU
X1RSVUUobW9ja0lucHV0SGFuZGxlci5zY3JvbGxCeUNhbGxlZCgpKTsKKyAgICBtb2NrQ2xpZW50
LnJlc2V0KCk7CisKKyAgICAvLyBWZXJpZnkgdGhhdCBhIEdlc3R1cmVUYXBEb3duIGR1cmluZyBh
biBhbmltYXRpb24gY2FuY2VscyBpdC4KKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklu
cHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duOworICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRF
dmVudChnZXN0dXJlKTsKKyAgICBFWFBFQ1RfRkFMU0UobW9ja0lucHV0SGFuZGxlci5hY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uKCkpOworCisgICAgaW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoMCk7Cisg
ICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131113</attachid>
            <date>2012-03-09 14:41:36 -0800</date>
            <delta_ts>2012-03-10 18:14:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wjmCCGestures2.v5a.diff</filename>
            <type>text/plain</type>
            <size>22233</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM0NzgyYmYuLjFmMjlhNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjk4Myw2ICsyOTgzLDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9u
TGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRp
bGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5j
dGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdl
c3R1cmVBbmltYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXJlbmEuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwIFwKQEAgLTM0MjEsNiArMzQyMyw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
TWVudURlc2NyaXB0aW9uLmggXApAQCAtMzU0Miw2ICszNTQ1LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVCaWRpLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuaCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RoZW1lVHlwZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkQ2hlY2suaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0
YS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5j
cHAKaW5kZXggMGIxMGUxYi4uNTFiODAzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCkBAIC0zNCwxMiArMzQsMTQgQEAKIAogI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yTm9uZS5oIgogCisjaW5jbHVkZSAiQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUdl
c3R1cmVFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTQ0Nyw2ICs0NDksMTEgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvck5vbmU6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiBvZmZzZXQKICAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKIH0KIAordm9pZCBT
Y3JvbGxBbmltYXRvck5vbmU6OmNhbmNlbEFuaW1hdGlvbnMoKQoreworICAgIG1fZ2VzdHVyZUFu
aW1hdGlvbi5jbGVhcigpOworfQorCiB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6d2lsbEVuZExp
dmVSZXNpemUoKQogewogICAgIHVwZGF0ZVZpc2libGVMZW5ndGhzKCk7CkBAIC00ODMsNiArNDkw
LDEzIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVy
PFNjcm9sbEFuaW1hdG9yTm9uZT4qIHRpbWVyKQogICAgIGlmIChtX3ZlcnRpY2FsRGF0YS5tX3N0
YXJ0VGltZSAmJiBtX3ZlcnRpY2FsRGF0YS5hbmltYXRlU2Nyb2xsKGN1cnJlbnRUaW1lICsgZGVs
dGFUb05leHRGcmFtZSkpCiAgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKIAorICAg
IGlmIChtX2dlc3R1cmVBbmltYXRpb24pIHsKKyAgICAgICAgaWYgKG1fZ2VzdHVyZUFuaW1hdGlv
bi0+YW5pbWF0ZShjdXJyZW50VGltZSkpCisgICAgICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9
IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZ2VzdHVyZUFuaW1hdGlvbi5jbGVh
cigpOworICAgIH0KKwogICAgIGlmIChjb250aW51ZUFuaW1hdGlvbikgewogICAgICAgICBkb3Vi
bGUgbmV4dFRpbWVySW50ZXJ2YWwgPSBtYXgoa01pbmltdW1UaW1lckludGVydmFsLCBkZWx0YVRv
TmV4dEZyYW1lKTsKICAgICAgICAgdGltZXItPnN0YXJ0T25lU2hvdChuZXh0VGltZXJJbnRlcnZh
bCk7CkBAIC01MDAsNiArNTE0LDEyIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzdG9wQW5p
bWF0aW9uVGltZXJJZk5lZWRlZCgpCiAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwog
fQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2V0U2Nyb2xsSW5jcmVtZW50KGNvbnN0IElu
dFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICBtX2N1cnJlbnRQb3NYICs9IGxvY2F0aW9uLngoKTsK
KyAgICBtX2N1cnJlbnRQb3NZICs9IGxvY2F0aW9uLnkoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCmluZGV4IDRkNjlhN2MuLjJjNzMw
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCkBA
IC0zMywxNiArMzMsMjAgQEAKIAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogCisjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBj
bGFzcyBTY3JvbGxBbmltYXRvck5vbmVUZXN0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEludFBvaW50OworY2xhc3MgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOwogc3Ry
dWN0IFNjcm9sbEFuaW1hdG9yUGFyYW1ldGVyczsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25l
IDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZSA6IHB1
YmxpYyBTY3JvbGxBbmltYXRvciwgcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsK
IHB1YmxpYzoKICAgICBTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEqKTsKICAgICB2
aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5vbmUoKTsKQEAgLTUwLDYgKzU0LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51
bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIAorICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxF
bmRMaXZlUmVzaXplKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFy
KFNjcm9sbGJhciopOwpAQCAtODMsNiArODgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBt
X21heGltdW1Db2FzdFRpbWU7CiAgICAgfTsKIAorICAgIC8vIFBsYXRmb3JtR2VzdHVyZUN1cnZl
VGFyZ2V0IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1l
bnQoY29uc3QgSW50UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyA6OlNj
cm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKQEAgLTEzNSw2ICsxNDMsOCBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JOb25lPiBt
X2FuaW1hdGlvblRpbWVyOworCisgICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1h
dGlvbj4gbV9nZXN0dXJlQW5pbWF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NHZXN0dXJlQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDR2VzdHVyZUN1cnZlLmgKaW5kZXggM2VmOTM1Yi4uODUxODNjNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJl
Q3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0dlc3R1cmVDdXJ2ZS5oCkBAIC0zMSwxMSArMzEsMTAgQEAgY2xhc3MgSW50UG9pbnQ7CiAK
IGNsYXNzIENDR2VzdHVyZUN1cnZlVGFyZ2V0IHsKIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0dl
c3R1cmVDdXJ2ZVRhcmdldCgpIHsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3Jl
bWVudChjb25zdCBJbnRQb2ludCYpID0gMDsKICAgICAvLyBGSVhNRTogYWRkIGludGVyZmFjZXMg
Zm9yIHNldFNjcm9sbCgpLCBzZXRQYWdlU2NhbGVBbmRTY3JvbGwoKSwgZXRjLgotCi1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB+Q0NHZXN0dXJlQ3VydmVUYXJnZXQoKSB7IH0KIH07CiAKIGNsYXNz
IENDR2VzdHVyZUN1cnZlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCmluZGV4IDZjMDU1OTku
LjAyMGQ0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaApAQCAtMjksNiArMjksOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsK
K2NsYXNzIENDR2VzdHVyZUN1cnZlVGFyZ2V0OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRT
aXplOwogCkBAIC03NSw2ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0VGltZU1zLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHVyYXRpb25NcykgPSAwOwogCisgICAgdmly
dHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0
cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBDQ0lu
cHV0SGFuZGxlckNsaWVudCgpIHsgfQogICAgIHZpcnR1YWwgfkNDSW5wdXRIYW5kbGVyQ2xpZW50
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDkyNWM4
Y2MuLmM2YmQ0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBA
IC0zMCw3ICszMCw5IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5j
bHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1h
Z2VUcmFja2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKQEAgLTEwMSw2ICsxMDMsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMp
CiB7CiAgICAgYW5pbWF0ZVBhZ2VTY2FsZShmcmFtZUJlZ2luVGltZU1zKTsKICAgICBhbmltYXRl
TGF5ZXJzKGZyYW1lQmVnaW5UaW1lTXMpOworICAgIGFuaW1hdGVHZXN0dXJlcyhmcmFtZUJlZ2lu
VGltZU1zKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFu
aW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwg
ZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lTXMsIGRvdWJsZSBkdXJhdGlvbk1zKQpA
QCAtMTI4LDYgKzEzMSwxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNj
YWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIG1fY2xpZW50
LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1
cmVBbmltYXRpb24+IGdlc3R1cmVBbmltYXRpb24pCit7CisgICAgbV9hY3RpdmVHZXN0dXJlQW5p
bWF0aW9uID0gZ2VzdHVyZUFuaW1hdGlvbjsKKworICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24pCisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwor
fQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMo
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQogewogICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcg
dG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0CkBAIC03MjUs
NCArNzM2LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2VuZERpZExvc2VDb250ZXh0
UmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50KQogICAgICAgICBzZW5kRGlkTG9zZUNvbnRl
eHRSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiB9CiAKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1z
KQoreworICAgIGlmICghbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBib29sIGlzQ29udGludWluZyA9IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi0+YW5p
bWF0ZShmcmFtZUJlZ2luVGltZU1zIC8gMTAwMCk7CisgICAgaWYgKGlzQ29udGludWluZykKKyAg
ICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgZWxzZQor
ICAgICAgICBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGEw
YjM1ZjIuLmE3MTA4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAg
LTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb247CiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKIGNsYXNzIENDUGFnZVNj
YWxlQW5pbWF0aW9uOwogY2xhc3MgQ0NMYXllckltcGw7CkBAIC03MCw2ICs3MSw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0LCBjb25zdCBJbnRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVFbmQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRp
b24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZU1z
LCBkb3VibGUgZHVyYXRpb25Ncyk7CisgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24uZ2V0KCk7IH0KKyAgICAvLyBUbyBjbGVhciBhbiBhY3RpdmUgYW5pbWF0aW9uLCBwYXNz
IG51bGxwdHIuCisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFz
c093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+KTsKIAogICAgIC8vIFZpcnR1YWwgZm9y
IHRlc3RpbmcuCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CkBAIC0xMzMsNiArMTM3
LDcgQEAgcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5n
cyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKIAogICAgIHZvaWQgYW5pbWF0ZVBhZ2VT
Y2FsZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CisgICAgdm9pZCBhbmltYXRlR2VzdHVyZXMo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMpOwogCiAgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4K
ICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7
CkBAIC0xNzcsNiArMTgyLDcgQEAgcHJpdmF0ZToKICAgICBJbnRQb2ludCBtX3ByZXZpb3VzUGlu
Y2hBbmNob3I7CiAKICAgICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+IG1fcGFnZVNjYWxl
QW5pbWF0aW9uOworICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IG1fYWN0aXZl
R2VzdHVyZUFuaW1hdGlvbjsKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5oCmluZGV4IGU0
MmU0NTEuLjM4ZmZmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYklucHV0RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
bnB1dEV2ZW50LmgKQEAgLTE5Nyw2ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB8fCB0
eXBlID09IEdlc3R1cmVTY3JvbGxVcGRhdGUKICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVy
ZUZsaW5nU3RhcnQKICAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZUZsaW5nQ2FuY2VsCisg
ICAgICAgICAgICB8fCB0eXBlID09IEdlc3R1cmVUYXBEb3duCiAgICAgICAgICAgICB8fCB0eXBl
ID09IEdlc3R1cmVUYXA7IC8vIEZJWE1FOiBXaHkgaXMgR2VzdHVyZVRhcCBvbiB0aGlzIGxpc3Q/
CiAgICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAppbmRleCAzOTczMDhiLi5mNmExNDU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCkBAIC0yNywxMiArMjcsMTYgQEAKIAogI2luY2x1
ZGUgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgorI2luY2x1ZGUgIlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZS5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JJbXBsLmgiCiAjaW5jbHVkZSAiV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9y
bVN1cHBvcnQuaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKICNp
bmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1T
dXBwb3J0LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw2
ICs0OCw0NyBAQCBQYXNzT3duUHRyPENDSW5wdXRIYW5kbGVyPiBDQ0lucHV0SGFuZGxlcjo6Y3Jl
YXRlKENDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbgogICAgIHJldHVybiBXZWJLaXQ6Oldl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoaW5wdXRIYW5kbGVyQ2xpZW50KTsK
IH0KIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1
cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIgOiBwdWJsaWMgQ0NHZXN0dXJlQ3VydmUgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBjcmVhdGUoUGFzc093
blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gcGxhdGZvcm1DdXJ2ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZl
QWRhcHRlcihwbGF0Zm9ybUN1cnZlKSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGFwcGx5
KGRvdWJsZSB0aW1lLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgVGFyZ2V0QWRhcHRlciBhZGFwdGVyKHRhcmdldCk7CisgICAgICAgIHJldHVybiBtX2N1cnZl
LT5hcHBseSh0aW1lLCAmYWRhcHRlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIFBsYXRmb3Jt
R2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIoUGFzc093blB0cjxQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZT4gY3VydmUpCisgICAgICAgIDogbV9jdXJ2ZShjdXJ2ZSkKKyAgICB7CisgICAg
fQorCisgICAgY2xhc3MgVGFyZ2V0QWRhcHRlciA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldCB7CisgICAgcHVibGljOgorICAgICAgICBUYXJnZXRBZGFwdGVyKENDR2VzdHVyZUN1
cnZlVGFyZ2V0KiB0YXJnZXQpCisgICAgICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVu
dChjb25zdCBJbnRQb2ludCYgaW5jcmVtZW50KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQobV90YXJnZXQpOworICAgICAgICAgICAgbV90YXJnZXQtPnNldFNjcm9sbEluY3JlbWVudChp
bmNyZW1lbnQpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDQ0dlc3R1cmVD
dXJ2ZVRhcmdldCogbV90YXJnZXQ7CisgICAgfTsKKworICAgIE93blB0cjxQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZT4gbV9jdXJ2ZTsKK307CisKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMjYs
NiArMTcxLDcgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5w
dXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICAgICAgQ0NJbnB1dEhhbmRs
ZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBzY3JvbGxTdGF0dXMgPSBtX2lucHV0SGFuZGxlckNsaWVu
dC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQod2hlZWxFdmVudC54LCB3aGVlbEV2ZW50LnkpLCBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6V2hlZWwpOwogICAgICAgICBzd2l0Y2ggKHNjcm9sbFN0YXR1cykg
ewogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOgorICAg
ICAgICAgICAgLy8gRklYTUU6IHVzZSBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUgaGVy
ZSB0byBnZXQgc21vb3RoIHdoZWVsIHNjcm9sbGluZz8KICAgICAgICAgICAgIG1faW5wdXRIYW5k
bGVyQ2xpZW50LT5zY3JvbGxCeShJbnRTaXplKC13aGVlbEV2ZW50LmRlbHRhWCwgLXdoZWVsRXZl
bnQuZGVsdGFZKSk7CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsRW5k
KCk7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwpAQCAtMTcw
LDkgKzIxNiwzNiBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJ
bnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogI2VuZGlmCiAgICAgICAgIGlm
IChtX3Njcm9sbFN0YXJ0ZWQpIHsKICAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5z
Y3JvbGxFbmQoKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7
CiAgICAgICAgICAgICBtX3Njcm9sbFN0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgLy8gR2VzdHVyZVNjcm9sbEVuZCB3aXRoIG5vbi16ZXJvIHZlbG9j
aXR5IChkZWx0YVgvWSkgc2lnbmFscyBzdGFydCBvZiBGbGluZy4KKyAgICAgICAgICAgIGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdl
c3R1cmVFdmVudCo+KCZldmVudCk7CisgICAgICAgICAgICBpZiAoZ2VzdHVyZUV2ZW50LmRlbHRh
WCB8fCBnZXN0dXJlRXZlbnQuZGVsdGFZKSB7CisgICAgICAgICAgICAgICAgY29uc3QgV2ViR2Vz
dHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2
ZW50Kj4oJmV2ZW50KTsKKyAgICAgICAgICAgICAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Ny
b2xsU3RhdHVzIHNjcm9sbFN0YXR1cyA9IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCZWdp
bihJbnRQb2ludChnZXN0dXJlRXZlbnQueCwgZ2VzdHVyZUV2ZW50LnkpLCBDQ0lucHV0SGFuZGxl
ckNsaWVudDo6R2VzdHVyZSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFy
dGVkOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2lucHV0SGFuZGxlckNsaWVudC0+YWN0
aXZlR2VzdHVyZUFuaW1hdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnB1dEhh
bmRsZXJDbGllbnQtPnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24obnVsbHB0cik7CisKKyAgICAg
ICAgICAgICAgICAgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZlID0g
VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludChnZXN0dXJl
RXZlbnQuZGVsdGFYLCBnZXN0dXJlRXZlbnQuZGVsdGFZKSk7CisgICAgICAgICAgICAgICAgICAg
IE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUobW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCksIFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVD
dXJ2ZUFkYXB0ZXI6OmNyZWF0ZShmbGluZ0N1cnZlLnJlbGVhc2UoKSksIHRoaXMpOworCisgICAg
ICAgICAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGll
bnQ6OlNjcm9sbElnbm9yZWQ6CisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWROb3RI
YW5kbGVJbnB1dEV2ZW50KGZhbHNlIC8qIHNlbmRUb1dpZGdldCAqLyk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50
OjpTY3JvbGxGYWlsZWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRp
ZEhhbmRsZUlucHV0RXZlbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVBpbmNoQmVnaW4pIHsKICAgICAgICAgQVNTRVJUKCFtX2V4cGVjdFBpbmNoVXBk
YXRlRW5kKTsKQEAgLTE5Niw3ICsyNjksMTMgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAg
ICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnBpbmNoR2VzdHVyZVVwZGF0ZShnZXN0dXJlRXZl
bnQuZGVsdGFYLCBJbnRQb2ludChnZXN0dXJlRXZlbnQueCwgZ2VzdHVyZUV2ZW50LnkpKTsKICAg
ICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93
bikgeworICAgICAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQtPmFjdGl2ZUdlc3R1cmVBbmlt
YXRpb24oKSkKKyAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKG51bGxwdHIpOworICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRF
dmVudCgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAgbV9jbGllbnQtPmRpZE5vdEhh
bmRsZUlucHV0RXZlbnQodHJ1ZSAvKiBzZW5kVG9XaWRnZXQgKi8pOwogfQogCkBAIC0yMTAsNCAr
Mjg5LDEwIEBAIHZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OndpbGxEcmF3KGRv
dWJsZSBmcmFtZUJlZ2luVGltZU1zKQogewogfQogCit2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmIGluY3JlbWVudCkK
K3sKKyAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQpCisgICAgICAgIG1faW5wdXRIYW5kbGVy
Q2xpZW50LT5zY3JvbGxCeShJbnRTaXplKGluY3JlbWVudC54KCksIGluY3JlbWVudC55KCkpKTsK
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKaW5kZXggYTJmMTMwMi4uMmNiZDE2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJXZWJDb21wb3Np
dG9yLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlci5oIgorI2luY2x1ZGUg
ImNjL0NDR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAt
MzgsNiArMzksNyBAQCBjbGFzcyBNdXRleDsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFzcyBDQ0lucHV0SGFuZGxlckNsaWVudDsKIGNs
YXNzIENDVGhyZWFkOwogfQpAQCAtNDcsNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQ7CiAKIC8vIFRlbXBvcmFyaWx5IHN1
YmNsYXNzaW5nIGZyb20gV2ViQ29tcG9zaXRvciB3aGlsZSBkb3duc3RyZWFtIGNoYW5nZXMgbGFu
ZC4KLWNsYXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsIDogcHVibGljIFdlYkNvbXBv
c2l0b3IsIHB1YmxpYyBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlciB7CitjbGFzcyBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbCA6IHB1YmxpYyBXZWJDb21wb3NpdG9yLCBwdWJsaWMgV2ViQ29y
ZTo6Q0NJbnB1dEhhbmRsZXIsIHB1YmxpYyBXZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdldCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwp
OwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsPiBjcmVhdGUoV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKQEAgLTYzLDYg
KzY1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgd2lsbERyYXcoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMpOwogCisgICAg
Ly8gV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQgaW1wbGVtZW50YXRpb24uCisgICAgdmly
dHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwor
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKFdl
YkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGxUZXN0LmNwcAppbmRleCA0NTkyNTVlLi42YzJjOWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbFRlc3QuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRv
ci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJJbnB1dEV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmgiCiAKQEAgLTQ5LDYgKzUwLDcgQEAgcHVibGljOgogICAgICAgICAs
IG1fcGluY2hTdGFydGVkKGZhbHNlKQogICAgICAgICAsIG1fcGluY2hFbmRlZChmYWxzZSkKICAg
ICAgICAgLCBtX3BpbmNoTWFnbmlmaWNhdGlvbigwKQorICAgICAgICAsIG1fc2Nyb2xsQnlDYWxs
ZWQoZmFsc2UpCiAgICAgewogICAgIH0KICAgICB2aXJ0dWFsIH5Nb2NrSW5wdXRIYW5kbGVyQ2xp
ZW50KCkgeyB9CkBAIC01OCwyMCArNjAsMjUgQEAgcHVibGljOgogICAgIGJvb2wgcGluY2hTdGFy
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9waW5jaFN0YXJ0ZWQ7IH0KICAgICBib29sIHBpbmNoRW5k
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BpbmNoRW5kZWQ7IH0KICAgICBmbG9hdCBwaW5jaE1hZ2lu
aWZjYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BpbmNoTWFnbmlmaWNhdGlvbjsgfQorICAgIGJv
b2wgc2Nyb2xsQnlDYWxsZWQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbEJ5Q2FsbGVkOyB9CiAK
ICAgICB2b2lkIHJlc2V0UGluY2goKQogICAgIHsKLSAgICAgICAgbV9waW5jaFN0YXJ0ZWQgPSBt
X3BpbmNoRW5kZWQgPSBmYWxzZTsKKyAgICAgICAgbV9waW5jaFN0YXJ0ZWQgPSBtX3BpbmNoRW5k
ZWQgPSBtX3Njcm9sbEJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgICAgIG1fcGluY2hNYWduaWZpY2F0
aW9uID0gMDsKICAgICB9CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNDQWN0aXZlR2VzdHVyZUFu
aW1hdGlvbiogYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbi5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uKFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBhbmlt
YXRpb24pIHsgbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9CisgICAgdmly
dHVhbCB2b2lkIGNsZWFyQWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpIHsgbV9hY3RpdmVHZXN0dXJl
QW5pbWF0aW9uLmNsZWFyKCk7IH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNSZWRyYXcoKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIFNjcm9sbFN0YXR1cyBzY3JvbGxC
ZWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xp
ZW50OjpTY3JvbGxJbnB1dFR5cGUpIE9WRVJSSURFCiAgICAgewogICAgICAgICByZXR1cm4gbV9z
Y3JvbGxTdGF0dXM7CiAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKSBPVkVSUklERSB7IG1fc2Nyb2xsQnlDYWxsZWQgPSB0cnVl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbEVuZCgpIE9WRVJSSURFIHsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHBpbmNoR2VzdHVyZUJlZ2luKCkgT1ZFUlJJREUKQEAgLTk2LDYgKzEwMyw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3BpbmNoU3RhcnRlZDsKICAgICBib29sIG1fcGluY2hFbmRl
ZDsKICAgICBmbG9hdCBtX3BpbmNoTWFnbmlmaWNhdGlvbjsKKyAgICBib29sIG1fc2Nyb2xsQnlD
YWxsZWQ7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBt
X2FjdGl2ZUdlc3R1cmVBbmltYXRpb247CiB9OwogCiBjbGFzcyBNb2NrV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckNsaWVudCA6IHB1YmxpYyBXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJDbGllbnQgewpAQCAtMjgwLDQgKzI5MCw0NiBAQCBURVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsLCBnZXN0dXJlUGluY2gpCiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0
ZG93bigpOwogfQogCitURVNUKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLCBnZXN0dXJl
RmxpbmcpCit7CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworI2lm
bmRlZiBOREVCVUcKKyAgICAvLyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9u
bHkgYmUgY2FsbGVkIGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgIFdlYkNvcmU6OkRl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBhbHdheXNJbXBsVGhyZWFkOworI2VuZGlmCisKKyAgICBN
b2NrSW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tJbnB1dEhhbmRsZXI7CisgICAgT3duUHRyPFdlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBpbnB1dEhhbmRsZXIgPSBXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVySW1wbDo6Y3JlYXRlKCZtb2NrSW5wdXRIYW5kbGVyKTsKKyAgICBNb2NrV2ViQ29t
cG9zaXRvcklucHV0SGFuZGxlckNsaWVudCBtb2NrQ2xpZW50OworICAgIGlucHV0SGFuZGxlci0+
c2V0Q2xpZW50KCZtb2NrQ2xpZW50KTsKKworICAgIFdlYktpdDo6V2ViR2VzdHVyZUV2ZW50IGdl
c3R1cmU7CisKKyAgICAvLyBOZWVkIHNjcm9sbEJlZ2luIGJlZm9yZSBzZW5kaW5nIGEgc2Nyb2xs
RW5kIGV2ZW50LgorICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2Vz
dHVyZVNjcm9sbEJlZ2luOworICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0
dXJlKTsKKyAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOworICAgIG1vY2tDbGllbnQucmVzZXQo
KTsKKworICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNj
cm9sbEVuZDsKKyAgICBnZXN0dXJlLmRlbHRhWCA9IDI7CisgICAgaW5wdXRIYW5kbGVyLT5oYW5k
bGVJbnB1dEV2ZW50KGdlc3R1cmUpOworICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQuaGFuZGxl
ZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7CisgICAg
QVNTRVJUX1RSVUUobW9ja0lucHV0SGFuZGxlci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpOwor
ICAgIEVYUEVDVF9GQUxTRShtb2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkpOworICAg
IG1vY2tJbnB1dEhhbmRsZXIuYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpLT5hbmltYXRlKDAuMDAx
KTsKKyAgICBFWFBFQ1RfVFJVRShtb2NrSW5wdXRIYW5kbGVyLnNjcm9sbEJ5Q2FsbGVkKCkpOwor
ICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKworICAgIC8vIFZlcmlmeSB0aGF0IGEgR2VzdHVyZVRh
cERvd24gZHVyaW5nIGFuIGFuaW1hdGlvbiBjYW5jZWxzIGl0LgorICAgIGdlc3R1cmUudHlwZSA9
IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcERvd247CisgICAgaW5wdXRIYW5kbGVy
LT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworICAgIEVYUEVDVF9GQUxTRShtb2NrSW5wdXRI
YW5kbGVyLmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSk7CisKKyAgICBpbnB1dEhhbmRsZXItPnNl
dENsaWVudCgwKTsKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Cit9CisK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131198</attachid>
            <date>2012-03-10 18:14:38 -0800</date>
            <delta_ts>2012-03-10 19:01:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80607-20120310211435.patch</filename>
            <type>text/plain</type>
            <size>41575</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRkZGY5ZjM0ZDU4OGE5
MDM1MzdjY2FkYTI0ZDEwNzliZThiMDI2YS4uNWYwOTA0ODZhODI3NGE0NTdiNDFkMDIyZmNiMTUx
YWNjNjQ2ZjFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTAzLTEwICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFdpcmUgdXAgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGZvciBDQywgU2Nyb2xsQW5pbWF0b3JO
b25lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2
MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0
IHRlc3RzIGFkZGVkLiBMYXlvdXQgdGVzdHMgdG8gZm9sbG93LgorCisgICAgICAgIFByb3ZpZGVz
IGltcGxlbWVudGF0aW9uIG9mIFBsYXRmb3JtR2VzdHVyZUN1cnZlcyBpbiBDaHJvbWUgQ29tcG9z
aXRvciwgYW5kIGJhc2ljCisgICAgICAgIHN1cHBvcnQgaW4gU2Nyb2xsQW5pbWF0b3JOb25lLCBm
b3IgZmxpbmcgZ2VzdHVyZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIHBsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OkFjdGl2ZVBs
YXRmb3JtR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL0FjdGl2ZVBs
YXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oOgorICAgICAgICAoQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dC5oOgorICAgICAgICAoUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck5vbmU6OmNhbmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JOb25lOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbEFuaW1hdG9yTm9uZSk6CisgICAgICAgICogcGxhdGZvcm0vVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL1doZWVsRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjphbmltYXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24uaDoKKyAgICAgICAgKENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaDoKKyAgICAgICAg
KENDR2VzdHVyZUN1cnZlVGFyZ2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphbmltYXRlR2VzdHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6
CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKwogMjAxMi0wMy0wOSAgRGFuIEJlcm5z
dGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAxODg1
MT4gQ3Jhc2ggaW4gRGlzcGxheVJlZnJlc2hNb25pdG9yOjpub3RpZnlDbGllbnRzKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTlmNGFlM2IyMmE5MzYxMjhjY2JjN2MyM2Y2MDAwZGM5
M2U1Y2I2Mi4uYjI2MzJmYzhmOTRhMWYzM2ZmYWMxOTZkYjZiNDYzOGVmNDExNjk2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wMy0xMCAgVy4gSmFt
ZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVt
XSBXaXJlIHVwIFBsYXRmb3JtR2VzdHVyZUN1cnZlcyBmb3IgQ0MsIFNjcm9sbEFuaW1hdG9yTm9u
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjA3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJs
aWMvV2ViSW5wdXRFdmVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEV2ZW50Ojppc1Nj
cm9sbEdlc3R1cmVFdmVudFR5cGUpOgorICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6
OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1
cmVDdXJ2ZUFkYXB0ZXI6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0
ZXIpOgorICAgICAgICAoVGFyZ2V0QWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyOjpUYXJnZXRBZGFwdGVyOjpUYXJn
ZXRBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dl
c3R1cmVDdXJ2ZUFkYXB0ZXI6OlRhcmdldEFkYXB0ZXI6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2Vz
dHVyZUZsaW5nKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpzY3JvbGxCeSk6CisgICAgICAgICogc3JjL1dlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsVGVzdC5jcHA6CisKIDIwMTItMDMtMDkgIEphbWVzIFJvYmluc29uICA8amFtZXNy
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJvbGwgY2hyb21pdW0gREVQUyB0
byByMTI1NjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0NTY5NDE5ZGNlY2Fl
Yzk0OTczYTJmODlhMmE5OGFhZjYwMmM2OWY1Li42NWJhZmY4NDBiYzE4YzNmNzNjYmZmNGMzMGE0
YzA5YzNhZjEyYjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI5ODMsNiAr
Mjk4Myw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5p
bWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
bmltYXRpb24vVGltaW5nRnVuY3Rpb24uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FyZW5hLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXJlbmEuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcCBcCkBAIC0zNDIxLDYg
KzM0MjMsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtRXZlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2
ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXhwb3J0TWFjcm9zLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIFwKQEAgLTM1NDIsNiArMzU0NSw4
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9V
bmljb2RlQmlkaS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5n
ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZVR5cGVzLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZEdsb2JhbERhdGEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uY3BwCmluZGV4IDdmNmU3
YzJjOTY0MDRjZDU2OTZmOWIxN2I2NDMwZTliNDNjM2YxNTEuLmQ4NTE2NjllZTlhYzNmZjMyZDMz
YWFjOTVlYTA1NDU3YTM4OWJiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcApAQCAtMjksMjAgKzI5
LDIyIEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1
cmVBbmltYXRpb24+IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKGRvdWJs
ZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlLCBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQorUGFzc093blB0cjxBY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb24+IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRl
KFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlLCBQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZVRhcmdldCogdGFyZ2V0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uKHN0YXJ0VGltZSwgY3VydmUsIHRhcmdldCkpOworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKGN1cnZlLCB0
YXJnZXQpKTsKIH0KIAogQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjp+QWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uKCkKIHsKIH0KIAotQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5p
bWF0aW9uOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwg
UGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3VydmUsIFBsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0KiB0YXJnZXQpCi0gICAgOiBtX3N0YXJ0VGltZShzdGFydFRpbWUpCitBY3RpdmVQ
bGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihQ
YXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgUGxhdGZvcm1HZXN0dXJlQ3Vy
dmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1fc3RhcnRUaW1lKDApCisgICAgLCBtX3dhaXRpbmdG
b3JGaXJzdFRpY2sodHJ1ZSkKICAgICAsIG1fY3VydmUoY3VydmUpCiAgICAgLCBtX3RhcmdldCh0
YXJnZXQpCiB7CkBAIC01MCw2ICs1MiwxMCBAQCBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRp
b246OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLAogCiBi
b29sIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZShkb3VibGUgdGltZSkK
IHsKKyAgICBpZiAobV93YWl0aW5nRm9yRmlyc3RUaWNrKSB7CisgICAgICAgIG1fc3RhcnRUaW1l
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgICAgIG1fd2FpdGluZ0ZvckZp
cnN0VGljayA9IGZhbHNlOworICAgIH0KICAgICAvLyBBbGwgUGxhdGZvcm1HZXN0dXJlQ3VydmVz
IGFzc3VtZSB6ZXJvLWJhc2VkIHRpbWUsIHNvIHdlIHN1YnRyYWN0CiAgICAgLy8gdGhlIGFuaW1h
dGlvbiBzdGFydCB0aW1lIGJlZm9yZSBwYXNzaW5nIHRvIHRoZSBjdXJ2ZS4KICAgICByZXR1cm4g
bV9jdXJ2ZS0+YXBwbHkodGltZSAtIG1fc3RhcnRUaW1lLCBtX3RhcmdldCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlv
bi5oCmluZGV4IGFhZTQwZGU3YmIwNTI4ZDllMjQ1YTc0YjU5ZWRlNGE0Zjg4MmI4ZjUuLjlkNTYz
ZTQ4MzY2NmRkMmFkYTFiNWIwNWU4OTg0ZGYxNWJhYzcwMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oCkBA
IC00MiwxNiArNDIsMTcgQEAgY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFz
cyBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24gewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbik7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBjcmVhdGUoZG91Ymxl
IHN0YXJ0VGltZSwgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8QWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4s
IFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CiAgICAgfkFjdGl2ZVBsYXRmb3JtR2VzdHVy
ZUFuaW1hdGlvbigpOwogCiAgICAgYm9vbCBhbmltYXRlKGRvdWJsZSB0aW1lKTsKIAogcHJpdmF0
ZToKICAgICAvLyBBc3N1bWVzIGEgdmFsaWQgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgdGhh
dCBvdXRsaXZlcyB0aGUgYW5pbWF0aW9uLgotICAgIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1h
dGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwg
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqKTsKKyAgICBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb24oUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0Kik7CiAKICAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgYm9vbCBtX3dh
aXRpbmdGb3JGaXJzdFRpY2s7CiAgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBtX2N1
cnZlOwogICAgIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KiBtX3RhcmdldDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQu
aAppbmRleCBiZmIwYWViY2RkZWI2NTQ5ZTNiNGMxMDBkNzcwZmFiYTk4MjEzNGJhLi5iMjhiMjky
YzE4ZGYwNDhlM2MzMGExZGY0OTUzMDQyZmJlYzMwNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgKQEAgLTMxLDggKzMx
LDggQEAgY2xhc3MgSW50UG9pbnQ7CiAKIGNsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsSW5jcmVtZW50KGNvbnN0IElu
dFBvaW50JikgPSAwOwotICAgIC8vIEZJWE1FOiBhZGQgaW50ZXJmYWNlcyBmb3Igc2V0U2Nyb2xs
KCksIHNldFBhZ2VTY2FsZUFuZFNjcm9sbCgpLCBldGMuCisgICAgdmlydHVhbCB2b2lkIHNjcm9s
bEJ5KGNvbnN0IEludFBvaW50JikgPSAwOworICAgIC8vIEZJWE1FOiBhZGQgaW50ZXJmYWNlcyBm
b3Igc2Nyb2xsKCksIGV0Yy4KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgflBsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAppbmRleCA3M2MzODg4ZDY1YThkNDNkZmU1MDYyNmQwNmY1ZjZiM2Ex
NTBmOGJjLi40NWIwYzQ4YjQwMDQ5MjdiNWI0MjZlNjE3M2JhOTVkZGRiMzA1MmRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKQEAgLTM0LDEy
ICszNCwxNCBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JOb25lLmgiCiAKKyNpbmNsdWRl
ICJBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJPd25BcnJheVB0ci5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlRvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNDUw
LDYgKzQ1Miw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0CiB2b2lkIFNjcm9sbEFuaW1hdG9y
Tm9uZTo6Y2FuY2VsQW5pbWF0aW9ucygpCiB7CiAgICAgbV9hbmltYXRpb25BY3RpdmUgPSBmYWxz
ZTsKKyAgICBtX2dlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKIH0KIAogdm9pZCBTY3JvbGxBbmlt
YXRvck5vbmU6OnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCkKQEAgLTQ5NSw2ICs0OTgsMTMgQEAg
dm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQogICAgIGlmICht
X3ZlcnRpY2FsRGF0YS5tX3N0YXJ0VGltZSAmJiBtX3ZlcnRpY2FsRGF0YS5hbmltYXRlU2Nyb2xs
KGN1cnJlbnRUaW1lKSkKICAgICAgICAgY29udGludWVBbmltYXRpb24gPSB0cnVlOwogCisgICAg
aWYgKG1fZ2VzdHVyZUFuaW1hdGlvbikgeworICAgICAgICBpZiAobV9nZXN0dXJlQW5pbWF0aW9u
LT5hbmltYXRlKGN1cnJlbnRUaW1lKSkKKyAgICAgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0g
dHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9nZXN0dXJlQW5pbWF0aW9uLmNsZWFy
KCk7CisgICAgfQorCiAgICAgaWYgKGNvbnRpbnVlQW5pbWF0aW9uKQogICAgICAgICBzdGFydE5l
eHRUaW1lcigpOwogICAgIGVsc2UKQEAgLTUyMyw2ICs1MzMsMTIgQEAgdm9pZCBTY3JvbGxBbmlt
YXRvck5vbmU6OnN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCkKICAgICAgICAgbV9hbmltYXRp
b25BY3RpdmUgPSBmYWxzZTsKIH0KIAordm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnNjcm9sbEJ5
KGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICBtX2N1cnJlbnRQb3NYICs9IGxvY2F0
aW9uLngoKTsKKyAgICBtX2N1cnJlbnRQb3NZICs9IGxvY2F0aW9uLnkoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCmluZGV4IDkxOGY4
ZDIxYzY2YWZiNDFjYjdkODAwMjE2YzNkNWNhYjljZmNiZWYuLmVlOGQwYmU3MmFmODM0MGYyNmY1
NGUwN2QxM2UyYzhhOWM1Y2Y2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yTm9uZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yTm9uZS5oCkBAIC0zNywxNiArMzcsMjAgQEAKICNlcnJvciAiU01PT1RIX1NDUk9M
TElORyByZXF1aXJlcyBSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSB0byBiZSBlbmFibGVkLiIKICNl
bmRpZgogCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogCiBjbGFzcyBTY3JvbGxBbmltYXRvck5vbmVUZXN0OwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIEludFBvaW50OworY2xhc3MgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5p
bWF0aW9uOwogc3RydWN0IFNjcm9sbEFuaW1hdG9yUGFyYW1ldGVyczsKIAotY2xhc3MgU2Nyb2xs
QW5pbWF0b3JOb25lIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK2NsYXNzIFNjcm9sbEFuaW1h
dG9yTm9uZSA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciwgcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0IHsKIHB1YmxpYzoKICAgICBTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFy
ZWEqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5vbmUoKTsKQEAgLTkwLDYgKzk0LDkg
QEAgcHVibGljOgogICAgICAgICBkb3VibGUgbV9tYXhpbXVtQ29hc3RUaW1lOwogICAgIH07CiAK
KyAgICAvLyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAg
IGZyaWVuZCBjbGFzcyA6OlNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKQEAgLTE0NSw2ICsxNTIs
OCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgYm9vbCBtX2Fu
aW1hdGlvbkFjdGl2ZTsKKworICAgIE93blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRp
b24+IG1fZ2VzdHVyZUFuaW1hdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1H
ZXN0dXJlQ3VydmUuY3BwCmluZGV4IDA3NjA5OTU4MzkzODJkYTg1MTk5YTE2YWRiNDI4MDgzYWI2
ZTczMTEuLjA2ZWQ1NGFjM2FjMDk2YmM0MGUxNjVlZTI1NDdjZGE1ZDkzNDYwNWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2Vz
dHVyZUN1cnZlLmNwcApAQCAtNzcsNyArNzcsNyBAQCBib29sIFRvdWNoRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZTo6YXBwbHkoZG91YmxlIHRpbWUsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZwog
ICAgIG1fY3VtdWxhdGl2ZVNjcm9sbCA9IHNjcm9sbDsKIAogICAgIGlmICh0aW1lIDwgMS41IHx8
IHNjcm9sbEluY3JlbWVudCAhPSBJbnRQb2ludDo6emVybygpKSB7Ci0gICAgICAgIHRhcmdldC0+
c2V0U2Nyb2xsSW5jcmVtZW50KHNjcm9sbEluY3JlbWVudCk7CisgICAgICAgIHRhcmdldC0+c2Ny
b2xsQnkoc2Nyb2xsSW5jcmVtZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3Jt
R2VzdHVyZUN1cnZlLmNwcAppbmRleCBmYWI1N2NkNWY4NmRkYzMxZWI2MThkYjczOWY3MzEwNzhm
NjhjMWM1Li5jOWYxNzMyODk3OWNiN2M3MmZmMzlmN2VjYzIxMTEwZjQzM2JjMzk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZS5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgYm9vbCBXaGVlbEZsaW5nUGxhdGZvcm1H
ZXN0dXJlQ3VydmU6OmFwcGx5KGRvdWJsZSB0aW1lLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmcK
ICAgICBtX2N1bXVsYXRpdmVTY3JvbGwgPSBzY3JvbGw7CiAKICAgICBpZiAoY2RmIDwgMC41IHx8
IHNjcm9sbEluY3JlbWVudCAhPSBJbnRQb2ludDo6emVybygpKSB7Ci0gICAgICAgIHRhcmdldC0+
c2V0U2Nyb2xsSW5jcmVtZW50KHNjcm9sbEluY3JlbWVudCk7CisgICAgICAgIHRhcmdldC0+c2Ny
b2xsQnkoc2Nyb2xsSW5jcmVtZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNwcAppbmRleCA1NTZl
NDZiNGVmNDAwOTNmMTEyYTFhNjM0MDY3MjE0MWNkMjQwZDRhLi41NThjMTRhN2QyMDRkMDcyZDQz
NmU1MzVkNzZiOTM3YmE0N2I0NGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbi5jcHAKQEAgLTI3LDE2ICsyNywxOCBAQAogI2luY2x1ZGUgImNjL0NDQWN0
aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogCiAjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIK
KyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uOjpjcmVhdGUoZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4g
Y3VydmUsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCitQYXNzT3duUHRyPENDQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbj4gQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoUGFzc093
blB0cjxDQ0dlc3R1cmVDdXJ2ZT4gY3VydmUsIENDR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24oc3Rh
cnRUaW1lLCBjdXJ2ZSwgdGFyZ2V0KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FjdGl2
ZUdlc3R1cmVBbmltYXRpb24oY3VydmUsIHRhcmdldCkpOwogfQogCi1DQ0FjdGl2ZUdlc3R1cmVB
bmltYXRpb246OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNz
T3duUHRyPENDR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdl
dCkKLSAgICA6IG1fc3RhcnRUaW1lKHN0YXJ0VGltZSkKK0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlv
bjo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGN1
cnZlLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQorICAgIDogbV9zdGFydFRpbWUoMCkK
KyAgICAsIG1fd2FpdGluZ0ZvckZpcnN0VGljayh0cnVlKQogICAgICwgbV9nZXN0dXJlQ3VydmUo
Y3VydmUpCiAgICAgLCBtX2dlc3R1cmVDdXJ2ZVRhcmdldCh0YXJnZXQpCiB7CkBAIC00OCw2ICs1
MCwxMSBAQCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb246On5DQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b24oKQogCiBib29sIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZShkb3VibGUgdGlt
ZSkKIHsKKyAgICBpZiAobV93YWl0aW5nRm9yRmlyc3RUaWNrKSB7CisgICAgICAgIG1fc3RhcnRU
aW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgICAgIG1fd2FpdGluZ0Zv
ckZpcnN0VGljayA9IGZhbHNlOworICAgIH0KKwogICAgIC8vIENDR2VzdHVyZUN1cnZlcyB1c2Vk
IHplcm8tYmFzZWQgdGltZSwgc28gc3VidHJhY3Qgc3RhcnQtdGltZS4KICAgICByZXR1cm4gbV9n
ZXN0dXJlQ3VydmUtPmFwcGx5KHRpbWUgLSBtX3N0YXJ0VGltZSwgbV9nZXN0dXJlQ3VydmVUYXJn
ZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaAppbmRl
eCBjNzFiMjI1ZGZkM2JlMmRhOTk2OTE2MDRlZDQzNTczNzIxYzQ1M2RiLi45YmNkNzUzNzA0YzM1
OTRlMjNiZWQzNmI2YjY1NDk0MGE4NTRkNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUdlc3R1cmVBbmltYXRpb24uaApAQCAtMzcsMTUgKzM3LDE2IEBAIGNsYXNzIENDR2VzdHVyZUN1
cnZlVGFyZ2V0OwogY2xhc3MgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOwogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gY3JlYXRlKGRvdWJsZSBz
dGFydFRpbWUsIFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+LCBDQ0dlc3R1cmVDdXJ2ZVRhcmdl
dCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gY3Jl
YXRlKFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+LCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCopOwog
ICAgIH5DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24oKTsKIAogICAgIGJvb2wgYW5pbWF0ZShkb3Vi
bGUgdGltZSk7CiAKIHByaXZhdGU6Ci0gICAgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKGRvdWJs
ZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+LCBDQ0dlc3R1cmVDdXJ2ZVRh
cmdldCopOworICAgIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDR2VzdHVy
ZUN1cnZlPiwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKIAogICAgIGRvdWJsZSBtX3N0YXJ0VGlt
ZTsKKyAgICBkb3VibGUgbV93YWl0aW5nRm9yRmlyc3RUaWNrOwogICAgIE93blB0cjxDQ0dlc3R1
cmVDdXJ2ZT4gbV9nZXN0dXJlQ3VydmU7CiAgICAgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIG1fZ2Vz
dHVyZUN1cnZlVGFyZ2V0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oCmluZGV4IDNlZjkz
NWI2YTQ1MmVjZmUwMWM1NmVjNTJjN2ZjMjM5Nzk2ZGY5ZTMuLjRiYzFjMGRkODA2ZGY3NjVlM2Yy
NDcyZDJiNjYzNjQ1ZDI4OWM2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaApAQCAtMzEs
MTEgKzMxLDEwIEBAIGNsYXNzIEludFBvaW50OwogCiBjbGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdl
dCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJ
bnRQb2ludCYpID0gMDsKLSAgICAvLyBGSVhNRTogYWRkIGludGVyZmFjZXMgZm9yIHNldFNjcm9s
bCgpLCBzZXRQYWdlU2NhbGVBbmRTY3JvbGwoKSwgZXRjLgotCi1wcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB+Q0NHZXN0dXJlQ3VydmVUYXJnZXQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxCeShjb25zdCBJbnRQb2ludCYpID0gMDsKKyAgICAvLyBGSVhNRTogYWRkIGludGVyZmFjZXMg
Zm9yIHNjcm9sbCgpLCBldGMuCiB9OwogCiBjbGFzcyBDQ0dlc3R1cmVDdXJ2ZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NJbnB1dEhhbmRsZXIuaAppbmRleCAzMzcyMWYxZGZjNzBjNDY1NzI0N2Q2NzgxZmU5NjlmMWEy
MGI4OWQ3Li4wMzFkN2RjNTAxZDlmNzM2YTM3NmE5MzViM2RlMjI0NDZiZTY5NWYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0
SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgKQEAgLTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb247CitjbGFzcyBDQ0dlc3R1cmVD
dXJ2ZVRhcmdldDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKIApAQCAtNzUsNiAr
NzcsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSBzdGFydFRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBkdXJhdGlvbikgPSAwOwogCisgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1cmVB
bmltYXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24+KSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBDQ0lucHV0SGFuZGxlckNsaWVudCgpIHsg
fQogICAgIHZpcnR1YWwgfkNDSW5wdXRIYW5kbGVyQ2xpZW50KCkgeyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDAwMmU3ODI2ZDNlMzY5YjlmODI3NzI0ZGQw
MjY1YjcwNmRiYmY5NjkuLmViZjA5ZTE1Njg5OGFiNGU3NzI4ZTQ3NDFlM2EyMjVjYzRiMmM5NWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0zMCw4ICszMCwx
MCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0ND
QWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5o
IgogI2luY2x1ZGUgImNjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKKyNpbmNsdWRlICJjYy9D
Q0dlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5oIgpAQCAtMTQzLDYgKzE0NSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5p
bWF0ZShkb3VibGUgbW9ub3RvbmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUpCiB7CiAgICAg
YW5pbWF0ZVBhZ2VTY2FsZShtb25vdG9uaWNUaW1lKTsKICAgICBhbmltYXRlTGF5ZXJzKG1vbm90
b25pY1RpbWUsIHdhbGxDbG9ja1RpbWUpOworICAgIGFuaW1hdGVHZXN0dXJlcyhtb25vdG9uaWNU
aW1lKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1h
dGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxv
YXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZHVyYXRpb24pCkBAIC0xNzAs
NiArMTczLDE0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmlt
YXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sCiAgICAgbV9jbGllbnQtPnNldE5l
ZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbj4gZ2VzdHVyZUFuaW1hdGlvbikKK3sKKyAgICBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24g
PSBnZXN0dXJlQW5pbWF0aW9uOworCisgICAgaWYgKG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbikK
KyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7Cit9CisKIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVy
SW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QpCiB7CiAgICAgLy8gRm9yIG5vdywgd2UgdXNlIGRhbWFnZSB0cmFja2luZyB0byBjb21w
dXRlIGEgZ2xvYmFsIHNjaXNzb3IuIFRvIGRvIHRoaXMsIHdlIG11c3QKQEAgLTc4Myw0ICs3OTQs
MTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZW5kRGlkTG9zZUNvbnRleHRSZWN1cnNp
dmUoQ0NMYXllckltcGwqIGN1cnJlbnQpCiAgICAgICAgIHNlbmREaWRMb3NlQ29udGV4dFJlY3Vy
c2l2ZShjdXJyZW50LT5jaGlsZHJlbigpW2ldLmdldCgpKTsKIH0KIAordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjphbmltYXRlR2VzdHVyZXMoZG91YmxlIG1vbm90b25pY1RpbWUpCit7CisgICAg
aWYgKCFtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGJv
b2wgaXNDb250aW51aW5nID0gbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uLT5hbmltYXRlKG1vbm90
b25pY1RpbWUpOworICAgIGlmIChpc0NvbnRpbnVpbmcpCisgICAgICAgIG1fY2xpZW50LT5zZXRO
ZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworICAgIGVsc2UKKyAgICAgICAgbV9hY3RpdmVHZXN0
dXJlQW5pbWF0aW9uLmNsZWFyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCAxY2ZkMGZiNjc2NjAzMDM3MjhjMWE5
NjEzM2VlM2M4NDA4Yjg3NmNlLi42ODkwMGJkMmJmODE2ZjIxMDQwZDBlM2E2MjVlMzFiMjg0OGQ1
MmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0zNyw2ICszNyw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uOwogY2xhc3MgQ0NDb21wbGV0aW9uRXZlbnQ7CiBjbGFzcyBDQ1BhZ2VTY2FsZUFuaW1hdGlv
bjsKIGNsYXNzIENDTGF5ZXJJbXBsOwpAQCAtNzIsNiArNzMsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHBpbmNoR2VzdHVyZVVwZGF0ZShmbG9hdCwgY29uc3QgSW50UG9pbnQmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlRW5kKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFu
Y2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWUsIGRvdWJsZSBkdXJh
dGlvbik7CisgICAgdmlydHVhbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdlc3R1
cmVBbmltYXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uZ2V0KCAgICAp
OyB9CisgICAgLy8gVG8gY2xlYXIgYW4gYWN0aXZlIGFuaW1hdGlvbiwgcGFzcyBudWxscHRyLgor
ICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uPik7CiAKICAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0aW5nLgog
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwpAQCAtMTM1LDYgKzEzOSw3IEBAIHByb3Rl
Y3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmLCBDQ0xheWVy
VHJlZUhvc3RJbXBsQ2xpZW50Kik7CiAKICAgICB2b2lkIGFuaW1hdGVQYWdlU2NhbGUoZG91Ymxl
IG1vbm90b25pY1RpbWUpOworICAgIHZvaWQgYW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBtb25vdG9u
aWNUaW1lKTsKIAogICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAgICAgdmlydHVhbCB2b2lk
IGFuaW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1l
KTsKQEAgLTE3OSw2ICsxODQsNyBAQCBwcml2YXRlOgogICAgIEludFBvaW50IG1fcHJldmlvdXNQ
aW5jaEFuY2hvcjsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9wYWdlU2Nh
bGVBbmltYXRpb247CisgICAgT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gbV9hY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uOwogCiAgICAgLy8gVGhpcyBpcyB1c2VkIGZvciB0aWNraW5nIGFu
aW1hdGlvbnMgc2xvd2x5IHdoZW4gaGlkZGVuLgogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsVGltZVNvdXJjZUFkYXB0ZXI+IG1fdGltZVNvdXJjZUNsaWVudEFkYXB0ZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgKaW5kZXggZTQyZTQ1MTM0
YWUyODY0ZjhhZWQ3NTVlNmY1OGUzMjc3ZDMzOWIyZS4uMzhmZmZiODhmNGUzY2QyMjY0MGQ0ZDYz
NDljNDY5NjExODA5YzZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSW5wdXRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YklucHV0RXZlbnQuaApAQCAtMTk3LDYgKzE5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHx8
IHR5cGUgPT0gR2VzdHVyZVNjcm9sbFVwZGF0ZQogICAgICAgICAgICAgfHwgdHlwZSA9PSBHZXN0
dXJlRmxpbmdTdGFydAogICAgICAgICAgICAgfHwgdHlwZSA9PSBHZXN0dXJlRmxpbmdDYW5jZWwK
KyAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZVRhcERvd24KICAgICAgICAgICAgIHx8IHR5
cGUgPT0gR2VzdHVyZVRhcDsgLy8gRklYTUU6IFdoeSBpcyBHZXN0dXJlVGFwIG9uIHRoaXMgbGlz
dD8KICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCmluZGV4IGMyZGJlZTNiNDcyZGY2
NjYxNmY0MjE1ODZjYjVmYjcwNzc3ZDYyZTIuLjc1MmRlNzljMGQ4MzFiNmMyNmUwNWUwNGVhYWI3
MTgzN2IwNTQyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKQEAgLTI3LDEyICsyNywxNSBA
QAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaCIKIAorI2luY2x1
ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSAiVG91Y2hGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvckltcGwuaCIKICNp
bmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
SW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dl
YktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbi5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJL
aXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ0LDYgKzQ3LDQ3IEBAIFBhc3NPd25Q
dHI8Q0NJbnB1dEhhbmRsZXI+IENDSW5wdXRIYW5kbGVyOjpjcmVhdGUoQ0NJbnB1dEhhbmRsZXJD
bGllbnQqIGlucHV0SGFuCiAgICAgcmV0dXJuIFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw6OmNyZWF0ZShpbnB1dEhhbmRsZXJDbGllbnQpOwogfQogCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZl
QWRhcHRlciA6IHB1YmxpYyBDQ0dlc3R1cmVDdXJ2ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGNyZWF0ZShQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVy
ZUN1cnZlPiBwbGF0Zm9ybUN1cnZlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3VydmVBZGFwdGVyKHBsYXRmb3JtQ3Vy
dmUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91YmxlIHRpbWUsIENDR2Vz
dHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCisgICAgeworICAgICAgICBUYXJnZXRBZGFwdGVyIGFk
YXB0ZXIodGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VydmUtPmFwcGx5KHRpbWUsICZhZGFw
dGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2Vz
dHVyZUN1cnZlQWRhcHRlcihQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBjdXJ2ZSkK
KyAgICAgICAgOiBtX2N1cnZlKGN1cnZlKQorICAgIHsKKyAgICB9CisKKyAgICBjbGFzcyBUYXJn
ZXRBZGFwdGVyIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRhcmdldEFkYXB0ZXIoQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkK
KyAgICAgICAgICAgIDogbV90YXJnZXQodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmIGluY3JlbWVudCkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fdGFyZ2V0KTsKKyAgICAgICAgICAgIG1f
dGFyZ2V0LT5zY3JvbGxCeShpbmNyZW1lbnQpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogbV90YXJnZXQ7CisgICAgfTsKKworICAgIE93
blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gbV9jdXJ2ZTsKK307CisKIH0KIAogbmFtZXNwYWNl
IFdlYktpdCB7CkBAIC0xMjYsNiArMTcwLDcgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAg
ICAgICAgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBzY3JvbGxTdGF0dXMgPSBt
X2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQod2hlZWxFdmVudC54LCB3
aGVlbEV2ZW50LnkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpOwogICAgICAgICBzd2l0
Y2ggKHNjcm9sbFN0YXR1cykgewogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpT
Y3JvbGxTdGFydGVkOgorICAgICAgICAgICAgLy8gRklYTUU6IHVzZSBXaGVlbEZsaW5nUGxhdGZv
cm1HZXN0dXJlQ3VydmUgaGVyZSB0byBnZXQgc21vb3RoIHdoZWVsIHNjcm9sbGluZz8KICAgICAg
ICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeShJbnRTaXplKC13aGVlbEV2ZW50
LmRlbHRhWCwgLXdoZWVsRXZlbnQuZGVsdGFZKSk7CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxl
ckNsaWVudC0+c2Nyb2xsRW5kKCk7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5w
dXRFdmVudCgpOwpAQCAtMTcwLDkgKzIxNSwxMCBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQog
I2VuZGlmCiAgICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQpIHsKICAgICAgICAgICAgIG1faW5w
dXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRI
YW5kbGVJbnB1dEV2ZW50KCk7CiAgICAgICAgICAgICBtX3Njcm9sbFN0YXJ0ZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGhhbmRsZUdlc3R1cmVGbGlu
ZyhldmVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNl
IGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEJlZ2luKSB7CiAg
ICAgICAgIEFTU0VSVCghbV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CkBAIC0xOTYsMTAgKzI0Miw1
MiBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVu
dC0+cGluY2hHZXN0dXJlVXBkYXRlKGdlc3R1cmVFdmVudC5kZWx0YVgsIEludFBvaW50KGdlc3R1
cmVFdmVudC54LCBnZXN0dXJlRXZlbnQueSkpOwogICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxl
SW5wdXRFdmVudCgpOwogICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChldmVudC50eXBl
ID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duKSB7CisgICAgICAgIGlmIChtX2lucHV0
SGFuZGxlckNsaWVudC0+YWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpKQorICAgICAgICAgICAgbV9p
bnB1dEhhbmRsZXJDbGllbnQtPnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24obnVsbHB0cik7Cisg
ICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CisgICAgICAgIHJldHVybjsK
ICAgICB9CisKICAgICBtX2NsaWVudC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVudCh0cnVlIC8qIHNl
bmRUb1dpZGdldCAqLyk7CiB9CiAKK2Jvb2wgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6
OmhhbmRsZUdlc3R1cmVGbGluZyhjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICBB
U1NFUlQoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kKTsKKwor
ICAgIGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNv
bnN0IFdlYkdlc3R1cmVFdmVudCo+KCZldmVudCk7CisKKyAgICAvLyBHZXN0dXJlU2Nyb2xsRW5k
IHdpdGggbm9uLXplcm8gdmVsb2NpdHkgKGRlbHRhWC9ZKSBzaWduYWxzIHN0YXJ0IG9mIEZsaW5n
LgorICAgIGlmICghZ2VzdHVyZUV2ZW50LmRlbHRhWCAmJiAhZ2VzdHVyZUV2ZW50LmRlbHRhWSkg
eworICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhdHVz
IHNjcm9sbFN0YXR1cyA9IG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCZWdpbihJbnRQb2lu
dChnZXN0dXJlRXZlbnQueCwgZ2VzdHVyZUV2ZW50LnkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6
R2VzdHVyZSk7CisgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMpIHsKKyAgICBjYXNlIENDSW5wdXRI
YW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFydGVkOiB7CisgICAgICAgIGlmIChtX2lucHV0SGFuZGxl
ckNsaWVudC0+YWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpKQorICAgICAgICAgICAgbV9pbnB1dEhh
bmRsZXJDbGllbnQtPnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24obnVsbHB0cik7CisKKyAgICAg
ICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZlID0gVG91Y2hGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludChnZXN0dXJlRXZlbnQuZGVsdGFY
LCBnZXN0dXJlRXZlbnQuZGVsdGFZKSk7CisgICAgICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1cmVB
bmltYXRpb24+IGFuaW1hdGlvbiA9CisgICAgICAgICAgICAgICAgQ0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uOjpjcmVhdGUoUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZlQWRhcHRl
cjo6Y3JlYXRlKGZsaW5nQ3VydmUucmVsZWFzZSgpKSwgdGhpcyk7CisKKyAgICAgICAgbV9pbnB1
dEhhbmRsZXJDbGllbnQtPnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oYW5pbWF0aW9uLnJlbGVh
c2UoKSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3Jv
bGxJZ25vcmVkOgorICAgICAgICBtX2NsaWVudC0+ZGlkTm90SGFuZGxlSW5wdXRFdmVudChmYWxz
ZSAvKiBzZW5kVG9XaWRnZXQgKi8pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEND
SW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxGYWlsZWQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwogaW50IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJ
bXBsOjppZGVudGlmaWVyKCkgY29uc3QKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwpAQCAtMjEwLDQgKzI5OCwxMCBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsOjp3aWxsRHJhdyhkb3VibGUgbW9ub3RvbmljVGltZSkKIHsKIH0KIAordm9pZCBXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmIGluY3Jl
bWVudCkKK3sKKyAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQpCisgICAgICAgIG1faW5wdXRI
YW5kbGVyQ2xpZW50LT5zY3JvbGxCeShJbnRTaXplKGluY3JlbWVudC54KCksIGluY3JlbWVudC55
KCkpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKaW5kZXggODNiNGJkNTQ2MWFjMzRhNTE2
YmNlZGZlYzQyNGVhMWY0Y2MzMDZiNi4uNGFmZjUzZTdhNjVlY2FmODU1NTExZjZhY2ZmZDJiYjVl
NzRjNjhlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ci5oIgorI2luY2x1ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1
dEhhbmRsZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgpAQCAtMzgsNiArMzksNyBAQCBjbGFzcyBNdXRleDsKIH0KIAogbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFzcyBDQ0lucHV0SGFu
ZGxlckNsaWVudDsKIGNsYXNzIENDVGhyZWFkOwogfQpAQCAtNDcsNyArNDksNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQ7CiAKIC8v
IFRlbXBvcmFyaWx5IHN1YmNsYXNzaW5nIGZyb20gV2ViQ29tcG9zaXRvciB3aGlsZSBkb3duc3Ry
ZWFtIGNoYW5nZXMgbGFuZC4KLWNsYXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsIDog
cHVibGljIFdlYkNvbXBvc2l0b3IsIHB1YmxpYyBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlciB7Citj
bGFzcyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCA6IHB1YmxpYyBXZWJDb21wb3NpdG9y
LCBwdWJsaWMgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXIsIHB1YmxpYyBXZWJDb3JlOjpDQ0dlc3R1
cmVDdXJ2ZVRhcmdldCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGwpOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvbXBv
c2l0b3JJbnB1dEhhbmRsZXJJbXBsPiBjcmVhdGUoV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGll
bnQqKTsKQEAgLTYzLDkgKzY1LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBpZGVudGlm
aWVyKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNU
aW1lKTsKIAorICAgIC8vIFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFyZ2V0IGltcGxlbWVudGF0
aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
OworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
KFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50Kik7CiAKKyAgICBib29sIGhhbmRsZUdlc3R1
cmVGbGluZyhjb25zdCBXZWJJbnB1dEV2ZW50Jik7CisKICAgICBXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9pZGVudGlmaWVyOwogICAgIFdlYkNv
cmU6OkNDSW5wdXRIYW5kbGVyQ2xpZW50KiBtX2lucHV0SGFuZGxlckNsaWVudDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVU
ZXN0LmNwcAppbmRleCA3NGNhNTc2Njc0YTkwNDMwYmEyNzI2OTA3MzQ4YmRlZmQyMmI2ZWVjLi4z
MWQxNTNhODBmNTgyZWE2MGM5ZTMyMTNmNGU1NWIxOWUxNDQzNjlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3Qu
Y3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KIAogbmFtZXNwYWNlIHsKQEAgLTQyLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIGNsYXNzIE1vY2tQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCA6IHB1YmxpYyBQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQb2ludCYgZGVsdGEpCisgICAgdmlydHVhbCB2b2lk
IHNjcm9sbEJ5KGNvbnN0IEludFBvaW50JiBkZWx0YSkKICAgICB7CiAgICAgICAgIG1fY3VtdWxh
dGl2ZURlbHRhID0gbV9jdW11bGF0aXZlRGVsdGEgKyBkZWx0YTsKICAgICB9CkBAIC01Nyw0MSAr
NTgsMzIgQEAgcHJpdmF0ZToKIFRFU1QoUGxhdGZvcm1HZXN0dXJlQ3VydmUsIGZsaW5nQ3VydmUp
CiB7CiAgICAgTW9ja1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHRhcmdldDsKLSAgICBPd25Q
dHI8QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24gPSBBY3RpdmVQbGF0
Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZSgwLCBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KDEwMCwgMCkpLCAmdGFyZ2V0KTsKKyAgICBPd25QdHI8
QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6
OmNyZWF0ZShGbG9hdFBvaW50KDEwMCwgMCkpLCAmdGFyZ2V0KTsKIAogICAgIC8vIE5vdGU6IHRo
ZSBleHBlY3RhdGlvbnMgYmVsb3cgYXJlIGRlcGVuZGVudCBvbiB0aGUgdmFsdWUgb2Ygc2lnbWEg
aGFyZC1jb2RlZCBpbiB0aGUgUmF5bGVpZ2gKICAgICAvLyAgICAgICBjdXJ2ZS4gSWYgc2lnbWEg
Y2hhbmdlcywgdGhlc2UgdGVzdCBleHBlY3RhdGlvbnMgd2lsbCBhbHNvIGNoYW5nZS4KLSAgICBF
WFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMCkpOwotICAgIEVYUEVDVF9UUlVFKGFuaW1h
dGlvbi0+YW5pbWF0ZSgwLjI1KSk7Ci0gICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRl
KDAuNDUpKTsgLy8gVXNlIG5vbi11bmlmb3JtIHRpY2sgc3BhY2luZy4KLSAgICBFWFBFQ1RfVFJV
RShhbmltYXRpb24tPmFuaW1hdGUoMC43NSkpOwotICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+
YW5pbWF0ZSgxMDAwKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZSgxMDAx
KSk7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
OworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAwKSk7Cisg
ICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDAuMjUpKTsKKyAg
ICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoc3RhcnRUaW1lICsgMC40NSkpOyAvLyBV
c2Ugbm9uLXVuaWZvcm0gdGljayBzcGFjaW5nLgorICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+
YW5pbWF0ZShzdGFydFRpbWUgKyAwLjc1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5h
bmltYXRlKHN0YXJ0VGltZSArIDEwMDApKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5h
bmltYXRlKHN0YXJ0VGltZSArIDEwMDEpKTsKICAgICAvLyBTaW5jZSB0aGUgUmF5bGVpZ2ggQ0RG
IG1heGVzIG91dCBhdCAxLCB3ZSBleHBlY3QgdGhlIGN1bXVsYXRpdmUgc2Nyb2xsIGluY3JlbWVu
dHMgdG8KICAgICAvLyBtYXRjaCB0aGUgaW5wdXQgdmVsb2NpdHkgcGFyYW1ldGVyLgotICAgIC8v
IFNpbmNlIHdlIGNhbiBiZSBvZmYgYnkgKy8tMC41IG9uIGVhY2ggY29udmVyc2lvbiB0byBpbnQg
Zm9yIHNldFNjcm9sbEluY3JlbWVudCwKLSAgICAvLyBwaWNrIHRoZSAnbmVhcm5lc3MnIHRvIGJl
IHdpdGhpbiB0aGUgbnVtYmVyIG9mIHRpbWVzIGFuaW1hdGUgcmV0dXJucyB0cnVlLgogICAgIEVY
UEVDVF9ORUFSKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS54KCksIDEwMCwgMSk7CiAgICAgRVhQ
RUNUX0VRKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS55KCksIDApOwogCi0gICAgZG91YmxlIGJh
c2VUaW1lID0gNDIuNDI7Ci0gICAgYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5p
bWF0aW9uOjpjcmVhdGUoYmFzZVRpbWUsIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6
Y3JlYXRlKEZsb2F0UG9pbnQoMTAwLCAwKSksICZ0YXJnZXQpOworICAgIGFuaW1hdGlvbiA9IEFj
dGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFdoZWVsRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoNTAsIDE1MCkpLCAmdGFyZ2V0KTsKICAgICB0
YXJnZXQucmVzZXRDdW11bGF0aXZlRGVsdGEoKTsKIAotICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlv
bi0+YW5pbWF0ZShiYXNlVGltZSArIDAuMzUpKTsKLSAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24t
PmFuaW1hdGUoYmFzZVRpbWUgKyAxLjM1KSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbi0+
YW5pbWF0ZShiYXNlVGltZSArIDEwMDApKTsKLSAgICBFWFBFQ1RfTkVBUih0YXJnZXQuY3VtdWxh
dGl2ZURlbHRhKCkueCgpLCAxMDAsIDEpOwotCi0gICAgYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZv
cm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoMCwgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlOjpjcmVhdGUoRmxvYXRQb2ludCg1MCwgMTUwKSksICZ0YXJnZXQpOwotICAgIHRhcmdldC5y
ZXNldEN1bXVsYXRpdmVEZWx0YSgpOwotCi0gICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmlt
YXRlKDApKTsKLSAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC4yNSkpOwotICAg
IEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjQ1KSk7Ci0gICAgRVhQRUNUX1RSVUUo
YW5pbWF0aW9uLT5hbmltYXRlKDAuNzUpKTsKLSAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFu
aW1hdGUoMTAwMCkpOwotICAgIEVYUEVDVF9GQUxTRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMSkp
OworICAgIHN0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIEVY
UEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAwKSk7CisgICAgRVhQRUNU
X1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDAuMjUpKTsKKyAgICBFWFBFQ1Rf
VFJVRShhbmltYXRpb24tPmFuaW1hdGUoc3RhcnRUaW1lICsgMC40NSkpOworICAgIEVYUEVDVF9U
UlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAwLjc1KSk7CisgICAgRVhQRUNUX1RS
VUUoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDEwMDApKTsKKyAgICBFWFBFQ1RfRkFM
U0UoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDEwMDEpKTsKICAgICBFWFBFQ1RfTkVB
Uih0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueCgpLCA1MCwgMSk7CiAgICAgRVhQRUNUX05FQVIo
dGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLnkoKSwgMTUwLCAxKTsKIH0KQEAgLTk5LDE5ICs5MSwx
OCBAQCBURVNUKFBsYXRmb3JtR2VzdHVyZUN1cnZlLCBmbGluZ0N1cnZlKQogVEVTVChQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZSwgZmxpbmdDdXJ2ZVRvdWNoKQogewogICAgIE1vY2tQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldCB0YXJnZXQ7Ci0gICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFu
aW1hdGlvbj4gYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVh
dGUoMCwgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgx
MDAwLCAwKSksICZ0YXJnZXQpOworICAgIE93blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmlt
YXRpb24+IGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRl
KFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoMTAwMCwg
MCkpLCAmdGFyZ2V0KTsKIAogICAgIC8vIE5vdGU6IHRoZSBleHBlY3RhdGlvbnMgYmVsb3cgYXJl
IGRlcGVuZGVudCBvbiB0aGUgdmFsdWUgb2Ygc2lnbWEgaGFyZC1jb2RlZCBpbiB0aGUgUmF5bGVp
Z2gKICAgICAvLyAgICAgICBjdXJ2ZS4gSWYgc2lnbWEgY2hhbmdlcywgdGhlc2UgdGVzdCBleHBl
Y3RhdGlvbnMgd2lsbCBhbHNvIGNoYW5nZS4KLSAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFu
aW1hdGUoMCkpOwotICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjI1KSk7Ci0g
ICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuNDUpKTsgLy8gVXNlIG5vbi11bmlm
b3JtIHRpY2sgc3BhY2luZy4KLSAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC43
NSkpOwotICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjkpKTsKLSAgICBFWFBF
Q1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMCkpOwotICAgIEVYUEVDVF9GQUxTRShhbmlt
YXRpb24tPmFuaW1hdGUoMTAwMSkpOwotICAgIC8vIFNpbmNlIHdlIGNhbiBiZSBvZmYgYnkgKy8t
MC41IG9uIGVhY2ggY29udmVyc2lvbiB0byBpbnQgZm9yIHNldFNjcm9sbEluY3JlbWVudCwKLSAg
ICAvLyBwaWNrIHRoZSAnbmVhcm5lc3MnIHRvIGJlIHdpdGhpbiB0aGUgNSAqIG51bWJlciBvZiB0
aW1lcyBhbmltYXRlIHJldHVybnMgdHJ1ZS4KKyAgICBkb3VibGUgc3RhcnRUaW1lID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmlt
YXRlKHN0YXJ0VGltZSArIDApKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUo
c3RhcnRUaW1lICsgMC4yNSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShz
dGFydFRpbWUgKyAwLjQ1KSk7IC8vIFVzZSBub24tdW5pZm9ybSB0aWNrIHNwYWNpbmcuCisgICAg
RVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDAuNzUpKTsKKyAgICBF
WFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoc3RhcnRUaW1lICsgMC45KSk7CisgICAgRVhQ
RUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDEwMDApKTsKKyAgICBFWFBF
Q1RfRkFMU0UoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDEwMDEpKTsKICAgICBFWFBF
Q1RfTkVBUih0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueCgpLCAxMDAwLCAxKTsKICAgICBFWFBF
Q1RfRVEodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLnkoKSwgMCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsVGVzdC5jcHAKaW5kZXggNDU5MjU1ZTAyYTI4MzMxOWRmYjVlOTI5YThkOGY1
ZDk5MzVhNDQ0ZC4uNmMyYzliNjhlZTJkMWMyNWUxYTQ3YmU1NTFlZjQ2ODY4ZjkxYTAwMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgorI2luY2x1ZGUgImNjL0ND
QWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgi
CiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogCkBAIC00OSw2ICs1MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX3BpbmNoU3RhcnRlZChmYWxzZSkKICAgICAgICAgLCBtX3Bp
bmNoRW5kZWQoZmFsc2UpCiAgICAgICAgICwgbV9waW5jaE1hZ25pZmljYXRpb24oMCkKKyAgICAg
ICAgLCBtX3Njcm9sbEJ5Q2FsbGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgdmlydHVhbCB+
TW9ja0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpAQCAtNTgsMjAgKzYwLDI1IEBAIHB1YmxpYzoK
ICAgICBib29sIHBpbmNoU3RhcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGluY2hTdGFydGVkOyB9
CiAgICAgYm9vbCBwaW5jaEVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9waW5jaEVuZGVkOyB9CiAg
ICAgZmxvYXQgcGluY2hNYWdpbmlmY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9waW5jaE1hZ25p
ZmljYXRpb247IH0KKyAgICBib29sIHNjcm9sbEJ5Q2FsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxCeUNhbGxlZDsgfQogCiAgICAgdm9pZCByZXNldFBpbmNoKCkKICAgICB7Ci0gICAgICAg
IG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0gZmFsc2U7CisgICAgICAgIG1fcGluY2hT
dGFydGVkID0gbV9waW5jaEVuZGVkID0gbV9zY3JvbGxCeUNhbGxlZCA9IGZhbHNlOwogICAgICAg
ICBtX3BpbmNoTWFnbmlmaWNhdGlvbiA9IDA7CiAgICAgfQogCisgICAgdmlydHVhbCBXZWJDb3Jl
OjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSB7IHJl
dHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbj4gYW5pbWF0aW9uKSB7IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbiA9IGFu
aW1hdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhckFjdGl2ZUdlc3R1cmVBbmltYXRpb24o
KSB7IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jbGVhcigpOyB9CisKIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCBT
Y3JvbGxTdGF0dXMgc2Nyb2xsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3Jl
OjpDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSW5wdXRUeXBlKSBPVkVSUklERQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsU3RhdHVzOwogICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJREUgeyBtX3Nj
cm9sbEJ5Q2FsbGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxFbmQoKSBPVkVS
UklERSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVCZWdpbigpIE9WRVJSSURF
CkBAIC05Niw2ICsxMDMsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9waW5jaFN0YXJ0ZWQ7CiAg
ICAgYm9vbCBtX3BpbmNoRW5kZWQ7CiAgICAgZmxvYXQgbV9waW5jaE1hZ25pZmljYXRpb247Cisg
ICAgYm9vbCBtX3Njcm9sbEJ5Q2FsbGVkOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDQWN0aXZl
R2VzdHVyZUFuaW1hdGlvbj4gbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uOwogfTsKIAogY2xhc3Mg
TW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQgOiBwdWJsaWMgV2ViS2l0OjpXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IHsKQEAgLTI4MCw0ICsyOTAsNDYgQEAgVEVTVChX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2VzdHVyZVBpbmNoKQogICAgIFdlYktpdDo6
V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKIH0KIAorVEVTVChXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVySW1wbCwgZ2VzdHVyZUZsaW5nKQoreworICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
aW5pdGlhbGl6ZSgwKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlciBBUElzIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBjb21wb3NpdG9yIHRocmVh
ZC4KKyAgICBXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgYWx3YXlzSW1wbFRocmVh
ZDsKKyNlbmRpZgorCisgICAgTW9ja0lucHV0SGFuZGxlckNsaWVudCBtb2NrSW5wdXRIYW5kbGVy
OworICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gaW5wdXRIYW5kbGVy
ID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0ZSgmbW9ja0lucHV0SGFuZGxl
cik7CisgICAgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0NsaWVudDsK
KyAgICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgmbW9ja0NsaWVudCk7CisKKyAgICBXZWJLaXQ6
OldlYkdlc3R1cmVFdmVudCBnZXN0dXJlOworCisgICAgLy8gTmVlZCBzY3JvbGxCZWdpbiBiZWZv
cmUgc2VuZGluZyBhIHNjcm9sbEVuZCBldmVudC4KKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6
OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjsKKyAgICBpbnB1dEhhbmRsZXItPmhh
bmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CisgICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5k
bGVkKCkpOworICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKKyAg
ICBtb2NrQ2xpZW50LnJlc2V0KCk7CisKKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklu
cHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ7CisgICAgZ2VzdHVyZS5kZWx0YVggPSAyOworICAg
IGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKyAgICBFWFBFQ1RfVFJV
RShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuc2Vu
ZFRvV2lkZ2V0KCkpOworICAgIEFTU0VSVF9UUlVFKG1vY2tJbnB1dEhhbmRsZXIuYWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRkFMU0UobW9ja0lucHV0SGFuZGxlci5zY3Jv
bGxCeUNhbGxlZCgpKTsKKyAgICBtb2NrSW5wdXRIYW5kbGVyLmFjdGl2ZUdlc3R1cmVBbmltYXRp
b24oKS0+YW5pbWF0ZSgwLjAwMSk7CisgICAgRVhQRUNUX1RSVUUobW9ja0lucHV0SGFuZGxlci5z
Y3JvbGxCeUNhbGxlZCgpKTsKKyAgICBtb2NrQ2xpZW50LnJlc2V0KCk7CisKKyAgICAvLyBWZXJp
ZnkgdGhhdCBhIEdlc3R1cmVUYXBEb3duIGR1cmluZyBhbiBhbmltYXRpb24gY2FuY2VscyBpdC4K
KyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3du
OworICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKyAgICBFWFBF
Q1RfRkFMU0UobW9ja0lucHV0SGFuZGxlci5hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkpOworCisg
ICAgaW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoMCk7CisgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9y
OjpzaHV0ZG93bigpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131199</attachid>
            <date>2012-03-10 19:01:46 -0800</date>
            <delta_ts>2012-03-14 15:43:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80607-20120310220143.patch</filename>
            <type>text/plain</type>
            <size>41537</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMzgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjUwM2IzZWU0MTVlZTdh
MzE1YjAzMDI2Y2Y0Y2VkNDk4MTFkMWU3MS4uMTdhMTk0YWE3ZTNiMzdiN2UyMGVjNTQ0ZDVlOTI1
YjcyNDczOWM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTAzLTEwICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFdpcmUgdXAgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGZvciBDQywgU2Nyb2xsQW5pbWF0b3JO
b25lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2
MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0
IHRlc3RzIGFkZGVkLiBMYXlvdXQgdGVzdHMgdG8gZm9sbG93LgorCisgICAgICAgIFByb3ZpZGVz
IGltcGxlbWVudGF0aW9uIG9mIFBsYXRmb3JtR2VzdHVyZUN1cnZlcyBpbiBDaHJvbWUgQ29tcG9z
aXRvciwgYW5kIGJhc2ljCisgICAgICAgIHN1cHBvcnQgaW4gU2Nyb2xsQW5pbWF0b3JOb25lLCBm
b3IgZmxpbmcgZ2VzdHVyZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIHBsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OkFjdGl2ZVBs
YXRmb3JtR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL0FjdGl2ZVBs
YXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oOgorICAgICAgICAoQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dC5oOgorICAgICAgICAoUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck5vbmU6OmNhbmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JOb25lOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbEFuaW1hdG9yTm9uZSk6CisgICAgICAgICogcGxhdGZvcm0vVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL1doZWVsRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjphbmltYXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24uaDoKKyAgICAgICAgKENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaDoKKyAgICAgICAg
KENDR2VzdHVyZUN1cnZlVGFyZ2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphbmltYXRlR2VzdHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6
CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKwogMjAxMi0wMy0wOSAgSm9uIExlZSAg
PGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIE5vdGlmaWNhdGlvblByZXNlbnRl
ciB0byBOb3RpZmljYXRpb25DbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjc1
ZjFlMWZkOWFiMWIxZDM0YTgwZmZkNWM5OGZkMjMzMGM0MGRjMi4uNzAyZjdjY2JhNTEyMzJhYWY5
MTYwZjIyY2E5MjlhMzViZjYyNGRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxMi0wMy0xMCAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBXaXJlIHVwIFBsYXRmb3JtR2VzdHVyZUN1
cnZlcyBmb3IgQ0MsIFNjcm9sbEFuaW1hdG9yTm9uZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSW5wdXRFdmVudC5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnB1dEV2ZW50Ojppc1Njcm9sbEdlc3R1cmVFdmVudFR5cGUpOgorICAg
ICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFk
YXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVy
ZUN1cnZlQWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVy
ZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6OlBsYXRmb3JtR2Vz
dHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIpOgorICAgICAgICAoVGFyZ2V0QWRhcHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRvQ0NHZXN0dXJlQ3Vy
dmVBZGFwdGVyOjpUYXJnZXRBZGFwdGVyOjpUYXJnZXRBZGFwdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtR2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6OlRhcmdldEFk
YXB0ZXI6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlR2VzdHVyZUZsaW5nKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpzY3Jv
bGxCeSk6CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
KToKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwOgorICAgICAg
ICAqIHRlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHA6CisKIDIwMTIt
MDMtMDkgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBOb3Rp
ZmljYXRpb25QcmVzZW50ZXIgdG8gTm90aWZpY2F0aW9uQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCAyYmQxZjY1NGM5MGRjNzI1OWFiOTI2Mzc1M2ViYmQ3MzIzMzFiZDFi
Li41NjVkMmQzZDAxZTE4ODgzM2RkZjA5NzZkMGQwYzBiM2VmZDRkNDgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI5ODMsNiArMjk4Myw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uaCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9u
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5p
bWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQXJlbmEuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5
bmNGaWxlU3lzdGVtLmNwcCBcCkBAIC0zNDIxLDYgKzM0MjMsNyBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtRXhwb3J0TWFjcm9zLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbi5oIFwKQEAgLTM1NDIsNiArMzU0NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rv
dWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UaGVtZVR5cGVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENo
ZWNrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVy
ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdl
c3R1cmVBbmltYXRpb24uY3BwCmluZGV4IDdmNmU3YzJjOTY0MDRjZDU2OTZmOWIxN2I2NDMwZTli
NDNjM2YxNTEuLmQ4NTE2NjllZTlhYzNmZjMyZDMzYWFjOTVlYTA1NDU3YTM4OWJiY2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1h
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0
dXJlQW5pbWF0aW9uLmNwcApAQCAtMjksMjAgKzI5LDIyIEBACiAKICNpbmNsdWRlICJQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Lmgi
CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UGFzc093blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IEFjdGl2ZVBsYXRmb3Jt
R2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8UGxh
dGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFy
Z2V0KQorUGFzc093blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IEFjdGl2ZVBs
YXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJl
Q3VydmU+IGN1cnZlLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQogewotICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKHN0YXJ0
VGltZSwgY3VydmUsIHRhcmdldCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uKGN1cnZlLCB0YXJnZXQpKTsKIH0KIAogQWN0aXZlUGxhdGZv
cm1HZXN0dXJlQW5pbWF0aW9uOjp+QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKCkKIHsK
IH0KIAotQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpBY3RpdmVQbGF0Zm9ybUdlc3R1
cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZT4gY3VydmUsIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCi0gICAgOiBt
X3N0YXJ0VGltZShzdGFydFRpbWUpCitBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OkFj
dGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1
cnZlPiBjdXJ2ZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1f
c3RhcnRUaW1lKDApCisgICAgLCBtX3dhaXRpbmdGb3JGaXJzdFRpY2sodHJ1ZSkKICAgICAsIG1f
Y3VydmUoY3VydmUpCiAgICAgLCBtX3RhcmdldCh0YXJnZXQpCiB7CkBAIC01MCw2ICs1MiwxMCBA
QCBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFu
aW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLAogCiBib29sIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFu
aW1hdGlvbjo6YW5pbWF0ZShkb3VibGUgdGltZSkKIHsKKyAgICBpZiAobV93YWl0aW5nRm9yRmly
c3RUaWNrKSB7CisgICAgICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7CisgICAgICAgIG1fd2FpdGluZ0ZvckZpcnN0VGljayA9IGZhbHNlOworICAgIH0KICAg
ICAvLyBBbGwgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGFzc3VtZSB6ZXJvLWJhc2VkIHRpbWUsIHNv
IHdlIHN1YnRyYWN0CiAgICAgLy8gdGhlIGFuaW1hdGlvbiBzdGFydCB0aW1lIGJlZm9yZSBwYXNz
aW5nIHRvIHRoZSBjdXJ2ZS4KICAgICByZXR1cm4gbV9jdXJ2ZS0+YXBwbHkodGltZSAtIG1fc3Rh
cnRUaW1lLCBtX3RhcmdldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9B
Y3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oCmluZGV4IGFhZTQwZGU3YmIwNTI4ZDll
MjQ1YTc0YjU5ZWRlNGE0Zjg4MmI4ZjUuLjlkNTYzZTQ4MzY2NmRkMmFkYTFiNWIwNWU4OTg0ZGYx
NWJhYzcwMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FjdGl2
ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oCkBAIC00MiwxNiArNDIsMTcgQEAgY2xhc3MgUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFzcyBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmlt
YXRpb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFu
aW1hdGlvbik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8QWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uPiBjcmVhdGUoZG91YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBjcmVhdGUoUGFz
c093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0
Kik7CiAgICAgfkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbigpOwogCiAgICAgYm9vbCBh
bmltYXRlKGRvdWJsZSB0aW1lKTsKIAogcHJpdmF0ZToKICAgICAvLyBBc3N1bWVzIGEgdmFsaWQg
UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgdGhhdCBvdXRsaXZlcyB0aGUgYW5pbWF0aW9uLgot
ICAgIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNz
T3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQq
KTsKKyAgICBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZT4sIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CiAKICAgICBkb3Vi
bGUgbV9zdGFydFRpbWU7CisgICAgYm9vbCBtX3dhaXRpbmdGb3JGaXJzdFRpY2s7CiAgICAgT3du
UHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBtX2N1cnZlOwogICAgIFBsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0KiBtX3RhcmdldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaAppbmRleCBiZmIwYWViY2RkZWI2NTQ5ZTNi
NGMxMDBkNzcwZmFiYTk4MjEzNGJhLi5iMjhiMjkyYzE4ZGYwNDhlM2MzMGExZGY0OTUzMDQyZmJl
YzMwNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0LmgKQEAgLTMxLDggKzMxLDggQEAgY2xhc3MgSW50UG9pbnQ7CiAKIGNs
YXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U2Nyb2xsSW5jcmVtZW50KGNvbnN0IEludFBvaW50JikgPSAwOwotICAgIC8vIEZJWE1F
OiBhZGQgaW50ZXJmYWNlcyBmb3Igc2V0U2Nyb2xsKCksIHNldFBhZ2VTY2FsZUFuZFNjcm9sbCgp
LCBldGMuCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFBvaW50JikgPSAwOwor
ICAgIC8vIEZJWE1FOiBhZGQgaW50ZXJmYWNlcyBmb3Igc2Nyb2xsKCksIGV0Yy4KIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgflBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0KCkgeyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcAppbmRleCA5Njg0
NGY3ZWIzYzkyMzcyNGM2ZGNhMWI5MWRkMzhlOTI3OTc4YTljLi5lMTI1ODdjM2U2M2U2NmJmMmYz
ZDVhM2E2MzZmYzIxMTdlYmIzNzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yTm9uZS5jcHAKQEAgLTM0LDEyICszNCwxNCBAQAogCiAjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JOb25lLmgiCiAKKyNpbmNsdWRlICJBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmlt
YXRpb24uaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJPd25BcnJheVB0ci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVy
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgorI2luY2x1ZGUgIlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNDcxLDYgKzQ3Myw3IEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JOb25lOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgb2Zmc2V0CiB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6Y2FuY2VsQW5pbWF0aW9ucygpCiB7
CiAgICAgbV9hbmltYXRpb25BY3RpdmUgPSBmYWxzZTsKKyAgICBtX2dlc3R1cmVBbmltYXRpb24u
Y2xlYXIoKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnNlcnZpY2VTY3JvbGxBbmlt
YXRpb25zKCkKQEAgLTUxNiw2ICs1MTksMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmFu
aW1hdGlvblRpbWVyRmlyZWQoKQogICAgIGlmIChtX3ZlcnRpY2FsRGF0YS5tX3N0YXJ0VGltZSAm
JiBtX3ZlcnRpY2FsRGF0YS5hbmltYXRlU2Nyb2xsKGN1cnJlbnRUaW1lKSkKICAgICAgICAgY29u
dGludWVBbmltYXRpb24gPSB0cnVlOwogCisgICAgaWYgKG1fZ2VzdHVyZUFuaW1hdGlvbikgewor
ICAgICAgICBpZiAobV9nZXN0dXJlQW5pbWF0aW9uLT5hbmltYXRlKGN1cnJlbnRUaW1lKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9nZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7CisgICAgfQorCiAgICAgaWYgKGNvbnRp
bnVlQW5pbWF0aW9uKQogICAgICAgICBzdGFydE5leHRUaW1lcigpOwogICAgIGVsc2UKQEAgLTU0
NCw2ICs1NTQsMTIgQEAgdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0b3BBbmltYXRpb25UaW1l
cklmTmVlZGVkKCkKICAgICAgICAgbV9hbmltYXRpb25BY3RpdmUgPSBmYWxzZTsKIH0KIAordm9p
ZCBTY3JvbGxBbmltYXRvck5vbmU6OnNjcm9sbEJ5KGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikK
K3sKKyAgICBtX2N1cnJlbnRQb3NYICs9IGxvY2F0aW9uLngoKTsKKyAgICBtX2N1cnJlbnRQb3NZ
ICs9IGxvY2F0aW9uLnkoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yTm9uZS5oCmluZGV4IDQ5NWUwY2RkYWRjNmM3ZWFmMDgxZjQzNjE0NTAyZGRk
ZjI1NGJjOTkuLmM0N2JjYTk4NjA5YjRmMTc1ZDNlZDE0MTEzNTg2Mzk5M2IwNTJhYjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCkBAIC0zOCwxNiAr
MzgsMjAgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogY2xhc3MgU2Ny
b2xsQW5pbWF0b3JOb25lVGVzdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnRQ
b2ludDsKK2NsYXNzIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjsKIHN0cnVjdCBTY3Jv
bGxBbmltYXRvclBhcmFtZXRlcnM7CiAKLWNsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZSA6IHB1Ymxp
YyBTY3JvbGxBbmltYXRvciB7CitjbGFzcyBTY3JvbGxBbmltYXRvck5vbmUgOiBwdWJsaWMgU2Ny
b2xsQW5pbWF0b3IsIHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB7CiBwdWJsaWM6
CiAgICAgU2Nyb2xsQW5pbWF0b3JOb25lKFNjcm9sbGFibGVBcmVhKik7CiAgICAgdmlydHVhbCB+
U2Nyb2xsQW5pbWF0b3JOb25lKCk7CkBAIC05MSw2ICs5NSw5IEBAIHB1YmxpYzoKICAgICAgICAg
ZG91YmxlIG1fbWF4aW11bUNvYXN0VGltZTsKICAgICB9OwogCisgICAgLy8gUGxhdGZvcm1HZXN0
dXJlQ3VydmVUYXJnZXQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5
KGNvbnN0IEludFBvaW50Jik7CisKIHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgOjpTY3Jv
bGxBbmltYXRvck5vbmVUZXN0OwogCkBAIC0xNTEsNiArMTU4LDggQEAgcHJvdGVjdGVkOgogICAg
IGZsb2F0IG1fZmlyc3RWZWxvY2l0eTsKICAgICBib29sIG1fZmlyc3RWZWxvY2l0eVNldDsKICAg
ICBib29sIG1fZmlyc3RWZWxvY2l0eUlzVmVydGljYWw7CisKKyAgICBPd25QdHI8QWN0aXZlUGxh
dGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBtX2dlc3R1cmVBbmltYXRpb247CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3Vj
aEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcAppbmRleCAwNzYwOTk1ODM5MzgyZGE4
NTE5OWExNmFkYjQyODA4M2FiNmU3MzExLi4wNmVkNTRhYzNhYzA5NmJjNDBlMTY1ZWUyNTQ3Y2Rh
NWQ5MzQ2MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rv
dWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgYm9vbCBU
b3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KGRvdWJsZSB0aW1lLCBQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRhcmcKICAgICBtX2N1bXVsYXRpdmVTY3JvbGwgPSBzY3JvbGw7CiAKICAg
ICBpZiAodGltZSA8IDEuNSB8fCBzY3JvbGxJbmNyZW1lbnQgIT0gSW50UG9pbnQ6Onplcm8oKSkg
ewotICAgICAgICB0YXJnZXQtPnNldFNjcm9sbEluY3JlbWVudChzY3JvbGxJbmNyZW1lbnQpOwor
ICAgICAgICB0YXJnZXQtPnNjcm9sbEJ5KHNjcm9sbEluY3JlbWVudCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2hl
ZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKaW5kZXggZmFiNTdjZDVmODZkZGMz
MWViNjE4ZGI3MzlmNzMxMDc4ZjY4YzFjNS4uYzlmMTczMjg5NzljYjdjNzJmZjM5ZjdlY2MyMTEx
MGY0MzNiYzM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2hlZWxGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9X
aGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwCkBAIC02NCw3ICs2NCw3IEBAIGJvb2wg
V2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjphcHBseShkb3VibGUgdGltZSwgUGxhdGZv
cm1HZXN0dXJlQ3VydmVUYXJnCiAgICAgbV9jdW11bGF0aXZlU2Nyb2xsID0gc2Nyb2xsOwogCiAg
ICAgaWYgKGNkZiA8IDAuNSB8fCBzY3JvbGxJbmNyZW1lbnQgIT0gSW50UG9pbnQ6Onplcm8oKSkg
ewotICAgICAgICB0YXJnZXQtPnNldFNjcm9sbEluY3JlbWVudChzY3JvbGxJbmNyZW1lbnQpOwor
ICAgICAgICB0YXJnZXQtPnNjcm9sbEJ5KHNjcm9sbEluY3JlbWVudCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbi5jcHAKaW5kZXggNTU2ZTQ2YjRlZjQwMDkzZjExMmExYTYzNDA2NzIxNDFjZDI0MGQ0YS4u
NTU4YzE0YTdkMjA0ZDA3MmQ0MzZlNTM1ZDc2YjkzN2JhNDdiNDRkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJl
QW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwCkBAIC0yNywxNiArMjcsMTggQEAK
ICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKIAogI2luY2x1ZGUgImNj
L0NDR2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IEND
QWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25Q
dHI8Q0NHZXN0dXJlQ3VydmU+IGN1cnZlLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQor
UGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IENDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbjo6Y3JlYXRlKFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGN1cnZlLCBDQ0dlc3R1cmVD
dXJ2ZVRhcmdldCogdGFyZ2V0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uKHN0YXJ0VGltZSwgY3VydmUsIHRhcmdldCkpOworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKGN1cnZlLCB0YXJnZXQpKTsKIH0K
IAotQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24oZG91
YmxlIHN0YXJ0VGltZSwgUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4gY3VydmUsIENDR2VzdHVy
ZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCi0gICAgOiBtX3N0YXJ0VGltZShzdGFydFRpbWUpCitDQ0Fj
dGl2ZUdlc3R1cmVBbmltYXRpb246OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRy
PENDR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAg
ICA6IG1fc3RhcnRUaW1lKDApCisgICAgLCBtX3dhaXRpbmdGb3JGaXJzdFRpY2sodHJ1ZSkKICAg
ICAsIG1fZ2VzdHVyZUN1cnZlKGN1cnZlKQogICAgICwgbV9nZXN0dXJlQ3VydmVUYXJnZXQodGFy
Z2V0KQogewpAQCAtNDgsNiArNTAsMTEgQEAgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjp+Q0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkKIAogYm9vbCBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb246
OmFuaW1hdGUoZG91YmxlIHRpbWUpCiB7CisgICAgaWYgKG1fd2FpdGluZ0ZvckZpcnN0VGljaykg
eworICAgICAgICBtX3N0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwor
ICAgICAgICBtX3dhaXRpbmdGb3JGaXJzdFRpY2sgPSBmYWxzZTsKKyAgICB9CisKICAgICAvLyBD
Q0dlc3R1cmVDdXJ2ZXMgdXNlZCB6ZXJvLWJhc2VkIHRpbWUsIHNvIHN1YnRyYWN0IHN0YXJ0LXRp
bWUuCiAgICAgcmV0dXJuIG1fZ2VzdHVyZUN1cnZlLT5hcHBseSh0aW1lIC0gbV9zdGFydFRpbWUs
IG1fZ2VzdHVyZUN1cnZlVGFyZ2V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uLmgKaW5kZXggYzcxYjIyNWRmZDNiZTJkYTk5NjkxNjA0ZWQ0MzU3MzcyMWM0
NTNkYi4uOWJjZDc1MzcwNGMzNTk0ZTIzYmVkMzZiNmI2NTQ5NDBhODU0ZDcwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgKQEAgLTM3LDE1ICszNywxNiBA
QCBjbGFzcyBDQ0dlc3R1cmVDdXJ2ZVRhcmdldDsKIGNsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRp
b24+IGNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiwg
Q0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb24+IGNyZWF0ZShQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiwgQ0NHZXN0
dXJlQ3VydmVUYXJnZXQqKTsKICAgICB+Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCk7CiAKICAg
ICBib29sIGFuaW1hdGUoZG91YmxlIHRpbWUpOwogCiBwcml2YXRlOgotICAgIENDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZl
PiwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqKTsKKyAgICBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24o
UGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4sIENDR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CiAKICAg
ICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgZG91YmxlIG1fd2FpdGluZ0ZvckZpcnN0VGljazsK
ICAgICBPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IG1fZ2VzdHVyZUN1cnZlOwogICAgIENDR2VzdHVy
ZUN1cnZlVGFyZ2V0KiBtX2dlc3R1cmVDdXJ2ZVRhcmdldDsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJl
Q3VydmUuaAppbmRleCAzZWY5MzViNmE0NTJlY2ZlMDFjNTZlYzUyYzdmYzIzOTc5NmRmOWUzLi40
YmMxYzBkZDgwNmRmNzY1ZTNmMjQ3MmQyYjY2MzY0NWQyODljNmE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2Vz
dHVyZUN1cnZlLmgKQEAgLTMxLDExICszMSwxMCBAQCBjbGFzcyBJbnRQb2ludDsKIAogY2xhc3Mg
Q0NHZXN0dXJlQ3VydmVUYXJnZXQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3Jv
bGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKSA9IDA7Ci0gICAgLy8gRklYTUU6IGFkZCBpbnRl
cmZhY2VzIGZvciBzZXRTY3JvbGwoKSwgc2V0UGFnZVNjYWxlQW5kU2Nyb2xsKCksIGV0Yy4KLQot
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNDR2VzdHVyZUN1cnZlVGFyZ2V0KCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmKSA9IDA7CisgICAgLy8gRklY
TUU6IGFkZCBpbnRlcmZhY2VzIGZvciBzY3JvbGwoKSwgZXRjLgogfTsKIAogY2xhc3MgQ0NHZXN0
dXJlQ3VydmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKaW5kZXggMzM3MjFmMWRmYzcwYzQ2
NTcyNDdkNjc4MWZlOTY5ZjFhMjBiODlkNy4uMDMxZDdkYzUwMWQ5ZjczNmEzNzZhOTM1YjNkZTIy
NDQ2YmU2OTVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCkBAIC0yOSw2ICsyOSw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
OworY2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIElu
dFNpemU7CiAKQEAgLTc1LDYgKzc3LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RhcnRUaW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHVyYXRpb24pID0gMDsKIAorICAgIHZpcnR1
YWwgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8
Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPikgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NJbnB1
dEhhbmRsZXJDbGllbnQoKSB7IH0KICAgICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlckNsaWVudCgp
IHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAwMDJlNzgy
NmQzZTM2OWI5ZjgyNzcyNGRkMDI2NWI3MDZkYmJmOTY5Li5lYmYwOWUxNTY4OThhYjRlNzcyOGU0
NzQxZTNhMjI1Y2M0YjJjOTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcApAQCAtMzAsOCArMzAsMTAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgog
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQu
aCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJj
Yy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNl
LmgiCisjaW5jbHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKQEAgLTE0Myw2ICsxNDUsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxs
Q2xvY2tUaW1lKQogewogICAgIGFuaW1hdGVQYWdlU2NhbGUobW9ub3RvbmljVGltZSk7CiAgICAg
YW5pbWF0ZUxheWVycyhtb25vdG9uaWNUaW1lLCB3YWxsQ2xvY2tUaW1lKTsKKyAgICBhbmltYXRl
R2VzdHVyZXMobW9ub3RvbmljVGltZSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJv
b2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZSwgZG91Ymxl
IGR1cmF0aW9uKQpAQCAtMTcwLDYgKzE3MywxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAog
ICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxD
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGdlc3R1cmVBbmltYXRpb24pCit7CisgICAgbV9hY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uID0gZ2VzdHVyZUFuaW1hdGlvbjsKKworICAgIGlmIChtX2FjdGl2
ZUdlc3R1cmVBbmltYXRpb24pCisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1w
bFRocmVhZCgpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9y
QWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1h
Z2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBt
dXN0CkBAIC03ODMsNCArNzk0LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2VuZERp
ZExvc2VDb250ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50KQogICAgICAgICBzZW5k
RGlkTG9zZUNvbnRleHRSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiB9
CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBtb25v
dG9uaWNUaW1lKQoreworICAgIGlmICghbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBib29sIGlzQ29udGludWluZyA9IG1fYWN0aXZlR2VzdHVyZUFuaW1h
dGlvbi0+YW5pbWF0ZShtb25vdG9uaWNUaW1lKTsKKyAgICBpZiAoaXNDb250aW51aW5nKQorICAg
ICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jbGVhcigpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggMWNm
ZDBmYjY3NjYwMzAzNzI4YzFhOTYxMzNlZTNjODQwOGI4NzZjZS4uNjg5MDBiZDJiZjgxNmYyMTA0
MGQwZTNhNjI1ZTMxYjI4NDhkNTJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaApAQCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEND
QWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKIGNsYXNzIENDQ29tcGxldGlvbkV2ZW50OwogY2xhc3Mg
Q0NQYWdlU2NhbGVBbmltYXRpb247CiBjbGFzcyBDQ0xheWVySW1wbDsKQEAgLTcyLDYgKzczLDkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQsIGNv
bnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZUVuZCgpOwogICAg
IHZpcnR1YWwgdm9pZCBzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJn
ZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3Rh
cnRUaW1lLCBkb3VibGUgZHVyYXRpb24pOworICAgIHZpcnR1YWwgQ0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgeyByZXR1cm4gbV9hY3RpdmVHZXN0dXJl
QW5pbWF0aW9uLmdldCggICAgKTsgfQorICAgIC8vIFRvIGNsZWFyIGFuIGFjdGl2ZSBhbmltYXRp
b24sIHBhc3MgbnVsbHB0ci4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1h
dGlvbihQYXNzT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4pOwogCiAgICAgLy8gVmly
dHVhbCBmb3IgdGVzdGluZy4KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKQEAgLTEz
NSw2ICsxMzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBD
Q1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwogCiAgICAgdm9pZCBhbmlt
YXRlUGFnZVNjYWxlKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICB2b2lkIGFuaW1hdGVHZXN0
dXJlcyhkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKICAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0aW5n
LgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBk
b3VibGUgd2FsbENsb2NrVGltZSk7CkBAIC0xNzksNiArMTg0LDcgQEAgcHJpdmF0ZToKICAgICBJ
bnRQb2ludCBtX3ByZXZpb3VzUGluY2hBbmNob3I7CiAKICAgICBPd25QdHI8Q0NQYWdlU2NhbGVB
bmltYXRpb24+IG1fcGFnZVNjYWxlQW5pbWF0aW9uOworICAgIE93blB0cjxDQ0FjdGl2ZUdlc3R1
cmVBbmltYXRpb24+IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKIAogICAgIC8vIFRoaXMgaXMg
dXNlZCBmb3IgdGlja2luZyBhbmltYXRpb25zIHNsb3dseSB3aGVuIGhpZGRlbi4KICAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbFRpbWVTb3VyY2VBZGFwdGVyPiBtX3RpbWVTb3VyY2VDbGll
bnRBZGFwdGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
SW5wdXRFdmVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVu
dC5oCmluZGV4IGU0MmU0NTEzNGFlMjg2NGY4YWVkNzU1ZTZmNThlMzI3N2QzMzliMmUuLjM4ZmZm
Yjg4ZjRlM2NkMjI2NDBkNGQ2MzQ5YzQ2OTYxMTgwOWM2ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgKQEAgLTE5Nyw2ICsxOTcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB8fCB0eXBlID09IEdlc3R1cmVTY3JvbGxVcGRhdGUKICAgICAgICAg
ICAgIHx8IHR5cGUgPT0gR2VzdHVyZUZsaW5nU3RhcnQKICAgICAgICAgICAgIHx8IHR5cGUgPT0g
R2VzdHVyZUZsaW5nQ2FuY2VsCisgICAgICAgICAgICB8fCB0eXBlID09IEdlc3R1cmVUYXBEb3du
CiAgICAgICAgICAgICB8fCB0eXBlID09IEdlc3R1cmVUYXA7IC8vIEZJWE1FOiBXaHkgaXMgR2Vz
dHVyZVRhcCBvbiB0aGlzIGxpc3Q/CiAgICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcApp
bmRleCBjMmRiZWUzYjQ3MmRmNjY2MTZmNDIxNTg2Y2I1ZmI3MDc3N2Q2MmUyLi43NTJkZTc5YzBk
ODMxYjZjMjZlMDVlMDRlYWFiNzE4MzdiMDU0MmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3Bw
CkBAIC0yNywxMiArMjcsMTUgQEAKIAogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3JJbnB1dEhhbmRs
ZXJJbXBsLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgorI2lu
Y2x1ZGUgIlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgIldlYkNv
bXBvc2l0b3JJbXBsLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVu
dC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5j
bHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw2
ICs0Nyw0NyBAQCBQYXNzT3duUHRyPENDSW5wdXRIYW5kbGVyPiBDQ0lucHV0SGFuZGxlcjo6Y3Jl
YXRlKENDSW5wdXRIYW5kbGVyQ2xpZW50KiBpbnB1dEhhbgogICAgIHJldHVybiBXZWJLaXQ6Oldl
YkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoaW5wdXRIYW5kbGVyQ2xpZW50KTsK
IH0KIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUN1
cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIgOiBwdWJsaWMgQ0NHZXN0dXJlQ3VydmUgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBjcmVhdGUoUGFzc093
blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gcGxhdGZvcm1DdXJ2ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgUGxhdGZvcm1HZXN0dXJlQ3VydmVUb0NDR2VzdHVyZUN1cnZl
QWRhcHRlcihwbGF0Zm9ybUN1cnZlKSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGFwcGx5
KGRvdWJsZSB0aW1lLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgVGFyZ2V0QWRhcHRlciBhZGFwdGVyKHRhcmdldCk7CisgICAgICAgIHJldHVybiBtX2N1cnZl
LT5hcHBseSh0aW1lLCAmYWRhcHRlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIFBsYXRmb3Jt
R2VzdHVyZUN1cnZlVG9DQ0dlc3R1cmVDdXJ2ZUFkYXB0ZXIoUGFzc093blB0cjxQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZT4gY3VydmUpCisgICAgICAgIDogbV9jdXJ2ZShjdXJ2ZSkKKyAgICB7CisgICAg
fQorCisgICAgY2xhc3MgVGFyZ2V0QWRhcHRlciA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldCB7CisgICAgcHVibGljOgorICAgICAgICBUYXJnZXRBZGFwdGVyKENDR2VzdHVyZUN1
cnZlVGFyZ2V0KiB0YXJnZXQpCisgICAgICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IElu
dFBvaW50JiBpbmNyZW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Rhcmdl
dCk7CisgICAgICAgICAgICBtX3RhcmdldC0+c2Nyb2xsQnkoaW5jcmVtZW50KTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIG1fdGFyZ2V0
OworICAgIH07CisKKyAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IG1fY3VydmU7Cit9
OworCiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTI2LDYgKzE3MCw3IEBAIHZvaWQgV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5w
dXRFdmVudCYgZXZlbnQpCiAgICAgICAgIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0
dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEJlZ2luKEludFBv
aW50KHdoZWVsRXZlbnQueCwgd2hlZWxFdmVudC55KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Oldo
ZWVsKTsKICAgICAgICAgc3dpdGNoIChzY3JvbGxTdGF0dXMpIHsKICAgICAgICAgY2FzZSBDQ0lu
cHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiB1
c2UgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIGhlcmUgdG8gZ2V0IHNtb290aCB3aGVl
bCBzY3JvbGxpbmc/CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsQnko
SW50U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgsIC13aGVlbEV2ZW50LmRlbHRhWSkpOwogICAgICAg
ICAgICAgbV9pbnB1dEhhbmRsZXJDbGllbnQtPnNjcm9sbEVuZCgpOwogICAgICAgICAgICAgbV9j
bGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKQEAgLTE3MCw5ICsyMTUsMTAgQEAgdm9pZCBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJ
bnB1dEV2ZW50JiBldmVudCkKICNlbmRpZgogICAgICAgICBpZiAobV9zY3JvbGxTdGFydGVkKSB7
CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsRW5kKCk7Ci0gICAgICAg
ICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOwogICAgICAgICAgICAgbV9zY3Jv
bGxTdGFydGVkID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlm
IChoYW5kbGVHZXN0dXJlRmxpbmcoZXZlbnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0
dXJlUGluY2hCZWdpbikgewogICAgICAgICBBU1NFUlQoIW1fZXhwZWN0UGluY2hVcGRhdGVFbmQp
OwpAQCAtMTk2LDEwICsyNDIsNTIgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICAgICAg
bV9pbnB1dEhhbmRsZXJDbGllbnQtPnBpbmNoR2VzdHVyZVVwZGF0ZShnZXN0dXJlRXZlbnQuZGVs
dGFYLCBJbnRQb2ludChnZXN0dXJlRXZlbnQueCwgZ2VzdHVyZUV2ZW50LnkpKTsKICAgICAgICAg
bV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0g
ZWxzZSBpZiAoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bikgewor
ICAgICAgICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQtPmFjdGl2ZUdlc3R1cmVBbmltYXRpb24o
KSkKKyAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uKG51bGxwdHIpOworICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgp
OworICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlu
cHV0RXZlbnQodHJ1ZSAvKiBzZW5kVG9XaWRnZXQgKi8pOwogfQogCitib29sIFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVHZXN0dXJlRmxpbmcoY29uc3QgV2ViSW5wdXRFdmVu
dCYgZXZlbnQpCit7CisgICAgQVNTRVJUKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2Vz
dHVyZVNjcm9sbEVuZCk7CisKKyAgICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVu
dCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJHZXN0dXJlRXZlbnQqPigmZXZlbnQpOworCisgICAg
Ly8gR2VzdHVyZVNjcm9sbEVuZCB3aXRoIG5vbi16ZXJvIHZlbG9jaXR5IChkZWx0YVgvWSkgc2ln
bmFscyBzdGFydCBvZiBGbGluZy4KKyAgICBpZiAoIWdlc3R1cmVFdmVudC5kZWx0YVggJiYgIWdl
c3R1cmVFdmVudC5kZWx0YVkpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZEhhbmRsZUlucHV0RXZl
bnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQ0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbFN0YXR1cyBzY3JvbGxTdGF0dXMgPSBtX2lucHV0SGFuZGxlckNsaWVudC0+
c2Nyb2xsQmVnaW4oSW50UG9pbnQoZ2VzdHVyZUV2ZW50LngsIGdlc3R1cmVFdmVudC55KSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6Okdlc3R1cmUpOworICAgIHN3aXRjaCAoc2Nyb2xsU3RhdHVzKSB7
CisgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsU3RhcnRlZDogeworICAgICAg
ICBpZiAobV9pbnB1dEhhbmRsZXJDbGllbnQtPmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSkKKyAg
ICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9u
KG51bGxwdHIpOworCisgICAgICAgIE93blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gZmxpbmdD
dXJ2ZSA9IFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQo
Z2VzdHVyZUV2ZW50LmRlbHRhWCwgZ2VzdHVyZUV2ZW50LmRlbHRhWSkpOworICAgICAgICBPd25Q
dHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24gPQorICAgICAgICAgICAgICAg
IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtR2VzdHVyZUN1cnZlVG9D
Q0dlc3R1cmVDdXJ2ZUFkYXB0ZXI6OmNyZWF0ZShmbGluZ0N1cnZlLnJlbGVhc2UoKSksIHRoaXMp
OworCisgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5w
dXRFdmVudCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBDQ0lucHV0
SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDoKKyAgICAgICAgbV9jbGllbnQtPmRpZE5vdEhh
bmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICovKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsRmFpbGVkOgorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGludCBXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aWRlbnRpZmllcigpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKQEAgLTIxMCw0ICsyOTgsMTAgQEAgdm9pZCBXZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6d2lsbERyYXcoZG91YmxlIG1vbm90b25pY1RpbWUp
CiB7CiB9CiAKK3ZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OnNjcm9sbEJ5KGNv
bnN0IEludFBvaW50JiBpbmNyZW1lbnQpCit7CisgICAgaWYgKG1faW5wdXRIYW5kbGVyQ2xpZW50
KQorICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xsQnkoSW50U2l6ZShpbmNyZW1l
bnQueCgpLCBpbmNyZW1lbnQueSgpKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCmluZGV4
IDgzYjRiZDU0NjFhYzM0YTUxNmJjZWRmZWM0MjRlYTFmNGNjMzA2YjYuLjRhZmY1M2U3YTY1ZWNh
Zjg1NTUxMWY2YWNmZmQyYmI1ZTc0YzY4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZS5oIgog
I2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTM4LDYgKzM5LDcgQEAgY2xhc3MgTXV0
ZXg7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDR2VzdHVyZUN1cnZlVGFyZ2V0
OwogY2xhc3MgQ0NJbnB1dEhhbmRsZXJDbGllbnQ7CiBjbGFzcyBDQ1RocmVhZDsKIH0KQEAgLTQ3
LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJDb21wb3NpdG9ySW5wdXRI
YW5kbGVyQ2xpZW50OwogCiAvLyBUZW1wb3JhcmlseSBzdWJjbGFzc2luZyBmcm9tIFdlYkNvbXBv
c2l0b3Igd2hpbGUgZG93bnN0cmVhbSBjaGFuZ2VzIGxhbmQuCi1jbGFzcyBXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVySW1wbCA6IHB1YmxpYyBXZWJDb21wb3NpdG9yLCBwdWJsaWMgV2ViQ29yZTo6
Q0NJbnB1dEhhbmRsZXIgeworY2xhc3MgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwgOiBw
dWJsaWMgV2ViQ29tcG9zaXRvciwgcHVibGljIFdlYkNvcmU6OkNDSW5wdXRIYW5kbGVyLCBwdWJs
aWMgV2ViQ29yZTo6Q0NHZXN0dXJlQ3VydmVUYXJnZXQgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKTsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc093blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbD4gY3JlYXRlKFdlYkNvcmU6
OkNDSW5wdXRIYW5kbGVyQ2xpZW50Kik7CkBAIC02Myw5ICs2NSwxNCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBpbnQgaWRlbnRpZmllcigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJh
dyhkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKKyAgICAvLyBXZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2
ZVRhcmdldCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbChXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCopOwogCisg
ICAgYm9vbCBoYW5kbGVHZXN0dXJlRmxpbmcoY29uc3QgV2ViSW5wdXRFdmVudCYpOworCiAgICAg
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCogbV9jbGllbnQ7CiAgICAgaW50IG1faWRl
bnRpZmllcjsKICAgICBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlckNsaWVudCogbV9pbnB1dEhhbmRs
ZXJDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Bs
YXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAKaW5kZXggNzRjYTU3NjY3NGE5MDQzMGJhMjcyNjkw
NzM0OGJkZWZkMjJiNmVlYy4uMzFkMTUzYTgwZjU4MmVhNjBjOWUzMjEzZjRlNTViMTllMTQ0MzY5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZv
cm1HZXN0dXJlQ3VydmVUZXN0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNjL0ND
QWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgi
CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSB7CkBAIC00Miw3ICs0Myw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBjbGFzcyBNb2NrUGxhdGZvcm1HZXN0dXJlQ3Vy
dmVUYXJnZXQgOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgewogcHVibGljOgot
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmIGRlbHRh
KQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRQb2ludCYgZGVsdGEpCiAgICAg
ewogICAgICAgICBtX2N1bXVsYXRpdmVEZWx0YSA9IG1fY3VtdWxhdGl2ZURlbHRhICsgZGVsdGE7
CiAgICAgfQpAQCAtNTcsNDEgKzU4LDMyIEBAIHByaXZhdGU6CiBURVNUKFBsYXRmb3JtR2VzdHVy
ZUN1cnZlLCBmbGluZ0N1cnZlKQogewogICAgIE1vY2tQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dCB0YXJnZXQ7Ci0gICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbj4gYW5p
bWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoMCwgV2hlZWxG
bGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgxMDAsIDApKSwgJnRh
cmdldCk7CisgICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbj4gYW5pbWF0
aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoV2hlZWxGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgxMDAsIDApKSwgJnRhcmdldCk7
CiAKICAgICAvLyBOb3RlOiB0aGUgZXhwZWN0YXRpb25zIGJlbG93IGFyZSBkZXBlbmRlbnQgb24g
dGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQtY29kZWQgaW4gdGhlIFJheWxlaWdoCiAgICAgLy8gICAg
ICAgY3VydmUuIElmIHNpZ21hIGNoYW5nZXMsIHRoZXNlIHRlc3QgZXhwZWN0YXRpb25zIHdpbGwg
YWxzbyBjaGFuZ2UuCi0gICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDApKTsKLSAg
ICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC4yNSkpOwotICAgIEVYUEVDVF9UUlVF
KGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjQ1KSk7IC8vIFVzZSBub24tdW5pZm9ybSB0aWNrIHNwYWNp
bmcuCi0gICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuNzUpKTsKLSAgICBFWFBF
Q1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMCkpOwotICAgIEVYUEVDVF9GQUxTRShhbmlt
YXRpb24tPmFuaW1hdGUoMTAwMSkpOworICAgIGRvdWJsZSBzdGFydFRpbWUgPSBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUo
c3RhcnRUaW1lICsgMCkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFy
dFRpbWUgKyAwLjI1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0
VGltZSArIDAuNDUpKTsgLy8gVXNlIG5vbi11bmlmb3JtIHRpY2sgc3BhY2luZy4KKyAgICBFWFBF
Q1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoc3RhcnRUaW1lICsgMC43NSkpOworICAgIEVYUEVD
VF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAxMDAwKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAxMDAxKSk7CiAgICAgLy8gU2lu
Y2UgdGhlIFJheWxlaWdoIENERiBtYXhlcyBvdXQgYXQgMSwgd2UgZXhwZWN0IHRoZSBjdW11bGF0
aXZlIHNjcm9sbCBpbmNyZW1lbnRzIHRvCiAgICAgLy8gbWF0Y2ggdGhlIGlucHV0IHZlbG9jaXR5
IHBhcmFtZXRlci4KLSAgICAvLyBTaW5jZSB3ZSBjYW4gYmUgb2ZmIGJ5ICsvLTAuNSBvbiBlYWNo
IGNvbnZlcnNpb24gdG8gaW50IGZvciBzZXRTY3JvbGxJbmNyZW1lbnQsCi0gICAgLy8gcGljayB0
aGUgJ25lYXJuZXNzJyB0byBiZSB3aXRoaW4gdGhlIG51bWJlciBvZiB0aW1lcyBhbmltYXRlIHJl
dHVybnMgdHJ1ZS4KICAgICBFWFBFQ1RfTkVBUih0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueCgp
LCAxMDAsIDEpOwogICAgIEVYUEVDVF9FUSh0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueSgpLCAw
KTsKIAotICAgIGRvdWJsZSBiYXNlVGltZSA9IDQyLjQyOwotICAgIGFuaW1hdGlvbiA9IEFjdGl2
ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKGJhc2VUaW1lLCBXaGVlbEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KDEwMCwgMCkpLCAmdGFyZ2V0KTsK
KyAgICBhbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShX
aGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KDUwLCAxNTAp
KSwgJnRhcmdldCk7CiAgICAgdGFyZ2V0LnJlc2V0Q3VtdWxhdGl2ZURlbHRhKCk7CiAKLSAgICBF
WFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoYmFzZVRpbWUgKyAwLjM1KSk7Ci0gICAgRVhQ
RUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKGJhc2VUaW1lICsgMS4zNSkpOwotICAgIEVYUEVD
VF9GQUxTRShhbmltYXRpb24tPmFuaW1hdGUoYmFzZVRpbWUgKyAxMDAwKSk7Ci0gICAgRVhQRUNU
X05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLngoKSwgMTAwLCAxKTsKLQotICAgIGFuaW1h
dGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKDAsIFdoZWVsRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoNTAsIDE1MCkpLCAmdGFy
Z2V0KTsKLSAgICB0YXJnZXQucmVzZXRDdW11bGF0aXZlRGVsdGEoKTsKLQotICAgIEVYUEVDVF9U
UlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwKSk7Ci0gICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5h
bmltYXRlKDAuMjUpKTsKLSAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC40NSkp
OwotICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjc1KSk7Ci0gICAgRVhQRUNU
X1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDEwMDApKTsKLSAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0
aW9uLT5hbmltYXRlKDEwMDEpKTsKKyAgICBzdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoc3RhcnRUaW1l
ICsgMCkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAw
LjI1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDAu
NDUpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoc3RhcnRUaW1lICsgMC43
NSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAxMDAw
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAxMDAx
KSk7CiAgICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLngoKSwgNTAsIDEp
OwogICAgIEVYUEVDVF9ORUFSKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS55KCksIDE1MCwgMSk7
CiB9CkBAIC05OSwxOSArOTEsMTggQEAgVEVTVChQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSwgZmxpbmdD
dXJ2ZSkKIFRFU1QoUGxhdGZvcm1HZXN0dXJlQ3VydmUsIGZsaW5nQ3VydmVUb3VjaCkKIHsKICAg
ICBNb2NrUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgdGFyZ2V0OwotICAgIE93blB0cjxBY3Rp
dmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2Vz
dHVyZUFuaW1hdGlvbjo6Y3JlYXRlKDAsIFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6
Y3JlYXRlKEZsb2F0UG9pbnQoMTAwMCwgMCkpLCAmdGFyZ2V0KTsKKyAgICBPd25QdHI8QWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uPiBhbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdlc3R1
cmVBbmltYXRpb246OmNyZWF0ZShUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0
ZShGbG9hdFBvaW50KDEwMDAsIDApKSwgJnRhcmdldCk7CiAKICAgICAvLyBOb3RlOiB0aGUgZXhw
ZWN0YXRpb25zIGJlbG93IGFyZSBkZXBlbmRlbnQgb24gdGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQt
Y29kZWQgaW4gdGhlIFJheWxlaWdoCiAgICAgLy8gICAgICAgY3VydmUuIElmIHNpZ21hIGNoYW5n
ZXMsIHRoZXNlIHRlc3QgZXhwZWN0YXRpb25zIHdpbGwgYWxzbyBjaGFuZ2UuCi0gICAgRVhQRUNU
X1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDApKTsKLSAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24t
PmFuaW1hdGUoMC4yNSkpOwotICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZSgwLjQ1
KSk7IC8vIFVzZSBub24tdW5pZm9ybSB0aWNrIHNwYWNpbmcuCi0gICAgRVhQRUNUX1RSVUUoYW5p
bWF0aW9uLT5hbmltYXRlKDAuNzUpKTsKLSAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1h
dGUoMC45KSk7Ci0gICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDEwMDApKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5hbmltYXRlKDEwMDEpKTsKLSAgICAvLyBTaW5jZSB3
ZSBjYW4gYmUgb2ZmIGJ5ICsvLTAuNSBvbiBlYWNoIGNvbnZlcnNpb24gdG8gaW50IGZvciBzZXRT
Y3JvbGxJbmNyZW1lbnQsCi0gICAgLy8gcGljayB0aGUgJ25lYXJuZXNzJyB0byBiZSB3aXRoaW4g
dGhlIDUgKiBudW1iZXIgb2YgdGltZXMgYW5pbWF0ZSByZXR1cm5zIHRydWUuCisgICAgZG91Ymxl
IHN0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIEVYUEVDVF9U
UlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUgKyAwKSk7CisgICAgRVhQRUNUX1RSVUUo
YW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGltZSArIDAuMjUpKTsKKyAgICBFWFBFQ1RfVFJVRShh
bmltYXRpb24tPmFuaW1hdGUoc3RhcnRUaW1lICsgMC40NSkpOyAvLyBVc2Ugbm9uLXVuaWZvcm0g
dGljayBzcGFjaW5nLgorICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRp
bWUgKyAwLjc1KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKHN0YXJ0VGlt
ZSArIDAuOSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUg
KyAxMDAwKSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbi0+YW5pbWF0ZShzdGFydFRpbWUg
KyAxMDAxKSk7CiAgICAgRVhQRUNUX05FQVIodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLngoKSwg
MTAwMCwgMSk7CiAgICAgRVhQRUNUX0VRKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS55KCksIDAp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCmluZGV4IDQ1OTI1NWUwMmEy
ODMzMTlkZmI1ZTkyOWE4ZDhmNWQ5OTM1YTQ0NGQuLjZjMmM5YjY4ZWUyZDFjMjVlMWE0N2JlNTUx
ZWY0Njg2OGY5MWEwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQu
aCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJj
Yy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIK
IApAQCAtNDksNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9waW5jaFN0YXJ0ZWQoZmFs
c2UpCiAgICAgICAgICwgbV9waW5jaEVuZGVkKGZhbHNlKQogICAgICAgICAsIG1fcGluY2hNYWdu
aWZpY2F0aW9uKDApCisgICAgICAgICwgbV9zY3JvbGxCeUNhbGxlZChmYWxzZSkKICAgICB7CiAg
ICAgfQogICAgIHZpcnR1YWwgfk1vY2tJbnB1dEhhbmRsZXJDbGllbnQoKSB7IH0KQEAgLTU4LDIw
ICs2MCwyNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBwaW5jaFN0YXJ0ZWQoKSBjb25zdCB7IHJldHVy
biBtX3BpbmNoU3RhcnRlZDsgfQogICAgIGJvb2wgcGluY2hFbmRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGluY2hFbmRlZDsgfQogICAgIGZsb2F0IHBpbmNoTWFnaW5pZmNhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcGluY2hNYWduaWZpY2F0aW9uOyB9CisgICAgYm9vbCBzY3JvbGxCeUNhbGxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsQnlDYWxsZWQ7IH0KIAogICAgIHZvaWQgcmVzZXRQaW5j
aCgpCiAgICAgewotICAgICAgICBtX3BpbmNoU3RhcnRlZCA9IG1fcGluY2hFbmRlZCA9IGZhbHNl
OworICAgICAgICBtX3BpbmNoU3RhcnRlZCA9IG1fcGluY2hFbmRlZCA9IG1fc2Nyb2xsQnlDYWxs
ZWQgPSBmYWxzZTsKICAgICAgICAgbV9waW5jaE1hZ25pZmljYXRpb24gPSAwOwogICAgIH0KIAor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKCkgeyByZXR1cm4gbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmdldCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxX
ZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbikgeyBtX2FjdGl2ZUdl
c3R1cmVBbmltYXRpb24gPSBhbmltYXRpb247IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uKCkgeyBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsg
fQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpIE9WRVJSSURF
IHsgfQogICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9sbEJlZ2luKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbElucHV0VHlw
ZSkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVybiBtX3Njcm9sbFN0YXR1czsKICAgICB9
Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBPVkVS
UklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpIE9WRVJSSURFIHsgbV9zY3JvbGxCeUNhbGxlZCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsRW5kKCkgT1ZFUlJJREUgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0
dXJlQmVnaW4oKSBPVkVSUklERQpAQCAtOTYsNiArMTAzLDkgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fcGluY2hTdGFydGVkOwogICAgIGJvb2wgbV9waW5jaEVuZGVkOwogICAgIGZsb2F0IG1fcGlu
Y2hNYWduaWZpY2F0aW9uOworICAgIGJvb2wgbV9zY3JvbGxCeUNhbGxlZDsKKworICAgIE93blB0
cjxXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IG1fYWN0aXZlR2VzdHVyZUFuaW1h
dGlvbjsKIH07CiAKIGNsYXNzIE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IDog
cHVibGljIFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVudCB7CkBAIC0yODAs
NCArMjkwLDQ2IEBAIFRFU1QoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGdlc3R1cmVQ
aW5jaCkKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKK1RFU1Qo
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGdlc3R1cmVGbGluZykKK3sKKyAgICBXZWJL
aXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisjaWZuZGVmIE5ERUJVRworICAgIC8v
IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXIgQVBJcyBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSB0
aGUgY29tcG9zaXRvciB0aHJlYWQuCisgICAgV2ViQ29yZTo6RGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGFsd2F5c0ltcGxUaHJlYWQ7CisjZW5kaWYKKworICAgIE1vY2tJbnB1dEhhbmRsZXJDbGll
bnQgbW9ja0lucHV0SGFuZGxlcjsKKyAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw+IGlucHV0SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVh
dGUoJm1vY2tJbnB1dEhhbmRsZXIpOworICAgIE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
Q2xpZW50IG1vY2tDbGllbnQ7CisgICAgaW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoJm1vY2tDbGll
bnQpOworCisgICAgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsKKworICAgIC8vIE5l
ZWQgc2Nyb2xsQmVnaW4gYmVmb3JlIHNlbmRpbmcgYSBzY3JvbGxFbmQgZXZlbnQuCisgICAgZ2Vz
dHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW47Cisg
ICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworICAgIEVYUEVDVF9U
UlVFKG1vY2tDbGllbnQuaGFuZGxlZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5z
ZW5kVG9XaWRnZXQoKSk7CisgICAgbW9ja0NsaWVudC5yZXNldCgpOworCisgICAgZ2VzdHVyZS50
eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOworICAgIGdlc3R1
cmUuZGVsdGFYID0gMjsKKyAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVy
ZSk7CisgICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOworICAgIEVYUEVDVF9G
QUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKKyAgICBBU1NFUlRfVFJVRShtb2NrSW5w
dXRIYW5kbGVyLmFjdGl2ZUdlc3R1cmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1v
Y2tJbnB1dEhhbmRsZXIuc2Nyb2xsQnlDYWxsZWQoKSk7CisgICAgbW9ja0lucHV0SGFuZGxlci5h
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uKCktPmFuaW1hdGUoMC4wMDEpOworICAgIEVYUEVDVF9UUlVF
KG1vY2tJbnB1dEhhbmRsZXIuc2Nyb2xsQnlDYWxsZWQoKSk7CisgICAgbW9ja0NsaWVudC5yZXNl
dCgpOworCisgICAgLy8gVmVyaWZ5IHRoYXQgYSBHZXN0dXJlVGFwRG93biBkdXJpbmcgYW4gYW5p
bWF0aW9uIGNhbmNlbHMgaXQuCisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2
ZW50OjpHZXN0dXJlVGFwRG93bjsKKyAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQo
Z2VzdHVyZSk7CisgICAgRVhQRUNUX0ZBTFNFKG1vY2tJbnB1dEhhbmRsZXIuYWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbigpKTsKKworICAgIGlucHV0SGFuZGxlci0+c2V0Q2xpZW50KDApOworICAgIFdl
YktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131943</attachid>
            <date>2012-03-14 15:43:53 -0700</date>
            <delta_ts>2012-03-14 15:57:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80607-20120314184351.patch</filename>
            <type>text/plain</type>
            <size>39213</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGFmMzlhNDcwOGY4MmIz
MjIyOTQwMDkyNDQ3NjVhYzI0MzQ4OGFhZi4uZmE0Yjg2NjE0MjNjYTdlODk5MGM4MDFkMTVmZTAw
ZDE0MGQ5MTg1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTAzLTE0ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFdpcmUgdXAgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGZvciBDQywgU2Nyb2xsQW5pbWF0b3JO
b25lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2
MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbml0
IHRlc3RzIGFkZGVkLiBMYXlvdXQgdGVzdHMgdG8gZm9sbG93LgorCisgICAgICAgIFByb3ZpZGVz
IGltcGxlbWVudGF0aW9uIG9mIFBsYXRmb3JtR2VzdHVyZUN1cnZlcyBpbiBDaHJvbWUgQ29tcG9z
aXRvciwgYW5kIGJhc2ljCisgICAgICAgIHN1cHBvcnQgaW4gU2Nyb2xsQW5pbWF0b3JOb25lLCBm
b3IgZmxpbmcgZ2VzdHVyZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIHBsYXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OkFjdGl2ZVBs
YXRmb3JtR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL0FjdGl2ZVBs
YXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oOgorICAgICAgICAoQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dC5oOgorICAgICAgICAoUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvck5vbmU6OmNhbmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JOb25lOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNjcm9sbEFuaW1hdG9yTm9uZSk6CisgICAgICAgICogcGxhdGZvcm0vVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL1doZWVsRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjphbmltYXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24uaDoKKyAgICAgICAgKENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaDoKKyAgICAgICAg
KENDR2VzdHVyZUN1cnZlVGFyZ2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphbmltYXRlR2VzdHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YWN0aXZlR2VzdHVyZUFuaW1hdGlvbik6
CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKwogMjAxMi0wMy0xNCAgSm9zZXBoIFBl
Y29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFdlYiBJbnNwZWN0
b3I6IENSQVNIIHJ1bm5pbmcgJDAsICQxLCBldGMgYmVmb3JlIHRoZXkgYXJlIHNldApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBkMjI0MjY3ZjA2Y2ZjNDE2OWYyMTY4MjRkZmY3MzZlMzU5
MzU4YjIzLi41NGFhZjc0YWI0OGYyZTZmZDg2ZTI4MTBkNThjMDdhMzcyNjM3MDI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAzLTE0ICBXLiBKYW1l
cyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFdpcmUgdXAgUGxhdGZvcm1HZXN0dXJlQ3VydmVzIGZvciBDQywgU2Nyb2xsQW5pbWF0b3JOb25l
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2MDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1Ymxp
Yy9XZWJJbnB1dEV2ZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZlbnQ6OmlzU2Ny
b2xsR2VzdHVyZUV2ZW50VHlwZSk6CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZVRvQ0NHZXN0dXJlQWRhcHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVyZUFkYXB0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVyZUFk
YXB0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZVRvQ0NHZXN0
dXJlQWRhcHRlcjo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJl
VG9DQ0dlc3R1cmVBZGFwdGVyOjpQbGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVyZUFkYXB0ZXIpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUdlc3R1cmVGbGluZyk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6c2Ny
b2xsQnkpOgorICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bCk6CisgICAgICAgICogdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcDoKKyAgICAg
ICAgKiB0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwOgorCiAyMDEy
LTAzLTE0ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W2Nocm9taXVtXSBSZW1vdmUgY2FuUmVjb3ZlckZyb21Db250ZXh0TG9zcyBhdHRyaWJ1dGUsIGl0
J3MgdW51c2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5YjU4Yzk1MmFiZTcw
OTU2Njg1MzA3YTI0Yzg4YWU3ZTU0YTJiNTYzLi5jNzMwYTFlYjE5NjM2YzhjYTFjNWE2ZmVlOGZi
OTU3YjdlNGVlN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI5ODYsNiAr
Mjk4Niw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5p
bWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
bmltYXRpb24vVGltaW5nRnVuY3Rpb24uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FyZW5hLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXJlbmEuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcCBcCkBAIC0zNDIzLDYg
KzM0MjUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtRXZlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2
ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXhwb3J0TWFjcm9zLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIFwKQEAgLTM1NDQsNiArMzU0Nyw4
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9V
bmljb2RlQmlkaS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5n
ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZVR5cGVzLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZEdsb2JhbERhdGEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9BY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uY3BwCmluZGV4IDdmNmU3
YzJjOTY0MDRjZDU2OTZmOWIxN2I2NDMwZTliNDNjM2YxNTEuLjE4ZWM3ZWIzNGFlMmU0ZTA3YjU2
YzE0YTNlMDJhMzM3OGJhZDlkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcApAQCAtMzIsMTcgKzMy
LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxBY3RpdmVQbGF0Zm9y
bUdlc3R1cmVBbmltYXRpb24+IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRl
KGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZl
LCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQorUGFzc093blB0cjxBY3RpdmVQ
bGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6
Y3JlYXRlKFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGN1cnZlLCBQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKHN0YXJ0VGltZSwgY3VydmUsIHRhcmdldCkpOwor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKGN1
cnZlLCB0YXJnZXQpKTsKIH0KIAogQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjp+QWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKCkKIHsKIH0KIAotQWN0aXZlUGxhdGZvcm1HZXN0
dXJlQW5pbWF0aW9uOjpBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24oZG91YmxlIHN0YXJ0
VGltZSwgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3VydmUsIFBsYXRmb3JtR2Vz
dHVyZUN1cnZlVGFyZ2V0KiB0YXJnZXQpCi0gICAgOiBtX3N0YXJ0VGltZShzdGFydFRpbWUpCitB
Y3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1h
dGlvbihQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgUGxhdGZvcm1HZXN0
dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKKyAgICA6IG1fc3RhcnRUaW1lKDApCisgICAgLCBtX3dh
aXRpbmdGb3JGaXJzdFRpY2sodHJ1ZSkKICAgICAsIG1fY3VydmUoY3VydmUpCiAgICAgLCBtX3Rh
cmdldCh0YXJnZXQpCiB7CkBAIC01MCw2ICs1MSwxMCBAQCBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVB
bmltYXRpb246OkFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihkb3VibGUgc3RhcnRUaW1l
LAogCiBib29sIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6YW5pbWF0ZShkb3VibGUg
dGltZSkKIHsKKyAgICBpZiAobV93YWl0aW5nRm9yRmlyc3RUaWNrKSB7CisgICAgICAgIG1fc3Rh
cnRUaW1lID0gdGltZTsKKyAgICAgICAgbV93YWl0aW5nRm9yRmlyc3RUaWNrID0gZmFsc2U7Cisg
ICAgfQogICAgIC8vIEFsbCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZXMgYXNzdW1lIHplcm8tYmFzZWQg
dGltZSwgc28gd2Ugc3VidHJhY3QKICAgICAvLyB0aGUgYW5pbWF0aW9uIHN0YXJ0IHRpbWUgYmVm
b3JlIHBhc3NpbmcgdG8gdGhlIGN1cnZlLgogICAgIHJldHVybiBtX2N1cnZlLT5hcHBseSh0aW1l
IC0gbV9zdGFydFRpbWUsIG1fdGFyZ2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgKaW5kZXggYWFlNDBkZTdi
YjA1MjhkOWUyNDVhNzRiNTllZGU0YTRmODgyYjhmNS4uOWQ1NjNlNDgzNjY2ZGQyYWRhMWI1YjA1
ZTg5ODRkZjE1YmFjNzAyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQWN0
aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgKQEAgLTQyLDE2ICs0MiwxNyBAQCBj
bGFzcyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldDsKIGNsYXNzIEFjdGl2ZVBsYXRmb3JtR2Vz
dHVyZUFuaW1hdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWN0aXZlUGxhdGZvcm1H
ZXN0dXJlQW5pbWF0aW9uKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxBY3RpdmVQ
bGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGNyZWF0ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3du
UHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGNy
ZWF0ZShQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwgUGxhdGZvcm1HZXN0dXJlQ3Vy
dmVUYXJnZXQqKTsKICAgICB+QWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKCk7CiAKICAg
ICBib29sIGFuaW1hdGUoZG91YmxlIHRpbWUpOwogCiBwcml2YXRlOgogICAgIC8vIEFzc3VtZXMg
YSB2YWxpZCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB0aGF0IG91dGxpdmVzIHRoZSBhbmlt
YXRpb24uCi0gICAgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uKGRvdWJsZSBzdGFydFRp
bWUsIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+LCBQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldCopOworICAgIEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRy
PFBsYXRmb3JtR2VzdHVyZUN1cnZlPiwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqKTsKIAog
ICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICBib29sIG1fd2FpdGluZ0ZvckZpcnN0VGljazsK
ICAgICBPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IG1fY3VydmU7CiAgICAgUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUYXJnZXQqIG1fdGFyZ2V0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oCmluZGV4IGJmYjBhZWJjZGRl
YjY1NDllM2I0YzEwMGQ3NzBmYWJhOTgyMTM0YmEuLmIyOGIyOTJjMThkZjA0OGUzYzMwYTFkZjQ5
NTMwNDJmYmVjMzA0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaApAQCAtMzEsOCArMzEsOCBAQCBjbGFzcyBJbnRQb2lu
dDsKIAogY2xhc3MgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgewogcHVibGljOgotICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1lbnQoY29uc3QgSW50UG9pbnQmKSA9IDA7Ci0gICAg
Ly8gRklYTUU6IGFkZCBpbnRlcmZhY2VzIGZvciBzZXRTY3JvbGwoKSwgc2V0UGFnZVNjYWxlQW5k
U2Nyb2xsKCksIGV0Yy4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50UG9pbnQm
KSA9IDA7CisgICAgLy8gRklYTUU6IGFkZCBpbnRlcmZhY2VzIGZvciBzY3JvbGwoKSwgZXRjLgog
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+UGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQoKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCmlu
ZGV4IDk2ODQ0ZjdlYjNjOTIzNzI0YzZkY2ExYjkxZGQzOGU5Mjc5NzhhOWMuLmUxMjU4N2MzZTYz
ZTY2YmYyZjNkNWEzYTYzNmZjMjExN2ViYjM3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApAQCAtMzQsMTIgKzM0LDE0IEBACiAKICNpbmNs
dWRlICJTY3JvbGxBbmltYXRvck5vbmUuaCIKIAorI2luY2x1ZGUgIkFjdGl2ZVBsYXRmb3JtR2Vz
dHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk93bkFycmF5UHRyLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1HZXN0dXJlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC00NzEsNiArNDczLDcgQEAgdm9pZCBT
Y3JvbGxBbmltYXRvck5vbmU6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBG
bG9hdFBvaW50JiBvZmZzZXQKIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpjYW5jZWxBbmltYXRp
b25zKCkKIHsKICAgICBtX2FuaW1hdGlvbkFjdGl2ZSA9IGZhbHNlOworICAgIG1fZ2VzdHVyZUFu
aW1hdGlvbi5jbGVhcigpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2VydmljZVNj
cm9sbEFuaW1hdGlvbnMoKQpAQCAtNTE2LDYgKzUxOSwxMyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
Tm9uZTo6YW5pbWF0aW9uVGltZXJGaXJlZCgpCiAgICAgaWYgKG1fdmVydGljYWxEYXRhLm1fc3Rh
cnRUaW1lICYmIG1fdmVydGljYWxEYXRhLmFuaW1hdGVTY3JvbGwoY3VycmVudFRpbWUpKQogICAg
ICAgICBjb250aW51ZUFuaW1hdGlvbiA9IHRydWU7CiAKKyAgICBpZiAobV9nZXN0dXJlQW5pbWF0
aW9uKSB7CisgICAgICAgIGlmIChtX2dlc3R1cmVBbmltYXRpb24tPmFuaW1hdGUoY3VycmVudFRp
bWUpKQorICAgICAgICAgICAgY29udGludWVBbmltYXRpb24gPSB0cnVlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2dlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKKyAgICB9CisKICAgICBp
ZiAoY29udGludWVBbmltYXRpb24pCiAgICAgICAgIHN0YXJ0TmV4dFRpbWVyKCk7CiAgICAgZWxz
ZQpAQCAtNTQ0LDYgKzU1NCwxMiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c3RvcEFuaW1h
dGlvblRpbWVySWZOZWVkZWQoKQogICAgICAgICBtX2FuaW1hdGlvbkFjdGl2ZSA9IGZhbHNlOwog
fQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmIGxv
Y2F0aW9uKQoreworICAgIG1fY3VycmVudFBvc1ggKz0gbG9jYXRpb24ueCgpOworICAgIG1fY3Vy
cmVudFBvc1kgKz0gbG9jYXRpb24ueSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKaW5kZXggNDk1ZTBjZGRhZGM2YzdlYWYwODFmNDM2
MTQ1MDJkZGRmMjU0YmM5OS4uYzQ3YmNhOTg2MDliNGYxNzVkM2VkMTQxMTM1ODYzOTkzYjA1MmFi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25l
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKQEAg
LTM4LDE2ICszOCwyMCBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBj
bGFzcyBTY3JvbGxBbmltYXRvck5vbmVUZXN0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEludFBvaW50OworY2xhc3MgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOwogc3Ry
dWN0IFNjcm9sbEFuaW1hdG9yUGFyYW1ldGVyczsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25l
IDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTm9uZSA6IHB1
YmxpYyBTY3JvbGxBbmltYXRvciwgcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0IHsK
IHB1YmxpYzoKICAgICBTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEqKTsKICAgICB2
aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5vbmUoKTsKQEAgLTkxLDYgKzk1LDkgQEAgcHVibGljOgog
ICAgICAgICBkb3VibGUgbV9tYXhpbXVtQ29hc3RUaW1lOwogICAgIH07CiAKKyAgICAvLyBQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFz
cyA6OlNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7CiAKQEAgLTE1MSw2ICsxNTgsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgZmxvYXQgbV9maXJzdFZlbG9jaXR5OwogICAgIGJvb2wgbV9maXJzdFZlbG9jaXR5
U2V0OwogICAgIGJvb2wgbV9maXJzdFZlbG9jaXR5SXNWZXJ0aWNhbDsKKworICAgIE93blB0cjxB
Y3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IG1fZ2VzdHVyZUFuaW1hdGlvbjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwCmluZGV4IDA3NjA5OTU4
MzkzODJkYTg1MTk5YTE2YWRiNDI4MDgzYWI2ZTczMTEuLjA2ZWQ1NGFjM2FjMDk2YmM0MGUxNjVl
ZTI1NDdjZGE1ZDkzNDYwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rv
dWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApAQCAtNzcsNyArNzcsNyBA
QCBib29sIFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6YXBwbHkoZG91YmxlIHRpbWUs
IFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZwogICAgIG1fY3VtdWxhdGl2ZVNjcm9sbCA9IHNjcm9s
bDsKIAogICAgIGlmICh0aW1lIDwgMS41IHx8IHNjcm9sbEluY3JlbWVudCAhPSBJbnRQb2ludDo6
emVybygpKSB7Ci0gICAgICAgIHRhcmdldC0+c2V0U2Nyb2xsSW5jcmVtZW50KHNjcm9sbEluY3Jl
bWVudCk7CisgICAgICAgIHRhcmdldC0+c2Nyb2xsQnkoc2Nyb2xsSW5jcmVtZW50KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcAppbmRleCBmYWI1N2Nk
NWY4NmRkYzMxZWI2MThkYjczOWY3MzEwNzhmNjhjMWM1Li5jOWYxNzMyODk3OWNiN2M3MmZmMzlm
N2VjYzIxMTEwZjQzM2JjMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9X
aGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1doZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKQEAgLTY0LDcgKzY0LDcg
QEAgYm9vbCBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KGRvdWJsZSB0aW1l
LCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmcKICAgICBtX2N1bXVsYXRpdmVTY3JvbGwgPSBzY3Jv
bGw7CiAKICAgICBpZiAoY2RmIDwgMC41IHx8IHNjcm9sbEluY3JlbWVudCAhPSBJbnRQb2ludDo6
emVybygpKSB7Ci0gICAgICAgIHRhcmdldC0+c2V0U2Nyb2xsSW5jcmVtZW50KHNjcm9sbEluY3Jl
bWVudCk7CisgICAgICAgIHRhcmdldC0+c2Nyb2xsQnkoc2Nyb2xsSW5jcmVtZW50KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uLmNwcAppbmRleCA1NTZlNDZiNGVmNDAwOTNmMTEyYTFhNjM0MDY3MjE0MWNk
MjQwZDRhLi5hNGFmM2U1OWJjNTU3N2E4ODZmMDI5YmU1OTJmYzQ5OWFkNDNiYTAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUdlc3R1cmVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jcHAKQEAgLTMwLDEzICsz
MCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uPiBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShkb3VibGUgc3Rh
cnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBjdXJ2ZSwgQ0NHZXN0dXJlQ3VydmVU
YXJnZXQqIHRhcmdldCkKK1Bhc3NPd25QdHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPiBDQ0Fj
dGl2ZUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiBj
dXJ2ZSwgQ0NHZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKIHsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihzdGFydFRpbWUsIGN1cnZlLCB0YXJnZXQp
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbihjdXJ2
ZSwgdGFyZ2V0KSk7CiB9CiAKLUNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6Q0NBY3RpdmVHZXN0
dXJlQW5pbWF0aW9uKGRvdWJsZSBzdGFydFRpbWUsIFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+
IGN1cnZlLCBDQ0dlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQotICAgIDogbV9zdGFydFRpbWUo
c3RhcnRUaW1lKQorQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOjpDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24oUGFzc093blB0cjxDQ0dlc3R1cmVDdXJ2ZT4gY3VydmUsIENDR2VzdHVyZUN1cnZlVGFy
Z2V0KiB0YXJnZXQpCisgICAgOiBtX3N0YXJ0VGltZSgwKQorICAgICwgbV93YWl0aW5nRm9yRmly
c3RUaWNrKHRydWUpCiAgICAgLCBtX2dlc3R1cmVDdXJ2ZShjdXJ2ZSkKICAgICAsIG1fZ2VzdHVy
ZUN1cnZlVGFyZ2V0KHRhcmdldCkKIHsKQEAgLTQ4LDYgKzQ5LDExIEBAIENDQWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbjo6fkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpCiAKIGJvb2wgQ0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uOjphbmltYXRlKGRvdWJsZSB0aW1lKQogeworICAgIGlmIChtX3dhaXRp
bmdGb3JGaXJzdFRpY2spIHsKKyAgICAgICAgbV9zdGFydFRpbWUgPSB0aW1lOworICAgICAgICBt
X3dhaXRpbmdGb3JGaXJzdFRpY2sgPSBmYWxzZTsKKyAgICB9CisKICAgICAvLyBDQ0dlc3R1cmVD
dXJ2ZXMgdXNlZCB6ZXJvLWJhc2VkIHRpbWUsIHNvIHN1YnRyYWN0IHN0YXJ0LXRpbWUuCiAgICAg
cmV0dXJuIG1fZ2VzdHVyZUN1cnZlLT5hcHBseSh0aW1lIC0gbV9zdGFydFRpbWUsIG1fZ2VzdHVy
ZUN1cnZlVGFyZ2V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0
aW9uLmgKaW5kZXggYzcxYjIyNWRmZDNiZTJkYTk5NjkxNjA0ZWQ0MzU3MzcyMWM0NTNkYi4uOWJj
ZDc1MzcwNGMzNTk0ZTIzYmVkMzZiNmI2NTQ5NDBhODU0ZDcwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVHZXN0dXJlQW5p
bWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgKQEAgLTM3LDE1ICszNywxNiBAQCBjbGFzcyBD
Q0dlc3R1cmVDdXJ2ZVRhcmdldDsKIGNsYXNzIENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbiB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKTsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+IGNyZWF0
ZShkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiwgQ0NHZXN0dXJl
Q3VydmVUYXJnZXQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUdlc3R1cmVBbmlt
YXRpb24+IGNyZWF0ZShQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiwgQ0NHZXN0dXJlQ3VydmVU
YXJnZXQqKTsKICAgICB+Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCk7CiAKICAgICBib29sIGFu
aW1hdGUoZG91YmxlIHRpbWUpOwogCiBwcml2YXRlOgotICAgIENDQWN0aXZlR2VzdHVyZUFuaW1h
dGlvbihkb3VibGUgc3RhcnRUaW1lLCBQYXNzT3duUHRyPENDR2VzdHVyZUN1cnZlPiwgQ0NHZXN0
dXJlQ3VydmVUYXJnZXQqKTsKKyAgICBDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0
cjxDQ0dlc3R1cmVDdXJ2ZT4sIENDR2VzdHVyZUN1cnZlVGFyZ2V0Kik7CiAKICAgICBkb3VibGUg
bV9zdGFydFRpbWU7CisgICAgZG91YmxlIG1fd2FpdGluZ0ZvckZpcnN0VGljazsKICAgICBPd25Q
dHI8Q0NHZXN0dXJlQ3VydmU+IG1fZ2VzdHVyZUN1cnZlOwogICAgIENDR2VzdHVyZUN1cnZlVGFy
Z2V0KiBtX2dlc3R1cmVDdXJ2ZVRhcmdldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NHZXN0dXJlQ3VydmUuaApp
bmRleCAzZWY5MzViNmE0NTJlY2ZlMDFjNTZlYzUyYzdmYzIzOTc5NmRmOWUzLi40YmMxYzBkZDgw
NmRmNzY1ZTNmMjQ3MmQyYjY2MzY0NWQyODljNmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0dlc3R1cmVDdXJ2ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDR2VzdHVyZUN1cnZl
LmgKQEAgLTMxLDExICszMSwxMCBAQCBjbGFzcyBJbnRQb2ludDsKIAogY2xhc3MgQ0NHZXN0dXJl
Q3VydmVUYXJnZXQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxJbmNyZW1l
bnQoY29uc3QgSW50UG9pbnQmKSA9IDA7Ci0gICAgLy8gRklYTUU6IGFkZCBpbnRlcmZhY2VzIGZv
ciBzZXRTY3JvbGwoKSwgc2V0UGFnZVNjYWxlQW5kU2Nyb2xsKCksIGV0Yy4KLQotcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgfkNDR2VzdHVyZUN1cnZlVGFyZ2V0KCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50UG9pbnQmKSA9IDA7CisgICAgLy8gRklYTUU6IGFkZCBp
bnRlcmZhY2VzIGZvciBzY3JvbGwoKSwgZXRjLgogfTsKIAogY2xhc3MgQ0NHZXN0dXJlQ3VydmUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NJbnB1dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgKaW5kZXggMzM3MjFmMWRmYzcwYzQ2NTcyNDdkNjc4
MWZlOTY5ZjFhMjBiODlkNy4uMDMxZDdkYzUwMWQ5ZjczNmEzNzZhOTM1YjNkZTIyNDQ2YmU2OTVm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NJbnB1dEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uOworY2xhc3Mg
Q0NHZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7CiAK
QEAgLTc1LDYgKzc3LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgc3RhcnRUaW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgZHVyYXRpb24pID0gMDsKIAorICAgIHZpcnR1YWwgQ0NBY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uKiBhY3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVH
ZXN0dXJlQW5pbWF0aW9uPikgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NJbnB1dEhhbmRsZXJD
bGllbnQoKSB7IH0KICAgICB2aXJ0dWFsIH5DQ0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA1YzdmNTY1ZjdkMTJjMWI2
ODU1OTBlZDE2NzczZGEyYzBmZWE4NjVkLi5jYzNiMjE5ZDZhNDhhZGRiZDRjODI5MjgyYjQ2ZGU4
NzNhY2UyZmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAt
MzAsOCArMzAsMTAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNs
dWRlICJjYy9DQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFn
ZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgiCisjaW5j
bHVkZSAiY2MvQ0NHZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uaCIKQEAgLTE0Myw2ICsxNDUsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1l
KQogewogICAgIGFuaW1hdGVQYWdlU2NhbGUobW9ub3RvbmljVGltZSk7CiAgICAgYW5pbWF0ZUxh
eWVycyhtb25vdG9uaWNUaW1lLCB3YWxsQ2xvY2tUaW1lKTsKKyAgICBhbmltYXRlR2VzdHVyZXMo
bW9ub3RvbmljVGltZSk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdl
U2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5jaG9y
UG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZSwgZG91YmxlIGR1cmF0aW9u
KQpAQCAtMTcwLDYgKzE3MywxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFn
ZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAgIG1fY2xp
ZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldEFjdGl2ZUdlc3R1cmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUdl
c3R1cmVBbmltYXRpb24+IGdlc3R1cmVBbmltYXRpb24pCit7CisgICAgbV9hY3RpdmVHZXN0dXJl
QW5pbWF0aW9uID0gZ2VzdHVyZUFuaW1hdGlvbjsKKworICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVB
bmltYXRpb24pCisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgp
OworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQogewogICAgIC8vIEZvciBub3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tp
bmcgdG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBUbyBkbyB0aGlzLCB3ZSBtdXN0CkBAIC03
OTcsNCArODA4LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2VuZERpZExvc2VDb250
ZXh0UmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50KQogICAgICAgICBzZW5kRGlkTG9zZUNv
bnRleHRSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiB9CiAKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBtb25vdG9uaWNUaW1l
KQoreworICAgIGlmICghbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBib29sIGlzQ29udGludWluZyA9IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbi0+YW5p
bWF0ZShtb25vdG9uaWNUaW1lKTsKKyAgICBpZiAoaXNDb250aW51aW5nKQorICAgICAgICBtX2Ns
aWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICBlbHNlCisgICAgICAgIG1f
YWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5jbGVhcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZGMwNWRhODM0YTQ3
NGYyYTAzMDY4NTU1ODY4YzE0ZTgwMzJhY2M0Ny4uM2JiN2QzZGUxNDEzNmVkYmJjOWYxOWVkZjg1
MDQ3MjQzZGZiYmFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAt
MzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQWN0aXZlR2Vz
dHVyZUFuaW1hdGlvbjsKIGNsYXNzIENDQ29tcGxldGlvbkV2ZW50OwogY2xhc3MgQ0NQYWdlU2Nh
bGVBbmltYXRpb247CiBjbGFzcyBDQ0xheWVySW1wbDsKQEAgLTcyLDYgKzczLDkgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQsIGNvbnN0IEludFBv
aW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBpbmNoR2VzdHVyZUVuZCgpOwogICAgIHZpcnR1YWwg
dm9pZCBzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlv
biwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lLCBk
b3VibGUgZHVyYXRpb24pOworICAgIHZpcnR1YWwgQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKiBh
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uKCkgeyByZXR1cm4gbV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9u
LmdldCgpOyB9CisgICAgLy8gVG8gY2xlYXIgYW4gYWN0aXZlIGFuaW1hdGlvbiwgcGFzcyBudWxs
cHRyLgorICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKFBhc3NPd25Q
dHI8Q0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uPik7CiAKICAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0
aW5nLgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwpAQCAtMTM1LDYgKzEzOSw3IEBA
IHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmLCBD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CiAKICAgICB2b2lkIGFuaW1hdGVQYWdlU2NhbGUo
ZG91YmxlIG1vbm90b25pY1RpbWUpOworICAgIHZvaWQgYW5pbWF0ZUdlc3R1cmVzKGRvdWJsZSBt
b25vdG9uaWNUaW1lKTsKIAogICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1RpbWUsIGRvdWJsZSB3YWxsQ2xv
Y2tUaW1lKTsKQEAgLTE3OCw2ICsxODMsNyBAQCBwcml2YXRlOgogICAgIEludFBvaW50IG1fcHJl
dmlvdXNQaW5jaEFuY2hvcjsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9w
YWdlU2NhbGVBbmltYXRpb247CisgICAgT3duUHRyPENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4g
bV9hY3RpdmVHZXN0dXJlQW5pbWF0aW9uOwogCiAgICAgLy8gVGhpcyBpcyB1c2VkIGZvciB0aWNr
aW5nIGFuaW1hdGlvbnMgc2xvd2x5IHdoZW4gaGlkZGVuLgogICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsVGltZVNvdXJjZUFkYXB0ZXI+IG1fdGltZVNvdXJjZUNsaWVudEFkYXB0ZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgKaW5kZXggZTQy
ZTQ1MTM0YWUyODY0ZjhhZWQ3NTVlNmY1OGUzMjc3ZDMzOWIyZS4uMzhmZmZiODhmNGUzY2QyMjY0
MGQ0ZDYzNDljNDY5NjExODA5YzZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklucHV0RXZlbnQuaApAQCAtMTk3LDYgKzE5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHx8IHR5cGUgPT0gR2VzdHVyZVNjcm9sbFVwZGF0ZQogICAgICAgICAgICAgfHwgdHlwZSA9
PSBHZXN0dXJlRmxpbmdTdGFydAogICAgICAgICAgICAgfHwgdHlwZSA9PSBHZXN0dXJlRmxpbmdD
YW5jZWwKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gR2VzdHVyZVRhcERvd24KICAgICAgICAgICAg
IHx8IHR5cGUgPT0gR2VzdHVyZVRhcDsgLy8gRklYTUU6IFdoeSBpcyBHZXN0dXJlVGFwIG9uIHRo
aXMgbGlzdD8KICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCmluZGV4IGMyZGJlZTNi
NDcyZGY2NjYxNmY0MjE1ODZjYjVmYjcwNzc3ZDYyZTIuLmJmOGZmOTQxZDRlZmViNmQwOWM4ODg4
NWU3OTBmN2QyMGJkMDg5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKQEAgLTI3LDEyICsy
NywxNSBAQAogCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaCIKIAor
I2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSAiVG91Y2hG
bGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvckltcGwu
aCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgInBsYXRm
b3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVy
ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0
aXZlcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ0LDYgKzQ3LDM2IEBAIFBh
c3NPd25QdHI8Q0NJbnB1dEhhbmRsZXI+IENDSW5wdXRIYW5kbGVyOjpjcmVhdGUoQ0NJbnB1dEhh
bmRsZXJDbGllbnQqIGlucHV0SGFuCiAgICAgcmV0dXJuIFdlYktpdDo6V2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGw6OmNyZWF0ZShpbnB1dEhhbmRsZXJDbGllbnQpOwogfQogCitjbGFzcyBQ
bGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVyZUFkYXB0ZXIgOiBwdWJsaWMgQ0NHZXN0dXJlQ3VydmUs
IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NHZXN0dXJlQ3VydmU+IGNyZWF0ZShQYXNzT3duUHRyPFBsYXRmb3JtR2Vz
dHVyZUN1cnZlPiBwbGF0Zm9ybUN1cnZlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBQbGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVyZUFkYXB0ZXIocGxhdGZvcm1DdXJ2ZSkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBhcHBseShkb3VibGUgdGltZSwgQ0NHZXN0dXJlQ3Vy
dmVUYXJnZXQqIHRhcmdldCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0YXJnZXQpOworICAgICAg
ICBtX3RhcmdldCA9IHRhcmdldDsKKyAgICAgICAgcmV0dXJuIG1fY3VydmUtPmFwcGx5KHRpbWUs
IHRoaXMpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRQb2lu
dCYgc2Nyb2xsRGVsdGEpCisgICAgeworICAgICAgICBBU1NFUlQobV90YXJnZXQpOworICAgICAg
ICBtX3RhcmdldC0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBQbGF0Zm9ybUdlc3R1cmVUb0NDR2VzdHVyZUFkYXB0ZXIoUGFzc093blB0cjxQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZT4gY3VydmUpCisgICAgICAgIDogbV9jdXJ2ZShjdXJ2ZSkKKyAgICB7CisgICAg
fQorCisgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBtX2N1cnZlOworICAgIENDR2Vz
dHVyZUN1cnZlVGFyZ2V0KiBtX3RhcmdldDsKK307CisKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC0xMjYsNiArMTU5LDcgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6
aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKICAgICAgICAgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXR1cyBzY3JvbGxTdGF0dXMgPSBtX2lucHV0SGFu
ZGxlckNsaWVudC0+c2Nyb2xsQmVnaW4oSW50UG9pbnQod2hlZWxFdmVudC54LCB3aGVlbEV2ZW50
LnkpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpOwogICAgICAgICBzd2l0Y2ggKHNjcm9s
bFN0YXR1cykgewogICAgICAgICBjYXNlIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGFy
dGVkOgorICAgICAgICAgICAgLy8gRklYTUU6IHVzZSBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmUgaGVyZSB0byBnZXQgc21vb3RoIHdoZWVsIHNjcm9sbGluZz8KICAgICAgICAgICAgIG1f
aW5wdXRIYW5kbGVyQ2xpZW50LT5zY3JvbGxCeShJbnRTaXplKC13aGVlbEV2ZW50LmRlbHRhWCwg
LXdoZWVsRXZlbnQuZGVsdGFZKSk7CiAgICAgICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+
c2Nyb2xsRW5kKCk7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgp
OwpAQCAtMTcwLDkgKzIwNCwxMSBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBs
OjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogI2VuZGlmCiAg
ICAgICAgIGlmIChtX3Njcm9sbFN0YXJ0ZWQpIHsKICAgICAgICAgICAgIG1faW5wdXRIYW5kbGVy
Q2xpZW50LT5zY3JvbGxFbmQoKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1
dEV2ZW50KCk7CiAgICAgICAgICAgICBtX3Njcm9sbFN0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBnZXN0dXJl
RXZlbnQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2ZW50Kj4oJmV2ZW50KTsKKyAg
ICAgICAgICAgIGlmIChoYW5kbGVHZXN0dXJlRmxpbmcoZ2VzdHVyZUV2ZW50KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0g
V2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoQmVnaW4pIHsKICAgICAgICAgQVNTRVJUKCFtX2V4
cGVjdFBpbmNoVXBkYXRlRW5kKTsKQEAgLTE5NiwxMCArMjMyLDQ0IEBAIHZvaWQgV2ViQ29tcG9z
aXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVu
dCYgZXZlbnQpCiAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1cmVVcGRh
dGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgSW50UG9pbnQoZ2VzdHVyZUV2ZW50LngsIGdlc3R1cmVF
dmVudC55KSk7CiAgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6
R2VzdHVyZVRhcERvd24pIHsKKyAgICAgICAgaWYgKG1faW5wdXRIYW5kbGVyQ2xpZW50LT5hY3Rp
dmVHZXN0dXJlQW5pbWF0aW9uKCkpIHsKKyAgICAgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50
LT5zZXRBY3RpdmVHZXN0dXJlQW5pbWF0aW9uKG51bGxwdHIpOworICAgICAgICAgICAgbV9jbGll
bnQtPmRpZEhhbmRsZUlucHV0RXZlbnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogICAgIH0KKwogICAgIG1fY2xpZW50LT5kaWROb3RIYW5kbGVJbnB1dEV2ZW50KHRydWUgLyog
c2VuZFRvV2lkZ2V0ICovKTsKIH0KIAorYm9vbCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1w
bDo6aGFuZGxlR2VzdHVyZUZsaW5nKGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50
KQoreworICAgIC8vIEdlc3R1cmVTY3JvbGxFbmQgd2l0aCBub24temVybyB2ZWxvY2l0eSAoZGVs
dGFYL1kpIHNpZ25hbHMgc3RhcnQgb2YgRmxpbmcuCisgICAgaWYgKCFnZXN0dXJlRXZlbnQuZGVs
dGFYICYmICFnZXN0dXJlRXZlbnQuZGVsdGFZKSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRIYW5k
bGVJbnB1dEV2ZW50KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIENDSW5w
dXRIYW5kbGVyQ2xpZW50OjpTY3JvbGxTdGF0dXMgc2Nyb2xsU3RhdHVzID0gbV9pbnB1dEhhbmRs
ZXJDbGllbnQtPnNjcm9sbEJlZ2luKEludFBvaW50KGdlc3R1cmVFdmVudC54LCBnZXN0dXJlRXZl
bnQueSksIENDSW5wdXRIYW5kbGVyQ2xpZW50OjpHZXN0dXJlKTsKKyAgICBzd2l0Y2ggKHNjcm9s
bFN0YXR1cykgeworICAgIGNhc2UgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQ6
IHsKKyAgICAgICAgT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBmbGluZ0N1cnZlID0gVG91
Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludChnZXN0dXJlRXZl
bnQuZGVsdGFYLCBnZXN0dXJlRXZlbnQuZGVsdGFZKSk7CisgICAgICAgIE93blB0cjxDQ0FjdGl2
ZUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9IENDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbjo6
Y3JlYXRlKFBsYXRmb3JtR2VzdHVyZVRvQ0NHZXN0dXJlQWRhcHRlcjo6Y3JlYXRlKGZsaW5nQ3Vy
dmUucmVsZWFzZSgpKSwgdGhpcyk7CisgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5zZXRB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBtX2Ns
aWVudC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6U2Nyb2xsSWdub3JlZDoKKyAgICAgICAg
bV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQoZmFsc2UgLyogc2VuZFRvV2lkZ2V0ICov
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDQ0lucHV0SGFuZGxlckNsaWVudDo6
U2Nyb2xsRmFpbGVkOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGludCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6aWRlbnRpZmllcigpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKQEAgLTIxMCw0ICsy
ODAsMTAgQEAgdm9pZCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6d2lsbERyYXcoZG91
YmxlIG1vbm90b25pY1RpbWUpCiB7CiB9CiAKK3ZvaWQgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxl
ckltcGw6OnNjcm9sbEJ5KGNvbnN0IEludFBvaW50JiBpbmNyZW1lbnQpCit7CisgICAgaWYgKG1f
aW5wdXRIYW5kbGVyQ2xpZW50KQorICAgICAgICBtX2lucHV0SGFuZGxlckNsaWVudC0+c2Nyb2xs
QnkodG9TaXplKGluY3JlbWVudCkpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaAppbmRleCA4
M2I0YmQ1NDYxYWMzNGE1MTZiY2VkZmVjNDI0ZWExZjRjYzMwNmI2Li44MjM5MGM2NDkwOTJhMzky
ZTE3NTFlMDQxNGQ1ZDFiMWI0NWVmNDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKQEAgLTI4LDYg
KzI4LDggQEAKIAogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgorI2luY2x1
ZGUgImNjL0NDR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpA
QCAtMzgsNiArNDAsNyBAQCBjbGFzcyBNdXRleDsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgQ0NHZXN0dXJlQ3VydmVUYXJnZXQ7CiBjbGFzcyBDQ0lucHV0SGFuZGxlckNsaWVudDsK
IGNsYXNzIENDVGhyZWFkOwogfQpAQCAtNDcsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IGNsYXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQ7CiAKIC8vIFRlbXBvcmFyaWx5
IHN1YmNsYXNzaW5nIGZyb20gV2ViQ29tcG9zaXRvciB3aGlsZSBkb3duc3RyZWFtIGNoYW5nZXMg
bGFuZC4KLWNsYXNzIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsIDogcHVibGljIFdlYkNv
bXBvc2l0b3IsIHB1YmxpYyBXZWJDb3JlOjpDQ0lucHV0SGFuZGxlciB7CitjbGFzcyBXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbCA6IHB1YmxpYyBXZWJDb21wb3NpdG9yLCBwdWJsaWMgV2Vi
Q29yZTo6Q0NJbnB1dEhhbmRsZXIsIHB1YmxpYyBXZWJDb3JlOjpDQ0dlc3R1cmVDdXJ2ZVRhcmdl
dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlcklt
cGwpOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsPiBjcmVhdGUoV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJDbGllbnQqKTsKQEAgLTYz
LDkgKzY2LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBpZGVudGlmaWVyKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKIAorICAg
IC8vIFdlYkNvcmU6OkNDR2VzdHVyZUN1cnZlVGFyZ2V0IGltcGxlbWVudGF0aW9uLgorICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworCiBwcml2YXRl
OgogICAgIGV4cGxpY2l0IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKFdlYkNvcmU6OkND
SW5wdXRIYW5kbGVyQ2xpZW50Kik7CiAKKyAgICBib29sIGhhbmRsZUdlc3R1cmVGbGluZyhjb25z
dCBXZWJHZXN0dXJlRXZlbnQmKTsKKwogICAgIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGll
bnQqIG1fY2xpZW50OwogICAgIGludCBtX2lkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6Q0NJbnB1
dEhhbmRsZXJDbGllbnQqIG1faW5wdXRIYW5kbGVyQ2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwCmlu
ZGV4IDc0Y2E1NzY2NzRhOTA0MzBiYTI3MjY5MDczNDhiZGVmZDIyYjZlZWMuLjg1MmNkMmU3OTc1
ZjM4MmEyYjA3MjY4ODBmODZmNzY0NDQyN2M5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAKQEAgLTQy
LDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIGNsYXNzIE1vY2tQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZVRhcmdldCA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCB7
CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbEluY3JlbWVudChjb25zdCBJbnRQ
b2ludCYgZGVsdGEpCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFBvaW50JiBk
ZWx0YSkKICAgICB7CiAgICAgICAgIG1fY3VtdWxhdGl2ZURlbHRhID0gbV9jdW11bGF0aXZlRGVs
dGEgKyBkZWx0YTsKICAgICB9CkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiBURVNUKFBsYXRm
b3JtR2VzdHVyZUN1cnZlLCBmbGluZ0N1cnZlKQogewogICAgIE1vY2tQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZVRhcmdldCB0YXJnZXQ7Ci0gICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1h
dGlvbj4gYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUo
MCwgV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgxMDAs
IDApKSwgJnRhcmdldCk7CisgICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlv
bj4gYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoV2hl
ZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoRmxvYXRQb2ludCgxMDAsIDApKSwg
JnRhcmdldCk7CiAKICAgICAvLyBOb3RlOiB0aGUgZXhwZWN0YXRpb25zIGJlbG93IGFyZSBkZXBl
bmRlbnQgb24gdGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQtY29kZWQgaW4gdGhlIFJheWxlaWdoCiAg
ICAgLy8gICAgICAgY3VydmUuIElmIHNpZ21hIGNoYW5nZXMsIHRoZXNlIHRlc3QgZXhwZWN0YXRp
b25zIHdpbGwgYWxzbyBjaGFuZ2UuCkBAIC02OSwyMyArNjksMjQgQEAgVEVTVChQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZSwgZmxpbmdDdXJ2ZSkKICAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5hbmlt
YXRlKDEwMDEpKTsKICAgICAvLyBTaW5jZSB0aGUgUmF5bGVpZ2ggQ0RGIG1heGVzIG91dCBhdCAx
LCB3ZSBleHBlY3QgdGhlIGN1bXVsYXRpdmUgc2Nyb2xsIGluY3JlbWVudHMgdG8KICAgICAvLyBt
YXRjaCB0aGUgaW5wdXQgdmVsb2NpdHkgcGFyYW1ldGVyLgotICAgIC8vIFNpbmNlIHdlIGNhbiBi
ZSBvZmYgYnkgKy8tMC41IG9uIGVhY2ggY29udmVyc2lvbiB0byBpbnQgZm9yIHNldFNjcm9sbElu
Y3JlbWVudCwKLSAgICAvLyBwaWNrIHRoZSAnbmVhcm5lc3MnIHRvIGJlIHdpdGhpbiB0aGUgbnVt
YmVyIG9mIHRpbWVzIGFuaW1hdGUgcmV0dXJucyB0cnVlLgogICAgIEVYUEVDVF9ORUFSKHRhcmdl
dC5jdW11bGF0aXZlRGVsdGEoKS54KCksIDEwMCwgMSk7CiAgICAgRVhQRUNUX0VRKHRhcmdldC5j
dW11bGF0aXZlRGVsdGEoKS55KCksIDApOwogCisgICAgLy8gVGVzdCBhbmltYXRpb24gd2hlbiBu
b3Qgc3RhcnRpbmcgYXQgdCA9IDAuCiAgICAgZG91YmxlIGJhc2VUaW1lID0gNDIuNDI7Ci0gICAg
YW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoYmFzZVRp
bWUsIFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoMTAw
LCAwKSksICZ0YXJnZXQpOworICAgIGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFu
aW1hdGlvbjo6Y3JlYXRlKFdoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZs
b2F0UG9pbnQoMTAwLCAwKSksICZ0YXJnZXQpOwogICAgIHRhcmdldC5yZXNldEN1bXVsYXRpdmVE
ZWx0YSgpOwogCiAgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKGJhc2VUaW1lICsg
MC4zNSkpOwogICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShiYXNlVGltZSArIDEu
MzUpKTsKLSAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5hbmltYXRlKGJhc2VUaW1lICsgMTAw
MCkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbi0+YW5pbWF0ZShiYXNlVGltZSArIDEwMDAp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9uLT5hbmltYXRlKGJhc2VUaW1lICsgMTAwMSkp
OwogICAgIEVYUEVDVF9ORUFSKHRhcmdldC5jdW11bGF0aXZlRGVsdGEoKS54KCksIDEwMCwgMSk7
CiAKLSAgICBhbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0
ZSgwLCBXaGVlbEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KDUw
LCAxNTApKSwgJnRhcmdldCk7CisgICAgYW5pbWF0aW9uID0gQWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uOjpjcmVhdGUoV2hlZWxGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUo
RmxvYXRQb2ludCg1MCwgMTUwKSksICZ0YXJnZXQpOwogICAgIHRhcmdldC5yZXNldEN1bXVsYXRp
dmVEZWx0YSgpOwogCisgICAgLy8gVGVzdCBhbmltYXRpb24gd2l0aCBib3RoIGhvcml6b250YWwg
YW5kIHZlcnRpY2FsIHNjcm9sbCB2ZWxvY2l0aWVzLgogICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlv
bi0+YW5pbWF0ZSgwKSk7CiAgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLT5hbmltYXRlKDAuMjUp
KTsKICAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1hdGUoMC40NSkpOwpAQCAtOTksNyAr
MTAwLDcgQEAgVEVTVChQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSwgZmxpbmdDdXJ2ZSkKIFRFU1QoUGxh
dGZvcm1HZXN0dXJlQ3VydmUsIGZsaW5nQ3VydmVUb3VjaCkKIHsKICAgICBNb2NrUGxhdGZvcm1H
ZXN0dXJlQ3VydmVUYXJnZXQgdGFyZ2V0OwotICAgIE93blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1
cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6
Y3JlYXRlKDAsIFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9p
bnQoMTAwMCwgMCkpLCAmdGFyZ2V0KTsKKyAgICBPd25QdHI8QWN0aXZlUGxhdGZvcm1HZXN0dXJl
QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNy
ZWF0ZShUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShGbG9hdFBvaW50KDEw
MDAsIDApKSwgJnRhcmdldCk7CiAKICAgICAvLyBOb3RlOiB0aGUgZXhwZWN0YXRpb25zIGJlbG93
IGFyZSBkZXBlbmRlbnQgb24gdGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQtY29kZWQgaW4gdGhlIFJh
eWxlaWdoCiAgICAgLy8gICAgICAgY3VydmUuIElmIHNpZ21hIGNoYW5nZXMsIHRoZXNlIHRlc3Qg
ZXhwZWN0YXRpb25zIHdpbGwgYWxzbyBjaGFuZ2UuCkBAIC0xMTAsOCArMTExLDYgQEAgVEVTVChQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZSwgZmxpbmdDdXJ2ZVRvdWNoKQogICAgIEVYUEVDVF9UUlVFKGFu
aW1hdGlvbi0+YW5pbWF0ZSgwLjkpKTsKICAgICBFWFBFQ1RfVFJVRShhbmltYXRpb24tPmFuaW1h
dGUoMTAwMCkpOwogICAgIEVYUEVDVF9GQUxTRShhbmltYXRpb24tPmFuaW1hdGUoMTAwMSkpOwot
ICAgIC8vIFNpbmNlIHdlIGNhbiBiZSBvZmYgYnkgKy8tMC41IG9uIGVhY2ggY29udmVyc2lvbiB0
byBpbnQgZm9yIHNldFNjcm9sbEluY3JlbWVudCwKLSAgICAvLyBwaWNrIHRoZSAnbmVhcm5lc3Mn
IHRvIGJlIHdpdGhpbiB0aGUgNSAqIG51bWJlciBvZiB0aW1lcyBhbmltYXRlIHJldHVybnMgdHJ1
ZS4KICAgICBFWFBFQ1RfTkVBUih0YXJnZXQuY3VtdWxhdGl2ZURlbHRhKCkueCgpLCAxMDAwLCAx
KTsKICAgICBFWFBFQ1RfRVEodGFyZ2V0LmN1bXVsYXRpdmVEZWx0YSgpLnkoKSwgMCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1
dEhhbmRsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNv
bXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAKaW5kZXggNDU5MjU1ZTAyYTI4MzMxOWRm
YjVlOTI5YThkOGY1ZDk5MzVhNDQ0ZC4uNGIxNDYzNmZhN2UwNjAzNTQ1NjU0NzQ1ZmY0ZGE5MGM4
OTA3ZGU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJDb21wb3Np
dG9ySW5wdXRIYW5kbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgorI2lu
Y2x1ZGUgImNjL0NDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDSW5w
dXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogCkBAIC00
OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3BpbmNoU3RhcnRlZChmYWxzZSkKICAg
ICAgICAgLCBtX3BpbmNoRW5kZWQoZmFsc2UpCiAgICAgICAgICwgbV9waW5jaE1hZ25pZmljYXRp
b24oMCkKKyAgICAgICAgLCBtX3Njcm9sbEJ5Q2FsbGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAg
ICAgdmlydHVhbCB+TW9ja0lucHV0SGFuZGxlckNsaWVudCgpIHsgfQpAQCAtNTgsMjAgKzYwLDI0
IEBAIHB1YmxpYzoKICAgICBib29sIHBpbmNoU3RhcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGlu
Y2hTdGFydGVkOyB9CiAgICAgYm9vbCBwaW5jaEVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9waW5j
aEVuZGVkOyB9CiAgICAgZmxvYXQgcGluY2hNYWdpbmlmY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9waW5jaE1hZ25pZmljYXRpb247IH0KKyAgICBib29sIHNjcm9sbEJ5Q2FsbGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxCeUNhbGxlZDsgfQogCiAgICAgdm9pZCByZXNldFBpbmNoKCkKICAg
ICB7Ci0gICAgICAgIG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0gZmFsc2U7CisgICAg
ICAgIG1fcGluY2hTdGFydGVkID0gbV9waW5jaEVuZGVkID0gbV9zY3JvbGxCeUNhbGxlZCA9IGZh
bHNlOwogICAgICAgICBtX3BpbmNoTWFnbmlmaWNhdGlvbiA9IDA7CiAgICAgfQogCisgICAgdmly
dHVhbCBXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24qIGFjdGl2ZUdlc3R1cmVBbmlt
YXRpb24oKSB7IHJldHVybiBtX2FjdGl2ZUdlc3R1cmVBbmltYXRpb24uZ2V0KCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QWN0aXZlR2VzdHVyZUFuaW1hdGlvbihQYXNzT3duUHRyPFdlYkNvcmU6
OkNDQWN0aXZlR2VzdHVyZUFuaW1hdGlvbj4gYW5pbWF0aW9uKSB7IG1fYWN0aXZlR2VzdHVyZUFu
aW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgU2Nyb2xsU3RhdHVzIHNjcm9s
bEJlZ2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q0NJbnB1dEhhbmRsZXJD
bGllbnQ6OlNjcm9sbElucHV0VHlwZSkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVybiBt
X3Njcm9sbFN0YXR1czsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnko
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIE9WRVJSSURFIHsgbV9zY3JvbGxCeUNhbGxlZCA9IHRy
dWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsRW5kKCkgT1ZFUlJJREUgeyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlQmVnaW4oKSBPVkVSUklERQpAQCAtOTYsNiArMTAyLDkg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fcGluY2hTdGFydGVkOwogICAgIGJvb2wgbV9waW5jaEVu
ZGVkOwogICAgIGZsb2F0IG1fcGluY2hNYWduaWZpY2F0aW9uOworICAgIGJvb2wgbV9zY3JvbGxC
eUNhbGxlZDsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUdlc3R1cmVBbmltYXRpb24+
IG1fYWN0aXZlR2VzdHVyZUFuaW1hdGlvbjsKIH07CiAKIGNsYXNzIE1vY2tXZWJDb21wb3NpdG9y
SW5wdXRIYW5kbGVyQ2xpZW50IDogcHVibGljIFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFu
ZGxlckNsaWVudCB7CkBAIC0yODAsNCArMjg5LDUyIEBAIFRFU1QoV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGwsIGdlc3R1cmVQaW5jaCkKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNo
dXRkb3duKCk7CiB9CiAKK1RFU1QoV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwsIGdlc3R1
cmVGbGluZykKK3sKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisK
KyAgICAvLyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIEFQSXMgY2FuIG9ubHkgYmUgY2FsbGVk
IGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgIFdlYkNvcmU6OkRlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBhbHdheXNJbXBsVGhyZWFkOworCisgICAgTW9ja0lucHV0SGFuZGxlckNsaWVu
dCBtb2NrSW5wdXRIYW5kbGVyOworICAgIE93blB0cjxXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVy
SW1wbD4gaW5wdXRIYW5kbGVyID0gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmNyZWF0
ZSgmbW9ja0lucHV0SGFuZGxlcik7CisgICAgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJD
bGllbnQgbW9ja0NsaWVudDsKKyAgICBpbnB1dEhhbmRsZXItPnNldENsaWVudCgmbW9ja0NsaWVu
dCk7CisKKyAgICBXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCBnZXN0dXJlOworCisgICAgLy8gTmVl
ZCBzY3JvbGxCZWdpbiBiZWZvcmUgc2VuZGluZyBhIHNjcm9sbEVuZCBldmVudC4KKyAgICBnZXN0
dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjsKKyAg
ICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CisgICAgRVhQRUNUX1RS
VUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOworICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNl
bmRUb1dpZGdldCgpKTsKKyAgICBtb2NrQ2xpZW50LnJlc2V0KCk7CisKKyAgICBnZXN0dXJlLnR5
cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ7CisgICAgZ2VzdHVy
ZS5kZWx0YVggPSAyOworICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChnZXN0dXJl
KTsKKyAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOworICAgIEFTU0VSVF9UUlVFKG1vY2tJbnB1
dEhhbmRsZXIuYWN0aXZlR2VzdHVyZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRkFMU0UobW9j
a0lucHV0SGFuZGxlci5zY3JvbGxCeUNhbGxlZCgpKTsKKyAgICBtb2NrSW5wdXRIYW5kbGVyLmFj
dGl2ZUdlc3R1cmVBbmltYXRpb24oKS0+YW5pbWF0ZSgwLjAwMSk7CisgICAgRVhQRUNUX1RSVUUo
bW9ja0lucHV0SGFuZGxlci5zY3JvbGxCeUNhbGxlZCgpKTsKKyAgICBtb2NrQ2xpZW50LnJlc2V0
KCk7CisKKyAgICAvLyBWZXJpZnkgdGhhdCBhIEdlc3R1cmVUYXBEb3duIGR1cmluZyBhbiBhbmlt
YXRpb24gY2FuY2VscyBpdC4KKyAgICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZl
bnQ6Okdlc3R1cmVUYXBEb3duOworICAgIGlucHV0SGFuZGxlci0+aGFuZGxlSW5wdXRFdmVudChn
ZXN0dXJlKTsKKyAgICBFWFBFQ1RfRkFMU0UobW9ja0lucHV0SGFuZGxlci5hY3RpdmVHZXN0dXJl
QW5pbWF0aW9uKCkpOworICAgIG1vY2tDbGllbnQucmVzZXQoKTsKKworICAgIC8vIFZlcmlmeSB0
aGF0IGEgR2VzdHVyZVRhcERvd24gd2hlbiBubyBhbmltYXRpb24gaXMgYWN0aXZlIGlzIG5vdCBo
YW5kbGVkLgorICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVy
ZVRhcERvd247CisgICAgaW5wdXRIYW5kbGVyLT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOwor
ICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LmhhbmRsZWQoKSk7CisgICAgRVhQRUNUX1RSVUUo
bW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7CisKKyAgICBpbnB1dEhhbmRsZXItPnNldENsaWVu
dCgwKTsKKyAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Cit9CisKIH0K
</data>
<flag name="review"
          id="135425"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="135427"
          type_id="3"
          status="+"
          setter="wjmaclean"
    />
          </attachment>
      

    </bug>

</bugzilla>