<?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>141973</bug_id>
          
          <creation_ts>2015-02-24 09:52:22 -0800</creation_ts>
          <short_desc>Scroll Snap Points are not supported on the main frame</short_desc>
          <delta_ts>2015-03-03 20:57:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>142102</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bdakin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jamesr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1071694</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-24 09:52:22 -0800</bug_when>
    <thetext>We should be able to support Scroll Snap Points on the main frame, and stay within our fast scrolling thread while doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071695</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-02-24 09:52:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/19938393&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071846</commentid>
    <comment_count>2</comment_count>
      <attachid>247280</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-24 17:03:03 -0800</bug_when>
    <thetext>Created attachment 247280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071847</commentid>
    <comment_count>3</comment_count>
      <attachid>247281</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-24 17:03:56 -0800</bug_when>
    <thetext>Created attachment 247281
Example horizontal main-frame scroll snap points</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071848</commentid>
    <comment_count>4</comment_count>
      <attachid>247282</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-24 17:04:26 -0800</bug_when>
    <thetext>Created attachment 247282
Example vertical main-frame scroll snap points</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071849</commentid>
    <comment_count>5</comment_count>
      <attachid>247283</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-24 17:07:23 -0800</bug_when>
    <thetext>Created attachment 247283
Example overflow scroll snap points</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071850</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-24 17:07:48 -0800</bug_when>
    <thetext>Attached a set of manual tests for this code. Full-fledged snap point tests will be part of a future update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071856</commentid>
    <comment_count>7</comment_count>
      <attachid>247280</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-02-24 17:23:19 -0800</bug_when>
    <thetext>Comment on attachment 247280
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Implement the AxisScrollAnimatorClient interface.

I would like a summary of what you changed.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:46
&gt; +#if !ENABLE(CSS_SCROLL_SNAP)
&gt; +class AxisScrollSnapAnimatorClient { };
&gt; +#endif

This is a bit odd. You can just wrap the class declaration and surround the public AxisScrollSnapAnimatorClient with the #ifdefs.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:109
&gt; +    RetainPtr&lt;CFRunLoopTimerRef&gt; m_horizontalScrollSnapTimer;
&gt; +    RetainPtr&lt;CFRunLoopTimerRef&gt; m_verticalScrollSnapTimer;

You should use a std::unique_ptr&lt;Timer&gt; like ScrollAnimator does.

Is there a reason the AxisScrollSnapAnimator doesn&apos;t manage the timer?

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:87
&gt; +static inline Vector&lt;LayoutUnit&gt; convertFloatToLayoutUnits(const Vector&lt;float&gt;&amp; snapOffsetsAsFloat)
&gt; +{
&gt; +    Vector&lt;LayoutUnit&gt; snapOffsets;
&gt; +    snapOffsets.reserveInitialCapacity(snapOffsetsAsFloat.size());
&gt; +    for (size_t i = 0; i &lt; snapOffsetsAsFloat.size(); ++i)
&gt; +        snapOffsets.append(LayoutUnit(snapOffsetsAsFloat[i]));
&gt; +    
&gt; +    return snapOffsets;
&gt; +}
&gt; +#endif

I&apos;m not sure we need to do this conversion. We should just treat scroll offsets as floats on the scrolling thread.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:143
&gt; +        m_horizontalScrollSnapAnimator = std::make_unique&lt;AxisScrollSnapAnimator&gt;(this, convertFloatToLayoutUnits(scrollingStateNode.horizontalSnapOffsets()), ScrollEventAxis::Horizontal);

Is there a reason we have to make a new animator when the offsets change? Won&apos;t that destroy snapping state if we commit a scrolling tree while animating to a snap point is in progress?

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:182
&gt; +    virtual void immediateScrollInAxis(ScrollEventAxis, float delta) override;

I think &quot;OnAxis&quot; makes more sense than &quot;InAxis&quot;.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:184
&gt; +    virtual LayoutUnit scrollOffsetInAxis(ScrollEventAxis) override;

Why can&apos;t it just get the scrollOffset as a point or size, then choose the axis itself?

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:186
&gt; +    virtual void startScrollSnapTimer(ScrollEventAxis) override;
&gt; +    virtual void stopScrollSnapTimer(ScrollEventAxis) override;

Manage the timer itself?

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:187
&gt; +    virtual void updateScrollAnimatorsAndTimers() override;

Pretty vague for a client message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071860</commentid>
    <comment_count>8</comment_count>
      <attachid>247280</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-02-24 17:42:18 -0800</bug_when>
    <thetext>Comment on attachment 247280
Patch

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

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:82
&gt; +    // Trivial wrappers around the actual update loop in AxisScrollSnapAnimator, since WebCore Timer requires a Timer argument.

This comment doesn&apos;t seem correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071883</commentid>
    <comment_count>9</comment_count>
      <attachid>247280</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-24 18:58:51 -0800</bug_when>
    <thetext>Comment on attachment 247280
