<?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>70713</bug_id>
          
          <creation_ts>2011-10-24 01:44:10 -0700</creation_ts>
          <short_desc>[chromium] Implement frame rate control portions of CCScheduler</short_desc>
          <delta_ts>2011-10-27 23:50:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>70712</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to name="Nat Duca">nduca</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>489221</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-24 01:44:10 -0700</bug_when>
    <thetext>[chromium] Implement frame rate control portions of CCScheduler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489222</commentid>
    <comment_count>1</comment_count>
      <attachid>112161</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-24 01:44:32 -0700</bug_when>
    <thetext>Created attachment 112161
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489231</commentid>
    <comment_count>2</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-24 01:57:37 -0700</bug_when>
    <thetext>I expect that this patch is going to explode on the EWS bots because it needs CCThread::postDelayedTask: b70712.

The goal of this patch is to establish the right infrastructure for the &quot;time&quot; bits of the scheduler, but not implement the exact ideal algorithm. There are two parts:

* CCSmoothedTimer: ticks at an average rate given that the underlying delayed task mechanism ticks only in 1ms increments.
* CCFrameRateController: built on top of the smoothed timer, the FRC tracks pending frames and converts ticks into &quot;draw calls&quot; (so long as &lt; 2 frames are in flight).

In the future:
* We can put fancier logic for minimizing clock drift into the smoothed timer. Now, I use the 16, 16, 17 technique because my quick attempts to do better ran into difficulties.

* Slowdown logic can be added to FrameRateController, e.g. &quot;we&apos;re consistently drawing at 30Hz, so stop trying to draw at 60Hz.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489234</commentid>
    <comment_count>3</comment_count>
      <attachid>112161</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 02:02:59 -0700</bug_when>
    <thetext>Comment on attachment 112161
Patch

Attachment 112161 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10198814</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489587</commentid>
    <comment_count>4</comment_count>
      <attachid>112161</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-24 13:43:58 -0700</bug_when>
    <thetext>Comment on attachment 112161
Patch

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

First round of comments, mostly nitpicks.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.cpp:37
&gt; +    // Dont forward the tick if we are throttled.

Dont -&gt; Don&apos;t

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.cpp:38
&gt; +    if (m_pendingFrameBeginTimes.size() &gt;= 2)

This seems to be holding us to having 2 frames pending at any given point in time.  It&apos;s a bit subtle IMO that this logic is here, also this is a bit of a magic number.  Can you turn &apos;2&apos; into a well-named constant?

If we only support a fixed number of pending frames using a Deque&lt;&gt; seems like massive overkill. Why not just use a double[]?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.cpp:53
&gt; +    /* FIXME: do something with the the delta between now and frameBeginTime.

we don&apos;t typically use c-style comments

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:36
&gt; +class CCFrameRateControllerClient {

protected d&apos;tor here please, so people don&apos;t try to delete through a CCFrameRateControllerClient*

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:41
&gt; +class CCFrameRateController : public CCTimerClient {

this has virtual functions but no virtual d&apos;tor - i sense danger

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:55
&gt; +    /* Use the following methods to adjust target frame rate.

another c-style comment

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:66
&gt; +    // CCTimerClient implementation. Do not call directly.

if it shouldn&apos;t be called directly does it need to be public?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:67
&gt; +    void onTimerTick();

virtual keyword, please

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:34
&gt; +class CCTimerClient {

please declare a protected virtual empty d&apos;tor - right now if someone tries to delete a CCTimerClient through a CCTimerClient* they will leak

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:39
&gt; +/*

we don&apos;t normally use c-style comments

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:48
&gt; +    CCSmoothedTimer(int goalRate, CCThread* thread)

&apos;goalRate&apos; isn&apos;t super clear. What&apos;s the unit of &apos;rate&apos;?  Is this target FPS? Target delay between frames in millis?

Is &apos;int&apos; precise enough? If this is target FPS some displays might have non-integral framerates

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:58
&gt; +    void getGoalRate(int goalRate) { m_goalRate = goalRate; }

this looks like a setter, not a getter

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:62
&gt; +    virtual double getCurrentTime() const { return monotonicallyIncreasingTime(); }

we don&apos;t use &apos;get&apos; prefix for getters

&gt; Source/WebKit/chromium/tests/CCFrameRateControllerTest.cpp:44
&gt; +    void onVSyncTick() { m_tickCalled = true; }

virtual

&gt; Source/WebKit/chromium/tests/CCSchedulerTestCommon.h:42
&gt; +    void onTimerTick() { m_tickCalled = true; }

virtual keyword please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489667</commentid>
    <comment_count>5</comment_count>
      <attachid>112161</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-24 14:53:36 -0700</bug_when>
    <thetext>Comment on attachment 112161
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:58
&gt; +    } else if (m_goalRate == 30) {
&gt; +        if (!m_tickStep)
&gt; +            delay = 33;
&gt; +        else
&gt; +            delay = 32;

Er, don&apos;t you mean 34 and 33, rather than 33 and 32?

(All this logic seems a bit dodgy.  Wouldn&apos;t you start drifting if task posting timing is not perfect?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489744</commentid>
    <comment_count>6</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-24 16:03:52 -0700</bug_when>
    <thetext>Ah, makes sense, thanks for sorting me out.

Two high level things:
1. Lets hold off making this webcore wide. Amongst other things, we might need to go from category strings to something more like LogChannels so it makes more sense to other ports.
2. You&apos;ll need two types for every type you introduce in your solution: the WebCore type, and the type you add to WebKit/public/ that you use to get from WebKit back to Chromium. That reality might influence your API design a bit...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489745</commentid>
    <comment_count>7</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-24 16:05:28 -0700</bug_when>
    <thetext>(In reply to comment #6)

@*%&amp;@)(* wrong friggin bug. @)@&amp;)*@)$#</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489782</commentid>
    <comment_count>8</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-24 16:59:40 -0700</bug_when>
    <thetext>&gt; If we only support a fixed number of pending frames using a Deque&lt;&gt; seems like massive overkill. Why not just use a double[]?

Yes it is, but its not performance critical code, and to do [], I need more error prone code. Can we keep it pretty please?

&gt; Frame rates

I would like to start with integral frame rates, actually. If there is something that doesn&apos;t use that, we can pass in a ratio instead. E.g. 89.285714hz is 480000 / 5376. The reason for this is I&apos;m trying to avoid numerical precison errors.


&gt; The voodoo with 16 17 17
Stand by for a better patch, with a cooler algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489934</commentid>
    <comment_count>9</comment_count>
      <attachid>112309</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 02:41:53 -0700</bug_when>
    <thetext>Created attachment 112309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489935</commentid>
    <comment_count>10</comment_count>
      <attachid>112310</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 02:45:00 -0700</bug_when>
    <thetext>Created attachment 112310
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489936</commentid>
    <comment_count>11</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 02:46:03 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=112310) [details]
&gt; Patch

Note, I gave up on the idea of using integer math for this. It was a stupid idea. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489940</commentid>
    <comment_count>12</comment_count>
      <attachid>112310</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-25 02:50:00 -0700</bug_when>
    <thetext>Comment on attachment 112310
Patch

Attachment 112310 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10209201</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489944</commentid>
    <comment_count>13</comment_count>
      <attachid>112312</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 02:59:02 -0700</bug_when>
    <thetext>Created attachment 112312
sigh</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490286</commentid>
    <comment_count>14</comment_count>
      <attachid>112312</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-25 13:15:31 -0700</bug_when>
    <thetext>Comment on attachment 112312
sigh

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

Looks good!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:61
&gt; +    double now = currentTime();

nit: you could move this up and use now in line 57 instead of calling currentTime() twice

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:66
&gt; +    double amountLate = now - m_nextTickTime;

Should you be worried about timer wrap-around?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:70
&gt; +        // is our tolerance factor for &quot;rasonable&quot; delays due to the thread being busy.

typo: rasonable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490316</commentid>
    <comment_count>15</comment_count>
      <attachid>112312</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-25 13:42:50 -0700</bug_when>
    <thetext>Comment on attachment 112312
sigh

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:48
&gt; +    CCFrameRateController(PassOwnPtr&lt;CCSmoothedTimer&gt;);

explicit

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:31
&gt; +#include &lt;math.h&gt;

are we using this include?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:62
&gt; +    const float maxLateBeforeDroppingFrame = 2.5;

why float? we&apos;re about to compare it to a double

could be static

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:65
&gt; +    bool tick;

Could you initialize this here? Or just drop it if you drop the &apos;else if&apos; clause below?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:68
&gt; +    if (amountLate &gt;= -1.0 &amp;&amp; amountLate &lt;= maxLateBeforeDroppingFrame) {
&gt; +        // Timer was (mostly) on time. We penalize to -1.0 fixed on the early side because

Wouldn&apos;t this be a lot easier to reason about if we floored ourselves?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:76
&gt; +    } else if (amountLate &lt; -1.0) {
&gt; +        // Timer came back really early. Unlikely but better to handle then explode.
&gt; +        newNextTickTime = m_nextTickTime;
&gt; +        tick = false;

This should be impossible now that the timers are all base::TimeTicks based - the code in render_widget was to deal with base::Time / base::TimeTicks mismatches. I think you want to ASSERT() at a minimum here if you want to write code at all

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:59
&gt; +    void setInterval(double intervalMs)

Is anything else supposed to happen when the interval changes? What if the interval is 50ms, the last tick was 30ms ago, and the caller sets the interval to 20? Should they get a callback sooner?

I don&apos;t see any callers of this in this patch.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:67
&gt; +    virtual double currentTime() const { return monotonicallyIncreasingTime(); }

This is super confusing - there&apos;s a function in the global namespace from wtf/CurrentTime.h called &apos;currentTime()&apos; which happens to have really bad behavior for what we want here. Either match the name of the function you&apos;re wrapping or come up with another name</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490372</commentid>
    <comment_count>16</comment_count>
      <attachid>112312</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 14:41:20 -0700</bug_when>
    <thetext>Comment on attachment 112312
sigh

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:66
&gt;&gt; +    double amountLate = now - m_nextTickTime;
&gt; 
&gt; Should you be worried about timer wrap-around?

currentTime() would be toast by that point, right?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:68
&gt;&gt; +        // Timer was (mostly) on time. We penalize to -1.0 fixed on the early side because
&gt; 
&gt; Wouldn&apos;t this be a lot easier to reason about if we floored ourselves?

Not sure I follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490375</commentid>
    <comment_count>17</comment_count>
      <attachid>112408</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 14:44:28 -0700</bug_when>
    <thetext>Created attachment 112408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490389</commentid>
    <comment_count>18</comment_count>
      <attachid>112408</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-25 14:56:11 -0700</bug_when>
    <thetext>Comment on attachment 112408
Patch

Attachment 112408 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10208490</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490453</commentid>
    <comment_count>19</comment_count>
      <attachid>112426</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 16:23:47 -0700</bug_when>
    <thetext>Created attachment 112426
MakeItBuild</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490469</commentid>
    <comment_count>20</comment_count>
      <attachid>112426</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-25 16:43:28 -0700</bug_when>
    <thetext>Comment on attachment 112426
MakeItBuild

Attachment 112426 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10213362</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490497</commentid>
    <comment_count>21</comment_count>
      <attachid>112426</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-25 17:43:30 -0700</bug_when>
    <thetext>Comment on attachment 112426
MakeItBuild

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:91
&gt; +    if (tick &amp;&amp; m_client)

there is no tick

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:62
&gt; +    virtual double monotonicallyIncreasingTime() const { return monotonicallyIncreasingTime(); }

this is a bit of a trip. can you say &quot;return ::monotonicallyIncreasingTime()&quot; or &quot;return WTF::monotonicallyIncreasingTime()&quot; to make it a bit more human-parseable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490533</commentid>
    <comment_count>22</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 18:58:31 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; there is no tick

But fortunately, there is also no spoon.

Sorry, couldn&apos;t resist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490542</commentid>
    <comment_count>23</comment_count>
      <attachid>112442</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-25 20:08:57 -0700</bug_when>
    <thetext>Created attachment 112442
.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490565</commentid>
    <comment_count>24</comment_count>
      <attachid>112442</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-25 22:47:52 -0700</bug_when>
    <thetext>Comment on attachment 112442
.

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

All nits although OwnPtr&lt;T*&gt; is pretty strange looking. R=me but please check that carefully.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.cpp:31
&gt; +#include &lt;math.h&gt;

if you aren&apos;t using this #include remove it

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.cpp:46
&gt; +            : m_frameRateController(frameRateController) { }

this indentation is odd - would expect 4-space from prev line

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:75
&gt; +    OwnPtr&lt;CCSmoothedTimer*&gt; m_timer;

why is this an OwnPtr&lt;&gt; to a pointer? is this a typo? How does it compile?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:58
&gt; +    double now = monotonicallyIncreasingTime();

nit: move this below the early return please

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:73
&gt; +        // Timer was (mostly) on time. We penalize to -1.0 fixed on the early side because

I think I&apos;ve finally grokked this but it took me a while :)  Please let me know if my understanding here is correct: The idea here is if the timer callback rate is &apos;close enough&apos; to the specified interval rate, then we just keep ticking using the same timebase. We rely on the floor behavior to never drift too early, and if we start drifting too late we reset the timebase rather than pass excessively short intervals.  I think the &apos;penalize&apos; wording here made it hard to see what&apos;s going on.
Maybe you could provide a brief example here of how this code would behave in some simple situations?  For example with an interval of 16.67, infinitely fast frames, a completely uncontested thread, and perfectly accurate timers this would go something like:

STATE_STARTING, now=0: m_nextTickTime = 0, m_state -&gt; STATE_ACTIVE
amountLate = 0
newNextTimeTick = 16.67
postTickTask(floor(16.67 - 0) = 16)

STATE_ACTIVE, now=16:
amountLate = -0.67
newNextTimeTick = 33.34
postTickTask(floor(33.34 - 16) = 17)

STATE_ACTIVE, now=33:
amountLate = -0.34
newNextTimeTick = 50.0
postTickTask(floor(50.0 - 33) = 17)

etc.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:50
&gt; +            : m_client(0)

odd indent here too, would normally be 4-space from previous line

can you put this in the .cpp?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:300
&gt; -        webkit_support::PostDelayedTask(CCLayerTreeHostTest::onBeginTest, static_cast&lt;void*&gt;(this), 0);
&gt; +         webkit_support::PostDelayedTask(CCLayerTreeHostTest::onBeginTest, static_cast&lt;void*&gt;(this), 0);

bizarre space here

&gt; Source/WebKit/chromium/tests/CCSchedulerTestCommon.h:31
&gt; +#include &lt;wtf/CurrentTime.h&gt;

don&apos;t think you need this include either

&gt; Source/WebKit/chromium/tests/CCSchedulerTestCommon.h:88
&gt; +    FakeCCSmoothedTimer(double i, WebCore::CCThread* t)
&gt; +        : CCSmoothedTimer(i, t)

might as well expand these variable names
i-&gt;intervalMs
t-&gt;thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490566</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-25 22:49:12 -0700</bug_when>
    <thetext>Also I still don&apos;t really see what the Deque is gonna be for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490714</commentid>
    <comment_count>26</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-26 03:15:32 -0700</bug_when>
    <thetext>Great feedback overall, I&apos;ll add some explanation based (heavily) on what you wrote [nice job!], and get a new patch up. :)


(In reply to comment #25)
&gt; Also I still don&apos;t really see what the Deque is gonna be for.

Maybe you missed my earlier comment amongst my flailing. The operation we are using is a queue: we push frames in, we pop them out. We also use the queue size to make decisions about dropping a tick. 
We use a dequeue in the rate limiting implementation too, gpu/client/gles2_implemenation.cc as well as in the GpuScheduler for the mac swapbuffer rate limiter.

I&apos;m using WTF::Dequeue because I wasn&apos;t sure if it was safe to use stl queue directly. I don&apos;t need double-endedness.

I could also use a vector, frankly, and push_back/pop_front it. Its gonna be 2-long so NBD.

Are you wondering about dequeue vs another data structure? Or any stl/wtf data structure versus hand-coding it? I&apos;m confused...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490799</commentid>
    <comment_count>27</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-10-26 06:35:16 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=112442&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:36
&gt; +class CCFrameRateControllerClient {

Maybe make this a nested class? i.e. CCFrameRateController::Client

I&apos;m not sure if the style guide prefers it one way or the other, but a nested class would make the code a lot shorter in some places, with little impact elsewhere.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:48
&gt; +    explicit CCFrameRateController(PassOwnPtr&lt;CCSmoothedTimer&gt;);

I think this is where my idea of smoothing out a jittery SwapBuffers callback would fit in.

Instead of taking a CCSmoothedTimer argument, CCFrameRateController could just expose a public onTimerTick() method. Then the caller can choose to drive that from a CCSmoothedTimer, from a SwapBuffers callback, or something else.

And maybe the method names should be switched around:

// Call this once per screen refresh
void CCFrameRateController::onVSyncTick()

// CCFrameRateController calls this when we should draw a new frame.
// It will be synced with screen refresh, maybe throttled by an integral factor.
virtual void CCFrameRateControllerClient::onAnimationFrameTick()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:79
&gt; +        newNextTickTime = now + m_intervalMs;

If the thread is overworked, the timer will end up running at a slightly lower rate, but wouldn&apos;t it be better to drop to exactly 50% frame rate? Or is that CCFrameRateController&apos;s job?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:81
&gt; +        // Timer came back impossibly early. Sanity check only.

Does this really need its own case? Could just DCHECK(amountLate &gt;= -1.0) on line 73.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:42
&gt; +// This timer implements a time source that achieves the specified interval

Unless I&apos;m missing something, WebCore/platform/Timer.h does this too. It has an m_nextFireTime which is incremented by m_repeatInterval each time it runs. The key difference here isn&apos;t really the smoothing, but the fact that we use CCThread rather than being tied to the main thread.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:49
&gt; +    CCSmoothedTimer(double intervalMs, CCThread* thread)

For consistency with the rest of WebKit and Chrome, I&apos;d expect a double to be seconds, and a long to be milliseconds (or ticks). Since you&apos;re working in doubles here, maybe just use seconds everywhere?

&gt; Source/WebKit/chromium/tests/CCSchedulerTestCommon.h:91
&gt; +    void setMonotonicallyIncreasingTime(double time) { m_monotonicallyIncreasingTime = time; }

Would be convenient in these tests to have an incrementTime() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490836</commentid>
    <comment_count>28</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-10-26 07:53:09 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=112442&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:62
&gt; +    virtual double monotonicallyIncreasingTime() const { return WTF::monotonicallyIncreasingTime(); }

In both tests and production code, this is closely coupled with CCThread::postDelayedTask.

Maybe this should actually be a virtual method on CCThread. The real CCThread can use the real clock, the fake CCThread a fake clock, and everyone&apos;s happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490920</commentid>
    <comment_count>29</comment_count>
      <attachid>112442</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-26 09:26:09 -0700</bug_when>
    <thetext>Comment on attachment 112442
.

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:75
&gt;&gt; +    OwnPtr&lt;CCSmoothedTimer*&gt; m_timer;
&gt; 
&gt; why is this an OwnPtr&lt;&gt; to a pointer? is this a typo? How does it compile?

OwnPtr&lt;T*&gt; is identical* to OwnPtr&lt;T&gt; in what it stores, what gets deleted, and how it interacts with PassOwnPtr through the magic of templates.  It&apos;s just bad style, not incorrect.

* For nearly all types. HBITMAP (i.e. void*) and some other Windows-only types have specific cleanup functions that get invoked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491022</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-26 11:04:41 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112442&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:36
&gt; &gt; +class CCFrameRateControllerClient {
&gt; 
&gt; Maybe make this a nested class? i.e. CCFrameRateController::Client
&gt; 
&gt; I&apos;m not sure if the style guide prefers it one way or the other, but a nested class would make the code a lot shorter in some places, with little impact elsewhere.
&gt; 

You can&apos;t forward declare an inner class, which is why we typically don&apos;t use them for cases like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491027</commentid>
    <comment_count>31</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-26 11:15:08 -0700</bug_when>
    <thetext>&gt; (In reply to comment #25)
&gt; &gt; Also I still don&apos;t really see what the Deque is gonna be for.
&gt; 
&gt; Maybe you missed my earlier comment amongst my flailing. The operation we are using is a queue: we push frames in, we pop them out. We also use the queue size to make decisions about dropping a tick. 
&gt; We use a dequeue in the rate limiting implementation too, gpu/client/gles2_implemenation.cc as well as in the GpuScheduler for the mac swapbuffer rate limiter.
&gt; 
&gt; I&apos;m using WTF::Dequeue because I wasn&apos;t sure if it was safe to use stl queue directly. I don&apos;t need double-endedness.
&gt; 
&gt; I could also use a vector, frankly, and push_back/pop_front it. Its gonna be 2-long so NBD.
&gt; 
&gt; Are you wondering about dequeue vs another data structure? Or any stl/wtf data structure versus hand-coding it? I&apos;m confused...

It looks like this isn&apos;t input into the current scheme and it&apos;s unclear exactly how it will interact with everything else. Could you just add the support when you add the logic using it (and the relevant tests)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491205</commentid>
    <comment_count>32</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-26 14:55:07 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112442&amp;action=review
&gt; 
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCFrameRateController.h:48
&gt; &gt; +    explicit CCFrameRateController(PassOwnPtr&lt;CCSmoothedTimer&gt;);
&gt; 
&gt; I think this is where my idea of smoothing out a jittery SwapBuffers callback would fit in.

I added a CCTimeSource. Something based on a swapbuffers or vsync would be a subclass of a timesource. The thing formerly called CCSmoothedTimer is now called CCDelayBasedTimeSource.

&gt; And maybe the method names should be switched around:
I did some changes here. I think you&apos;ll like it.

&gt; If the thread is overworked, the timer will end up running at a slightly lower rate, but wouldn&apos;t it be better to drop to exactly 50% frame rate?

That&apos;s the job of CCFrameRateController&apos;s job. The timesource gives ticks, the framerate controller decides to ignore them. :)

A *key* problem is deciding when the thread (or the GPU) is overworked. We lack metrics to determine this at runtime.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.cpp:81
&gt; &gt; +        // Timer came back impossibly early. Sanity check only.
&gt; 
&gt; Does this really need its own case? Could just DCHECK(amountLate &gt;= -1.0) on line 73.
Doh. Thanks man, this is SO much cleaner now.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:42
&gt; &gt; +// This timer implements a time source that achieves the specified interval
&gt; 
&gt; Unless I&apos;m missing something, WebCore/platform/Timer.h does this too.

Its really that this is CCThread-coupled, platform-coupled. That has a few non-obvious consequences around the timebase [monotonic time vs webkit seconds, which are not the same iirw].

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSmoothedTimer.h:49
&gt; &gt; +    CCSmoothedTimer(double intervalMs, CCThread* thread)
&gt; For consistency with the rest of WebKit and Chrome, I&apos;d expect a double to be seconds, and a long to be milliseconds (or ticks).
Again, the disconnect is that currentTime() uses a wall-time timebase. The monotonic time uses a special timebase that we guarantee to not move backward, even when the clock changes. It also doesn&apos;t count from the epoch, which gives increased numeric precision down in the micro/nano range --- epoch based doubles can&apos;t count below 0.3microsecnds.


&gt; CCThread::currentTime()
I buy it. But we should make this work for CCMainThread, too. I think that can be done by having CCMainThread implement CCThread as well. I&apos;m open to a patch to do this, as I agree it is cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491285</commentid>
    <comment_count>33</comment_count>
      <attachid>112621</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-26 17:01:48 -0700</bug_when>
    <thetext>Created attachment 112621
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491359</commentid>
    <comment_count>34</comment_count>
      <attachid>112621</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-26 23:10:55 -0700</bug_when>
    <thetext>Comment on attachment 112621
Cleanup

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

R still =me. I like the explanation a lot.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDelayBasedTimeSource.cpp:84
&gt; +// We treat delays in tasks differently depending on the amount of delay we encouter. Suppose we

typo &apos;encouter&apos;-&gt;&apos;encounter&apos;. &apos;encouter&apos; sounds like a completely different sort of thing entirely

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDelayBasedTimeSource.h:40
&gt; +// NOTE: Deleting CCDelayBasedTimeSource when a tick is pending will lead to a crash.
&gt; +//      To fix this, we need to generalize CCScopedMainThreadProxy.

instead of just saying that this crashes, i think you can fix this by making this class refcounted and calling ref() in postTickTask() and deref() before returning from onTick(). it&apos;s not much code and one less headache to deal with later</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492273</commentid>
    <comment_count>35</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-27 23:50:39 -0700</bug_when>
    <thetext>Committed r98700: &lt;http://trac.webkit.org/changeset/98700&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112161</attachid>
            <date>2011-10-24 01:44:32 -0700</date>
            <delta_ts>2011-10-25 02:41:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70713-20111024014431.patch</filename>
            <type>text/plain</type>
            <size>30730</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxMzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwOGZmNjFjZDljNjY0MWM4
MGQzMjVlMjA1NmM3ZjA4YTEyMDYxNjQ3Li5kMTk5YTE4NzY0NjI4N2Y2MDk4YzAyMDY1NjJlZTEz
NmQ5NTZjOTMxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTAtMjQgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6b25U
aW1lclRpY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpkaWRC
ZWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlk
RmluaXNoRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpk
aWRBYm9ydEFsbFBlbmRpbmdGcmFtZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6c2V0Q2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6c2V0QWN0aXZlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDU21vb3RoZWRUaW1lcjo6c2V0QWN0aXZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU21vb3RoZWRUaW1lcjo6cG9zdFRpY2tUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU21vb3RoZWRUaW1lcjo6b25UaWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1Ntb290aGVkVGltZXI6OkNDU21vb3RoZWRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Ntb290aGVkVGltZXI6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ntb290aGVk
VGltZXI6OmdldEdvYWxSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU21vb3RoZWRUaW1lcjo6
Z2V0Q3VycmVudFRpbWUpOgorCiAyMDExLTEwLTIxICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkdmFuY2VkIHNlYXJjaCBy
ZXN1bHRzIHNob3VsZCBiZSBjbGVhcmVkIG9uIG5hdmlnYXRpb24uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGNlYjNjN2I3YzhmNWVjOTI3ZDM4ZDljNDAwZjdkODYyZjY4ZTE5NjIuLjVk
MmUzZThmNTU4NDBiMTRiMmFkNzBjOWMzZTVkODJmYWEzYWFhNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMTAtMjQgIE5hdCBEdWNhICA8bmR1Y2FA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGZyYW1lIHJhdGUg
Y29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0ND
RnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpGYWtlQ0NGcmFtZVJhdGVDb250cm9s
bGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9s
bGVyQ2xpZW50OjpyZXNldCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRl
Q29udHJvbGxlckNsaWVudDo6dGlja0NhbGxlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6b25WU3luY1RpY2spOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaW1lckNsaWVudDo6RmFrZUND
VGltZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RpbWVyQ2xpZW50Ojpy
ZXNldCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDVGltZXJDbGllbnQ6OnRpY2tDYWxs
ZWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RpbWVyQ2xpZW50OjpvblRpbWVyVGlj
ayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjpyZXNldCk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjpoYXNQZW5kaW5nVGFzayk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjpydW5QZW5kaW5nVGFzayk6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZUNDVGhyZWFkOjpwZW5kaW5nRGVsYXkpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VDQ1RocmVhZDo6cG9zdFRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VD
Q1RocmVhZDo6cG9zdERlbGF5ZWRUYXNrKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NU
aHJlYWQ6OnRocmVhZElEKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NTbW9vdGhlZFRp
bWVyOjpGYWtlQ0NTbW9vdGhlZFRpbWVyKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NT
bW9vdGhlZFRpbWVyOjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUNDU21vb3RoZWRUaW1lcjo6Z2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIHRlc3RzL0NDU21v
b3RoZWRUaW1lclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToK
KwogMjAxMS0xMC0yMCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIElt
cGxlbWVudCBtZWNoYW5pc20gdG8gZW5hYmxlIHByaXZpbGVnZWQgd2ViZ2wgZXh0ZW5zaW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDU2YjYwY2Q1YWIxNWZjYWVhODhkMmQ3Mjc5MjVhNDljYzY0ODEx
ZWIuLmVhZDZhMjBiYjE0ZDMyYjlmYTMzYTZmMGIzMjA5YTI2NGYyNGZkZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTM1MjAsNiArMzUyMCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250
cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NGcmFtZVJhdGVDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLApAQCAtMzU0
OCw2ICszNTUwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY2hlZHVsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRNYWluVGhyZWFkUHJveHku
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxD
b250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NDIyNmQyMDNlMDE5ODc4ZTM3ZjliOGFjY2I4ODZi
ZTQ1NGEzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0ND
RnJhbWVSYXRlQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNs
dWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKCkKK3sK
KyAgICAvLyBEb250IGZvcndhcmQgdGhlIHRpY2sgaWYgd2UgYXJlIHRocm90dGxlZC4KKyAgICBp
ZiAobV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzLnNpemUoKSA+PSAyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5vblZTeW5jVGljaygpOwor
fQorCit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSgpCit7CisgICAg
bV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzLmFwcGVuZChtX3RpbWVyLT5nZXRDdXJyZW50VGltZSgp
KTsKK30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEZpbmlzaEZyYW1lKCkKK3sK
KyAgICBtX3BlbmRpbmdGcmFtZUJlZ2luVGltZXMudGFrZUZpcnN0KCk7CisgICAgLyogRklYTUU6
IGRvIHNvbWV0aGluZyB3aXRoIHRoZSB0aGUgZGVsdGEgYmV0d2VlbiBub3cgYW5kIGZyYW1lQmVn
aW5UaW1lLgorICAgICAgIEUuZy4KKyAgICAgICAgIGRvdWJsZSBmaW5pc2hlZEZyYW1lQmVnaW5U
aW1lID0gbV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzLnRha2VGaXJzdCgpOworICAgICAgICAgZG91
YmxlIGVsYXBzZWRGcmFtZVRpbWUgPSBub3cgLSBmaW5pc2hlZEZyYW1lQmVnaW5UaW1lOworICAg
ICAgICAgZG91YmxlIHdlaWdodGVkZnJhbWVSYXRlID0gd2VpZ2h0ZWRfYmxlbmQod2VpZ2h0ZWRm
cmFtZVJhdGUsZWxhcHNlZEZyYW1lVGltZSk7CisKKyAgICAgICBUaGVuLCB1c2Ugd2VpZ2h0ZWQg
dGltZSB0byBkZWNpZGUgYmV0d2VlbjoKKyAgICAgICAgIC0gZGlzcGxheSByYXRlCisgICAgICAg
ICAtIDEvMiBkaXNwbGF5IHJhdGUKKyAgICAgICAgIC0gaGVhdmlseS13ZWlnaHRlZCBmcmFtZSB0
aW1lCisgICAgKi8KKworfQorCit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQWJvcnRB
bGxQZW5kaW5nRnJhbWVzKCkKK3sKKyAgICBtX3BlbmRpbmdGcmFtZUJlZ2luVGltZXMuY2xlYXIo
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MjUxNTI2MzRlMzdmYjc4MDA1YWVlYzU4NDEwMjg1NmU2YWY1M2JhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NG
cmFtZVJhdGVDb250cm9sbGVyLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgb25WU3luY1RpY2soKSA9IDA7Cit9OworCitjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRy
b2xsZXIgOiBwdWJsaWMgQ0NUaW1lckNsaWVudCB7CitwdWJsaWM6CisgICAgQ0NGcmFtZVJhdGVD
b250cm9sbGVyKGludCBkaXNwbGF5UmVmcmVzaFJhdGVIeiwgQ0NUaHJlYWQqIHRocmVhZCkKKyAg
ICAgICAgICAgIDogbV9jbGllbnQoMCkKKyAgICAgICAgICAgICwgbV90aW1lcihhZG9wdFB0cihu
ZXcgQ0NTbW9vdGhlZFRpbWVyKGRpc3BsYXlSZWZyZXNoUmF0ZUh6LCB0aHJlYWQpKSkgeyB9CisK
KyAgICBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIoUGFzc093blB0cjxDQ1Ntb290aGVkVGltZXI+IHRp
bWVyKQorICAgICAgICAgICAgOiBtX2NsaWVudCgwKQorICAgICAgICAgICAgLCBtX3RpbWVyKHRp
bWVyKSB7IH0KKworICAgIHZvaWQgc2V0Q2xpZW50KENDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVu
dCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICB2b2lkIHNldEFjdGl2ZShi
b29sIGFjdGl2ZSkgeyBtX3RpbWVyLT5zZXRDbGllbnQodGhpcyk7IG1fdGltZXItPnNldEFjdGl2
ZShhY3RpdmUpOyB9CisKKyAgICAvKiBVc2UgdGhlIGZvbGxvd2luZyBtZXRob2RzIHRvIGFkanVz
dCB0YXJnZXQgZnJhbWUgcmF0ZS4KKyAgICAgKgorICAgICAqIE11bHRpcGxlIGZyYW1lcyBjYW4g
YmUgaW4tcHJvZ3Jlc3MsIGJ1dCBmb3IgZXZlcnkgZGlkQmVnaW5GcmFtZSwKKyAgICAgKiBhIGRp
ZEZpbmlzaEZyYW1lIHNob3VsZCBiZSBwb3N0ZWQuCisgICAgICoKKyAgICAgKiBJZiB0aGUgcmVu
ZGVyaW5nIHBpcGVsaW5lIGNyYXNoZXMsIGNhbGwgZGlkQWJvcnRBbGxQZW5kaW5nRnJhbWVzLgor
ICAgICAqLworICAgIHZvaWQgZGlkQmVnaW5GcmFtZSgpOworICAgIHZvaWQgZGlkRmluaXNoRnJh
bWUoKTsKKyAgICB2b2lkIGRpZEFib3J0QWxsUGVuZGluZ0ZyYW1lcygpOworCisgICAgLy8gQ0NU
aW1lckNsaWVudCBpbXBsZW1lbnRhdGlvbi4gRG8gbm90IGNhbGwgZGlyZWN0bHkuCisgICAgdm9p
ZCBvblRpbWVyVGljaygpOworCitwcm90ZWN0ZWQ6CisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVy
Q2xpZW50KiBtX2NsaWVudDsKKyAgICBEZXF1ZTxkb3VibGU+IG1fcGVuZGluZ0ZyYW1lQmVnaW5U
aW1lczsKKyAgICBPd25QdHI8Q0NTbW9vdGhlZFRpbWVyKj4gbV90aW1lcjsKK307CisKK30KKyNl
bmRpZiAvLyBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1l
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWZiNzcxM2FlYmI4NThkNTkxYmYzYWUyOWZlNTk5Mjk2MzY2M2Ix
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVy
LmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFz
ay5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEND
U21vb3RoZWRUaW1lcjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIG1fYWN0aXZlID0g
YWN0aXZlOworICAgIG1fdGlja1N0ZXAgPSAwOworICAgIGlmIChtX2FjdGl2ZSAmJiAhbV90aWNr
VGFza1BlbmRpbmcpCisgICAgICAgIHBvc3RUaWNrVGFzaygpOworfQorCit2b2lkIENDU21vb3Ro
ZWRUaW1lcjo6cG9zdFRpY2tUYXNrKCkKK3sKKyAgICBBU1NFUlQoIW1fdGlja1Rhc2tQZW5kaW5n
KTsKKworICAgIGludCBkZWxheTsKKyAgICBpZiAobV9nb2FsUmF0ZSA9PSA2MCkgeworICAgICAg
ICBpZiAoIW1fdGlja1N0ZXApCisgICAgICAgICAgICBkZWxheSA9IDE2OworICAgICAgICBlbHNl
CisgICAgICAgICAgICBkZWxheSA9IDE3OworICAgICAgICBtX3RpY2tTdGVwID0gKG1fdGlja1N0
ZXAgKyAxKSAlIDM7CisgICAgfSBlbHNlIGlmIChtX2dvYWxSYXRlID09IDMwKSB7CisgICAgICAg
IGlmICghbV90aWNrU3RlcCkKKyAgICAgICAgICAgIGRlbGF5ID0gMzM7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRlbGF5ID0gMzI7CisgICAgICAgIG1fdGlja1N0ZXAgPSAobV90aWNrU3Rl
cCArIDEpICUgMzsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiBpdHMgc29tZSBvdGhlciBy
YXRlLCBqdXN0IGdpdmUgdXAgZm9yIG5vdy4KKyAgICAgICAgZGVsYXkgPSBzdGF0aWNfY2FzdDxp
bnQ+KDEwMDAuMCAvIHN0YXRpY19jYXN0PGRvdWJsZT4obV9nb2FsUmF0ZSkpOworICAgIH0KKwor
ICAgIG1fdGhyZWFkLT5wb3N0RGVsYXllZFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1Ntb290aGVkVGltZXI6Om9uVGljaywgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpLCBk
ZWxheSk7CisgICAgbV90aWNrVGFza1BlbmRpbmcgPSB0cnVlOworfQorCit2b2lkIENDU21vb3Ro
ZWRUaW1lcjo6b25UaWNrKGRvdWJsZSBwb3N0VGltZSkKK3sKKyAgICBtX3RpY2tUYXNrUGVuZGlu
ZyA9IGZhbHNlOworICAgIGlmICghbV9hY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IHBvc3QgYW5vdGhlciB0YXNrICpiZWZvcmUqIHRoZSB0aWNrCisgICAgcG9zdFRpY2tUYXNrKCk7
CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5vblRpbWVyVGljaygpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4Njg5NTE2MjNm
NGNmN2VhZWNkYTA1MTkzYjk2YjBiMDQwNWVhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaApA
QCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU21vb3RoZWRUaW1lcl9o
CisjZGVmaW5lIENDU21vb3RoZWRUaW1lcl9oCisKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1RocmVhZDsKKworY2xhc3MgQ0NU
aW1lckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgPSAw
OworfTsKKworLyoKKyAqIFRyaWVzIHRvIG1haW50YWluIGEgc3RlYWR5ICJhdmVyYWdlIHRpY2sg
cmF0ZSIgZXZlbiB3aGVuIHRoZSB1bmRlcmx5aW5nCisgKiBDQ1RocmVhZCBjYW4ndCBwb3N0IHRh
c2tzIGF0IHRoYXQgcHJlY2lzZSByYXRlLgorICoKKyAqIE5PVEU6IERlbGV0aW5nIHRoaXMgd2hl
biBhIHRhc2sgaXMgcG9zdGVkIHdpbGwgbGVhZCB0byBhIGNyYXNoLgorICogICAgICAgVG8gZml4
IHRoaXMsIHdlIG5lZWQgdG8gZ2VuZXJhbGl6ZSBDQ1Njb3BlZE1haW5UaHJlYWRQcm94eS4KKyAq
LworY2xhc3MgQ0NTbW9vdGhlZFRpbWVyIHsKK3B1YmxpYzoKKyAgICBDQ1Ntb290aGVkVGltZXIo
aW50IGdvYWxSYXRlLCBDQ1RocmVhZCogdGhyZWFkKQorICAgICAgICAgICAgOiBtX2FjdGl2ZShm
YWxzZSkKKyAgICAgICAgICAgICwgbV9jbGllbnQoMCkKKyAgICAgICAgICAgICwgbV9nb2FsUmF0
ZShnb2FsUmF0ZSkKKyAgICAgICAgICAgICwgbV90aHJlYWQodGhyZWFkKQorICAgICAgICAgICAg
LCBtX3RpY2tTdGVwKDApCisgICAgICAgICAgICAsIG1fdGlja1Rhc2tQZW5kaW5nKGZhbHNlKSB7
IH0KKworICAgIHZvaWQgc2V0Q2xpZW50KENDVGltZXJDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVu
dCA9IGNsaWVudDsgfQorCisgICAgdm9pZCBnZXRHb2FsUmF0ZShpbnQgZ29hbFJhdGUpIHsgbV9n
b2FsUmF0ZSA9IGdvYWxSYXRlOyB9CisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisKKyAgICAv
LyBWaXJ0dWFsIGZvciB0ZXN0aW5nLgorICAgIHZpcnR1YWwgZG91YmxlIGdldEN1cnJlbnRUaW1l
KCkgY29uc3QgeyByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgb25UaWNrKGRvdWJsZSBwb3N0VGltZSk7CisgICAgdm9pZCBwb3N0
VGlja1Rhc2soKTsKKworICAgIGJvb2wgbV9hY3RpdmU7CisgICAgQ0NUaW1lckNsaWVudCogbV9j
bGllbnQ7CisgICAgaW50IG1fZ29hbFJhdGU7CisgICAgQ0NUaHJlYWQqIG1fdGhyZWFkOworICAg
IGludCBtX3RpY2tTdGVwOworICAgIGJvb2wgbV90aWNrVGFza1BlbmRpbmc7Cit9OworCit9Cisj
ZW5kaWYgLy8gQ0NTbW9vdGhlZFRpbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmlu
ZGV4IDkxZWRlNGE1OTc3ZGZhNzBlZjMwNDhlZWJlNGFmNThkYzU3NmViYjcuLjRlNDVlNmU1ZDQ0
ZGFkOGQzZTc0MmFmNTE3OTUzOGQzY2E0NzcxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQpAQCAtNTQsMTEgKzU0LDE0IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMn
OiBbCiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAg
ICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xh
eWVyU29ydGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0
cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTbW9vdGhl
ZFRpbWVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44MjhlMzgwNDQ4YjQ0ODA2N2JkNmYzZTAwODk2OTZhM2M5ZTMzMjU0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJU
ZXN0LmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgiCisKKyNpbmNsdWRl
ICJDQ1NjaGVkdWxlclRlc3RDb21tb24uaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0VGVzdHM7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEZha2VDQ0ZyYW1lUmF0
ZUNvbnRyb2xsZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVy
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KCkg
eyByZXNldCgpOyB9CisgICAgdm9pZCByZXNldCgpIHsgbV90aWNrQ2FsbGVkID0gZmFsc2U7IH0K
KyAgICBib29sIHRpY2tDYWxsZWQoKSBjb25zdCB7IHJldHVybiBtX3RpY2tDYWxsZWQ7IH0KKwor
ICAgIHZvaWQgb25WU3luY1RpY2soKSB7IG1fdGlja0NhbGxlZCA9IHRydWU7IH0KKworcHJvdGVj
dGVkOgorICAgIGJvb2wgbV90aWNrQ2FsbGVkOworfTsKKworVEVTVChDQ0ZyYW1lUmF0ZUNvbnRy
b2xsZXJUZXN0LCBUZXN0RnJhbWVUaHJvdHRsaW5nX0ltbWVkaWF0ZUFjaykKK3sKKyAgICBGYWtl
Q0NUaHJlYWQgdGhyZWFkOworICAgIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgY2xp
ZW50OworICAgIEZha2VDQ1Ntb290aGVkVGltZXIqIHRpbWVyID0gbmV3IEZha2VDQ1Ntb290aGVk
VGltZXIoNjAsICZ0aHJlYWQpOworICAgIENDRnJhbWVSYXRlQ29udHJvbGxlciBjb250cm9sbGVy
KGFkb3B0UHRyKHRpbWVyKSk7CisKKyAgICBjb250cm9sbGVyLnNldENsaWVudCgmY2xpZW50KTsK
KyAgICBjb250cm9sbGVyLnNldEFjdGl2ZSh0cnVlKTsKKworICAgIGRvdWJsZSBlbGFwc2VkID0g
MDsgLy8gTXVjayBhcm91bmQgd2l0aCB0aW1lIGEgYml0CisKKyAgICAvLyBUcmlnZ2VyIG9uZSBm
cmFtZSwgbWFrZSBzdXJlIHRoZSB2c3luYyBjYWxsYmFjayBpcyBjYWxsZWQKKyAgICBlbGFwc2Vk
ICs9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAgICB0aW1lci0+c2V0Q3VycmVudFRpbWUoZWxh
cHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xp
ZW50LnRpY2tDYWxsZWQoKSk7CisgICAgY2xpZW50LnJlc2V0KCk7CisKKyAgICAvLyBUZWxsIHRo
ZSBjb250cm9sbGVyIHdlIGRyZXcKKyAgICBjb250cm9sbGVyLmRpZEJlZ2luRnJhbWUoKTsKKwor
ICAgIC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgdGhlIGZyYW1lIGVuZGVkIDVtcyBsYXRlcgorICAg
IHRpbWVyLT5zZXRDdXJyZW50VGltZSh0aW1lci0+Z2V0Q3VycmVudFRpbWUoKSArIDUpOworICAg
IGNvbnRyb2xsZXIuZGlkRmluaXNoRnJhbWUoKTsKKworICAgIC8vIFRyaWdnZXIgYW5vdGhlciBm
cmFtZSwgbWFrZSBzdXJlIHZzeW5jIHJ1bnMgYWdhaW4KKyAgICBlbGFwc2VkICs9IHRocmVhZC5w
ZW5kaW5nRGVsYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVyLT5nZXRDdXJy
ZW50VGltZSgpKTsgLy8gU2FuaXR5IGNoZWNrIHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3QgbW92
ZSB0aW1lIGJhY2t3YXJkLgorICAgIHRpbWVyLT5zZXRDdXJyZW50VGltZShlbGFwc2VkKTsKKyAg
ICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0Nh
bGxlZCgpKTsKK30KKworVEVTVChDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LCBUZXN0RnJhbWVU
aHJvdHRsaW5nX1R3b0ZyYW1lc0luRmxpZ2h0KQoreworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7
CisgICAgRmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUND
U21vb3RoZWRUaW1lciogdGltZXIgPSBuZXcgRmFrZUNDU21vb3RoZWRUaW1lcig2MCwgJnRocmVh
ZCk7CisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVyIGNvbnRyb2xsZXIoYWRvcHRQdHIodGltZXIp
KTsKKworICAgIGNvbnRyb2xsZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAgIGNvbnRyb2xsZXIu
c2V0QWN0aXZlKHRydWUpOworCisgICAgZG91YmxlIGVsYXBzZWQgPSAwOyAvLyBNdWNrIGFyb3Vu
ZCB3aXRoIHRpbWUgYSBiaXQKKworICAgIC8vIFRyaWdnZXIgb25lIGZyYW1lLCBtYWtlIHN1cmUg
dGhlIHZzeW5jIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgIGVsYXBzZWQgKz0gdGhyZWFkLnBlbmRp
bmdEZWxheSgpOworICAgIHRpbWVyLT5zZXRDdXJyZW50VGltZShlbGFwc2VkKTsKKyAgICB0aHJl
YWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgp
KTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgd2Ug
ZHJldworICAgIGNvbnRyb2xsZXIuZGlkQmVnaW5GcmFtZSgpOworCisgICAgLy8gVHJpZ2dlciBh
bm90aGVyIGZyYW1lLCBtYWtlIHN1cmUgdnN5bmMgY2FsbGJhY2sgcnVucyBhZ2FpbgorICAgIGVs
YXBzZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIEVYUEVDVF9UUlVFKGVsYXBzZWQg
Pj0gdGltZXItPmdldEN1cnJlbnRUaW1lKCkpOyAvLyBTYW5pdHkgY2hlY2sgdGhhdCBwcmV2aW91
cyBjb2RlIGRpZG4ndCBtb3ZlIHRpbWUgYmFja3dhcmQuCisgICAgdGltZXItPnNldEN1cnJlbnRU
aW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9U
UlVFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8g
VGVsbCB0aGUgY29udHJvbGxlciB3ZSBkcmV3LCBhZ2Fpbi4KKyAgICBjb250cm9sbGVyLmRpZEJl
Z2luRnJhbWUoKTsKKworICAgIC8vIFRyaWdnZXIgYW5vdGhlciBmcmFtZS4gU2luY2UgdHdvIGZy
YW1lcyBhcmUgcGVuZGluZywgd2Ugc2hvdWxkIG5vdCBkcmF3LgorICAgIGVsYXBzZWQgKz0gdGhy
ZWFkLnBlbmRpbmdEZWxheSgpOworICAgIEVYUEVDVF9UUlVFKGVsYXBzZWQgPj0gdGltZXItPmdl
dEN1cnJlbnRUaW1lKCkpOyAvLyBTYW5pdHkgY2hlY2sgdGhhdCBwcmV2aW91cyBjb2RlIGRpZG4n
dCBtb3ZlIHRpbWUgYmFja3dhcmQuCisgICAgdGltZXItPnNldEN1cnJlbnRUaW1lKGVsYXBzZWQp
OworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9GQUxTRShjbGllbnQu
dGlja0NhbGxlZCgpKTsKKworICAgIC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgdGhlIGZpcnN0IGZy
YW1lIGVuZGVkIDVtcyBsYXRlcgorICAgIHRpbWVyLT5zZXRDdXJyZW50VGltZSh0aW1lci0+Z2V0
Q3VycmVudFRpbWUoKSArIDUpOworICAgIGNvbnRyb2xsZXIuZGlkRmluaXNoRnJhbWUoKTsKKwor
ICAgIC8vIFRpY2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkCisgICAgRVhQRUNUX0ZBTFNF
KGNsaWVudC50aWNrQ2FsbGVkKCkpOworCisgICAgLy8gVHJpZ2dlciB5ZXQgYW5vdGhlciBmcmFt
ZS4gU2luY2Ugb25lIGZyYW1lcyBpcyBwZW5kaW5nLCBhbm90aGVyIHZzeW5jIGNhbGxiYWNrIHNo
b3VsZCBydW4uCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgRVhQ
RUNUX1RSVUUoZWxhcHNlZCA+PSB0aW1lci0+Z2V0Q3VycmVudFRpbWUoKSk7IC8vIFNhbml0eSBj
aGVjayB0aGF0IHByZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAgICB0
aW1lci0+c2V0Q3VycmVudFRpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNr
KCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9u
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM3OGJlZDNmOWIxNjUzZGU3NTNkZDRkNGU0ZDA2ZGYyNTIzOGYxN2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVy
VGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NT
Y2hlZHVsZXJUZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NTY2hlZHVsZXJUZXN0Q29tbW9uX2gKKwor
I2luY2x1ZGUgImNjL0NDU21vb3RoZWRUaW1lci5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgi
CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKK2Ns
YXNzIEZha2VDQ1RpbWVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDVGltZXJDbGllbnQgewor
cHVibGljOgorICAgIEZha2VDQ1RpbWVyQ2xpZW50KCkgeyByZXNldCgpOyB9CisgICAgdm9pZCBy
ZXNldCgpIHsgbV90aWNrQ2FsbGVkID0gZmFsc2U7IH0KKyAgICBib29sIHRpY2tDYWxsZWQoKSBj
b25zdCB7IHJldHVybiBtX3RpY2tDYWxsZWQ7IH0KKworICAgIHZvaWQgb25UaW1lclRpY2soKSB7
IG1fdGlja0NhbGxlZCA9IHRydWU7IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgbV90aWNrQ2Fs
bGVkOworfTsKKworY2xhc3MgRmFrZUNDVGhyZWFkIDogcHVibGljIFdlYkNvcmU6OkNDVGhyZWFk
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlc2V0KCkgeyBtX3BlbmRpbmdUYXNrLmNsZWFyKCk7IH0K
KworICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2soKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdUYXNr
OyB9CisgICAgdm9pZCBydW5QZW5kaW5nVGFzaygpCisgICAgeworICAgICAgICBPd25QdHI8VGFz
az4gdGFzayA9IG1fcGVuZGluZ1Rhc2sucmVsZWFzZSgpOworICAgICAgICB0YXNrLT5wZXJmb3Jt
VGFzaygpOworICAgIH0KKworICAgIGRvdWJsZSBwZW5kaW5nRGVsYXkoKSBjb25zdAorICAgIHsK
KyAgICAgICAgRVhQRUNUX1RSVUUoaGFzUGVuZGluZ1Rhc2soKSk7CisgICAgICAgIHJldHVybiBt
X3BlbmRpbmdUYXNrRGVsYXk7CisgICAgfQorCisgICAgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRy
PFRhc2s+KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9pZCBwb3N0RGVsYXllZFRh
c2soUGFzc093blB0cjxUYXNrPiB0YXNrLCBkb3VibGUgZGVsYXkpCisgICAgeworICAgICAgICBF
WFBFQ1RfVFJVRSghaGFzUGVuZGluZ1Rhc2soKSk7CisgICAgICAgIEVYUEVDVF9HVChkZWxheSwg
MCk7CisgICAgICAgIG1fcGVuZGluZ1Rhc2sgPSB0YXNrOworICAgICAgICBtX3BlbmRpbmdUYXNr
RGVsYXkgPSBkZWxheTsKKyAgICB9CisgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKworcHJvdGVjdGVk
OgorICAgIE93blB0cjxUYXNrPiBtX3BlbmRpbmdUYXNrOworICAgIGRvdWJsZSBtX3BlbmRpbmdU
YXNrRGVsYXk7Cit9OworCitjbGFzcyBGYWtlQ0NTbW9vdGhlZFRpbWVyIDogcHVibGljIFdlYkNv
cmU6OkNDU21vb3RoZWRUaW1lciB7CitwdWJsaWM6CisgICAgRmFrZUNDU21vb3RoZWRUaW1lcihk
b3VibGUgZCwgV2ViQ29yZTo6Q0NUaHJlYWQqIHQpCisgICAgICAgIDogQ0NTbW9vdGhlZFRpbWVy
KGQsIHQpCisgICAgICAgICwgbV9jdXJyZW50VGltZSgwKSB7IH0KKworICAgIHZvaWQgc2V0Q3Vy
cmVudFRpbWUoZG91YmxlIHRpbWUpIHsgbV9jdXJyZW50VGltZSA9IHRpbWU7IH0KKyAgICB2aXJ0
dWFsIGRvdWJsZSBnZXRDdXJyZW50VGltZSgpIHsgcmV0dXJuIG1fY3VycmVudFRpbWU7IH0KKwor
cHJvdGVjdGVkOgorICAgIGRvdWJsZSBtX2N1cnJlbnRUaW1lOworfTsKKworfQorCisjZW5kaWYg
Ly8gQ0NTY2hlZHVsZXJUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NTbW9vdGhlZFRpbWVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDU21vb3RoZWRUaW1lclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMjI0YzI1ZWEw
YjY4ZDgzNjI2ZmUwZmFjMGJlMTI5ZTFlZGY3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU21vb3RoZWRUaW1lclRlc3QuY3BwCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNj
L0NDU21vb3RoZWRUaW1lci5oIgorCisjaW5jbHVkZSAiQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgi
CisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOworCituYW1lc3BhY2Ug
eworCitURVNUKENDU21vb3RoZWRUaW1lclRlc3QsIFRhc2tQb3N0ZWRBbmRUaWNrQ2FsbGVkKQor
eworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDVGltZXJDbGllbnQgY2xpZW50
OworICAgIEZha2VDQ1Ntb290aGVkVGltZXIgdGltZXIoNjAsICZ0aHJlYWQpOworICAgIHRpbWVy
LnNldENsaWVudCgmY2xpZW50KTsKKworICAgIHRpbWVyLnNldEN1cnJlbnRUaW1lKDApOworICAg
IHRpbWVyLnNldEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBFQ1RfVFJVRSh0aHJlYWQuaGFzUGVuZGlu
Z1Rhc2soKSk7CisKKyAgICB0aW1lci5zZXRDdXJyZW50VGltZSgxNik7CisgICAgdGhyZWFkLnJ1
blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9
CisKK1RFU1QoQ0NTbW9vdGhlZFRpbWVyLCBUaWNrTm90Q2FsbGVkV2l0aFRhc2tQb3N0ZWQpCit7
CisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NUaW1lckNsaWVudCBjbGllbnQ7
CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0aW1lcig2MCwgJnRocmVhZCk7CisgICAgdGltZXIu
c2V0Q2xpZW50KCZjbGllbnQpOworICAgIHRpbWVyLnNldEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBF
Q1RfVFJVRSh0aHJlYWQuaGFzUGVuZGluZ1Rhc2soKSk7CisgICAgdGltZXIuc2V0QWN0aXZlKGZh
bHNlKTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2xp
ZW50LnRpY2tDYWxsZWQoKSk7Cit9CisKK1RFU1QoQ0NTbW9vdGhlZFRpbWVyVGVzdCwgQWNoaWV2
ZXNUYXJnZXRSYXRlV2l0aE5vTm9pc2UpCit7CisgICAgaW50IG51bUl0ZXJhdGlvbnMgPSAxMDAw
OworCisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NUaW1lckNsaWVudCBjbGll
bnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0aW1lcig2MCwgJnRocmVhZCk7CisgICAgdGlt
ZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAgIHRpbWVyLnNldEFjdGl2ZSh0cnVlKTsKKworICAg
IGRvdWJsZSB0b3RhbEZyYW1lVGltZSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1J
dGVyYXRpb25zOyArK2kpIHsKKyAgICAgICAgZG91YmxlIGRlbGF5ID0gdGhyZWFkLnBlbmRpbmdE
ZWxheSgpOworCisgICAgICAgIC8vIGFjY3VtdWxhdGUgdGhlICJkZWxheSIKKyAgICAgICAgdG90
YWxGcmFtZVRpbWUgKz0gZGVsYXk7CisKKyAgICAgICAgLy8gUnVuIHRoZSBjYWxsYmFjayBleGFj
dGx5IHdoZW4gYXNrZWQKKyAgICAgICAgZG91YmxlIG5vdyA9IHRpbWVyLmdldEN1cnJlbnRUaW1l
KCkgKyBkZWxheTsKKyAgICAgICAgdGltZXIuc2V0Q3VycmVudFRpbWUobm93KTsKKyAgICAgICAg
dGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgfQorICAgIGRvdWJsZSBhdmVyYWdlSW50ZXJ2
YWwgPSB0b3RhbEZyYW1lVGltZSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtSXRlcmF0aW9ucyk7
CisgICAgRVhQRUNUX05FQVIoMTAwMC4wIC8gNjAuMCwgYXZlcmFnZUludGVydmFsLCAwLjEpOwor
fQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112309</attachid>
            <date>2011-10-25 02:41:53 -0700</date>
            <delta_ts>2011-10-25 02:44:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70713-20111025024152.patch</filename>
            <type>text/plain</type>
            <size>34239</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgzMDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmY2ZhMGFiMmIyMzA1ZGE1
ZTRhOTU4NzU5M2I3NGQ4NzFkYTE5M2E3Li4xZDY5ZTFkMTc0MTQxZDVhOWFhNjIxMTVmZTE0NjVj
YzBiNDdiYzBiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTAtMjUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVy
QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxl
clRpbWVyQWRhcHRlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI6Om9uVGltZXJU
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRl
cjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEZpbmlzaEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQWJvcnRBbGxQ
ZW5kaW5nRnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJDbGllbnQ6On5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRBY3RpdmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpwb3N0VGlja1Rhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpvblRpY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDU21vb3RoZWRUaW1lckNsaWVudDo6fkNDU21vb3RoZWRUaW1lckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6OkNDU21vb3RoZWRUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6On5DQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTbW9vdGhlZFRpbWVyOjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ntb290
aGVkVGltZXI6OmN1cnJlbnRUaW1lKToKKwogMjAxMS0xMC0yNCAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3Ig
V2lkZ2V0IHN1YmNsYXNzZXMgdG8gY29udHJvbCB3aGV0aGVyIHRyYW5zZm9ybXMgYWZmZWN0IHRo
ZSBmcmFtZSByZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQyNGQ4NjRjOWUwMzIy
YTJmOTk3NDVkMTRlZjg1MDRiOTVhYjYzZTIuLmRhN2ZhNGIxNGM1ODk3YzIwY2NiY2Q3NzA1ZDli
NGE0Yzk5ZGM2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMTAtMjUgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtj
aHJvbWl1bV0gSW1wbGVtZW50IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVk
dWxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3
MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVy
Q2xpZW50OjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpyZXNldCk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6dGlja0NhbGxl
ZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVu
dDo6b25WU3luY1RpY2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAq
IHRlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpyZXNl
dCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lckNsaWVudDo6dGlj
a0NhbGxlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lckNsaWVu
dDo6b25UaW1lclRpY2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6RmFr
ZUNDVGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJlc2V0KToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6Omhhc1BlbmRpbmdUYXNrKToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJ1blBlbmRpbmdUYXNrKToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnBlbmRpbmdEZWxheSk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUNDVGhyZWFkOjpwb3N0RGVsYXllZFRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VDQ1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Nt
b290aGVkVGltZXI6OkZha2VDQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VDQ1Ntb290aGVkVGltZXI6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyOjpjdXJyZW50VGltZSk6CisgICAgICAgICogdGVzdHMv
Q0NTbW9vdGhlZFRpbWVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRF
U1QpOgorCiAyMDExLTEwLTI0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTgyNjYuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggZjljZWNmNDE2ZjgwMjgyMWVmZDUyOTNlZGUxNmE3NDE4NzEwMmI4OS4uOGFm
MzdjZjAxNmNmYjU3OWQxOThiODBiOWVhZGY3ZTE1ZjZlM2NlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzUyNyw2ICszNTI3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCkBAIC0zNTU1LDYgKzM1
NTcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NjaGVkdWxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2NoZWR1bGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZE1haW5UaHJlYWRQcm94eS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbENvbnRyb2xs
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzdkOGU1OTg1YzU5NGUzOWQ3OWE4OGYxY2I2ODk5MmVkZTAzM2Qw
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NGcmFtZVJh
dGVDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNj
L0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIgOiBwdWJsaWMgQ0NT
bW9vdGhlZFRpbWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI+IGNyZWF0ZShDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXIqIGZyYW1lUmF0ZUNvbnRyb2xsZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcihmcmFtZVJhdGVDb250cm9sbGVy
KSk7CisgICAgfQorICAgIHZpcnR1YWwgfkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRl
cigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgeyBtX2ZyYW1lUmF0ZUNv
bnRyb2xsZXItPm9uVGltZXJUaWNrKCk7IH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NGcmFt
ZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKENDRnJhbWVSYXRlQ29udHJvbGxlciogZnJhbWVS
YXRlQ29udHJvbGxlcikKKyAgICAgICAgICAgIDogbV9mcmFtZVJhdGVDb250cm9sbGVyKGZyYW1l
UmF0ZUNvbnRyb2xsZXIpIHsgfQorCisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVyKiBtX2ZyYW1l
UmF0ZUNvbnRyb2xsZXI7Cit9OworCitDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OkNDRnJhbWVSYXRl
Q29udHJvbGxlcihQYXNzT3duUHRyPENDU21vb3RoZWRUaW1lcj4gdGltZXIpCisgICAgICAgIDog
bV9jbGllbnQoMCkKKyAgICAgICAgLCBtX3RpbWVyKHRpbWVyKQoreworICAgIG1fdGltZXJDbGll
bnRBZGFwdGVyID0gQ0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyOjpjcmVhdGUodGhp
cyk7CisgICAgbV90aW1lci0+c2V0Q2xpZW50KG1fdGltZXJDbGllbnRBZGFwdGVyLmdldCgpKTsK
K30KKworQ0NGcmFtZVJhdGVDb250cm9sbGVyOjp+Q0NGcmFtZVJhdGVDb250cm9sbGVyKCkKK3sK
K30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKCkKK3sKKyAgICAv
LyBEb24ndCBmb3J3YXJkIHRoZSB0aWNrIGlmIHdlIGFyZSB0aHJvdHRsZWQuCisgICAgaWYgKG1f
cGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy5zaXplKCkgPj0ga01heEZyYW1lc1BlbmRpbmcpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm9uVlN5
bmNUaWNrKCk7Cit9CisKK3ZvaWQgQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpkaWRCZWdpbkZyYW1l
KCkKK3sKKyAgICBtX3BlbmRpbmdGcmFtZUJlZ2luVGltZXMuYXBwZW5kKG1fdGltZXItPmN1cnJl
bnRUaW1lKCkpOworfQorCit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkRmluaXNoRnJh
bWUoKQoreworICAgIG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy50YWtlRmlyc3QoKTsKKyAgICAv
LyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhlIHRoZSBkZWx0YSBiZXR3ZWVuIG5vdyBhbmQg
ZnJhbWVCZWdpblRpbWUuCisgICAgLy8gIEUuZy4KKyAgICAvLyAgICBkb3VibGUgZmluaXNoZWRG
cmFtZUJlZ2luVGltZSA9IG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy50YWtlRmlyc3QoKTsKKyAg
ICAvLyAgICBkb3VibGUgZWxhcHNlZEZyYW1lVGltZSA9IG5vdyAtIGZpbmlzaGVkRnJhbWVCZWdp
blRpbWU7CisgICAgLy8gICAgZG91YmxlIHdlaWdodGVkZnJhbWVSYXRlID0gd2VpZ2h0ZWRfYmxl
bmQod2VpZ2h0ZWRmcmFtZVJhdGUsZWxhcHNlZEZyYW1lVGltZSk7CisgICAgLy8KKyAgICAvLyBU
aGVuLCB1c2Ugd2VpZ2h0ZWQgdGltZSB0byBkZWNpZGUgYmV0d2VlbjoKKyAgICAvLyAgIC0gZGlz
cGxheSByYXRlCisgICAgLy8gICAtIDEvMiBkaXNwbGF5IHJhdGUKKyAgICAvLyAgIC0gaGVhdmls
eS13ZWlnaHRlZCBmcmFtZSB0aW1lCit9CisKK3ZvaWQgQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpk
aWRBYm9ydEFsbFBlbmRpbmdGcmFtZXMoKQoreworICAgIG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1l
cy5jbGVhcigpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM0MjQ0ZDUzZDE2YzA0ZjY1N2YzODM3OGQxMWE0ZjA4OWVlM2Y5ODAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDRnJhbWVSYXRlQ29udHJvbGxlcl9oCisjZGVmaW5lIENDRnJhbWVSYXRl
Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJjYy9DQ1Ntb290aGVkVGltZXIuaCIKKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBvblZTeW5jVGljaygpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfkNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCgpIHsgfQorfTsKKworY2xhc3MgQ0NG
cmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyOworCitjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRy
b2xsZXIgeworcHVibGljOgorICAgIENDRnJhbWVSYXRlQ29udHJvbGxlcihQYXNzT3duUHRyPEND
U21vb3RoZWRUaW1lcj4pOworICAgIH5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIoKTsKKworICAgIHZv
aWQgc2V0Q2xpZW50KENDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCogY2xpZW50KSB7IG1fY2xp
ZW50ID0gY2xpZW50OyB9CisKKyAgICB2b2lkIHNldEFjdGl2ZShib29sIGFjdGl2ZSkgeyBtX3Rp
bWVyLT5zZXRBY3RpdmUoYWN0aXZlKTsgfQorCisgICAgLy8gVXNlIHRoZSBmb2xsb3dpbmcgbWV0
aG9kcyB0byBhZGp1c3QgdGFyZ2V0IGZyYW1lIHJhdGUuCisgICAgLy8KKyAgICAvLyBNdWx0aXBs
ZSBmcmFtZXMgY2FuIGJlIGluLXByb2dyZXNzLCBidXQgZm9yIGV2ZXJ5IGRpZEJlZ2luRnJhbWUs
IGEKKyAgICAvLyBkaWRGaW5pc2hGcmFtZSBzaG91bGQgYmUgcG9zdGVkLgorICAgIC8vCisgICAg
Ly8gSWYgdGhlIHJlbmRlcmluZyBwaXBlbGluZSBjcmFzaGVzLCBjYWxsIGRpZEFib3J0QWxsUGVu
ZGluZ0ZyYW1lcy4KKyAgICB2b2lkIGRpZEJlZ2luRnJhbWUoKTsKKyAgICB2b2lkIGRpZEZpbmlz
aEZyYW1lKCk7CisgICAgdm9pZCBkaWRBYm9ydEFsbFBlbmRpbmdGcmFtZXMoKTsKKworICAgIGVu
dW0geworICAgICAgICBrTWF4RnJhbWVzUGVuZGluZyA9IDIKKyAgICB9OworCitwcm90ZWN0ZWQ6
CisgICAgZnJpZW5kIGNsYXNzIENDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcjsKKyAg
ICB2b2lkIG9uVGltZXJUaWNrKCk7CisKKyAgICBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQq
IG1fY2xpZW50OworICAgIERlcXVlPGRvdWJsZT4gbV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzOwor
ICAgIE93blB0cjxDQ1Ntb290aGVkVGltZXIqPiBtX3RpbWVyOworICAgIE93blB0cjxDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI+IG1fdGltZXJDbGllbnRBZGFwdGVyOworfTsKKwor
fQorI2VuZGlmIC8vIENDRnJhbWVSYXRlQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhl
ZFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWNmZDIxOWY3ODg1M2Q2YTU1NWI2NGQ1MDc1NjQ5MGYy
ZTJkYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Ntb290aGVk
VGltZXIuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJl
YWRUYXNrLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgQ0NTbW9vdGhlZFRpbWVyOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgLy8gQmVj
b21pbmcgYWN0aXZlIGlzIGRlZmVycmVkOiB3ZSBwb3N0IGEgMC1kZWxheSB0YXNrLiBXaGVuIGl0
IHJ1bnMsCisgICAgLy8gd2UgdXNlIHRoYXQgdG8gZXN0YWJsaXNoIHRoZSB0aW1lYmFzZSwgYmVj
b21lIHRydWx5IGFjdGl2ZSwgYW5kIGZpcmUgdGhlIGZpcnN0IHRpY2suCisgICAgaWYgKGFjdGl2
ZSkgeworICAgICAgICBtX3N0YXRlID0gU1RBVEVfU1RBUlRJTkc7CisgICAgICAgIHBvc3RUaWNr
VGFzaygwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwor
fQorCit2b2lkIENDU21vb3RoZWRUaW1lcjo6cG9zdFRpY2tUYXNrKGxvbmcgbG9uZyBkZWxheSkK
K3sKKyAgICBtX3RocmVhZC0+cG9zdERlbGF5ZWRUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NTbW9vdGhlZFRpbWVyOjpvblRpY2spLCBkZWxheSk7Cit9CisKK3ZvaWQgQ0NTbW9vdGhl
ZFRpbWVyOjpvblRpY2soKQoreworICAgIGlmIChtX3N0YXRlID09IFNUQVRFX0lOQUNUSVZFKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTVEFURV9TVEFSVElORykgewor
ICAgICAgICBtX25leHRUaWNrVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgIG1fc3RhdGUg
PSBTVEFURV9BQ1RJVkU7CisgICAgfQorCisgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lKCk7
CisgICAgY29uc3QgZmxvYXQgbWF4TGF0ZUJlZm9yZURyb3BwaW5nRnJhbWUgPSAyLjU7CisKKyAg
ICBkb3VibGUgbmV3TmV4dFRpY2tUaW1lOworICAgIGJvb2wgdGljazsKKyAgICBkb3VibGUgYW1v
dW50TGF0ZSA9IG5vdyAtIG1fbmV4dFRpY2tUaW1lOworICAgIGlmIChhbW91bnRMYXRlID49IC0x
LjAgJiYgYW1vdW50TGF0ZSA8PSBtYXhMYXRlQmVmb3JlRHJvcHBpbmdGcmFtZSkgeworICAgICAg
ICAvLyBUaW1lciB3YXMgKG1vc3RseSkgb24gdGltZS4gV2UgcGVuYWxpemUgdG8gLTEuMCBmaXhl
ZCBvbiB0aGUgZWFybHkgc2lkZSBiZWNhdXNlCisgICAgICAgIC8vIHRoZSBkZWxheSBzeXN0ZW0g
dGFrZXMgdGhlIGZsb29yIG9mIGFueSBkZWxheSB3ZSBnaXZlIGl0LiBUaGUgbGF0ZS1zaWRlIGRl
bGF5CisgICAgICAgIC8vIGlzIG91ciB0b2xlcmFuY2UgZmFjdG9yIGZvciAicmFzb25hYmxlIiBk
ZWxheXMgZHVlIHRvIHRoZSB0aHJlYWQgYmVpbmcgYnVzeS4KKyAgICAgICAgdGljayA9IHRydWU7
CisgICAgICAgIG5ld05leHRUaWNrVGltZSA9IG1fbmV4dFRpY2tUaW1lICsgbV9pbnRlcnZhbE1z
OworICAgIH0gZWxzZSBpZiAoYW1vdW50TGF0ZSA8IC0xLjApIHsKKyAgICAgICAgLy8gVGltZXIg
Y2FtZSBiYWNrIHJlYWxseSBlYXJseS4gVW5saWtlbHkgYnV0IGJldHRlciB0byBoYW5kbGUgdGhl
biBleHBsb2RlLgorICAgICAgICBuZXdOZXh0VGlja1RpbWUgPSBtX25leHRUaWNrVGltZTsKKyAg
ICAgICAgdGljayA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAobm93IDwgbV9uZXh0VGlja1RpbWUp
IHsKKyAgICAgICAgLy8gVGltZXIgY2FtZSBiYWNrIGxhdGUuIFJlc2V0IHRoZSB0aW1lYmFzZS4K
KyAgICAgICAgbmV3TmV4dFRpY2tUaW1lID0gbm93ICsgbV9pbnRlcnZhbE1zOworICAgICAgICB0
aWNrID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBQb3N0IGFub3RoZXIgdGFzayAqYmVmb3JlKiB0
aGUgdGljayBhbmQgdXBkYXRlIHN0YXRlCisgICAgQVNTRVJUKG5ld05leHRUaWNrVGltZSA+IG5v
dyk7CisgICAgcG9zdFRpY2tUYXNrKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obmV3TmV4dFRpY2tU
aW1lIC0gbm93KSk7CisgICAgbV9uZXh0VGlja1RpbWUgPSBuZXdOZXh0VGlja1RpbWU7CisKKyAg
ICAvLyBGaXJlIHRoZSB0aWNrCisgICAgaWYgKHRpY2sgJiYgbV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5vblRpbWVyVGljaygpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFhODA3YTFkMTUyMWE2OGM4M2FkOWU3YjAwMGI0ZDMzYzE1OGIyM2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Ntb290aGVkVGltZXIuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENDU21vb3RoZWRUaW1lcl9oCisjZGVmaW5lIENDU21vb3RoZWRUaW1lcl9oCisKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ1RocmVhZDsKKworY2xhc3MgQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgb25UaW1lclRpY2soKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5DQ1Ntb290aGVkVGltZXJDbGllbnQoKSB7IH0KK307CisKKy8vIFRoaXMgdGltZXIgaW1w
bGVtZW50cyBhIG51bWVyaWNhbGx5IHN0YWJsZSwgbm9uLWRyaWZ0aW5nIHRpbWUgc291cmNlIGlu
IGZhY2Ugb2Ygc2V2ZXJhbAorLy8gY2hhbGxlbmdlczoKKy8vIDEuIFVudXN1YWwgZnJhbWUgcmF0
ZXMgdGhhdCBkb24ndCByZXByZXNlbnQgYXMgZG91YmxlcyBvciBpbnRlZ2VycywgZS5nLiBOVFND
CisvLyAgICBpcyA2MCooMTAwMC8xMDAxKSBIegorLy8KKy8vIDIuIFRhc2tzIGFyZSBwb3N0ZWQg
b25seSB0byBhIGNlcnRhaW4gbGV2ZWwgb2YgcHJlY2lzaW9uLCBvZnRlbiBtaWxsaXNlY29uZHMs
IGFuZCBtaWdodAorLy8gICAgcnVuIGxhdGUuCisvLworLy8gVGhlIHRpY2sgdGltZSBvZiB0aGlz
IHRpbWVyIGlzIHNwZWNpZmllZCB3aXRoIHR3byBudW1iZXJzOiBjeWNsZXNQZXJTZWNvbmQgYW5k
IGN5Y2xlc1BlclRpY2suCisvLyBUaGUgcmF0ZUluSHosIGFwcHJveGltYXRlLCBpczoKKy8vICAg
IHJhdGVJbkh6ID0gKGN5Y2xlc1BlclNlY29uZCAqIDEwMDApIC8gY3ljbGVzUGVyVGljaworLy8K
Ky8vIFNvLCBmb3IgZXhhbXBsZSwgNjBIeiBleGFjdGx5ICBpcyBjeWNsZXNQZXJTZWNvbmQ9MTAw
MCwgY3ljbGVzUGVyVGljaz02MAorLy8gT3IsIGZvciBleGFtcGxlLCBOVEhaIDU5Ljk0Li4uIGlz
IGN5Y2xlc1BlclNlY29uZD0xMDAxLCBjeWNsZXNQZXJUaWNrPTYwCisvLworLy8gTk9URTogRGVs
ZXRpbmcgQ0NTbW9vdGhlZFRpbWVyIHdoZW4gYSB0aWNrIGlzIHBlbmRpbmcgd2lsbCBsZWFkIHRv
IGEgY3Jhc2guCisvLyAgICAgIFRvIGZpeCB0aGlzLCB3ZSBuZWVkIHRvIGdlbmVyYWxpemUgQ0NT
Y29wZWRNYWluVGhyZWFkUHJveHkuCitjbGFzcyBDQ1Ntb290aGVkVGltZXIgeworcHVibGljOgor
ICAgIENDU21vb3RoZWRUaW1lcihkb3VibGUgaW50ZXJ2YWxNcywgQ0NUaHJlYWQqIHRocmVhZCkK
KyAgICAgICAgICAgIDogbV9jbGllbnQoMCkKKyAgICAgICAgICAgICwgbV9pbnRlcnZhbE1zKGlu
dGVydmFsTXMpCisgICAgICAgICAgICAsIG1fbmV4dFRpY2tUaW1lKDApCisgICAgICAgICAgICAs
IG1fc3RhdGUoU1RBVEVfSU5BQ1RJVkUpCisgICAgICAgICAgICAsIG1fdGhyZWFkKHRocmVhZCkg
eyB9CisgICAgdmlydHVhbCB+Q0NTbW9vdGhlZFRpbWVyKCkgeyB9CisKKyAgICB2b2lkIHNldENs
aWVudChDQ1Ntb290aGVkVGltZXJDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsg
fQorCisgICAgdm9pZCBzZXRJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWxNcykKKyAgICB7CisgICAg
ICAgIG1faW50ZXJ2YWxNcyA9IGludGVydmFsTXM7CisgICAgfQorCisgICAgdm9pZCBzZXRBY3Rp
dmUoYm9vbCk7CisKKyAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0aW5nLgorICAgIHZpcnR1YWwgZG91
YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgb25UaWNrKCk7CisgICAgdm9pZCBwb3N0
VGlja1Rhc2sobG9uZyBsb25nIGRlbGF5KTsKKworICAgIGVudW0gU3RhdGUgeworICAgICAgICBT
VEFURV9JTkFDVElWRSwKKyAgICAgICAgU1RBVEVfU1RBUlRJTkcsCisgICAgICAgIFNUQVRFX0FD
VElWRSwKKyAgICB9OworICAgIENDU21vb3RoZWRUaW1lckNsaWVudCogbV9jbGllbnQ7CisgICAg
ZG91YmxlIG1faW50ZXJ2YWxNczsKKyAgICBkb3VibGUgbV9uZXh0VGlja1RpbWU7CisgICAgU3Rh
dGUgbV9zdGF0ZTsKKyAgICBDQ1RocmVhZCogbV90aHJlYWQ7Cit9OworCit9CisjZW5kaWYgLy8g
Q0NTbW9vdGhlZFRpbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDkxZWRl
NGE1OTc3ZGZhNzBlZjMwNDhlZWJlNGFmNThkYzU3NmViYjcuLjRlNDVlNmU1ZDQ0ZGFkOGQzZTc0
MmFmNTE3OTUzOGQzY2E0NzcxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
NTQsMTEgKzU0LDE0IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAg
ICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9B
c3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVS
YXRlQ29udHJvbGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyU29ydGVy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVk
dWxlclRlc3RDb21tb24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTbW9vdGhlZFRpbWVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1RocmVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFt
ZVRlc3RIZWxwZXJzLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzhmOTY1
NjUxZDg0OTY5NjkwYzdhNWI2MWNkNTQ2NDgwZGYwNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcApA
QCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDQ1NjaGVk
dWxlclRlc3RDb21tb24uaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0VGVzdHM7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KCkgeyByZXNldCgp
OyB9CisKKyAgICB2b2lkIHJlc2V0KCkgeyBtX3RpY2tDYWxsZWQgPSBmYWxzZTsgfQorICAgIGJv
b2wgdGlja0NhbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGlja0NhbGxlZDsgfQorCisgICAgdmly
dHVhbCB2b2lkIG9uVlN5bmNUaWNrKCkgeyBtX3RpY2tDYWxsZWQgPSB0cnVlOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBib29sIG1fdGlja0NhbGxlZDsKK307CisKKworVEVTVChDQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXJUZXN0LCBUZXN0RnJhbWVUaHJvdHRsaW5nX0ltbWVkaWF0ZUFjaykKK3sKKyAgICBG
YWtlQ0NUaHJlYWQgdGhyZWFkOworICAgIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQg
Y2xpZW50OworICAgIEZha2VDQ1Ntb290aGVkVGltZXIqIHRpbWVyID0gbmV3IEZha2VDQ1Ntb290
aGVkVGltZXIoMTAwMC4wIC8gNjAuMCwgJnRocmVhZCk7CisgICAgQ0NGcmFtZVJhdGVDb250cm9s
bGVyIGNvbnRyb2xsZXIoYWRvcHRQdHIodGltZXIpKTsKKworICAgIGNvbnRyb2xsZXIuc2V0Q2xp
ZW50KCZjbGllbnQpOworICAgIGNvbnRyb2xsZXIuc2V0QWN0aXZlKHRydWUpOworCisgICAgZG91
YmxlIGVsYXBzZWQgPSAwOyAvLyBNdWNrIGFyb3VuZCB3aXRoIHRpbWUgYSBiaXQKKworICAgIC8v
IFRyaWdnZXIgb25lIGZyYW1lLCBtYWtlIHN1cmUgdGhlIHZzeW5jIGNhbGxiYWNrIGlzIGNhbGxl
ZAorICAgIGVsYXBzZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIHRpbWVyLT5zZXRD
dXJyZW50VGltZShlbGFwc2VkKTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBF
WFBFQ1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgpKTsKKyAgICBjbGllbnQucmVzZXQoKTsKKwor
ICAgIC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgd2UgZHJldworICAgIGNvbnRyb2xsZXIuZGlkQmVn
aW5GcmFtZSgpOworCisgICAgLy8gVGVsbCB0aGUgY29udHJvbGxlciB0aGUgZnJhbWUgZW5kZWQg
NW1zIGxhdGVyCisgICAgdGltZXItPnNldEN1cnJlbnRUaW1lKHRpbWVyLT5jdXJyZW50VGltZSgp
ICsgNSk7CisgICAgY29udHJvbGxlci5kaWRGaW5pc2hGcmFtZSgpOworCisgICAgLy8gVHJpZ2dl
ciBhbm90aGVyIGZyYW1lLCBtYWtlIHN1cmUgdnN5bmMgcnVucyBhZ2FpbgorICAgIGVsYXBzZWQg
Kz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIEVYUEVDVF9UUlVFKGVsYXBzZWQgPj0gdGlt
ZXItPmN1cnJlbnRUaW1lKCkpOyAvLyBTYW5pdHkgY2hlY2sgdGhhdCBwcmV2aW91cyBjb2RlIGRp
ZG4ndCBtb3ZlIHRpbWUgYmFja3dhcmQuCisgICAgdGltZXItPnNldEN1cnJlbnRUaW1lKGVsYXBz
ZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9UUlVFKGNsaWVu
dC50aWNrQ2FsbGVkKCkpOworfQorCitURVNUKENDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QsIFRl
c3RGcmFtZVRocm90dGxpbmdfVHdvRnJhbWVzSW5GbGlnaHQpCit7CisgICAgLy8gVGhpcyB0ZXN0
IG9ubHkgd29ya3MgZm9yIHRoZSBjYXNlIG9mIGtNYXhGcmFtZXNQZW5kaW5nID0gMgorICAgIEFT
U0VSVF9FUSgyLCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmtNYXhGcmFtZXNQZW5kaW5nKTsKKwor
ICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNs
aWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciogdGltZXIgPSBuZXcgRmFrZUND
U21vb3RoZWRUaW1lcigxMDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICBDQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXIgY29udHJvbGxlcihhZG9wdFB0cih0aW1lcikpOworCisgICAgY29udHJvbGxlci5z
ZXRDbGllbnQoJmNsaWVudCk7CisgICAgY29udHJvbGxlci5zZXRBY3RpdmUodHJ1ZSk7CisKKyAg
ICBkb3VibGUgZWxhcHNlZCA9IDA7IC8vIE11Y2sgYXJvdW5kIHdpdGggdGltZSBhIGJpdAorCisg
ICAgLy8gVHJpZ2dlciBvbmUgZnJhbWUsIG1ha2Ugc3VyZSB0aGUgdnN5bmMgY2FsbGJhY2sgaXMg
Y2FsbGVkCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgdGltZXIt
PnNldEN1cnJlbnRUaW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOwor
ICAgIEVYUEVDVF9UUlVFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworICAgIGNsaWVudC5yZXNldCgp
OworCisgICAgLy8gVGVsbCB0aGUgY29udHJvbGxlciB3ZSBkcmV3CisgICAgY29udHJvbGxlci5k
aWRCZWdpbkZyYW1lKCk7CisKKyAgICAvLyBUcmlnZ2VyIGFub3RoZXIgZnJhbWUsIG1ha2Ugc3Vy
ZSB2c3luYyBjYWxsYmFjayBydW5zIGFnYWluCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGlu
Z0RlbGF5KCk7CisgICAgRVhQRUNUX1RSVUUoZWxhcHNlZCA+PSB0aW1lci0+Y3VycmVudFRpbWUo
KSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHByZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBi
YWNrd2FyZC4KKyAgICB0aW1lci0+c2V0Q3VycmVudFRpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFk
LnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7
CisgICAgY2xpZW50LnJlc2V0KCk7CisKKyAgICAvLyBUZWxsIHRoZSBjb250cm9sbGVyIHdlIGRy
ZXcsIGFnYWluLgorICAgIGNvbnRyb2xsZXIuZGlkQmVnaW5GcmFtZSgpOworCisgICAgLy8gVHJp
Z2dlciBhbm90aGVyIGZyYW1lLiBTaW5jZSB0d28gZnJhbWVzIGFyZSBwZW5kaW5nLCB3ZSBzaG91
bGQgbm90IGRyYXcuCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAg
RVhQRUNUX1RSVUUoZWxhcHNlZCA+PSB0aW1lci0+Y3VycmVudFRpbWUoKSk7IC8vIFNhbml0eSBj
aGVjayB0aGF0IHByZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAgICB0
aW1lci0+c2V0Q3VycmVudFRpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNr
KCk7CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworCisgICAgLy8gVGVs
bCB0aGUgY29udHJvbGxlciB0aGUgZmlyc3QgZnJhbWUgZW5kZWQgNW1zIGxhdGVyCisgICAgdGlt
ZXItPnNldEN1cnJlbnRUaW1lKHRpbWVyLT5jdXJyZW50VGltZSgpICsgNSk7CisgICAgY29udHJv
bGxlci5kaWRGaW5pc2hGcmFtZSgpOworCisgICAgLy8gVGljayBzaG91bGQgbm90IGhhdmUgYmVl
biBjYWxsZWQKKyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisKKyAgICAv
LyBUcmlnZ2VyIHlldCBhbm90aGVyIGZyYW1lLiBTaW5jZSBvbmUgZnJhbWVzIGlzIHBlbmRpbmcs
IGFub3RoZXIgdnN5bmMgY2FsbGJhY2sgc2hvdWxkIHJ1bi4KKyAgICBlbGFwc2VkICs9IHRocmVh
ZC5wZW5kaW5nRGVsYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVyLT5jdXJy
ZW50VGltZSgpKTsgLy8gU2FuaXR5IGNoZWNrIHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3QgbW92
ZSB0aW1lIGJhY2t3YXJkLgorICAgIHRpbWVyLT5zZXRDdXJyZW50VGltZShlbGFwc2VkKTsKKyAg
ICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0Nh
bGxlZCgpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBiYmFkZmVhY2U1ZWJiMWUzYzQy
ODdjOTE2Yjg2YTk4ZjlhN2M2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgKQEAgLTAsMCArMSw5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ1NjaGVkdWxlclRlc3RDb21tb25faAorI2RlZmluZSBDQ1Nj
aGVkdWxlclRlc3RDb21tb25faAorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisj
aW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdFRlc3RzIHsKKworY2xhc3MgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCA6IHB1
YmxpYyBXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXJDbGllbnQgeworcHVibGljOgorICAgIEZha2VD
Q1Ntb290aGVkVGltZXJDbGllbnQoKSB7IHJlc2V0KCk7IH0KKyAgICB2b2lkIHJlc2V0KCkgeyBt
X3RpY2tDYWxsZWQgPSBmYWxzZTsgfQorICAgIGJvb2wgdGlja0NhbGxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGlja0NhbGxlZDsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgeyBt
X3RpY2tDYWxsZWQgPSB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIG1fdGlja0NhbGxl
ZDsKK307CisKK2NsYXNzIEZha2VDQ1RocmVhZCA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RocmVhZCB7
CitwdWJsaWM6CisgICAgRmFrZUNDVGhyZWFkKCkgeyByZXNldCgpOyB9CisgICAgdm9pZCByZXNl
dCgpCisgICAgeworICAgICAgICBtX3BlbmRpbmdUYXNrRGVsYXkgPSAwOworICAgICAgICBtX3Bl
bmRpbmdUYXNrLmNsZWFyKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNQZW5kaW5nVGFzaygpIGNv
bnN0IHsgcmV0dXJuIG1fcGVuZGluZ1Rhc2s7IH0KKyAgICB2b2lkIHJ1blBlbmRpbmdUYXNrKCkK
KyAgICB7CisgICAgICAgIE93blB0cjxUYXNrPiB0YXNrID0gbV9wZW5kaW5nVGFzay5yZWxlYXNl
KCk7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgfQorCisgICAgbG9uZyBsb25n
IHBlbmRpbmdEZWxheSgpIGNvbnN0CisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRShoYXNQZW5k
aW5nVGFzaygpKTsKKyAgICAgICAgcmV0dXJuIG1fcGVuZGluZ1Rhc2tEZWxheTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soUGFzc093blB0cjxUYXNrPikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RGVsYXllZFRhc2soUGFzc093blB0
cjxUYXNrPiB0YXNrLCBsb25nIGxvbmcgZGVsYXkpCisgICAgeworICAgICAgICBFWFBFQ1RfVFJV
RSghaGFzUGVuZGluZ1Rhc2soKSk7CisgICAgICAgIG1fcGVuZGluZ1Rhc2sgPSB0YXNrOworICAg
ICAgICBtX3BlbmRpbmdUYXNrRGVsYXkgPSBkZWxheTsKKyAgICB9CisgICAgdmlydHVhbCBXVEY6
OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gMDsgfQorCitwcm90ZWN0ZWQ6CisgICAgT3duUHRyPFRhc2s+IG1fcGVuZGluZ1Rh
c2s7CisgICAgbG9uZyBsb25nIG1fcGVuZGluZ1Rhc2tEZWxheTsKK307CisKK2NsYXNzIEZha2VD
Q1Ntb290aGVkVGltZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyIHsKK3B1Ymxp
YzoKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyKGRvdWJsZSBpLCBXZWJDb3JlOjpDQ1RocmVhZCog
dCkKKyAgICAgICAgOiBDQ1Ntb290aGVkVGltZXIoaSwgdCkKKyAgICAgICAgLCBtX2N1cnJlbnRU
aW1lKDApIHsgfQorCisgICAgdm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUgdGltZSkgeyBtX2N1
cnJlbnRUaW1lID0gdGltZTsgfQorICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50VGltZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgZG91YmxlIG1f
Y3VycmVudFRpbWU7Cit9OworCit9CisKKyNlbmRpZiAvLyBDQ1NjaGVkdWxlclRlc3RDb21tb25f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Ntb290aGVkVGlt
ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTbW9vdGhlZFRpbWVy
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYyY2YwNzIwMmEwOTVhZDU3YmRhNDA0MGZhMmU0NTc4YzMx
ZjZjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NT
bW9vdGhlZFRpbWVyVGVzdC5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisKKyNp
bmNsdWRlICJDQ1NjaGVkdWxlclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5o
IgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0VGVzdHM7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoQ0NTbW9vdGhlZFRpbWVy
VGVzdCwgVGFza1Bvc3RlZEFuZFRpY2tDYWxsZWQpCit7CisgICAgRmFrZUNDVGhyZWFkIHRocmVh
ZDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NTbW9v
dGhlZFRpbWVyIHRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIHRpbWVyLnNldENs
aWVudCgmY2xpZW50KTsKKworICAgIHRpbWVyLnNldEN1cnJlbnRUaW1lKDApOworICAgIHRpbWVy
LnNldEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBFQ1RfVFJVRSh0aHJlYWQuaGFzUGVuZGluZ1Rhc2so
KSk7CisKKyAgICB0aW1lci5zZXRDdXJyZW50VGltZSgxNik7CisgICAgdGhyZWFkLnJ1blBlbmRp
bmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9CisKK1RF
U1QoQ0NTbW9vdGhlZFRpbWVyLCBUaWNrTm90Q2FsbGVkV2l0aFRhc2tQb3N0ZWQpCit7CisgICAg
RmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVu
dDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyIHRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQp
OworICAgIHRpbWVyLnNldENsaWVudCgmY2xpZW50KTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1
ZSk7CisgICAgRVhQRUNUX1RSVUUodGhyZWFkLmhhc1BlbmRpbmdUYXNrKCkpOworICAgIHRpbWVy
LnNldEFjdGl2ZShmYWxzZSk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworfQorCitURVNUKENDU21vb3RoZWRUaW1l
clRlc3QsIEFjaGlldmVzVGFyZ2V0UmF0ZVdpdGhOb05vaXNlKQoreworICAgIGludCBudW1JdGVy
YXRpb25zID0gMTAwMDsKKworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDU21v
b3RoZWRUaW1lckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0aW1lcigx
MDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVudCk7Cisg
ICAgdGltZXIuc2V0QWN0aXZlKHRydWUpOworCisgICAgZG91YmxlIHRvdGFsRnJhbWVUaW1lID0g
MDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7ICsraSkgeworICAgICAg
ICBsb25nIGxvbmcgZGVsYXkgPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisKKyAgICAgICAgLy8g
YWNjdW11bGF0ZSB0aGUgImRlbGF5IgorICAgICAgICB0b3RhbEZyYW1lVGltZSArPSBkZWxheTsK
KworICAgICAgICAvLyBSdW4gdGhlIGNhbGxiYWNrIGV4YWN0bHkgd2hlbiBhc2tlZAorICAgICAg
ICBkb3VibGUgbm93ID0gdGltZXIuY3VycmVudFRpbWUoKSArIGRlbGF5OworICAgICAgICB0aW1l
ci5zZXRDdXJyZW50VGltZShub3cpOworICAgICAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsK
KyAgICB9CisgICAgZG91YmxlIGF2ZXJhZ2VJbnRlcnZhbCA9IHRvdGFsRnJhbWVUaW1lIC8gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihudW1JdGVyYXRpb25zKTsKKyAgICBFWFBFQ1RfTkVBUigxMDAwLjAg
LyA2MC4wLCBhdmVyYWdlSW50ZXJ2YWwsIDAuMSk7Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112310</attachid>
            <date>2011-10-25 02:45:00 -0700</date>
            <delta_ts>2011-10-25 02:58:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70713-20111025024459.patch</filename>
            <type>text/plain</type>
            <size>33714</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgzMDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmY2ZhMGFiMmIyMzA1ZGE1
ZTRhOTU4NzU5M2I3NGQ4NzFkYTE5M2E3Li4xZDY5ZTFkMTc0MTQxZDVhOWFhNjIxMTVmZTE0NjVj
YzBiNDdiYzBiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTAtMjUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVy
QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxl
clRpbWVyQWRhcHRlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI6Om9uVGltZXJU
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRl
cjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEZpbmlzaEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQWJvcnRBbGxQ
ZW5kaW5nRnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJDbGllbnQ6On5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRBY3RpdmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpwb3N0VGlja1Rhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpvblRpY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDU21vb3RoZWRUaW1lckNsaWVudDo6fkNDU21vb3RoZWRUaW1lckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6OkNDU21vb3RoZWRUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6On5DQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTbW9vdGhlZFRpbWVyOjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ntb290
aGVkVGltZXI6OmN1cnJlbnRUaW1lKToKKwogMjAxMS0xMC0yNCAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3Ig
V2lkZ2V0IHN1YmNsYXNzZXMgdG8gY29udHJvbCB3aGV0aGVyIHRyYW5zZm9ybXMgYWZmZWN0IHRo
ZSBmcmFtZSByZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQyNGQ4NjRjOWUwMzIy
YTJmOTk3NDVkMTRlZjg1MDRiOTVhYjYzZTIuLmRhN2ZhNGIxNGM1ODk3YzIwY2NiY2Q3NzA1ZDli
NGE0Yzk5ZGM2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMTAtMjUgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtj
aHJvbWl1bV0gSW1wbGVtZW50IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVk
dWxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3
MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVy
Q2xpZW50OjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpyZXNldCk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6dGlja0NhbGxl
ZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVu
dDo6b25WU3luY1RpY2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAq
IHRlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpyZXNl
dCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lckNsaWVudDo6dGlj
a0NhbGxlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lckNsaWVu
dDo6b25UaW1lclRpY2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6RmFr
ZUNDVGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJlc2V0KToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6Omhhc1BlbmRpbmdUYXNrKToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJ1blBlbmRpbmdUYXNrKToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnBlbmRpbmdEZWxheSk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUNDVGhyZWFkOjpwb3N0RGVsYXllZFRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VDQ1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Nt
b290aGVkVGltZXI6OkZha2VDQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VDQ1Ntb290aGVkVGltZXI6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyOjpjdXJyZW50VGltZSk6CisgICAgICAgICogdGVzdHMv
Q0NTbW9vdGhlZFRpbWVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRF
U1QpOgorCiAyMDExLTEwLTI0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTgyNjYuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggZjljZWNmNDE2ZjgwMjgyMWVmZDUyOTNlZGUxNmE3NDE4NzEwMmI4OS4uOGFm
MzdjZjAxNmNmYjU3OWQxOThiODBiOWVhZGY3ZTE1ZjZlM2NlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzUyNyw2ICszNTI3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCkBAIC0zNTU1LDYgKzM1
NTcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NjaGVkdWxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2NoZWR1bGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZE1haW5UaHJlYWRQcm94eS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbENvbnRyb2xs
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzdkOGU1OTg1YzU5NGUzOWQ3OWE4OGYxY2I2ODk5MmVkZTAzM2Qw
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NGcmFtZVJh
dGVDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNj
L0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIgOiBwdWJsaWMgQ0NT
bW9vdGhlZFRpbWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI+IGNyZWF0ZShDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXIqIGZyYW1lUmF0ZUNvbnRyb2xsZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcihmcmFtZVJhdGVDb250cm9sbGVy
KSk7CisgICAgfQorICAgIHZpcnR1YWwgfkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRl
cigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgeyBtX2ZyYW1lUmF0ZUNv
bnRyb2xsZXItPm9uVGltZXJUaWNrKCk7IH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NGcmFt
ZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKENDRnJhbWVSYXRlQ29udHJvbGxlciogZnJhbWVS
YXRlQ29udHJvbGxlcikKKyAgICAgICAgICAgIDogbV9mcmFtZVJhdGVDb250cm9sbGVyKGZyYW1l
UmF0ZUNvbnRyb2xsZXIpIHsgfQorCisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVyKiBtX2ZyYW1l
UmF0ZUNvbnRyb2xsZXI7Cit9OworCitDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OkNDRnJhbWVSYXRl
Q29udHJvbGxlcihQYXNzT3duUHRyPENDU21vb3RoZWRUaW1lcj4gdGltZXIpCisgICAgICAgIDog
bV9jbGllbnQoMCkKKyAgICAgICAgLCBtX3RpbWVyKHRpbWVyKQoreworICAgIG1fdGltZXJDbGll
bnRBZGFwdGVyID0gQ0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyOjpjcmVhdGUodGhp
cyk7CisgICAgbV90aW1lci0+c2V0Q2xpZW50KG1fdGltZXJDbGllbnRBZGFwdGVyLmdldCgpKTsK
K30KKworQ0NGcmFtZVJhdGVDb250cm9sbGVyOjp+Q0NGcmFtZVJhdGVDb250cm9sbGVyKCkKK3sK
K30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKCkKK3sKKyAgICAv
LyBEb24ndCBmb3J3YXJkIHRoZSB0aWNrIGlmIHdlIGFyZSB0aHJvdHRsZWQuCisgICAgaWYgKG1f
cGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy5zaXplKCkgPj0ga01heEZyYW1lc1BlbmRpbmcpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm9uVlN5
bmNUaWNrKCk7Cit9CisKK3ZvaWQgQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpkaWRCZWdpbkZyYW1l
KCkKK3sKKyAgICBtX3BlbmRpbmdGcmFtZUJlZ2luVGltZXMuYXBwZW5kKG1fdGltZXItPmN1cnJl
bnRUaW1lKCkpOworfQorCit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkRmluaXNoRnJh
bWUoKQoreworICAgIG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy50YWtlRmlyc3QoKTsKKyAgICAv
LyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhlIHRoZSBkZWx0YSBiZXR3ZWVuIG5vdyBhbmQg
ZnJhbWVCZWdpblRpbWUuCisgICAgLy8gIEUuZy4KKyAgICAvLyAgICBkb3VibGUgZmluaXNoZWRG
cmFtZUJlZ2luVGltZSA9IG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy50YWtlRmlyc3QoKTsKKyAg
ICAvLyAgICBkb3VibGUgZWxhcHNlZEZyYW1lVGltZSA9IG5vdyAtIGZpbmlzaGVkRnJhbWVCZWdp
blRpbWU7CisgICAgLy8gICAgZG91YmxlIHdlaWdodGVkZnJhbWVSYXRlID0gd2VpZ2h0ZWRfYmxl
bmQod2VpZ2h0ZWRmcmFtZVJhdGUsZWxhcHNlZEZyYW1lVGltZSk7CisgICAgLy8KKyAgICAvLyBU
aGVuLCB1c2Ugd2VpZ2h0ZWQgdGltZSB0byBkZWNpZGUgYmV0d2VlbjoKKyAgICAvLyAgIC0gZGlz
cGxheSByYXRlCisgICAgLy8gICAtIDEvMiBkaXNwbGF5IHJhdGUKKyAgICAvLyAgIC0gaGVhdmls
eS13ZWlnaHRlZCBmcmFtZSB0aW1lCit9CisKK3ZvaWQgQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpk
aWRBYm9ydEFsbFBlbmRpbmdGcmFtZXMoKQoreworICAgIG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1l
cy5jbGVhcigpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM0MjQ0ZDUzZDE2YzA0ZjY1N2YzODM3OGQxMWE0ZjA4OWVlM2Y5ODAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDRnJhbWVSYXRlQ29udHJvbGxlcl9oCisjZGVmaW5lIENDRnJhbWVSYXRl
Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJjYy9DQ1Ntb290aGVkVGltZXIuaCIKKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBvblZTeW5jVGljaygpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfkNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCgpIHsgfQorfTsKKworY2xhc3MgQ0NG
cmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyOworCitjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRy
b2xsZXIgeworcHVibGljOgorICAgIENDRnJhbWVSYXRlQ29udHJvbGxlcihQYXNzT3duUHRyPEND
U21vb3RoZWRUaW1lcj4pOworICAgIH5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIoKTsKKworICAgIHZv
aWQgc2V0Q2xpZW50KENDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCogY2xpZW50KSB7IG1fY2xp
ZW50ID0gY2xpZW50OyB9CisKKyAgICB2b2lkIHNldEFjdGl2ZShib29sIGFjdGl2ZSkgeyBtX3Rp
bWVyLT5zZXRBY3RpdmUoYWN0aXZlKTsgfQorCisgICAgLy8gVXNlIHRoZSBmb2xsb3dpbmcgbWV0
aG9kcyB0byBhZGp1c3QgdGFyZ2V0IGZyYW1lIHJhdGUuCisgICAgLy8KKyAgICAvLyBNdWx0aXBs
ZSBmcmFtZXMgY2FuIGJlIGluLXByb2dyZXNzLCBidXQgZm9yIGV2ZXJ5IGRpZEJlZ2luRnJhbWUs
IGEKKyAgICAvLyBkaWRGaW5pc2hGcmFtZSBzaG91bGQgYmUgcG9zdGVkLgorICAgIC8vCisgICAg
Ly8gSWYgdGhlIHJlbmRlcmluZyBwaXBlbGluZSBjcmFzaGVzLCBjYWxsIGRpZEFib3J0QWxsUGVu
ZGluZ0ZyYW1lcy4KKyAgICB2b2lkIGRpZEJlZ2luRnJhbWUoKTsKKyAgICB2b2lkIGRpZEZpbmlz
aEZyYW1lKCk7CisgICAgdm9pZCBkaWRBYm9ydEFsbFBlbmRpbmdGcmFtZXMoKTsKKworICAgIGVu
dW0geworICAgICAgICBrTWF4RnJhbWVzUGVuZGluZyA9IDIKKyAgICB9OworCitwcm90ZWN0ZWQ6
CisgICAgZnJpZW5kIGNsYXNzIENDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcjsKKyAg
ICB2b2lkIG9uVGltZXJUaWNrKCk7CisKKyAgICBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQq
IG1fY2xpZW50OworICAgIERlcXVlPGRvdWJsZT4gbV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzOwor
ICAgIE93blB0cjxDQ1Ntb290aGVkVGltZXIqPiBtX3RpbWVyOworICAgIE93blB0cjxDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI+IG1fdGltZXJDbGllbnRBZGFwdGVyOworfTsKKwor
fQorI2VuZGlmIC8vIENDRnJhbWVSYXRlQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhl
ZFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWNmZDIxOWY3ODg1M2Q2YTU1NWI2NGQ1MDc1NjQ5MGYy
ZTJkYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Ntb290aGVk
VGltZXIuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJl
YWRUYXNrLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgQ0NTbW9vdGhlZFRpbWVyOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgLy8gQmVj
b21pbmcgYWN0aXZlIGlzIGRlZmVycmVkOiB3ZSBwb3N0IGEgMC1kZWxheSB0YXNrLiBXaGVuIGl0
IHJ1bnMsCisgICAgLy8gd2UgdXNlIHRoYXQgdG8gZXN0YWJsaXNoIHRoZSB0aW1lYmFzZSwgYmVj
b21lIHRydWx5IGFjdGl2ZSwgYW5kIGZpcmUgdGhlIGZpcnN0IHRpY2suCisgICAgaWYgKGFjdGl2
ZSkgeworICAgICAgICBtX3N0YXRlID0gU1RBVEVfU1RBUlRJTkc7CisgICAgICAgIHBvc3RUaWNr
VGFzaygwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwor
fQorCit2b2lkIENDU21vb3RoZWRUaW1lcjo6cG9zdFRpY2tUYXNrKGxvbmcgbG9uZyBkZWxheSkK
K3sKKyAgICBtX3RocmVhZC0+cG9zdERlbGF5ZWRUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NTbW9vdGhlZFRpbWVyOjpvblRpY2spLCBkZWxheSk7Cit9CisKK3ZvaWQgQ0NTbW9vdGhl
ZFRpbWVyOjpvblRpY2soKQoreworICAgIGlmIChtX3N0YXRlID09IFNUQVRFX0lOQUNUSVZFKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTVEFURV9TVEFSVElORykgewor
ICAgICAgICBtX25leHRUaWNrVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgIG1fc3RhdGUg
PSBTVEFURV9BQ1RJVkU7CisgICAgfQorCisgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lKCk7
CisgICAgY29uc3QgZmxvYXQgbWF4TGF0ZUJlZm9yZURyb3BwaW5nRnJhbWUgPSAyLjU7CisKKyAg
ICBkb3VibGUgbmV3TmV4dFRpY2tUaW1lOworICAgIGJvb2wgdGljazsKKyAgICBkb3VibGUgYW1v
dW50TGF0ZSA9IG5vdyAtIG1fbmV4dFRpY2tUaW1lOworICAgIGlmIChhbW91bnRMYXRlID49IC0x
LjAgJiYgYW1vdW50TGF0ZSA8PSBtYXhMYXRlQmVmb3JlRHJvcHBpbmdGcmFtZSkgeworICAgICAg
ICAvLyBUaW1lciB3YXMgKG1vc3RseSkgb24gdGltZS4gV2UgcGVuYWxpemUgdG8gLTEuMCBmaXhl
ZCBvbiB0aGUgZWFybHkgc2lkZSBiZWNhdXNlCisgICAgICAgIC8vIHRoZSBkZWxheSBzeXN0ZW0g
dGFrZXMgdGhlIGZsb29yIG9mIGFueSBkZWxheSB3ZSBnaXZlIGl0LiBUaGUgbGF0ZS1zaWRlIGRl
bGF5CisgICAgICAgIC8vIGlzIG91ciB0b2xlcmFuY2UgZmFjdG9yIGZvciAicmFzb25hYmxlIiBk
ZWxheXMgZHVlIHRvIHRoZSB0aHJlYWQgYmVpbmcgYnVzeS4KKyAgICAgICAgdGljayA9IHRydWU7
CisgICAgICAgIG5ld05leHRUaWNrVGltZSA9IG1fbmV4dFRpY2tUaW1lICsgbV9pbnRlcnZhbE1z
OworICAgIH0gZWxzZSBpZiAoYW1vdW50TGF0ZSA8IC0xLjApIHsKKyAgICAgICAgLy8gVGltZXIg
Y2FtZSBiYWNrIHJlYWxseSBlYXJseS4gVW5saWtlbHkgYnV0IGJldHRlciB0byBoYW5kbGUgdGhl
biBleHBsb2RlLgorICAgICAgICBuZXdOZXh0VGlja1RpbWUgPSBtX25leHRUaWNrVGltZTsKKyAg
ICAgICAgdGljayA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAobm93IDwgbV9uZXh0VGlja1RpbWUp
IHsKKyAgICAgICAgLy8gVGltZXIgY2FtZSBiYWNrIGxhdGUuIFJlc2V0IHRoZSB0aW1lYmFzZS4K
KyAgICAgICAgbmV3TmV4dFRpY2tUaW1lID0gbm93ICsgbV9pbnRlcnZhbE1zOworICAgICAgICB0
aWNrID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBQb3N0IGFub3RoZXIgdGFzayAqYmVmb3JlKiB0
aGUgdGljayBhbmQgdXBkYXRlIHN0YXRlCisgICAgQVNTRVJUKG5ld05leHRUaWNrVGltZSA+IG5v
dyk7CisgICAgcG9zdFRpY2tUYXNrKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obmV3TmV4dFRpY2tU
aW1lIC0gbm93KSk7CisgICAgbV9uZXh0VGlja1RpbWUgPSBuZXdOZXh0VGlja1RpbWU7CisKKyAg
ICAvLyBGaXJlIHRoZSB0aWNrCisgICAgaWYgKHRpY2sgJiYgbV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5vblRpbWVyVGljaygpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU4OTRjYzI2OTdjNmUwMDRlOWQ0OTBiMmMzYmU4NTVlMzBkMTczODMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Ntb290aGVkVGltZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENDU21vb3RoZWRUaW1lcl9oCisjZGVmaW5lIENDU21vb3RoZWRUaW1lcl9oCisKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ1RocmVhZDsKKworY2xhc3MgQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgb25UaW1lclRpY2soKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5DQ1Ntb290aGVkVGltZXJDbGllbnQoKSB7IH0KK307CisKKy8vIFRoaXMgdGltZXIgaW1w
bGVtZW50cyBhIHRpbWUgc291cmNlIHRoYXQgYWNoaWV2ZXMgdGhlIHNwZWNpZmllZCBpbnRlcnZh
bAorLy8gaW4gZmFjZSBvZiBtaWxsaXNlY29uZC1wcmVjaXNpb24gZGVsYXllZCBjYWxsYmFja3Mg
YW5kIHJhbmRvbSBxdWV1ZWluZyBkZWxheXMuCisvLworLy8gTk9URTogRGVsZXRpbmcgQ0NTbW9v
dGhlZFRpbWVyIHdoZW4gYSB0aWNrIGlzIHBlbmRpbmcgd2lsbCBsZWFkIHRvIGEgY3Jhc2guCisv
LyAgICAgIFRvIGZpeCB0aGlzLCB3ZSBuZWVkIHRvIGdlbmVyYWxpemUgQ0NTY29wZWRNYWluVGhy
ZWFkUHJveHkuCitjbGFzcyBDQ1Ntb290aGVkVGltZXIgeworcHVibGljOgorICAgIENDU21vb3Ro
ZWRUaW1lcihkb3VibGUgaW50ZXJ2YWxNcywgQ0NUaHJlYWQqIHRocmVhZCkKKyAgICAgICAgICAg
IDogbV9jbGllbnQoMCkKKyAgICAgICAgICAgICwgbV9pbnRlcnZhbE1zKGludGVydmFsTXMpCisg
ICAgICAgICAgICAsIG1fbmV4dFRpY2tUaW1lKDApCisgICAgICAgICAgICAsIG1fc3RhdGUoU1RB
VEVfSU5BQ1RJVkUpCisgICAgICAgICAgICAsIG1fdGhyZWFkKHRocmVhZCkgeyB9CisgICAgdmly
dHVhbCB+Q0NTbW9vdGhlZFRpbWVyKCkgeyB9CisKKyAgICB2b2lkIHNldENsaWVudChDQ1Ntb290
aGVkVGltZXJDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorCisgICAgdm9p
ZCBzZXRJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWxNcykKKyAgICB7CisgICAgICAgIG1faW50ZXJ2
YWxNcyA9IGludGVydmFsTXM7CisgICAgfQorCisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisK
KyAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0aW5nLgorICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRU
aW1lKCkgY29uc3QgeyByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7IH0KKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgb25UaWNrKCk7CisgICAgdm9pZCBwb3N0VGlja1Rhc2sobG9u
ZyBsb25nIGRlbGF5KTsKKworICAgIGVudW0gU3RhdGUgeworICAgICAgICBTVEFURV9JTkFDVElW
RSwKKyAgICAgICAgU1RBVEVfU1RBUlRJTkcsCisgICAgICAgIFNUQVRFX0FDVElWRSwKKyAgICB9
OworICAgIENDU21vb3RoZWRUaW1lckNsaWVudCogbV9jbGllbnQ7CisgICAgZG91YmxlIG1faW50
ZXJ2YWxNczsKKyAgICBkb3VibGUgbV9uZXh0VGlja1RpbWU7CisgICAgU3RhdGUgbV9zdGF0ZTsK
KyAgICBDQ1RocmVhZCogbV90aHJlYWQ7Cit9OworCit9CisjZW5kaWYgLy8gQ0NTbW9vdGhlZFRp
bWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDkxZWRlNGE1OTc3ZGZhNzBl
ZjMwNDhlZWJlNGFmNThkYzU3NmViYjcuLjRlNDVlNmU1ZDQ0ZGFkOGQzZTc0MmFmNTE3OTUzOGQz
Y2E0NzcxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTQsMTEgKzU0LDE0
IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVz
dHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJM
TG9hZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxl
clRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Nj
aGVkdWxlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21t
b24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTbW9vdGhlZFRpbWVyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1RocmVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJz
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRnJhbWVS
YXRlQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzhmOTY1NjUxZDg0OTY5Njkw
YzdhNWI2MWNkNTQ2NDgwZGYwNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NGcmFtZVJhdGVDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDQ1NjaGVkdWxlclRlc3RDb21t
b24uaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgOiBw
dWJsaWMgV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICBGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KCkgeyByZXNldCgpOyB9CisKKyAgICB2
b2lkIHJlc2V0KCkgeyBtX3RpY2tDYWxsZWQgPSBmYWxzZTsgfQorICAgIGJvb2wgdGlja0NhbGxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGlja0NhbGxlZDsgfQorCisgICAgdmlydHVhbCB2b2lkIG9u
VlN5bmNUaWNrKCkgeyBtX3RpY2tDYWxsZWQgPSB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBi
b29sIG1fdGlja0NhbGxlZDsKK307CisKKworVEVTVChDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0
LCBUZXN0RnJhbWVUaHJvdHRsaW5nX0ltbWVkaWF0ZUFjaykKK3sKKyAgICBGYWtlQ0NUaHJlYWQg
dGhyZWFkOworICAgIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgY2xpZW50OworICAg
IEZha2VDQ1Ntb290aGVkVGltZXIqIHRpbWVyID0gbmV3IEZha2VDQ1Ntb290aGVkVGltZXIoMTAw
MC4wIC8gNjAuMCwgJnRocmVhZCk7CisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVyIGNvbnRyb2xs
ZXIoYWRvcHRQdHIodGltZXIpKTsKKworICAgIGNvbnRyb2xsZXIuc2V0Q2xpZW50KCZjbGllbnQp
OworICAgIGNvbnRyb2xsZXIuc2V0QWN0aXZlKHRydWUpOworCisgICAgZG91YmxlIGVsYXBzZWQg
PSAwOyAvLyBNdWNrIGFyb3VuZCB3aXRoIHRpbWUgYSBiaXQKKworICAgIC8vIFRyaWdnZXIgb25l
IGZyYW1lLCBtYWtlIHN1cmUgdGhlIHZzeW5jIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgIGVsYXBz
ZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIHRpbWVyLT5zZXRDdXJyZW50VGltZShl
bGFwc2VkKTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShj
bGllbnQudGlja0NhbGxlZCgpKTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIFRlbGwg
dGhlIGNvbnRyb2xsZXIgd2UgZHJldworICAgIGNvbnRyb2xsZXIuZGlkQmVnaW5GcmFtZSgpOwor
CisgICAgLy8gVGVsbCB0aGUgY29udHJvbGxlciB0aGUgZnJhbWUgZW5kZWQgNW1zIGxhdGVyCisg
ICAgdGltZXItPnNldEN1cnJlbnRUaW1lKHRpbWVyLT5jdXJyZW50VGltZSgpICsgNSk7CisgICAg
Y29udHJvbGxlci5kaWRGaW5pc2hGcmFtZSgpOworCisgICAgLy8gVHJpZ2dlciBhbm90aGVyIGZy
YW1lLCBtYWtlIHN1cmUgdnN5bmMgcnVucyBhZ2FpbgorICAgIGVsYXBzZWQgKz0gdGhyZWFkLnBl
bmRpbmdEZWxheSgpOworICAgIEVYUEVDVF9UUlVFKGVsYXBzZWQgPj0gdGltZXItPmN1cnJlbnRU
aW1lKCkpOyAvLyBTYW5pdHkgY2hlY2sgdGhhdCBwcmV2aW91cyBjb2RlIGRpZG4ndCBtb3ZlIHRp
bWUgYmFja3dhcmQuCisgICAgdGltZXItPnNldEN1cnJlbnRUaW1lKGVsYXBzZWQpOworICAgIHRo
cmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9UUlVFKGNsaWVudC50aWNrQ2FsbGVk
KCkpOworfQorCitURVNUKENDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QsIFRlc3RGcmFtZVRocm90
dGxpbmdfVHdvRnJhbWVzSW5GbGlnaHQpCit7CisgICAgLy8gVGhpcyB0ZXN0IG9ubHkgd29ya3Mg
Zm9yIHRoZSBjYXNlIG9mIGtNYXhGcmFtZXNQZW5kaW5nID0gMgorICAgIEFTU0VSVF9FUSgyLCBD
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmtNYXhGcmFtZXNQZW5kaW5nKTsKKworICAgIEZha2VDQ1Ro
cmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCBjbGllbnQ7
CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciogdGltZXIgPSBuZXcgRmFrZUNDU21vb3RoZWRUaW1l
cigxMDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIgY29u
dHJvbGxlcihhZG9wdFB0cih0aW1lcikpOworCisgICAgY29udHJvbGxlci5zZXRDbGllbnQoJmNs
aWVudCk7CisgICAgY29udHJvbGxlci5zZXRBY3RpdmUodHJ1ZSk7CisKKyAgICBkb3VibGUgZWxh
cHNlZCA9IDA7IC8vIE11Y2sgYXJvdW5kIHdpdGggdGltZSBhIGJpdAorCisgICAgLy8gVHJpZ2dl
ciBvbmUgZnJhbWUsIG1ha2Ugc3VyZSB0aGUgdnN5bmMgY2FsbGJhY2sgaXMgY2FsbGVkCisgICAg
ZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgdGltZXItPnNldEN1cnJlbnRU
aW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9U
UlVFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8g
VGVsbCB0aGUgY29udHJvbGxlciB3ZSBkcmV3CisgICAgY29udHJvbGxlci5kaWRCZWdpbkZyYW1l
KCk7CisKKyAgICAvLyBUcmlnZ2VyIGFub3RoZXIgZnJhbWUsIG1ha2Ugc3VyZSB2c3luYyBjYWxs
YmFjayBydW5zIGFnYWluCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7Cisg
ICAgRVhQRUNUX1RSVUUoZWxhcHNlZCA+PSB0aW1lci0+Y3VycmVudFRpbWUoKSk7IC8vIFNhbml0
eSBjaGVjayB0aGF0IHByZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAg
ICB0aW1lci0+c2V0Q3VycmVudFRpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdU
YXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisgICAgY2xpZW50
LnJlc2V0KCk7CisKKyAgICAvLyBUZWxsIHRoZSBjb250cm9sbGVyIHdlIGRyZXcsIGFnYWluLgor
ICAgIGNvbnRyb2xsZXIuZGlkQmVnaW5GcmFtZSgpOworCisgICAgLy8gVHJpZ2dlciBhbm90aGVy
IGZyYW1lLiBTaW5jZSB0d28gZnJhbWVzIGFyZSBwZW5kaW5nLCB3ZSBzaG91bGQgbm90IGRyYXcu
CisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgRVhQRUNUX1RSVUUo
ZWxhcHNlZCA+PSB0aW1lci0+Y3VycmVudFRpbWUoKSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHBy
ZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAgICB0aW1lci0+c2V0Q3Vy
cmVudFRpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworCisgICAgLy8gVGVsbCB0aGUgY29udHJv
bGxlciB0aGUgZmlyc3QgZnJhbWUgZW5kZWQgNW1zIGxhdGVyCisgICAgdGltZXItPnNldEN1cnJl
bnRUaW1lKHRpbWVyLT5jdXJyZW50VGltZSgpICsgNSk7CisgICAgY29udHJvbGxlci5kaWRGaW5p
c2hGcmFtZSgpOworCisgICAgLy8gVGljayBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQKKyAg
ICBFWFBFQ1RfRkFMU0UoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisKKyAgICAvLyBUcmlnZ2VyIHll
dCBhbm90aGVyIGZyYW1lLiBTaW5jZSBvbmUgZnJhbWVzIGlzIHBlbmRpbmcsIGFub3RoZXIgdnN5
bmMgY2FsbGJhY2sgc2hvdWxkIHJ1bi4KKyAgICBlbGFwc2VkICs9IHRocmVhZC5wZW5kaW5nRGVs
YXkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVyLT5jdXJyZW50VGltZSgpKTsg
Ly8gU2FuaXR5IGNoZWNrIHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3QgbW92ZSB0aW1lIGJhY2t3
YXJkLgorICAgIHRpbWVyLT5zZXRDdXJyZW50VGltZShlbGFwc2VkKTsKKyAgICB0aHJlYWQucnVu
UGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgpKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NjaGVkdWxl
clRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY2hlZHVsZXJU
ZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBiYmFkZmVhY2U1ZWJiMWUzYzQyODdjOTE2Yjg2YTk4
ZjlhN2M2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDQ1NjaGVkdWxlclRlc3RDb21tb25faAorI2RlZmluZSBDQ1NjaGVkdWxlclRlc3RD
b21tb25faAorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisjaW5jbHVkZSAiY2Mv
Q0NUaHJlYWQuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdFRl
c3RzIHsKKworY2xhc3MgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCA6IHB1YmxpYyBXZWJDb3Jl
OjpDQ1Ntb290aGVkVGltZXJDbGllbnQgeworcHVibGljOgorICAgIEZha2VDQ1Ntb290aGVkVGlt
ZXJDbGllbnQoKSB7IHJlc2V0KCk7IH0KKyAgICB2b2lkIHJlc2V0KCkgeyBtX3RpY2tDYWxsZWQg
PSBmYWxzZTsgfQorICAgIGJvb2wgdGlja0NhbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGlja0Nh
bGxlZDsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgeyBtX3RpY2tDYWxsZWQg
PSB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIG1fdGlja0NhbGxlZDsKK307CisKK2Ns
YXNzIEZha2VDQ1RocmVhZCA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RocmVhZCB7CitwdWJsaWM6Cisg
ICAgRmFrZUNDVGhyZWFkKCkgeyByZXNldCgpOyB9CisgICAgdm9pZCByZXNldCgpCisgICAgewor
ICAgICAgICBtX3BlbmRpbmdUYXNrRGVsYXkgPSAwOworICAgICAgICBtX3BlbmRpbmdUYXNrLmNs
ZWFyKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNQZW5kaW5nVGFzaygpIGNvbnN0IHsgcmV0dXJu
IG1fcGVuZGluZ1Rhc2s7IH0KKyAgICB2b2lkIHJ1blBlbmRpbmdUYXNrKCkKKyAgICB7CisgICAg
ICAgIE93blB0cjxUYXNrPiB0YXNrID0gbV9wZW5kaW5nVGFzay5yZWxlYXNlKCk7CisgICAgICAg
IHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgfQorCisgICAgbG9uZyBsb25nIHBlbmRpbmdEZWxh
eSgpIGNvbnN0CisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRShoYXNQZW5kaW5nVGFzaygpKTsK
KyAgICAgICAgcmV0dXJuIG1fcGVuZGluZ1Rhc2tEZWxheTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcG9zdFRhc2soUGFzc093blB0cjxUYXNrPikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBwb3N0RGVsYXllZFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNr
LCBsb25nIGxvbmcgZGVsYXkpCisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRSghaGFzUGVuZGlu
Z1Rhc2soKSk7CisgICAgICAgIG1fcGVuZGluZ1Rhc2sgPSB0YXNrOworICAgICAgICBtX3BlbmRp
bmdUYXNrRGVsYXkgPSBkZWxheTsKKyAgICB9CisgICAgdmlydHVhbCBXVEY6OlRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsg
fQorCitwcm90ZWN0ZWQ6CisgICAgT3duUHRyPFRhc2s+IG1fcGVuZGluZ1Rhc2s7CisgICAgbG9u
ZyBsb25nIG1fcGVuZGluZ1Rhc2tEZWxheTsKK307CisKK2NsYXNzIEZha2VDQ1Ntb290aGVkVGlt
ZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyIHsKK3B1YmxpYzoKKyAgICBGYWtl
Q0NTbW9vdGhlZFRpbWVyKGRvdWJsZSBpLCBXZWJDb3JlOjpDQ1RocmVhZCogdCkKKyAgICAgICAg
OiBDQ1Ntb290aGVkVGltZXIoaSwgdCkKKyAgICAgICAgLCBtX2N1cnJlbnRUaW1lKDApIHsgfQor
CisgICAgdm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUgdGltZSkgeyBtX2N1cnJlbnRUaW1lID0g
dGltZTsgfQorICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50VGltZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgZG91YmxlIG1fY3VycmVudFRpbWU7
Cit9OworCit9CisKKyNlbmRpZiAvLyBDQ1NjaGVkdWxlclRlc3RDb21tb25faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Ntb290aGVkVGltZXJUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTbW9vdGhlZFRpbWVyVGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjYyY2YwNzIwMmEwOTVhZDU3YmRhNDA0MGZhMmU0NTc4YzMxZjZjYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTbW9vdGhlZFRpbWVy
VGVzdC5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisKKyNpbmNsdWRlICJDQ1Nj
aGVkdWxlclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
VGVzdHM7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoQ0NTbW9vdGhlZFRpbWVyVGVzdCwgVGFza1Bv
c3RlZEFuZFRpY2tDYWxsZWQpCit7CisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtl
Q0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyIHRp
bWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIHRpbWVyLnNldENsaWVudCgmY2xpZW50
KTsKKworICAgIHRpbWVyLnNldEN1cnJlbnRUaW1lKDApOworICAgIHRpbWVyLnNldEFjdGl2ZSh0
cnVlKTsKKyAgICBFWFBFQ1RfVFJVRSh0aHJlYWQuaGFzUGVuZGluZ1Rhc2soKSk7CisKKyAgICB0
aW1lci5zZXRDdXJyZW50VGltZSgxNik7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7Cisg
ICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9CisKK1RFU1QoQ0NTbW9vdGhl
ZFRpbWVyLCBUaWNrTm90Q2FsbGVkV2l0aFRhc2tQb3N0ZWQpCit7CisgICAgRmFrZUNDVGhyZWFk
IHRocmVhZDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtl
Q0NTbW9vdGhlZFRpbWVyIHRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIHRpbWVy
LnNldENsaWVudCgmY2xpZW50KTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisgICAgRVhQ
RUNUX1RSVUUodGhyZWFkLmhhc1BlbmRpbmdUYXNrKCkpOworICAgIHRpbWVyLnNldEFjdGl2ZShm
YWxzZSk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX0ZBTFNFKGNs
aWVudC50aWNrQ2FsbGVkKCkpOworfQorCitURVNUKENDU21vb3RoZWRUaW1lclRlc3QsIEFjaGll
dmVzVGFyZ2V0UmF0ZVdpdGhOb05vaXNlKQoreworICAgIGludCBudW1JdGVyYXRpb25zID0gMTAw
MDsKKworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lckNs
aWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0aW1lcigxMDAwLjAgLyA2MC4w
LCAmdGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVudCk7CisgICAgdGltZXIuc2V0
QWN0aXZlKHRydWUpOworCisgICAgZG91YmxlIHRvdGFsRnJhbWVUaW1lID0gMDsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7ICsraSkgeworICAgICAgICBsb25nIGxvbmcg
ZGVsYXkgPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisKKyAgICAgICAgLy8gYWNjdW11bGF0ZSB0
aGUgImRlbGF5IgorICAgICAgICB0b3RhbEZyYW1lVGltZSArPSBkZWxheTsKKworICAgICAgICAv
LyBSdW4gdGhlIGNhbGxiYWNrIGV4YWN0bHkgd2hlbiBhc2tlZAorICAgICAgICBkb3VibGUgbm93
ID0gdGltZXIuY3VycmVudFRpbWUoKSArIGRlbGF5OworICAgICAgICB0aW1lci5zZXRDdXJyZW50
VGltZShub3cpOworICAgICAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICB9CisgICAg
ZG91YmxlIGF2ZXJhZ2VJbnRlcnZhbCA9IHRvdGFsRnJhbWVUaW1lIC8gc3RhdGljX2Nhc3Q8ZG91
YmxlPihudW1JdGVyYXRpb25zKTsKKyAgICBFWFBFQ1RfTkVBUigxMDAwLjAgLyA2MC4wLCBhdmVy
YWdlSW50ZXJ2YWwsIDAuMSk7Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112312</attachid>
            <date>2011-10-25 02:59:02 -0700</date>
            <delta_ts>2011-10-25 14:44:22 -0700</delta_ts>
            <desc>sigh</desc>
            <filename>bug-70713-20111025025901.patch</filename>
            <type>text/plain</type>
            <size>33680</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgzMzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YmM0MTJhYWJlMzJkZTkx
MTJmN2E4ZWY0NDJiNTJmYmVlODQ4NzdiLi42ZTU5OWM5OTk2NmI2N2QyNGI2NDJlYzUzOTFhNzFh
ZGNjMGQ5MWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTAtMjUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVy
QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxl
clRpbWVyQWRhcHRlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI6Om9uVGltZXJU
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRl
cjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEZpbmlzaEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQWJvcnRBbGxQ
ZW5kaW5nRnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJDbGllbnQ6On5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRBY3RpdmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpwb3N0VGlja1Rhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpvblRpY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDU21vb3RoZWRUaW1lckNsaWVudDo6fkNDU21vb3RoZWRUaW1lckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6OkNDU21vb3RoZWRUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6On5DQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTbW9vdGhlZFRpbWVyOjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ntb290
aGVkVGltZXI6OmN1cnJlbnRUaW1lKToKKwogMjAxMS0xMC0yMSAgTmF0IER1Y2EgIDxuZHVjYUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSb3V0ZSBDb25zb2xlOjp0aW1lIGFu
ZCBDb25zb2xlOjp0aW1lRW5kIHRvIHRyYWNlX2V2ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IDU1ZmZiN2U1MmYyNWFmMmJkZmZlYTMwNmQyYzUzNGM3NThjZDAyN2MuLmY5ODk5MGU1
M2M1NTJkZDYyOTUxMTBhMWEyZjQzZDZlNjA4OGQ3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMjUgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGZyYW1lIHJhdGUgY29udHJv
bCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDRnJhbWVS
YXRlQ29udHJvbGxlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
Q0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xp
ZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xp
ZW50OjpyZXNldCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJv
bGxlckNsaWVudDo6dGlja0NhbGxlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDRnJh
bWVSYXRlQ29udHJvbGxlckNsaWVudDo6b25WU3luY1RpY2spOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpGYWtl
Q0NTbW9vdGhlZFRpbWVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NTbW9v
dGhlZFRpbWVyQ2xpZW50OjpyZXNldCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21v
b3RoZWRUaW1lckNsaWVudDo6dGlja0NhbGxlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUNDU21vb3RoZWRUaW1lckNsaWVudDo6b25UaW1lclRpY2spOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VDQ1RocmVhZDo6RmFrZUNDVGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlQ0NUaHJlYWQ6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6
Omhhc1BlbmRpbmdUYXNrKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJ1
blBlbmRpbmdUYXNrKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnBlbmRp
bmdEZWxheSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjpwb3N0VGFzayk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjpwb3N0RGVsYXllZFRhc2spOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VDQ1Ntb290aGVkVGltZXI6OkZha2VDQ1Ntb290aGVkVGltZXIpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Ntb290aGVkVGltZXI6OnNldEN1cnJlbnRUaW1l
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyOjpjdXJyZW50VGlt
ZSk6CisgICAgICAgICogdGVzdHMvQ0NTbW9vdGhlZFRpbWVyVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorCiAyMDExLTEwLTI0ICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlZCBTaGFyZWRVQ2hhciBhbmQgdGln
aHRlbmVkIGxhbmd1YWdlIGFyb3VuZCBpdHMgcHJldmlvdXMgdXNlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IGZjYWZjYjlhMDI3M2Q3NDY2M2ZhYWQyOTJkZDU5MTdhNTBlM2Y2YTYuLmE5NTFmYmEzMGZl
MTNjZTA4YWJjNmQ0YjlhODQ2NmNkNTY2MDVkM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1Mjcs
NiArMzUyNyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250
cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLApAQCAtMzU1NSw2ICszNTU3LDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hl
ZHVsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NjaGVkdWxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Ntb290aGVkVGltZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRNYWluVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxDb250cm9sbGVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjM3ZDhlNTk4NWM1OTRlMzlkNzlhODhmMWNiNjg5OTJlZGUwMzNkMDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRnJhbWVSYXRlQ29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVh
ZFRhc2suaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyIDogcHVibGljIENDU21vb3RoZWRU
aW1lckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NGcmFtZVJhdGVD
b250cm9sbGVyVGltZXJBZGFwdGVyPiBjcmVhdGUoQ0NGcmFtZVJhdGVDb250cm9sbGVyKiBmcmFt
ZVJhdGVDb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIoZnJhbWVSYXRlQ29udHJvbGxlcikpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBvblRpbWVyVGljaygpIHsgbV9mcmFtZVJhdGVDb250cm9sbGVy
LT5vblRpbWVyVGljaygpOyB9Citwcml2YXRlOgorICAgIGV4cGxpY2l0IENDRnJhbWVSYXRlQ29u
dHJvbGxlclRpbWVyQWRhcHRlcihDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIqIGZyYW1lUmF0ZUNvbnRy
b2xsZXIpCisgICAgICAgICAgICA6IG1fZnJhbWVSYXRlQ29udHJvbGxlcihmcmFtZVJhdGVDb250
cm9sbGVyKSB7IH0KKworICAgIENDRnJhbWVSYXRlQ29udHJvbGxlciogbV9mcmFtZVJhdGVDb250
cm9sbGVyOworfTsKKworQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXIoUGFzc093blB0cjxDQ1Ntb290aGVkVGltZXI+IHRpbWVyKQorICAgICAgICA6IG1fY2xpZW50
KDApCisgICAgICAgICwgbV90aW1lcih0aW1lcikKK3sKKyAgICBtX3RpbWVyQ2xpZW50QWRhcHRl
ciA9IENDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcjo6Y3JlYXRlKHRoaXMpOworICAg
IG1fdGltZXItPnNldENsaWVudChtX3RpbWVyQ2xpZW50QWRhcHRlci5nZXQoKSk7Cit9CisKK0ND
RnJhbWVSYXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcigpCit7Cit9CisKK3Zv
aWQgQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpvblRpbWVyVGljaygpCit7CisgICAgLy8gRG9uJ3Qg
Zm9yd2FyZCB0aGUgdGljayBpZiB3ZSBhcmUgdGhyb3R0bGVkLgorICAgIGlmIChtX3BlbmRpbmdG
cmFtZUJlZ2luVGltZXMuc2l6ZSgpID49IGtNYXhGcmFtZXNQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5vblZTeW5jVGljaygp
OworfQorCit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSgpCit7Cisg
ICAgbV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzLmFwcGVuZChtX3RpbWVyLT5jdXJyZW50VGltZSgp
KTsKK30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEZpbmlzaEZyYW1lKCkKK3sK
KyAgICBtX3BlbmRpbmdGcmFtZUJlZ2luVGltZXMudGFrZUZpcnN0KCk7CisgICAgLy8gRklYTUU6
IGRvIHNvbWV0aGluZyB3aXRoIHRoZSB0aGUgZGVsdGEgYmV0d2VlbiBub3cgYW5kIGZyYW1lQmVn
aW5UaW1lLgorICAgIC8vICBFLmcuCisgICAgLy8gICAgZG91YmxlIGZpbmlzaGVkRnJhbWVCZWdp
blRpbWUgPSBtX3BlbmRpbmdGcmFtZUJlZ2luVGltZXMudGFrZUZpcnN0KCk7CisgICAgLy8gICAg
ZG91YmxlIGVsYXBzZWRGcmFtZVRpbWUgPSBub3cgLSBmaW5pc2hlZEZyYW1lQmVnaW5UaW1lOwor
ICAgIC8vICAgIGRvdWJsZSB3ZWlnaHRlZGZyYW1lUmF0ZSA9IHdlaWdodGVkX2JsZW5kKHdlaWdo
dGVkZnJhbWVSYXRlLGVsYXBzZWRGcmFtZVRpbWUpOworICAgIC8vCisgICAgLy8gVGhlbiwgdXNl
IHdlaWdodGVkIHRpbWUgdG8gZGVjaWRlIGJldHdlZW46CisgICAgLy8gICAtIGRpc3BsYXkgcmF0
ZQorICAgIC8vICAgLSAxLzIgZGlzcGxheSByYXRlCisgICAgLy8gICAtIGhlYXZpbHktd2VpZ2h0
ZWQgZnJhbWUgdGltZQorfQorCit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQWJvcnRB
bGxQZW5kaW5nRnJhbWVzKCkKK3sKKyAgICBtX3BlbmRpbmdGcmFtZUJlZ2luVGltZXMuY2xlYXIo
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jNDI0NGQ1M2QxNmMwNGY2NTdmMzgzNzhkMTFhNGYwODllZTNmOTgwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NG
cmFtZVJhdGVDb250cm9sbGVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgb25WU3luY1RpY2soKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5D
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQoKSB7IH0KK307CisKK2NsYXNzIENDRnJhbWVSYXRl
Q29udHJvbGxlclRpbWVyQWRhcHRlcjsKKworY2xhc3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyIHsK
K3B1YmxpYzoKKyAgICBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIoUGFzc093blB0cjxDQ1Ntb290aGVk
VGltZXI+KTsKKyAgICB+Q0NGcmFtZVJhdGVDb250cm9sbGVyKCk7CisKKyAgICB2b2lkIHNldENs
aWVudChDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNs
aWVudDsgfQorCisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCBhY3RpdmUpIHsgbV90aW1lci0+c2V0
QWN0aXZlKGFjdGl2ZSk7IH0KKworICAgIC8vIFVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgdG8g
YWRqdXN0IHRhcmdldCBmcmFtZSByYXRlLgorICAgIC8vCisgICAgLy8gTXVsdGlwbGUgZnJhbWVz
IGNhbiBiZSBpbi1wcm9ncmVzcywgYnV0IGZvciBldmVyeSBkaWRCZWdpbkZyYW1lLCBhCisgICAg
Ly8gZGlkRmluaXNoRnJhbWUgc2hvdWxkIGJlIHBvc3RlZC4KKyAgICAvLworICAgIC8vIElmIHRo
ZSByZW5kZXJpbmcgcGlwZWxpbmUgY3Jhc2hlcywgY2FsbCBkaWRBYm9ydEFsbFBlbmRpbmdGcmFt
ZXMuCisgICAgdm9pZCBkaWRCZWdpbkZyYW1lKCk7CisgICAgdm9pZCBkaWRGaW5pc2hGcmFtZSgp
OworICAgIHZvaWQgZGlkQWJvcnRBbGxQZW5kaW5nRnJhbWVzKCk7CisKKyAgICBlbnVtIHsKKyAg
ICAgICAga01heEZyYW1lc1BlbmRpbmcgPSAyCisgICAgfTsKKworcHJvdGVjdGVkOgorICAgIGZy
aWVuZCBjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI7CisgICAgdm9pZCBv
blRpbWVyVGljaygpOworCisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBEZXF1ZTxkb3VibGU+IG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1lczsKKyAgICBPd25Q
dHI8Q0NTbW9vdGhlZFRpbWVyKj4gbV90aW1lcjsKKyAgICBPd25QdHI8Q0NGcmFtZVJhdGVDb250
cm9sbGVyVGltZXJBZGFwdGVyPiBtX3RpbWVyQ2xpZW50QWRhcHRlcjsKK307CisKK30KKyNlbmRp
ZiAvLyBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODg3NjQ1YjA0NWIzOTMxMTJmZjVkNzcxNzUxOGY1YjE4YjFmNDY2Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgi
CisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5o
IgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENDU21v
b3RoZWRUaW1lcjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIC8vIEJlY29taW5nIGFj
dGl2ZSBpcyBkZWZlcnJlZDogd2UgcG9zdCBhIDAtZGVsYXkgdGFzay4gV2hlbiBpdCBydW5zLAor
ICAgIC8vIHdlIHVzZSB0aGF0IHRvIGVzdGFibGlzaCB0aGUgdGltZWJhc2UsIGJlY29tZSB0cnVs
eSBhY3RpdmUsIGFuZCBmaXJlIHRoZSBmaXJzdCB0aWNrLgorICAgIGlmIChhY3RpdmUpIHsKKyAg
ICAgICAgbV9zdGF0ZSA9IFNUQVRFX1NUQVJUSU5HOworICAgICAgICBwb3N0VGlja1Rhc2soMCk7
CisgICAgfSBlbHNlCisgICAgICAgIG1fc3RhdGUgPSBTVEFURV9JTkFDVElWRTsKK30KKwordm9p
ZCBDQ1Ntb290aGVkVGltZXI6OnBvc3RUaWNrVGFzayhsb25nIGxvbmcgZGVsYXkpCit7CisgICAg
bV90aHJlYWQtPnBvc3REZWxheWVkVGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDU21v
b3RoZWRUaW1lcjo6b25UaWNrKSwgZGVsYXkpOworfQorCit2b2lkIENDU21vb3RoZWRUaW1lcjo6
b25UaWNrKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTVEFURV9JTkFDVElWRSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fc3RhdGUgPT0gU1RBVEVfU1RBUlRJTkcpIHsKKyAgICAgICAg
bV9uZXh0VGlja1RpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgICBtX3N0YXRlID0gU1RBVEVf
QUNUSVZFOworICAgIH0KKworICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOworICAgIGNv
bnN0IGZsb2F0IG1heExhdGVCZWZvcmVEcm9wcGluZ0ZyYW1lID0gMi41OworCisgICAgZG91Ymxl
IG5ld05leHRUaWNrVGltZTsKKyAgICBib29sIHRpY2s7CisgICAgZG91YmxlIGFtb3VudExhdGUg
PSBub3cgLSBtX25leHRUaWNrVGltZTsKKyAgICBpZiAoYW1vdW50TGF0ZSA+PSAtMS4wICYmIGFt
b3VudExhdGUgPD0gbWF4TGF0ZUJlZm9yZURyb3BwaW5nRnJhbWUpIHsKKyAgICAgICAgLy8gVGlt
ZXIgd2FzIChtb3N0bHkpIG9uIHRpbWUuIFdlIHBlbmFsaXplIHRvIC0xLjAgZml4ZWQgb24gdGhl
IGVhcmx5IHNpZGUgYmVjYXVzZQorICAgICAgICAvLyB0aGUgZGVsYXkgc3lzdGVtIHRha2VzIHRo
ZSBmbG9vciBvZiBhbnkgZGVsYXkgd2UgZ2l2ZSBpdC4gVGhlIGxhdGUtc2lkZSBkZWxheQorICAg
ICAgICAvLyBpcyBvdXIgdG9sZXJhbmNlIGZhY3RvciBmb3IgInJhc29uYWJsZSIgZGVsYXlzIGR1
ZSB0byB0aGUgdGhyZWFkIGJlaW5nIGJ1c3kuCisgICAgICAgIHRpY2sgPSB0cnVlOworICAgICAg
ICBuZXdOZXh0VGlja1RpbWUgPSBtX25leHRUaWNrVGltZSArIG1faW50ZXJ2YWxNczsKKyAgICB9
IGVsc2UgaWYgKGFtb3VudExhdGUgPCAtMS4wKSB7CisgICAgICAgIC8vIFRpbWVyIGNhbWUgYmFj
ayByZWFsbHkgZWFybHkuIFVubGlrZWx5IGJ1dCBiZXR0ZXIgdG8gaGFuZGxlIHRoZW4gZXhwbG9k
ZS4KKyAgICAgICAgbmV3TmV4dFRpY2tUaW1lID0gbV9uZXh0VGlja1RpbWU7CisgICAgICAgIHRp
Y2sgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaW1lciBjYW1lIGJhY2sgbGF0
ZS4gUmVzZXQgdGhlIHRpbWViYXNlLgorICAgICAgICBuZXdOZXh0VGlja1RpbWUgPSBub3cgKyBt
X2ludGVydmFsTXM7CisgICAgICAgIHRpY2sgPSB0cnVlOworICAgIH0KKworICAgIC8vIFBvc3Qg
YW5vdGhlciB0YXNrICpiZWZvcmUqIHRoZSB0aWNrIGFuZCB1cGRhdGUgc3RhdGUKKyAgICBBU1NF
UlQobmV3TmV4dFRpY2tUaW1lID4gbm93KTsKKyAgICBwb3N0VGlja1Rhc2soc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihuZXdOZXh0VGlja1RpbWUgLSBub3cpKTsKKyAgICBtX25leHRUaWNrVGltZSA9
IG5ld05leHRUaWNrVGltZTsKKworICAgIC8vIEZpcmUgdGhlIHRpY2sKKyAgICBpZiAodGljayAm
JiBtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm9uVGltZXJUaWNrKCk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U21vb3RoZWRUaW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg5NGNjMjY5N2M2ZTAwNGU5ZDQ5
MGIyYzNiZTg1NWUzMGQxNzM4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTbW9vdGhlZFRpbWVyX2gKKyNkZWZpbmUg
Q0NTbW9vdGhlZFRpbWVyX2gKKworI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDVGhyZWFkOworCitjbGFzcyBDQ1Ntb290aGVkVGlt
ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBvblRpbWVyVGljaygpID0gMDsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkNDU21vb3RoZWRUaW1lckNsaWVudCgpIHsgfQor
fTsKKworLy8gVGhpcyB0aW1lciBpbXBsZW1lbnRzIGEgdGltZSBzb3VyY2UgdGhhdCBhY2hpZXZl
cyB0aGUgc3BlY2lmaWVkIGludGVydmFsCisvLyBpbiBmYWNlIG9mIG1pbGxpc2Vjb25kLXByZWNp
c2lvbiBkZWxheWVkIGNhbGxiYWNrcyBhbmQgcmFuZG9tIHF1ZXVlaW5nIGRlbGF5cy4KKy8vCisv
LyBOT1RFOiBEZWxldGluZyBDQ1Ntb290aGVkVGltZXIgd2hlbiBhIHRpY2sgaXMgcGVuZGluZyB3
aWxsIGxlYWQgdG8gYSBjcmFzaC4KKy8vICAgICAgVG8gZml4IHRoaXMsIHdlIG5lZWQgdG8gZ2Vu
ZXJhbGl6ZSBDQ1Njb3BlZE1haW5UaHJlYWRQcm94eS4KK2NsYXNzIENDU21vb3RoZWRUaW1lciB7
CitwdWJsaWM6CisgICAgQ0NTbW9vdGhlZFRpbWVyKGRvdWJsZSBpbnRlcnZhbE1zLCBDQ1RocmVh
ZCogdGhyZWFkKQorICAgICAgICAgICAgOiBtX2NsaWVudCgwKQorICAgICAgICAgICAgLCBtX2lu
dGVydmFsTXMoaW50ZXJ2YWxNcykKKyAgICAgICAgICAgICwgbV9uZXh0VGlja1RpbWUoMCkKKyAg
ICAgICAgICAgICwgbV9zdGF0ZShTVEFURV9JTkFDVElWRSkKKyAgICAgICAgICAgICwgbV90aHJl
YWQodGhyZWFkKSB7IH0KKyAgICB2aXJ0dWFsIH5DQ1Ntb290aGVkVGltZXIoKSB7IH0KKworICAg
IHZvaWQgc2V0Q2xpZW50KENDU21vb3RoZWRUaW1lckNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50
ID0gY2xpZW50OyB9CisKKyAgICB2b2lkIHNldEludGVydmFsKGRvdWJsZSBpbnRlcnZhbE1zKQor
ICAgIHsKKyAgICAgICAgbV9pbnRlcnZhbE1zID0gaW50ZXJ2YWxNczsKKyAgICB9CisKKyAgICB2
b2lkIHNldEFjdGl2ZShib29sKTsKKworICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCisgICAg
dmlydHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCB7IHJldHVybiBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBvblRpY2soKTsKKyAg
ICB2b2lkIHBvc3RUaWNrVGFzayhsb25nIGxvbmcgZGVsYXkpOworCisgICAgZW51bSBTdGF0ZSB7
CisgICAgICAgIFNUQVRFX0lOQUNUSVZFLAorICAgICAgICBTVEFURV9TVEFSVElORywKKyAgICAg
ICAgU1RBVEVfQUNUSVZFLAorICAgIH07CisgICAgQ0NTbW9vdGhlZFRpbWVyQ2xpZW50KiBtX2Ns
aWVudDsKKyAgICBkb3VibGUgbV9pbnRlcnZhbE1zOworICAgIGRvdWJsZSBtX25leHRUaWNrVGlt
ZTsKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIENDVGhyZWFkKiBtX3RocmVhZDsKK307CisKK30K
KyNlbmRpZiAvLyBDQ1Ntb290aGVkVGltZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
aW5kZXggOTFlZGU0YTU5NzdkZmE3MGVmMzA0OGVlYmU0YWY1OGRjNTc2ZWJiNy4uNGU0NWU2ZTVk
NDRkYWQ4ZDNlNzQyYWY1MTc5NTM4ZDNjYTQ3NzFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCkBAIC01NCwxMSArNTQsMTQgQEAKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxl
cyc6IFsKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVz
dHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
TGF5ZXJTb3J0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rl
c3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1Ntb290
aGVkVGltZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhjOGY5NjU2NTFkODQ5Njk2OTBjN2E1YjYxY2Q1NDY0ODBkZjA2ZjUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxl
clRlc3QuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIkNDU2NoZWR1bGVyVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRmFrZUNDRnJhbWVS
YXRlQ29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJDbGllbnQgeworcHVibGljOgorICAgIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQo
KSB7IHJlc2V0KCk7IH0KKworICAgIHZvaWQgcmVzZXQoKSB7IG1fdGlja0NhbGxlZCA9IGZhbHNl
OyB9CisgICAgYm9vbCB0aWNrQ2FsbGVkKCkgY29uc3QgeyByZXR1cm4gbV90aWNrQ2FsbGVkOyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgb25WU3luY1RpY2soKSB7IG1fdGlja0NhbGxlZCA9IHRydWU7
IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgbV90aWNrQ2FsbGVkOworfTsKKworCitURVNUKEND
RnJhbWVSYXRlQ29udHJvbGxlclRlc3QsIFRlc3RGcmFtZVRocm90dGxpbmdfSW1tZWRpYXRlQWNr
KQoreworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDRnJhbWVSYXRlQ29udHJv
bGxlckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciogdGltZXIgPSBuZXcg
RmFrZUNDU21vb3RoZWRUaW1lcigxMDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICBDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIgY29udHJvbGxlcihhZG9wdFB0cih0aW1lcikpOworCisgICAgY29udHJv
bGxlci5zZXRDbGllbnQoJmNsaWVudCk7CisgICAgY29udHJvbGxlci5zZXRBY3RpdmUodHJ1ZSk7
CisKKyAgICBkb3VibGUgZWxhcHNlZCA9IDA7IC8vIE11Y2sgYXJvdW5kIHdpdGggdGltZSBhIGJp
dAorCisgICAgLy8gVHJpZ2dlciBvbmUgZnJhbWUsIG1ha2Ugc3VyZSB0aGUgdnN5bmMgY2FsbGJh
Y2sgaXMgY2FsbGVkCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAg
dGltZXItPnNldEN1cnJlbnRUaW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFz
aygpOworICAgIEVYUEVDVF9UUlVFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworICAgIGNsaWVudC5y
ZXNldCgpOworCisgICAgLy8gVGVsbCB0aGUgY29udHJvbGxlciB3ZSBkcmV3CisgICAgY29udHJv
bGxlci5kaWRCZWdpbkZyYW1lKCk7CisKKyAgICAvLyBUZWxsIHRoZSBjb250cm9sbGVyIHRoZSBm
cmFtZSBlbmRlZCA1bXMgbGF0ZXIKKyAgICB0aW1lci0+c2V0Q3VycmVudFRpbWUodGltZXItPmN1
cnJlbnRUaW1lKCkgKyA1KTsKKyAgICBjb250cm9sbGVyLmRpZEZpbmlzaEZyYW1lKCk7CisKKyAg
ICAvLyBUcmlnZ2VyIGFub3RoZXIgZnJhbWUsIG1ha2Ugc3VyZSB2c3luYyBydW5zIGFnYWluCisg
ICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgRVhQRUNUX1RSVUUoZWxh
cHNlZCA+PSB0aW1lci0+Y3VycmVudFRpbWUoKSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHByZXZp
b3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAgICB0aW1lci0+c2V0Q3VycmVu
dFRpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNU
X1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9CisKK1RFU1QoQ0NGcmFtZVJhdGVDb250cm9s
bGVyVGVzdCwgVGVzdEZyYW1lVGhyb3R0bGluZ19Ud29GcmFtZXNJbkZsaWdodCkKK3sKKyAgICAv
LyBUaGlzIHRlc3Qgb25seSB3b3JrcyBmb3IgdGhlIGNhc2Ugb2Yga01heEZyYW1lc1BlbmRpbmcg
PSAyCisgICAgQVNTRVJUX0VRKDIsIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6a01heEZyYW1lc1Bl
bmRpbmcpOworCisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NGcmFtZVJhdGVD
b250cm9sbGVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyKiB0aW1lciA9
IG5ldyBGYWtlQ0NTbW9vdGhlZFRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIEND
RnJhbWVSYXRlQ29udHJvbGxlciBjb250cm9sbGVyKGFkb3B0UHRyKHRpbWVyKSk7CisKKyAgICBj
b250cm9sbGVyLnNldENsaWVudCgmY2xpZW50KTsKKyAgICBjb250cm9sbGVyLnNldEFjdGl2ZSh0
cnVlKTsKKworICAgIGRvdWJsZSBlbGFwc2VkID0gMDsgLy8gTXVjayBhcm91bmQgd2l0aCB0aW1l
IGEgYml0CisKKyAgICAvLyBUcmlnZ2VyIG9uZSBmcmFtZSwgbWFrZSBzdXJlIHRoZSB2c3luYyBj
YWxsYmFjayBpcyBjYWxsZWQKKyAgICBlbGFwc2VkICs9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsK
KyAgICB0aW1lci0+c2V0Q3VycmVudFRpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRp
bmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisgICAgY2xp
ZW50LnJlc2V0KCk7CisKKyAgICAvLyBUZWxsIHRoZSBjb250cm9sbGVyIHdlIGRyZXcKKyAgICBj
b250cm9sbGVyLmRpZEJlZ2luRnJhbWUoKTsKKworICAgIC8vIFRyaWdnZXIgYW5vdGhlciBmcmFt
ZSwgbWFrZSBzdXJlIHZzeW5jIGNhbGxiYWNrIHJ1bnMgYWdhaW4KKyAgICBlbGFwc2VkICs9IHRo
cmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVyLT5j
dXJyZW50VGltZSgpKTsgLy8gU2FuaXR5IGNoZWNrIHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3Qg
bW92ZSB0aW1lIGJhY2t3YXJkLgorICAgIHRpbWVyLT5zZXRDdXJyZW50VGltZShlbGFwc2VkKTsK
KyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlj
a0NhbGxlZCgpKTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIFRlbGwgdGhlIGNvbnRy
b2xsZXIgd2UgZHJldywgYWdhaW4uCisgICAgY29udHJvbGxlci5kaWRCZWdpbkZyYW1lKCk7CisK
KyAgICAvLyBUcmlnZ2VyIGFub3RoZXIgZnJhbWUuIFNpbmNlIHR3byBmcmFtZXMgYXJlIHBlbmRp
bmcsIHdlIHNob3VsZCBub3QgZHJhdy4KKyAgICBlbGFwc2VkICs9IHRocmVhZC5wZW5kaW5nRGVs
YXkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVyLT5jdXJyZW50VGltZSgpKTsg
Ly8gU2FuaXR5IGNoZWNrIHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3QgbW92ZSB0aW1lIGJhY2t3
YXJkLgorICAgIHRpbWVyLT5zZXRDdXJyZW50VGltZShlbGFwc2VkKTsKKyAgICB0aHJlYWQucnVu
UGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisK
KyAgICAvLyBUZWxsIHRoZSBjb250cm9sbGVyIHRoZSBmaXJzdCBmcmFtZSBlbmRlZCA1bXMgbGF0
ZXIKKyAgICB0aW1lci0+c2V0Q3VycmVudFRpbWUodGltZXItPmN1cnJlbnRUaW1lKCkgKyA1KTsK
KyAgICBjb250cm9sbGVyLmRpZEZpbmlzaEZyYW1lKCk7CisKKyAgICAvLyBUaWNrIHNob3VsZCBu
b3QgaGF2ZSBiZWVuIGNhbGxlZAorICAgIEVYUEVDVF9GQUxTRShjbGllbnQudGlja0NhbGxlZCgp
KTsKKworICAgIC8vIFRyaWdnZXIgeWV0IGFub3RoZXIgZnJhbWUuIFNpbmNlIG9uZSBmcmFtZXMg
aXMgcGVuZGluZywgYW5vdGhlciB2c3luYyBjYWxsYmFjayBzaG91bGQgcnVuLgorICAgIGVsYXBz
ZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIEVYUEVDVF9UUlVFKGVsYXBzZWQgPj0g
dGltZXItPmN1cnJlbnRUaW1lKCkpOyAvLyBTYW5pdHkgY2hlY2sgdGhhdCBwcmV2aW91cyBjb2Rl
IGRpZG4ndCBtb3ZlIHRpbWUgYmFja3dhcmQuCisgICAgdGltZXItPnNldEN1cnJlbnRUaW1lKGVs
YXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9UUlVFKGNs
aWVudC50aWNrQ2FsbGVkKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MGJiYWRmZWFj
ZTVlYmIxZTNjNDI4N2M5MTZiODZhOThmOWE3YzZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaApAQCAtMCwwICsx
LDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2NoZWR1bGVyVGVzdENvbW1vbl9oCisj
ZGVmaW5lIENDU2NoZWR1bGVyVGVzdENvbW1vbl9oCisKKyNpbmNsdWRlICJjYy9DQ1Ntb290aGVk
VGltZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCitjbGFzcyBGYWtlQ0NTbW9vdGhlZFRpbWVy
Q2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDU21vb3RoZWRUaW1lckNsaWVudCB7CitwdWJsaWM6
CisgICAgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCgpIHsgcmVzZXQoKTsgfQorICAgIHZvaWQg
cmVzZXQoKSB7IG1fdGlja0NhbGxlZCA9IGZhbHNlOyB9CisgICAgYm9vbCB0aWNrQ2FsbGVkKCkg
Y29uc3QgeyByZXR1cm4gbV90aWNrQ2FsbGVkOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25UaW1l
clRpY2soKSB7IG1fdGlja0NhbGxlZCA9IHRydWU7IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wg
bV90aWNrQ2FsbGVkOworfTsKKworY2xhc3MgRmFrZUNDVGhyZWFkIDogcHVibGljIFdlYkNvcmU6
OkNDVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBGYWtlQ0NUaHJlYWQoKSB7IHJlc2V0KCk7IH0KKyAg
ICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fcGVuZGluZ1Rhc2tEZWxheSA9IDA7Cisg
ICAgICAgIG1fcGVuZGluZ1Rhc2suY2xlYXIoKTsKKyAgICB9CisKKyAgICBib29sIGhhc1BlbmRp
bmdUYXNrKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nVGFzazsgfQorICAgIHZvaWQgcnVuUGVu
ZGluZ1Rhc2soKQorICAgIHsKKyAgICAgICAgT3duUHRyPFRhc2s+IHRhc2sgPSBtX3BlbmRpbmdU
YXNrLnJlbGVhc2UoKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKKyAgICB9CisKKyAg
ICBsb25nIGxvbmcgcGVuZGluZ0RlbGF5KCkgY29uc3QKKyAgICB7CisgICAgICAgIEVYUEVDVF9U
UlVFKGhhc1BlbmRpbmdUYXNrKCkpOworICAgICAgICByZXR1cm4gbV9wZW5kaW5nVGFza0RlbGF5
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3REZWxheWVkVGFz
ayhQYXNzT3duUHRyPFRhc2s+IHRhc2ssIGxvbmcgbG9uZyBkZWxheSkKKyAgICB7CisgICAgICAg
IEVYUEVDVF9UUlVFKCFoYXNQZW5kaW5nVGFzaygpKTsKKyAgICAgICAgbV9wZW5kaW5nVGFzayA9
IHRhc2s7CisgICAgICAgIG1fcGVuZGluZ1Rhc2tEZWxheSA9IGRlbGF5OworICAgIH0KKyAgICB2
aXJ0dWFsIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisKK3Byb3RlY3RlZDoKKyAgICBPd25QdHI8VGFzaz4g
bV9wZW5kaW5nVGFzazsKKyAgICBsb25nIGxvbmcgbV9wZW5kaW5nVGFza0RlbGF5OworfTsKKwor
Y2xhc3MgRmFrZUNDU21vb3RoZWRUaW1lciA6IHB1YmxpYyBXZWJDb3JlOjpDQ1Ntb290aGVkVGlt
ZXIgeworcHVibGljOgorICAgIEZha2VDQ1Ntb290aGVkVGltZXIoZG91YmxlIGksIFdlYkNvcmU6
OkNDVGhyZWFkKiB0KQorICAgICAgICA6IENDU21vb3RoZWRUaW1lcihpLCB0KQorICAgICAgICAs
IG1fY3VycmVudFRpbWUoMCkgeyB9CisKKyAgICB2b2lkIHNldEN1cnJlbnRUaW1lKGRvdWJsZSB0
aW1lKSB7IG1fY3VycmVudFRpbWUgPSB0aW1lOyB9CisgICAgdmlydHVhbCBkb3VibGUgY3VycmVu
dFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUaW1lOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBkb3VibGUgbV9jdXJyZW50VGltZTsKK307CisKK30KKworI2VuZGlmIC8vIENDU2NoZWR1bGVy
VGVzdENvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
U21vb3RoZWRUaW1lclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Nt
b290aGVkVGltZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjJjZjA3MjAyYTA5NWFkNTdiZGE0MDQw
ZmEyZTQ1NzhjMzFmNmNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1Ntb290aGVkVGltZXJUZXN0LmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Ntb290aGVkVGlt
ZXIuaCIKKworI2luY2x1ZGUgIkNDU2NoZWR1bGVyVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgImNj
L0NDVGhyZWFkLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNwYWNlIHsKKworVEVTVChDQ1Nt
b290aGVkVGltZXJUZXN0LCBUYXNrUG9zdGVkQW5kVGlja0NhbGxlZCkKK3sKKyAgICBGYWtlQ0NU
aHJlYWQgdGhyZWFkOworICAgIEZha2VDQ1Ntb290aGVkVGltZXJDbGllbnQgY2xpZW50OworICAg
IEZha2VDQ1Ntb290aGVkVGltZXIgdGltZXIoMTAwMC4wIC8gNjAuMCwgJnRocmVhZCk7CisgICAg
dGltZXIuc2V0Q2xpZW50KCZjbGllbnQpOworCisgICAgdGltZXIuc2V0Q3VycmVudFRpbWUoMCk7
CisgICAgdGltZXIuc2V0QWN0aXZlKHRydWUpOworICAgIEVYUEVDVF9UUlVFKHRocmVhZC5oYXNQ
ZW5kaW5nVGFzaygpKTsKKworICAgIHRpbWVyLnNldEN1cnJlbnRUaW1lKDE2KTsKKyAgICB0aHJl
YWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgp
KTsKK30KKworVEVTVChDQ1Ntb290aGVkVGltZXIsIFRpY2tOb3RDYWxsZWRXaXRoVGFza1Bvc3Rl
ZCkKK3sKKyAgICBGYWtlQ0NUaHJlYWQgdGhyZWFkOworICAgIEZha2VDQ1Ntb290aGVkVGltZXJD
bGllbnQgY2xpZW50OworICAgIEZha2VDQ1Ntb290aGVkVGltZXIgdGltZXIoMTAwMC4wIC8gNjAu
MCwgJnRocmVhZCk7CisgICAgdGltZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAgIHRpbWVyLnNl
dEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBFQ1RfVFJVRSh0aHJlYWQuaGFzUGVuZGluZ1Rhc2soKSk7
CisgICAgdGltZXIuc2V0QWN0aXZlKGZhbHNlKTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2so
KTsKKyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9CisKK1RFU1QoQ0NT
bW9vdGhlZFRpbWVyVGVzdCwgQWNoaWV2ZXNUYXJnZXRSYXRlV2l0aE5vTm9pc2UpCit7CisgICAg
aW50IG51bUl0ZXJhdGlvbnMgPSAxMDAwOworCisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAg
ICBGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRp
bWVyIHRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIHRpbWVyLnNldENsaWVudCgm
Y2xpZW50KTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisKKyAgICBkb3VibGUgdG90YWxG
cmFtZVRpbWUgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSXRlcmF0aW9uczsgKytp
KSB7CisgICAgICAgIGxvbmcgbG9uZyBkZWxheSA9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKwor
ICAgICAgICAvLyBhY2N1bXVsYXRlIHRoZSAiZGVsYXkiCisgICAgICAgIHRvdGFsRnJhbWVUaW1l
ICs9IGRlbGF5OworCisgICAgICAgIC8vIFJ1biB0aGUgY2FsbGJhY2sgZXhhY3RseSB3aGVuIGFz
a2VkCisgICAgICAgIGRvdWJsZSBub3cgPSB0aW1lci5jdXJyZW50VGltZSgpICsgZGVsYXk7Cisg
ICAgICAgIHRpbWVyLnNldEN1cnJlbnRUaW1lKG5vdyk7CisgICAgICAgIHRocmVhZC5ydW5QZW5k
aW5nVGFzaygpOworICAgIH0KKyAgICBkb3VibGUgYXZlcmFnZUludGVydmFsID0gdG90YWxGcmFt
ZVRpbWUgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bUl0ZXJhdGlvbnMpOworICAgIEVYUEVDVF9O
RUFSKDEwMDAuMCAvIDYwLjAsIGF2ZXJhZ2VJbnRlcnZhbCwgMC4xKTsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112408</attachid>
            <date>2011-10-25 14:44:28 -0700</date>
            <delta_ts>2011-10-25 16:23:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70713-20111025144427.patch</filename>
            <type>text/plain</type>
            <size>35795</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgzNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZDdlMTZkNWYwOTVhYjZl
MDZlYjA4OWE5ODRmNzA3NjEwNmVjZjA0Li5kNTJmMWJiM2M5Yzc3NTk3MTg0NWMwMWQ3ZTgwMzlh
NWQzZDAyYWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTAtMjUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVy
QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxl
clRpbWVyQWRhcHRlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI6Om9uVGltZXJU
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRl
cjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEZpbmlzaEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQWJvcnRBbGxQ
ZW5kaW5nRnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJDbGllbnQ6On5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRBY3RpdmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpwb3N0VGlja1Rhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpvblRpY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDU21vb3RoZWRUaW1lckNsaWVudDo6fkNDU21vb3RoZWRUaW1lckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6OkNDU21vb3RoZWRUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6On5DQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTbW9vdGhlZFRpbWVyOjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ntb290
aGVkVGltZXI6OmN1cnJlbnRUaW1lKToKKwogMjAxMS0xMC0yNSAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyODg1ODApOiBDdXJz
b3IgZmFpbHMgdG8gY2hhbmdlIHRvIHBvaW50ZXIgb24gZW1iZWRkZWQgR29vZ2xlIG1hcHMgcG9w
dXBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDY2NzU5MmI1ZDAxZGEyMTFkZmUxMjVj
NjYzNzg2MjVhMTc5ZDdkYTYuLjhhMzQyZDkwZmZlZjYzYzkzNTM4ZTViNjY5MDQ0ZWM4OTAzZDUx
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAt
MjUgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBp
OgorICAgICAgICAqIHRlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpG
YWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpyZXNldCk6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6dGlja0NhbGxlZCk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6b25WU3lu
Y1RpY2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0ND
U2NoZWR1bGVyVGVzdENvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
Q0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpyZXNldCk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lckNsaWVudDo6dGlja0NhbGxlZCk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lckNsaWVudDo6b25UaW1l
clRpY2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6RmFrZUNDVGhyZWFk
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJlc2V0KToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6Omhhc1BlbmRpbmdUYXNrKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJ1blBlbmRpbmdUYXNrKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnBlbmRpbmdEZWxheSk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUNDVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUND
VGhyZWFkOjpwb3N0RGVsYXllZFRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Ro
cmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Ntb290aGVkVGlt
ZXI6OkZha2VDQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Nt
b290aGVkVGltZXI6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
Q0NTbW9vdGhlZFRpbWVyOjpjdXJyZW50VGltZSk6CisgICAgICAgICogdGVzdHMvQ0NTbW9vdGhl
ZFRpbWVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorCiAy
MDExLTEwLTI1ICBHZW5lIEdpcmFyZCAgPGdpcmFyZEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmUtZW5hYmxlIHRvdWNoIHRlc3RzIChmcm9tIDY2NTc3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDY4
ZmFjMzlmZWY3Yzk1OGUzMWI0YTU0NmU2OTM4MDgzYmYwNmUyZmQuLjdmOTRlOTZiYzY0MGFmNjk4
ZTliNThiYzQ4NmQwMTIzMmJmMDc1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1MjcsNiArMzUy
Nyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLApAQCAtMzU1NSw2ICszNTU3LDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVk
dWxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nt
b290aGVkVGltZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Ntb290aGVkVGltZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRNYWluVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxDb250cm9sbGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYwNmU2MDBjODI0ZGNiMzg1OGE4ZWU0NTNmODBlMjQzZmY5NWI3MjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2su
aCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NG
cmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyIDogcHVibGljIENDU21vb3RoZWRUaW1lckNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NGcmFtZVJhdGVDb250cm9s
bGVyVGltZXJBZGFwdGVyPiBjcmVhdGUoQ0NGcmFtZVJhdGVDb250cm9sbGVyKiBmcmFtZVJhdGVD
b250cm9sbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0ZyYW1lUmF0
ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIoZnJhbWVSYXRlQ29udHJvbGxlcikpOworICAgIH0KKyAg
ICB2aXJ0dWFsIH5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIoKSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBvblRpbWVyVGljaygpIHsgbV9mcmFtZVJhdGVDb250cm9sbGVyLT5vblRp
bWVyVGljaygpOyB9Citwcml2YXRlOgorICAgIGV4cGxpY2l0IENDRnJhbWVSYXRlQ29udHJvbGxl
clRpbWVyQWRhcHRlcihDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIqIGZyYW1lUmF0ZUNvbnRyb2xsZXIp
CisgICAgICAgICAgICA6IG1fZnJhbWVSYXRlQ29udHJvbGxlcihmcmFtZVJhdGVDb250cm9sbGVy
KSB7IH0KKworICAgIENDRnJhbWVSYXRlQ29udHJvbGxlciogbV9mcmFtZVJhdGVDb250cm9sbGVy
OworfTsKKworQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIoUGFz
c093blB0cjxDQ1Ntb290aGVkVGltZXI+IHRpbWVyKQorICAgICAgICA6IG1fY2xpZW50KDApCisg
ICAgICAgICwgbV90aW1lcih0aW1lcikKK3sKKyAgICBtX3RpbWVyQ2xpZW50QWRhcHRlciA9IEND
RnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcjo6Y3JlYXRlKHRoaXMpOworICAgIG1fdGlt
ZXItPnNldENsaWVudChtX3RpbWVyQ2xpZW50QWRhcHRlci5nZXQoKSk7Cit9CisKK0NDRnJhbWVS
YXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcigpCit7Cit9CisKK3ZvaWQgQ0NG
cmFtZVJhdGVDb250cm9sbGVyOjpvblRpbWVyVGljaygpCit7CisgICAgLy8gRG9uJ3QgZm9yd2Fy
ZCB0aGUgdGljayBpZiB3ZSBhcmUgdGhyb3R0bGVkLgorICAgIGlmIChtX3BlbmRpbmdGcmFtZUJl
Z2luVGltZXMuc2l6ZSgpID49IGtNYXhGcmFtZXNQZW5kaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5vblZTeW5jVGljaygpOworfQor
Cit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSgpCit7CisgICAgbV9w
ZW5kaW5nRnJhbWVCZWdpblRpbWVzLmFwcGVuZChtX3RpbWVyLT5tb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSk7Cit9CisKK3ZvaWQgQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpkaWRGaW5pc2hG
cmFtZSgpCit7CisgICAgbV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzLnRha2VGaXJzdCgpOworICAg
IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgdGhlIGRlbHRhIGJldHdlZW4gbm93IGFu
ZCBmcmFtZUJlZ2luVGltZS4KKyAgICAvLyAgRS5nLgorICAgIC8vICAgIGRvdWJsZSBmaW5pc2hl
ZEZyYW1lQmVnaW5UaW1lID0gbV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzLnRha2VGaXJzdCgpOwor
ICAgIC8vICAgIGRvdWJsZSBlbGFwc2VkRnJhbWVUaW1lID0gbm93IC0gZmluaXNoZWRGcmFtZUJl
Z2luVGltZTsKKyAgICAvLyAgICBkb3VibGUgd2VpZ2h0ZWRmcmFtZVJhdGUgPSB3ZWlnaHRlZF9i
bGVuZCh3ZWlnaHRlZGZyYW1lUmF0ZSxlbGFwc2VkRnJhbWVUaW1lKTsKKyAgICAvLworICAgIC8v
IFRoZW4sIHVzZSB3ZWlnaHRlZCB0aW1lIHRvIGRlY2lkZSBiZXR3ZWVuOgorICAgIC8vICAgLSBk
aXNwbGF5IHJhdGUKKyAgICAvLyAgIC0gMS8yIGRpc3BsYXkgcmF0ZQorICAgIC8vICAgLSBoZWF2
aWx5LXdlaWdodGVkIGZyYW1lIHRpbWUKK30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6
OmRpZEFib3J0QWxsUGVuZGluZ0ZyYW1lcygpCit7CisgICAgbV9wZW5kaW5nRnJhbWVCZWdpblRp
bWVzLmNsZWFyKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDU0YTUwYTgxN2NlMGFiZWQzZGQzZTMxZGExZmM3MjFjYzI2NmI4NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NGcmFtZVJhdGVDb250cm9sbGVyX2gKKyNkZWZpbmUgQ0NGcmFtZVJh
dGVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgImNjL0NDU21vb3RoZWRUaW1lci5oIgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIG9uVlN5bmNUaWNrKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB+Q0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KCkgeyB9Cit9OworCitjbGFzcyBD
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI7CisKK2NsYXNzIENDRnJhbWVSYXRlQ29u
dHJvbGxlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NGcmFtZVJhdGVDb250cm9sbGVyKFBh
c3NPd25QdHI8Q0NTbW9vdGhlZFRpbWVyPik7CisgICAgfkNDRnJhbWVSYXRlQ29udHJvbGxlcigp
OworCisgICAgdm9pZCBzZXRDbGllbnQoQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgYWN0
aXZlKSB7IG1fdGltZXItPnNldEFjdGl2ZShhY3RpdmUpOyB9CisKKyAgICAvLyBVc2UgdGhlIGZv
bGxvd2luZyBtZXRob2RzIHRvIGFkanVzdCB0YXJnZXQgZnJhbWUgcmF0ZS4KKyAgICAvLworICAg
IC8vIE11bHRpcGxlIGZyYW1lcyBjYW4gYmUgaW4tcHJvZ3Jlc3MsIGJ1dCBmb3IgZXZlcnkgZGlk
QmVnaW5GcmFtZSwgYQorICAgIC8vIGRpZEZpbmlzaEZyYW1lIHNob3VsZCBiZSBwb3N0ZWQuCisg
ICAgLy8KKyAgICAvLyBJZiB0aGUgcmVuZGVyaW5nIHBpcGVsaW5lIGNyYXNoZXMsIGNhbGwgZGlk
QWJvcnRBbGxQZW5kaW5nRnJhbWVzLgorICAgIHZvaWQgZGlkQmVnaW5GcmFtZSgpOworICAgIHZv
aWQgZGlkRmluaXNoRnJhbWUoKTsKKyAgICB2b2lkIGRpZEFib3J0QWxsUGVuZGluZ0ZyYW1lcygp
OworCisgICAgZW51bSB7CisgICAgICAgIGtNYXhGcmFtZXNQZW5kaW5nID0gMgorICAgIH07CisK
K3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJB
ZGFwdGVyOworICAgIHZvaWQgb25UaW1lclRpY2soKTsKKworICAgIENDRnJhbWVSYXRlQ29udHJv
bGxlckNsaWVudCogbV9jbGllbnQ7CisgICAgRGVxdWU8ZG91YmxlPiBtX3BlbmRpbmdGcmFtZUJl
Z2luVGltZXM7CisgICAgT3duUHRyPENDU21vb3RoZWRUaW1lcio+IG1fdGltZXI7CisgICAgT3du
UHRyPENDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcj4gbV90aW1lckNsaWVudEFkYXB0
ZXI7Cit9OworCit9CisjZW5kaWYgLy8gQ0NGcmFtZVJhdGVDb250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3Ro
ZWRUaW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Ntb290aGVkVGltZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlOWM2YmVlYjBhNjRlODFlOWY5MjYz
Y2NjNmM1NTgwNjM5NmUxODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuY3BwCkBAIC0wLDAgKzEs
OTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNj
L0NDU21vb3RoZWRUaW1lci5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ1RocmVhZFRhc2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENDU21v
b3RoZWRUaW1lcjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIGlmICghYWN0aXZlKSB7
CisgICAgICAgIG1fc3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEJlY29taW5nIGFjdGl2ZSBpcyBkZWZlcnJlZDogd2UgcG9zdCBhIDAtZGVs
YXkgdGFzay4gV2hlbiBpdCBydW5zLCB3ZSB1c2UKKyAgICAvLyB0aGF0IHRvIGVzdGFibGlzaCB0
aGUgdGltZWJhc2UsIGJlY29tZSB0cnVseSBhY3RpdmUsIGFuZCBmaXJlIHRoZSBmaXJzdAorICAg
IC8vIHRpY2suCisgICAgaWYgKG1fc3RhdGUgPT0gU1RBVEVfU1RBUlRJTkcgfHwgbV9zdGF0ZSA9
PSBTVEFURV9BQ1RJVkUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTVEFURV9T
VEFSVElORzsKKyAgICBwb3N0VGlja1Rhc2soMCk7Cit9CisKK3ZvaWQgQ0NTbW9vdGhlZFRpbWVy
Ojpwb3N0VGlja1Rhc2sobG9uZyBsb25nIGRlbGF5KQoreworICAgIG1fdGhyZWFkLT5wb3N0RGVs
YXllZFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ntb290aGVkVGltZXI6Om9uVGlj
ayksIGRlbGF5KTsKK30KKwordm9pZCBDQ1Ntb290aGVkVGltZXI6Om9uVGljaygpCit7CisgICAg
ZG91YmxlIG5vdyA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworCisgICAgaWYgKG1f
c3RhdGUgPT0gU1RBVEVfSU5BQ1RJVkUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0
YXRlID09IFNUQVRFX1NUQVJUSU5HKSB7CisgICAgICAgIG1fbmV4dFRpY2tUaW1lID0gbm93Owor
ICAgICAgICBtX3N0YXRlID0gU1RBVEVfQUNUSVZFOworICAgIH0KKworICAgIGNvbnN0IGRvdWJs
ZSBtYXhMYXRlQmVmb3JlRHJvcHBpbmdGcmFtZSA9IDIuNTsKKworICAgIGRvdWJsZSBuZXdOZXh0
VGlja1RpbWU7CisgICAgYm9vbCB0aWNrOworICAgIGRvdWJsZSBhbW91bnRMYXRlID0gbm93IC0g
bV9uZXh0VGlja1RpbWU7CisgICAgaWYgKGFtb3VudExhdGUgPj0gLTEuMCAmJiBhbW91bnRMYXRl
IDw9IG1heExhdGVCZWZvcmVEcm9wcGluZ0ZyYW1lKSB7CisgICAgICAgIC8vIFRpbWVyIHdhcyAo
bW9zdGx5KSBvbiB0aW1lLiBXZSBwZW5hbGl6ZSB0byAtMS4wIGZpeGVkIG9uIHRoZSBlYXJseSBz
aWRlIGJlY2F1c2UKKyAgICAgICAgLy8gdGhlIGRlbGF5IHN5c3RlbSB0YWtlcyB0aGUgZmxvb3Ig
b2YgYW55IGRlbGF5IHdlIGdpdmUgaXQuIFRoZSBsYXRlLXNpZGUgZGVsYXkKKyAgICAgICAgLy8g
aXMgb3VyIHRvbGVyYW5jZSBmYWN0b3IgZm9yICJyZWFzb25hYmxlIiBkZWxheXMgZHVlIHRvIHRo
ZSB0aHJlYWQgYmVpbmcgYnVzeS4KKyAgICAgICAgdGljayA9IHRydWU7CisgICAgICAgIG5ld05l
eHRUaWNrVGltZSA9IG1fbmV4dFRpY2tUaW1lICsgbV9pbnRlcnZhbE1zOworICAgIH0gZWxzZSBp
ZiAoYW1vdW50TGF0ZSA8IC0xLjApIHsKKyAgICAgICAgLy8gVGltZXIgY2FtZSBiYWNrIGltcG9z
c2libHkgZWFybHkuIFNhbml0eSBjaGVjayBvbmx5LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaW1lciBjYW1lIGJhY2sgbGF0ZS4gUmVz
ZXQgdGhlIHRpbWViYXNlLgorICAgICAgICBuZXdOZXh0VGlja1RpbWUgPSBub3cgKyBtX2ludGVy
dmFsTXM7CisgICAgICAgIHRpY2sgPSB0cnVlOworICAgIH0KKworICAgIC8vIFBvc3QgYW5vdGhl
ciB0YXNrICpiZWZvcmUqIHRoZSB0aWNrIGFuZCB1cGRhdGUgc3RhdGUKKyAgICBBU1NFUlQobmV3
TmV4dFRpY2tUaW1lID4gbm93KTsKKyAgICBwb3N0VGlja1Rhc2soc3RhdGljX2Nhc3Q8bG9uZyBs
b25nPihuZXdOZXh0VGlja1RpbWUgLSBub3cpKTsKKyAgICBtX25leHRUaWNrVGltZSA9IG5ld05l
eHRUaWNrVGltZTsKKworICAgIC8vIEZpcmUgdGhlIHRpY2sKKyAgICBpZiAodGljayAmJiBtX2Ns
aWVudCkKKyAgICAgICAgbV9jbGllbnQtPm9uVGltZXJUaWNrKCk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3Ro
ZWRUaW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTbW9vdGhlZFRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY4MjVlNGUxMzY1ZTZhNWU1MGVjYWRhNjlj
YmM0NzEzODFkMzEyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTbW9vdGhlZFRpbWVyX2gKKyNkZWZpbmUgQ0NTbW9v
dGhlZFRpbWVyX2gKKworI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENDVGhyZWFkOworCitjbGFzcyBDQ1Ntb290aGVkVGltZXJDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBvblRpbWVyVGljaygpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgfkNDU21vb3RoZWRUaW1lckNsaWVudCgpIHsgfQorfTsKKwor
Ly8gVGhpcyB0aW1lciBpbXBsZW1lbnRzIGEgdGltZSBzb3VyY2UgdGhhdCBhY2hpZXZlcyB0aGUg
c3BlY2lmaWVkIGludGVydmFsCisvLyBpbiBmYWNlIG9mIG1pbGxpc2Vjb25kLXByZWNpc2lvbiBk
ZWxheWVkIGNhbGxiYWNrcyBhbmQgcmFuZG9tIHF1ZXVlaW5nIGRlbGF5cy4KKy8vCisvLyBOT1RF
OiBEZWxldGluZyBDQ1Ntb290aGVkVGltZXIgd2hlbiBhIHRpY2sgaXMgcGVuZGluZyB3aWxsIGxl
YWQgdG8gYSBjcmFzaC4KKy8vICAgICAgVG8gZml4IHRoaXMsIHdlIG5lZWQgdG8gZ2VuZXJhbGl6
ZSBDQ1Njb3BlZE1haW5UaHJlYWRQcm94eS4KK2NsYXNzIENDU21vb3RoZWRUaW1lciB7CitwdWJs
aWM6CisgICAgQ0NTbW9vdGhlZFRpbWVyKGRvdWJsZSBpbnRlcnZhbE1zLCBDQ1RocmVhZCogdGhy
ZWFkKQorICAgICAgICAgICAgOiBtX2NsaWVudCgwKQorICAgICAgICAgICAgLCBtX2ludGVydmFs
TXMoaW50ZXJ2YWxNcykKKyAgICAgICAgICAgICwgbV9uZXh0VGlja1RpbWUoMCkKKyAgICAgICAg
ICAgICwgbV9zdGF0ZShTVEFURV9JTkFDVElWRSkKKyAgICAgICAgICAgICwgbV90aHJlYWQodGhy
ZWFkKSB7IH0KKyAgICB2aXJ0dWFsIH5DQ1Ntb290aGVkVGltZXIoKSB7IH0KKworICAgIHZvaWQg
c2V0Q2xpZW50KENDU21vb3RoZWRUaW1lckNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xp
ZW50OyB9CisKKyAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKKworICAgIC8vIFZpcnR1YWwgZm9y
IHRlc3RpbmcuCisgICAgdmlydHVhbCBkb3VibGUgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCkgY29uc3QgeyByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgb25UaWNrKCk7CisgICAgdm9pZCBwb3N0VGlja1Rhc2sobG9uZyBs
b25nIGRlbGF5KTsKKworICAgIGVudW0gU3RhdGUgeworICAgICAgICBTVEFURV9JTkFDVElWRSwK
KyAgICAgICAgU1RBVEVfU1RBUlRJTkcsCisgICAgICAgIFNUQVRFX0FDVElWRSwKKyAgICB9Owor
ICAgIENDU21vb3RoZWRUaW1lckNsaWVudCogbV9jbGllbnQ7CisgICAgZG91YmxlIG1faW50ZXJ2
YWxNczsKKyAgICBkb3VibGUgbV9uZXh0VGlja1RpbWU7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAg
ICBDQ1RocmVhZCogbV90aHJlYWQ7Cit9OworCit9CisjZW5kaWYgLy8gQ0NTbW9vdGhlZFRpbWVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGE0ODkxZmFiMTc5ZjAyYWZkNjRk
ZjFhMTBhMDE2Mjc0MTQ2ZWNiNmIuLjhkMzQwNTQ4NmQzZTQ1YTRiOGZhN2FjMTc2YTg5ZWQzZTU2
MGNhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTQsMTEgKzU0LDE0IEBA
CiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVzdHMv
QXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9h
ZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVk
dWxlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24u
aCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTbW9vdGhlZFRpbWVyVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q1RocmVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRnJhbWVSYXRl
Q29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZmIzMjI3MWI2NTMwZTg2OWZjNGUx
MmVkNmY4MGNhMmUzN2VhYmE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcApAQCAtMCwwICsxLDE0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NG
cmFtZVJhdGVDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDQ1NjaGVkdWxlclRlc3RDb21tb24u
aCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CisKK25h
bWVzcGFjZSB7CisKK2NsYXNzIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgOiBwdWJs
aWMgV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBG
YWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KCkgeyByZXNldCgpOyB9CisKKyAgICB2b2lk
IHJlc2V0KCkgeyBtX3RpY2tDYWxsZWQgPSBmYWxzZTsgfQorICAgIGJvb2wgdGlja0NhbGxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGlja0NhbGxlZDsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uVlN5
bmNUaWNrKCkgeyBtX3RpY2tDYWxsZWQgPSB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29s
IG1fdGlja0NhbGxlZDsKK307CisKKworVEVTVChDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LCBU
ZXN0RnJhbWVUaHJvdHRsaW5nX0ltbWVkaWF0ZUFjaykKK3sKKyAgICBGYWtlQ0NUaHJlYWQgdGhy
ZWFkOworICAgIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgY2xpZW50OworICAgIEZh
a2VDQ1Ntb290aGVkVGltZXIqIHRpbWVyID0gbmV3IEZha2VDQ1Ntb290aGVkVGltZXIoMTAwMC4w
IC8gNjAuMCwgJnRocmVhZCk7CisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVyIGNvbnRyb2xsZXIo
YWRvcHRQdHIodGltZXIpKTsKKworICAgIGNvbnRyb2xsZXIuc2V0Q2xpZW50KCZjbGllbnQpOwor
ICAgIGNvbnRyb2xsZXIuc2V0QWN0aXZlKHRydWUpOworCisgICAgZG91YmxlIGVsYXBzZWQgPSAw
OyAvLyBNdWNrIGFyb3VuZCB3aXRoIHRpbWUgYSBiaXQKKworICAgIC8vIFRyaWdnZXIgb25lIGZy
YW1lLCBtYWtlIHN1cmUgdGhlIHZzeW5jIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgIGVsYXBzZWQg
Kz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIHRpbWVyLT5zZXRNb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAg
RVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisgICAgY2xpZW50LnJlc2V0KCk7CisK
KyAgICAvLyBUZWxsIHRoZSBjb250cm9sbGVyIHdlIGRyZXcKKyAgICBjb250cm9sbGVyLmRpZEJl
Z2luRnJhbWUoKTsKKworICAgIC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgdGhlIGZyYW1lIGVuZGVk
IDVtcyBsYXRlcgorICAgIHRpbWVyLT5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUodGlt
ZXItPm1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgNSk7CisgICAgY29udHJvbGxlci5k
aWRGaW5pc2hGcmFtZSgpOworCisgICAgLy8gVHJpZ2dlciBhbm90aGVyIGZyYW1lLCBtYWtlIHN1
cmUgdnN5bmMgcnVucyBhZ2FpbgorICAgIGVsYXBzZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgp
OworICAgIEVYUEVDVF9UUlVFKGVsYXBzZWQgPj0gdGltZXItPm1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpKTsgLy8gU2FuaXR5IGNoZWNrIHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3QgbW92
ZSB0aW1lIGJhY2t3YXJkLgorICAgIHRpbWVyLT5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX1RS
VUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9CisKK1RFU1QoQ0NGcmFtZVJhdGVDb250cm9sbGVy
VGVzdCwgVGVzdEZyYW1lVGhyb3R0bGluZ19Ud29GcmFtZXNJbkZsaWdodCkKK3sKKyAgICAvLyBU
aGlzIHRlc3Qgb25seSB3b3JrcyBmb3IgdGhlIGNhc2Ugb2Yga01heEZyYW1lc1BlbmRpbmcgPSAy
CisgICAgQVNTRVJUX0VRKDIsIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6a01heEZyYW1lc1BlbmRp
bmcpOworCisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NGcmFtZVJhdGVDb250
cm9sbGVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyKiB0aW1lciA9IG5l
dyBGYWtlQ0NTbW9vdGhlZFRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIENDRnJh
bWVSYXRlQ29udHJvbGxlciBjb250cm9sbGVyKGFkb3B0UHRyKHRpbWVyKSk7CisKKyAgICBjb250
cm9sbGVyLnNldENsaWVudCgmY2xpZW50KTsKKyAgICBjb250cm9sbGVyLnNldEFjdGl2ZSh0cnVl
KTsKKworICAgIGRvdWJsZSBlbGFwc2VkID0gMDsgLy8gTXVjayBhcm91bmQgd2l0aCB0aW1lIGEg
Yml0CisKKyAgICAvLyBUcmlnZ2VyIG9uZSBmcmFtZSwgbWFrZSBzdXJlIHRoZSB2c3luYyBjYWxs
YmFjayBpcyBjYWxsZWQKKyAgICBlbGFwc2VkICs9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAg
ICB0aW1lci0+c2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKGVsYXBzZWQpOworICAgIHRo
cmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9UUlVFKGNsaWVudC50aWNrQ2FsbGVk
KCkpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8gVGVsbCB0aGUgY29udHJvbGxlciB3
ZSBkcmV3CisgICAgY29udHJvbGxlci5kaWRCZWdpbkZyYW1lKCk7CisKKyAgICAvLyBUcmlnZ2Vy
IGFub3RoZXIgZnJhbWUsIG1ha2Ugc3VyZSB2c3luYyBjYWxsYmFjayBydW5zIGFnYWluCisgICAg
ZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgRVhQRUNUX1RSVUUoZWxhcHNl
ZCA+PSB0aW1lci0+bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOyAvLyBTYW5pdHkgY2hl
Y2sgdGhhdCBwcmV2aW91cyBjb2RlIGRpZG4ndCBtb3ZlIHRpbWUgYmFja3dhcmQuCisgICAgdGlt
ZXItPnNldE1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZShlbGFwc2VkKTsKKyAgICB0aHJlYWQu
cnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgpKTsK
KyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgd2UgZHJl
dywgYWdhaW4uCisgICAgY29udHJvbGxlci5kaWRCZWdpbkZyYW1lKCk7CisKKyAgICAvLyBUcmln
Z2VyIGFub3RoZXIgZnJhbWUuIFNpbmNlIHR3byBmcmFtZXMgYXJlIHBlbmRpbmcsIHdlIHNob3Vs
ZCBub3QgZHJhdy4KKyAgICBlbGFwc2VkICs9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAgICBF
WFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVyLT5tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHByZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBi
YWNrd2FyZC4KKyAgICB0aW1lci0+c2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKGVsYXBz
ZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9GQUxTRShjbGll
bnQudGlja0NhbGxlZCgpKTsKKworICAgIC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgdGhlIGZpcnN0
IGZyYW1lIGVuZGVkIDVtcyBsYXRlcgorICAgIHRpbWVyLT5zZXRNb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUodGltZXItPm1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgNSk7CisgICAg
Y29udHJvbGxlci5kaWRGaW5pc2hGcmFtZSgpOworCisgICAgLy8gVGljayBzaG91bGQgbm90IGhh
dmUgYmVlbiBjYWxsZWQKKyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisK
KyAgICAvLyBUcmlnZ2VyIHlldCBhbm90aGVyIGZyYW1lLiBTaW5jZSBvbmUgZnJhbWVzIGlzIHBl
bmRpbmcsIGFub3RoZXIgdnN5bmMgY2FsbGJhY2sgc2hvdWxkIHJ1bi4KKyAgICBlbGFwc2VkICs9
IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVy
LT5tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHBy
ZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAgICB0aW1lci0+c2V0TW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5n
VGFzaygpOworICAgIEVYUEVDVF9UUlVFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcAppbmRleCBmMmUyNDI1ZGQ0NmQzMjQ0NDkyNDVhZTNiMjFlM2QzMDk0YTBhN2M2Li5jMWIy
YTlhYzdkY2JmYjQ3NTA4MGMxNjQxZjQ5MzdlMThhN2JjYWE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTI5Nyw3
ICsyOTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJ1blRlc3QoYm9vbCB0aHJl
YWRlZCkKICAgICB7CiAgICAgICAgIG1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9
IHRocmVhZGVkOwotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdERlbGF5ZWRUYXNrKENDTGF5
ZXJUcmVlSG9zdFRlc3Q6Om9uQmVnaW5UZXN0LCBzdGF0aWNfY2FzdDx2b2lkKj4odGhpcyksIDAp
OworICAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayhDQ0xheWVyVHJlZUhv
c3RUZXN0OjpvbkJlZ2luVGVzdCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpLCAwKTsKICAgICAg
ICAgbV90aW1lb3V0VGFzayA9IG5ldyBUaW1lb3V0VGFzayh0aGlzKTsKICAgICAgICAgd2Via2l0
X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayhtX3RpbWVvdXRUYXNrLCA1MDAwKTsgLy8gd2Via2l0
X3N1cHBvcnQgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB0YXNrCiAgICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpSdW5NZXNzYWdlTG9vcCgpOwpAQCAtNzUzLDQgKzc1MywzIEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXcsIHJ1bk11bHRpVGhyZWFkKQogfQogCiB9
IC8vIG5hbWVzcGFjZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1NjaGVkdWxlclRlc3RDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTU1MjJhNWI2M2U5YjZmZWMyNjA1
YjMxZjZlM2Q4Nzc5OWEyZmRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaApAQCAtMCwwICsxLDEwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ1NjaGVkdWxlclRlc3RDb21tb25faAorI2RlZmluZSBDQ1Nj
aGVkdWxlclRlc3RDb21tb25faAorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisj
aW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdFRlc3RzIHsKKworY2xhc3MgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCA6IHB1
YmxpYyBXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXJDbGllbnQgeworcHVibGljOgorICAgIEZha2VD
Q1Ntb290aGVkVGltZXJDbGllbnQoKSB7IHJlc2V0KCk7IH0KKyAgICB2b2lkIHJlc2V0KCkgeyBt
X3RpY2tDYWxsZWQgPSBmYWxzZTsgfQorICAgIGJvb2wgdGlja0NhbGxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGlja0NhbGxlZDsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgeyBt
X3RpY2tDYWxsZWQgPSB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIG1fdGlja0NhbGxl
ZDsKK307CisKK2NsYXNzIEZha2VDQ1RocmVhZCA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RocmVhZCB7
CitwdWJsaWM6CisgICAgRmFrZUNDVGhyZWFkKCkgeyByZXNldCgpOyB9CisgICAgdm9pZCByZXNl
dCgpCisgICAgeworICAgICAgICBtX3BlbmRpbmdUYXNrRGVsYXkgPSAwOworICAgICAgICBtX3Bl
bmRpbmdUYXNrLmNsZWFyKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNQZW5kaW5nVGFzaygpIGNv
bnN0IHsgcmV0dXJuIG1fcGVuZGluZ1Rhc2s7IH0KKyAgICB2b2lkIHJ1blBlbmRpbmdUYXNrKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3BlbmRpbmdUYXNrKTsKKyAgICAgICAgT3duUHRyPFRh
c2s+IHRhc2sgPSBtX3BlbmRpbmdUYXNrLnJlbGVhc2UoKTsKKyAgICAgICAgdGFzay0+cGVyZm9y
bVRhc2soKTsKKyAgICB9CisKKyAgICBsb25nIGxvbmcgcGVuZGluZ0RlbGF5KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEVYUEVDVF9UUlVFKGhhc1BlbmRpbmdUYXNrKCkpOworICAgICAgICByZXR1
cm4gbV9wZW5kaW5nVGFza0RlbGF5OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFz
ayhQYXNzT3duUHRyPFRhc2s+KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVh
bCB2b2lkIHBvc3REZWxheWVkVGFzayhQYXNzT3duUHRyPFRhc2s+IHRhc2ssIGxvbmcgbG9uZyBk
ZWxheSkKKyAgICB7CisgICAgICAgIEVYUEVDVF9UUlVFKCFoYXNQZW5kaW5nVGFzaygpKTsKKyAg
ICAgICAgbV9wZW5kaW5nVGFzayA9IHRhc2s7CisgICAgICAgIG1fcGVuZGluZ1Rhc2tEZWxheSA9
IGRlbGF5OworICAgIH0KKyAgICB2aXJ0dWFsIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBPd25QdHI8VGFzaz4gbV9wZW5kaW5nVGFzazsKKyAgICBsb25nIGxvbmcgbV9wZW5k
aW5nVGFza0RlbGF5OworfTsKKworY2xhc3MgRmFrZUNDU21vb3RoZWRUaW1lciA6IHB1YmxpYyBX
ZWJDb3JlOjpDQ1Ntb290aGVkVGltZXIgeworcHVibGljOgorICAgIEZha2VDQ1Ntb290aGVkVGlt
ZXIoZG91YmxlIGksIFdlYkNvcmU6OkNDVGhyZWFkKiB0KQorICAgICAgICA6IENDU21vb3RoZWRU
aW1lcihpLCB0KQorICAgICAgICAsIG1fbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKDApIHsg
fQorCisgICAgdm9pZCBzZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoZG91YmxlIHRpbWUp
IHsgbV9tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUgPSB0aW1lOyB9CisgICAgdmlydHVhbCBk
b3VibGUgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9tb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWU7IH0KKworcHJvdGVjdGVkOgorICAgIGRvdWJsZSBtX21v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZTsKK307CisKK30KKworI2VuZGlmIC8vIENDU2NoZWR1
bGVyVGVzdENvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDU21vb3RoZWRUaW1lclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1Ntb290aGVkVGltZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWUzZmQyOWI0MmM4ZjQ0ZDBlYzcw
ZGZlODI0ZjE1NWI4ZTYxNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1Ntb290aGVkVGltZXJUZXN0LmNwcApAQCAtMCwwICsxLDEyMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhl
ZFRpbWVyLmgiCisKKyNpbmNsdWRlICJDQ1NjaGVkdWxlclRlc3RDb21tb24uaCIKKyNpbmNsdWRl
ICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CisKK25hbWVzcGFjZSB7CisKK1RFU1Qo
Q0NTbW9vdGhlZFRpbWVyVGVzdCwgVGFza1Bvc3RlZEFuZFRpY2tDYWxsZWQpCit7CisgICAgRmFr
ZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsK
KyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyIHRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOwor
ICAgIHRpbWVyLnNldENsaWVudCgmY2xpZW50KTsKKworICAgIHRpbWVyLnNldE1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgwKTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisgICAgRVhQ
RUNUX1RSVUUodGhyZWFkLmhhc1BlbmRpbmdUYXNrKCkpOworCisgICAgdGltZXIuc2V0TW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKDE2KTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsK
KyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgpKTsKK30KKworVEVTVChDQ1Ntb290
aGVkVGltZXIsIFRpY2tOb3RDYWxsZWRXaXRoVGFza1Bvc3RlZCkKK3sKKyAgICBGYWtlQ0NUaHJl
YWQgdGhyZWFkOworICAgIEZha2VDQ1Ntb290aGVkVGltZXJDbGllbnQgY2xpZW50OworICAgIEZh
a2VDQ1Ntb290aGVkVGltZXIgdGltZXIoMTAwMC4wIC8gNjAuMCwgJnRocmVhZCk7CisgICAgdGlt
ZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAgIHRpbWVyLnNldEFjdGl2ZSh0cnVlKTsKKyAgICBF
WFBFQ1RfVFJVRSh0aHJlYWQuaGFzUGVuZGluZ1Rhc2soKSk7CisgICAgdGltZXIuc2V0QWN0aXZl
KGZhbHNlKTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9CisKK1RFU1QoQ0NTbW9vdGhlZFRpbWVyLCBTdGFydFR3
aWNlRW5xdWV1ZXNPbmVUYXNrKQoreworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFr
ZUNDU21vb3RoZWRUaW1lckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0
aW1lcigxMDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVu
dCk7CisgICAgdGltZXIuc2V0QWN0aXZlKHRydWUpOworICAgIEVYUEVDVF9UUlVFKHRocmVhZC5o
YXNQZW5kaW5nVGFzaygpKTsKKyAgICB0aHJlYWQucmVzZXQoKTsKKyAgICB0aW1lci5zZXRBY3Rp
dmUodHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNFKHRocmVhZC5oYXNQZW5kaW5nVGFzaygpKTsKK30K
KworVEVTVChDQ1Ntb290aGVkVGltZXIsIFN0YXJ0V2hlblJ1bm5pbmdEb2VzbnRUaWNrKQorewor
ICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCBj
bGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0aW1lcigxMDAwLjAgLyA2MC4wLCAmdGhy
ZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVudCk7CisgICAgdGltZXIuc2V0QWN0aXZl
KHRydWUpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIHRocmVhZC5yZXNldCgp
OworICAgIHRpbWVyLnNldEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBFQ1RfRkFMU0UodGhyZWFkLmhh
c1BlbmRpbmdUYXNrKCkpOworfQorCitURVNUKENDU21vb3RoZWRUaW1lclRlc3QsIEFjaGlldmVz
VGFyZ2V0UmF0ZVdpdGhOb05vaXNlKQoreworICAgIGludCBudW1JdGVyYXRpb25zID0gMTAwMDsK
KworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVu
dCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0aW1lcigxMDAwLjAgLyA2MC4wLCAm
dGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVudCk7CisgICAgdGltZXIuc2V0QWN0
aXZlKHRydWUpOworCisgICAgZG91YmxlIHRvdGFsRnJhbWVUaW1lID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7ICsraSkgeworICAgICAgICBsb25nIGxvbmcgZGVs
YXkgPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisKKyAgICAgICAgLy8gYWNjdW11bGF0ZSB0aGUg
ImRlbGF5IgorICAgICAgICB0b3RhbEZyYW1lVGltZSArPSBkZWxheTsKKworICAgICAgICAvLyBS
dW4gdGhlIGNhbGxiYWNrIGV4YWN0bHkgd2hlbiBhc2tlZAorICAgICAgICBkb3VibGUgbm93ID0g
dGltZXIubW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyBkZWxheTsKKyAgICAgICAgdGlt
ZXIuc2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKG5vdyk7CisgICAgICAgIHRocmVhZC5y
dW5QZW5kaW5nVGFzaygpOworICAgIH0KKyAgICBkb3VibGUgYXZlcmFnZUludGVydmFsID0gdG90
YWxGcmFtZVRpbWUgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bUl0ZXJhdGlvbnMpOworICAgIEVY
UEVDVF9ORUFSKDEwMDAuMCAvIDYwLjAsIGF2ZXJhZ2VJbnRlcnZhbCwgMC4xKTsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112426</attachid>
            <date>2011-10-25 16:23:47 -0700</date>
            <delta_ts>2011-10-25 20:08:53 -0700</delta_ts>
            <desc>MakeItBuild</desc>
            <filename>bug-70713-20111025162346.patch</filename>
            <type>text/plain</type>
            <size>35761</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgzNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZDdlMTZkNWYwOTVhYjZl
MDZlYjA4OWE5ODRmNzA3NjEwNmVjZjA0Li5kNTJmMWJiM2M5Yzc3NTk3MTg0NWMwMWQ3ZTgwMzlh
NWQzZDAyYWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTAtMjUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVy
QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxl
clRpbWVyQWRhcHRlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI6Om9uVGltZXJU
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRl
cjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEZpbmlzaEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQWJvcnRBbGxQ
ZW5kaW5nRnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJDbGllbnQ6On5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRBY3RpdmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpwb3N0VGlja1Rhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpvblRpY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDU21vb3RoZWRUaW1lckNsaWVudDo6fkNDU21vb3RoZWRUaW1lckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6OkNDU21vb3RoZWRUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6On5DQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTbW9vdGhlZFRpbWVyOjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ntb290
aGVkVGltZXI6OmN1cnJlbnRUaW1lKToKKwogMjAxMS0xMC0yNSAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyODg1ODApOiBDdXJz
b3IgZmFpbHMgdG8gY2hhbmdlIHRvIHBvaW50ZXIgb24gZW1iZWRkZWQgR29vZ2xlIG1hcHMgcG9w
dXBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDY2NzU5MmI1ZDAxZGEyMTFkZmUxMjVj
NjYzNzg2MjVhMTc5ZDdkYTYuLjhhMzQyZDkwZmZlZjYzYzkzNTM4ZTViNjY5MDQ0ZWM4OTAzZDUx
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAt
MjUgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBp
OgorICAgICAgICAqIHRlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpG
YWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpyZXNldCk6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6dGlja0NhbGxlZCk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6b25WU3lu
Y1RpY2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0ND
U2NoZWR1bGVyVGVzdENvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
Q0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpyZXNldCk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lckNsaWVudDo6dGlja0NhbGxlZCk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lckNsaWVudDo6b25UaW1l
clRpY2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6RmFrZUNDVGhyZWFk
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJlc2V0KToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6Omhhc1BlbmRpbmdUYXNrKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnJ1blBlbmRpbmdUYXNrKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnBlbmRpbmdEZWxheSk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUNDVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUND
VGhyZWFkOjpwb3N0RGVsYXllZFRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Ro
cmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Ntb290aGVkVGlt
ZXI6OkZha2VDQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Nt
b290aGVkVGltZXI6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
Q0NTbW9vdGhlZFRpbWVyOjpjdXJyZW50VGltZSk6CisgICAgICAgICogdGVzdHMvQ0NTbW9vdGhl
ZFRpbWVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorCiAy
MDExLTEwLTI1ICBHZW5lIEdpcmFyZCAgPGdpcmFyZEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmUtZW5hYmxlIHRvdWNoIHRlc3RzIChmcm9tIDY2NTc3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDY4
ZmFjMzlmZWY3Yzk1OGUzMWI0YTU0NmU2OTM4MDgzYmYwNmUyZmQuLjdmOTRlOTZiYzY0MGFmNjk4
ZTliNThiYzQ4NmQwMTIzMmJmMDc1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1MjcsNiArMzUy
Nyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLApAQCAtMzU1NSw2ICszNTU3LDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVk
dWxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nt
b290aGVkVGltZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Ntb290aGVkVGltZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRNYWluVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxDb250cm9sbGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYwNmU2MDBjODI0ZGNiMzg1OGE4ZWU0NTNmODBlMjQzZmY5NWI3MjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2su
aCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NG
cmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyIDogcHVibGljIENDU21vb3RoZWRUaW1lckNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NGcmFtZVJhdGVDb250cm9s
bGVyVGltZXJBZGFwdGVyPiBjcmVhdGUoQ0NGcmFtZVJhdGVDb250cm9sbGVyKiBmcmFtZVJhdGVD
b250cm9sbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0ZyYW1lUmF0
ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIoZnJhbWVSYXRlQ29udHJvbGxlcikpOworICAgIH0KKyAg
ICB2aXJ0dWFsIH5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIoKSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBvblRpbWVyVGljaygpIHsgbV9mcmFtZVJhdGVDb250cm9sbGVyLT5vblRp
bWVyVGljaygpOyB9Citwcml2YXRlOgorICAgIGV4cGxpY2l0IENDRnJhbWVSYXRlQ29udHJvbGxl
clRpbWVyQWRhcHRlcihDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIqIGZyYW1lUmF0ZUNvbnRyb2xsZXIp
CisgICAgICAgICAgICA6IG1fZnJhbWVSYXRlQ29udHJvbGxlcihmcmFtZVJhdGVDb250cm9sbGVy
KSB7IH0KKworICAgIENDRnJhbWVSYXRlQ29udHJvbGxlciogbV9mcmFtZVJhdGVDb250cm9sbGVy
OworfTsKKworQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIoUGFz
c093blB0cjxDQ1Ntb290aGVkVGltZXI+IHRpbWVyKQorICAgICAgICA6IG1fY2xpZW50KDApCisg
ICAgICAgICwgbV90aW1lcih0aW1lcikKK3sKKyAgICBtX3RpbWVyQ2xpZW50QWRhcHRlciA9IEND
RnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcjo6Y3JlYXRlKHRoaXMpOworICAgIG1fdGlt
ZXItPnNldENsaWVudChtX3RpbWVyQ2xpZW50QWRhcHRlci5nZXQoKSk7Cit9CisKK0NDRnJhbWVS
YXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcigpCit7Cit9CisKK3ZvaWQgQ0NG
cmFtZVJhdGVDb250cm9sbGVyOjpvblRpbWVyVGljaygpCit7CisgICAgLy8gRG9uJ3QgZm9yd2Fy
ZCB0aGUgdGljayBpZiB3ZSBhcmUgdGhyb3R0bGVkLgorICAgIGlmIChtX3BlbmRpbmdGcmFtZUJl
Z2luVGltZXMuc2l6ZSgpID49IGtNYXhGcmFtZXNQZW5kaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5vblZTeW5jVGljaygpOworfQor
Cit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSgpCit7CisgICAgbV9w
ZW5kaW5nRnJhbWVCZWdpblRpbWVzLmFwcGVuZChtX3RpbWVyLT5tb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSk7Cit9CisKK3ZvaWQgQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpkaWRGaW5pc2hG
cmFtZSgpCit7CisgICAgbV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzLnRha2VGaXJzdCgpOworICAg
IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgdGhlIGRlbHRhIGJldHdlZW4gbm93IGFu
ZCBmcmFtZUJlZ2luVGltZS4KKyAgICAvLyAgRS5nLgorICAgIC8vICAgIGRvdWJsZSBmaW5pc2hl
ZEZyYW1lQmVnaW5UaW1lID0gbV9wZW5kaW5nRnJhbWVCZWdpblRpbWVzLnRha2VGaXJzdCgpOwor
ICAgIC8vICAgIGRvdWJsZSBlbGFwc2VkRnJhbWVUaW1lID0gbm93IC0gZmluaXNoZWRGcmFtZUJl
Z2luVGltZTsKKyAgICAvLyAgICBkb3VibGUgd2VpZ2h0ZWRmcmFtZVJhdGUgPSB3ZWlnaHRlZF9i
bGVuZCh3ZWlnaHRlZGZyYW1lUmF0ZSxlbGFwc2VkRnJhbWVUaW1lKTsKKyAgICAvLworICAgIC8v
IFRoZW4sIHVzZSB3ZWlnaHRlZCB0aW1lIHRvIGRlY2lkZSBiZXR3ZWVuOgorICAgIC8vICAgLSBk
aXNwbGF5IHJhdGUKKyAgICAvLyAgIC0gMS8yIGRpc3BsYXkgcmF0ZQorICAgIC8vICAgLSBoZWF2
aWx5LXdlaWdodGVkIGZyYW1lIHRpbWUKK30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6
OmRpZEFib3J0QWxsUGVuZGluZ0ZyYW1lcygpCit7CisgICAgbV9wZW5kaW5nRnJhbWVCZWdpblRp
bWVzLmNsZWFyKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDU0YTUwYTgxN2NlMGFiZWQzZGQzZTMxZGExZmM3MjFjYzI2NmI4NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NGcmFtZVJhdGVDb250cm9sbGVyX2gKKyNkZWZpbmUgQ0NGcmFtZVJh
dGVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgImNjL0NDU21vb3RoZWRUaW1lci5oIgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIG9uVlN5bmNUaWNrKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB+Q0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KCkgeyB9Cit9OworCitjbGFzcyBD
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI7CisKK2NsYXNzIENDRnJhbWVSYXRlQ29u
dHJvbGxlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NGcmFtZVJhdGVDb250cm9sbGVyKFBh
c3NPd25QdHI8Q0NTbW9vdGhlZFRpbWVyPik7CisgICAgfkNDRnJhbWVSYXRlQ29udHJvbGxlcigp
OworCisgICAgdm9pZCBzZXRDbGllbnQoQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgYWN0
aXZlKSB7IG1fdGltZXItPnNldEFjdGl2ZShhY3RpdmUpOyB9CisKKyAgICAvLyBVc2UgdGhlIGZv
bGxvd2luZyBtZXRob2RzIHRvIGFkanVzdCB0YXJnZXQgZnJhbWUgcmF0ZS4KKyAgICAvLworICAg
IC8vIE11bHRpcGxlIGZyYW1lcyBjYW4gYmUgaW4tcHJvZ3Jlc3MsIGJ1dCBmb3IgZXZlcnkgZGlk
QmVnaW5GcmFtZSwgYQorICAgIC8vIGRpZEZpbmlzaEZyYW1lIHNob3VsZCBiZSBwb3N0ZWQuCisg
ICAgLy8KKyAgICAvLyBJZiB0aGUgcmVuZGVyaW5nIHBpcGVsaW5lIGNyYXNoZXMsIGNhbGwgZGlk
QWJvcnRBbGxQZW5kaW5nRnJhbWVzLgorICAgIHZvaWQgZGlkQmVnaW5GcmFtZSgpOworICAgIHZv
aWQgZGlkRmluaXNoRnJhbWUoKTsKKyAgICB2b2lkIGRpZEFib3J0QWxsUGVuZGluZ0ZyYW1lcygp
OworCisgICAgZW51bSB7CisgICAgICAgIGtNYXhGcmFtZXNQZW5kaW5nID0gMgorICAgIH07CisK
K3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJB
ZGFwdGVyOworICAgIHZvaWQgb25UaW1lclRpY2soKTsKKworICAgIENDRnJhbWVSYXRlQ29udHJv
bGxlckNsaWVudCogbV9jbGllbnQ7CisgICAgRGVxdWU8ZG91YmxlPiBtX3BlbmRpbmdGcmFtZUJl
Z2luVGltZXM7CisgICAgT3duUHRyPENDU21vb3RoZWRUaW1lcio+IG1fdGltZXI7CisgICAgT3du
UHRyPENDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcj4gbV90aW1lckNsaWVudEFkYXB0
ZXI7Cit9OworCit9CisjZW5kaWYgLy8gQ0NGcmFtZVJhdGVDb250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3Ro
ZWRUaW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Ntb290aGVkVGltZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZmQ1MzIyY2Q3ZjQ0N2I5YTM2MDk0
OWQwODMwOWQ1ZjM2YTY1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuY3BwCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNj
L0NDU21vb3RoZWRUaW1lci5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ1RocmVhZFRhc2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENDU21v
b3RoZWRUaW1lcjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIGlmICghYWN0aXZlKSB7
CisgICAgICAgIG1fc3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEJlY29taW5nIGFjdGl2ZSBpcyBkZWZlcnJlZDogd2UgcG9zdCBhIDAtZGVs
YXkgdGFzay4gV2hlbiBpdCBydW5zLCB3ZSB1c2UKKyAgICAvLyB0aGF0IHRvIGVzdGFibGlzaCB0
aGUgdGltZWJhc2UsIGJlY29tZSB0cnVseSBhY3RpdmUsIGFuZCBmaXJlIHRoZSBmaXJzdAorICAg
IC8vIHRpY2suCisgICAgaWYgKG1fc3RhdGUgPT0gU1RBVEVfU1RBUlRJTkcgfHwgbV9zdGF0ZSA9
PSBTVEFURV9BQ1RJVkUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTVEFURV9T
VEFSVElORzsKKyAgICBwb3N0VGlja1Rhc2soMCk7Cit9CisKK3ZvaWQgQ0NTbW9vdGhlZFRpbWVy
Ojpwb3N0VGlja1Rhc2sobG9uZyBsb25nIGRlbGF5KQoreworICAgIG1fdGhyZWFkLT5wb3N0RGVs
YXllZFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ntb290aGVkVGltZXI6Om9uVGlj
ayksIGRlbGF5KTsKK30KKwordm9pZCBDQ1Ntb290aGVkVGltZXI6Om9uVGljaygpCit7CisgICAg
ZG91YmxlIG5vdyA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworCisgICAgaWYgKG1f
c3RhdGUgPT0gU1RBVEVfSU5BQ1RJVkUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0
YXRlID09IFNUQVRFX1NUQVJUSU5HKSB7CisgICAgICAgIG1fbmV4dFRpY2tUaW1lID0gbm93Owor
ICAgICAgICBtX3N0YXRlID0gU1RBVEVfQUNUSVZFOworICAgIH0KKworICAgIGNvbnN0IGRvdWJs
ZSBtYXhMYXRlQmVmb3JlRHJvcHBpbmdGcmFtZSA9IDIuNTsKKworICAgIGRvdWJsZSBuZXdOZXh0
VGlja1RpbWUgPSAwOworICAgIGRvdWJsZSBhbW91bnRMYXRlID0gbm93IC0gbV9uZXh0VGlja1Rp
bWU7CisgICAgaWYgKGFtb3VudExhdGUgPj0gLTEuMCAmJiBhbW91bnRMYXRlIDw9IG1heExhdGVC
ZWZvcmVEcm9wcGluZ0ZyYW1lKSB7CisgICAgICAgIC8vIFRpbWVyIHdhcyAobW9zdGx5KSBvbiB0
aW1lLiBXZSBwZW5hbGl6ZSB0byAtMS4wIGZpeGVkIG9uIHRoZSBlYXJseSBzaWRlIGJlY2F1c2UK
KyAgICAgICAgLy8gdGhlIGRlbGF5IHN5c3RlbSB0YWtlcyB0aGUgZmxvb3Igb2YgYW55IGRlbGF5
IHdlIGdpdmUgaXQuIFRoZSBsYXRlLXNpZGUgZGVsYXkKKyAgICAgICAgLy8gaXMgb3VyIHRvbGVy
YW5jZSBmYWN0b3IgZm9yICJyZWFzb25hYmxlIiBkZWxheXMgZHVlIHRvIHRoZSB0aHJlYWQgYmVp
bmcgYnVzeS4KKyAgICAgICAgbmV3TmV4dFRpY2tUaW1lID0gbV9uZXh0VGlja1RpbWUgKyBtX2lu
dGVydmFsTXM7CisgICAgfSBlbHNlIGlmIChhbW91bnRMYXRlID4gbWF4TGF0ZUJlZm9yZURyb3Bw
aW5nRnJhbWUpIHsKKyAgICAgICAgLy8gVGltZXIgY2FtZSBiYWNrIGxhdGUuIFJlc2V0IHRoZSB0
aW1lYmFzZS4KKyAgICAgICAgbmV3TmV4dFRpY2tUaW1lID0gbm93ICsgbV9pbnRlcnZhbE1zOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRpbWVyIGNhbWUgYmFjayBpbXBvc3NpYmx5IGVhcmx5
LiBTYW5pdHkgY2hlY2sgb25seS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgLy8gUG9zdCBhbm90aGVyIHRhc2sgKmJlZm9yZSogdGhlIHRpY2sgYW5kIHVwZGF0
ZSBzdGF0ZQorICAgIEFTU0VSVChuZXdOZXh0VGlja1RpbWUgPiBub3cpOworICAgIHBvc3RUaWNr
VGFzayhzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG5ld05leHRUaWNrVGltZSAtIG5vdykpOworICAg
IG1fbmV4dFRpY2tUaW1lID0gbmV3TmV4dFRpY2tUaW1lOworCisgICAgLy8gRmlyZSB0aGUgdGlj
aworICAgIGlmICh0aWNrICYmIG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+b25UaW1lclRp
Y2soKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Njgy
NWU0ZTEzNjVlNmE1ZTUwZWNhZGE2OWNiYzQ3MTM4MWQzMTJmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRp
bWVyLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Ntb290aGVk
VGltZXJfaAorI2RlZmluZSBDQ1Ntb290aGVkVGltZXJfaAorCisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NUaHJlYWQ7CisKK2Ns
YXNzIENDU21vb3RoZWRUaW1lckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG9u
VGltZXJUaWNrKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+Q0NTbW9vdGhlZFRp
bWVyQ2xpZW50KCkgeyB9Cit9OworCisvLyBUaGlzIHRpbWVyIGltcGxlbWVudHMgYSB0aW1lIHNv
dXJjZSB0aGF0IGFjaGlldmVzIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwKKy8vIGluIGZhY2Ugb2Yg
bWlsbGlzZWNvbmQtcHJlY2lzaW9uIGRlbGF5ZWQgY2FsbGJhY2tzIGFuZCByYW5kb20gcXVldWVp
bmcgZGVsYXlzLgorLy8KKy8vIE5PVEU6IERlbGV0aW5nIENDU21vb3RoZWRUaW1lciB3aGVuIGEg
dGljayBpcyBwZW5kaW5nIHdpbGwgbGVhZCB0byBhIGNyYXNoLgorLy8gICAgICBUbyBmaXggdGhp
cywgd2UgbmVlZCB0byBnZW5lcmFsaXplIENDU2NvcGVkTWFpblRocmVhZFByb3h5LgorY2xhc3Mg
Q0NTbW9vdGhlZFRpbWVyIHsKK3B1YmxpYzoKKyAgICBDQ1Ntb290aGVkVGltZXIoZG91YmxlIGlu
dGVydmFsTXMsIENDVGhyZWFkKiB0aHJlYWQpCisgICAgICAgICAgICA6IG1fY2xpZW50KDApCisg
ICAgICAgICAgICAsIG1faW50ZXJ2YWxNcyhpbnRlcnZhbE1zKQorICAgICAgICAgICAgLCBtX25l
eHRUaWNrVGltZSgwKQorICAgICAgICAgICAgLCBtX3N0YXRlKFNUQVRFX0lOQUNUSVZFKQorICAg
ICAgICAgICAgLCBtX3RocmVhZCh0aHJlYWQpIHsgfQorICAgIHZpcnR1YWwgfkNDU21vb3RoZWRU
aW1lcigpIHsgfQorCisgICAgdm9pZCBzZXRDbGllbnQoQ0NTbW9vdGhlZFRpbWVyQ2xpZW50KiBj
bGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wp
OworCisgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KKyAgICB2aXJ0dWFsIGRvdWJsZSBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSBjb25zdCB7IHJldHVybiBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBvblRpY2soKTsKKyAgICB2
b2lkIHBvc3RUaWNrVGFzayhsb25nIGxvbmcgZGVsYXkpOworCisgICAgZW51bSBTdGF0ZSB7Cisg
ICAgICAgIFNUQVRFX0lOQUNUSVZFLAorICAgICAgICBTVEFURV9TVEFSVElORywKKyAgICAgICAg
U1RBVEVfQUNUSVZFLAorICAgIH07CisgICAgQ0NTbW9vdGhlZFRpbWVyQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBkb3VibGUgbV9pbnRlcnZhbE1zOworICAgIGRvdWJsZSBtX25leHRUaWNrVGltZTsK
KyAgICBTdGF0ZSBtX3N0YXRlOworICAgIENDVGhyZWFkKiBtX3RocmVhZDsKK307CisKK30KKyNl
bmRpZiAvLyBDQ1Ntb290aGVkVGltZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5k
ZXggYTQ4OTFmYWIxNzlmMDJhZmQ2NGRmMWExMGEwMTYyNzQxNDZlY2I2Yi4uOGQzNDA1NDg2ZDNl
NDVhNGI4ZmE3YWMxNzZhODllZDNlNTYwY2E2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCkBAIC01NCwxMSArNTQsMTQgQEAKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6
IFsKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
Q0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5
ZXJTb3J0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1Ntb290aGVk
VGltZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZmYjMyMjcxYjY1MzBlODY5ZmM0ZTEyZWQ2ZjgwY2EyZTM3ZWFiYTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRl
c3QuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUg
IkNDU2NoZWR1bGVyVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRmFrZUNDRnJhbWVSYXRl
Q29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJD
bGllbnQgeworcHVibGljOgorICAgIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQoKSB7
IHJlc2V0KCk7IH0KKworICAgIHZvaWQgcmVzZXQoKSB7IG1fdGlja0NhbGxlZCA9IGZhbHNlOyB9
CisgICAgYm9vbCB0aWNrQ2FsbGVkKCkgY29uc3QgeyByZXR1cm4gbV90aWNrQ2FsbGVkOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgb25WU3luY1RpY2soKSB7IG1fdGlja0NhbGxlZCA9IHRydWU7IH0K
KworcHJvdGVjdGVkOgorICAgIGJvb2wgbV90aWNrQ2FsbGVkOworfTsKKworCitURVNUKENDRnJh
bWVSYXRlQ29udHJvbGxlclRlc3QsIFRlc3RGcmFtZVRocm90dGxpbmdfSW1tZWRpYXRlQWNrKQor
eworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDRnJhbWVSYXRlQ29udHJvbGxl
ckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciogdGltZXIgPSBuZXcgRmFr
ZUNDU21vb3RoZWRUaW1lcigxMDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICBDQ0ZyYW1lUmF0
ZUNvbnRyb2xsZXIgY29udHJvbGxlcihhZG9wdFB0cih0aW1lcikpOworCisgICAgY29udHJvbGxl
ci5zZXRDbGllbnQoJmNsaWVudCk7CisgICAgY29udHJvbGxlci5zZXRBY3RpdmUodHJ1ZSk7CisK
KyAgICBkb3VibGUgZWxhcHNlZCA9IDA7IC8vIE11Y2sgYXJvdW5kIHdpdGggdGltZSBhIGJpdAor
CisgICAgLy8gVHJpZ2dlciBvbmUgZnJhbWUsIG1ha2Ugc3VyZSB0aGUgdnN5bmMgY2FsbGJhY2sg
aXMgY2FsbGVkCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgdGlt
ZXItPnNldE1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZShlbGFwc2VkKTsKKyAgICB0aHJlYWQu
cnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgpKTsK
KyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgd2UgZHJl
dworICAgIGNvbnRyb2xsZXIuZGlkQmVnaW5GcmFtZSgpOworCisgICAgLy8gVGVsbCB0aGUgY29u
dHJvbGxlciB0aGUgZnJhbWUgZW5kZWQgNW1zIGxhdGVyCisgICAgdGltZXItPnNldE1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSh0aW1lci0+bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkg
KyA1KTsKKyAgICBjb250cm9sbGVyLmRpZEZpbmlzaEZyYW1lKCk7CisKKyAgICAvLyBUcmlnZ2Vy
IGFub3RoZXIgZnJhbWUsIG1ha2Ugc3VyZSB2c3luYyBydW5zIGFnYWluCisgICAgZWxhcHNlZCAr
PSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgRVhQRUNUX1RSVUUoZWxhcHNlZCA+PSB0aW1l
ci0+bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOyAvLyBTYW5pdHkgY2hlY2sgdGhhdCBw
cmV2aW91cyBjb2RlIGRpZG4ndCBtb3ZlIHRpbWUgYmFja3dhcmQuCisgICAgdGltZXItPnNldE1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZShlbGFwc2VkKTsKKyAgICB0aHJlYWQucnVuUGVuZGlu
Z1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgpKTsKK30KKworVEVT
VChDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LCBUZXN0RnJhbWVUaHJvdHRsaW5nX1R3b0ZyYW1l
c0luRmxpZ2h0KQoreworICAgIC8vIFRoaXMgdGVzdCBvbmx5IHdvcmtzIGZvciB0aGUgY2FzZSBv
ZiBrTWF4RnJhbWVzUGVuZGluZyA9IDIKKyAgICBBU1NFUlRfRVEoMiwgQ0NGcmFtZVJhdGVDb250
cm9sbGVyOjprTWF4RnJhbWVzUGVuZGluZyk7CisKKyAgICBGYWtlQ0NUaHJlYWQgdGhyZWFkOwor
ICAgIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgY2xpZW50OworICAgIEZha2VDQ1Nt
b290aGVkVGltZXIqIHRpbWVyID0gbmV3IEZha2VDQ1Ntb290aGVkVGltZXIoMTAwMC4wIC8gNjAu
MCwgJnRocmVhZCk7CisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVyIGNvbnRyb2xsZXIoYWRvcHRQ
dHIodGltZXIpKTsKKworICAgIGNvbnRyb2xsZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAgIGNv
bnRyb2xsZXIuc2V0QWN0aXZlKHRydWUpOworCisgICAgZG91YmxlIGVsYXBzZWQgPSAwOyAvLyBN
dWNrIGFyb3VuZCB3aXRoIHRpbWUgYSBiaXQKKworICAgIC8vIFRyaWdnZXIgb25lIGZyYW1lLCBt
YWtlIHN1cmUgdGhlIHZzeW5jIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgIGVsYXBzZWQgKz0gdGhy
ZWFkLnBlbmRpbmdEZWxheSgpOworICAgIHRpbWVyLT5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNU
X1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisgICAgY2xpZW50LnJlc2V0KCk7CisKKyAgICAv
LyBUZWxsIHRoZSBjb250cm9sbGVyIHdlIGRyZXcKKyAgICBjb250cm9sbGVyLmRpZEJlZ2luRnJh
bWUoKTsKKworICAgIC8vIFRyaWdnZXIgYW5vdGhlciBmcmFtZSwgbWFrZSBzdXJlIHZzeW5jIGNh
bGxiYWNrIHJ1bnMgYWdhaW4KKyAgICBlbGFwc2VkICs9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsK
KyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVyLT5tb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHByZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUg
dGltZSBiYWNrd2FyZC4KKyAgICB0aW1lci0+c2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9UUlVF
KGNsaWVudC50aWNrQ2FsbGVkKCkpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8gVGVs
bCB0aGUgY29udHJvbGxlciB3ZSBkcmV3LCBhZ2Fpbi4KKyAgICBjb250cm9sbGVyLmRpZEJlZ2lu
RnJhbWUoKTsKKworICAgIC8vIFRyaWdnZXIgYW5vdGhlciBmcmFtZS4gU2luY2UgdHdvIGZyYW1l
cyBhcmUgcGVuZGluZywgd2Ugc2hvdWxkIG5vdCBkcmF3LgorICAgIGVsYXBzZWQgKz0gdGhyZWFk
LnBlbmRpbmdEZWxheSgpOworICAgIEVYUEVDVF9UUlVFKGVsYXBzZWQgPj0gdGltZXItPm1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsgLy8gU2FuaXR5IGNoZWNrIHRoYXQgcHJldmlvdXMg
Y29kZSBkaWRuJ3QgbW92ZSB0aW1lIGJhY2t3YXJkLgorICAgIHRpbWVyLT5zZXRNb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7
CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworCisgICAgLy8gVGVsbCB0
aGUgY29udHJvbGxlciB0aGUgZmlyc3QgZnJhbWUgZW5kZWQgNW1zIGxhdGVyCisgICAgdGltZXIt
PnNldE1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSh0aW1lci0+bW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCkgKyA1KTsKKyAgICBjb250cm9sbGVyLmRpZEZpbmlzaEZyYW1lKCk7CisKKyAg
ICAvLyBUaWNrIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZAorICAgIEVYUEVDVF9GQUxTRShj
bGllbnQudGlja0NhbGxlZCgpKTsKKworICAgIC8vIFRyaWdnZXIgeWV0IGFub3RoZXIgZnJhbWUu
IFNpbmNlIG9uZSBmcmFtZXMgaXMgcGVuZGluZywgYW5vdGhlciB2c3luYyBjYWxsYmFjayBzaG91
bGQgcnVuLgorICAgIGVsYXBzZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIEVYUEVD
VF9UUlVFKGVsYXBzZWQgPj0gdGltZXItPm1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsg
Ly8gU2FuaXR5IGNoZWNrIHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3QgbW92ZSB0aW1lIGJhY2t3
YXJkLgorICAgIHRpbWVyLT5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoZWxhcHNlZCk7
CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRp
Y2tDYWxsZWQoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGYyZTI0MjVkZDQ2ZDMyNDQ0OTI0NWFl
M2IyMWUzZDMwOTRhMGE3YzYuLmMxYjJhOWFjN2RjYmZiNDc1MDgwYzE2NDFmNDkzN2UxOGE3YmNh
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcApAQCAtMjk3LDcgKzI5Nyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgcnVuVGVzdChib29sIHRocmVhZGVkKQogICAgIHsKICAgICAgICAgbV9zZXR0aW5ncy5l
bmFibGVDb21wb3NpdG9yVGhyZWFkID0gdGhyZWFkZWQ7Ci0gICAgICAgIHdlYmtpdF9zdXBwb3J0
OjpQb3N0RGVsYXllZFRhc2soQ0NMYXllclRyZWVIb3N0VGVzdDo6b25CZWdpblRlc3QsIHN0YXRp
Y19jYXN0PHZvaWQqPih0aGlzKSwgMCk7CisgICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdERl
bGF5ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uQmVnaW5UZXN0LCBzdGF0aWNfY2FzdDx2
b2lkKj4odGhpcyksIDApOwogICAgICAgICBtX3RpbWVvdXRUYXNrID0gbmV3IFRpbWVvdXRUYXNr
KHRoaXMpOwogICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdERlbGF5ZWRUYXNrKG1fdGltZW91
dFRhc2ssIDUwMDApOyAvLyB3ZWJraXRfc3VwcG9ydCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHRh
c2sKICAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CkBAIC03NTMsNCAr
NzUzLDMgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxNdWx0aXBsZVJlZHJhdywg
cnVuTXVsdGlUaHJlYWQpCiB9CiAKIH0gLy8gbmFtZXNwYWNlCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhlNTUyMmE1YjYzZTliNmZlYzI2MDViMzFmNmUzZDg3Nzk5YTJmZGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5o
CkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2NoZWR1bGVyVGVz
dENvbW1vbl9oCisjZGVmaW5lIENDU2NoZWR1bGVyVGVzdENvbW1vbl9oCisKKyNpbmNsdWRlICJj
Yy9DQ1Ntb290aGVkVGltZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCitjbGFzcyBGYWtlQ0NT
bW9vdGhlZFRpbWVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDU21vb3RoZWRUaW1lckNsaWVu
dCB7CitwdWJsaWM6CisgICAgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCgpIHsgcmVzZXQoKTsg
fQorICAgIHZvaWQgcmVzZXQoKSB7IG1fdGlja0NhbGxlZCA9IGZhbHNlOyB9CisgICAgYm9vbCB0
aWNrQ2FsbGVkKCkgY29uc3QgeyByZXR1cm4gbV90aWNrQ2FsbGVkOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgb25UaW1lclRpY2soKSB7IG1fdGlja0NhbGxlZCA9IHRydWU7IH0KKworcHJvdGVjdGVk
OgorICAgIGJvb2wgbV90aWNrQ2FsbGVkOworfTsKKworY2xhc3MgRmFrZUNDVGhyZWFkIDogcHVi
bGljIFdlYkNvcmU6OkNDVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBGYWtlQ0NUaHJlYWQoKSB7IHJl
c2V0KCk7IH0KKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fcGVuZGluZ1Rhc2tE
ZWxheSA9IDA7CisgICAgICAgIG1fcGVuZGluZ1Rhc2suY2xlYXIoKTsKKyAgICB9CisKKyAgICBi
b29sIGhhc1BlbmRpbmdUYXNrKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nVGFzazsgfQorICAg
IHZvaWQgcnVuUGVuZGluZ1Rhc2soKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1Rh
c2spOworICAgICAgICBPd25QdHI8VGFzaz4gdGFzayA9IG1fcGVuZGluZ1Rhc2sucmVsZWFzZSgp
OworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworICAgIH0KKworICAgIGxvbmcgbG9uZyBw
ZW5kaW5nRGVsYXkoKSBjb25zdAorICAgIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFzUGVuZGlu
Z1Rhc2soKSk7CisgICAgICAgIHJldHVybiBtX3BlbmRpbmdUYXNrRGVsYXk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdERlbGF5ZWRUYXNrKFBhc3NPd25QdHI8
VGFzaz4gdGFzaywgbG9uZyBsb25nIGRlbGF5KQorICAgIHsKKyAgICAgICAgRVhQRUNUX1RSVUUo
IWhhc1BlbmRpbmdUYXNrKCkpOworICAgICAgICBtX3BlbmRpbmdUYXNrID0gdGFzazsKKyAgICAg
ICAgbV9wZW5kaW5nVGFza0RlbGF5ID0gZGVsYXk7CisgICAgfQorICAgIHZpcnR1YWwgV1RGOjpU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIDA7IH0KKworcHJvdGVjdGVkOgorICAgIE93blB0cjxUYXNrPiBtX3BlbmRpbmdUYXNr
OworICAgIGxvbmcgbG9uZyBtX3BlbmRpbmdUYXNrRGVsYXk7Cit9OworCitjbGFzcyBGYWtlQ0NT
bW9vdGhlZFRpbWVyIDogcHVibGljIFdlYkNvcmU6OkNDU21vb3RoZWRUaW1lciB7CitwdWJsaWM6
CisgICAgRmFrZUNDU21vb3RoZWRUaW1lcihkb3VibGUgaSwgV2ViQ29yZTo6Q0NUaHJlYWQqIHQp
CisgICAgICAgIDogQ0NTbW9vdGhlZFRpbWVyKGksIHQpCisgICAgICAgICwgbV9tb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoMCkgeyB9CisKKyAgICB2b2lkIHNldE1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZShkb3VibGUgdGltZSkgeyBtX21vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSA9
IHRpbWU7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSBjb25zdCB7IHJldHVybiBtX21vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZTsgfQorCitwcm90
ZWN0ZWQ6CisgICAgZG91YmxlIG1fbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lOworfTsKKwor
fQorCisjZW5kaWYgLy8gQ0NTY2hlZHVsZXJUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTbW9vdGhlZFRpbWVyVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU21vb3RoZWRUaW1lclRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYxZTNmZDI5YjQyYzhmNDRkMGVjNzBkZmU4MjRmMTU1YjhlNjE2ZDgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU21vb3RoZWRUaW1lclRlc3QuY3Bw
CkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ1Ntb290aGVkVGltZXIuaCIKKworI2luY2x1ZGUgIkNDU2NoZWR1bGVy
VGVzdENvbW1vbi5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsK
KworbmFtZXNwYWNlIHsKKworVEVTVChDQ1Ntb290aGVkVGltZXJUZXN0LCBUYXNrUG9zdGVkQW5k
VGlja0NhbGxlZCkKK3sKKyAgICBGYWtlQ0NUaHJlYWQgdGhyZWFkOworICAgIEZha2VDQ1Ntb290
aGVkVGltZXJDbGllbnQgY2xpZW50OworICAgIEZha2VDQ1Ntb290aGVkVGltZXIgdGltZXIoMTAw
MC4wIC8gNjAuMCwgJnRocmVhZCk7CisgICAgdGltZXIuc2V0Q2xpZW50KCZjbGllbnQpOworCisg
ICAgdGltZXIuc2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKDApOworICAgIHRpbWVyLnNl
dEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBFQ1RfVFJVRSh0aHJlYWQuaGFzUGVuZGluZ1Rhc2soKSk7
CisKKyAgICB0aW1lci5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoMTYpOworICAgIHRo
cmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9UUlVFKGNsaWVudC50aWNrQ2FsbGVk
KCkpOworfQorCitURVNUKENDU21vb3RoZWRUaW1lciwgVGlja05vdENhbGxlZFdpdGhUYXNrUG9z
dGVkKQoreworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1l
ckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0aW1lcigxMDAwLjAgLyA2
MC4wLCAmdGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVudCk7CisgICAgdGltZXIu
c2V0QWN0aXZlKHRydWUpOworICAgIEVYUEVDVF9UUlVFKHRocmVhZC5oYXNQZW5kaW5nVGFzaygp
KTsKKyAgICB0aW1lci5zZXRBY3RpdmUoZmFsc2UpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFz
aygpOworICAgIEVYUEVDVF9GQUxTRShjbGllbnQudGlja0NhbGxlZCgpKTsKK30KKworVEVTVChD
Q1Ntb290aGVkVGltZXIsIFN0YXJ0VHdpY2VFbnF1ZXVlc09uZVRhc2spCit7CisgICAgRmFrZUND
VGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsKKyAg
ICBGYWtlQ0NTbW9vdGhlZFRpbWVyIHRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAg
IHRpbWVyLnNldENsaWVudCgmY2xpZW50KTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7Cisg
ICAgRVhQRUNUX1RSVUUodGhyZWFkLmhhc1BlbmRpbmdUYXNrKCkpOworICAgIHRocmVhZC5yZXNl
dCgpOworICAgIHRpbWVyLnNldEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBFQ1RfRkFMU0UodGhyZWFk
Lmhhc1BlbmRpbmdUYXNrKCkpOworfQorCitURVNUKENDU21vb3RoZWRUaW1lciwgU3RhcnRXaGVu
UnVubmluZ0RvZXNudFRpY2spCit7CisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtl
Q0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyIHRp
bWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIHRpbWVyLnNldENsaWVudCgmY2xpZW50
KTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNr
KCk7CisgICAgdGhyZWFkLnJlc2V0KCk7CisgICAgdGltZXIuc2V0QWN0aXZlKHRydWUpOworICAg
IEVYUEVDVF9GQUxTRSh0aHJlYWQuaGFzUGVuZGluZ1Rhc2soKSk7Cit9CisKK1RFU1QoQ0NTbW9v
dGhlZFRpbWVyVGVzdCwgQWNoaWV2ZXNUYXJnZXRSYXRlV2l0aE5vTm9pc2UpCit7CisgICAgaW50
IG51bUl0ZXJhdGlvbnMgPSAxMDAwOworCisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBG
YWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVy
IHRpbWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIHRpbWVyLnNldENsaWVudCgmY2xp
ZW50KTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisKKyAgICBkb3VibGUgdG90YWxGcmFt
ZVRpbWUgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSXRlcmF0aW9uczsgKytpKSB7
CisgICAgICAgIGxvbmcgbG9uZyBkZWxheSA9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKworICAg
ICAgICAvLyBhY2N1bXVsYXRlIHRoZSAiZGVsYXkiCisgICAgICAgIHRvdGFsRnJhbWVUaW1lICs9
IGRlbGF5OworCisgICAgICAgIC8vIFJ1biB0aGUgY2FsbGJhY2sgZXhhY3RseSB3aGVuIGFza2Vk
CisgICAgICAgIGRvdWJsZSBub3cgPSB0aW1lci5tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSArIGRlbGF5OworICAgICAgICB0aW1lci5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
bm93KTsKKyAgICAgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgfQorICAgIGRvdWJs
ZSBhdmVyYWdlSW50ZXJ2YWwgPSB0b3RhbEZyYW1lVGltZSAvIHN0YXRpY19jYXN0PGRvdWJsZT4o
bnVtSXRlcmF0aW9ucyk7CisgICAgRVhQRUNUX05FQVIoMTAwMC4wIC8gNjAuMCwgYXZlcmFnZUlu
dGVydmFsLCAwLjEpOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112442</attachid>
            <date>2011-10-25 20:08:57 -0700</date>
            <delta_ts>2011-10-26 17:01:44 -0700</delta_ts>
            <desc>.</desc>
            <filename>bug-70713-20111025200856.patch</filename>
            <type>text/plain</type>
            <size>35768</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg0MDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjN2EzZjNlOGVkMjFjMzA0
N2IwZTQ2YmYwZWNmMjQ1OTI4YjgxNjJiLi44ZGU2N2ZkZDIwMjg4YTU3NzFiYjZlM2RhMzUzMTAx
MDMwNDU3MWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTAtMjUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVy
QWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxl
clRpbWVyQWRhcHRlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI6Om9uVGltZXJU
aWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRl
cjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJhdGVDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6fkNDRnJhbWVSYXRlQ29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQmVnaW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEZpbmlzaEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6ZGlkQWJvcnRBbGxQ
ZW5kaW5nRnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJDbGllbnQ6On5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyOjpzZXRBY3RpdmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpwb3N0VGlja1Rhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpvblRpY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDU21vb3RoZWRUaW1lckNsaWVudDo6fkNDU21vb3RoZWRUaW1lckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6OkNDU21vb3RoZWRUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXI6On5DQ1Ntb290aGVkVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTbW9vdGhlZFRpbWVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTbW9vdGhlZFRpbWVyOjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ntb290
aGVkVGltZXI6OmN1cnJlbnRUaW1lKToKKwogMjAxMS0xMC0yNSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZpbmcgdG8gdGhlIHN0YXJ0IG9mIGxpbmUgc2hv
dWxkIG5vdCBwbGFjZSB0aGUgY2FyZXQgb3V0c2lkZSBvZiB0aGUgdGFibGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggNzk3ZTM4YTcyZDMzMjRhMzg3M2RkM2IzNDQ1ZmNiZTYwNTgyYzJh
MC4uMjE4M2ZhNTQzMGM5NzQwOGQ1OGEzMjQ0MTAxNzZlZDVlNDNjZjYyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMS0xMC0yNSAgTmF0IER1Y2EgIDxu
ZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZnJhbWUg
cmF0ZSBjb250cm9sIHBvcnRpb25zIG9mIENDU2NoZWR1bGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDcxMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVz
dHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
VGVzdHM6OkZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQ6OkZha2VDQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXJDbGllbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NGcmFt
ZVJhdGVDb250cm9sbGVyQ2xpZW50Ojp0aWNrQ2FsbGVkKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpvblZTeW5jVGljayk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29t
bW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Ntb290aGVkVGltZXJD
bGllbnQ6OkZha2VDQ1Ntb290aGVkVGltZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VDQ1Ntb290aGVkVGltZXJDbGllbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50Ojp0aWNrQ2FsbGVkKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlQ0NTbW9vdGhlZFRpbWVyQ2xpZW50OjpvblRpbWVyVGljayk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjpGYWtlQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZh
a2VDQ1RocmVhZDo6aGFzUGVuZGluZ1Rhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VD
Q1RocmVhZDo6cnVuUGVuZGluZ1Rhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Ro
cmVhZDo6cGVuZGluZ0RlbGF5KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6
OnBvc3RUYXNrKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnBvc3REZWxh
eWVkVGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjp0aHJlYWRJRCk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lcjo6RmFrZUNDU21vb3Ro
ZWRUaW1lcik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDU21vb3RoZWRUaW1lcjo6c2V0
Q3VycmVudFRpbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1Ntb290aGVkVGltZXI6
OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKiB0ZXN0cy9DQ1Ntb290aGVkVGltZXJUZXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisKIDIwMTEtMTAtMjUgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCB0ZWFyZG93biBp
biBXZWIqTGF5ZXJJbXBsLCBhbmQgYWRkIHRlc3RzIGZvciBXZWIqTGF5ZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAwZmE5NjkyZTUwM2I2NzA0MzZiYTNiZGU3ODJhMGUzZjBhMDhjYThkLi45N2M5MmE4
MGY1NTgwYTg0YzQzNjQ0ZTI2NmEyZmJlMjhmOWM3OTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0z
NTI5LDYgKzM1MjksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRl
Q29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKQEAgLTM1NTcsNiArMzU1OSw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2NoZWR1bGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTY2hlZHVsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkTWFpblRocmVhZFByb3h5LmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsQ29udHJvbGxlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mMDZlNjAwYzgyNGRjYjM4NThhOGVlNDUzZjgwZTI0M2ZmOTViNzIxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NU
aHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVyQWRhcHRlciA6IHB1YmxpYyBDQ1Ntb290
aGVkVGltZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRnJhbWVS
YXRlQ29udHJvbGxlclRpbWVyQWRhcHRlcj4gY3JlYXRlKENDRnJhbWVSYXRlQ29udHJvbGxlciog
ZnJhbWVSYXRlQ29udHJvbGxlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKGZyYW1lUmF0ZUNvbnRyb2xsZXIpKTsK
KyAgICB9CisgICAgdmlydHVhbCB+Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25UaW1lclRpY2soKSB7IG1fZnJhbWVSYXRlQ29udHJv
bGxlci0+b25UaW1lclRpY2soKTsgfQorcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ0ZyYW1lUmF0
ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXIoQ0NGcmFtZVJhdGVDb250cm9sbGVyKiBmcmFtZVJhdGVD
b250cm9sbGVyKQorICAgICAgICAgICAgOiBtX2ZyYW1lUmF0ZUNvbnRyb2xsZXIoZnJhbWVSYXRl
Q29udHJvbGxlcikgeyB9CisKKyAgICBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIqIG1fZnJhbWVSYXRl
Q29udHJvbGxlcjsKK307CisKK0NDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJhdGVDb250
cm9sbGVyKFBhc3NPd25QdHI8Q0NTbW9vdGhlZFRpbWVyPiB0aW1lcikKKyAgICAgICAgOiBtX2Ns
aWVudCgwKQorICAgICAgICAsIG1fdGltZXIodGltZXIpCit7CisgICAgbV90aW1lckNsaWVudEFk
YXB0ZXIgPSBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI6OmNyZWF0ZSh0aGlzKTsK
KyAgICBtX3RpbWVyLT5zZXRDbGllbnQobV90aW1lckNsaWVudEFkYXB0ZXIuZ2V0KCkpOworfQor
CitDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6On5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIoKQoreworfQor
Cit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6b25UaW1lclRpY2soKQoreworICAgIC8vIERv
bid0IGZvcndhcmQgdGhlIHRpY2sgaWYgd2UgYXJlIHRocm90dGxlZC4KKyAgICBpZiAobV9wZW5k
aW5nRnJhbWVCZWdpblRpbWVzLnNpemUoKSA+PSBrTWF4RnJhbWVzUGVuZGluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+b25WU3luY1Rp
Y2soKTsKK30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEJlZ2luRnJhbWUoKQor
eworICAgIG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy5hcHBlbmQobV90aW1lci0+bW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCkpOworfQorCit2b2lkIENDRnJhbWVSYXRlQ29udHJvbGxlcjo6
ZGlkRmluaXNoRnJhbWUoKQoreworICAgIG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy50YWtlRmly
c3QoKTsKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhlIHRoZSBkZWx0YSBiZXR3
ZWVuIG5vdyBhbmQgZnJhbWVCZWdpblRpbWUuCisgICAgLy8gIEUuZy4KKyAgICAvLyAgICBkb3Vi
bGUgZmluaXNoZWRGcmFtZUJlZ2luVGltZSA9IG1fcGVuZGluZ0ZyYW1lQmVnaW5UaW1lcy50YWtl
Rmlyc3QoKTsKKyAgICAvLyAgICBkb3VibGUgZWxhcHNlZEZyYW1lVGltZSA9IG5vdyAtIGZpbmlz
aGVkRnJhbWVCZWdpblRpbWU7CisgICAgLy8gICAgZG91YmxlIHdlaWdodGVkZnJhbWVSYXRlID0g
d2VpZ2h0ZWRfYmxlbmQod2VpZ2h0ZWRmcmFtZVJhdGUsZWxhcHNlZEZyYW1lVGltZSk7CisgICAg
Ly8KKyAgICAvLyBUaGVuLCB1c2Ugd2VpZ2h0ZWQgdGltZSB0byBkZWNpZGUgYmV0d2VlbjoKKyAg
ICAvLyAgIC0gZGlzcGxheSByYXRlCisgICAgLy8gICAtIDEvMiBkaXNwbGF5IHJhdGUKKyAgICAv
LyAgIC0gaGVhdmlseS13ZWlnaHRlZCBmcmFtZSB0aW1lCit9CisKK3ZvaWQgQ0NGcmFtZVJhdGVD
b250cm9sbGVyOjpkaWRBYm9ydEFsbFBlbmRpbmdGcmFtZXMoKQoreworICAgIG1fcGVuZGluZ0Zy
YW1lQmVnaW5UaW1lcy5jbGVhcigpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRnJhbWVSYXRl
Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NGE1MGE4MTdjZTBhYmVkM2RkM2UzMWRhMWZjNzIx
Y2MyNjZiODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDRnJhbWVSYXRlQ29udHJvbGxlcl9oCisjZGVmaW5l
IENDRnJhbWVSYXRlQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJjYy9DQ1Ntb290aGVkVGltZXIu
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBvblZTeW5jVGljaygpID0gMDsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfkNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCgpIHsgfQorfTsK
KworY2xhc3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyVGltZXJBZGFwdGVyOworCitjbGFzcyBDQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IENDRnJhbWVSYXRlQ29u
dHJvbGxlcihQYXNzT3duUHRyPENDU21vb3RoZWRUaW1lcj4pOworICAgIH5DQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXIoKTsKKworICAgIHZvaWQgc2V0Q2xpZW50KENDRnJhbWVSYXRlQ29udHJvbGxlckNs
aWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICB2b2lkIHNldEFjdGl2
ZShib29sIGFjdGl2ZSkgeyBtX3RpbWVyLT5zZXRBY3RpdmUoYWN0aXZlKTsgfQorCisgICAgLy8g
VXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBhZGp1c3QgdGFyZ2V0IGZyYW1lIHJhdGUuCisg
ICAgLy8KKyAgICAvLyBNdWx0aXBsZSBmcmFtZXMgY2FuIGJlIGluLXByb2dyZXNzLCBidXQgZm9y
IGV2ZXJ5IGRpZEJlZ2luRnJhbWUsIGEKKyAgICAvLyBkaWRGaW5pc2hGcmFtZSBzaG91bGQgYmUg
cG9zdGVkLgorICAgIC8vCisgICAgLy8gSWYgdGhlIHJlbmRlcmluZyBwaXBlbGluZSBjcmFzaGVz
LCBjYWxsIGRpZEFib3J0QWxsUGVuZGluZ0ZyYW1lcy4KKyAgICB2b2lkIGRpZEJlZ2luRnJhbWUo
KTsKKyAgICB2b2lkIGRpZEZpbmlzaEZyYW1lKCk7CisgICAgdm9pZCBkaWRBYm9ydEFsbFBlbmRp
bmdGcmFtZXMoKTsKKworICAgIGVudW0geworICAgICAgICBrTWF4RnJhbWVzUGVuZGluZyA9IDIK
KyAgICB9OworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIENDRnJhbWVSYXRlQ29udHJv
bGxlclRpbWVyQWRhcHRlcjsKKyAgICB2b2lkIG9uVGltZXJUaWNrKCk7CisKKyAgICBDQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXJDbGllbnQqIG1fY2xpZW50OworICAgIERlcXVlPGRvdWJsZT4gbV9wZW5k
aW5nRnJhbWVCZWdpblRpbWVzOworICAgIE93blB0cjxDQ1Ntb290aGVkVGltZXIqPiBtX3RpbWVy
OworICAgIE93blB0cjxDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lckFkYXB0ZXI+IG1fdGltZXJD
bGllbnRBZGFwdGVyOworfTsKKworfQorI2VuZGlmIC8vIENDRnJhbWVSYXRlQ29udHJvbGxlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Ntb290aGVkVGltZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTdlODFiYzgwNjJj
YTlkYjNlZWYzN2JmNDhhM2FlNTdlZWI2OWU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTbW9vdGhlZFRpbWVyLmNwcApA
QCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJjYy9DQ1Ntb290aGVkVGltZXIuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgi
CisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBDQ1Ntb290aGVkVGltZXI6OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKK3sKKyAgICBpZiAo
IWFjdGl2ZSkgeworICAgICAgICBtX3N0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBCZWNvbWluZyBhY3RpdmUgaXMgZGVmZXJyZWQ6IHdlIHBv
c3QgYSAwLWRlbGF5IHRhc2suIFdoZW4gaXQgcnVucywgd2UgdXNlCisgICAgLy8gdGhhdCB0byBl
c3RhYmxpc2ggdGhlIHRpbWViYXNlLCBiZWNvbWUgdHJ1bHkgYWN0aXZlLCBhbmQgZmlyZSB0aGUg
Zmlyc3QKKyAgICAvLyB0aWNrLgorICAgIGlmIChtX3N0YXRlID09IFNUQVRFX1NUQVJUSU5HIHx8
IG1fc3RhdGUgPT0gU1RBVEVfQUNUSVZFKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRl
ID0gU1RBVEVfU1RBUlRJTkc7CisgICAgcG9zdFRpY2tUYXNrKDApOworfQorCit2b2lkIENDU21v
b3RoZWRUaW1lcjo6cG9zdFRpY2tUYXNrKGxvbmcgbG9uZyBkZWxheSkKK3sKKyAgICBtX3RocmVh
ZC0+cG9zdERlbGF5ZWRUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NTbW9vdGhlZFRp
bWVyOjpvblRpY2spLCBkZWxheSk7Cit9CisKK3ZvaWQgQ0NTbW9vdGhlZFRpbWVyOjpvblRpY2so
KQoreworICAgIGRvdWJsZSBub3cgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKwor
ICAgIGlmIChtX3N0YXRlID09IFNUQVRFX0lOQUNUSVZFKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9zdGF0ZSA9PSBTVEFURV9TVEFSVElORykgeworICAgICAgICBtX25leHRUaWNrVGlt
ZSA9IG5vdzsKKyAgICAgICAgbV9zdGF0ZSA9IFNUQVRFX0FDVElWRTsKKyAgICB9CisKKyAgICBj
b25zdCBkb3VibGUgbWF4TGF0ZUJlZm9yZURyb3BwaW5nRnJhbWUgPSAyLjU7CisKKyAgICBkb3Vi
bGUgbmV3TmV4dFRpY2tUaW1lID0gMDsKKyAgICBkb3VibGUgYW1vdW50TGF0ZSA9IG5vdyAtIG1f
bmV4dFRpY2tUaW1lOworICAgIGlmIChhbW91bnRMYXRlID49IC0xLjAgJiYgYW1vdW50TGF0ZSA8
PSBtYXhMYXRlQmVmb3JlRHJvcHBpbmdGcmFtZSkgeworICAgICAgICAvLyBUaW1lciB3YXMgKG1v
c3RseSkgb24gdGltZS4gV2UgcGVuYWxpemUgdG8gLTEuMCBmaXhlZCBvbiB0aGUgZWFybHkgc2lk
ZSBiZWNhdXNlCisgICAgICAgIC8vIHRoZSBkZWxheSBzeXN0ZW0gdGFrZXMgdGhlIGZsb29yIG9m
IGFueSBkZWxheSB3ZSBnaXZlIGl0LiBUaGUgbGF0ZS1zaWRlIGRlbGF5CisgICAgICAgIC8vIGlz
IG91ciB0b2xlcmFuY2UgZmFjdG9yIGZvciAicmVhc29uYWJsZSIgZGVsYXlzIGR1ZSB0byB0aGUg
dGhyZWFkIGJlaW5nIGJ1c3kuCisgICAgICAgIG5ld05leHRUaWNrVGltZSA9IG1fbmV4dFRpY2tU
aW1lICsgbV9pbnRlcnZhbE1zOworICAgIH0gZWxzZSBpZiAoYW1vdW50TGF0ZSA+IG1heExhdGVC
ZWZvcmVEcm9wcGluZ0ZyYW1lKSB7CisgICAgICAgIC8vIFRpbWVyIGNhbWUgYmFjayBsYXRlLiBS
ZXNldCB0aGUgdGltZWJhc2UuCisgICAgICAgIG5ld05leHRUaWNrVGltZSA9IG5vdyArIG1faW50
ZXJ2YWxNczsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaW1lciBjYW1lIGJhY2sgaW1wb3Nz
aWJseSBlYXJseS4gU2FuaXR5IGNoZWNrIG9ubHkuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIC8vIFBvc3QgYW5vdGhlciB0YXNrICpiZWZvcmUqIHRoZSB0aWNr
IGFuZCB1cGRhdGUgc3RhdGUKKyAgICBBU1NFUlQobmV3TmV4dFRpY2tUaW1lID4gbm93KTsKKyAg
ICBwb3N0VGlja1Rhc2soc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihuZXdOZXh0VGlja1RpbWUgLSBu
b3cpKTsKKyAgICBtX25leHRUaWNrVGltZSA9IG5ld05leHRUaWNrVGltZTsKKworICAgIC8vIEZp
cmUgdGhlIHRpY2sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5vblRpbWVy
VGljaygpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVkVGltZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU21vb3RoZWRUaW1lci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZm
NmY5OTY2OWI4Y2E2MTllMjYyMTJiYjMxMDEwMWE2YmEwYjQyMGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ntb290aGVk
VGltZXIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU21vb3Ro
ZWRUaW1lcl9oCisjZGVmaW5lIENDU21vb3RoZWRUaW1lcl9oCisKKyNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1RocmVhZDsKKwor
Y2xhc3MgQ0NTbW9vdGhlZFRpbWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQg
b25UaW1lclRpY2soKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5DQ1Ntb290aGVk
VGltZXJDbGllbnQoKSB7IH0KK307CisKKy8vIFRoaXMgdGltZXIgaW1wbGVtZW50cyBhIHRpbWUg
c291cmNlIHRoYXQgYWNoaWV2ZXMgdGhlIHNwZWNpZmllZCBpbnRlcnZhbAorLy8gaW4gZmFjZSBv
ZiBtaWxsaXNlY29uZC1wcmVjaXNpb24gZGVsYXllZCBjYWxsYmFja3MgYW5kIHJhbmRvbSBxdWV1
ZWluZyBkZWxheXMuCisvLworLy8gTk9URTogRGVsZXRpbmcgQ0NTbW9vdGhlZFRpbWVyIHdoZW4g
YSB0aWNrIGlzIHBlbmRpbmcgd2lsbCBsZWFkIHRvIGEgY3Jhc2guCisvLyAgICAgIFRvIGZpeCB0
aGlzLCB3ZSBuZWVkIHRvIGdlbmVyYWxpemUgQ0NTY29wZWRNYWluVGhyZWFkUHJveHkuCitjbGFz
cyBDQ1Ntb290aGVkVGltZXIgeworcHVibGljOgorICAgIENDU21vb3RoZWRUaW1lcihkb3VibGUg
aW50ZXJ2YWxNcywgQ0NUaHJlYWQqIHRocmVhZCkKKyAgICAgICAgICAgIDogbV9jbGllbnQoMCkK
KyAgICAgICAgICAgICwgbV9pbnRlcnZhbE1zKGludGVydmFsTXMpCisgICAgICAgICAgICAsIG1f
bmV4dFRpY2tUaW1lKDApCisgICAgICAgICAgICAsIG1fc3RhdGUoU1RBVEVfSU5BQ1RJVkUpCisg
ICAgICAgICAgICAsIG1fdGhyZWFkKHRocmVhZCkgeyB9CisgICAgdmlydHVhbCB+Q0NTbW9vdGhl
ZFRpbWVyKCkgeyB9CisKKyAgICB2b2lkIHNldENsaWVudChDQ1Ntb290aGVkVGltZXJDbGllbnQq
IGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorCisgICAgdm9pZCBzZXRBY3RpdmUoYm9v
bCk7CisKKyAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0aW5nLgorICAgIHZpcnR1YWwgZG91YmxlIG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6bW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgb25UaWNrKCk7
CisgICAgdm9pZCBwb3N0VGlja1Rhc2sobG9uZyBsb25nIGRlbGF5KTsKKworICAgIGVudW0gU3Rh
dGUgeworICAgICAgICBTVEFURV9JTkFDVElWRSwKKyAgICAgICAgU1RBVEVfU1RBUlRJTkcsCisg
ICAgICAgIFNUQVRFX0FDVElWRSwKKyAgICB9OworICAgIENDU21vb3RoZWRUaW1lckNsaWVudCog
bV9jbGllbnQ7CisgICAgZG91YmxlIG1faW50ZXJ2YWxNczsKKyAgICBkb3VibGUgbV9uZXh0VGlj
a1RpbWU7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBDQ1RocmVhZCogbV90aHJlYWQ7Cit9Owor
Cit9CisjZW5kaWYgLy8gQ0NTbW9vdGhlZFRpbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCmluZGV4IDFhMTExZDFjNDA1ZTMzOWUxY2RmMDhjZDg5MDhhZTJiNzI0NzA3ZWMuLmQ3YjBi
ZGRmZGM0OGQ3NGVkNzI5YTdlZTVjYzU1N2E2OTljNGUzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQpAQCAtNTQsMTEgKzU0LDE0IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3Rf
ZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAg
ICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAg
J3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKKyAgICAgICAgICAg
ICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NT
bW9vdGhlZFRpbWVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ZmIzMjI3MWI2NTMwZTg2OWZjNGUxMmVkNmY4MGNhMmUzN2VhYmE0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRy
b2xsZXJUZXN0LmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgiCisKKyNp
bmNsdWRlICJDQ1NjaGVkdWxlclRlc3RDb21tb24uaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEZha2VDQ0Zy
YW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250
cm9sbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xp
ZW50KCkgeyByZXNldCgpOyB9CisKKyAgICB2b2lkIHJlc2V0KCkgeyBtX3RpY2tDYWxsZWQgPSBm
YWxzZTsgfQorICAgIGJvb2wgdGlja0NhbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGlja0NhbGxl
ZDsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uVlN5bmNUaWNrKCkgeyBtX3RpY2tDYWxsZWQgPSB0
cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIG1fdGlja0NhbGxlZDsKK307CisKKworVEVT
VChDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LCBUZXN0RnJhbWVUaHJvdHRsaW5nX0ltbWVkaWF0
ZUFjaykKK3sKKyAgICBGYWtlQ0NUaHJlYWQgdGhyZWFkOworICAgIEZha2VDQ0ZyYW1lUmF0ZUNv
bnRyb2xsZXJDbGllbnQgY2xpZW50OworICAgIEZha2VDQ1Ntb290aGVkVGltZXIqIHRpbWVyID0g
bmV3IEZha2VDQ1Ntb290aGVkVGltZXIoMTAwMC4wIC8gNjAuMCwgJnRocmVhZCk7CisgICAgQ0NG
cmFtZVJhdGVDb250cm9sbGVyIGNvbnRyb2xsZXIoYWRvcHRQdHIodGltZXIpKTsKKworICAgIGNv
bnRyb2xsZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAgIGNvbnRyb2xsZXIuc2V0QWN0aXZlKHRy
dWUpOworCisgICAgZG91YmxlIGVsYXBzZWQgPSAwOyAvLyBNdWNrIGFyb3VuZCB3aXRoIHRpbWUg
YSBiaXQKKworICAgIC8vIFRyaWdnZXIgb25lIGZyYW1lLCBtYWtlIHN1cmUgdGhlIHZzeW5jIGNh
bGxiYWNrIGlzIGNhbGxlZAorICAgIGVsYXBzZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOwor
ICAgIHRpbWVyLT5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoZWxhcHNlZCk7CisgICAg
dGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxs
ZWQoKSk7CisgICAgY2xpZW50LnJlc2V0KCk7CisKKyAgICAvLyBUZWxsIHRoZSBjb250cm9sbGVy
IHdlIGRyZXcKKyAgICBjb250cm9sbGVyLmRpZEJlZ2luRnJhbWUoKTsKKworICAgIC8vIFRlbGwg
dGhlIGNvbnRyb2xsZXIgdGhlIGZyYW1lIGVuZGVkIDVtcyBsYXRlcgorICAgIHRpbWVyLT5zZXRN
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUodGltZXItPm1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpICsgNSk7CisgICAgY29udHJvbGxlci5kaWRGaW5pc2hGcmFtZSgpOworCisgICAgLy8g
VHJpZ2dlciBhbm90aGVyIGZyYW1lLCBtYWtlIHN1cmUgdnN5bmMgcnVucyBhZ2FpbgorICAgIGVs
YXBzZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIEVYUEVDVF9UUlVFKGVsYXBzZWQg
Pj0gdGltZXItPm1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsgLy8gU2FuaXR5IGNoZWNr
IHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3QgbW92ZSB0aW1lIGJhY2t3YXJkLgorICAgIHRpbWVy
LT5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1
blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9
CisKK1RFU1QoQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdCwgVGVzdEZyYW1lVGhyb3R0bGluZ19U
d29GcmFtZXNJbkZsaWdodCkKK3sKKyAgICAvLyBUaGlzIHRlc3Qgb25seSB3b3JrcyBmb3IgdGhl
IGNhc2Ugb2Yga01heEZyYW1lc1BlbmRpbmcgPSAyCisgICAgQVNTRVJUX0VRKDIsIENDRnJhbWVS
YXRlQ29udHJvbGxlcjo6a01heEZyYW1lc1BlbmRpbmcpOworCisgICAgRmFrZUNDVGhyZWFkIHRo
cmVhZDsKKyAgICBGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50IGNsaWVudDsKKyAgICBG
YWtlQ0NTbW9vdGhlZFRpbWVyKiB0aW1lciA9IG5ldyBGYWtlQ0NTbW9vdGhlZFRpbWVyKDEwMDAu
MCAvIDYwLjAsICZ0aHJlYWQpOworICAgIENDRnJhbWVSYXRlQ29udHJvbGxlciBjb250cm9sbGVy
KGFkb3B0UHRyKHRpbWVyKSk7CisKKyAgICBjb250cm9sbGVyLnNldENsaWVudCgmY2xpZW50KTsK
KyAgICBjb250cm9sbGVyLnNldEFjdGl2ZSh0cnVlKTsKKworICAgIGRvdWJsZSBlbGFwc2VkID0g
MDsgLy8gTXVjayBhcm91bmQgd2l0aCB0aW1lIGEgYml0CisKKyAgICAvLyBUcmlnZ2VyIG9uZSBm
cmFtZSwgbWFrZSBzdXJlIHRoZSB2c3luYyBjYWxsYmFjayBpcyBjYWxsZWQKKyAgICBlbGFwc2Vk
ICs9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAgICB0aW1lci0+c2V0TW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAg
IEVYUEVDVF9UUlVFKGNsaWVudC50aWNrQ2FsbGVkKCkpOworICAgIGNsaWVudC5yZXNldCgpOwor
CisgICAgLy8gVGVsbCB0aGUgY29udHJvbGxlciB3ZSBkcmV3CisgICAgY29udHJvbGxlci5kaWRC
ZWdpbkZyYW1lKCk7CisKKyAgICAvLyBUcmlnZ2VyIGFub3RoZXIgZnJhbWUsIG1ha2Ugc3VyZSB2
c3luYyBjYWxsYmFjayBydW5zIGFnYWluCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0Rl
bGF5KCk7CisgICAgRVhQRUNUX1RSVUUoZWxhcHNlZCA+PSB0aW1lci0+bW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCkpOyAvLyBTYW5pdHkgY2hlY2sgdGhhdCBwcmV2aW91cyBjb2RlIGRpZG4n
dCBtb3ZlIHRpbWUgYmFja3dhcmQuCisgICAgdGltZXItPnNldE1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZShlbGFwc2VkKTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBF
Q1RfVFJVRShjbGllbnQudGlja0NhbGxlZCgpKTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAg
IC8vIFRlbGwgdGhlIGNvbnRyb2xsZXIgd2UgZHJldywgYWdhaW4uCisgICAgY29udHJvbGxlci5k
aWRCZWdpbkZyYW1lKCk7CisKKyAgICAvLyBUcmlnZ2VyIGFub3RoZXIgZnJhbWUuIFNpbmNlIHR3
byBmcmFtZXMgYXJlIHBlbmRpbmcsIHdlIHNob3VsZCBub3QgZHJhdy4KKyAgICBlbGFwc2VkICs9
IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVy
LT5tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHBy
ZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAgICB0aW1lci0+c2V0TW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5n
VGFzaygpOworICAgIEVYUEVDVF9GQUxTRShjbGllbnQudGlja0NhbGxlZCgpKTsKKworICAgIC8v
IFRlbGwgdGhlIGNvbnRyb2xsZXIgdGhlIGZpcnN0IGZyYW1lIGVuZGVkIDVtcyBsYXRlcgorICAg
IHRpbWVyLT5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUodGltZXItPm1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpICsgNSk7CisgICAgY29udHJvbGxlci5kaWRGaW5pc2hGcmFtZSgp
OworCisgICAgLy8gVGljayBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQKKyAgICBFWFBFQ1Rf
RkFMU0UoY2xpZW50LnRpY2tDYWxsZWQoKSk7CisKKyAgICAvLyBUcmlnZ2VyIHlldCBhbm90aGVy
IGZyYW1lLiBTaW5jZSBvbmUgZnJhbWVzIGlzIHBlbmRpbmcsIGFub3RoZXIgdnN5bmMgY2FsbGJh
Y2sgc2hvdWxkIHJ1bi4KKyAgICBlbGFwc2VkICs9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAg
ICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRpbWVyLT5tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHByZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGlt
ZSBiYWNrd2FyZC4KKyAgICB0aW1lci0+c2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKGVs
YXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9UUlVFKGNs
aWVudC50aWNrQ2FsbGVkKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBmMmUyNDI1ZGQ0NmQzMjQ0
NDkyNDVhZTNiMjFlM2QzMDk0YTBhN2M2Li5jMWIyYTlhYzdkY2JmYjQ3NTA4MGMxNjQxZjQ5Mzdl
MThhN2JjYWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTI5Nyw3ICsyOTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIHJ1blRlc3QoYm9vbCB0aHJlYWRlZCkKICAgICB7CiAgICAgICAgIG1fc2V0
dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9IHRocmVhZGVkOwotICAgICAgICB3ZWJraXRf
c3VwcG9ydDo6UG9zdERlbGF5ZWRUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3Q6Om9uQmVnaW5UZXN0
LCBzdGF0aWNfY2FzdDx2b2lkKj4odGhpcyksIDApOworICAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlBvc3REZWxheWVkVGFzayhDQ0xheWVyVHJlZUhvc3RUZXN0OjpvbkJlZ2luVGVzdCwgc3RhdGlj
X2Nhc3Q8dm9pZCo+KHRoaXMpLCAwKTsKICAgICAgICAgbV90aW1lb3V0VGFzayA9IG5ldyBUaW1l
b3V0VGFzayh0aGlzKTsKICAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayht
X3RpbWVvdXRUYXNrLCA1MDAwKTsgLy8gd2Via2l0X3N1cHBvcnQgdGFrZXMgb3duZXJzaGlwIG9m
IHRoZSB0YXNrCiAgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOwpAQCAt
NzUzLDQgKzc1MywzIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVS
ZWRyYXcsIHJ1bk11bHRpVGhyZWFkKQogfQogCiB9IC8vIG5hbWVzcGFjZQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZTU1MjJhNWI2M2U5YjZmZWMyNjA1YjMxZjZlM2Q4Nzc5OWEyZmRhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NjaGVkdWxlclRlc3RD
b21tb24uaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1NjaGVk
dWxlclRlc3RDb21tb25faAorI2RlZmluZSBDQ1NjaGVkdWxlclRlc3RDb21tb25faAorCisjaW5j
bHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworY2xhc3Mg
RmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDQ1Ntb290aGVkVGlt
ZXJDbGllbnQgeworcHVibGljOgorICAgIEZha2VDQ1Ntb290aGVkVGltZXJDbGllbnQoKSB7IHJl
c2V0KCk7IH0KKyAgICB2b2lkIHJlc2V0KCkgeyBtX3RpY2tDYWxsZWQgPSBmYWxzZTsgfQorICAg
IGJvb2wgdGlja0NhbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGlja0NhbGxlZDsgfQorCisgICAg
dmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgeyBtX3RpY2tDYWxsZWQgPSB0cnVlOyB9CisKK3By
b3RlY3RlZDoKKyAgICBib29sIG1fdGlja0NhbGxlZDsKK307CisKK2NsYXNzIEZha2VDQ1RocmVh
ZCA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RocmVhZCB7CitwdWJsaWM6CisgICAgRmFrZUNDVGhyZWFk
KCkgeyByZXNldCgpOyB9CisgICAgdm9pZCByZXNldCgpCisgICAgeworICAgICAgICBtX3BlbmRp
bmdUYXNrRGVsYXkgPSAwOworICAgICAgICBtX3BlbmRpbmdUYXNrLmNsZWFyKCk7CisgICAgfQor
CisgICAgYm9vbCBoYXNQZW5kaW5nVGFzaygpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1Rhc2s7
IH0KKyAgICB2b2lkIHJ1blBlbmRpbmdUYXNrKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Bl
bmRpbmdUYXNrKTsKKyAgICAgICAgT3duUHRyPFRhc2s+IHRhc2sgPSBtX3BlbmRpbmdUYXNrLnJl
bGVhc2UoKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKKyAgICB9CisKKyAgICBsb25n
IGxvbmcgcGVuZGluZ0RlbGF5KCkgY29uc3QKKyAgICB7CisgICAgICAgIEVYUEVDVF9UUlVFKGhh
c1BlbmRpbmdUYXNrKCkpOworICAgICAgICByZXR1cm4gbV9wZW5kaW5nVGFza0RlbGF5OworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3REZWxheWVkVGFzayhQYXNz
T3duUHRyPFRhc2s+IHRhc2ssIGxvbmcgbG9uZyBkZWxheSkKKyAgICB7CisgICAgICAgIEVYUEVD
VF9UUlVFKCFoYXNQZW5kaW5nVGFzaygpKTsKKyAgICAgICAgbV9wZW5kaW5nVGFzayA9IHRhc2s7
CisgICAgICAgIG1fcGVuZGluZ1Rhc2tEZWxheSA9IGRlbGF5OworICAgIH0KKyAgICB2aXJ0dWFs
IFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiAwOyB9CisKK3Byb3RlY3RlZDoKKyAgICBPd25QdHI8VGFzaz4gbV9wZW5k
aW5nVGFzazsKKyAgICBsb25nIGxvbmcgbV9wZW5kaW5nVGFza0RlbGF5OworfTsKKworY2xhc3Mg
RmFrZUNDU21vb3RoZWRUaW1lciA6IHB1YmxpYyBXZWJDb3JlOjpDQ1Ntb290aGVkVGltZXIgewor
cHVibGljOgorICAgIEZha2VDQ1Ntb290aGVkVGltZXIoZG91YmxlIGksIFdlYkNvcmU6OkNDVGhy
ZWFkKiB0KQorICAgICAgICA6IENDU21vb3RoZWRUaW1lcihpLCB0KQorICAgICAgICAsIG1fbW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKDApIHsgfQorCisgICAgdm9pZCBzZXRNb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoZG91YmxlIHRpbWUpIHsgbV9tb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUgPSB0aW1lOyB9CisgICAgdmlydHVhbCBkb3VibGUgbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWU7IH0K
KworcHJvdGVjdGVkOgorICAgIGRvdWJsZSBtX21vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZTsK
K307CisKK30KKworI2VuZGlmIC8vIENDU2NoZWR1bGVyVGVzdENvbW1vbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU21vb3RoZWRUaW1lclRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Ntb290aGVkVGltZXJUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMWUzZmQyOWI0MmM4ZjQ0ZDBlYzcwZGZlODI0ZjE1NWI4ZTYxNmQ4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Ntb290aGVkVGltZXJU
ZXN0LmNwcApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTbW9vdGhlZFRpbWVyLmgiCisKKyNpbmNsdWRlICJDQ1Nj
aGVkdWxlclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
VGVzdHM7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoQ0NTbW9vdGhlZFRpbWVyVGVzdCwgVGFza1Bv
c3RlZEFuZFRpY2tDYWxsZWQpCit7CisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtl
Q0NTbW9vdGhlZFRpbWVyQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NTbW9vdGhlZFRpbWVyIHRp
bWVyKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIHRpbWVyLnNldENsaWVudCgmY2xpZW50
KTsKKworICAgIHRpbWVyLnNldE1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgwKTsKKyAgICB0
aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisgICAgRVhQRUNUX1RSVUUodGhyZWFkLmhhc1BlbmRpbmdU
YXNrKCkpOworCisgICAgdGltZXIuc2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKDE2KTsK
KyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQudGlj
a0NhbGxlZCgpKTsKK30KKworVEVTVChDQ1Ntb290aGVkVGltZXIsIFRpY2tOb3RDYWxsZWRXaXRo
VGFza1Bvc3RlZCkKK3sKKyAgICBGYWtlQ0NUaHJlYWQgdGhyZWFkOworICAgIEZha2VDQ1Ntb290
aGVkVGltZXJDbGllbnQgY2xpZW50OworICAgIEZha2VDQ1Ntb290aGVkVGltZXIgdGltZXIoMTAw
MC4wIC8gNjAuMCwgJnRocmVhZCk7CisgICAgdGltZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAg
IHRpbWVyLnNldEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBFQ1RfVFJVRSh0aHJlYWQuaGFzUGVuZGlu
Z1Rhc2soKSk7CisgICAgdGltZXIuc2V0QWN0aXZlKGZhbHNlKTsKKyAgICB0aHJlYWQucnVuUGVu
ZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50LnRpY2tDYWxsZWQoKSk7Cit9CisK
K1RFU1QoQ0NTbW9vdGhlZFRpbWVyLCBTdGFydFR3aWNlRW5xdWV1ZXNPbmVUYXNrKQoreworICAg
IEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCBjbGll
bnQ7CisgICAgRmFrZUNDU21vb3RoZWRUaW1lciB0aW1lcigxMDAwLjAgLyA2MC4wLCAmdGhyZWFk
KTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVudCk7CisgICAgdGltZXIuc2V0QWN0aXZlKHRy
dWUpOworICAgIEVYUEVDVF9UUlVFKHRocmVhZC5oYXNQZW5kaW5nVGFzaygpKTsKKyAgICB0aHJl
YWQucmVzZXQoKTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRocmVhZC5oYXNQZW5kaW5nVGFzaygpKTsKK30KKworVEVTVChDQ1Ntb290aGVkVGltZXIsIFN0
YXJ0V2hlblJ1bm5pbmdEb2VzbnRUaWNrKQoreworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7Cisg
ICAgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3RoZWRU
aW1lciB0aW1lcigxMDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQo
JmNsaWVudCk7CisgICAgdGltZXIuc2V0QWN0aXZlKHRydWUpOworICAgIHRocmVhZC5ydW5QZW5k
aW5nVGFzaygpOworICAgIHRocmVhZC5yZXNldCgpOworICAgIHRpbWVyLnNldEFjdGl2ZSh0cnVl
KTsKKyAgICBFWFBFQ1RfRkFMU0UodGhyZWFkLmhhc1BlbmRpbmdUYXNrKCkpOworfQorCitURVNU
KENDU21vb3RoZWRUaW1lclRlc3QsIEFjaGlldmVzVGFyZ2V0UmF0ZVdpdGhOb05vaXNlKQorewor
ICAgIGludCBudW1JdGVyYXRpb25zID0gMTAwMDsKKworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7
CisgICAgRmFrZUNDU21vb3RoZWRUaW1lckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDU21vb3Ro
ZWRUaW1lciB0aW1lcigxMDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGll
bnQoJmNsaWVudCk7CisgICAgdGltZXIuc2V0QWN0aXZlKHRydWUpOworCisgICAgZG91YmxlIHRv
dGFsRnJhbWVUaW1lID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7
ICsraSkgeworICAgICAgICBsb25nIGxvbmcgZGVsYXkgPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7
CisKKyAgICAgICAgLy8gYWNjdW11bGF0ZSB0aGUgImRlbGF5IgorICAgICAgICB0b3RhbEZyYW1l
VGltZSArPSBkZWxheTsKKworICAgICAgICAvLyBSdW4gdGhlIGNhbGxiYWNrIGV4YWN0bHkgd2hl
biBhc2tlZAorICAgICAgICBkb3VibGUgbm93ID0gdGltZXIubW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCkgKyBkZWxheTsKKyAgICAgICAgdGltZXIuc2V0TW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKG5vdyk7CisgICAgICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIH0KKyAg
ICBkb3VibGUgYXZlcmFnZUludGVydmFsID0gdG90YWxGcmFtZVRpbWUgLyBzdGF0aWNfY2FzdDxk
b3VibGU+KG51bUl0ZXJhdGlvbnMpOworICAgIEVYUEVDVF9ORUFSKDEwMDAuMCAvIDYwLjAsIGF2
ZXJhZ2VJbnRlcnZhbCwgMC4xKTsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112621</attachid>
            <date>2011-10-26 17:01:48 -0700</date>
            <delta_ts>2011-10-26 23:10:55 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-70713-20111026170147.patch</filename>
            <type>text/plain</type>
            <size>39863</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1MjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MmMzMDJjZjAyYjExMTJk
MzYyYmZlNTM3ZTgxYTI1ZmFjZjdiOTlmLi5jYTUyMjNlOTY0NjFlYzNjMjI0OTVmZDI5OGM2NjYz
YjEwNWYxMmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMTAtMjYgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50
IGZyYW1lIHJhdGUgY29udHJvbCBwb3J0aW9ucyBvZiBDQ1NjaGVkdWxlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkK
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0RlbGF5QmFzZWRUaW1lU291cmNlOjpzZXRBY3RpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NEZWxheUJhc2VkVGltZVNvdXJjZTo6cG9zdFRpY2tUYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDRGVsYXlCYXNlZFRpbWVTb3VyY2U6Om9uVGljayk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJjZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDRGVsYXlCYXNlZFRpbWVTb3VyY2U6OkNDRGVsYXlCYXNlZFRp
bWVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWxheUJhc2VkVGltZVNvdXJjZTo6fkND
RGVsYXlCYXNlZFRpbWVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEZWxheUJhc2VkVGlt
ZVNvdXJjZTo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGVsYXlCYXNlZFRpbWVT
b3VyY2U6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lU291cmNlQWRhcHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVTb3Vy
Y2VBZGFwdGVyOjp+Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZVNvdXJjZUFkYXB0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyVGltZVNvdXJjZUFkYXB0ZXI6Om9u
VGltZXJUaWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlclRpbWVT
b3VyY2VBZGFwdGVyOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lU291cmNlQWRhcHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OkNDRnJhbWVSYXRlQ29udHJv
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6On5DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVy
OjpvblRpbWVyVGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6
OmRpZEJlZ2luRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVy
OjpkaWRGaW5pc2hGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXI6OmRpZEFib3J0QWxsUGVuZGluZ0ZyYW1lcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50Ojp+Q0NGcmFtZVJhdGVDb250cm9s
bGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6c2V0
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlcjo6c2V0QWN0
aXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWVTb3Vy
Y2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RpbWVTb3VyY2VDbGllbnQ6On5DQ1Rp
bWVTb3VyY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaW1lU291cmNlOjp+Q0NUaW1l
U291cmNlKToKKwogMjAxMS0xMC0yNiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDM1MDc3NT4gUkVHUkVTU0lPTiAocjk3MDMyKTog
U2xpZGVyIHRodW1iIGlzIG5vdCBkcmF3bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0
ZjhmMjBiMzkwNWIyMTk0ZWNhNGE4MDkyYzU5ZTdiYmQ0YmQ2ZDQwLi40MjFiOWNjYmZhYjRkMDFi
MDVlOTg5ODA1YTRhOGRkNGRjMWY1OTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM3IEBACisyMDExLTEwLTI2ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBmcmFtZSByYXRlIGNvbnRyb2wgcG9ydGlv
bnMgb2YgQ0NTY2hlZHVsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcwNzEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1l
U291cmNlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAg
ICAgICAqIHRlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpGYWtlQ0NG
cmFtZVJhdGVDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NG
cmFtZVJhdGVDb250cm9sbGVyQ2xpZW50OjpyZXNldCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6ZnJhbWVCZWd1bik6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudDo6YmVnaW5GcmFtZSk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RpbWVTb3VyY2VDbGllbnQ6OkZh
a2VDQ1RpbWVTb3VyY2VDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RpbWVT
b3VyY2VDbGllbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaW1lU291
cmNlQ2xpZW50Ojp0aWNrQ2FsbGVkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaW1l
U291cmNlQ2xpZW50OjpvblRpbWVyVGljayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUND
VGhyZWFkOjpGYWtlQ0NUaHJlYWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVh
ZDo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6aGFzUGVuZGlu
Z1Rhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6cnVuUGVuZGluZ1Rh
c2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RocmVhZDo6cGVuZGluZ0RlbGF5KToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnBvc3RUYXNrKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpGYWtlQ0NUaHJlYWQ6OnBvc3REZWxheWVkVGFzayk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUNDVGhyZWFkOjp0aHJlYWRJRCk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUNDRGVsYXlCYXNlZFRpbWVTb3VyY2U6OkZha2VDQ0RlbGF5QmFzZWRUaW1lU291cmNl
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NEZWxheUJhc2VkVGltZVNvdXJjZTo6c2V0
TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
Q0NEZWxheUJhc2VkVGltZVNvdXJjZTo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKToKKwog
MjAxMS0xMC0yNiAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAg
IEFkZCBjaHJvbWl1bSBicmlkZ2luZyBmb3IgQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCBhbmQg
c2V0Rm9ybWF0KCkgbWV0aG9kIHNvIHdlIGNhbiBrbm93IGF1ZGlvIHN0cmVhbSBmb3JtYXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCAzN2VhZWJmOTA3ODg3ZTIxMjg3MGU1NWNhMGNmMDJjOTU4OTQ4OWMw
Li5iODQ2ZjE4MGRkYjAwMjVjZWVhNWJkNzEwMjIzOWQ2ZTkyMDYyMTg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zNTMyLDYgKzM1MzIsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1l
U291cmNlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEZWxheUJhc2VkVGltZVNvdXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxh
eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NJbnB1dEhhbmRsZXIuaCcsCkBAIC0zNTcyLDYgKzM1NzYsNyBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bWVTb3VyY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEZWxheUJhc2VkVGltZVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU5MGZlNzZhYWYxNzZmZjI5
NjQyMDlkNTY3ODA4ZmI2YTg2YWY0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuY3Bw
CkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgiCisKKyNpbmNsdWRlICJjYy9D
Q1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgQ0NEZWxheUJhc2VkVGltZVNvdXJjZTo6c2V0QWN0aXZlKGJvb2wgYWN0
aXZlKQoreworICAgIGlmICghYWN0aXZlKSB7CisgICAgICAgIG1fc3RhdGUgPSBTVEFURV9JTkFD
VElWRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEJlY29taW5nIGFjdGl2ZSBp
cyBkZWZlcnJlZDogd2UgcG9zdCBhIDAtZGVsYXkgdGFzay4gV2hlbiBpdCBydW5zLCB3ZSB1c2UK
KyAgICAvLyB0aGF0IHRvIGVzdGFibGlzaCB0aGUgdGltZWJhc2UsIGJlY29tZSB0cnVseSBhY3Rp
dmUsIGFuZCBmaXJlIHRoZSBmaXJzdAorICAgIC8vIHRpY2suCisgICAgaWYgKG1fc3RhdGUgPT0g
U1RBVEVfU1RBUlRJTkcgfHwgbV9zdGF0ZSA9PSBTVEFURV9BQ1RJVkUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3RhdGUgPSBTVEFURV9TVEFSVElORzsKKyAgICBwb3N0VGlja1Rhc2soMCk7
Cit9CisKK3ZvaWQgQ0NEZWxheUJhc2VkVGltZVNvdXJjZTo6cG9zdFRpY2tUYXNrKGxvbmcgbG9u
ZyBkZWxheSkKK3sKKyAgICBtX3RocmVhZC0+cG9zdERlbGF5ZWRUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NEZWxheUJhc2VkVGltZVNvdXJjZTo6b25UaWNrKSwgZGVsYXkpOworfQor
CisvLyBUaGlzIGNvZGUgdHJpZXMgdG8gYWNoaWV2ZSBhbiBhdmVyYWdlIHRpY2sgcmF0ZSBhcyBj
bG9zZSB0byBtX2ludGVydmFsTXMgYXMgcG9zc2libGUuCisvLyBUbyBkbyB0aGlzLCBpdCBoYXMg
dG8gZGVhbCB3aXRoIGEgZmV3IGJhc2ljIGlzc3VlczoKKy8vICAgMS4gcG9zdERlbGF5ZWRUYXNr
IGNhbiBkZWxheSBvbmx5IGF0IGEgbWlsbGlzZWNvbmQgZ3JhbnVsYXJpdHkuIFNvLCAxNi42NjYg
aGFzIHRvCisvLyAgICAgIHBvc3RlZCBhcyAxNiBvciAxNy4KKy8vICAgMi4gQSBkZWxheWVkIHRh
c2sgbWF5IGNvbWUgYmFjayBhIGJpdCBsYXRlIChhIGZldyBtcyksIG9yIHJlYWxseSBsYXRlIChm
cmFtZXMgbGF0ZXIpCisvLworLy8gVGhlIGJhc2ljIGlkZWEgd2l0aCB0aGlzIHNjaGVkdWxlciBo
ZXJlIGlzIHRvIGtlZXAgdHJhY2sgb2Ygd2hlcmUgd2UgKndhbnQqIHRvIHJ1biBpbgorLy8gbV90
aWNrVGFyZ2V0LiBXZSB1cGRhdGUgdGhpcyB3aXRoIHRoZSBleGFjdCBpbnRlcnZhbC4KKy8vCisv
LyBUaGVuLCB3aGVuIHdlIHBvc3Qgb3VyIHRhc2ssIHdlIHRha2UgdGhlIGZsb29yIG9mIChtX3Rp
Y2tUYXJnZXQgYW5kIG5vdygpKS4gSWYgd2UKKy8vIHN0YXJ0ZWQgYXQgbm93PTAsIGFuZCA2MEZQ
czoKKy8vICAgICAgbm93PTAgICAgdGFyZ2V0PTE2LjY2NyAgIHBvc3REZWxheWVkVGFzaygxNikK
Ky8vCisvLyBXaGVuIG91ciBjYWxsYmFjayBydW5zLCB3ZSBmaWd1cmUgb3V0IGhvdyBmYXIgb2Zm
IHdlIHdlcmUgZnJvbSB0aGF0IGdvYWwuIEJlY2F1c2Ugb2YgdGhlIGZsb29yaW5nCisvLyBvcGVy
YXRpb24sIGFuZCBhc3N1bWluZyBvdXIgdGltZXIgcnVucyBleGFjdGx5IHdoZW4gaXQgc2hvdWxk
LCB0aGlzIHlpZWxkczoKKy8vICAgICAgbm93PTE2ICAgdGFyZ2V0PTE2LjY2NworLy8KKy8vIFNp
bmNlIHdlIGNhbid0IHBvc3QgYSAwLjY2NyBtcyB0YXNrIHRvIGdldCB0byBub3c9MTYsIHdlIGp1
c3QgdHJlYXQgdGhpcyBhcyBhIHRpY2suIFRoZW4sCisvLyB3ZSB1cGRhdGUgdGFyZ2V0IHRvIGJl
IDMzLjMzMy4gV2Ugbm93IHBvc3QgYW5vdGhlciB0YXNrIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNl
IGJldHdlZW4gb3VyIHRhcmdldAorLy8gYW5kIG5vdzoKKy8vICAgICAgbm93PTE2ICAgdGlja1Rh
cmdldD0xNi42NjcgIG5ld1RhcmdldD0zMy4zMzMgICAtLT4gcG9zdERlbGF5ZWRUYXNrKGZsb29y
KDMzLjMzMyAtIDE2KSkgLS0+IHBvc3REZWxheWVkVGFzaygxNykKKy8vCisvLyBPdmVyIHRpbWUs
IHdpdGggbm8gbGF0ZSB0YXNrcywgdGhpcyBsZWFkcyB0byB1cyBwb3N0aW5nIHRhc2tzIGxpa2Ug
dGhpczoKKy8vICAgICAgbm93PTAgICAgdGlja1RhcmdldD0wICAgICAgIG5ld1RhcmdldD0xNi42
NjcgICAtLT4gdGljaygpLCBwb3N0RGVsYXllZFRhc2soMTYpCisvLyAgICAgIG5vdz0xNiAgIHRp
Y2tUYXJnZXQ9MTYuNjY3ICBuZXdUYXJnZXQ9MzMuMzMzICAgLS0+IHRpY2soKSwgcG9zdERlbGF5
ZWRUYXNrKDE3KQorLy8gICAgICBub3c9MzMgICB0aWNrVGFyZ2V0PTMzLjMzMyAgbmV3VGFyZ2V0
PTUwLjAwMCAgIC0tPiB0aWNrKCksIHBvc3REZWxheWVkVGFzaygxNykKKy8vICAgICAgbm93PTUw
ICAgdGlja1RhcmdldD01MC4wMDAgIG5ld1RhcmdldD02Ni42NjcgICAtLT4gdGljaygpLCBwb3N0
RGVsYXllZFRhc2soMTYpCisvLworLy8gV2UgdHJlYXQgZGVsYXlzIGluIHRhc2tzIGRpZmZlcmVu
dGx5IGRlcGVuZGluZyBvbiB0aGUgYW1vdW50IG9mIGRlbGF5IHdlIGVuY291dGVyLiBTdXBwb3Nl
IHdlCisvLyBwb3N0ZWQgYSB0YXNrIHdpdGggYSB0YXJnZXQ9MTYuNjY3OgorLy8gICBDYXNlIDE6
IGxhdGUgYnV0IG5vdCB1bnJlY292ZXJhYmx5LXNvCisvLyAgICAgIG5vdz0xOCB0aWNrVGFyZ2V0
PTE2LjY2NworLy8KKy8vICAgQ2FzZSAyOiBzbyBsYXRlIHdlIG9idmlvdXNseSBtaXNzZWQgdGhl
IHRpY2sKKy8vICAgICAgbm93PTI1LjAgdGlja1RhcmdldD0xNi42NjcKKy8vCisvLyBXZSB0cmVh
dCB0aGUgZmlyc3QgY2FzZSBhcyBhIHRpY2sgYW55d2F5LCBhbmQgYXNzdW1lIHRoZSBkZWxheSB3
YXMKKy8vIHVudXN1YWwuIFRodXMsIHdlIGNvbXB1dGUgdGhlIG5ld1RhcmdldCBiYXNlZCBvbiB0
aGUgb2xkIHRpbWViYXNlOgorLy8gICAgICBub3c9MTggICB0aWNrVGFyZ2V0PTE2LjY2NyAgbmV3
VGFyZ2V0PTMzLjMzMyAgIC0tPiB0aWNrKCksIHBvc3REZWxheWVkVGFzayhmbG9vcigzMy4zMzMt
MTgpKSAtLT4gcG9zdERlbGF5ZWRUYXNrKDE1KQorLy8gVGhpcyBicmluZ3MgdXMgYmFjayB0byAx
OCsxNSA9IDMzLCB3aGljaCB3YXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBiZWVuIGlmIHRoZSB0YXNr
IGhhZG4ndCBiZWVuIGxhdGUuCisvLworLy8gRm9yIHRoZSByZWFsbHkgbGF0ZSBkZWxheSwgd2Ug
ZmlyZSBhIHRpY2sgaW1tZWRpYXRlbHkgcmVzZXQgdGhlIHRpbWViYXNlIGZyb20gdGhlIGN1cnJl
bnQgdGltLiBFLmcuOgorLy8gICAgICBub3c9MzcgICB0aWNrVGFyZ2V0PTE2LjY2NyAgbmV3VGFy
Z2V0PTUzLjY2NjcgICAtLT4gdGljaygpLCBwb3N0RGVsYXllZFRhc2soZmxvb3IoNTMuNjY3LTM3
KSkgLS0+IHBvc3REZWxheWVkVGFzaygxNikKKy8vCisvLyBIZXJlIHdlIHJlYWxpemUgd2UncmUg
bW9yZSB0aGFuIGEgdGljayBsYXRlLiBXZSBhZGp1c3QgbmV3VGFyZ2V0IHRvIGJlIDE2LjY2NyBm
cm9tIG5vdywgYW5kIHBvc3QgYSB0YXNrIG9mZiB0aGF0IG5ldworLy8gdGFyZ2V0Lgordm9pZCBD
Q0RlbGF5QmFzZWRUaW1lU291cmNlOjpvblRpY2soKQoreworICAgIGlmIChtX3N0YXRlID09IFNU
QVRFX0lOQUNUSVZFKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUgbm93ID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTVEFURV9TVEFS
VElORykgeworICAgICAgICBtX3RpY2tUYXJnZXQgPSBub3c7CisgICAgICAgIG1fc3RhdGUgPSBT
VEFURV9BQ1RJVkU7CisgICAgfQorCisgICAgY29uc3QgZG91YmxlIG1heExhdGVCZWZvcmVSZXNl
dHRpbmdUaW1lYmFzZSA9IDUuMDsKKworICAgIGRvdWJsZSBuZXdUaWNrVGFyZ2V0ID0gMDsKKyAg
ICBkb3VibGUgYW1vdW50TGF0ZSA9IG5vdyAtIG1fdGlja1RhcmdldDsKKyAgICBpZiAoYW1vdW50
TGF0ZSA8PSBtYXhMYXRlQmVmb3JlUmVzZXR0aW5nVGltZWJhc2UpCisgICAgICAgIG5ld1RpY2tU
YXJnZXQgPSBtX3RpY2tUYXJnZXQgKyBtX2ludGVydmFsTXM7CisgICAgZWxzZQorICAgICAgICBu
ZXdUaWNrVGFyZ2V0ID0gbm93ICsgbV9pbnRlcnZhbE1zOworCisgICAgLy8gUG9zdCBhbm90aGVy
IHRhc2sgKmJlZm9yZSogdGhlIHRpY2sgYW5kIHVwZGF0ZSBzdGF0ZQorICAgIEFTU0VSVChuZXdU
aWNrVGFyZ2V0ID4gbm93KTsKKyAgICBwb3N0VGlja1Rhc2soc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihuZXdUaWNrVGFyZ2V0IC0gbm93KSk7CisgICAgbV90aWNrVGFyZ2V0ID0gbmV3VGlja1Rhcmdl
dDsKKworICAgIC8vIEZpcmUgdGhlIHRpY2sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5vblRpbWVyVGljaygpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFz
ZWRUaW1lU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWFlNmM3YzM2YjRjZWMwZTRiNjVmOGJlNTNiMDFj
YWE0M2I2ZjA5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaApAQCAtMCwwICsxLDc1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDRGVsYXlCYXNlZFRpbWVTb3VyY2VfaAorI2Rl
ZmluZSBDQ0RlbGF5QmFzZWRUaW1lU291cmNlX2gKKworI2luY2x1ZGUgImNjL0NDVGltZVNvdXJj
ZS5oIgorCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0NUaHJlYWQ7CisKKy8vIFRoaXMgdGltZXIgaW1wbGVtZW50cyBhIHRpbWUg
c291cmNlIHRoYXQgYWNoaWV2ZXMgdGhlIHNwZWNpZmllZCBpbnRlcnZhbAorLy8gaW4gZmFjZSBv
ZiBtaWxsaXNlY29uZC1wcmVjaXNpb24gZGVsYXllZCBjYWxsYmFja3MgYW5kIHJhbmRvbSBxdWV1
ZWluZyBkZWxheXMuCisvLworLy8gTk9URTogRGVsZXRpbmcgQ0NEZWxheUJhc2VkVGltZVNvdXJj
ZSB3aGVuIGEgdGljayBpcyBwZW5kaW5nIHdpbGwgbGVhZCB0byBhIGNyYXNoLgorLy8gICAgICBU
byBmaXggdGhpcywgd2UgbmVlZCB0byBnZW5lcmFsaXplIENDU2NvcGVkTWFpblRocmVhZFByb3h5
LgorY2xhc3MgQ0NEZWxheUJhc2VkVGltZVNvdXJjZSA6IHB1YmxpYyBDQ1RpbWVTb3VyY2Ugewor
cHVibGljOgorICAgIENDRGVsYXlCYXNlZFRpbWVTb3VyY2UoZG91YmxlIGludGVydmFsTXMsIEND
VGhyZWFkKiB0aHJlYWQpCisgICAgICAgIDogbV9jbGllbnQoMCkKKyAgICAgICAgLCBtX2ludGVy
dmFsTXMoaW50ZXJ2YWxNcykKKyAgICAgICAgLCBtX3RpY2tUYXJnZXQoMCkKKyAgICAgICAgLCBt
X3N0YXRlKFNUQVRFX0lOQUNUSVZFKQorICAgICAgICAsIG1fdGhyZWFkKHRocmVhZCkgeyB9Cisg
ICAgdmlydHVhbCB+Q0NEZWxheUJhc2VkVGltZVNvdXJjZSgpIHsgfQorCisgICAgdmlydHVhbCB2
b2lkIHNldENsaWVudChDQ1RpbWVTb3VyY2VDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNs
aWVudDsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sKTsKKworICAgIC8vIFZp
cnR1YWwgZm9yIHRlc3RpbmcuCisgICAgdmlydHVhbCBkb3VibGUgbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCkgY29uc3QgeyByZXR1cm4gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBvblRpY2soKTsKKyAgICB2b2lkIHBvc3RU
aWNrVGFzayhsb25nIGxvbmcgZGVsYXkpOworCisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIFNU
QVRFX0lOQUNUSVZFLAorICAgICAgICBTVEFURV9TVEFSVElORywKKyAgICAgICAgU1RBVEVfQUNU
SVZFLAorICAgIH07CisgICAgQ0NUaW1lU291cmNlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBkb3Vi
bGUgbV9pbnRlcnZhbE1zOworICAgIGRvdWJsZSBtX3RpY2tUYXJnZXQ7CisgICAgU3RhdGUgbV9z
dGF0ZTsKKyAgICBDQ1RocmVhZCogbV90aHJlYWQ7Cit9OworCit9CisjZW5kaWYgLy8gQ0NEZWxh
eUJhc2VkVGltZVNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45N2JiMDVmZGY3NTM5ZjMwYmY4MjIxMzIyMWExMDc1ODQxZWUxZmY2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0
ZUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSAiY2Mv
Q0NUaHJlYWRUYXNrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NGcmFtZVJh
dGVDb250cm9sbGVyVGltZVNvdXJjZUFkYXB0ZXIgOiBwdWJsaWMgQ0NUaW1lU291cmNlQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJU
aW1lU291cmNlQWRhcHRlcj4gY3JlYXRlKENDRnJhbWVSYXRlQ29udHJvbGxlciogZnJhbWVSYXRl
Q29udHJvbGxlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NGcmFtZVJh
dGVDb250cm9sbGVyVGltZVNvdXJjZUFkYXB0ZXIoZnJhbWVSYXRlQ29udHJvbGxlcikpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lU291cmNlQWRhcHRlcigp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgeyBtX2ZyYW1lUmF0ZUNvbnRy
b2xsZXItPm9uVGltZXJUaWNrKCk7IH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NGcmFtZVJh
dGVDb250cm9sbGVyVGltZVNvdXJjZUFkYXB0ZXIoQ0NGcmFtZVJhdGVDb250cm9sbGVyKiBmcmFt
ZVJhdGVDb250cm9sbGVyKQorICAgICAgICAgICAgOiBtX2ZyYW1lUmF0ZUNvbnRyb2xsZXIoZnJh
bWVSYXRlQ29udHJvbGxlcikgeyB9CisKKyAgICBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIqIG1fZnJh
bWVSYXRlQ29udHJvbGxlcjsKK307CisKK0NDRnJhbWVSYXRlQ29udHJvbGxlcjo6Q0NGcmFtZVJh
dGVDb250cm9sbGVyKFBhc3NPd25QdHI8Q0NUaW1lU291cmNlPiB0aW1lcikKKyAgICA6IG1fY2xp
ZW50KDApCisgICAgLCBtX251bUZyYW1lc1BlbmRpbmcoMCkKKyAgICAsIG1fdGltZVNvdXJjZSh0
aW1lcikKK3sKKyAgICBtX3RpbWVTb3VyY2VDbGllbnRBZGFwdGVyID0gQ0NGcmFtZVJhdGVDb250
cm9sbGVyVGltZVNvdXJjZUFkYXB0ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3RpbWVTb3VyY2Ut
PnNldENsaWVudChtX3RpbWVTb3VyY2VDbGllbnRBZGFwdGVyLmdldCgpKTsKK30KKworQ0NGcmFt
ZVJhdGVDb250cm9sbGVyOjp+Q0NGcmFtZVJhdGVDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBD
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXI6Om9uVGltZXJUaWNrKCkKK3sKKyAgICAvLyBEb24ndCBmb3J3
YXJkIHRoZSB0aWNrIGlmIHdlIGhhdmUgdG9vIG1hbnkgZnJhbWVzIGluIGZsaWdodC4KKyAgICBp
ZiAobV9udW1GcmFtZXNQZW5kaW5nID49IGtNYXhGcmFtZXNQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5iZWdpbkZyYW1lKCk7
Cit9CisKK3ZvaWQgQ0NGcmFtZVJhdGVDb250cm9sbGVyOjpkaWRCZWdpbkZyYW1lKCkKK3sKKyAg
ICBtX251bUZyYW1lc1BlbmRpbmcrKzsKK30KKwordm9pZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6
OmRpZEZpbmlzaEZyYW1lKCkKK3sKKyAgICBtX251bUZyYW1lc1BlbmRpbmctLTsKK30KKwordm9p
ZCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmRpZEFib3J0QWxsUGVuZGluZ0ZyYW1lcygpCit7Cisg
ICAgbV9udW1GcmFtZXNQZW5kaW5nID0gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMjUyMDJhZWFmMjJiNzg0NDFhNTZlNjQ5ZTA5
MjE5MjYxYTM4OTgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgKQEAgLTAsMCArMSw4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJfaAorI2Rl
ZmluZSBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NUaW1lU291cmNl
LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5GcmFtZSgpID0gMDsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfkNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCgpIHsgfQorfTsK
KworY2xhc3MgQ0NGcmFtZVJhdGVDb250cm9sbGVyVGltZVNvdXJjZUFkYXB0ZXI7CisKK2NsYXNz
IENDRnJhbWVSYXRlQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NGcmFtZVJh
dGVDb250cm9sbGVyKFBhc3NPd25QdHI8Q0NUaW1lU291cmNlPik7CisgICAgfkNDRnJhbWVSYXRl
Q29udHJvbGxlcigpOworCisgICAgdm9pZCBzZXRDbGllbnQoQ0NGcmFtZVJhdGVDb250cm9sbGVy
Q2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKworICAgIHZvaWQgc2V0QWN0
aXZlKGJvb2wgYWN0aXZlKSB7IG1fdGltZVNvdXJjZS0+c2V0QWN0aXZlKGFjdGl2ZSk7IH0KKwor
ICAgIC8vIFVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgdG8gYWRqdXN0IHRhcmdldCBmcmFtZSBy
YXRlLgorICAgIC8vCisgICAgLy8gTXVsdGlwbGUgZnJhbWVzIGNhbiBiZSBpbi1wcm9ncmVzcywg
YnV0IGZvciBldmVyeSBkaWRCZWdpbkZyYW1lLCBhCisgICAgLy8gZGlkRmluaXNoRnJhbWUgc2hv
dWxkIGJlIHBvc3RlZC4KKyAgICAvLworICAgIC8vIElmIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUg
Y3Jhc2hlcywgY2FsbCBkaWRBYm9ydEFsbFBlbmRpbmdGcmFtZXMuCisgICAgdm9pZCBkaWRCZWdp
bkZyYW1lKCk7CisgICAgdm9pZCBkaWRGaW5pc2hGcmFtZSgpOworICAgIHZvaWQgZGlkQWJvcnRB
bGxQZW5kaW5nRnJhbWVzKCk7CisKKyAgICBlbnVtIHsKKyAgICAgICAga01heEZyYW1lc1BlbmRp
bmcgPSAyCisgICAgfTsKKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBDQ0ZyYW1lUmF0
ZUNvbnRyb2xsZXJUaW1lU291cmNlQWRhcHRlcjsKKyAgICB2b2lkIG9uVGltZXJUaWNrKCk7CisK
KyAgICBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQqIG1fY2xpZW50OworICAgIGludCBtX251
bUZyYW1lc1BlbmRpbmc7CisgICAgT3duUHRyPENDVGltZVNvdXJjZT4gbV90aW1lU291cmNlOwor
ICAgIE93blB0cjxDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUaW1lU291cmNlQWRhcHRlcj4gbV90aW1l
U291cmNlQ2xpZW50QWRhcHRlcjsKK307CisKK30KKyNlbmRpZiAvLyBDQ0ZyYW1lUmF0ZUNvbnRy
b2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaW1lU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbWVTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjMyNDhhNTQ4M2JjNjc3
NDg0MTQ5MjQwZTkzMWUzMDlmZTY1MmRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1lU291cmNlLmgKQEAgLTAsMCAr
MSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1RpbWVTb3VyY2VfaAorI2RlZmluZSBD
Q1RpbWVTb3VyY2VfaAorCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NUaHJlYWQ7CisKK2NsYXNzIENDVGltZVNvdXJjZUNsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG9uVGltZXJUaWNrKCkgPSAwOworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB+Q0NUaW1lU291cmNlQ2xpZW50KCkgeyB9Cit9OworCisvLyBB
biBnZW5lcmljIGludGVyZmFjZSBmb3IgZ2V0dGluZyBhIHJlbGlhYmx5LXRpY2tpbmcgdGltZXNv
dXJjZSBvZgorLy8gYSBzcGVjaWZpZWQgcmF0ZS4KK2NsYXNzIENDVGltZVNvdXJjZSB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+Q0NUaW1lU291cmNlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dENsaWVudChDQ1RpbWVTb3VyY2VDbGllbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFj
dGl2ZShib29sKSA9IDA7Cit9OworCit9CisjZW5kaWYgLy8gQ0NTbW9vdGhlZFRpbWVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGE0ODkxZmFiMTc5ZjAyYWZkNjRkZjFhMTBh
MDE2Mjc0MTQ2ZWNiNmIuLjM0ODEwMTZkYzIzM2YwOTQ2YjZjZjE5MDA5NDhmMDE4NWQ1NTc3NWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTQsMTEgKzU0LDE0IEBACiAgICAg
ICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVzdHMvQXJlbmFU
ZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVz
dC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5j
cHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NUaHJlYWRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRnJhbWVUZXN0SGVscGVycy5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RlbGF5QmFz
ZWRUaW1lU291cmNlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGVs
YXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTFjZmJmYTUwODM2OWEzOWJl
YjA0OWJmOTMyY2QzMjhjNTU2MmY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAKQEAgLTAsMCArMSwx
MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNj
L0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKKworI2luY2x1ZGUgIkNDU2NoZWR1bGVyVGVzdENv
bW1vbi5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFt
ZXNwYWNlIHsKKworVEVTVChDQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdCwgVGFza1Bvc3RlZEFu
ZFRpY2tDYWxsZWQpCit7CisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NUaW1l
U291cmNlQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NEZWxheUJhc2VkVGltZVNvdXJjZSB0aW1l
cigxMDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVudCk7
CisKKyAgICB0aW1lci5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoMCk7CisgICAgdGlt
ZXIuc2V0QWN0aXZlKHRydWUpOworICAgIEVYUEVDVF9UUlVFKHRocmVhZC5oYXNQZW5kaW5nVGFz
aygpKTsKKworICAgIHRpbWVyLnNldE1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgxNik7Cisg
ICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LnRpY2tD
YWxsZWQoKSk7Cit9CisKK1RFU1QoQ0NEZWxheUJhc2VkVGltZVNvdXJjZSwgVGlja05vdENhbGxl
ZFdpdGhUYXNrUG9zdGVkKQoreworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUND
VGltZVNvdXJjZUNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDRGVsYXlCYXNlZFRpbWVTb3VyY2Ug
dGltZXIoMTAwMC4wIC8gNjAuMCwgJnRocmVhZCk7CisgICAgdGltZXIuc2V0Q2xpZW50KCZjbGll
bnQpOworICAgIHRpbWVyLnNldEFjdGl2ZSh0cnVlKTsKKyAgICBFWFBFQ1RfVFJVRSh0aHJlYWQu
aGFzUGVuZGluZ1Rhc2soKSk7CisgICAgdGltZXIuc2V0QWN0aXZlKGZhbHNlKTsKKyAgICB0aHJl
YWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50LnRpY2tDYWxsZWQo
KSk7Cit9CisKK1RFU1QoQ0NEZWxheUJhc2VkVGltZVNvdXJjZSwgU3RhcnRUd2ljZUVucXVldWVz
T25lVGFzaykKK3sKKyAgICBGYWtlQ0NUaHJlYWQgdGhyZWFkOworICAgIEZha2VDQ1RpbWVTb3Vy
Y2VDbGllbnQgY2xpZW50OworICAgIEZha2VDQ0RlbGF5QmFzZWRUaW1lU291cmNlIHRpbWVyKDEw
MDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIHRpbWVyLnNldENsaWVudCgmY2xpZW50KTsKKyAg
ICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisgICAgRVhQRUNUX1RSVUUodGhyZWFkLmhhc1BlbmRp
bmdUYXNrKCkpOworICAgIHRocmVhZC5yZXNldCgpOworICAgIHRpbWVyLnNldEFjdGl2ZSh0cnVl
KTsKKyAgICBFWFBFQ1RfRkFMU0UodGhyZWFkLmhhc1BlbmRpbmdUYXNrKCkpOworfQorCitURVNU
KENDRGVsYXlCYXNlZFRpbWVTb3VyY2UsIFN0YXJ0V2hlblJ1bm5pbmdEb2VzbnRUaWNrKQorewor
ICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDVGltZVNvdXJjZUNsaWVudCBjbGll
bnQ7CisgICAgRmFrZUNDRGVsYXlCYXNlZFRpbWVTb3VyY2UgdGltZXIoMTAwMC4wIC8gNjAuMCwg
JnRocmVhZCk7CisgICAgdGltZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAgIHRpbWVyLnNldEFj
dGl2ZSh0cnVlKTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICB0aHJlYWQucmVz
ZXQoKTsKKyAgICB0aW1lci5zZXRBY3RpdmUodHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNFKHRocmVh
ZC5oYXNQZW5kaW5nVGFzaygpKTsKK30KKworVEVTVChDQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVz
dCwgQWNoaWV2ZXNUYXJnZXRSYXRlV2l0aE5vTm9pc2UpCit7CisgICAgaW50IG51bUl0ZXJhdGlv
bnMgPSAxMDAwOworCisgICAgRmFrZUNDVGhyZWFkIHRocmVhZDsKKyAgICBGYWtlQ0NUaW1lU291
cmNlQ2xpZW50IGNsaWVudDsKKyAgICBGYWtlQ0NEZWxheUJhc2VkVGltZVNvdXJjZSB0aW1lcigx
MDAwLjAgLyA2MC4wLCAmdGhyZWFkKTsKKyAgICB0aW1lci5zZXRDbGllbnQoJmNsaWVudCk7Cisg
ICAgdGltZXIuc2V0QWN0aXZlKHRydWUpOworCisgICAgZG91YmxlIHRvdGFsRnJhbWVUaW1lID0g
MDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7ICsraSkgeworICAgICAg
ICBsb25nIGxvbmcgZGVsYXkgPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisKKyAgICAgICAgLy8g
YWNjdW11bGF0ZSB0aGUgImRlbGF5IgorICAgICAgICB0b3RhbEZyYW1lVGltZSArPSBkZWxheTsK
KworICAgICAgICAvLyBSdW4gdGhlIGNhbGxiYWNrIGV4YWN0bHkgd2hlbiBhc2tlZAorICAgICAg
ICBkb3VibGUgbm93ID0gdGltZXIubW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyBkZWxh
eTsKKyAgICAgICAgdGltZXIuc2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKG5vdyk7Cisg
ICAgICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIH0KKyAgICBkb3VibGUgYXZlcmFn
ZUludGVydmFsID0gdG90YWxGcmFtZVRpbWUgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bUl0ZXJh
dGlvbnMpOworICAgIEVYUEVDVF9ORUFSKDEwMDAuMCAvIDYwLjAsIGF2ZXJhZ2VJbnRlcnZhbCwg
MC4xKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBlMzYxNGU4MDVk
ZmE3YmI1MDliZmJkNmYxOGJiNzE0OGIwOWJjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAKQEAgLTAs
MCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgImNjL0NDRnJhbWVSYXRlQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQ0NTY2hlZHVsZXJU
ZXN0Q29tbW9uLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRl
c3RzOworCituYW1lc3BhY2UgeworCitjbGFzcyBGYWtlQ0NGcmFtZVJhdGVDb250cm9sbGVyQ2xp
ZW50IDogcHVibGljIFdlYkNvcmU6OkNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCB7CitwdWJs
aWM6CisgICAgRmFrZUNDRnJhbWVSYXRlQ29udHJvbGxlckNsaWVudCgpIHsgcmVzZXQoKTsgfQor
CisgICAgdm9pZCByZXNldCgpIHsgbV9mcmFtZUJlZ3VuID0gZmFsc2U7IH0KKyAgICBib29sIGZy
YW1lQmVndW4oKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQmVndW47IH0KKworICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkZyYW1lKCkgeyBtX2ZyYW1lQmVndW4gPSB0cnVlOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBib29sIG1fZnJhbWVCZWd1bjsKK307CisKKworVEVTVChDQ0ZyYW1lUmF0ZUNvbnRyb2xs
ZXJUZXN0LCBUZXN0RnJhbWVUaHJvdHRsaW5nX0ltbWVkaWF0ZUFjaykKK3sKKyAgICBGYWtlQ0NU
aHJlYWQgdGhyZWFkOworICAgIEZha2VDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJDbGllbnQgY2xpZW50
OworICAgIEZha2VDQ0RlbGF5QmFzZWRUaW1lU291cmNlKiB0aW1lU291cmNlID0gbmV3IEZha2VD
Q0RlbGF5QmFzZWRUaW1lU291cmNlKDEwMDAuMCAvIDYwLjAsICZ0aHJlYWQpOworICAgIENDRnJh
bWVSYXRlQ29udHJvbGxlciBjb250cm9sbGVyKGFkb3B0UHRyKHRpbWVTb3VyY2UpKTsKKworICAg
IGNvbnRyb2xsZXIuc2V0Q2xpZW50KCZjbGllbnQpOworICAgIGNvbnRyb2xsZXIuc2V0QWN0aXZl
KHRydWUpOworCisgICAgZG91YmxlIGVsYXBzZWQgPSAwOyAvLyBNdWNrIGFyb3VuZCB3aXRoIHRp
bWUgYSBiaXQKKworICAgIC8vIFRyaWdnZXIgb25lIGZyYW1lLCBtYWtlIHN1cmUgdGhlIHZzeW5j
IGNhbGxiYWNrIGlzIGNhbGxlZAorICAgIGVsYXBzZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgp
OworICAgIHRpbWVTb3VyY2UtPnNldE1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZShlbGFwc2Vk
KTsKKyAgICB0aHJlYWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQu
ZnJhbWVCZWd1bigpKTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIFRlbGwgdGhlIGNv
bnRyb2xsZXIgd2UgZHJldworICAgIGNvbnRyb2xsZXIuZGlkQmVnaW5GcmFtZSgpOworCisgICAg
Ly8gVGVsbCB0aGUgY29udHJvbGxlciB0aGUgZnJhbWUgZW5kZWQgNW1zIGxhdGVyCisgICAgdGlt
ZVNvdXJjZS0+c2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKHRpbWVTb3VyY2UtPm1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgNSk7CisgICAgY29udHJvbGxlci5kaWRGaW5pc2hG
cmFtZSgpOworCisgICAgLy8gVHJpZ2dlciBhbm90aGVyIGZyYW1lLCBtYWtlIHN1cmUgdnN5bmMg
cnVucyBhZ2FpbgorICAgIGVsYXBzZWQgKz0gdGhyZWFkLnBlbmRpbmdEZWxheSgpOworICAgIEVY
UEVDVF9UUlVFKGVsYXBzZWQgPj0gdGltZVNvdXJjZS0+bW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkpOyAvLyBTYW5pdHkgY2hlY2sgdGhhdCBwcmV2aW91cyBjb2RlIGRpZG4ndCBtb3ZlIHRp
bWUgYmFja3dhcmQuCisgICAgdGltZVNvdXJjZS0+c2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAgIEVYUEVDVF9U
UlVFKGNsaWVudC5mcmFtZUJlZ3VuKCkpOworfQorCitURVNUKENDRnJhbWVSYXRlQ29udHJvbGxl
clRlc3QsIFRlc3RGcmFtZVRocm90dGxpbmdfVHdvRnJhbWVzSW5GbGlnaHQpCit7CisgICAgLy8g
VGhpcyB0ZXN0IG9ubHkgd29ya3MgZm9yIHRoZSBjYXNlIG9mIGtNYXhGcmFtZXNQZW5kaW5nID0g
MgorICAgIEFTU0VSVF9FUSgyLCBDQ0ZyYW1lUmF0ZUNvbnRyb2xsZXI6OmtNYXhGcmFtZXNQZW5k
aW5nKTsKKworICAgIEZha2VDQ1RocmVhZCB0aHJlYWQ7CisgICAgRmFrZUNDRnJhbWVSYXRlQ29u
dHJvbGxlckNsaWVudCBjbGllbnQ7CisgICAgRmFrZUNDRGVsYXlCYXNlZFRpbWVTb3VyY2UqIHRp
bWVTb3VyY2UgPSBuZXcgRmFrZUNDRGVsYXlCYXNlZFRpbWVTb3VyY2UoMTAwMC4wIC8gNjAuMCwg
JnRocmVhZCk7CisgICAgQ0NGcmFtZVJhdGVDb250cm9sbGVyIGNvbnRyb2xsZXIoYWRvcHRQdHIo
dGltZVNvdXJjZSkpOworCisgICAgY29udHJvbGxlci5zZXRDbGllbnQoJmNsaWVudCk7CisgICAg
Y29udHJvbGxlci5zZXRBY3RpdmUodHJ1ZSk7CisKKyAgICBkb3VibGUgZWxhcHNlZCA9IDA7IC8v
IE11Y2sgYXJvdW5kIHdpdGggdGltZSBhIGJpdAorCisgICAgLy8gVHJpZ2dlciBvbmUgZnJhbWUs
IG1ha2Ugc3VyZSB0aGUgdnN5bmMgY2FsbGJhY2sgaXMgY2FsbGVkCisgICAgZWxhcHNlZCArPSB0
aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgdGltZVNvdXJjZS0+c2V0TW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKGVsYXBzZWQpOworICAgIHRocmVhZC5ydW5QZW5kaW5nVGFzaygpOworICAg
IEVYUEVDVF9UUlVFKGNsaWVudC5mcmFtZUJlZ3VuKCkpOworICAgIGNsaWVudC5yZXNldCgpOwor
CisgICAgLy8gVGVsbCB0aGUgY29udHJvbGxlciB3ZSBkcmV3CisgICAgY29udHJvbGxlci5kaWRC
ZWdpbkZyYW1lKCk7CisKKyAgICAvLyBUcmlnZ2VyIGFub3RoZXIgZnJhbWUsIG1ha2Ugc3VyZSB2
c3luYyBjYWxsYmFjayBydW5zIGFnYWluCisgICAgZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0Rl
bGF5KCk7CisgICAgRVhQRUNUX1RSVUUoZWxhcHNlZCA+PSB0aW1lU291cmNlLT5tb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKSk7IC8vIFNhbml0eSBjaGVjayB0aGF0IHByZXZpb3VzIGNvZGUg
ZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAgICB0aW1lU291cmNlLT5zZXRNb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoZWxhcHNlZCk7CisgICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7
CisgICAgRVhQRUNUX1RSVUUoY2xpZW50LmZyYW1lQmVndW4oKSk7CisgICAgY2xpZW50LnJlc2V0
KCk7CisKKyAgICAvLyBUZWxsIHRoZSBjb250cm9sbGVyIHdlIGRyZXcsIGFnYWluLgorICAgIGNv
bnRyb2xsZXIuZGlkQmVnaW5GcmFtZSgpOworCisgICAgLy8gVHJpZ2dlciBhbm90aGVyIGZyYW1l
LiBTaW5jZSB0d28gZnJhbWVzIGFyZSBwZW5kaW5nLCB3ZSBzaG91bGQgbm90IGRyYXcuCisgICAg
ZWxhcHNlZCArPSB0aHJlYWQucGVuZGluZ0RlbGF5KCk7CisgICAgRVhQRUNUX1RSVUUoZWxhcHNl
ZCA+PSB0aW1lU291cmNlLT5tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7IC8vIFNhbml0
eSBjaGVjayB0aGF0IHByZXZpb3VzIGNvZGUgZGlkbid0IG1vdmUgdGltZSBiYWNrd2FyZC4KKyAg
ICB0aW1lU291cmNlLT5zZXRNb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoZWxhcHNlZCk7Cisg
ICAgdGhyZWFkLnJ1blBlbmRpbmdUYXNrKCk7CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5mcmFt
ZUJlZ3VuKCkpOworCisgICAgLy8gVGVsbCB0aGUgY29udHJvbGxlciB0aGUgZmlyc3QgZnJhbWUg
ZW5kZWQgNW1zIGxhdGVyCisgICAgdGltZVNvdXJjZS0+c2V0TW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKHRpbWVTb3VyY2UtPm1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgNSk7Cisg
ICAgY29udHJvbGxlci5kaWRGaW5pc2hGcmFtZSgpOworCisgICAgLy8gVGljayBzaG91bGQgbm90
IGhhdmUgYmVlbiBjYWxsZWQKKyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50LmZyYW1lQmVndW4oKSk7
CisKKyAgICAvLyBUcmlnZ2VyIHlldCBhbm90aGVyIGZyYW1lLiBTaW5jZSBvbmUgZnJhbWVzIGlz
IHBlbmRpbmcsIGFub3RoZXIgdnN5bmMgY2FsbGJhY2sgc2hvdWxkIHJ1bi4KKyAgICBlbGFwc2Vk
ICs9IHRocmVhZC5wZW5kaW5nRGVsYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShlbGFwc2VkID49IHRp
bWVTb3VyY2UtPm1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsgLy8gU2FuaXR5IGNoZWNr
IHRoYXQgcHJldmlvdXMgY29kZSBkaWRuJ3QgbW92ZSB0aW1lIGJhY2t3YXJkLgorICAgIHRpbWVT
b3VyY2UtPnNldE1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZShlbGFwc2VkKTsKKyAgICB0aHJl
YWQucnVuUGVuZGluZ1Rhc2soKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQuZnJhbWVCZWd1bigp
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKaW5kZXggZjJlMjQyNWRkNDZkMzI0NDQ5MjQ1YWUzYjIxZTNkMzA5
NGEwYTdjNi4uNTNlMjRmOTZkNjIyMWQ3NTIyZjQ4ZTc3MmNhYWQ5OTk3M2JhN2Q1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwCkBAIC03NTMsNCArNzUzLDMgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxN
dWx0aXBsZVJlZHJhdywgcnVuTXVsdGlUaHJlYWQpCiB9CiAKIH0gLy8gbmFtZXNwYWNlCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29t
bW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1v
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNjMTFkNTZhYzNkNjMwYzQyYTU2Zjk3MmQ0ZWY2MWViMjA0MTdhNTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1
bGVyVGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q0NTY2hlZHVsZXJUZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NTY2hlZHVsZXJUZXN0Q29tbW9uX2gK
KworI2luY2x1ZGUgImNjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKKyNpbmNsdWRlICJjYy9D
Q1RocmVhZC5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCitjbGFzcyBGYWtlQ0NUaW1lU291cmNl
Q2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDVGltZVNvdXJjZUNsaWVudCB7CitwdWJsaWM6Cisg
ICAgRmFrZUNDVGltZVNvdXJjZUNsaWVudCgpIHsgcmVzZXQoKTsgfQorICAgIHZvaWQgcmVzZXQo
KSB7IG1fdGlja0NhbGxlZCA9IGZhbHNlOyB9CisgICAgYm9vbCB0aWNrQ2FsbGVkKCkgY29uc3Qg
eyByZXR1cm4gbV90aWNrQ2FsbGVkOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25UaW1lclRpY2so
KSB7IG1fdGlja0NhbGxlZCA9IHRydWU7IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgbV90aWNr
Q2FsbGVkOworfTsKKworY2xhc3MgRmFrZUNDVGhyZWFkIDogcHVibGljIFdlYkNvcmU6OkNDVGhy
ZWFkIHsKK3B1YmxpYzoKKyAgICBGYWtlQ0NUaHJlYWQoKSB7IHJlc2V0KCk7IH0KKyAgICB2b2lk
IHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fcGVuZGluZ1Rhc2tEZWxheSA9IDA7CisgICAgICAg
IG1fcGVuZGluZ1Rhc2suY2xlYXIoKTsKKyAgICB9CisKKyAgICBib29sIGhhc1BlbmRpbmdUYXNr
KCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nVGFzazsgfQorICAgIHZvaWQgcnVuUGVuZGluZ1Rh
c2soKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1Rhc2spOworICAgICAgICBPd25Q
dHI8VGFzaz4gdGFzayA9IG1fcGVuZGluZ1Rhc2sucmVsZWFzZSgpOworICAgICAgICB0YXNrLT5w
ZXJmb3JtVGFzaygpOworICAgIH0KKworICAgIGxvbmcgbG9uZyBwZW5kaW5nRGVsYXkoKSBjb25z
dAorICAgIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFzUGVuZGluZ1Rhc2soKSk7CisgICAgICAg
IHJldHVybiBtX3BlbmRpbmdUYXNrRGVsYXk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBv
c3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdERlbGF5ZWRUYXNrKFBhc3NPd25QdHI8VGFzaz4gdGFzaywgbG9uZyBs
b25nIGRlbGF5KQorICAgIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWhhc1BlbmRpbmdUYXNrKCkp
OworICAgICAgICBtX3BlbmRpbmdUYXNrID0gdGFzazsKKyAgICAgICAgbV9wZW5kaW5nVGFza0Rl
bGF5ID0gZGVsYXk7CisgICAgfQorICAgIHZpcnR1YWwgV1RGOjpUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKworcHJv
dGVjdGVkOgorICAgIE93blB0cjxUYXNrPiBtX3BlbmRpbmdUYXNrOworICAgIGxvbmcgbG9uZyBt
X3BlbmRpbmdUYXNrRGVsYXk7Cit9OworCitjbGFzcyBGYWtlQ0NEZWxheUJhc2VkVGltZVNvdXJj
ZSA6IHB1YmxpYyBXZWJDb3JlOjpDQ0RlbGF5QmFzZWRUaW1lU291cmNlIHsKK3B1YmxpYzoKKyAg
ICBGYWtlQ0NEZWxheUJhc2VkVGltZVNvdXJjZShkb3VibGUgaW50ZXJ2YWxNcywgV2ViQ29yZTo6
Q0NUaHJlYWQqIHRocmVhZCkKKyAgICAgICAgOiBDQ0RlbGF5QmFzZWRUaW1lU291cmNlKGludGVy
dmFsTXMsIHRocmVhZCkKKyAgICAgICAgLCBtX21vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgw
KSB7IH0KKworICAgIHZvaWQgc2V0TW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKGRvdWJsZSB0
aW1lKSB7IG1fbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lID0gdGltZTsgfQorICAgIHZpcnR1
YWwgZG91YmxlIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lOyB9CisKK3Byb3RlY3RlZDoKKyAgICBkb3VibGUg
bV9tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWU7Cit9OworCit9CisKKyNlbmRpZiAvLyBDQ1Nj
aGVkdWxlclRlc3RDb21tb25faAo=
</data>
<flag name="review"
          id="110726"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>