Patch

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

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:48
&gt; +class ScrollingTreeFrameScrollingNodeMac : public ScrollingTreeFrameScrollingNode, private ScrollControllerClient, public AxisScrollSnapAnimatorClient  {

Can this be private inheritance instead of public?

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:80
&gt; +    virtual LayoutUnit scrollOffsetInAxis(ScrollEventAxis) override;
&gt; +    virtual void immediateScrollInAxis(ScrollEventAxis, float velocity) override;
&gt; +    virtual void startScrollSnapTimer(ScrollEventAxis) override;
&gt; +    virtual void stopScrollSnapTimer(ScrollEventAxis) override;

Aren’t we moving to just “override” rather than virtual plus override?

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:78
&gt; +static inline Vector&lt;LayoutUnit&gt; convertFloatToLayoutUnits(const Vector&lt;float&gt;&amp; snapOffsetsAsFloat)

If we do need to keep this function, we don’t need to mention “float” in the function name.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:83
&gt; +    for (size_t i = 0; i &lt; snapOffsetsAsFloat.size(); ++i)
&gt; +        snapOffsets.append(LayoutUnit(snapOffsetsAsFloat[i]));

If we keep this function, we should use a modern for loop rather than an old-style one.

Also, can we omit the explicit cast to LayoutUnit?

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:85
&gt; +    return snapOffsets;

Might be able to just write:

    return Vector&lt;LayoutUnit&gt;(snapOffsetsAsFloat.begin(), snapOffsetsAsFloat.end());

Or maybe that won’t work.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:61
&gt; +class ScrollAnimatorMac : public ScrollAnimator, private ScrollControllerClient, public AxisScrollSnapAnimatorClient {

Can this be private inheritance?

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:1481
&gt; +    if (scrollSnapTimer &amp;&amp; scrollSnapTimer-&gt;isActive())
&gt; +        scrollSnapTimer-&gt;stop();

Is the check for isActive an important optimization here? Not sure why we have a pattern of checking isActive before calling stop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071887</commentid>
    <comment_count>10</comment_count>
      <attachid>247280</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-24 19:14:26 -0800</bug_when>
    <thetext>Comment on attachment 247280
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:46
&gt;&gt; +#endif
&gt; 
&gt; This is a bit odd. You can just wrap the class declaration and surround the public AxisScrollSnapAnimatorClient with the #ifdefs.

This is how Beth did it in her ScrollElasticityController (now ScrollController) class, and I thought it looked cleaner than doing the #ifdef thing around the class declaration.

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:48
&gt;&gt; +class ScrollingTreeFrameScrollingNodeMac : public ScrollingTreeFrameScrollingNode, private ScrollControllerClient, public AxisScrollSnapAnimatorClient  {
&gt; 
&gt; Can this be private inheritance instead of public?

No; I tried that first. The compiler complained when passing a ScrollingTreeFrameScrollingNodeMac* as a constructor argument for AxisScrollSnapAnimator (which wants an AxisScrollSnapAnimatorClient) due to the &apos;private&apos; inheritance. When I changed it to public it worked properly.

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:80
&gt;&gt; +    virtual void stopScrollSnapTimer(ScrollEventAxis) override;
&gt; 
&gt; Aren’t we moving to just “override” rather than virtual plus override?

I wasn&apos;t sure if that was agreed on or not. I&apos;m happy to switch to just override.

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:109
&gt;&gt; +    RetainPtr&lt;CFRunLoopTimerRef&gt; m_verticalScrollSnapTimer;
&gt; 
&gt; You should use a std::unique_ptr&lt;Timer&gt; like ScrollAnimator does.
&gt; 
&gt; Is there a reason the AxisScrollSnapAnimator doesn&apos;t manage the timer?

Because of threading differences, we have to use WebCore::Timer timers in our main thread scrolling logic, and we use CFRunLoopTimer in our scroll thread logic.

I could convert the main thread code to use CFRunLoopTimers, too, then put them all in AxisScrollSnapAnimator.

Eventually, all of this is getting moved to ScrollController so consolidating some of this now is probably a good idea.

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:85
&gt;&gt; +    return snapOffsets;
&gt; 
&gt; Might be able to just write:
&gt; 
&gt;     return Vector&lt;LayoutUnit&gt;(snapOffsetsAsFloat.begin(), snapOffsetsAsFloat.end());
&gt; 
&gt; Or maybe that won’t work.

I&apos;ll try it. But maybe I can do away with the whole thing...

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:87
&gt;&gt; +#endif
&gt; 
&gt; I&apos;m not sure we need to do this conversion. We should just treat scroll offsets as floats on the scrolling thread.

The AxisScrollSnapAnimator expects to work in LayoutUnits. I haven&apos;t dug to much into how that class works to see if this can be easily changed; I was just trying to honor the existing API.

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:143
&gt;&gt; +        m_horizontalScrollSnapAnimator = std::make_unique&lt;AxisScrollSnapAnimator&gt;(this, convertFloatToLayoutUnits(scrollingStateNode.horizontalSnapOffsets()), ScrollEventAxis::Horizontal);
&gt; 
&gt; Is there a reason we have to make a new animator when the offsets change? Won&apos;t that destroy snapping state if we commit a scrolling tree while animating to a snap point is in progress?

Wenson left a FIXME in the ScrollAnimator code about this. I think it will destroy snapping state, but if the snap points are changing I&apos;m not sure if that&apos;s such a problem. If the target snap points have changed from our current animation, it seems like we do want to tear it down and start over. But this obviously creates a visual discrepancy, which will probably look bad.

I need to write another test that plays with the snap points on-the-fly to see what happens.

&gt;&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:61
&gt;&gt; +class ScrollAnimatorMac : public ScrollAnimator, private ScrollControllerClient, public AxisScrollSnapAnimatorClient {
&gt; 
&gt; Can this be private inheritance?

I don&apos;t think so (see my above response to your earlier comment). But maybe the constructor for AxisScrollSnapAnimator is just doing something wrong, and it should work... I&apos;ll ask Anders about this tomorrow.

&gt;&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:82
&gt;&gt; +    // Trivial wrappers around the actual update loop in AxisScrollSnapAnimator, since WebCore Timer requires a Timer argument.
&gt; 
&gt; This comment doesn&apos;t seem correct.

Yes. I&apos;ll get rid of this comment.

&gt;&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:182
&gt;&gt; +    virtual void immediateScrollInAxis(ScrollEventAxis, float delta) override;
&gt; 
&gt; I think &quot;OnAxis&quot; makes more sense than &quot;InAxis&quot;.

OK!

&gt;&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:184
&gt;&gt; +    virtual LayoutUnit scrollOffsetInAxis(ScrollEventAxis) override;
&gt; 
&gt; Why can&apos;t it just get the scrollOffset as a point or size, then choose the axis itself?

It probably could. I&apos;ll audit the callers of this method and see.

&gt;&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:186
&gt;&gt; +    virtual void stopScrollSnapTimer(ScrollEventAxis) override;
&gt; 
&gt; Manage the timer itself?

Ditto my above explanation for ScrollAnimatorMac.

&gt;&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:187
&gt;&gt; +    virtual void updateScrollAnimatorsAndTimers() override;
&gt; 
&gt; Pretty vague for a client message.

Yeah. But that&apos;s pretty much what it does... I&apos;ll see if I can come up with a better name.

&gt;&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:1481
&gt;&gt; +        scrollSnapTimer-&gt;stop();
&gt; 
&gt; Is the check for isActive an important optimization here? Not sure why we have a pattern of checking isActive before calling stop.

Hmm. I&apos;m not sure! I&apos;ll review the &apos;stop&apos; logic to see if there&apos;s any reason to worry about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071888</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-24 19:15:00 -0800</bug_when>
    <thetext>I&apos;ll revise this some more tomorrow and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072156</commentid>
    <comment_count>12</comment_count>
      <attachid>247280</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-25 15:18:07 -0800</bug_when>
    <thetext>Comment on attachment 247280
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:78
&gt;&gt; +static inline Vector&lt;LayoutUnit&gt; convertFloatToLayoutUnits(const Vector&lt;float&gt;&amp; snapOffsetsAsFloat)
&gt; 
&gt; If we do need to keep this function, we don’t need to mention “float” in the function name.

OK!

&gt;&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:85
&gt;&gt;&gt; +    return snapOffsets;
&gt;&gt; 
&gt;&gt; Might be able to just write:
&gt;&gt; 
&gt;&gt;     return Vector&lt;LayoutUnit&gt;(snapOffsetsAsFloat.begin(), snapOffsetsAsFloat.end());
&gt;&gt; 
&gt;&gt; Or maybe that won’t work.
&gt; 
&gt; I&apos;ll try it. But maybe I can do away with the whole thing...

This didn&apos;t work (compiler did not agree this was valid).

&gt;&gt;&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.h:184
&gt;&gt;&gt; +    virtual LayoutUnit scrollOffsetInAxis(ScrollEventAxis) override;
&gt;&gt; 
&gt;&gt; Why can&apos;t it just get the scrollOffset as a point or size, then choose the axis itself?
&gt; 
&gt; It probably could. I&apos;ll audit the callers of this method and see.

I don&apos;t think it makes sense to return a point or size; Callers currently expect a float return value, and use it as part of calculations for scroll handling. I would have to modify the four or five places that call this with a new check for axis and retrieve the correct value (x or y) depending on axis.

Since this method basically encapsulates that logic, I think it&apos;s better as it stands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072175</commentid>
    <comment_count>13</comment_count>
      <attachid>247356</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-25 15:52:38 -0800</bug_when>
    <thetext>Created attachment 247356
Patch v2 (Revised based on comments)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072176</commentid>
    <comment_count>14</comment_count>
      <attachid>247356</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-25 15:57:13 -0800</bug_when>
    <thetext>Comment on attachment 247356
Patch v2 (Revised based on comments)

The code is moving from ScrollAnimator down to ScrollAnimatorMac because it is only currently used on the Mac port. I wanted to consolidate the code in one place before moving it to ScrollController in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072584</commentid>
    <comment_count>15</comment_count>
      <attachid>247476</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-26 17:47:08 -0800</bug_when>
    <thetext>Created attachment 247476
Patch - Updated from earlier review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072585</commentid>
    <comment_count>16</comment_count>
      <attachid>247476</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-26 17:48:55 -0800</bug_when>
    <thetext>Comment on attachment 247476
Patch - Updated from earlier review comments.

Note: I still would like to move the snap implementation down to ScrollAnimatorMac as a prior step to moving it into ScrollController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073607</commentid>
    <comment_count>17</comment_count>
      <attachid>247744</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-02 20:28:19 -0800</bug_when>
    <thetext>Created attachment 247744
Updated patch after refactoring in Bug 142102.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073902</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-03 17:41:05 -0800</bug_when>
    <thetext>*** Bug 135967 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073909</commentid>
    <comment_count>19</comment_count>
      <attachid>247822</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-03 18:11:17 -0800</bug_when>
    <thetext>Created attachment 247822
Patch v5. Updated after refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073948</commentid>
    <comment_count>20</comment_count>
      <attachid>247822</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-03-03 20:44:58 -0800</bug_when>
    <thetext>Comment on attachment 247822
Patch v5. Updated after refactoring.

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        so that these values can be used on the main and scrolling threads. Simply storing a pointer to a set of snap points will not
&gt; +        work on the scrolling thread.

I think would be better written as &quot;we have to make a copy of the snap points vector to send to the scrolling thread&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073953</commentid>
    <comment_count>21</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-03 20:55:52 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Comment on attachment 247822 [details]
&gt; Patch v5. Updated after refactoring.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=247822&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        so that these values can be used on the main and scrolling threads. Simply storing a pointer to a set of snap points will not
&gt; &gt; +        work on the scrolling thread.
&gt; 
&gt; I think would be better written as &quot;we have to make a copy of the snap
&gt; points vector to send to the scrolling thread&quot;.

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073954</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-03 20:57:05 -0800</bug_when>
    <thetext>Committed r180987: &lt;http://trac.webkit.org/changeset/180987&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247280</attachid>
            <date>2015-02-24 17:03:03 -0800</date>
            <delta_ts>2015-02-25 15:52:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141973-20150224170251.patch</filename>
            <type>text/plain</type>
            <size>32102</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDU5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE1LTAyLTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNjcm9sbCBzbmFwIHBvaW50
cyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGUgbWFpbiBmcmFtZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxOTczCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xOTkzODM5Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlTWFjLmg6IEltcGxlbWVudCB0aGUgQXhpc1Njcm9sbEFuaW1hdG9yQ2xpZW50IGludGVyZmFj
ZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWM6On5TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjKTogTWFrZSBz
dXJlIHRoZSBzY3JvbGwgc25hcAorICAgICAgICBwb2ludCB0aW1lcnMgYXJlIGNsZWFuZWQgdXAu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RmxvYXRUb0xheW91dFVuaXRzKTogQWRkZWQgaGVs
cGVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYzo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOiBSZWNvZ25pemUgYW5kIHJlYWN0IHRv
IGNoYW5nZXMgdG8KKyAgICAgICAgU2Nyb2xsIFNuYXAgUG9pbnRzIG9uIHRvcC1sZXZlbCBmcmFt
ZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
OjpoYW5kbGVXaGVlbEV2ZW50KTogUGVyZm9ybSBTY3JvbGwgU25hcCBQb2ludCBmdW5jdGlvbnMg
bmVlZGVkCisgICAgICAgIGR1cmluZyB3aGVlbCBldmVudHMuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxPZmZzZXRJbkF4aXMpOiBJ
bXBsZW1lbnQgZGVsZWdhdGUgbWV0aG9kIG5lZWRlZCBieSB0aGUKKyAgICAgICAgQXhpc1Njcm9s
bEFuaW1hdG9yQ2xpZW50IGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmltbWVkaWF0ZVNjcm9sbEluQXhpcyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c3Rh
cnRTY3JvbGxTbmFwVGltZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BTY3JvbGxTbmFwVGltZXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9s
bFNuYXBUaW1lckZpcmVkKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuY3BwOiBNb3ZlIFNjcm9sbCBTbmFwIFBvaW50IGNvZGUgZG93biB0byB0aGUgU2Nyb2xsQW5p
bWF0b3JNYWMgbGV2ZWwsIHNpbmNlIGl0IGlzIG5vdAorICAgICAgICB1c2VkIGJ5IG90aGVyIHBv
cnRzIChpbmNsdWRpbmcgaU9TISkKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpo
YW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsT2Zmc2V0SW5BeGlzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjppbW1lZGlhdGVTY3Jv
bGxJbkF4aXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnN0
YXJ0U2Nyb2xsU25hcFRpbWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yOjpzdG9wU2Nyb2xsU25hcFRpbWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yOjpob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnZlcnRpY2FsU2Nyb2xsU25hcFRp
bWVyRmlyZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6dXBkYXRlU2Nyb2xsQW5pbWF0b3Jz
QW5kVGltZXJzKTogQWRkIHN0dWIgaW1wbGVtZW50YXRpb25zIGZvciBub24tTWFjIHBvcnRzLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Ny
b2xsU25hcCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFu
aW1hdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3Iu
bW06CisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yKTogU3RvcmUgdGhlIFZlY3RvciBvZiBMYXlvdXRVbml0cyBhcyBhIHZhbHVl
IHNpbmNlIGl0CisgICAgICAgIHdpbGwgYmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSB0aHJlYWRz
LgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6c2Nyb2xsU25hcEFu
aW1hdGlvblVwZGF0ZSk6IEhhbmRsZSBlZGdlIGNhc2Ugb2YgZGVzdGluYXRpb24gYmVpbmcgcmVh
Y2hlZCB3aGlsZQorICAgICAgICBhbmltYXRpb24gZXZlbnRzIGFyZSBzdGlsbCBoYXBwZW5pbmcu
CisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNjcm9sbFNu
YXBBbmltYXRpb24pOiBQcm90ZWN0IGFnYWluc3QgZW1wdHkgc25hcCBwb2ludCBjYXNlIEkgZW5j
b3VudGVyZWQKKyAgICAgICAgZHVyaW5nIGRldmVsb3BtZW50LgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbTogTW92ZSBpbXBsZW1lbnRhdGlvbiBmcm9tIFNjcm9sbEFuaW1hdG9yIGJh
c2UgY2xhc3Mgc2luY2UgaXQgaXMgb25seSB1c2VkCisgICAgICAgIGJ5IHRoZSBNYWMgcG9ydC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpwcm9jZXNzV2hlZWxFdmVudEZv
clNjcm9sbFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRs
ZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0
ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvck1hYzo6c2Nyb2xsT2Zmc2V0SW5BeGlzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxJbkF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yTWFjOjpzdG9wU2Nyb2xsU25hcFRpbWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnZlcnRpY2FsU2Nyb2xsU25hcFRp
bWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbTog
UmVtb3ZlIHVubmVlZGVkIGhlYWRlciBpbmNsdWRlLgorCiAyMDE1LTAyLTI0ICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBbaW9zIE1lZGlhXSB0aGUgaW5saW5lIGNv
bnRyb2xzIGFyZSB2aXNpYmxlIGFmdGVyIHByZXNzaW5nIERvbmUgb24gaVBob25lCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgJKHJldmlzaW9uIDE4MDU2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTEgKzMzLDE5IEBA
CiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW5jbHVk
ZSAiQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIgorI2VuZGlmCisKIE9CSkNfQ0xBU1MgQ0FMYXll
cjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlTWFjIDogcHVibGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUsIHBy
aXZhdGUgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7CisjaWYgIUVOQUJMRShDU1NfU0NST0xMX1NO
QVApCitjbGFzcyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50IHsgfTsKKyNlbmRpZgorCitj
bGFzcyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjIDogcHVibGljIFNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGUsIHByaXZhdGUgU2Nyb2xsQ29udHJvbGxlckNsaWVudCwg
cHVibGljIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQgIHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlPiBjcmVhdGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CiAgICAgdmlydHVh
bCB+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYygpOwpAQCAtNjUsNiArNzMsMTUg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lm
TmVjZXNzYXJ5KCkgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsSW5BeGlzKFNjcm9sbEV2
ZW50QXhpcywgZmxvYXQgdmVsb2NpdHkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdGFy
dFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHNjcm9sbFNuYXBUaW1lckZpcmVkKFNjcm9sbEV2ZW50QXhpcyk7CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRF
ZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwpAQCAtODUsNiArMTAy
LDEzIEBAIHByaXZhdGU6CiAgICAgU2Nyb2xsQ29udHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7
CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3NuYXBSdWJiZXJiYW5kVGltZXI7
CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yPiBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3I7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+IG1fdmVydGljYWxTY3JvbGxT
bmFwQW5pbWF0b3I7CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX2hvcml6b250
YWxTY3JvbGxTbmFwVGltZXI7CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3Zl
cnRpY2FsU2Nyb2xsU25hcFRpbWVyOworI2VuZGlmCisKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4g
bV9zY3JvbGxMYXllcjsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXI7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fY291bnRlclNjcm9sbGluZ0xheWVyOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlz
aW9uIDE4MDU2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY4LDggKzY4LDI0IEBAIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6On5TY3IK
IHsKICAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKQogICAgICAgICBDRlJ1bkxvb3BUaW1l
ckludmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgpKTsKKyAgICBpZiAobV9ob3Jp
em9udGFsU2Nyb2xsU25hcFRpbWVyKQorICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUo
bV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyLmdldCgpKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbFNuYXBUaW1lcikKKyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdmVydGlj
YWxTY3JvbGxTbmFwVGltZXIuZ2V0KCkpOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPExheW91dFVuaXQ+IGNvbnZlcnRGbG9hdFRvTGF5b3V0
VW5pdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHNBc0Zsb2F0KQoreworICAgIFZl
Y3RvcjxMYXlvdXRVbml0PiBzbmFwT2Zmc2V0czsKKyAgICBzbmFwT2Zmc2V0cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNuYXBPZmZzZXRzQXNGbG9hdC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc25hcE9mZnNldHNBc0Zsb2F0LnNpemUoKTsgKytpKQorICAgICAgICBzbmFw
T2Zmc2V0cy5hcHBlbmQoTGF5b3V0VW5pdChzbmFwT2Zmc2V0c0FzRmxvYXRbaV0pKTsKKyAgICAK
KyAgICByZXR1cm4gc25hcE9mZnNldHM7Cit9CisjZW5kaWYKKwogdm9pZCBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxp
bmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKICAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihzdGF0ZU5vZGUpOwpAQCAtMTIxLDYgKzEzNywx
NCBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6CiAgICAgICAgIGlm
IChzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQog
ICAgICAgICAgICAgbG9nV2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQoc2Nyb2xsaW5nU3Rh
dGVOb2RlLndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKSk7CiAgICAgfQorCisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKSkKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtl
X3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBjb252ZXJ0RmxvYXRUb0xheW91
dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSksIFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6VmVydGlj
YWxTbmFwT2Zmc2V0cykpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBz
dGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsIGNvbnZlcnRGbG9h
dFRvTGF5b3V0VW5pdHMoc2Nyb2xsaW5nU3RhdGVOb2RlLnZlcnRpY2FsU25hcE9mZnNldHMoKSks
IFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3Jv
bGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKQEAgLTE1Myw2ICsxNzcsMTMgQEAgdm9pZCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOgogICAgICAgICBbbV9ob3Jpem9udGFsU2Ny
b2xsYmFyUGFpbnRlciBzZXRVc2VQcmVzZW50YXRpb25WYWx1ZTpOT107CiAgICAgfQogCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFu
aW1hdG9yKQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdo
ZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0
b3IpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZl
bnQod2hlZWxFdmVudCk7CisjZW5kaWYKKwogICAgIG1fc2Nyb2xsQ29udHJvbGxlci5oYW5kbGVX
aGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0
Y2hlZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCkpOwogICAgIHNjcm9sbGluZ1Ry
ZWUoKS5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uod2hlZWxFdmVudC5waGFzZSgpKTsKQEAgLTU0MCw2
ICs1NzEsNjYgQEAgdm9pZCBsb2dXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCh1bgogICAg
IFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBXaGVlbCBldmVudCBoYW5kbGVyIGNvdW50IGNoYW5n
ZWQuIFRpbWU6ICVmIENvdW50OiAldVxuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKSwgY291bnQpOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK0xheW91dFVu
aXQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xsT2Zmc2V0SW5BeGlz
KFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9u
ID0gc2Nyb2xsUG9zaXRpb24oKTsKKyAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwgPyBjdXJyZW50UG9zaXRpb24ueCgpIDogY3VycmVudFBvc2l0aW9uLnkoKTsK
K30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVT
Y3JvbGxJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlbHRhKQoreworICAgIEZs
b2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKKyAgICBGbG9hdFBv
aW50IGNoYW5nZTsKKyAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwp
CisgICAgICAgIGNoYW5nZSA9IEZsb2F0UG9pbnQoY3VycmVudFBvc2l0aW9uLngoKSArIGRlbHRh
LCBjdXJyZW50UG9zaXRpb24ueSgpKTsKKyAgICBlbHNlCisgICAgICAgIGNoYW5nZSA9IEZsb2F0
UG9pbnQoY3VycmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSArIGRlbHRhKTsK
KworICAgIGltbWVkaWF0ZVNjcm9sbEJ5KGNoYW5nZSAtIGN1cnJlbnRQb3NpdGlvbik7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c3RhcnRTY3JvbGxTbmFw
VGltZXIoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFRp
bWVyUmVmPiYgdGltZXIgPSAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpID8g
bV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcjsK
KyAgICBpZiAodGltZXIpIHsKKyAgICAgICAgLy8gVG9zcyBvdXQgb2xkIGFuaW1hdGlvbiBhbmQg
c3RhcnQgbmV3IG9uZS4KKyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKHRpbWVyLmdl
dCgpKTsKKyAgICAgICAgdGltZXIgPSBudWxscHRyOworICAgICAgICBBU1NFUlQoIXRpbWVyKTsK
KyAgICB9CisgICAgCisgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZXJJbnRlcnZhbCA9IDEuMCAvIDYw
LjA7CisgICAgCisgICAgdGltZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlV2l0aEhh
bmRsZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyB0
aW1lckludGVydmFsLCB0aW1lckludGVydmFsLCAwLCAwLCBeKENGUnVuTG9vcFRpbWVyUmVmKSB7
CisgICAgICAgIHNjcm9sbFNuYXBUaW1lckZpcmVkKGF4aXMpOworICAgIH0pKTsKKyAgICBDRlJ1
bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIHRpbWVyLmdldCgpLCBrQ0ZSdW5M
b29wRGVmYXVsdE1vZGUpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVNYWM6OnN0b3BTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAg
UmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiYgdGltZXIgPSAoYXhpcyA9PSBTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwpID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyIDogbV92ZXJ0
aWNhbFNjcm9sbFNuYXBUaW1lcjsKKyAgICBpZiAoIXRpbWVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUodGltZXIuZ2V0KCkpOworICAgIHRpbWVyID0g
bnVsbHB0cjsKKyAgICBBU1NFUlQoIXRpbWVyKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxTbmFwVGltZXJGaXJlZChTY3JvbGxFdmVudEF4aXMg
YXhpcykKK3sKKyAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpIHsK
KyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvcikKKyAgICAgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1h
dG9yKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvci0+c2Nyb2xsU25h
cEFuaW1hdGlvblVwZGF0ZSgpOworICAgIH0KK30KKyNlbmRpZgorICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZP
Uk0oTUFDKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAkocmV2aXNpb24gMTgwNTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwzMCArODAsOCBAQCB2b2lkIFNjcm9sbEFu
aW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvCiAgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRl
bHRhKTsKIH0KIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykK
LXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgaWYgKG1fdmVydGljYWxT
Y3JvbGxTbmFwQW5pbWF0b3IpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3It
PmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBBbmltYXRvcikKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5o
YW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotfQotI2VuZGlmCi0KIGJvb2wgU2Nyb2xsQW5p
bWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogewot
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvcikgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25h
cEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KGUpOwotICAgICAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbFNuYXBBbmltYXRvci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFu
aW1hdG9yKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+aGFuZGxl
V2hlZWxFdmVudChlKTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRv
ci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIEV2ZW50cyBpbiB0
aGUgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlCZWdpbiBwaGFzZSBoYXZlIG5vIGRlbHRhcywg
YW5kIHRoZXJlZm9yZSBuZXZlciBwYXNzZXMgdGhyb3VnaCB0aGUgc2Nyb2xsIGhhbmRsaW5nIGxv
Z2ljIGJlbG93LgogICAgIC8vIFRoaXMgY2F1c2VzIHVzIHRvIHJldHVybiB3aXRoIGFuICd1bmhh
bmRsZWQnIHJldHVybiBzdGF0ZSwgZXZlbiB0aG91Z2ggdGhpcyBldmVudCB3YXMgc3VjY2Vzc2Z1
bGx5IHByb2Nlc3NlZC4KQEAgLTE4MCw2NCArMTU4LDQgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6
bm90aWZ5UG9zaXRpb25DaGFuZwogICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CiB9
CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi12b2lkIFNj
cm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKQotewotICAgIC8v
IEZJWE1FOiBDdXJyZW50bHksIHNjcm9sbCBzbmFwIGFuaW1hdG9ycyBhcmUgcmVjcmVhdGVkIGV2
ZW4gdGhvdWdoIHRoZSBzbmFwIG9mZnNldHMgYWxvbmUgY2FuIGJlIHVwZGF0ZWQuCi0gICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpIHsKLSAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0
cygpLCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwotICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yOjpob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQpOwotICAgIH0gZWxzZSBpZiAo
bV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNu
YXBUaW1lciA9IG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRp
Y2FsU25hcE9mZnNldHMoKSkgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9y
ID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9s
bGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRpbWVyPigqdGhpcywgJlNjcm9sbEFuaW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZp
cmVkKTsKLSAgICB9IGVsc2UgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKLSAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7Ci0gICAgICAgIG1f
dmVydGljYWxTY3JvbGxTbmFwVGltZXIgPSBudWxscHRyOwotICAgIH0KLX0KLQotTGF5b3V0VW5p
dCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsT2Zmc2V0SW5BeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlz
KQotewotICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gdGhpcy0+Y3VycmVudFBvc2l0
aW9uKCk7Ci0gICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8g
Y3VycmVudFBvc2l0aW9uLngoKSA6IGN1cnJlbnRQb3NpdGlvbi55KCk7Ci19Ci0KLXZvaWQgU2Ny
b2xsQW5pbWF0b3I6OmltbWVkaWF0ZVNjcm9sbEluQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywg
ZmxvYXQgZGVsdGEpCi17Ci0gICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLT5j
dXJyZW50UG9zaXRpb24oKTsKLSAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50
KGN1cnJlbnRQb3NpdGlvbi54KCkgKyBkZWx0YSwgY3VycmVudFBvc2l0aW9uLnkoKSkpOwotICAg
IGVsc2UKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQo
Y3VycmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSArIGRlbHRhKSk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhp
cyBheGlzKQotewotICAgIFRpbWVyKiBzY3JvbGxTbmFwVGltZXIgPSBheGlzID09IFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lci5nZXQoKSA6
IG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIuZ2V0KCk7Ci0gICAgaWYgKCFzY3JvbGxTbmFwVGlt
ZXItPmlzQWN0aXZlKCkpCi0gICAgICAgIHNjcm9sbFNuYXBUaW1lci0+c3RhcnRSZXBlYXRpbmco
MS4wIC8gNjAuMCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BTY3JvbGxTbmFwVGlt
ZXIoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCi17Ci0gICAgVGltZXIqIHNjcm9sbFNuYXBUaW1lciA9
IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9ob3Jpem9udGFsU2Nyb2xs
U25hcFRpbWVyLmdldCgpIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lci5nZXQoKTsKLSAgICBp
ZiAoc2Nyb2xsU25hcFRpbWVyLT5pc0FjdGl2ZSgpKQotICAgICAgICBzY3JvbGxTbmFwVGltZXIt
PnN0b3AoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbFNuYXBU
aW1lckZpcmVkKCkKLXsKLSAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3ItPnNjcm9s
bFNuYXBBbmltYXRpb25VcGRhdGUoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6dmVydGlj
YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpCi17Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmlt
YXRvci0+c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaAkocmV2aXNpb24gMTgwNTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDYgQEAKICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLSNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNu
YXBBbmltYXRvci5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpAQCAtNTAsMTEgKzQ1LDcgQEAgY2xhc3MgUGxh
dGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxiYXI7
CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi1jbGFzcyBT
Y3JvbGxBbmltYXRvciA6IHB1YmxpYyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50IHsKLSNl
bHNlCiBjbGFzcyBTY3JvbGxBbmltYXRvciB7Ci0jZW5kaWYKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4g
Y3JlYXRlKFNjcm9sbGFibGVBcmVhJik7CkBAIC04MSw2ICs3MiwxMSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZSkgeyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JikgeyB9CisjZW5kaWYKKwogICAgIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmKTsKICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbigpIGNvbnN0OwogCkBA
IC0xMTYsMzYgKzExMiwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBwcm9jZXNzV2hlZWxFdmVu
dEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgdm9pZCB1cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Ny
b2xsT2Zmc2V0SW5BeGlzKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGltbWVkaWF0ZVNjcm9sbEluQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZl
bnRBeGlzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFNjcm9sbFNuYXBUaW1lcihT
Y3JvbGxFdmVudEF4aXMpIG92ZXJyaWRlOwotI2VuZGlmCi0KIHByb3RlY3RlZDoKICAgICBleHBs
aWNpdCBTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxlQXJlYSYpOwogCiAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKTsKIAotI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBUcml2aWFsIHdy
YXBwZXJzIGFyb3VuZCB0aGUgYWN0dWFsIHVwZGF0ZSBsb29wIGluIEF4aXNTY3JvbGxTbmFwQW5p
bWF0b3IsIHNpbmNlIFdlYkNvcmUgVGltZXIgcmVxdWlyZXMgYSBUaW1lciBhcmd1bWVudC4KLSAg
ICB2b2lkIGhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpOwotICAgIHZvaWQgdmVydGlj
YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpOwotI2VuZGlmCi0KICAgICBTY3JvbGxhYmxlQXJlYSYg
bV9zY3JvbGxhYmxlQXJlYTsKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1
c2luZyBhIEZsb2F0UG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50
UG9zWTsgLy8gc3ViY2xhc3MgY29kZSBjb21wbGV4aXR5LgotI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApICYmIFBMQVRGT1JNKE1BQykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QXhpc1Njcm9sbFNu
YXBBbmltYXRvcj4gbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyOwotICAgIC8vIEZJWE1F
OiBGaW5kIGEgd2F5IHRvIGNvbnNvbGlkYXRlIGJvdGggdGltZXJzIGludG8gb25lIHZhcmlhYmxl
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPiBtX3ZlcnRpY2Fs
U2Nyb2xsU25hcEFuaW1hdG9yOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaW1lcj4gbV92ZXJ0aWNh
bFNjcm9sbFNuYXBUaW1lcjsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNu
YXBBbmltYXRvci5oCShyZXZpc2lvbiAxODA1NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXhpc1Njcm9sbFNuYXBBbmltYXRvciB7CiBwdWJsaWM6
Ci0gICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvcihBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50
KiwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlz
KTsKKyAgICBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGll
bnQqLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4
aXMpOwogICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KTsKICAgICBib29sIHNob3VsZE92ZXJyaWRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKSBjb25zdDsKICAgICB2b2lkIHNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKTsKQEAg
LTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50IHdoZWVsRGVsdGFX
aW5kb3dTaXplID0gMzsKIAogICAgIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIG1fY2xp
ZW50OwotICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiogbV9zbmFwT2Zmc2V0czsKKyAgICBW
ZWN0b3I8TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0czsKICAgICBTY3JvbGxFdmVudEF4aXMgbV9h
eGlzOwogICAgIC8vIFVzZWQgdG8gdHJhY2sgYm90aCBzbmFwcGluZyBhbmQgZ2xpZGluZyBiZWhh
dmlvcnMuCiAgICAgU2Nyb2xsU25hcFN0YXRlIG1fY3VycmVudFN0YXRlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3Iu
bW0JKHJldmlzaW9uIDE4MDU2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHN0
YXRpYyBpbmxpbmUgZmxvYXQgcHJvamVjdGVkSW5lcnRpYWxTY3IKICAgICByZXR1cm4gaW5lcnRp
YWxTY3JvbGxQcmVkaWN0aW9uRmFjdG9yICogaW5pdGlhbFdoZWVsRGVsdGE7CiB9CiAKLUF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBB
bmltYXRvckNsaWVudCogY2xpZW50LCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIHNuYXBPZmZz
ZXRzLCBTY3JvbGxFdmVudEF4aXMgYXhpcykKK0F4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OkF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCogY2xpZW50LCBj
b25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4aXMgYXhp
cykKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fc25hcE9mZnNldHMoc25hcE9mZnNl
dHMpCiAgICAgLCBtX2F4aXMoYXhpcykKQEAgLTEwNSwxMCArMTA1LDEzIEBAIHZvaWQgQXhpc1Nj
cm9sbFNuYXBBbmltYXRvcjo6aGFuZGxlV2hlZWwKIAogICAgIHN3aXRjaCAod2hlZWxTdGF0dXMp
IHsKICAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKLSAgICBjYXNl
IFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc6CiAgICAgICAgIGVuZFNjcm9sbFNuYXBB
bmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpVc2VySW50ZXJhY3Rpb24pOwogICAgICAgICBicmVh
azsKIAorICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzoKKyAgICAgICAg
Ly8gRG8gbm90aGluZy4KKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFdoZWVsRXZlbnRTdGF0
dXM6OlVzZXJTY3JvbGxFbmQ6CiAgICAgICAgIGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3Jv
bGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTAsNiArMTUzLDkg
QEAgYm9vbCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzaG91bGRPdmVycgogCiB2b2lkIEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKQogeworICAgIGlm
IChtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVhY2hlZCkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgQVNTRVJUKG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNu
YXBTdGF0ZTo6R2xpZGluZyB8fCBtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNu
YXBwaW5nKTsKICAgICBmbG9hdCBkZWx0YSA9IG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBT
dGF0ZTo6U25hcHBpbmcgPyBjb21wdXRlU25hcERlbHRhKCkgOiBjb21wdXRlR2xpZGVEZWx0YSgp
OwogICAgIGlmIChkZWx0YSkKQEAgLTE2NCw5ICsxNzAsMTIgQEAgdm9pZCBBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yOjpiZWdpblNjcm9sbAogICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQt
PnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOwogICAgIGZsb2F0IGluaXRpYWxXaGVlbERlbHRh
ID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nID8gYXZlcmFnZUluaXRpYWxX
aGVlbERlbHRhKCkgOiAwOwogICAgIExheW91dFVuaXQgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRp
b24gPSBuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgPyBtX2JlZ2luVHJhY2tp
bmdXaGVlbERlbHRhT2Zmc2V0ICsgTGF5b3V0VW5pdChwcm9qZWN0ZWRJbmVydGlhbFNjcm9sbERp
c3RhbmNlKGluaXRpYWxXaGVlbERlbHRhKSkgOiBvZmZzZXQ7Ci0gICAgcHJvamVjdGVkU2Nyb2xs
RGVzdGluYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlv
biwgbV9zbmFwT2Zmc2V0cy0+Zmlyc3QoKSksIG1fc25hcE9mZnNldHMtPmxhc3QoKSk7CisgICAg
aWYgKG1fc25hcE9mZnNldHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9q
ZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByb2plY3RlZFNjcm9s
bERlc3RpbmF0aW9uLCBtX3NuYXBPZmZzZXRzLmZpcnN0KCkpLCBtX3NuYXBPZmZzZXRzLmxhc3Qo
KSk7CiAgICAgbV9pbml0aWFsT2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fdGFyZ2V0T2Zmc2V0ID0g
Y2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KCptX3NuYXBPZmZzZXRzLCBwcm9q
ZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIG1fdGFyZ2V0
T2Zmc2V0ID0gY2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KG1fc25hcE9mZnNl
dHMsIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBpbml0aWFsV2hlZWxEZWx0YSk7CiAgICAg
aWYgKG1faW5pdGlhbE9mZnNldCA9PSBtX3RhcmdldE9mZnNldCkKICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMuaAkocmV2aXNpb24gMTgwNTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbEFuaW1hdG9yTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDIxICszNiwyOSBAQAogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKKyNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgiCisj
ZW5kaWYKKwogT0JKQ19DTEFTUyBXZWJTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsKIE9C
SkNfQ0xBU1MgV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKIE9CSkNfQ0xB
U1MgV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwogCiB0eXBlZGVmIGlkIFNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyOwogCi0jaWYgIUVOQUJMRShSVUJCRVJfQkFORElORykKKyNpZiAhRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKSAmJiAhRU5BQkxFKENTU19TQ1JPTExfU05BUCkKIGNsYXNzIFNj
cm9sbENvbnRyb2xsZXJDbGllbnQgeyB9OwogI2VuZGlmCiAKKyNpZiAhRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKK2NsYXNzIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQgeyB9OworI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsYmFyOwogCi1jbGFzcyBTY3Jv
bGxBbmltYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciwgcHJpdmF0ZSBTY3JvbGxDb250
cm9sbGVyQ2xpZW50IHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTWFjIDogcHVibGljIFNjcm9sbEFu
aW1hdG9yLCBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQsIHB1YmxpYyBBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yQ2xpZW50IHsKIAogcHVibGljOgogICAgIFNjcm9sbEFuaW1hdG9yTWFjKFNj
cm9sbGFibGVBcmVhJik7CkBAIC02OSw2ICs3NywxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAKK3By
b3RlY3RlZDoKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8vIFRyaXZpYWwgd3Jh
cHBlcnMgYXJvdW5kIHRoZSBhY3R1YWwgdXBkYXRlIGxvb3AgaW4gQXhpc1Njcm9sbFNuYXBBbmlt
YXRvciwgc2luY2UgV2ViQ29yZSBUaW1lciByZXF1aXJlcyBhIFRpbWVyIGFyZ3VtZW50LgorICAg
IHZvaWQgaG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CisgICAgdm9pZCB2ZXJ0aWNh
bFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBSZXRhaW5Q
dHI8aWQ+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyOwogICAgIFJldGFpblB0cjxXZWJTY3JvbGxB
bmltYXRpb25IZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsK
QEAgLTg1LDggKzEwMCw4IEBAIHByaXZhdGU6CiAgICAgVGltZXIgbV9zZW5kQ29udGVudEFyZWFT
Y3JvbGxlZFRpbWVyOwogICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lclNj
cm9sbERlbHRhOwogCi0gICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwotICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmKSBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBv
dmVycmlkZTsKQEAgLTE2Myw2ICsxNzgsMjEgQEAgcHJpdmF0ZToKICAgICBUaW1lciBtX3NuYXBS
dWJiZXJCYW5kVGltZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisg
ICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEluQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZs
b2F0IGRlbHRhKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1doZWVsRXZlbnRG
b3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRB
eGlzKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNjcm9sbFNuYXBUaW1lcihTY3Jv
bGxFdmVudEF4aXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxBbmlt
YXRvcnNBbmRUaW1lcnMoKSBvdmVycmlkZTsKKworICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRv
IGNvbnNvbGlkYXRlIGJvdGggdGltZXJzIGludG8gb25lIHZhcmlhYmxlLgorICAgIHN0ZDo6dW5p
cXVlX3B0cjxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPiBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5p
bWF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVyPiBtX2hvcml6b250YWxTY3JvbGxTbmFw
VGltZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+IG1fdmVy
dGljYWxTY3JvbGxTbmFwQW5pbWF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVyPiBtX3Zl
cnRpY2FsU2Nyb2xsU25hcFRpbWVyOworI2VuZGlmCisKICAgICBib29sIG1faGF2ZVNjcm9sbGVk
U2luY2VQYWdlTG9hZDsKICAgICBib29sIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlOwogICAg
IEludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCShyZXZpc2lvbiAxODA1
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA3OCw5ICsxMDc4LDMxIEBA
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQKICAgICAgICAgbWF5QmVn
aW5TY3JvbGxHZXN0dXJlKCk7CiB9CiAKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnByb2Nlc3NX
aGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQpCit7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpCisgICAgICAgIG1f
dmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7
CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvcikKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yKSB7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVu
dCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5zaG91bGRPdmVy
cmlkZVdoZWVsRXZlbnQod2hlZWxFdmVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZl
bnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5zaG91bGRP
dmVycmlkZVdoZWVsRXZlbnQod2hlZWxFdmVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorI2VuZGlmCiAgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsK
IAogICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkgfHwgIXJ1
YmJlckJhbmRpbmdFbmFibGVkRm9yU3lzdGVtKCkpCkBAIC0xNDA1LDYgKzE0MjcsNzMgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbAogICAgIG1fdmlzaWJsZVNjcm9s
bGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOwogfQogCisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9sbEFuaW1h
dG9yc0FuZFRpbWVycygpCit7CisgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNuYXAg
YW5pbWF0b3JzIGFyZSByZWNyZWF0ZWQgZXZlbiB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBhbG9u
ZSBjYW4gYmUgdXBkYXRlZC4KKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25h
cE9mZnNldHMoKSkKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3Rk
OjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCAqbV9zY3JvbGxhYmxl
QXJlYS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KTsKKyAgICBlbHNlIGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gbnVsbHB0cjsKKyAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3I+KHRoaXMsICptX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSwgU2Nyb2xs
RXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgZWxzZSBpZiAobV92ZXJ0aWNhbFNjcm9sbFNuYXBB
bmltYXRvcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gbnVsbHB0
cjsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lciA9IG51bGxwdHI7CisgICAgfQor
fQorCitMYXlvdXRVbml0IFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxPZmZzZXRJbkF4aXMoU2Ny
b2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24gPSB0
aGlzLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwgPyBjdXJyZW50UG9zaXRpb24ueCgpIDogY3VycmVudFBvc2l0aW9uLnko
KTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsSW5BeGlzKFNj
cm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBkZWx0YSkKK3sKKyAgICBGbG9hdFBvaW50IGN1cnJl
bnRQb3NpdGlvbiA9IHRoaXMtPmN1cnJlbnRQb3NpdGlvbigpOworICAgIGlmIChheGlzID09IFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKEZsb2F0UG9pbnQoY3VycmVudFBvc2l0aW9uLngoKSArIGRlbHRhLCBjdXJyZW50
UG9zaXRpb24ueSgpKSk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oRmxvYXRQb2ludChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9zaXRpb24u
eSgpICsgZGVsdGEpKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c3RhcnRTY3JvbGxT
bmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRp
bWVyPiYgc2Nyb2xsU25hcFRpbWVyID0gKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsKSA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA6IG1fdmVydGljYWxTY3JvbGxTbmFw
VGltZXI7CisgICAgCisgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRpbWVyPigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsU25hcFRp
bWVyRmlyZWQpOworICAgIGVsc2UKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lciA9
IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OnZlcnRp
Y2FsU2Nyb2xsU25hcFRpbWVyRmlyZWQpOworCisgICAgaWYgKHNjcm9sbFNuYXBUaW1lciAmJiAh
c2Nyb2xsU25hcFRpbWVyLT5pc0FjdGl2ZSgpKQorICAgICAgICBzY3JvbGxTbmFwVGltZXItPnN0
YXJ0UmVwZWF0aW5nKDEuMCAvIDYwLjApOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpz
dG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIFRpbWVyKiBz
Y3JvbGxTbmFwVGltZXIgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1f
aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lci5nZXQoKSA6IG1fdmVydGljYWxTY3JvbGxTbmFwVGlt
ZXIuZ2V0KCk7CisgICAgaWYgKHNjcm9sbFNuYXBUaW1lciAmJiBzY3JvbGxTbmFwVGltZXItPmlz
QWN0aXZlKCkpCisgICAgICAgIHNjcm9sbFNuYXBUaW1lci0+c3RvcCgpOworfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKQoreworICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpCisgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbFNuYXBBbmltYXRvci0+c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCkKK3sK
KyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvcikKKyAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbFNuYXBBbmltYXRvci0+c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOworfQorI2Vu
ZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhf
U0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRo
ZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxiYXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTgwNTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICsz
Myw2IEBACiAjaW5jbHVkZSAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiTlNTY3JvbGxlckltcERldGFpbHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKLSNpbmNsdWRlICJTY3JvbGxBbmltYXRvck1hYy5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcu
aCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSA8Q2FyYm9u
L0NhcmJvbi5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>247281</attachid>
            <date>2015-02-24 17:03:56 -0800</date>
            <delta_ts>2015-02-24 17:03:56 -0800</delta_ts>
            <desc>Example horizontal main-frame scroll snap points</desc>
            <filename>scroll-snap-mandatory-mainframe-horizontal.html</filename>
            <type>text/html</type>
            <size>1386</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgo8aHRtbD4KICAg
IDxoZWFkPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmhvcml6b250YWxHYWxsZXJ5IHsK
ICAgICAgICAgICAgICAgIHdpZHRoOiA2MDB2dzsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAw
JTsKICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7
CiAgICAgICAgICAgICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXBvaW50cy14OiByZXBlYXQoMTAw
dncpOwogICAgICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC10eXBlOiBtYW5kYXRvcnk7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNvbG9yQm94IHsKICAgICAgICAgICAgICAgIGhl
aWdodDogMTAwJTsKICAgICAgICAgICAgICAgIHdpZHRoOiAxMDB2dzsKICAgICAgICAgICAgICAg
IGZsb2F0OiBsZWZ0OwogICAgICAgICAgICAgICAgLyotd2Via2l0LXNjcm9sbC1zbmFwLWNvb3Jk
aW5hdGU6IDUwJSA1MCU7Ki8KICAgICAgICAgICAgfQogICAgICAgICAgICAjaXRlbTAgewogICAg
ICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGMDAwMDsKICAgICAgICAgICAgfQogICAg
ICAgICAgICAjaXRlbTEgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwRkYw
MDsKICAgICAgICAgICAgfQogICAgICAgICAgICAjaXRlbTIgewogICAgICAgICAgICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogIzAwMDBGRjsKICAgICAgICAgICAgfQogICAgICAgICAgICAjaXRlbTMg
ewogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwRkZGRjsKICAgICAgICAgICAg
fQogICAgICAgICAgICAjaXRlbTQgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
I0ZGRkYwMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAjaXRlbTUgewogICAgICAgICAgICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGMDBGRjsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5
bGU+CiAgICA8L2hlYWQ+CiAgICA8Ym9keSBjbGFzcz0iaG9yaXpvbnRhbEdhbGxlcnkiPgogICAg
ICAgIDxkaXYgaWQ9Iml0ZW0wIiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgIDxkaXYg
aWQ9Iml0ZW0xIiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9Iml0ZW0y
IiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9Iml0ZW0zIiBjbGFzcz0i
Y29sb3JCb3giPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9Iml0ZW00IiBjbGFzcz0iY29sb3JCb3gi
PjwvZGl2PgogICAgICAgIDxkaXYgaWQ9Iml0ZW01IiBjbGFzcz0iY29sb3JCb3giPjwvZGl2Pgog
ICAgPC9ib2R5Pgo8L2h0bWw+
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>247282</attachid>
            <date>2015-02-24 17:04:26 -0800</date>
            <delta_ts>2015-02-24 17:04:26 -0800</delta_ts>
            <desc>Example vertical main-frame scroll snap points</desc>
            <filename>scroll-snap-mandatory-mainframe-vertical.html</filename>
            <type>text/html</type>
            <size>1382</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgo8aHRtbD4KICAg
IDxoZWFkPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLnZlcnRpY2FsR2FsbGVyeSB7CiAg
ICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgIGhlaWdodDogNjAwdmg7
CiAgICAgICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOwog
ICAgICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC1wb2ludHMteTogcmVwZWF0KDEwMHZo
KTsKICAgICAgICAgICAgICAgIC13ZWJraXQtc2Nyb2xsLXNuYXAtdHlwZTogbWFuZGF0b3J5Owog
ICAgICAgICAgICB9CiAgICAgICAgICAgIC5jb2xvckJveCB7CiAgICAgICAgICAgICAgICBoZWln
aHQ6IDEwMHZoOwogICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgICBm
bG9hdDogbGVmdDsKICAgICAgICAgICAgICAgIC8qLXdlYmtpdC1zY3JvbGwtc25hcC1jb29yZGlu
YXRlOiA1MCUgNTAlOyovCiAgICAgICAgICAgIH0KICAgICAgICAgICAgI2l0ZW0wIHsKICAgICAg
ICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGRjAwMDA7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgI2l0ZW0xIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMEZGMDA7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgI2l0ZW0yIHsKICAgICAgICAgICAgICAgIGJhY2tn
cm91bmQtY29sb3I6ICMwMDAwRkY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgI2l0ZW0zIHsK
ICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMEZGRkY7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgI2l0ZW00IHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNG
RkZGMDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgI2l0ZW01IHsKICAgICAgICAgICAgICAg
IGJhY2tncm91bmQtY29sb3I6ICNGRjAwRkY7CiAgICAgICAgICAgIH0KICAgICAgICA8L3N0eWxl
PgogICAgPC9oZWFkPgogICAgPGJvZHkgY2xhc3M9InZlcnRpY2FsR2FsbGVyeSI+CiAgICAgICAg
PGRpdiBpZD0iaXRlbTAiIGNsYXNzPSJjb2xvckJveCI+PC9kaXY+CiAgICAgICAgPGRpdiBpZD0i
aXRlbTEiIGNsYXNzPSJjb2xvckJveCI+PC9kaXY+CiAgICAgICAgPGRpdiBpZD0iaXRlbTIiIGNs
YXNzPSJjb2xvckJveCI+PC9kaXY+CiAgICAgICAgPGRpdiBpZD0iaXRlbTMiIGNsYXNzPSJjb2xv
ckJveCI+PC9kaXY+CiAgICAgICAgPGRpdiBpZD0iaXRlbTQiIGNsYXNzPSJjb2xvckJveCI+PC9k
aXY+CiAgICAgICAgPGRpdiBpZD0iaXRlbTUiIGNsYXNzPSJjb2xvckJveCI+PC9kaXY+CiAgICA8
L2JvZHk+CjwvaHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>247283</attachid>
            <date>2015-02-24 17:07:23 -0800</date>
            <delta_ts>2015-02-24 17:07:23 -0800</delta_ts>
            <desc>Example overflow scroll snap points</desc>
            <filename>scroll-snap-mandatory.html</filename>
            <type>text/html</type>
            <size>2725</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgo8aHRtbD4KICAg
IDxoZWFkPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmhvcml6b250YWxHYWxsZXJ5IHsK
ICAgICAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICAgICAgICAgIGhlaWdodDogNTAw
cHg7CiAgICAgICAgICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgICAgICAgICBv
dmVyZmxvdy14OiBhdXRvOwogICAgICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC1wb2lu
dHMteDogcmVwZWF0KDEwMCUpOwogICAgICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC10
eXBlOiBtYW5kYXRvcnk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmhvcml6b250YWxHYWxs
ZXJ5RHJhd2VyIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAzMDAwcHg7CiAgICAgICAgICAgICAg
ICBoZWlnaHQ6IDUwMHB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC52ZXJ0aWNhbEdhbGxl
cnkgewogICAgICAgICAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgICAgICAgICAgaGVpZ2h0
OiA1MDBweDsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAg
ICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1
dG87CiAgICAgICAgICAgICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXBvaW50cy15OiByZXBlYXQo
MTAwJSk7CiAgICAgICAgICAgICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IG1hbmRhdG9y
eTsKICAgICAgICAgICAgfQogICAgICAgICAgICAudmVydGljYWxHYWxsZXJ5RHJhd2VyIHsKICAg
ICAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICAgICAgICAgIGhlaWdodDogMzAwMHB4
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5jb2xvckJveCB7CiAgICAgICAgICAgICAgICBo
ZWlnaHQ6IDUwMHB4OwogICAgICAgICAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgICAgICAg
ICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgICAgICAgICAvKi13ZWJraXQtc2Nyb2xsLXNuYXAtY29v
cmRpbmF0ZTogNTAlIDUwJTsqLwogICAgICAgICAgICB9CiAgICAgICAgICAgICNpdGVtMCB7CiAg
ICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkYwMDAwOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgICNpdGVtMSB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBG
RjAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNpdGVtMiB7CiAgICAgICAgICAgICAgICBi
YWNrZ3JvdW5kLWNvbG9yOiAjMDAwMEZGOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNpdGVt
MyB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBGRkZGOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgICNpdGVtNCB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiAjRkZGRjAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNpdGVtNSB7CiAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkYwMEZGOwogICAgICAgICAgICB9CiAgICAgICAgPC9z
dHlsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5PgogICAgICAgIDxkaXYgc3R5bGU9InBvc2l0aW9u
OiByZWxhdGl2ZTsgaGVpZ2h0OiA1MDBweDsgd2lkdGg6IDUwMHB4Ij4KICAgICAgICAgICAgPGRp
diBjbGFzcz0iaG9yaXpvbnRhbEdhbGxlcnkiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
aG9yaXpvbnRhbEdhbGxlcnlEcmF3ZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Iml0
ZW0wIiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9
Iml0ZW0xIiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYg
aWQ9Iml0ZW0yIiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxk
aXYgaWQ9Iml0ZW0zIiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgICAgICAgICAgICAg
IDxkaXYgaWQ9Iml0ZW00IiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgICAgICAgICAg
ICAgIDxkaXYgaWQ9Iml0ZW01IiBjbGFzcz0iY29sb3JCb3giPjwvZGl2PgogICAgICAgICAgICAg
ICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0
aWNhbEdhbGxlcnkiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWxHYWxsZXJ5
RHJhd2VyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpdGVtMCIgY2xhc3M9ImNvbG9y
Qm94Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpdGVtMSIgY2xhc3M9ImNv
bG9yQm94Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpdGVtMiIgY2xhc3M9
ImNvbG9yQm94Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpdGVtMyIgY2xh
c3M9ImNvbG9yQm94Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpdGVtNCIg
Y2xhc3M9ImNvbG9yQm94Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpdGVt
NSIgY2xhc3M9ImNvbG9yQm94Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAg
ICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvYm9keT4KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247356</attachid>
            <date>2015-02-25 15:52:38 -0800</date>
            <delta_ts>2015-02-26 17:47:03 -0800</delta_ts>
            <desc>Patch v2 (Revised based on comments)</desc>
            <filename>bug-141973-20150225155226.patch</filename>
            <type>text/plain</type>
            <size>35866</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDY0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDE1LTAyLTI1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNjcm9sbCBzbmFwIHBvaW50
cyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGUgbWFpbiBmcmFtZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxOTczCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xOTkzODM5Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcGRhdGUgdGhlIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMgY2xh
c3MgdG8gaW1wbGVtZW50IHRoZSBkZWxlZ2F0ZSBpbnRlcmZhY2UgbmVlZGVkIGJ5IHRoZQorICAg
ICAgICBBeGlzU2Nyb2xsQW5pbWF0b3IuIFRoaXMgaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKKyAg
ICAgICAgMS4gSW1wbGVtZW50IHNjcm9sbE9mZnNldE9uQXhpczogVXNlZCBieSB0aGUgQXhpc1Nj
cm9sbEFuaW1hdG9yIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgU2Ny
b2xsYWJsZUFyZWEuCisgICAgICAgIDIuIEltcGxlbWVudCBpbW1lZGlhdGVTY3JvbGxPbkF4aXM6
IFVzZWQgYnkgdGhlIEF4aXNTY3JvbGxBbmltYXRvciB0byBzY3JvbGwgdGhlIFNjcm9sbGFibGVB
cmVhCisgICAgICAgIDMuIEltcGxlbWVudCBzdGFydFNjcm9sbFNuYXBUaW1lcjogVXNlZCBieSBB
eGlzU2Nyb2xsQW5pbWF0b3IgdG8gYmVnaW4gdGhlIGFuaW1hdGlvbiB0aW1lci4KKyAgICAgICAg
NC4gSW1wbGVtZW50IHN0b3BTY3JvbGxTbmFwVGltZXI6IFVzZWQgYnkgQXhpc1Njcm9sbEFuaW1h
dG9yIHRvIGVuZCB0aGUgYW5pbWF0aW9uIHRpbWVyLgorICAgICAgICAKKyAgICAgICAgQ3VycmVu
dGx5LCB0aGUgYW5pbWF0aW9uIHRpbWVycyBhcmUgb3duZWQgYnkgdGhlIEFuaW1hdG9yTWFjL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMsIGJlY2F1c2UKKyAgICAgICAgZGlmZmVy
ZW50IHR5cGVzIG9mIHRpbWVycyBhcmUgbmVlZGVkIG9uIHRoZSBtYWluIGFuZCBzY3JvbGxpbmcg
dGhyZWFkcy4gU2VwYXJhdGUgd29yayBpcyBiZWluZyBkb25lIHRvCisgICAgICAgIGNvbnNvbGlk
YXRlIHRoaXMuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYy5oOiBJbXBsZW1lbnQgdGhlIEF4aXNTY3JvbGxBbmltYXRvckNs
aWVudCBpbnRlcmZhY2UuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZU1hYyk6IE1ha2Ugc3VyZSB0aGUgc2Nyb2xsIHNuYXAKKyAgICAgICAgcG9pbnQgdGltZXJzIGFy
ZSBjbGVhbmVkIHVwLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEZsb2F0VG9MYXlvdXRVbml0
cyk6IEFkZGVkIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKTogUmVjb2duaXpl
IGFuZCByZWFjdCB0byBjaGFuZ2VzIHRvCisgICAgICAgIFNjcm9sbCBTbmFwIFBvaW50cyBvbiB0
b3AtbGV2ZWwgZnJhbWVzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZU1hYzo6aGFuZGxlV2hlZWxFdmVudCk6IFBlcmZvcm0gU2Nyb2xsIFNuYXAgUG9p
bnQgZnVuY3Rpb25zIG5lZWRlZAorICAgICAgICBkdXJpbmcgd2hlZWwgZXZlbnRzLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xsT2Zm
c2V0T25BeGlzKTogSW1wbGVtZW50IGRlbGVnYXRlIG1ldGhvZCBuZWVkZWQgYnkgdGhlCisgICAg
ICAgIEF4aXNTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxPbkF4
aXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWM6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzdG9wU2Nyb2xsU25hcFRpbWVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlTWFjOjpzY3JvbGxTbmFwVGltZXJGaXJlZCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcDogTW92ZSBTY3JvbGwgU25hcCBQb2ludCBjb2RlIGRvd24gdG8g
dGhlIFNjcm9sbEFuaW1hdG9yTWFjIGxldmVsLCBzaW5jZSBpdCBpcyBub3QKKyAgICAgICAgdXNl
ZCBieSBvdGhlciBwb3J0cyAoaW5jbHVkaW5nIGlPUyEpCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1l
cnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbE9m
ZnNldEluQXhpcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6
aW1tZWRpYXRlU2Nyb2xsSW5BeGlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpzdGFydFNjcm9sbFNuYXBUaW1lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcjo6c3RvcFNjcm9sbFNuYXBUaW1lcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZp
cmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp2ZXJ0aWNh
bFNjcm9sbFNuYXBUaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNj
cm9sbEFuaW1hdG9yc0FuZFRpbWVycyk6IEFkZCBzdHViIGltcGxlbWVudGF0aW9ucyBmb3Igbm9u
LU1hYyBwb3J0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpwcm9jZXNzV2hl
ZWxFdmVudEZvclNjcm9sbFNuYXApOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQXhp
c1Njcm9sbFNuYXBBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xs
U25hcEFuaW1hdG9yLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRv
cjo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcik6IFN0b3JlIHRoZSBWZWN0b3Igb2YgTGF5b3V0VW5p
dHMgYXMgYSB2YWx1ZSBzaW5jZSBpdAorICAgICAgICB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgbXVs
dGlwbGUgdGhyZWFkcy4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6
OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUpOiBIYW5kbGUgZWRnZSBjYXNlIG9mIGRlc3RpbmF0
aW9uIGJlaW5nIHJlYWNoZWQgd2hpbGUKKyAgICAgICAgYW5pbWF0aW9uIGV2ZW50cyBhcmUgc3Rp
bGwgaGFwcGVuaW5nLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6
YmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKTogUHJvdGVjdCBhZ2FpbnN0IGVtcHR5IHNuYXAgcG9p
bnQgY2FzZSBJIGVuY291bnRlcmVkCisgICAgICAgIGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06IE1vdmUgaW1wbGVtZW50YXRpb24gZnJvbSBTY3Jv
bGxBbmltYXRvciBiYXNlIGNsYXNzIHNpbmNlIGl0IGlzIG9ubHkgdXNlZAorICAgICAgICBieSB0
aGUgTWFjIHBvcnQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6cHJvY2Vz
c1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTWFjOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbE9mZnNldE9uQXhpcyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsT25BeGlzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzdGFydFNjcm9sbFNuYXBUaW1lcik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c3RvcFNjcm9sbFNuYXBUaW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbFNuYXBU
aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNh
bFNjcm9sbFNuYXBUaW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMubW06IFJlbW92ZSB1bm5lZWRlZCBoZWFkZXIgaW5jbHVkZS4KKwogMjAxNS0wMi0y
NSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAg
IEhvcml6b250YWwgYW5kIHZlcnRpY2FsIGxpbmVzIGFyZSBjbGlwcGVkIGNvbXBsZXRlbHkgaWYg
Y2xpcC1wYXRoIGlzIGluY2x1ZGVkIGluIHRoZSB0YWcgYnV0IHRoZSByZWZlcmVuY2VkIGVsZW1l
bnQgaXMgZGVmaW5lZCBsYXRlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWMuaAkocmV2aXNpb24gMTgwNjQzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMywxMSArMzMsMTkgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKyNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgi
CisjZW5kaWYKKwogT0JKQ19DTEFTUyBDQUxheWVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMgOiBwdWJsaWMgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSwgcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50
IHsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZU1hYyA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
LCBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQsIHB1YmxpYyBBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yQ2xpZW50ICB7CisjZWxzZQorY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYyA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLCBwcml2YXRl
IFNjcm9sbENvbnRyb2xsZXJDbGllbnQgIHsKKyNlbmRpZgogcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+
IGNyZWF0ZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKICAgICB2aXJ0dWFsIH5T
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjKCk7CkBAIC02NSw2ICs3MywxNSBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNl
c3NhcnkoKSBvdmVycmlkZTsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgTGF5
b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHZlbG9j
aXR5KSBvdmVycmlkZTsKKyAgICB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50
QXhpcykgb3ZlcnJpZGU7CisgICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50
QXhpcykgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNjcm9sbFNuYXBUaW1lckZpcmVkKFNjcm9sbEV2
ZW50QXhpcyk7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlv
bigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBv
c2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYpIG92
ZXJyaWRlOwpAQCAtODUsNiArMTAyLDEzIEBAIHByaXZhdGU6CiAgICAgU2Nyb2xsQ29udHJvbGxl
ciBtX3Njcm9sbENvbnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBt
X3NuYXBSdWJiZXJiYW5kVGltZXI7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPiBtX2hvcml6b250YWxTY3Jv
bGxTbmFwQW5pbWF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3I+IG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3I7CisgICAgUmV0YWluUHRyPENGUnVuTG9v
cFRpbWVyUmVmPiBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXI7CisgICAgUmV0YWluUHRyPENG
UnVuTG9vcFRpbWVyUmVmPiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyOworI2VuZGlmCisKICAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKICAgICBSZXRhaW5QdHI8Q0FMYXll
cj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fY291
bnRlclNjcm9sbGluZ0xheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE4MDY0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDggKzY4LDI0IEBAIFNjcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVNYWM6On5TY3IKIHsKICAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKQog
ICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdl
dCgpKTsKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyKQorICAgICAgICBDRlJ1
bkxvb3BUaW1lckludmFsaWRhdGUobV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyLmdldCgpKTsK
KyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcikKKyAgICAgICAgQ0ZSdW5Mb29wVGlt
ZXJJbnZhbGlkYXRlKG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIuZ2V0KCkpOwogfQogCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPExheW91dFVuaXQ+
IGNvbnZlcnRUb0xheW91dFVuaXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzQXNG
bG9hdCkKK3sKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gc25hcE9mZnNldHM7CisgICAgc25hcE9m
ZnNldHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzbmFwT2Zmc2V0c0FzRmxvYXQuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8gb2Zmc2V0IDogc25hcE9mZnNldHNBc0Zsb2F0KQorICAgICAgICBzbmFw
T2Zmc2V0cy5hcHBlbmQob2Zmc2V0KTsKKyAgICAKKyAgICByZXR1cm4gc25hcE9mZnNldHM7Cit9
CisjZW5kaWYKKwogdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRh
dGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsK
ICAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJl
bihzdGF0ZU5vZGUpOwpAQCAtMTIxLDYgKzEzNywxNCBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVNYWM6CiAgICAgICAgIGlmIChzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQogICAgICAgICAgICAgbG9nV2hlZWxFdmVudEhh
bmRsZXJDb3VudENoYW5nZWQoc2Nyb2xsaW5nU3RhdGVOb2RlLndoZWVsRXZlbnRIYW5kbGVyQ291
bnQoKSk7CiAgICAgfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzKSkKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yPih0aGlzLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpv
bnRhbFNuYXBPZmZzZXRzKCkpLCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworCisgICAg
aWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMpKQorICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yPih0aGlzLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUudmVy
dGljYWxTbmFwT2Zmc2V0cygpKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisjZW5kaWYK
IH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVBZnRl
ckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQpAQCAtMTUzLDYg
KzE3NywxMyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6CiAgICAg
ICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyIHNldFVzZVByZXNlbnRhdGlvblZhbHVl
Ok5PXTsKICAgICB9CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNu
YXBBbmltYXRvci0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBpZiAobV92ZXJ0
aWNhbFNjcm9sbFNuYXBBbmltYXRvcikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmlt
YXRvci0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyNlbmRpZgorCiAgICAgbV9zY3Jv
bGxDb250cm9sbGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CiAgICAgc2Nyb2xsaW5n
VHJlZSgpLnNldE9yQ2xlYXJMYXRjaGVkTm9kZSh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQo
KSk7CiAgICAgc2Nyb2xsaW5nVHJlZSgpLmhhbmRsZVdoZWVsRXZlbnRQaGFzZSh3aGVlbEV2ZW50
LnBoYXNlKCkpOwpAQCAtNTQwLDYgKzU3MSw2NiBAQCB2b2lkIGxvZ1doZWVsRXZlbnRIYW5kbGVy
Q291bnRDaGFuZ2VkKHVuCiAgICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IFdoZWVsIGV2ZW50
IGhhbmRsZXIgY291bnQgY2hhbmdlZC4gVGltZTogJWYgQ291bnQ6ICV1XG4iLCBXVEY6Om1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCBjb3VudCk7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQorTGF5b3V0VW5pdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
OjpzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgRmxvYXRQ
b2ludCBjdXJyZW50UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBheGlz
ID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IGN1cnJlbnRQb3NpdGlvbi54KCkgOiBj
dXJyZW50UG9zaXRpb24ueSgpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWM6OmltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxv
YXQgZGVsdGEpCit7CisgICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBzY3JvbGxQb3Np
dGlvbigpOworICAgIEZsb2F0UG9pbnQgY2hhbmdlOworICAgIGlmIChheGlzID09IFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCkKKyAgICAgICAgY2hhbmdlID0gRmxvYXRQb2ludChjdXJyZW50
UG9zaXRpb24ueCgpICsgZGVsdGEsIGN1cnJlbnRQb3NpdGlvbi55KCkpOworICAgIGVsc2UKKyAg
ICAgICAgY2hhbmdlID0gRmxvYXRQb2ludChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9z
aXRpb24ueSgpICsgZGVsdGEpOworCisgICAgaW1tZWRpYXRlU2Nyb2xsQnkoY2hhbmdlIC0gY3Vy
cmVudFBvc2l0aW9uKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjOjpzdGFydFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBS
ZXRhaW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+JiB0aW1lciA9IChheGlzID09IFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCkgPyBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgOiBtX3ZlcnRp
Y2FsU2Nyb2xsU25hcFRpbWVyOworICAgIGlmICh0aW1lcikgeworICAgICAgICAvLyBUb3NzIG91
dCBvbGQgYW5pbWF0aW9uIGFuZCBzdGFydCBuZXcgb25lLgorICAgICAgICBDRlJ1bkxvb3BUaW1l
ckludmFsaWRhdGUodGltZXIuZ2V0KCkpOworICAgICAgICB0aW1lciA9IG51bGxwdHI7CisgICAg
ICAgIEFTU0VSVCghdGltZXIpOworICAgIH0KKyAgICAKKyAgICBDRlRpbWVJbnRlcnZhbCB0aW1l
ckludGVydmFsID0gMS4wIC8gNjAuMDsKKyAgICAKKyAgICB0aW1lciA9IGFkb3B0Q0YoQ0ZSdW5M
b29wVGltZXJDcmVhdGVXaXRoSGFuZGxlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKSArIHRpbWVySW50ZXJ2YWwsIHRpbWVySW50ZXJ2YWwsIDAsIDAsIF4o
Q0ZSdW5Mb29wVGltZXJSZWYpIHsKKyAgICAgICAgc2Nyb2xsU25hcFRpbWVyRmlyZWQoYXhpcyk7
CisgICAgfSkpOworICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwg
dGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c3RvcFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVu
dEF4aXMgYXhpcykKK3sKKyAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+JiB0aW1lciA9
IChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkgPyBtX2hvcml6b250YWxTY3Jv
bGxTbmFwVGltZXIgOiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyOworICAgIGlmICghdGltZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZSh0aW1lci5n
ZXQoKSk7CisgICAgdGltZXIgPSBudWxscHRyOworICAgIEFTU0VSVCghdGltZXIpOworfQorCit2
b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbFNuYXBUaW1lckZp
cmVkKFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCkgeworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFu
aW1hdG9yKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5zY3Jv
bGxTbmFwQW5pbWF0aW9uVXBkYXRlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fdmVy
dGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpCisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25h
cEFuaW1hdG9yLT5zY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCk7CisgICAgfQorfQorI2VuZGlm
CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKSAmJiBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODA2NDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDMwICs4
MCw4IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG8KICAgICBub3Rp
ZnlQb3NpdGlvbkNoYW5nZWQoZGVsdGEpOwogfQogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQotdm9pZCBTY3JvbGxBbmltYXRvcjo6cHJvY2Vzc1doZWVsRXZl
bnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsK
LSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvcikKLSAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbFNuYXBBbmltYXRvci0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLSAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKQotICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci19Ci0jZW5k
aWYKLQogYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIGUpCiB7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZP
Uk0oTUFDKQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yKSB7Ci0gICAgICAg
IG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQoZSk7Ci0gICAg
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5zaG91bGRPdmVycmlkZVdoZWVs
RXZlbnQoZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KGUpOwotICAgICAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgLy8gRXZlbnRzIGluIHRoZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2luIHBo
YXNlIGhhdmUgbm8gZGVsdGFzLCBhbmQgdGhlcmVmb3JlIG5ldmVyIHBhc3NlcyB0aHJvdWdoIHRo
ZSBzY3JvbGwgaGFuZGxpbmcgbG9naWMgYmVsb3cuCiAgICAgLy8gVGhpcyBjYXVzZXMgdXMgdG8g
cmV0dXJuIHdpdGggYW4gJ3VuaGFuZGxlZCcgcmV0dXJuIHN0YXRlLCBldmVuIHRob3VnaCB0aGlz
IGV2ZW50IHdhcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkLgpAQCAtMTgwLDY0ICsxNTgsNCBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpZnlQb3NpdGlvbkNoYW5nCiAgICAgbV9zY3JvbGxhYmxl
QXJlYS5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gs
IG1fY3VycmVudFBvc1kpKTsKIH0KIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBM
QVRGT1JNKE1BQykKLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0Fu
ZFRpbWVycygpCi17Ci0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNuYXAgYW5pbWF0
b3JzIGFyZSByZWNyZWF0ZWQgZXZlbiB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBhbG9uZSBjYW4g
YmUgdXBkYXRlZC4KLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU25hcE9mZnNl
dHMoKSkgewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1h
a2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEu
aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7Ci0g
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8VGlt
ZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3I6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJl
ZCk7Ci0gICAgfSBlbHNlIGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gbnVsbHB0cjsKLSAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1f
c2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIG1fdmVydGlj
YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5p
bWF0b3I+KHRoaXMsIG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0cygpLCBTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1l
ciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZXI+KCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3I6OnZlcnRp
Y2FsU2Nyb2xsU25hcFRpbWVyRmlyZWQpOwotICAgIH0gZWxzZSBpZiAobV92ZXJ0aWNhbFNjcm9s
bFNuYXBBbmltYXRvcikgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0g
bnVsbHB0cjsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lciA9IG51bGxwdHI7Ci0g
ICAgfQotfQotCi1MYXlvdXRVbml0IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGxPZmZzZXRJbkF4aXMo
U2Nyb2xsRXZlbnRBeGlzIGF4aXMpCi17Ci0gICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24g
PSB0aGlzLT5jdXJyZW50UG9zaXRpb24oKTsKLSAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwgPyBjdXJyZW50UG9zaXRpb24ueCgpIDogY3VycmVudFBvc2l0aW9u
LnkoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6aW1tZWRpYXRlU2Nyb2xsSW5BeGlzKFNj
cm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBkZWx0YSkKLXsKLSAgICBGbG9hdFBvaW50IGN1cnJl
bnRQb3NpdGlvbiA9IHRoaXMtPmN1cnJlbnRQb3NpdGlvbigpOwotICAgIGlmIChheGlzID09IFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKEZsb2F0UG9pbnQoY3VycmVudFBvc2l0aW9uLngoKSArIGRlbHRhLCBjdXJyZW50
UG9zaXRpb24ueSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oRmxvYXRQb2ludChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9zaXRpb24u
eSgpICsgZGVsdGEpKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6c3RhcnRTY3JvbGxTbmFw
VGltZXIoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCi17Ci0gICAgVGltZXIqIHNjcm9sbFNuYXBUaW1l
ciA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9ob3Jpem9udGFsU2Ny
b2xsU25hcFRpbWVyLmdldCgpIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lci5nZXQoKTsKLSAg
ICBpZiAoIXNjcm9sbFNuYXBUaW1lci0+aXNBY3RpdmUoKSkKLSAgICAgICAgc2Nyb2xsU25hcFRp
bWVyLT5zdGFydFJlcGVhdGluZygxLjAgLyA2MC4wKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRv
cjo6c3RvcFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMgYXhpcykKLXsKLSAgICBUaW1l
ciogc2Nyb2xsU25hcFRpbWVyID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwg
PyBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIuZ2V0KCkgOiBtX3ZlcnRpY2FsU2Nyb2xsU25h
cFRpbWVyLmdldCgpOwotICAgIGlmIChzY3JvbGxTbmFwVGltZXItPmlzQWN0aXZlKCkpCi0gICAg
ICAgIHNjcm9sbFNuYXBUaW1lci0+c3RvcCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpo
b3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKQotewotICAgIG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBBbmltYXRvci0+c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOwotfQotCi12b2lkIFNj
cm9sbEFuaW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCkKLXsKLSAgICBtX3Zl
cnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5zY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCk7Ci19
Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAxODA2NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSAr
MzgsNiBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLSNp
bmNsdWRlICJBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC01MCwx
MSArNDUsNyBAQCBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJl
YTsKIGNsYXNzIFNjcm9sbGJhcjsKIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBM
QVRGT1JNKE1BQykKLWNsYXNzIFNjcm9sbEFuaW1hdG9yIDogcHVibGljIEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3JDbGllbnQgewotI2Vsc2UKIGNsYXNzIFNjcm9sbEFuaW1hdG9yIHsKLSNlbmRpZgog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNjcm9sbEFuaW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKQEAgLTgxLDYgKzcy
LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlKSB7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xsU3RhdGVBZnRlckxheW91dCgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgeyB9CisjZW5kaWYKKwogICAgIHZvaWQgc2V0Q3VycmVu
dFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3Np
dGlvbigpIGNvbnN0OwogCkBAIC0xMTYsMzYgKzExMiwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi0gICAgdm9p
ZCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
Jik7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKLSAgICB2aXJ0
dWFsIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0SW5BeGlzKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEluQXhpcyhTY3JvbGxFdmVudEF4
aXMsIGZsb2F0IGRlbHRhKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxT
bmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3Rv
cFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMpIG92ZXJyaWRlOwotI2VuZGlmCi0KIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxlQXJlYSYpOwog
CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUm
IGRlbHRhKTsKIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykK
LSAgICAvLyBUcml2aWFsIHdyYXBwZXJzIGFyb3VuZCB0aGUgYWN0dWFsIHVwZGF0ZSBsb29wIGlu
IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IsIHNpbmNlIFdlYkNvcmUgVGltZXIgcmVxdWlyZXMgYSBU
aW1lciBhcmd1bWVudC4KLSAgICB2b2lkIGhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgp
OwotICAgIHZvaWQgdmVydGljYWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpOwotI2VuZGlmCi0KICAg
ICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxhYmxlQXJlYTsKICAgICBmbG9hdCBtX2N1cnJlbnRQ
b3NYOyAvLyBXZSBhdm9pZCB1c2luZyBhIEZsb2F0UG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNlCiAg
ICAgZmxvYXQgbV9jdXJyZW50UG9zWTsgLy8gc3ViY2xhc3MgY29kZSBjb21wbGV4aXR5LgotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4gbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1h
dG9yOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaW1lcj4gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRp
bWVyOwotICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNvbnNvbGlkYXRlIGJvdGggdGltZXJz
IGludG8gb25lIHZhcmlhYmxlLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yPiBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxUaW1lcj4gbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcjsKLSNlbmRpZgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNT
Y3JvbGxTbmFwQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oCShyZXZpc2lvbiAxODA2NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NywxNSArNTcsMTUgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3JDbGllbnQoKSB7IH0KIAogcHVibGljOgotICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBzY3JvbGxPZmZzZXRJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEluQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHZl
bG9jaXR5KSA9IDA7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhpcyhT
Y3JvbGxFdmVudEF4aXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsT25B
eGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgdmVsb2NpdHkpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHN0b3BTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7CiB9OwogCiBj
bGFzcyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yIHsKIHB1YmxpYzoKLSAgICBBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqLCBjb25zdCBWZWN0b3I8TGF5
b3V0VW5pdD4qIHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4aXMpOworICAgIEF4aXNTY3JvbGxT
bmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCosIGNvbnN0IFZlY3RvcjxM
YXlvdXRVbml0PiYgc25hcE9mZnNldHMsIFNjcm9sbEV2ZW50QXhpcyk7CiAgICAgdm9pZCBoYW5k
bGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogICAgIGJvb2wgc2hvdWxk
T3ZlcnJpZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OwogICAg
IHZvaWQgc2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOwpAQCAtODUsNyArODUsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnQgd2hlZWxEZWx0YVdpbmRvd1NpemUgPSAzOwogCiAg
ICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCogbV9jbGllbnQ7Ci0gICAgY29uc3QgVmVj
dG9yPExheW91dFVuaXQ+KiBtX3NuYXBPZmZzZXRzOworICAgIFZlY3RvcjxMYXlvdXRVbml0PiBt
X3NuYXBPZmZzZXRzOwogICAgIFNjcm9sbEV2ZW50QXhpcyBtX2F4aXM7CiAgICAgLy8gVXNlZCB0
byB0cmFjayBib3RoIHNuYXBwaW5nIGFuZCBnbGlkaW5nIGJlaGF2aW9ycy4KICAgICBTY3JvbGxT
bmFwU3RhdGUgbV9jdXJyZW50U3RhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbQkocmV2aXNpb24gMTgwNjQz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3Iu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBw
cm9qZWN0ZWRJbmVydGlhbFNjcgogICAgIHJldHVybiBpbmVydGlhbFNjcm9sbFByZWRpY3Rpb25G
YWN0b3IgKiBpbml0aWFsV2hlZWxEZWx0YTsKIH0KIAotQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6
QXhpc1Njcm9sbFNuYXBBbmltYXRvcihBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KiBjbGll
bnQsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0Piogc25hcE9mZnNldHMsIFNjcm9sbEV2ZW50QXhp
cyBheGlzKQorQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcihB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KiBjbGllbnQsIGNvbnN0IFZlY3RvcjxMYXlvdXRV
bml0PiYgc25hcE9mZnNldHMsIFNjcm9sbEV2ZW50QXhpcyBheGlzKQogICAgIDogbV9jbGllbnQo
Y2xpZW50KQogICAgICwgbV9zbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0cykKICAgICAsIG1fYXhpcyhh
eGlzKQpAQCAtMTA1LDEwICsxMDUsMTMgQEAgdm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpo
YW5kbGVXaGVlbAogCiAgICAgc3dpdGNoICh3aGVlbFN0YXR1cykgewogICAgIGNhc2UgV2hlZWxF
dmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOgotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6
VXNlclNjcm9sbGluZzoKICAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFw
U3RhdGU6OlVzZXJJbnRlcmFjdGlvbik7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBXaGVl
bEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOgorICAgICAgICAvLyBEbyBub3RoaW5nLgorICAg
ICAgICBicmVhazsKKwogICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDoK
ICAgICAgICAgYmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBp
bmcpOwogICAgICAgICBicmVhazsKQEAgLTExNyw3ICsxMjAsNyBAQCB2b2lkIEF4aXNTY3JvbGxT
bmFwQW5pbWF0b3I6OmhhbmRsZVdoZWVsCiAgICAgICAgIC8vIEJlZ2luIHRyYWNraW5nIHdoZWVs
IGRlbHRhcyBmb3IgZ2xpZGUgcHJlZGljdGlvbi4KICAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1h
dGlvbihTY3JvbGxTbmFwU3RhdGU6OlVzZXJJbnRlcmFjdGlvbik7CiAgICAgICAgIHB1c2hJbml0
aWFsV2hlZWxEZWx0YSh3aGVlbERlbHRhKTsKLSAgICAgICAgbV9iZWdpblRyYWNraW5nV2hlZWxE
ZWx0YU9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsKKyAgICAg
ICAgbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZz
ZXRPbkF4aXMobV9heGlzKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFdoZWVsRXZlbnRT
dGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOgpAQCAtMTUwLDEwICsxNTMsMTMgQEAgYm9vbCBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yOjpzaG91bGRPdmVycgogCiB2b2lkIEF4aXNTY3JvbGxTbmFwQW5p
bWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKQogeworICAgIGlmIChtX2N1cnJlbnRT
dGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVhY2hlZCkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgQVNTRVJUKG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xp
ZGluZyB8fCBtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKICAg
ICBmbG9hdCBkZWx0YSA9IG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBp
bmcgPyBjb21wdXRlU25hcERlbHRhKCkgOiBjb21wdXRlR2xpZGVEZWx0YSgpOwogICAgIGlmIChk
ZWx0YSkKLSAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEluQXhpcyhtX2F4aXMsIGRl
bHRhKTsKKyAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbE9uQXhpcyhtX2F4aXMsIGRl
bHRhKTsKICAgICBlbHNlCiAgICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25h
cFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQpOwogfQpAQCAtMTYxLDEyICsxNjcsMTUgQEAgdm9p
ZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzY3JvbGxTbmFwQQogdm9pZCBBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlIG5ld1N0
YXRlKQogewogICAgIEFTU0VSVChuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcg
fHwgbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7Ci0gICAgTGF5b3V0VW5p
dCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CisgICAgTGF5
b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlzKG1fYXhpcyk7CiAg
ICAgZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEgPSBuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6
OkdsaWRpbmcgPyBhdmVyYWdlSW5pdGlhbFdoZWVsRGVsdGEoKSA6IDA7CiAgICAgTGF5b3V0VW5p
dCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0
ZTo6R2xpZGluZyA/IG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQgKyBMYXlvdXRVbml0
KHByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2UoaW5pdGlhbFdoZWVsRGVsdGEpKSA6IG9m
ZnNldDsKLSAgICBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4
KHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBtX3NuYXBPZmZzZXRzLT5maXJzdCgpKSwgbV9z
bmFwT2Zmc2V0cy0+bGFzdCgpKTsKKyAgICBpZiAobV9zbmFwT2Zmc2V0cy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gc3RkOjpt
aW4oc3RkOjptYXgocHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24sIG1fc25hcE9mZnNldHMuZmly
c3QoKSksIG1fc25hcE9mZnNldHMubGFzdCgpKTsKICAgICBtX2luaXRpYWxPZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgbV90YXJnZXRPZmZzZXQgPSBjbG9zZXN0U25hcE9mZnNldDxMYXlvdXRVbml0LCBm
bG9hdD4oKm1fc25hcE9mZnNldHMsIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBpbml0aWFs
V2hlZWxEZWx0YSk7CisgICAgbV90YXJnZXRPZmZzZXQgPSBjbG9zZXN0U25hcE9mZnNldDxMYXlv
dXRVbml0LCBmbG9hdD4obV9zbmFwT2Zmc2V0cywgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24s
IGluaXRpYWxXaGVlbERlbHRhKTsKICAgICBpZiAobV9pbml0aWFsT2Zmc2V0ID09IG1fdGFyZ2V0
T2Zmc2V0KQogICAgICAgICByZXR1cm47CiAKQEAgLTIwMyw3ICsyMTIsNyBAQCB2b2lkIEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6OmVuZFNjcm9sbFNuCiAvLyByZWxhdGlvbnNoaXAgb2YgdGhlIGRp
c3RhbmNlIHRyYXZlbGVkLCBjbGFtcGVkIGJ5IGFyYml0cmFyeSBtaW4gYW5kIG1heCB2YWx1ZXMu
CiBmbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjb21wdXRlU25hcERlbHRhKCkgY29uc3QK
IHsKLSAgICBMYXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMo
bV9heGlzKTsKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRP
bkF4aXMobV9heGlzKTsKICAgICBib29sIGNhbkNvbXB1dGVTbmFwID0gIChtX2luaXRpYWxPZmZz
ZXQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZz
ZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IDw9IG1faW5pdGlhbE9mZnNldCk7CiAgICAgaWYgKG1fY3Vy
cmVudFN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcgfHwgIWNhbkNvbXB1dGVTbmFw
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTIzNyw3ICsyNDYsNyBAQCBmbG9hdCBBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yOjpjb21wdXRlU25hCiAvLyBhbmQgVkYuIFRodXMsIHdlIGNhbiBleHByZXNz
IG91ciBnbGlkaW5nIGVxdWF0aW9uIGFsbCBpbiB0ZXJtcyBvZiBWMCwgVkYgYW5kIHQuCiBmbG9h
dCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjb21wdXRlR2xpZGVEZWx0YSgpIGNvbnN0CiB7Ci0g
ICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhp
cyk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlz
KG1fYXhpcyk7CiAgICAgYm9vbCBjYW5Db21wdXRlR2xpZGUgPSAobV9pbml0aWFsT2Zmc2V0IDw9
IG9mZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCkgfHwgKG1fdGFyZ2V0T2Zmc2V0IDwg
b2Zmc2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxPZmZzZXQpOwogICAgIGlmIChtX2N1cnJlbnRT
dGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgIWNhbkNvbXB1dGVHbGlkZSkKICAg
ICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMuaAkocmV2aXNpb24gMTgwNjQzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDIx
ICszNiwyOSBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbmNsdWRlICJBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yLmgiCisjZW5kaWYKKwogT0JKQ19DTEFTUyBXZWJTY3JvbGxBbmltYXRpb25IZWxw
ZXJEZWxlZ2F0ZTsKIE9CSkNfQ0xBU1MgV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxl
Z2F0ZTsKIE9CSkNfQ0xBU1MgV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwogCiB0eXBlZGVm
IGlkIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyOwogCi0jaWYgIUVOQUJMRShSVUJCRVJfQkFO
RElORykKKyNpZiAhRU5BQkxFKFJVQkJFUl9CQU5ESU5HKSAmJiAhRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKIGNsYXNzIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgeyB9OwogI2VuZGlmCiAKKyNpZiAh
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKK2NsYXNzIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGll
bnQgeyB9OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsYmFy
OwogCi1jbGFzcyBTY3JvbGxBbmltYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciwgcHJp
dmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50IHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTWFjIDog
cHVibGljIFNjcm9sbEFuaW1hdG9yLCBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQsIHB1
YmxpYyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50IHsKIAogcHVibGljOgogICAgIFNjcm9s
bEFuaW1hdG9yTWFjKFNjcm9sbGFibGVBcmVhJik7CkBAIC02OSw2ICs3NywxMiBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3Qgb3ZlcnJp
ZGUgZmluYWw7CiAKK3Byb3RlY3RlZDoKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAg
IHZvaWQgaG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CisgICAgdm9pZCB2ZXJ0aWNh
bFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBSZXRhaW5Q
dHI8aWQ+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyOwogICAgIFJldGFpblB0cjxXZWJTY3JvbGxB
bmltYXRpb25IZWxwZXJEZWxlZ2F0ZT4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZTsK
QEAgLTg1LDggKzk5LDggQEAgcHJpdmF0ZToKICAgICBUaW1lciBtX3NlbmRDb250ZW50QXJlYVNj
cm9sbGVkVGltZXI7CiAgICAgRmxvYXRTaXplIG1fY29udGVudEFyZWFTY3JvbGxlZFRpbWVyU2Ny
b2xsRGVsdGE7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAg
dmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBv
aW50Jik7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92
ZXJyaWRlOwpAQCAtMTYzLDYgKzE3NywyMSBAQCBwcml2YXRlOgogICAgIFRpbWVyIG1fc25hcFJ1
YmJlckJhbmRUaW1lcjsKICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAg
ICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRh
KSBvdmVycmlkZTsKKyAgICB2b2lkIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBMYXlvdXRVbml0IHNjcm9sbE9m
ZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMpIG92ZXJyaWRlOworICAgIHZvaWQgc3RhcnRTY3Jv
bGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3BTY3Jv
bGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVNj
cm9sbFN0YXRlQWZ0ZXJMYXlvdXQoKSBvdmVycmlkZTsKKworICAgIC8vIEZJWE1FOiBGaW5kIGEg
d2F5IHRvIGNvbnNvbGlkYXRlIGJvdGggdGltZXJzIGludG8gb25lIHZhcmlhYmxlLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPiBtX2hvcml6b250YWxTY3JvbGxT
bmFwQW5pbWF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVyPiBtX2hvcml6b250YWxTY3Jv
bGxTbmFwVGltZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+
IG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVy
PiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyOworI2VuZGlmCisKICAgICBib29sIG1faGF2ZVNj
cm9sbGVkU2luY2VQYWdlTG9hZDsKICAgICBib29sIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRl
OwogICAgIEludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCShyZXZpc2lv
biAxODA2NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA3OCw5ICsxMDc4
LDMxIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQKICAgICAgICAg
bWF5QmVnaW5TY3JvbGxHZXN0dXJlKCk7CiB9CiAKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCit7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpCisgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxF
dmVudCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvcikKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZl
bnQpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKKyNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yKSB7Cisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQod2hl
ZWxFdmVudCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5zaG91
bGRPdmVycmlkZVdoZWVsRXZlbnQod2hlZWxFdmVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KHdo
ZWVsRXZlbnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5z
aG91bGRPdmVycmlkZVdoZWVsRXZlbnQod2hlZWxFdmVudCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorI2VuZGlmCiAgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0g
dHJ1ZTsKIAogICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkg
fHwgIXJ1YmJlckJhbmRpbmdFbmFibGVkRm9yU3lzdGVtKCkpCkBAIC0xNDA1LDYgKzE0MjcsNzIg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbAogICAgIG1fdmlzaWJs
ZVNjcm9sbGVyVGh1bWJSZWN0ID0gcmVjdEluVmlld0Nvb3JkaW5hdGVzOwogfQogCisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnVwZGF0ZVNjcm9s
bFN0YXRlQWZ0ZXJMYXlvdXQoKQoreworICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHNjcm9sbCBz
bmFwIGFuaW1hdG9ycyBhcmUgcmVjcmVhdGVkIGV2ZW4gdGhvdWdoIHRoZSBzbmFwIG9mZnNldHMg
YWxvbmUgY2FuIGJlIHVwZGF0ZWQuCisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKCkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvciA9
IHN0ZDo6bWFrZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhpcywgKm1fc2Nyb2xs
YWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCk7CisgICAgZWxzZSBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKSB7Cisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7CisgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0cygpKQorICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yPih0aGlzLCAqbV9zY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWwpOworICAgIGVsc2UgaWYgKG1fdmVydGljYWxTY3JvbGxT
bmFwQW5pbWF0b3IpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvciA9IG51
bGxwdHI7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIgPSBudWxscHRyOworICAg
IH0KK30KKworTGF5b3V0VW5pdCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsT2Zmc2V0T25BeGlz
KFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9u
ID0gdGhpcy0+Y3VycmVudFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsID8gY3VycmVudFBvc2l0aW9uLngoKSA6IGN1cnJlbnRQb3NpdGlv
bi55KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbE9uQXhp
cyhTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVsdGEpCit7CisgICAgRmxvYXRQb2ludCBj
dXJyZW50UG9zaXRpb24gPSB0aGlzLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICBpZiAoYXhpcyA9
PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KGN1cnJlbnRQb3NpdGlvbi54KCkgKyBkZWx0YSwgY3Vy
cmVudFBvc2l0aW9uLnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQoY3VycmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0
aW9uLnkoKSArIGRlbHRhKSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnN0YXJ0U2Ny
b2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0
cjxUaW1lcj4mIHNjcm9sbFNuYXBUaW1lciA9IChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbCkgPyBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgOiBtX3ZlcnRpY2FsU2Nyb2xs
U25hcFRpbWVyOworICAgIAorICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCkKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxUaW1lcj4oKnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbFNu
YXBUaW1lckZpcmVkKTsKKyAgICBlbHNlCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwVGlt
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTWFjOjp2
ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKKworICAgIGlmIChzY3JvbGxTbmFwVGltZXIg
JiYgIXNjcm9sbFNuYXBUaW1lci0+aXNBY3RpdmUoKSkKKyAgICAgICAgc2Nyb2xsU25hcFRpbWVy
LT5zdGFydFJlcGVhdGluZygxLjAgLyA2MC4wKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6c3RvcFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBpZiAo
VGltZXIqIHNjcm9sbFNuYXBUaW1lciA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyLmdldCgpIDogbV92ZXJ0aWNhbFNjcm9s
bFNuYXBUaW1lci5nZXQoKSkKKyAgICAgICAgc2Nyb2xsU25hcFRpbWVyLT5zdG9wKCk7Cit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgp
Cit7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvcikKKyAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5zY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCk7
Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyRmly
ZWQoKQoreworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yKQorICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5zY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCk7
Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFNNT09USF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxODA2NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbmNsdWRl
IDxDYXJib24vQ2FyYm9uLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHJldmlzaW9uIDE4MDY0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0ODIsNyArMzQ4Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckwKICAgICB1cGRhdGVTbmFwT2Zmc2V0
cygpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFu
aW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3ItPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOworICAgICAgICByZXR1
cm4gc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbFN0YXRlQWZ0ZXJMYXlvdXQoKTsKICNlbmRp
ZgogI2VuZGlmCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247476</attachid>
            <date>2015-02-26 17:47:08 -0800</date>
            <delta_ts>2015-03-02 20:28:19 -0800</delta_ts>
            <desc>Patch - Updated from earlier review comments.</desc>
            <filename>bug-141973-20150226174655.patch</filename>
            <type>text/plain</type>
            <size>37192</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDcwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE1LTAyLTI2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNjcm9sbCBzbmFwIHBvaW50
cyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGUgbWFpbiBmcmFtZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxOTczCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xOTkzODM5Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcGRhdGUgdGhlIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMgY2xh
c3MgdG8gaW1wbGVtZW50IHRoZSBkZWxlZ2F0ZSBpbnRlcmZhY2UgbmVlZGVkIGJ5IHRoZQorICAg
ICAgICBBeGlzU2Nyb2xsQW5pbWF0b3IuIFRoaXMgaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKKyAg
ICAgICAgMS4gSW1wbGVtZW50IHNjcm9sbE9mZnNldE9uQXhpczogVXNlZCBieSB0aGUgQXhpc1Nj
cm9sbEFuaW1hdG9yIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgU2Ny
b2xsYWJsZUFyZWEuCisgICAgICAgIDIuIEltcGxlbWVudCBpbW1lZGlhdGVTY3JvbGxPbkF4aXM6
IFVzZWQgYnkgdGhlIEF4aXNTY3JvbGxBbmltYXRvciB0byBzY3JvbGwgdGhlIFNjcm9sbGFibGVB
cmVhCisgICAgICAgIDMuIEltcGxlbWVudCBzdGFydFNjcm9sbFNuYXBUaW1lcjogVXNlZCBieSBB
eGlzU2Nyb2xsQW5pbWF0b3IgdG8gYmVnaW4gdGhlIGFuaW1hdGlvbiB0aW1lci4KKyAgICAgICAg
NC4gSW1wbGVtZW50IHN0b3BTY3JvbGxTbmFwVGltZXI6IFVzZWQgYnkgQXhpc1Njcm9sbEFuaW1h
dG9yIHRvIGVuZCB0aGUgYW5pbWF0aW9uIHRpbWVyLgorICAgICAgICAKKyAgICAgICAgQ3VycmVu
dGx5LCB0aGUgYW5pbWF0aW9uIHRpbWVycyBhcmUgb3duZWQgYnkgdGhlIEFuaW1hdG9yTWFjL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMsIGJlY2F1c2UKKyAgICAgICAgZGlmZmVy
ZW50IHR5cGVzIG9mIHRpbWVycyBhcmUgbmVlZGVkIG9uIHRoZSBtYWluIGFuZCBzY3JvbGxpbmcg
dGhyZWFkcy4gU2VwYXJhdGUgd29yayBpcyBiZWluZyBkb25lIHRvCisgICAgICAgIGNvbnNvbGlk
YXRlIHRoaXMuCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6IE1vdmUgY2FsbCB0
byBwbGF0Zm9ybU5vdGlmeVNuYXBJZk5lY2Vzc2FyeSBmcm9tIGhhbmRsZVdoZWVsRXZlbnQgdG8g
cGxhdGZvcm1Db21wbGV0ZVdoZWVsRXZlbnQuCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tOiBNb3ZlIGNhbGwgdG8gcGxhdGZvcm1Ob3RpZnlTbmFwSWZOZWNlc3NhcnkgdG8g
aGVyZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZU1hYy5oOiBJbXBsZW1lbnQgdGhlIEF4aXNTY3JvbGxBbmltYXRvckNsaWVudCBp
bnRlcmZhY2UuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlTWFjOjp+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYyk6
IE1ha2Ugc3VyZSB0aGUgc2Nyb2xsIHNuYXAKKyAgICAgICAgcG9pbnQgdGltZXJzIGFyZSBjbGVh
bmVkIHVwLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEZsb2F0VG9MYXlvdXRVbml0cyk6IEFk
ZGVkIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVNYWM6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKTogUmVjb2duaXplIGFuZCBy
ZWFjdCB0byBjaGFuZ2VzIHRvCisgICAgICAgIFNjcm9sbCBTbmFwIFBvaW50cyBvbiB0b3AtbGV2
ZWwgZnJhbWVzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYzo6aGFuZGxlV2hlZWxFdmVudCk6IFBlcmZvcm0gU2Nyb2xsIFNuYXAgUG9pbnQgZnVu
Y3Rpb25zIG5lZWRlZAorICAgICAgICBkdXJpbmcgd2hlZWwgZXZlbnRzLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xsT2Zmc2V0T25B
eGlzKTogSW1wbGVtZW50IGRlbGVnYXRlIG1ldGhvZCBuZWVkZWQgYnkgdGhlCisgICAgICAgIEF4
aXNTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxPbkF4aXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWM6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzdG9wU2Nyb2xsU25hcFRpbWVyKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
OjpzY3JvbGxTbmFwVGltZXJGaXJlZCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmNwcDogTW92ZSBTY3JvbGwgU25hcCBQb2ludCBjb2RlIGRvd24gdG8gdGhlIFNj
cm9sbEFuaW1hdG9yTWFjIGxldmVsLCBzaW5jZSBpdCBpcyBub3QKKyAgICAgICAgdXNlZCBieSBv
dGhlciBwb3J0cyAoaW5jbHVkaW5nIGlPUyEpCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbE9mZnNldElu
QXhpcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aW1tZWRp
YXRlU2Nyb2xsSW5BeGlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzdGFydFNjcm9sbFNuYXBUaW1lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvcjo6c3RvcFNjcm9sbFNuYXBUaW1lcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp2ZXJ0aWNhbFNjcm9s
bFNuYXBUaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbEFu
aW1hdG9yc0FuZFRpbWVycyk6IEFkZCBzdHViIGltcGxlbWVudGF0aW9ucyBmb3Igbm9uLU1hYyBw
b3J0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpwcm9jZXNzV2hlZWxFdmVu
dEZvclNjcm9sbFNuYXApOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQXhpc1Njcm9s
bFNuYXBBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFu
aW1hdG9yLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6QXhp
c1Njcm9sbFNuYXBBbmltYXRvcik6IFN0b3JlIHRoZSBWZWN0b3Igb2YgTGF5b3V0VW5pdHMgYXMg
YSB2YWx1ZSBzaW5jZSBpdAorICAgICAgICB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUg
dGhyZWFkcy4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9s
bFNuYXBBbmltYXRpb25VcGRhdGUpOiBIYW5kbGUgZWRnZSBjYXNlIG9mIGRlc3RpbmF0aW9uIGJl
aW5nIHJlYWNoZWQgd2hpbGUKKyAgICAgICAgYW5pbWF0aW9uIGV2ZW50cyBhcmUgc3RpbGwgaGFw
cGVuaW5nLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YmVnaW5T
Y3JvbGxTbmFwQW5pbWF0aW9uKTogUHJvdGVjdCBhZ2FpbnN0IGVtcHR5IHNuYXAgcG9pbnQgY2Fz
ZSBJIGVuY291bnRlcmVkCisgICAgICAgIGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW06IE1vdmUgaW1wbGVtZW50YXRpb24gZnJvbSBTY3JvbGxBbmlt
YXRvciBiYXNlIGNsYXNzIHNpbmNlIGl0IGlzIG9ubHkgdXNlZAorICAgICAgICBieSB0aGUgTWFj
IHBvcnQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6cHJvY2Vzc1doZWVs
RXZlbnRGb3JTY3JvbGxTbmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFj
Ojp1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OnNjcm9sbE9mZnNldE9uQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsT25BeGlzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzdGFydFNjcm9sbFNuYXBUaW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6c3RvcFNjcm9sbFNuYXBUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9s
bFNuYXBUaW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVN
YWMubW06IFJlbW92ZSB1bm5lZWRlZCBoZWFkZXIgaW5jbHVkZS4KKwogMjAxNS0wMi0yNiAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgIUVO
QUJMRShHRU9MT0NBVElPTikgYnVpbGQgYWZ0ZXIgcjE4MDUzMwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTgwNzAyKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjc2LDExICsyNjc2LDYg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29ucwogICAgICAgICAgICAg
ICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEt
PnNldFNjcm9sbGVkUHJvZ3JhbW1hdGljYWxseShmYWxzZSk7CiAgICAgICAgICAgICB9Ci0KLSNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVh
KQotICAgICAgICAgICAgICAgIHBsYXRmb3JtTm90aWZ5U25hcElmTmVjZXNzYXJ5KGFkanVzdGVk
RXZlbnQsICpzY3JvbGxhYmxlQXJlYSk7Ci0jZW5kaWYKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRI
YW5kbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50
SGFuZGxlck1hYy5tbQkocmV2aXNpb24gMTgwNzAyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NjEsNiArOTYxLDEyIEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlV2hlZWwKICAgICAKICAgICBib29s
IGRpZEhhbmRsZUV2ZW50ID0gdmlldyA/IHZpZXctPndoZWVsRXZlbnQod2hlZWxFdmVudCkgOiBm
YWxzZTsKICAgICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50ID0gZmFsc2U7CisKKyNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQorICAgIGlmIChzY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcGxhdGZv
cm1Ob3RpZnlTbmFwSWZOZWNlc3Nhcnkod2hlZWxFdmVudCwgKnNjcm9sbGFibGVBcmVhKTsKKyNl
bmRpZgorCiAgICAgcmV0dXJuIGRpZEhhbmRsZUV2ZW50OwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1h
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgJKHJldmlzaW9uIDE4MDcwMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTEgKzMzLDE5IEBACiAjaW5jbHVk
ZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW5jbHVkZSAiQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5oIgorI2VuZGlmCisKIE9CSkNfQ0xBU1MgQ0FMYXllcjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjIDogcHVibGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUsIHByaXZhdGUgU2Ny
b2xsQ29udHJvbGxlckNsaWVudCB7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK2NsYXNz
IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMgOiBwdWJsaWMgU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZSwgcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50LCBwdWJs
aWMgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCAgeworI2Vsc2UKK2NsYXNzIFNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZSwgcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50ICB7CisjZW5kaWYKIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJ
RCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYygpOwpA
QCAtNjUsNiArNzMsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFNuYXBSdWJi
ZXJiYW5kVGltZXIoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xsUG9z
aXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQorICAgIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50
QXhpcykgb3ZlcnJpZGU7CisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZl
bnRBeGlzLCBmbG9hdCB2ZWxvY2l0eSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGFydFNjcm9sbFNu
YXBUaW1lcihTY3JvbGxFdmVudEF4aXMpIG92ZXJyaWRlOworICAgIHZvaWQgc3RvcFNjcm9sbFNu
YXBUaW1lcihTY3JvbGxFdmVudEF4aXMpIG92ZXJyaWRlOworCisgICAgdm9pZCBzY3JvbGxTbmFw
VGltZXJGaXJlZChTY3JvbGxFdmVudEF4aXMpOworI2VuZGlmCisKICAgICB2aXJ0dWFsIEZsb2F0
UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNv
bnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKQEAgLTg1LDYgKzEwMiwxMyBAQCBwcml2YXRlOgog
ICAgIFNjcm9sbENvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxD
RlJ1bkxvb3BUaW1lclJlZj4gbV9zbmFwUnViYmVyYmFuZFRpbWVyOwogCisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXhpc1Njcm9sbFNuYXBBbmltYXRv
cj4gbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yPiBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yOworICAg
IFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVy
OworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV92ZXJ0aWNhbFNjcm9sbFNuYXBU
aW1lcjsKKyNlbmRpZgorCiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CiAg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOwogICAgIFJldGFp
blB0cjxDQUxheWVyPiBtX2NvdW50ZXJTY3JvbGxpbmdMYXllcjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCShyZXZpc2lvbiAxODA3MDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw4ICs2OCwyNCBAQCBT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp+U2NyCiB7CiAgICAgaWYgKG1fc25h
cFJ1YmJlcmJhbmRUaW1lcikKICAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fc25h
cFJ1YmJlcmJhbmRUaW1lci5nZXQoKSk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBU
aW1lcikKKyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBUaW1lci5nZXQoKSk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIpCisg
ICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVy
LmdldCgpKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitzdGF0aWMgaW5saW5l
IFZlY3RvcjxMYXlvdXRVbml0PiBjb252ZXJ0VG9MYXlvdXRVbml0cyhjb25zdCBWZWN0b3I8Zmxv
YXQ+JiBzbmFwT2Zmc2V0c0FzRmxvYXQpCit7CisgICAgVmVjdG9yPExheW91dFVuaXQ+IHNuYXBP
ZmZzZXRzOworICAgIHNuYXBPZmZzZXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc25hcE9mZnNl
dHNBc0Zsb2F0LnNpemUoKSk7CisgICAgZm9yIChhdXRvIG9mZnNldCA6IHNuYXBPZmZzZXRzQXNG
bG9hdCkKKyAgICAgICAgc25hcE9mZnNldHMuYXBwZW5kKG9mZnNldCk7CisgICAgCisgICAgcmV0
dXJuIHNuYXBPZmZzZXRzOworfQorI2VuZGlmCisKIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZU1hYzo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVO
b2RlJiBzdGF0ZU5vZGUpCiB7CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6
dXBkYXRlQmVmb3JlQ2hpbGRyZW4oc3RhdGVOb2RlKTsKQEAgLTEyMSw2ICsxMzcsMTQgQEAgdm9p
ZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOgogICAgICAgICBpZiAoc2Nyb2xs
aW5nVHJlZSgpLnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkKICAgICAgICAg
ICAgIGxvZ1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKHNjcm9sbGluZ1N0YXRlTm9kZS53
aGVlbEV2ZW50SGFuZGxlckNvdW50KCkpOwogICAgIH0KKworI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykpCisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8
QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhpcywgY29udmVydFRvTGF5b3V0VW5pdHMoc2Nyb2xs
aW5nU3RhdGVOb2RlLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKSwgU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRz
KSkKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvciA9IHN0ZDo6bWFrZV91bmlx
dWU8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhpcywgY29udmVydFRvTGF5b3V0VW5pdHMoc2Ny
b2xsaW5nU3RhdGVOb2RlLnZlcnRpY2FsU25hcE9mZnNldHMoKSksIFNjcm9sbEV2ZW50QXhpczo6
VmVydGljYWwpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYzo6dXBkYXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0
YXRlTm9kZSkKQEAgLTE1Myw2ICsxNzcsMTMgQEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlTWFjOgogICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlciBzZXRV
c2VQcmVzZW50YXRpb25WYWx1ZTpOT107CiAgICAgfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKQorICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVu
dCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpCisgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Cisj
ZW5kaWYKKwogICAgIG1fc2Nyb2xsQ29udHJvbGxlci5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZl
bnQpOwogICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0Y2hlZE5vZGUod2hlZWxFdmVu
dCwgc2Nyb2xsaW5nTm9kZUlEKCkpOwogICAgIHNjcm9sbGluZ1RyZWUoKS5oYW5kbGVXaGVlbEV2
ZW50UGhhc2Uod2hlZWxFdmVudC5waGFzZSgpKTsKQEAgLTU0MCw2ICs1NzEsNjYgQEAgdm9pZCBs
b2dXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCh1bgogICAgIFdURkxvZ0Fsd2F5cygiU0NS
T0xMSU5HOiBXaGVlbCBldmVudCBoYW5kbGVyIGNvdW50IGNoYW5nZWQuIFRpbWU6ICVmIENvdW50
OiAldVxuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgY291bnQpOwogfQog
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK0xheW91dFVuaXQgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xsT2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcyBh
eGlzKQoreworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24o
KTsKKyAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBjdXJy
ZW50UG9zaXRpb24ueCgpIDogY3VycmVudFBvc2l0aW9uLnkoKTsKK30KKwordm9pZCBTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xs
RXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlbHRhKQoreworICAgIEZsb2F0UG9pbnQgY3VycmVudFBv
c2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKKyAgICBGbG9hdFBvaW50IGNoYW5nZTsKKyAgICBp
ZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpCisgICAgICAgIGNoYW5nZSA9
IEZsb2F0UG9pbnQoY3VycmVudFBvc2l0aW9uLngoKSArIGRlbHRhLCBjdXJyZW50UG9zaXRpb24u
eSgpKTsKKyAgICBlbHNlCisgICAgICAgIGNoYW5nZSA9IEZsb2F0UG9pbnQoY3VycmVudFBvc2l0
aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSArIGRlbHRhKTsKKworICAgIGltbWVkaWF0ZVNj
cm9sbEJ5KGNoYW5nZSAtIGN1cnJlbnRQb3NpdGlvbik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c3RhcnRTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMpCit7CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiYgdGltZXIgPSAo
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpID8gbV9ob3Jpem9udGFsU2Nyb2xs
U25hcFRpbWVyIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcjsKKyAgICBpZiAodGltZXIpIHsK
KyAgICAgICAgLy8gVG9zcyBvdXQgb2xkIGFuaW1hdGlvbiBhbmQgc3RhcnQgbmV3IG9uZS4KKyAg
ICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKHRpbWVyLmdldCgpKTsKKyAgICAgICAgdGlt
ZXIgPSBudWxscHRyOworICAgICAgICBBU1NFUlQoIXRpbWVyKTsKKyAgICB9CisgICAgCisgICAg
Q0ZUaW1lSW50ZXJ2YWwgdGltZXJJbnRlcnZhbCA9IDEuMCAvIDYwLjA7CisgICAgCisgICAgdGlt
ZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlV2l0aEhhbmRsZXIoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyB0aW1lckludGVydmFsLCB0aW1l
ckludGVydmFsLCAwLCAwLCBeKENGUnVuTG9vcFRpbWVyUmVmKSB7CisgICAgICAgIHNjcm9sbFNu
YXBUaW1lckZpcmVkKGF4aXMpOworICAgIH0pKTsKKyAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1
bkxvb3BHZXRDdXJyZW50KCksIHRpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwor
fQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BTY3JvbGxT
bmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgUmV0YWluUHRyPENGUnVuTG9v
cFRpbWVyUmVmPiYgdGltZXIgPSAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwp
ID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1l
cjsKKyAgICBpZiAoIXRpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlJ1bkxvb3BUaW1l
ckludmFsaWRhdGUodGltZXIuZ2V0KCkpOworICAgIHRpbWVyID0gbnVsbHB0cjsKKyAgICBBU1NF
UlQoIXRpbWVyKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
OjpzY3JvbGxTbmFwVGltZXJGaXJlZChTY3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBpZiAo
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpIHsKKyAgICAgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBBbmltYXRvci0+c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yKQorICAgICAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvci0+c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgp
OworICAgIH0KK30KKyNlbmRpZgorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oTUFDKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMTgwNzAy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MCwzMCArODAsOCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGxUb09m
ZnNldFdpdGhvCiAgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKIH0KIAotI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLXZvaWQgU2Nyb2xsQW5pbWF0
b3I6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3Ip
Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZlbnQo
d2hlZWxFdmVudCk7Ci0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvcikKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KHdo
ZWVsRXZlbnQpOwotfQotI2VuZGlmCi0KIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogewotI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbFNuYXBB
bmltYXRvcikgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5oYW5kbGVX
aGVlbEV2ZW50KGUpOwotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvci0+
c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKSB7Ci0gICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+aGFuZGxlV2hlZWxFdmVudChlKTsKLSAg
ICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+c2hvdWxkT3ZlcnJpZGVX
aGVlbEV2ZW50KGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSNlbmRpZgog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIEV2ZW50cyBpbiB0aGUgUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VNYXlCZWdpbiBwaGFzZSBoYXZlIG5vIGRlbHRhcywgYW5kIHRoZXJlZm9yZSBuZXZl
ciBwYXNzZXMgdGhyb3VnaCB0aGUgc2Nyb2xsIGhhbmRsaW5nIGxvZ2ljIGJlbG93LgogICAgIC8v
IFRoaXMgY2F1c2VzIHVzIHRvIHJldHVybiB3aXRoIGFuICd1bmhhbmRsZWQnIHJldHVybiBzdGF0
ZSwgZXZlbiB0aG91Z2ggdGhpcyBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZC4KQEAg
LTE4MCw2NCArMTU4LDQgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFu
ZwogICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQ
b2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CiB9CiAKLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi12b2lkIFNjcm9sbEFuaW1hdG9yOjp1cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKQotewotICAgIC8vIEZJWE1FOiBDdXJyZW50bHks
IHNjcm9sbCBzbmFwIGFuaW1hdG9ycyBhcmUgcmVjcmVhdGVkIGV2ZW4gdGhvdWdoIHRoZSBzbmFw
IG9mZnNldHMgYWxvbmUgY2FuIGJlIHVwZGF0ZWQuCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEu
aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25h
cEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlz
LCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFuaW1hdG9yOjpob3Jpem9udGFs
U2Nyb2xsU25hcFRpbWVyRmlyZWQpOwotICAgIH0gZWxzZSBpZiAobV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvciA9
IG51bGxwdHI7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA9IG51bGxwdHI7
Ci0gICAgfQotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSkg
ewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1
ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2Fs
U25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7Ci0gICAgICAgIG1fdmVy
dGljYWxTY3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNj
cm9sbEFuaW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKLSAgICB9IGVsc2Ug
aWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKLSAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFw
VGltZXIgPSBudWxscHRyOwotICAgIH0KLX0KLQotTGF5b3V0VW5pdCBTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsT2Zmc2V0SW5BeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKQotewotICAgIEZsb2F0UG9p
bnQgY3VycmVudFBvc2l0aW9uID0gdGhpcy0+Y3VycmVudFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJu
IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gY3VycmVudFBvc2l0aW9uLngo
KSA6IGN1cnJlbnRQb3NpdGlvbi55KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OmltbWVk
aWF0ZVNjcm9sbEluQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVsdGEpCi17Ci0g
ICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLT5jdXJyZW50UG9zaXRpb24oKTsK
LSAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpCi0gICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KGN1cnJlbnRQb3NpdGlvbi54
KCkgKyBkZWx0YSwgY3VycmVudFBvc2l0aW9uLnkoKSkpOwotICAgIGVsc2UKLSAgICAgICAgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQoY3VycmVudFBvc2l0aW9uLngo
KSwgY3VycmVudFBvc2l0aW9uLnkoKSArIGRlbHRhKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3I6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBheGlzKQotewotICAgIFRp
bWVyKiBzY3JvbGxTbmFwVGltZXIgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lci5nZXQoKSA6IG1fdmVydGljYWxTY3JvbGxT
bmFwVGltZXIuZ2V0KCk7Ci0gICAgaWYgKCFzY3JvbGxTbmFwVGltZXItPmlzQWN0aXZlKCkpCi0g
ICAgICAgIHNjcm9sbFNuYXBUaW1lci0+c3RhcnRSZXBlYXRpbmcoMS4wIC8gNjAuMCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlz
IGF4aXMpCi17Ci0gICAgVGltZXIqIHNjcm9sbFNuYXBUaW1lciA9IGF4aXMgPT0gU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyLmdldCgpIDog
bV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lci5nZXQoKTsKLSAgICBpZiAoc2Nyb2xsU25hcFRpbWVy
LT5pc0FjdGl2ZSgpKQotICAgICAgICBzY3JvbGxTbmFwVGltZXItPnN0b3AoKTsKLX0KLQotdm9p
ZCBTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCkKLXsKLSAg
ICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3ItPnNjcm9sbFNuYXBBbmltYXRpb25VcGRh
dGUoKTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvcjo6dmVydGljYWxTY3JvbGxTbmFwVGltZXJG
aXJlZCgpCi17Ci0gICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvci0+c2Nyb2xsU25hcEFu
aW1hdGlvblVwZGF0ZSgpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNpb24gMTgw
NzAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDYgQEAKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAm
JiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIgotI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
bG9hdFBvaW50OwpAQCAtNTAsMTEgKzQ1LDcgQEAgY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50Owog
Y2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxiYXI7CiAKLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi1jbGFzcyBTY3JvbGxBbmltYXRvciA6IHB1
YmxpYyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50IHsKLSNlbHNlCiBjbGFzcyBTY3JvbGxB
bmltYXRvciB7Ci0jZW5kaWYKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gY3JlYXRlKFNjcm9sbGFibGVB
cmVhJik7CkBAIC04MSw2ICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgeyB9CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNjcm9s
bFN0YXRlQWZ0ZXJMYXlvdXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1doZWVsRXZl
bnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIHsgfQorI2VuZGlmCisK
ICAgICB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgRmxv
YXRQb2ludCBjdXJyZW50UG9zaXRpb24oKSBjb25zdDsKIApAQCAtMTE2LDM2ICsxMTIsMTQgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExB
VEZPUk0oTUFDKQotICAgIHZvaWQgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5k
VGltZXJzKCk7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbE9mZnNldEluQXhpcyhTY3Jv
bGxFdmVudEF4aXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxJ
bkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0b3BTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzKSBvdmVy
cmlkZTsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3Io
U2Nyb2xsYWJsZUFyZWEmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNoYW5n
ZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSk7CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KSAmJiBQTEFURk9STShNQUMpCi0gICAgLy8gVHJpdmlhbCB3cmFwcGVycyBhcm91bmQgdGhlIGFj
dHVhbCB1cGRhdGUgbG9vcCBpbiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLCBzaW5jZSBXZWJDb3Jl
IFRpbWVyIHJlcXVpcmVzIGEgVGltZXIgYXJndW1lbnQuCi0gICAgdm9pZCBob3Jpem9udGFsU2Ny
b2xsU25hcFRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyRmly
ZWQoKTsKLSNlbmRpZgotCiAgICAgU2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CiAg
ICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2UgYXZvaWQgdXNpbmcgYSBGbG9hdFBvaW50IGlu
IG9yZGVyIHRvIHJlZHVjZQogICAgIGZsb2F0IG1fY3VycmVudFBvc1k7IC8vIHN1YmNsYXNzIGNv
ZGUgY29tcGxleGl0eS4KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShN
QUMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+IG1faG9yaXpv
bnRhbFNjcm9sbFNuYXBBbmltYXRvcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGltZXI+IG1faG9y
aXpvbnRhbFNjcm9sbFNuYXBUaW1lcjsKLSAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjb25z
b2xpZGF0ZSBib3RoIHRpbWVycyBpbnRvIG9uZSB2YXJpYWJsZS4KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4gbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvcjsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGltZXI+IG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXI7Ci0j
ZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaAkocmV2aXNp
b24gMTgwNzAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFw
QW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTUgKzU3LDE1IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIH5BeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KCkgeyB9CiAKIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0SW5BeGlzKFNjcm9sbEV2ZW50
QXhpcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxJbkF4aXMoU2Nyb2xs
RXZlbnRBeGlzLCBmbG9hdCB2ZWxvY2l0eSkgPSAwOworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBz
Y3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHZlbG9jaXR5KSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhp
cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50
QXhpcykgPSAwOwogfTsKIAogY2xhc3MgQXhpc1Njcm9sbFNuYXBBbmltYXRvciB7CiBwdWJsaWM6
Ci0gICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvcihBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50
KiwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlz
KTsKKyAgICBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGll
bnQqLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4
aXMpOwogICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KTsKICAgICBib29sIHNob3VsZE92ZXJyaWRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKSBjb25zdDsKICAgICB2b2lkIHNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKTsKQEAg
LTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50IHdoZWVsRGVsdGFX
aW5kb3dTaXplID0gMzsKIAogICAgIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIG1fY2xp
ZW50OwotICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiogbV9zbmFwT2Zmc2V0czsKKyAgICBW
ZWN0b3I8TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0czsKICAgICBTY3JvbGxFdmVudEF4aXMgbV9h
eGlzOwogICAgIC8vIFVzZWQgdG8gdHJhY2sgYm90aCBzbmFwcGluZyBhbmQgZ2xpZGluZyBiZWhh
dmlvcnMuCiAgICAgU2Nyb2xsU25hcFN0YXRlIG1fY3VycmVudFN0YXRlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3Iu
bW0JKHJldmlzaW9uIDE4MDcwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHN0
YXRpYyBpbmxpbmUgZmxvYXQgcHJvamVjdGVkSW5lcnRpYWxTY3IKICAgICByZXR1cm4gaW5lcnRp
YWxTY3JvbGxQcmVkaWN0aW9uRmFjdG9yICogaW5pdGlhbFdoZWVsRGVsdGE7CiB9CiAKLUF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBB
bmltYXRvckNsaWVudCogY2xpZW50LCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIHNuYXBPZmZz
ZXRzLCBTY3JvbGxFdmVudEF4aXMgYXhpcykKK0F4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OkF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCogY2xpZW50LCBj
b25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4aXMgYXhp
cykKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fc25hcE9mZnNldHMoc25hcE9mZnNl
dHMpCiAgICAgLCBtX2F4aXMoYXhpcykKQEAgLTEwNSwxMCArMTA1LDEzIEBAIHZvaWQgQXhpc1Nj
cm9sbFNuYXBBbmltYXRvcjo6aGFuZGxlV2hlZWwKIAogICAgIHN3aXRjaCAod2hlZWxTdGF0dXMp
IHsKICAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKLSAgICBjYXNl
IFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc6CiAgICAgICAgIGVuZFNjcm9sbFNuYXBB
bmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpVc2VySW50ZXJhY3Rpb24pOwogICAgICAgICBicmVh
azsKIAorICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzoKKyAgICAgICAg
Ly8gRG8gbm90aGluZy4KKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFdoZWVsRXZlbnRTdGF0
dXM6OlVzZXJTY3JvbGxFbmQ6CiAgICAgICAgIGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3Jv
bGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTcsNyArMTIwLDcg
QEAgdm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpoYW5kbGVXaGVlbAogICAgICAgICAvLyBC
ZWdpbiB0cmFja2luZyB3aGVlbCBkZWx0YXMgZm9yIGdsaWRlIHByZWRpY3Rpb24uCiAgICAgICAg
IGVuZFNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpVc2VySW50ZXJhY3Rpb24p
OwogICAgICAgICBwdXNoSW5pdGlhbFdoZWVsRGVsdGEod2hlZWxEZWx0YSk7Ci0gICAgICAgIG1f
YmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5B
eGlzKG1fYXhpcyk7CisgICAgICAgIG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQgPSBt
X2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlzKG1fYXhpcyk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzoKQEAgLTE1MCwxMCAr
MTUzLDEzIEBAIGJvb2wgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6c2hvdWxkT3ZlcnIKIAogdm9p
ZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCkKIHsK
KyAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJl
YWNoZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0
YXRlOjpTbmFwcGluZyk7CiAgICAgZmxvYXQgZGVsdGEgPSBtX2N1cnJlbnRTdGF0ZSA9PSBTY3Jv
bGxTbmFwU3RhdGU6OlNuYXBwaW5nID8gY29tcHV0ZVNuYXBEZWx0YSgpIDogY29tcHV0ZUdsaWRl
RGVsdGEoKTsKICAgICBpZiAoZGVsdGEpCi0gICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3Jv
bGxJbkF4aXMobV9heGlzLCBkZWx0YSk7CisgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3Jv
bGxPbkF4aXMobV9heGlzLCBkZWx0YSk7CiAgICAgZWxzZQogICAgICAgICBlbmRTY3JvbGxTbmFw
QW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRpb25SZWFjaGVkKTsKIH0KQEAgLTE2
MSwxMiArMTY3LDE1IEBAIHZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6c2Nyb2xsU25hcEEK
IHZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNj
cm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKIHsKICAgICBBU1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xs
U25hcFN0YXRlOjpHbGlkaW5nIHx8IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBp
bmcpOwotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhp
cyhtX2F4aXMpOworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNl
dE9uQXhpcyhtX2F4aXMpOwogICAgIGZsb2F0IGluaXRpYWxXaGVlbERlbHRhID0gbmV3U3RhdGUg
PT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nID8gYXZlcmFnZUluaXRpYWxXaGVlbERlbHRhKCkg
OiAwOwogICAgIExheW91dFVuaXQgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPSBuZXdTdGF0
ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgPyBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRh
T2Zmc2V0ICsgTGF5b3V0VW5pdChwcm9qZWN0ZWRJbmVydGlhbFNjcm9sbERpc3RhbmNlKGluaXRp
YWxXaGVlbERlbHRhKSkgOiBvZmZzZXQ7Ci0gICAgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24g
PSBzdGQ6Om1pbihzdGQ6Om1heChwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgbV9zbmFwT2Zm
c2V0cy0+Zmlyc3QoKSksIG1fc25hcE9mZnNldHMtPmxhc3QoKSk7CisgICAgaWYgKG1fc25hcE9m
ZnNldHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9qZWN0ZWRTY3JvbGxE
ZXN0aW5hdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9u
LCBtX3NuYXBPZmZzZXRzLmZpcnN0KCkpLCBtX3NuYXBPZmZzZXRzLmxhc3QoKSk7CiAgICAgbV9p
bml0aWFsT2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fdGFyZ2V0T2Zmc2V0ID0gY2xvc2VzdFNuYXBP
ZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KCptX3NuYXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxE
ZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIG1fdGFyZ2V0T2Zmc2V0ID0gY2xv
c2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KG1fc25hcE9mZnNldHMsIHByb2plY3Rl
ZFNjcm9sbERlc3RpbmF0aW9uLCBpbml0aWFsV2hlZWxEZWx0YSk7CiAgICAgaWYgKG1faW5pdGlh
bE9mZnNldCA9PSBtX3RhcmdldE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDMsNyAr
MjEyLDcgQEAgdm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjplbmRTY3JvbGxTbgogLy8gcmVs
YXRpb25zaGlwIG9mIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZCwgY2xhbXBlZCBieSBhcmJpdHJhcnkg
bWluIGFuZCBtYXggdmFsdWVzLgogZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y29tcHV0
ZVNuYXBEZWx0YSgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+
c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2Ns
aWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlzKG1fYXhpcyk7CiAgICAgYm9vbCBjYW5Db21wdXRlU25h
cCA9ICAobV9pbml0aWFsT2Zmc2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9mZnNl
dCkgfHwgKG1fdGFyZ2V0T2Zmc2V0IDwgb2Zmc2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxPZmZz
ZXQpOwogICAgIGlmIChtX2N1cnJlbnRTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5n
IHx8ICFjYW5Db21wdXRlU25hcCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMzcsNyArMjQ2LDcg
QEAgZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y29tcHV0ZVNuYQogLy8gYW5kIFZGLiBU
aHVzLCB3ZSBjYW4gZXhwcmVzcyBvdXIgZ2xpZGluZyBlcXVhdGlvbiBhbGwgaW4gdGVybXMgb2Yg
VjAsIFZGIGFuZCB0LgogZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y29tcHV0ZUdsaWRl
RGVsdGEoKSBjb25zdAogewotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9s
bE9mZnNldEluQXhpcyhtX2F4aXMpOworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQt
PnNjcm9sbE9mZnNldE9uQXhpcyhtX2F4aXMpOwogICAgIGJvb2wgY2FuQ29tcHV0ZUdsaWRlID0g
KG1faW5pdGlhbE9mZnNldCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQpIHx8
IChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgPD0gbV9pbml0aWFsT2Zmc2V0KTsK
ICAgICBpZiAobV9jdXJyZW50U3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8ICFj
YW5Db21wdXRlR2xpZGUpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlzaW9uIDE4MDcwMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwyMSArMzYsMjkgQEAKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW5j
bHVkZSAiQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIgorI2VuZGlmCisKIE9CSkNfQ0xBU1MgV2Vi
U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CiBPQkpDX0NMQVNTIFdlYlNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CiBPQkpDX0NMQVNTIFdlYlNjcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZTsKIAogdHlwZWRlZiBpZCBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlcjsKIAotI2lm
ICFFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisjaWYgIUVOQUJMRShSVUJCRVJfQkFORElORykgJiYg
IUVOQUJMRShDU1NfU0NST0xMX1NOQVApCiBjbGFzcyBTY3JvbGxDb250cm9sbGVyQ2xpZW50IHsg
fTsKICNlbmRpZgogCisjaWYgIUVOQUJMRShDU1NfU0NST0xMX1NOQVApCitjbGFzcyBBeGlzU2Ny
b2xsU25hcEFuaW1hdG9yQ2xpZW50IHsgfTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFNjcm9sbGJhcjsKIAotY2xhc3MgU2Nyb2xsQW5pbWF0b3JNYWMgOiBwdWJsaWMg
U2Nyb2xsQW5pbWF0b3IsIHByaXZhdGUgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7CitjbGFzcyBT
Y3JvbGxBbmltYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciwgcHJpdmF0ZSBTY3JvbGxD
b250cm9sbGVyQ2xpZW50LCBwdWJsaWMgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCB7CiAK
IHB1YmxpYzoKICAgICBTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSYpOwpAQCAtNjks
NiArNzcsMTIgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFj
dGl2ZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCitwcm90ZWN0ZWQ6CisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKKyAgICB2b2lkIGhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgp
OworICAgIHZvaWQgdmVydGljYWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpOworI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcjsKICAgICBS
ZXRhaW5QdHI8V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0
aW9uSGVscGVyRGVsZWdhdGU7CkBAIC04NSw4ICs5OSw4IEBAIHByaXZhdGU6CiAgICAgVGltZXIg
bV9zZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyOwogICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRB
cmVhU2Nyb2xsZWRUaW1lclNjcm9sbERlbHRhOwogCi0gICAgdmlydHVhbCBib29sIHNjcm9sbChT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0
IG11bHRpcGxpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xs
YmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0
aXBsaWVyKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKQEAgLTE2Myw2ICsxNzcsMjEgQEAgcHJpdmF0ZToK
ICAgICBUaW1lciBtX3NuYXBSdWJiZXJCYW5kVGltZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZl
bnRBeGlzLCBmbG9hdCBkZWx0YSkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzV2hlZWxFdmVu
dEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisgICAg
TGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBvdmVycmlkZTsK
KyAgICB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7
CisgICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7
CisgICAgdm9pZCB1cGRhdGVTY3JvbGxTdGF0ZUFmdGVyTGF5b3V0KCkgb3ZlcnJpZGU7CisKKyAg
ICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjb25zb2xpZGF0ZSBib3RoIHRpbWVycyBpbnRvIG9u
ZSB2YXJpYWJsZS4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4g
bV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUaW1l
cj4gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yPiBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxUaW1lcj4gbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcjsKKyNlbmRpZgor
CiAgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7CiAgICAgYm9vbCBtX25lZWRz
U2Nyb2xsZXJTdHlsZVVwZGF0ZTsKICAgICBJbnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJS
ZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmlt
YXRvck1hYy5tbQkocmV2aXNpb24gMTgwNzAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTQtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEwNzgsOSArMTA3OCwzMSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpoYW5kbGVX
aGVlbEV2ZW50CiAgICAgICAgIG1heUJlZ2luU2Nyb2xsR2VzdHVyZSgpOwogfQogCi0jaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
U25hcEFuaW1hdG9yKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5oYW5k
bGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFw
QW5pbWF0b3IpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+aGFuZGxl
V2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKSB8fCBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogYm9vbCBTY3JvbGxBbmltYXRvck1h
Yzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQp
CiB7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9s
bFNuYXBBbmltYXRvcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5o
YW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9s
bFNuYXBBbmltYXRvci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+
aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbFNuYXBBbmltYXRvci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgogICAgIG1faGF2ZVNjcm9s
bGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CiAKICAgICBpZiAoIXdoZWVsRXZlbnQuaGFzUHJlY2lz
ZVNjcm9sbGluZ0RlbHRhcygpIHx8ICFydWJiZXJCYW5kaW5nRW5hYmxlZEZvclN5c3RlbSgpKQpA
QCAtMTQwNSw2ICsxNDI3LDcyIEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNldFZpc2libGVT
Y3JvbGwKICAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGlu
YXRlczsKIH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjp1cGRhdGVTY3JvbGxTdGF0ZUFmdGVyTGF5b3V0KCkKK3sKKyAgICAvLyBGSVhNRTog
Q3VycmVudGx5LCBzY3JvbGwgc25hcCBhbmltYXRvcnMgYXJlIHJlY3JlYXRlZCBldmVuIHRob3Vn
aCB0aGUgc25hcCBvZmZzZXRzIGFsb25lIGNhbiBiZSB1cGRhdGVkLgorICAgIGlmIChtX3Njcm9s
bGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKQorICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3I+KHRoaXMsICptX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgIGVsc2UgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBBbmltYXRvcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3Ig
PSBudWxscHRyOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgPSBudWxscHRy
OworICAgIH0KKworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMo
KSkKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvciA9IHN0ZDo6bWFrZV91bmlx
dWU8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhpcywgKm1fc2Nyb2xsYWJsZUFyZWEudmVydGlj
YWxTbmFwT2Zmc2V0cygpLCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKKyAgICBlbHNlIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yKSB7CisgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxTbmFwQW5pbWF0b3IgPSBudWxscHRyOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRp
bWVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK0xheW91dFVuaXQgU2Nyb2xsQW5pbWF0b3JNYWM6
OnNjcm9sbE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBGbG9hdFBv
aW50IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMtPmN1cnJlbnRQb3NpdGlvbigpOworICAgIHJldHVy
biBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IGN1cnJlbnRQb3NpdGlvbi54
KCkgOiBjdXJyZW50UG9zaXRpb24ueSgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpp
bW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlbHRhKQor
eworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gdGhpcy0+Y3VycmVudFBvc2l0aW9u
KCk7CisgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKQorICAgICAg
ICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChjdXJyZW50UG9zaXRp
b24ueCgpICsgZGVsdGEsIGN1cnJlbnRQb3NpdGlvbi55KCkpKTsKKyAgICBlbHNlCisgICAgICAg
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KGN1cnJlbnRQb3NpdGlv
bi54KCksIGN1cnJlbnRQb3NpdGlvbi55KCkgKyBkZWx0YSkpOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjpzdGFydFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMgYXhpcykKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGltZXI+JiBzY3JvbGxTbmFwVGltZXIgPSAoYXhpcyA9PSBT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVy
IDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcjsKKworICAgIGlmIChheGlzID09IFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCkKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxUaW1lcj4oKnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6aG9y
aXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKKyAgICBlbHNlCisgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9s
bEFuaW1hdG9yTWFjOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKTsKKworICAgIGlmIChz
Y3JvbGxTbmFwVGltZXIgJiYgIXNjcm9sbFNuYXBUaW1lci0+aXNBY3RpdmUoKSkKKyAgICAgICAg
c2Nyb2xsU25hcFRpbWVyLT5zdGFydFJlcGVhdGluZygxLjAgLyA2MC4wKTsKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6c3RvcFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMgYXhp
cykKK3sKKyAgICBpZiAoVGltZXIqIHNjcm9sbFNuYXBUaW1lciA9IGF4aXMgPT0gU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyLmdldCgpIDog
bV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lci5nZXQoKSkKKyAgICAgICAgc2Nyb2xsU25hcFRpbWVy
LT5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Omhvcml6b250YWxTY3JvbGxT
bmFwVGltZXJGaXJlZCgpCit7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRv
cikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yLT5zY3JvbGxTbmFwQW5p
bWF0aW9uVXBkYXRlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnZlcnRpY2FsU2Ny
b2xsU25hcFRpbWVyRmlyZWQoKQoreworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1h
dG9yKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5zY3JvbGxTbmFwQW5p
bWF0aW9uVXBkYXRlKCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxODA3MDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UuaCIKICNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDE4MDcwMikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0ODIsNyAr
MzQ4Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckwKICAgICB1
cGRhdGVTbmFwT2Zmc2V0cygpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygp
OworICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbFN0YXRlQWZ0ZXJM
YXlvdXQoKTsKICNlbmRpZgogI2VuZGlmCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247744</attachid>
            <date>2015-03-02 20:28:19 -0800</date>
            <delta_ts>2015-03-03 18:11:13 -0800</delta_ts>
            <desc>Updated patch after refactoring in Bug 142102.</desc>
            <filename>mainframe_snap_points.patch</filename>
            <type>text/plain</type>
            <size>13927</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDkwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE1LTAzLTAyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNjcm9sbCBzbmFwIHBvaW50
cyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGUgbWFpbiBmcmFtZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxOTczCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xOTkzODM5Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIHdpbGwgYmUgYWRkZWQgd2hlbiB0aGUgYW5pbWF0
aW9uIGJlaGF2aW9yIGlzIGZpbmFsaXplZC4gTWFudWFsIHRlc3RzIGFyZSBhdHRhY2hlZCB0byB0
aGUgYnVnLgorCisgICAgICAgIFVwZGF0ZSB0aGUgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYyBjbGFzcyB0byBpbXBsZW1lbnQgdGhlIGRlbGVnYXRlIGludGVyZmFjZSBuZWVkZWQg
YnkgdGhlCisgICAgICAgIFNjcm9sbENvbnRyb2xsZXIuIFRoaXMgaW52b2x2ZXMgdGhlIGZvbGxv
d2luZzoKKyAgICAgICAgMS4gSW1wbGVtZW50IHNjcm9sbE9mZnNldE9uQXhpczogVXNlZCBieSB0
aGUgQXhpc1Njcm9sbEFuaW1hdG9yIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBwb3NpdGlvbiBv
ZiB0aGUgU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIDIuIEltcGxlbWVudCBpbW1lZGlhdGVTY3Jv
bGxPbkF4aXM6IFVzZWQgYnkgdGhlIEF4aXNTY3JvbGxBbmltYXRvciB0byBzY3JvbGwgdGhlIFNj
cm9sbGFibGVBcmVhCisKKyAgICAgICAgV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBTY3JvbGwg
U25hcCBQb2ludHMgYXMgYSBWZWN0b3Igb2YgTGF5b3V0VW5pdHMsIHJhdGhlciB0aGFuIGFzIGEg
cG9pbnRlciB0byBhIFZlY3RvciBvZiBMYXlvdXRVbml0cworICAgICAgICBzbyB0aGF0IHRoZXNl
IHZhbHVlcyBjYW4gYmUgdXNlZCBvbiB0aGUgbWFpbiBhbmQgc2Nyb2xsaW5nIHRocmVhZHMuIFNp
bXBseSBzdG9yaW5nIGEgcG9pbnRlciB0byBhIHNldCBvZiBzbmFwIHBvaW50cyB3aWxsIG5vdAor
ICAgICAgICB3b3JrIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgorCisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaDoKKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0xheW91dFVuaXRzKTogQWRkZWQgaGVs
cGVyIGZ1bmN0aW9uIHRvIG1hdGNoIFNjcm9sbCBTbmFwIFBvaW50cyBBUEkuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVCZWZvcmVD
aGlsZHJlbik6IFJlY29nbml6ZSBhbmQgcmVhY3QgdG8gY2hhbmdlcyB0bworICAgICAgICBTY3Jv
bGwgU25hcCBQb2ludHMgb24gdG9wLWxldmVsIGZyYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbE9mZnNldE9uQXhpcyk6IElt
cGxlbWVudCBkZWxlZ2F0ZSBtZXRob2QgbmVlZGVkIGJ5IHRoZSBTY3JvbGxDb250cm9sbGVyLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6aW1t
ZWRpYXRlU2Nyb2xsT25BeGlzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Ny
b2xsQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xs
ZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxB
bmltYXRvcnNBbmRUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6
dXBkYXRlU2Nyb2xsU25hcFBvaW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0F4aXNTY3Jv
bGxTbmFwQW5pbWF0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBB
bmltYXRvci5tbToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2hlZWxFdmVudFN0YXR1cyk6IERvbid0
IGlnbm9yZSB0aGUgIk1heUJlZ2luIiBldmVudCBwaGFzZS4KKyAgICAgICAgKFdlYkNvcmU6OkF4
aXNTY3JvbGxTbmFwQW5pbWF0b3I6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IpOiBSZXZpc2Ugc2ln
bmF0dXJlIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGxheW91dCB1bml0cy4KKyAgICAgICAg
KFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRh
dGUpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQgZnJvbSBh
IHRocmVhZAorICAgICAgICB3aGVuIHRoZSBzY3JvbGxhYmxlIGFyZWEgaGFzIGFscmVhZHkgcmVh
Y2hlZCBpdHMgZmluYWwgZGVzdGluYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24pOiBIYW5kbGUgdGhlIGNhc2Ug
b2YgYW4gZW1wdHkgc2Nyb2xsIHNuYXAgcG9pbnRzIHZlY3Rvci4KKwogMjAxNS0wMy0wMiAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBNZWRpYV0gQWlycGxh
eSBidXR0b24gc2hvdWxkIGJlIGJsdWUgd2hlbiBhY3RpdmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaAkocmV2aXNpb24gMTgwOTAzKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZU1hYy5tbQkocmV2aXNpb24gMTgwOTAzKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsNiArNjgsMTggQEAgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYzo6flNjcgogewogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPExheW91dFVuaXQ+IGNvbnZlcnRUb0xheW91dFVu
aXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzQXNGbG9hdCkKK3sKKyAgICBWZWN0
b3I8TGF5b3V0VW5pdD4gc25hcE9mZnNldHM7CisgICAgc25hcE9mZnNldHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShzbmFwT2Zmc2V0c0FzRmxvYXQuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gb2Zm
c2V0IDogc25hcE9mZnNldHNBc0Zsb2F0KQorICAgIHNuYXBPZmZzZXRzLmFwcGVuZChvZmZzZXQp
OworCisgICAgcmV0dXJuIHNuYXBPZmZzZXRzOworfQorI2VuZGlmCisKIHZvaWQgU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Ny
b2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUpCiB7CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4oc3RhdGVOb2RlKTsKQEAgLTExOSw2ICsx
MzEsMTQgQEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOgogICAgICAg
ICBpZiAoc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQo
KSkKICAgICAgICAgICAgIGxvZ1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKHNjcm9sbGlu
Z1N0YXRlTm9kZS53aGVlbEV2ZW50SGFuZGxlckNvdW50KCkpOwogICAgIH0KKworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFw
T2Zmc2V0cykpCisgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9p
bnRzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY29udmVydFRvTGF5b3V0VW5pdHMoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKSk7CisKKyAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCisgICAgICAgIG1fc2Nyb2xsQ29udHJv
bGxlci51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNv
bnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRz
KCkpKTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWM6OnVwZGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5v
ZGUpCkBAIC01MTMsMTYgKzUzMywyMiBAQCB2b2lkIGxvZ1doZWVsRXZlbnRIYW5kbGVyQ291bnRD
aGFuZ2VkKHVuCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShN
QUMpCi1MYXlvdXRVbml0IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9s
bE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMpCitMYXlvdXRVbml0IFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMg
YXhpcykKIHsKLSAgICAvLyBUZW1wb3Jhcnkgc3R1YiB1bnRpbCBodHRwOi8vd2Via2l0Lm9yZy9i
LzE0MTk3My4KLSAgICByZXR1cm4gMDsKKyAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9
IHNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsID8gY3VycmVudFBvc2l0aW9uLngoKSA6IGN1cnJlbnRQb3NpdGlvbi55KCk7CiB9
CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6aW1tZWRpYXRlU2Ny
b2xsT25BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQpCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVNYWM6OmltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMg
YXhpcywgZmxvYXQgZGVsdGEpCiB7Ci0gICAgLy8gVGVtcG9yYXJ5IHN0dWIgdW50aWwgaHR0cDov
L3dlYmtpdC5vcmcvYi8xNDE5NzMuCi19CisgICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24g
PSBzY3JvbGxQb3NpdGlvbigpOworICAgIEZsb2F0UG9pbnQgY2hhbmdlOworICAgIGlmIChheGlz
ID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKKyAgICAgICAgY2hhbmdlID0gRmxvYXRQ
b2ludChjdXJyZW50UG9zaXRpb24ueCgpICsgZGVsdGEsIGN1cnJlbnRQb3NpdGlvbi55KCkpOwor
ICAgIGVsc2UKKyAgICAgICAgY2hhbmdlID0gRmxvYXRQb2ludChjdXJyZW50UG9zaXRpb24ueCgp
LCBjdXJyZW50UG9zaXRpb24ueSgpICsgZGVsdGEpOworCisgICAgaW1tZWRpYXRlU2Nyb2xsQnko
Y2hhbmdlIC0gY3VycmVudFBvc2l0aW9uKTt9CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENv
bnRyb2xsZXIuaAkocmV2aXNpb24gMTgwOTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCiAg
ICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50Jik7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoY29uc3Qg
U2Nyb2xsYWJsZUFyZWEmKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xs
RXZlbnRBeGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mKTsKICNlbmRpZgogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250
cm9sbGVyLm1tCShyZXZpc2lvbiAxODA5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsMTYgKzQ0MSwy
NiBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbEFuaW1hCiB7CiAgICAgLy8g
RklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNuYXAgYW5pbWF0b3JzIGFyZSByZWNyZWF0ZWQgZXZl
biB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBhbG9uZSBjYW4gYmUgdXBkYXRlZC4KICAgICBpZiAo
c2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpCi0gICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbFNuYXBBbmltYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBB
bmltYXRvcj4odGhpcywgc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNu
YXBBbmltYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhp
cywgKnNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwpOwogICAgIGVsc2UgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmlt
YXRvcikKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gbnVsbHB0cjsK
IAogICAgIGlmIChzY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCi0gICAgICAg
IG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3I+KHRoaXMsIHNjcm9sbGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMo
KSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxT
bmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRo
aXMsICpzY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwpOwogICAgIGVsc2UgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3Ip
CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBudWxscHRyOwogfQogCit2
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcFBvaW50cykKK3sKKyAgICAv
LyBGSVhNRTogQ3VycmVudGx5LCBzY3JvbGwgc25hcCBhbmltYXRvcnMgYXJlIHJlY3JlYXRlZCBl
dmVuIHRob3VnaCB0aGUgc25hcCBvZmZzZXRzIGFsb25lIGNhbiBiZSB1cGRhdGVkLgorICAgIGlm
IChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKKyAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yPih0aGlzLCBzbmFwUG9pbnRzLCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwor
ICAgIAorICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpCisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3I+KHRoaXMsIHNuYXBQb2ludHMsIFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwpOworfQorCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNj
cm9sbEV2ZW50QXhpcyBheGlzKQogewogICAgIFJ1bkxvb3A6OlRpbWVyPFNjcm9sbENvbnRyb2xs
ZXI+JiBzY3JvbGxTbmFwVGltZXIgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA6IG1fdmVydGljYWxTY3JvbGxTbmFwVGlt
ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmlt
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Ny
b2xsU25hcEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4MDkwMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyAr
NjUsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IgewogcHVibGlj
OgotICAgIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVu
dCosIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0Piogc25hcE9mZnNldHMsIFNjcm9sbEV2ZW50QXhp
cyk7CisgICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvcihBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xp
ZW50KiwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiwgU2Nyb2xsRXZlbnRBeGlzKTsKICAgICB2
b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAgICAgYm9v
bCBzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29u
c3Q7CiAgICAgdm9pZCBzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCk7CkBAIC04NSw3ICs4NSw3
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludCB3aGVlbERlbHRhV2luZG93U2l6ZSA9
IDM7CiAKICAgICBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KiBtX2NsaWVudDsKLSAgICBj
b25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIG1fc25hcE9mZnNldHM7CisgICAgVmVjdG9yPExheW91
dFVuaXQ+IG1fc25hcE9mZnNldHM7CiAgICAgU2Nyb2xsRXZlbnRBeGlzIG1fYXhpczsKICAgICAv
LyBVc2VkIHRvIHRyYWNrIGJvdGggc25hcHBpbmcgYW5kIGdsaWRpbmcgYmVoYXZpb3JzLgogICAg
IFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCShyZXZpc2lv
biAxODA5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBB
bmltYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCwxMiArNjAsMTQgQEAgc3RhdGljIGlubGluZSBX
aGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdgogICAgIGlmIChtb21lbnR1bVBoYXNlID09IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlTm9uZSkgewogICAgICAgICBzd2l0Y2ggKHBoYXNlKSB7CiAgICAg
ICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbjoKKyAgICAgICAgY2FzZSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2luOgogICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjsKIAogICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlQ2hhbmdlZDoKICAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpV
c2VyU2Nyb2xsaW5nOwogCiAgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRl
ZDoKKyAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQ6CiAg
ICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDsKIAogICAg
ICAgICBkZWZhdWx0OgpAQCAtODIsNyArODQsNyBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IHByb2pl
Y3RlZEluZXJ0aWFsU2NyCiAgICAgcmV0dXJuIGluZXJ0aWFsU2Nyb2xsUHJlZGljdGlvbkZhY3Rv
ciAqIGluaXRpYWxXaGVlbERlbHRhOwogfQogCi1BeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIGNsaWVudCwg
Y29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlzIGF4
aXMpCitBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIGNsaWVudCwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+
JiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCiAgICAgOiBtX2NsaWVudChjbGll
bnQpCiAgICAgLCBtX3NuYXBPZmZzZXRzKHNuYXBPZmZzZXRzKQogICAgICwgbV9heGlzKGF4aXMp
CkBAIC0xNTAsNiArMTUyLDkgQEAgYm9vbCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzaG91bGRP
dmVycgogCiB2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25V
cGRhdGUoKQogeworICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkRl
c3RpbmF0aW9uUmVhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQVNTRVJUKG1fY3VycmVu
dFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8fCBtX2N1cnJlbnRTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKICAgICBmbG9hdCBkZWx0YSA9IG1fY3VycmVudFN0
YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcgPyBjb21wdXRlU25hcERlbHRhKCkgOiBj
b21wdXRlR2xpZGVEZWx0YSgpOwogICAgIGlmIChkZWx0YSkKQEAgLTE2NCw5ICsxNjksMTIgQEAg
dm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNjcm9sbAogICAgIExheW91dFVuaXQg
b2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldE9uQXhpcyhtX2F4aXMpOwogICAgIGZsb2F0
IGluaXRpYWxXaGVlbERlbHRhID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5n
ID8gYXZlcmFnZUluaXRpYWxXaGVlbERlbHRhKCkgOiAwOwogICAgIExheW91dFVuaXQgcHJvamVj
dGVkU2Nyb2xsRGVzdGluYXRpb24gPSBuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRp
bmcgPyBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0ICsgTGF5b3V0VW5pdChwcm9qZWN0
ZWRJbmVydGlhbFNjcm9sbERpc3RhbmNlKGluaXRpYWxXaGVlbERlbHRhKSkgOiBvZmZzZXQ7Ci0g
ICAgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChwcm9qZWN0
ZWRTY3JvbGxEZXN0aW5hdGlvbiwgbV9zbmFwT2Zmc2V0cy0+Zmlyc3QoKSksIG1fc25hcE9mZnNl
dHMtPmxhc3QoKSk7CisgICAgaWYgKG1fc25hcE9mZnNldHMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHN0ZDo6bWluKHN0ZDo6
bWF4KHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBtX3NuYXBPZmZzZXRzLmZpcnN0KCkpLCBt
X3NuYXBPZmZzZXRzLmxhc3QoKSk7CiAgICAgbV9pbml0aWFsT2Zmc2V0ID0gb2Zmc2V0OwotICAg
IG1fdGFyZ2V0T2Zmc2V0ID0gY2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KCpt
X3NuYXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVs
dGEpOworICAgIG1fdGFyZ2V0T2Zmc2V0ID0gY2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwg
ZmxvYXQ+KG1fc25hcE9mZnNldHMsIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBpbml0aWFs
V2hlZWxEZWx0YSk7CiAgICAgaWYgKG1faW5pdGlhbE9mZnNldCA9PSBtX3RhcmdldE9mZnNldCkK
ICAgICAgICAgcmV0dXJuOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247822</attachid>
            <date>2015-03-03 18:11:17 -0800</date>
            <delta_ts>2015-03-03 20:44:58 -0800</delta_ts>
            <desc>Patch v5. Updated after refactoring.</desc>
            <filename>bug-141973-20150303181059.patch</filename>
            <type>text/plain</type>
            <size>12982</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE1LTAzLTAzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNjcm9sbCBzbmFwIHBvaW50
cyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGUgbWFpbiBmcmFtZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxOTczCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xOTkzODM5Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIHdpbGwgYmUgYWRkZWQgd2hlbiB0aGUgYW5pbWF0
aW9uIGJlaGF2aW9yIGlzIGZpbmFsaXplZC4gTWFudWFsIHRlc3RzIGFyZSBhdHRhY2hlZCB0byB0
aGUgYnVnLgorCisgICAgICAgIFVwZGF0ZSB0aGUgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYyBjbGFzcyB0byBpbXBsZW1lbnQgdGhlIGRlbGVnYXRlIGludGVyZmFjZSBuZWVkZWQg
YnkgdGhlCisgICAgICAgIFNjcm9sbENvbnRyb2xsZXIuIFRoaXMgaW52b2x2ZXMgdGhlIGZvbGxv
d2luZzoKKyAgICAgICAgMS4gSW1wbGVtZW50IHNjcm9sbE9mZnNldE9uQXhpczogVXNlZCBieSB0
aGUgQXhpc1Njcm9sbEFuaW1hdG9yIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBwb3NpdGlvbiBv
ZiB0aGUgU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIDIuIEltcGxlbWVudCBpbW1lZGlhdGVTY3Jv
bGxPbkF4aXM6IFVzZWQgYnkgdGhlIEF4aXNTY3JvbGxBbmltYXRvciB0byBzY3JvbGwgdGhlIFNj
cm9sbGFibGVBcmVhCisKKyAgICAgICAgV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBTY3JvbGwg
U25hcCBQb2ludHMgYXMgYSBWZWN0b3Igb2YgTGF5b3V0VW5pdHMsIHJhdGhlciB0aGFuIGFzIGEg
cG9pbnRlciB0byBhIFZlY3RvciBvZiBMYXlvdXRVbml0cworICAgICAgICBzbyB0aGF0IHRoZXNl
IHZhbHVlcyBjYW4gYmUgdXNlZCBvbiB0aGUgbWFpbiBhbmQgc2Nyb2xsaW5nIHRocmVhZHMuIFNp
bXBseSBzdG9yaW5nIGEgcG9pbnRlciB0byBhIHNldCBvZiBzbmFwIHBvaW50cyB3aWxsIG5vdAor
ICAgICAgICB3b3JrIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgorCisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0VG9MYXlvdXRVbml0cyk6IEFkZGVkIGhlbHBlciBmdW5jdGlv
biB0byBtYXRjaCBTY3JvbGwgU25hcCBQb2ludHMgQVBJLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOiBS
ZWNvZ25pemUgYW5kIHJlYWN0IHRvIGNoYW5nZXMgdG8KKyAgICAgICAgU2Nyb2xsIFNuYXAgUG9p
bnRzIG9uIHRvcC1sZXZlbCBmcmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxPZmZzZXRPbkF4aXMpOiBJbXBsZW1lbnQgZGVs
ZWdhdGUgbWV0aG9kIG5lZWRlZCBieSB0aGUgU2Nyb2xsQ29udHJvbGxlci4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmltbWVkaWF0ZVNjcm9s
bE9uQXhpcyk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5k
VGltZXJzKTogUGFzcyBzbmFwIG9mZnNldHMgdG8gQXhpc1Njcm9sbFNuYXBBbmltYXRvciBjb25z
dHJ1Y3RvciBhcyByZWZlcmVuY2VzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxl
cjo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyk6IEFkZGVkLiBVc2VkIGJ5IFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMgdG8gdXBkYXRlIHNjcm9sbCBzbmFwIHBvaW50CisgICAgICAg
IHNldHRpbmdzIGluIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0F4aXNT
Y3JvbGxTbmFwQW5pbWF0b3IubW06CisgICAgICAgIChXZWJDb3JlOjp0b1doZWVsRXZlbnRTdGF0
dXMpOiBEb24ndCBpZ25vcmUgdGhlICJNYXlCZWdpbiIgb3IgIkNhbmNlbGxlZCIgZXZlbnQgcGhh
c2VzLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6QXhpc1Njcm9s
bFNuYXBBbmltYXRvcik6IFJldmlzZSBzaWduYXR1cmUgdG8gdGFrZSBhIHJlZmVyZW5jZSB0byB0
aGUgbGF5b3V0IHVuaXRzLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRv
cjo6c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSk6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGlz
IG1ldGhvZCBnZXRzIGNhbGxlZCBmcm9tIGEgdGhyZWFkCisgICAgICAgIHdoZW4gdGhlIHNjcm9s
bGFibGUgYXJlYSBoYXMgYWxyZWFkeSByZWFjaGVkIGl0cyBmaW5hbCBkZXN0aW5hdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmJlZ2luU2Nyb2xsU25hcEFu
aW1hdGlvbik6IEhhbmRsZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgc25hcCBvZmZzZXQgcG9p
bnQgdmVjdG9yIG1pZ2h0IGJlCisgICAgICAgIGVtcHR5LiBVcGRhdGUgbWV0aG9kIHRvIGFjY291
bnQgZm9yIG1fc25hcE9mZnNldHMgYmVpbmcgYSB2YWx1ZSwgaW5zdGVhZCBvZiBhIHBvaW50ZXIu
CisKIDIwMTUtMDMtMDMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBQcmVwYXJlIHRvIHVzZSBDU1Mgc2VsZWN0b3JzIGluIGNvbnRlbnQgZXh0
ZW5zaW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
Lm1tCShyZXZpc2lvbiAxODA5NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjgsNiArNjgsMTggQEAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6flNj
cgogewogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3N0YXRpYyBpbmxpbmUgVmVj
dG9yPExheW91dFVuaXQ+IGNvbnZlcnRUb0xheW91dFVuaXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHNuYXBPZmZzZXRzQXNGbG9hdCkKK3sKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gc25hcE9mZnNl
dHM7CisgICAgc25hcE9mZnNldHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzbmFwT2Zmc2V0c0Fz
RmxvYXQuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gb2Zmc2V0IDogc25hcE9mZnNldHNBc0Zsb2F0
KQorICAgICAgICBzbmFwT2Zmc2V0cy5hcHBlbmQob2Zmc2V0KTsKKworICAgIHJldHVybiBzbmFw
T2Zmc2V0czsKK30KKyNlbmRpZgorCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVNYWM6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3Rh
dGVOb2RlKQogewogICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUJl
Zm9yZUNoaWxkcmVuKHN0YXRlTm9kZSk7CkBAIC0xMTksNiArMTMxLDE0IEBAIHZvaWQgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzoKICAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWUo
KS5zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkpCiAgICAgICAgICAgICBsb2dX
aGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZChzY3JvbGxpbmdTdGF0ZU5vZGUud2hlZWxFdmVu
dEhhbmRsZXJDb3VudCgpKTsKICAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQor
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMpKQorICAgICAgICBt
X3Njcm9sbENvbnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFBvaW50cyhTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwsIGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS5ob3Jp
em9udGFsU25hcE9mZnNldHMoKSkpOworCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlZlcnRpY2Fs
U25hcE9mZnNldHMpKQorICAgICAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBkYXRlU2Nyb2xsU25h
cFBvaW50cyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhz
Y3JvbGxpbmdTdGF0ZU5vZGUudmVydGljYWxTbmFwT2Zmc2V0cygpKSk7CisjZW5kaWYKIH0KIAog
dm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVBZnRlckNoaWxk
cmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQpAQCAtNTIxLDE1ICs1NDEs
MjIgQEAgdm9pZCBsb2dXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCh1bgogfQogCiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQotTGF5b3V0VW5pdCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xs
RXZlbnRBeGlzKQorTGF5b3V0VW5pdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
OjpzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCiB7Ci0gICAgLy8gVGVt
cG9yYXJ5IHN0dWIgdW50aWwgaHR0cDovL3dlYmtpdC5vcmcvYi8xNDE5NzMuCi0gICAgcmV0dXJu
IDA7CisgICAgY29uc3QgRmxvYXRQb2ludCYgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRp
b24oKTsKKyAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBj
dXJyZW50UG9zaXRpb24ueCgpIDogY3VycmVudFBvc2l0aW9uLnkoKTsKIH0KIAotdm9pZCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Ny
b2xsRXZlbnRBeGlzLCBmbG9hdCkKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZU1hYzo6aW1tZWRpYXRlU2Nyb2xsT25BeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBk
ZWx0YSkKIHsKLSAgICAvLyBUZW1wb3Jhcnkgc3R1YiB1bnRpbCBodHRwOi8vd2Via2l0Lm9yZy9i
LzE0MTk3My4KKyAgICBjb25zdCBGbG9hdFBvaW50JiBjdXJyZW50UG9zaXRpb24gPSBzY3JvbGxQ
b3NpdGlvbigpOworICAgIEZsb2F0UG9pbnQgY2hhbmdlOworICAgIGlmIChheGlzID09IFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKKyAgICAgICAgY2hhbmdlID0gRmxvYXRQb2ludChjdXJy
ZW50UG9zaXRpb24ueCgpICsgZGVsdGEsIGN1cnJlbnRQb3NpdGlvbi55KCkpOworICAgIGVsc2UK
KyAgICAgICAgY2hhbmdlID0gRmxvYXRQb2ludChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50
UG9zaXRpb24ueSgpICsgZGVsdGEpOworCisgICAgaW1tZWRpYXRlU2Nyb2xsQnkoY2hhbmdlIC0g
Y3VycmVudFBvc2l0aW9uKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCShyZXZpc2lvbiAxODA5NzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQogICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JT
Y3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogICAgIHZvaWQgdXBkYXRlU2Ny
b2xsQW5pbWF0b3JzQW5kVGltZXJzKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7CisgICAgdm9pZCB1
cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpcywgY29uc3QgVmVjdG9yPExheW91
dFVuaXQ+Jik7CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQkocmV2aXNpb24gMTgwOTc0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDQzLDE2ICs0NDMsMjYgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1
cGRhdGVTY3JvbGxBbmltYQogewogICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHNjcm9sbCBzbmFw
IGFuaW1hdG9ycyBhcmUgcmVjcmVhdGVkIGV2ZW4gdGhvdWdoIHRoZSBzbmFwIG9mZnNldHMgYWxv
bmUgY2FuIGJlIHVwZGF0ZWQuCiAgICAgaWYgKHNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFw
T2Zmc2V0cygpKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6
Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsIHNjcm9sbGFibGVBcmVh
Lmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwor
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVl
PEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsICpzY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFs
U25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICAgICBlbHNlIGlm
IChtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpCiAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7CiAKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEudmVy
dGljYWxTbmFwT2Zmc2V0cygpKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9y
ID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBzY3JvbGxh
YmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwp
OworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1
ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCAqc2Nyb2xsYWJsZUFyZWEudmVydGljYWxT
bmFwT2Zmc2V0cygpLCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKICAgICBlbHNlIGlmICht
X3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yKQogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25h
cEFuaW1hdG9yID0gbnVsbHB0cjsKIH0KIAordm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVT
Y3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0
VW5pdD4mIHNuYXBQb2ludHMpCit7CisgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgc2Nyb2xsIHNu
YXAgYW5pbWF0b3JzIGFyZSByZWNyZWF0ZWQgZXZlbiB0aG91Z2ggdGhlIHNuYXAgb2Zmc2V0cyBh
bG9uZSBjYW4gYmUgdXBkYXRlZC4KKyAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvciA9IHN0ZDo6
bWFrZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhpcywgc25hcFBvaW50cywgU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKworICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBz
dGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsIHNuYXBQb2ludHMs
IFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOworfQorCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBheGlzKQogewogICAgIFJ1bkxv
b3A6OlRpbWVyPFNjcm9sbENvbnRyb2xsZXI+JiBzY3JvbGxTbmFwVGltZXIgPSBheGlzID09IFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lciA6
IG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4MDk3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3IgewogcHVibGljOgotICAgIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhp
c1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCosIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0Piogc25h
cE9mZnNldHMsIFNjcm9sbEV2ZW50QXhpcyk7CisgICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvcihB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KiwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+Jiwg
U2Nyb2xsRXZlbnRBeGlzKTsKICAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50Jik7CiAgICAgYm9vbCBzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Q7CiAgICAgdm9pZCBzY3JvbGxTbmFwQW5pbWF0aW9u
VXBkYXRlKCk7CkBAIC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGlu
dCB3aGVlbERlbHRhV2luZG93U2l6ZSA9IDM7CiAKICAgICBBeGlzU2Nyb2xsU25hcEFuaW1hdG9y
Q2xpZW50KiBtX2NsaWVudDsKLSAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIG1fc25hcE9m
ZnNldHM7CisgICAgVmVjdG9yPExheW91dFVuaXQ+IG1fc25hcE9mZnNldHM7CiAgICAgU2Nyb2xs
RXZlbnRBeGlzIG1fYXhpczsKICAgICAvLyBVc2VkIHRvIHRyYWNrIGJvdGggc25hcHBpbmcgYW5k
IGdsaWRpbmcgYmVoYXZpb3JzLgogICAgIFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9y
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xs
U25hcEFuaW1hdG9yLm1tCShyZXZpc2lvbiAxODA5NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAs
MTIgKzYwLDE0IEBAIHN0YXRpYyBpbmxpbmUgV2hlZWxFdmVudFN0YXR1cyB0b1doZWVsRXYKICAg
ICBpZiAobW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKICAg
ICAgICAgc3dpdGNoIChwaGFzZSkgewogICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlQmVnYW46CisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlCZWdpbjoK
ICAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW47CiAK
ICAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ6CiAgICAgICAgICAg
ICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzsKIAogICAgICAgICBjYXNl
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ6CisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VDYW5jZWxsZWQ6CiAgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1
czo6VXNlclNjcm9sbEVuZDsKIAogICAgICAgICBkZWZhdWx0OgpAQCAtODIsNyArODQsNyBAQCBz
dGF0aWMgaW5saW5lIGZsb2F0IHByb2plY3RlZEluZXJ0aWFsU2NyCiAgICAgcmV0dXJuIGluZXJ0
aWFsU2Nyb2xsUHJlZGljdGlvbkZhY3RvciAqIGluaXRpYWxXaGVlbERlbHRhOwogfQogCi1BeGlz
U2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3JDbGllbnQqIGNsaWVudCwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiBzbmFwT2Zm
c2V0cywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCitBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIGNsaWVudCwg
Y29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlzIGF4
aXMpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3NuYXBPZmZzZXRzKHNuYXBPZmZz
ZXRzKQogICAgICwgbV9heGlzKGF4aXMpCkBAIC0xNTAsNiArMTUyLDkgQEAgYm9vbCBBeGlzU2Ny
b2xsU25hcEFuaW1hdG9yOjpzaG91bGRPdmVycgogCiB2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKQogeworICAgIGlmIChtX2N1cnJlbnRTdGF0
ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVhY2hlZCkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgQVNTRVJUKG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGlu
ZyB8fCBtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKICAgICBm
bG9hdCBkZWx0YSA9IG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcg
PyBjb21wdXRlU25hcERlbHRhKCkgOiBjb21wdXRlR2xpZGVEZWx0YSgpOwogICAgIGlmIChkZWx0
YSkKQEAgLTE2NCw5ICsxNjksMTIgQEAgdm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdp
blNjcm9sbAogICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldE9u
QXhpcyhtX2F4aXMpOwogICAgIGZsb2F0IGluaXRpYWxXaGVlbERlbHRhID0gbmV3U3RhdGUgPT0g
U2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nID8gYXZlcmFnZUluaXRpYWxXaGVlbERlbHRhKCkgOiAw
OwogICAgIExheW91dFVuaXQgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPSBuZXdTdGF0ZSA9
PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgPyBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zm
c2V0ICsgTGF5b3V0VW5pdChwcm9qZWN0ZWRJbmVydGlhbFNjcm9sbERpc3RhbmNlKGluaXRpYWxX
aGVlbERlbHRhKSkgOiBvZmZzZXQ7Ci0gICAgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPSBz
dGQ6Om1pbihzdGQ6Om1heChwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgbV9zbmFwT2Zmc2V0
cy0+Zmlyc3QoKSksIG1fc25hcE9mZnNldHMtPmxhc3QoKSk7CisgICAgaWYgKG1fc25hcE9mZnNl
dHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9qZWN0ZWRTY3JvbGxEZXN0
aW5hdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBt
X3NuYXBPZmZzZXRzLmZpcnN0KCkpLCBtX3NuYXBPZmZzZXRzLmxhc3QoKSk7CiAgICAgbV9pbml0
aWFsT2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fdGFyZ2V0T2Zmc2V0ID0gY2xvc2VzdFNuYXBPZmZz
ZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KCptX3NuYXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0
aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIG1fdGFyZ2V0T2Zmc2V0ID0gY2xvc2Vz
dFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KG1fc25hcE9mZnNldHMsIHByb2plY3RlZFNj
cm9sbERlc3RpbmF0aW9uLCBpbml0aWFsV2hlZWxEZWx0YSk7CiAgICAgaWYgKG1faW5pdGlhbE9m
ZnNldCA9PSBtX3RhcmdldE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCg==
</data>
<flag name="review"
          id="272735"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>