<?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>22755</bug_id>
          
          <creation_ts>2008-12-09 02:15:18 -0800</creation_ts>
          <short_desc>Next step to Timers in Workers: moving timer code from other places to DOMTimer.</short_desc>
          <delta_ts>2008-12-28 02:36:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>22718</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101955</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-09 02:15:18 -0800</bug_when>
    <thetext>This prepares for adding means to JSScriptContext to create its own timers (except threading stuff that is separate):
- Moved more timer code from JSDOMWindowBase to DOMTimer. Removed timerFired() and simplified install/removeTimeout so when JSWorkerContext will get similar functionality, there wil be no code duplication.
- Moved TimeoutMap from Document to be a static member on DOMTimer. Also removed addTimeout/removeTimeout from Document. Same reason as above.
- Removed JSLock lock(false) local variable in ~DOMTimer. It doesn&apos;t seem to be needed there.
- Since Timers now are not recreated across modal operations, the code that updates interval to be at least 10ms is simpler now.

Next steps:
- teach ScheduledAction how to execute using WorkerContext in addition to Document.
- make DOMTimer working on a Worker thread
- expose timers off WorkerContext

This makes it easy to add create/remove timeout methods to JSWorkerContext later since they just create/delete DOMTimer object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102395</commentid>
    <comment_count>1</comment_count>
      <attachid>25991</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-12 16:12:44 -0800</bug_when>
    <thetext>Created attachment 25991
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102396</commentid>
    <comment_count>2</comment_count>
      <attachid>25991</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-12 16:30:38 -0800</bug_when>
    <thetext>Comment on attachment 25991
Proposed patch

I&apos;m guessing that a lot of these comments are about code that you just moved, and didn&apos;t write, so you can ignore those comments if you like. If it was new code I&apos;d probably fix all these things!

&gt; +const int cMaxTimerNestingLevel = 5;
&gt; +const double cMinimumTimerInterval = 0.010;

Since these are local to this source file, they should be &quot;static const&quot;. Our coding style doesn&apos;t give a specific style for these, but I normally use no prefix at all (so no &quot;c&quot;), but the names are arguably OK as is. It&apos;d be nice to be consistently use either &quot;maximum&quot; and &quot;minimum&quot; or &quot;max&quot; and &quot;min&quot;. This uses one of each.

&gt; +DOMTimer::TimeoutsMap&amp; DOMTimer::getTimeoutsMap()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(TimeoutsMap, map, ());
&gt; +    return map;
&gt; +}

We never use the word &quot;get&quot; in the name of a function like this. We reserve &quot;get&quot; for functions that return their results in a non-standard way, such as an out parameter. We&apos;d just call this timeoutsMap().

&gt; +    ASSERT(!getTimeoutsMap().get(m_timeoutId));

We have &quot;contains&quot; for boolean uses like this. Better to use that instead of get.

&gt; +    getTimeoutsMap().set(m_timeoutId, this);
&gt; +
&gt; +    // Use a minimum interval of 10 ms to match other browsers, but only once we&apos;ve
&gt; +    // nested enough to notice that we&apos;re repeating.
&gt; +    // Faster timers might be &quot;better&quot;, but they&apos;re incompatible.

The comment above describes the &quot;interval&quot; part of the math, but the immediately succeeding lines of code implement something else (conversion from ms to s and minimum interval of 1 ms). I find that confusing.

&gt; +    double interval = std::max&lt;double&gt;(0.001, timeout * 0.001);

The 0.001 should be a named constant too. Maybe it&apos;s clear to you that they&apos;re milliseconds, but I found it unclear.

Why max&lt;double&gt; instead of just max? Both expressions are doubles, so it should work without the type being specified explicitly.

&gt; +    typedef HashMap&lt;int, DOMTimer*&gt; TimeoutsMap;
&gt; +    static TimeoutsMap&amp; getTimeoutsMap();

Does this really need to be a static member function? If it was a plain old non-member function then it could be in the .cpp file and we could avoid adding new includes to the header. I&apos;d prefer that if possible.

&gt; +    DOMTimer* timer = new DOMTimer(scriptExecutionContext(), a, t, singleShot);

I&apos;m not really comfortable with this interface. It&apos;s ugly that calling new gives you a pointer that&apos;s already owned by the &quot;window&quot; object; sets off all the alarm bells -- who owns this object? Could we change this to be a function call rather than new? The &quot;new&quot; part could be done inside the function so it&apos;s encapsulated in the DOMTimer class.

Is a global map really a good idea if we&apos;re going to be doing this on multiple threads?

&gt; +    delete DOMTimer::findById(timeoutId);

It seems cleaner to have the DOMTimer function be more like &quot;removeById&quot;.

It&apos;s a bug that now one window can cancel timers that were created in another window if it guesses the timer ID. That needs to be fixed.

review- for now given the comments above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102397</commentid>
    <comment_count>3</comment_count>
      <attachid>25991</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-12 16:32:14 -0800</bug_when>
    <thetext>Comment on attachment 25991
Proposed patch

In this patch, what deletes all the timers that are still running when a window goes away?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102738</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-16 18:19:30 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 25991 [review])
&gt; In this patch, what deletes all the timers that are still running when a window
&gt; goes away?

It happens when a Document associated with the window is deleted and calls contextDestroyed() on all timers. There is &apos;delete this&apos; in that override on a DOMTimer. The timers are stopped even before that, from FrameLoader::clear() or Document::detach(), depending which way the document is destroyed.

Updated patch is on the way.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102746</commentid>
    <comment_count>5</comment_count>
      <attachid>26084</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-16 20:14:31 -0800</bug_when>
    <thetext>Created attachment 26084
updated patch

Changed code per feedback from Darin.

I&apos;ve moved timeoutsMap back to Document (undoing the part of the change) since making it a global was not a good idea. It would have issues listed below, which would unnecessary complicate the code, so I left it on the Document with the idea to move it to ScriptExecutionContext very soon so Workers could use it too:
- It would have to become ThreadSpecific in case of using in Workers
- It would have to become a map-of-maps or something else to separate IDs for each window
- the code removing IDs from this map would be potentially a mem-leak-prone code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102748</commentid>
    <comment_count>6</comment_count>
      <attachid>26085</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-16 22:04:59 -0800</bug_when>
    <thetext>Created attachment 26085
updated patch

A few small formatting fixes added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103554</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-27 13:26:02 -0800</bug_when>
    <thetext>I fixed all issues mentioned by Darin. The bug where different windows shared same timeout id space and could &apos;guess&apos; and clear each other&apos;s timers is fixed by moving timeoutId map back to Document where it was, for the reasons mentioned above. I think I&apos;ll move it to ScriptExecutionContext in a separate patch. 
This patch seems to be ready for a second look. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103558</commentid>
    <comment_count>8</comment_count>
      <attachid>26085</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-27 14:12:27 -0800</bug_when>
    <thetext>Comment on attachment 26085
updated patch

&gt; +    double intervalMilliseconds = std::max(oneMillisecond, timeout * oneMillisecond);

Should just be &quot;max&quot;, with &quot;using namespace std&quot; at the top of the .cpp file.

&gt;  DOMTimer::~DOMTimer()
&gt;  {
&gt; -    if (m_action) {
&gt; -        JSC::JSLock lock(false);
&gt; -        delete m_action;
&gt; -    }
&gt; +    delete m_action;
&gt; +}

Given that we don&apos;t need locking around the delete now, we can move to using an OwnPtr instead of explicit deletion.

&gt; +int DOMTimer::install(ScriptExecutionContext* context, ScheduledAction* action, int timeout, bool singleShot)
&gt; +{
&gt; +    DOMTimer* timer = new DOMTimer(context, action, timeout, singleShot);
&gt; +    return timer-&gt;m_timeoutId;
&gt; +}

This needs a comment to explain ownership. It&apos;s always confusing when someone can just call &quot;new&quot; and then drop the result and somehow know there won&apos;t be a storage leak. So requires a brief comment.

&gt; +    // FIXME: move the timeout map and API to ScriptExecutionContext to be able
&gt; +    // to create timeouts from Workers.

I don&apos;t think we need this comment in multiple places. Also, please use sentence capitalization in comments like this. Thus &quot;Move&quot; rather than &quot;move&quot;.

&gt; +    // This is static, so ok to assign after deleting the instance.
&gt; +    m_timerNestingLevel = 0;

I don&apos;t think static data members should use the &quot;m_&quot; prefix; the need for this comment is a good example of why. But further, I&apos;d rather just have global variables with internal linkage rather than static data members anyway. They are private to the .cpp file and can be added and removed without touching a header. Anyway, not new to this patch and not your fault.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103572</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-28 01:35:07 -0800</bug_when>
    <thetext>Thanks a lot! 

Fixed everything.  The patch is coming after tests are completed.

After switching to OwnPtr for ScheduledAction the DOMTimer destructor becomes empty. I have left it in cpp file to avoid including ScheduleAction.h in DOMTimer.h (otherwise compiler tries to generate default destructor for DOMTimer). Also makes it possible to set a breakpoint into destructor.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103573</commentid>
    <comment_count>10</comment_count>
      <attachid>26274</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-28 01:50:13 -0800</bug_when>
    <thetext>Created attachment 26274
Addressed Darin&apos;s comments, final version.

I&apos;ve addressed all the Darin&apos;s comments. Since it&apos;s r+, I think the final version of the patch is ready to be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103575</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-28 02:07:00 -0800</bug_when>
    <thetext>Committed revision 39489. Fixed one typo in a newly added comment (ActivDOMObject).
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25991</attachid>
            <date>2008-12-12 16:12:44 -0800</date>
            <delta_ts>2008-12-16 20:14:31 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14638</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTI1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDgtMTItMTIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzU1CisgICAgICAgIFBy
ZXBhcmUgdG8gYWRkIGNyZWF0ZS9yZW1vdmUgdGltZW91dCBtZXRob2RzIHRvIEpTV29ya2VyQ29u
dGV4dCBieSBtb3ZpbmcKKyAgICAgICAgdGltZXItc3BlY2lmaWMgY29kZSBmcm9tIEpTRE9NV2lu
ZG93QmFzZSBhbmQgRG9jdW1lbnQgdG8gRE9NVGltZXIuCisgICAgICAgIE1vdmVkIGV2ZXJ5dGhp
bmcgSlMtcmVsYXRlZCBmcm9tIERPTVRpbWVyIHRvIFNjaGVkdWxlZEFjdGlvbi4KKyAgICAgICAg
Tm93IFNjaGVkdWxlZEFjdGlvbiBpcyB3aGF0IGl0IHdhbnRlZCB0byBiZSBhbGwgdGhlIHRpbWU6
IGEgSlMgZW5naW5lLXNwZWNpZmljIAorICAgICAgICBjb250YWluZXIgZm9yIHRpbWVyIGNhbGxi
YWNrIHRoYXQga25vd3MgaG93IHRvIGludm9rZSBpdC4KKyAgICAgICAgRE9NVGltZXIgaXMgbm90
IGFueW1vcmUgSlMtc3BlY2lmaWMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01UaW1lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6Z2V0VGltZW91dHNNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVGltZXI6OkRPTVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRp
bWVyOjp+RE9NVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OmZpbmRCeUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01UaW1lcjo6c3RvcCk6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NVGltZXIuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvd0Jhc2U6OnJlbW92ZVRpbWVvdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisKIDIwMDgtMTItMTIgIEJyZXR0IFdpbHNv
biAgPGJyZXR0d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcAkocmV2aXNpb24gMzkyNDcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTcg
KzI3LDI0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKIAot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRl
ICJTY2hlZHVsZWRBY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgaW50IGNNYXhUaW1lck5lc3RpbmdM
ZXZlbCA9IDU7Citjb25zdCBkb3VibGUgY01pbmltdW1UaW1lckludGVydmFsID0gMC4wMTA7CisK
IGludCBET01UaW1lcjo6bV90aW1lck5lc3RpbmdMZXZlbCA9IDA7CiAKLURPTVRpbWVyOjpET01U
aW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTY2hlZHVsZWRBY3Rpb24qIGFj
dGlvbikKK0RPTVRpbWVyOjpUaW1lb3V0c01hcCYgRE9NVGltZXI6OmdldFRpbWVvdXRzTWFwKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRpbWVvdXRzTWFwLCBtYXAsICgpKTsKKyAgICBy
ZXR1cm4gbWFwOworfQorCitET01UaW1lcjo6RE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCB0aW1lb3V0LCBib29sIHNp
bmdsZVNob3QpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1f
YWN0aW9uKGFjdGlvbikKICAgICAsIG1fbmV4dEZpcmVJbnRlcnZhbCgwKQpAQCAtNTEsMjggKzU4
LDY2IEBAIERPTVRpbWVyOjpET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICBtX3Rp
bWVvdXRJZCA9IGxhc3RVc2VkVGltZW91dElkOwogICAgIAogICAgIG1fbmVzdGluZ0xldmVsID0g
bV90aW1lck5lc3RpbmdMZXZlbCArIDE7CisKKyAgICBBU1NFUlQoIWdldFRpbWVvdXRzTWFwKCku
Z2V0KG1fdGltZW91dElkKSk7CisgICAgZ2V0VGltZW91dHNNYXAoKS5zZXQobV90aW1lb3V0SWQs
IHRoaXMpOworCisgICAgLy8gVXNlIGEgbWluaW11bSBpbnRlcnZhbCBvZiAxMCBtcyB0byBtYXRj
aCBvdGhlciBicm93c2VycywgYnV0IG9ubHkgb25jZSB3ZSd2ZQorICAgIC8vIG5lc3RlZCBlbm91
Z2ggdG8gbm90aWNlIHRoYXQgd2UncmUgcmVwZWF0aW5nLgorICAgIC8vIEZhc3RlciB0aW1lcnMg
bWlnaHQgYmUgImJldHRlciIsIGJ1dCB0aGV5J3JlIGluY29tcGF0aWJsZS4KKyAgICBkb3VibGUg
aW50ZXJ2YWwgPSBzdGQ6Om1heDxkb3VibGU+KDAuMDAxLCB0aW1lb3V0ICogMC4wMDEpOworICAg
IGlmIChpbnRlcnZhbCA8IGNNaW5pbXVtVGltZXJJbnRlcnZhbCAmJiBtX25lc3RpbmdMZXZlbCA+
PSBjTWF4VGltZXJOZXN0aW5nTGV2ZWwpCisgICAgICAgIGludGVydmFsID0gY01pbmltdW1UaW1l
ckludGVydmFsOworICAgIGlmIChzaW5nbGVTaG90KQorICAgICAgICBzdGFydE9uZVNob3QoaW50
ZXJ2YWwpOworICAgIGVsc2UKKyAgICAgICAgc3RhcnRSZXBlYXRpbmcoaW50ZXJ2YWwpOwogfQog
CiBET01UaW1lcjo6fkRPTVRpbWVyKCkKIHsKLSAgICBpZiAobV9hY3Rpb24pIHsKLSAgICAgICAg
SlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIGRlbGV0ZSBtX2FjdGlvbjsKLSAgICB9
CisgICAgQVNTRVJUKHRoaXMgPT0gZ2V0VGltZW91dHNNYXAoKS5nZXQobV90aW1lb3V0SWQpKTsK
KyAgICBnZXRUaW1lb3V0c01hcCgpLnJlbW92ZShtX3RpbWVvdXRJZCk7CisgICAgZGVsZXRlIG1f
YWN0aW9uOworfQorCitET01UaW1lciogRE9NVGltZXI6OmZpbmRCeUlkKGludCB0aW1lb3V0SWQp
Cit7CisgICAgLy8gdGltZW91dCBJRHMgaGF2ZSB0byBiZSBwb3NpdGl2ZSwgYW5kIDAgYW5kIC0x
IGFyZSB1bnNhZmUgdG8KKyAgICAvLyBldmVuIGxvb2sgdXAgc2luY2UgdGhleSBhcmUgdGhlIGVt
cHR5IGFuZCBkZWxldGVkIHZhbHVlCisgICAgLy8gcmVzcGVjdGl2ZWx5CisgICAgaWYgKHRpbWVv
dXRJZCA8PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZ2V0VGltZW91dHNNYXAo
KS5nZXQodGltZW91dElkKTsKIH0KIAogdm9pZCBET01UaW1lcjo6ZmlyZWQoKQogewogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgLy8gRklYTUU6IG1ha2UgaXQgd29yayB3aXRoIFdvcmtlcnMgU0VDIHRvby4KLSAgICBp
ZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Ci0gICAgICAgIGlmIChKU0RPTVdpbmRv
dyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVudC0+ZnJhbWUoKSkpIHsKLSAgICAgICAg
ICAgIG1fdGltZXJOZXN0aW5nTGV2ZWwgPSBtX25lc3RpbmdMZXZlbDsKLSAgICAgICAgICAgIHdp
bmRvdy0+dGltZXJGaXJlZCh0aGlzKTsKLSAgICAgICAgICAgIG1fdGltZXJOZXN0aW5nTGV2ZWwg
PSAwOworICAgIG1fdGltZXJOZXN0aW5nTGV2ZWwgPSBtX25lc3RpbmdMZXZlbDsKKworICAgIC8v
IFNpbXBsZSBjYXNlIGZvciBub24tb25lLXNob3QgdGltZXJzLgorICAgIGlmIChpc0FjdGl2ZSgp
KSB7CisgICAgICAgIGlmIChyZXBlYXRJbnRlcnZhbCgpICYmIHJlcGVhdEludGVydmFsKCkgPCBj
TWluaW11bVRpbWVySW50ZXJ2YWwpIHsKKyAgICAgICAgICAgIG1fbmVzdGluZ0xldmVsKys7Cisg
ICAgICAgICAgICBpZiAobV9uZXN0aW5nTGV2ZWwgPj0gY01heFRpbWVyTmVzdGluZ0xldmVsKQor
ICAgICAgICAgICAgICAgIGF1Z21lbnRSZXBlYXRJbnRlcnZhbChjTWluaW11bVRpbWVySW50ZXJ2
YWwgLSByZXBlYXRJbnRlcnZhbCgpKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
Tm8gYWNjZXNzIHRvIG1lbWJlciB2YXJpYWJsZXMgYWZ0ZXIgdGhpcyBwb2ludCwgaXQgY2FuIGRl
bGV0ZSB0aGUgdGltZXIuCisgICAgICAgIG1fYWN0aW9uLT5leGVjdXRlKGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CiAgICAgfQorCisgICAgLy8gRGVsZXRlIHRpbWVyIGJlZm9yZSBleGVjdXRp
bmcgdGhlIGFjdGlvbiBmb3Igb25lLXNob3QgdGltZXJzLgorICAgIFNjaGVkdWxlZEFjdGlvbiog
YWN0aW9uID0gbV9hY3Rpb247CisgICAgbV9hY3Rpb24gPSAwOworICAgIC8vIE5vIGFjY2VzcyB0
byBtZW1iZXIgdmFyaWFibGVzIGFmdGVyIHRoaXMgcG9pbnQuCisgICAgZGVsZXRlIHRoaXM7CisK
KyAgICBhY3Rpb24tPmV4ZWN1dGUoY29udGV4dCk7CisgICAgZGVsZXRlIGFjdGlvbjsKKyAgICBt
X3RpbWVyTmVzdGluZ0xldmVsID0gMDsKIH0KIAogYm9vbCBET01UaW1lcjo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKQEAgLTkyLDcgKzEzNyw2IEBAIHZvaWQgRE9NVGltZXI6OnN0b3AoKQog
ICAgIC8vIE5lZWQgdG8gcmVsZWFzZSBKUyBvYmplY3RzIHBvdGVudGlhbGx5IHByb3RlY3RlZCBi
eSBTY2hlZHVsZWRBY3Rpb24KICAgICAvLyBiZWNhdXNlIHRoZXkgY2FuIGZvcm0gY2lyY3VsYXIg
cmVmZXJlbmNlcyBiYWNrIHRvIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgLy8gd2hp
Y2ggd2lsbCBjYXVzZSBhIG1lbW9yeSBsZWFrLgotICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2Up
OwogICAgIGRlbGV0ZSBtX2FjdGlvbjsKICAgICBtX2FjdGlvbiA9IDA7CiB9CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01UaW1lci5oCShyZXZpc2lvbiAzOTI0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
RE9NVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDE2ICszOSwxMiBAQCBjbGFz
cyBTY2hlZHVsZWRBY3Rpb247CiBjbGFzcyBET01UaW1lciA6IHB1YmxpYyBUaW1lckJhc2UsIHB1
YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIC8vIENyZWF0ZXMgYSBuZXcgdGlt
ZXIgd2l0aCB0aGUgbmV4dCBpZCBhbmQgbmVzdGluZyBsZXZlbC4KLSAgICBET01UaW1lcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgU2NoZWR1bGVkQWN0aW9uKik7CisgICAgRE9NVGltZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFNjaGVkdWxlZEFjdGlvbiosIGludCB0aW1lb3V0LCBib29s
IHNpbmdsZVNob3QpOwogICAgIHZpcnR1YWwgfkRPTVRpbWVyKCk7CiAKICAgICBpbnQgdGltZW91
dElkKCkgY29uc3QgeyByZXR1cm4gbV90aW1lb3V0SWQ7IH0KIAotICAgIGludCBuZXN0aW5nTGV2
ZWwoKSBjb25zdCB7IHJldHVybiBtX25lc3RpbmdMZXZlbDsgfQotICAgIHZvaWQgc2V0TmVzdGlu
Z0xldmVsKGludCBuKSB7IG1fbmVzdGluZ0xldmVsID0gbjsgfQotCi0gICAgU2NoZWR1bGVkQWN0
aW9uKiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FjdGlvbjsgfQotICAgIFNjaGVkdWxlZEFj
dGlvbiogdGFrZUFjdGlvbigpIHsgU2NoZWR1bGVkQWN0aW9uKiBhID0gbV9hY3Rpb247IG1fYWN0
aW9uID0gMDsgcmV0dXJuIGE7IH0KKyAgICBzdGF0aWMgRE9NVGltZXIqIGZpbmRCeUlkKGludCB0
aW1lb3V0SWQpOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwpAQCAtNjMsOSArNjAsMTQgQEAgcHJpdmF0ZToKICAg
ICBpbnQgbV90aW1lb3V0SWQ7CiAgICAgaW50IG1fbmVzdGluZ0xldmVsOwogICAgIFNjaGVkdWxl
ZEFjdGlvbiogbV9hY3Rpb247Ci0gICAgc3RhdGljIGludCBtX3RpbWVyTmVzdGluZ0xldmVsOwor
CiAgICAgZG91YmxlIG1fbmV4dEZpcmVJbnRlcnZhbDsKICAgICBkb3VibGUgbV9yZXBlYXRJbnRl
cnZhbDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIERPTVRpbWVyKj4gVGltZW91dHNNYXA7
CisgICAgc3RhdGljIFRpbWVvdXRzTWFwJiBnZXRUaW1lb3V0c01hcCgpOworICAgIAorICAgIHN0
YXRpYyBpbnQgbV90aW1lck5lc3RpbmdMZXZlbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9u
IDM5MjQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Nyw5ICs5Nyw2IEBAIHN0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93QmFz
ZVhTTFRQcm9jZXMKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBpbnQgY01heFRpbWVy
TmVzdGluZ0xldmVsID0gNTsKLWNvbnN0IGRvdWJsZSBjTWluaW11bVRpbWVySW50ZXJ2YWwgPSAw
LjAxMDsKLQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBKU0RPTVdpbmRvd0Jhc2UgT2JqZWN0IC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNl
OjpzX2luZm8gPSB7ICJXaW5kb3ciLCAwLCAmSlNET01XaW5kb3dCYXNlVGFibGUsIDAgfTsKQEAg
LTgyNCwyMyArODIxLDggQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnNldFJldHVyblZhbHVlU2xv
dAogCiBpbnQgSlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dChTY2hlZHVsZWRBY3Rpb24q
IGEsIGludCB0LCBib29sIHNpbmdsZVNob3QpCiB7Ci0gICAgRE9NVGltZXIqIHRpbWVyID0gbmV3
IERPTVRpbWVyKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYSk7Ci0gICAgaW50IHRpbWVvdXRJ
ZCA9IHRpbWVyLT50aW1lb3V0SWQoKTsKLQotICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3VtZW50
KCkpOwotICAgIGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+YWRkVGltZW91dCh0aW1lb3V0SWQsIHRp
bWVyKTsKLSAgICAKLSAgICAvLyBVc2UgYSBtaW5pbXVtIGludGVydmFsIG9mIDEwIG1zIHRvIG1h
dGNoIG90aGVyIGJyb3dzZXJzLCBidXQgb25seSBvbmNlIHdlJ3ZlCi0gICAgLy8gbmVzdGVkIGVu
b3VnaCB0byBub3RpY2UgdGhhdCB3ZSdyZSByZXBlYXRpbmcuCi0gICAgLy8gRmFzdGVyIHRpbWVy
cyBtaWdodCBiZSAiYmV0dGVyIiwgYnV0IHRoZXkncmUgaW5jb21wYXRpYmxlLgotICAgIGRvdWJs
ZSBpbnRlcnZhbCA9IG1heCgwLjAwMSwgdCAqIDAuMDAxKTsKLSAgICBpZiAoaW50ZXJ2YWwgPCBj
TWluaW11bVRpbWVySW50ZXJ2YWwgJiYgdGltZXItPm5lc3RpbmdMZXZlbCgpID49IGNNYXhUaW1l
ck5lc3RpbmdMZXZlbCkKLSAgICAgICAgaW50ZXJ2YWwgPSBjTWluaW11bVRpbWVySW50ZXJ2YWw7
Ci0gICAgaWYgKHNpbmdsZVNob3QpCi0gICAgICAgIHRpbWVyLT5zdGFydE9uZVNob3QoaW50ZXJ2
YWwpOwotICAgIGVsc2UKLSAgICAgICAgdGltZXItPnN0YXJ0UmVwZWF0aW5nKGludGVydmFsKTsK
LSAgICByZXR1cm4gdGltZW91dElkOworICAgIERPTVRpbWVyKiB0aW1lciA9IG5ldyBET01UaW1l
cihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGEsIHQsIHNpbmdsZVNob3QpOworICAgIHJldHVy
biB0aW1lci0+dGltZW91dElkKCk7CiB9CiAKIGludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxU
aW1lb3V0KGNvbnN0IFVTdHJpbmcmIGhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpCkBA
IC04NTUsNDUgKzgzNyw3IEBAIGludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4
ZWMKIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCkK
IHsKLSAgICAvLyB0aW1lb3V0IElEcyBoYXZlIHRvIGJlIHBvc2l0aXZlLCBhbmQgMCBhbmQgLTEg
YXJlIHVuc2FmZSB0bwotICAgIC8vIGV2ZW4gbG9vayB1cCBzaW5jZSB0aGV5IGFyZSB0aGUgZW1w
dHkgYW5kIGRlbGV0ZWQgdmFsdWUKLSAgICAvLyByZXNwZWN0aXZlbHkKLSAgICBpZiAodGltZW91
dElkIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3Vt
ZW50KCkpOwotICAgIGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+cmVtb3ZlVGltZW91dCh0aW1lb3V0
SWQpOwotfQotCi12b2lkIEpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJlZChET01UaW1lciogdGlt
ZXIpCi17Ci0gICAgLy8gU2ltcGxlIGNhc2UgZm9yIG5vbi1vbmUtc2hvdCB0aW1lcnMuCi0gICAg
aWYgKHRpbWVyLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGludCB0aW1lb3V0SWQgPSB0aW1lci0+
dGltZW91dElkKCk7Ci0KLSAgICAgICAgdGltZXItPmFjdGlvbigpLT5leGVjdXRlKHNoZWxsKCkp
OwotICAgICAgICAvLyBUaGUgRE9NVGltZXIgb2JqZWN0IG1heSBoYXZlIGJlZW4gZGVsZXRlZCBv
ciByZXBsYWNlZCBkdXJpbmcgZXhlY3V0aW9uLAotICAgICAgICAvLyBzbyB3ZSByZS1mZXRjaCBp
dC4KLSAgICAgICAgQVNTRVJUKGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIHRpbWVy
ID0gZCgpLT5pbXBsLT5kb2N1bWVudCgpLT5maW5kVGltZW91dCh0aW1lb3V0SWQpOwotICAgICAg
ICBpZiAoIXRpbWVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aW1lci0+
cmVwZWF0SW50ZXJ2YWwoKSAmJiB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKSA8IGNNaW5pbXVtVGlt
ZXJJbnRlcnZhbCkgewotICAgICAgICAgICAgdGltZXItPnNldE5lc3RpbmdMZXZlbCh0aW1lci0+
bmVzdGluZ0xldmVsKCkgKyAxKTsKLSAgICAgICAgICAgIGlmICh0aW1lci0+bmVzdGluZ0xldmVs
KCkgPj0gY01heFRpbWVyTmVzdGluZ0xldmVsKQotICAgICAgICAgICAgICAgIHRpbWVyLT5hdWdt
ZW50UmVwZWF0SW50ZXJ2YWwoY01pbmltdW1UaW1lckludGVydmFsIC0gdGltZXItPnJlcGVhdElu
dGVydmFsKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBE
ZWxldGUgdGltZXIgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9uIGZvciBvbmUtc2hvdCB0aW1l
cnMuCi0gICAgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24gPSB0aW1lci0+dGFrZUFjdGlvbigpOwot
ICAgIHJlbW92ZVRpbWVvdXQodGltZXItPnRpbWVvdXRJZCgpKTsKLSAgICBhY3Rpb24tPmV4ZWN1
dGUoc2hlbGwoKSk7Ci0KLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgZGVsZXRlIGFjdGlv
bjsKKyAgICBkZWxldGUgRE9NVGltZXI6OmZpbmRCeUlkKHRpbWVvdXRJZCk7CiB9CiAKIHZvaWQg
SlNET01XaW5kb3dCYXNlOjpkaXNjb25uZWN0RnJhbWUoKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzOTI0NykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEF0b21pY1N0cmluZzsKLSAgICBjbGFzcyBE
T01UaW1lcjsKICAgICBjbGFzcyBET01XaW5kb3c7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xh
c3MgRnJhbWU7CkBAIC02OCw4ICs2Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
aW50IGluc3RhbGxUaW1lb3V0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiBmdW5jdGlv
biwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKICAg
ICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOwogCi0gICAgICAgIHZvaWQg
dGltZXJGaXJlZChET01UaW1lciopOwotCiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAg
ICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIHdp
bmRvdyBpcyBjbGVhcmVkLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9u
LmNwcAkocmV2aXNpb24gMzkyNDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlNjcmlwdENv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVk
ZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBAIC00Niw2
ICs0NywxNSBAQCBTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihFeGVjU3RhCiAgICAg
ICAgIG1fYXJncy5hcHBlbmQoKCppdCkuanNWYWx1ZShleGVjKSk7CiB9CiAKK3ZvaWQgU2NoZWR1
bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgLy8gRklYTUU6IG1ha2UgaXQgd29yayB3aXRoIFdvcmtlcnMgU0VDIHRvby4KKyAgICBBU1NF
UlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93
ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVudC0+ZnJhbWUoKSkpCisgICAgICBleGVjdXRlKHdpbmRv
dy0+c2hlbGwoKSk7Cit9CisKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKEpTRE9NV2lu
ZG93U2hlbGwqIHdpbmRvd1NoZWxsKQogewogICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSB3aW5k
b3dTaGVsbC0+d2luZG93KCktPmltcGwoKS0+ZnJhbWUoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uaAkocmV2aXNpb24gMzkyNDcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0RPTVdpbmRvd1NoZWxsOworICAgIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgIC8qIEFuIGFjdGlvbiAoZWl0aGVyIGZ1
bmN0aW9uIG9yIHN0cmluZykgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgYSBzcGVjaWZpZWQKICAgICAq
IHRpbWUgaW50ZXJ2YWwsIGVpdGhlciBvbmNlIG9yIHJlcGVhdGVkbHkuIFVzZWQgZm9yIHdpbmRv
dy5zZXRUaW1lb3V0KCkKQEAgLTM5LDEwICs0MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICA6IG1fY29kZShjb2RlKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAg
IAorICAgICAgICB2b2lkIGV4ZWN1dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBleGVjdXRlKEpTRE9NV2luZG93U2hlbGwqKTsKIAotICAg
IHByaXZhdGU6CiAgICAgICAgIEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6SlNWYWx1ZT4gbV9mdW5j
dGlvbjsKICAgICAgICAgVmVjdG9yPEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6SlNWYWx1ZT4gPiBt
X2FyZ3M7CiAgICAgICAgIFN0cmluZyBtX2NvZGU7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAz
OTI0NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI1
MCwyMyArNDI1MCw2IEBAIHZvaWQgRG9jdW1lbnQ6OnBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGUK
ICAgICBtX2hhdmVFeHBsaWNpdGx5RGlzYWJsZWRETlNQcmVmZXRjaCA9IHRydWU7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OmFkZFRpbWVvdXQoaW50IHRpbWVvdXRJZCwgRE9NVGltZXIqIHRpbWVyKQot
ewotICAgIEFTU0VSVCghbV90aW1lb3V0cy5nZXQodGltZW91dElkKSk7Ci0gICAgbV90aW1lb3V0
cy5zZXQodGltZW91dElkLCB0aW1lcik7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZVRpbWVv
dXQoaW50IHRpbWVvdXRJZCkKLXsKLSAgICBET01UaW1lciogdGltZXIgPSBtX3RpbWVvdXRzLnRh
a2UodGltZW91dElkKTsKLSAgICBkZWxldGUgdGltZXI7Ci19Ci0KLURPTVRpbWVyKiBEb2N1bWVu
dDo6ZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCkKLXsKLSAgICByZXR1cm4gbV90aW1lb3V0cy5n
ZXQodGltZW91dElkKTsKLX0KLQogdm9pZCBEb2N1bWVudDo6cmVwb3J0RXhjZXB0aW9uKGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpCiB7CiAgICAgaWYgKERPTVdpbmRvdyogd2luZG93ID0gZG9tV2luZG93KCkpCkluZGV4
OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHJldmlzaW9uIDM5MjQ3KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
RGF0YWJhc2U7CiAgICAgY2xhc3MgRE9NSW1wbGVtZW50YXRpb247CiAgICAgY2xhc3MgRE9NU2Vs
ZWN0aW9uOwotICAgIGNsYXNzIERPTVRpbWVyOwogICAgIGNsYXNzIERPTVdpbmRvdzsKICAgICBj
bGFzcyBEYXRhYmFzZVRocmVhZDsKICAgICBjbGFzcyBEb2NMb2FkZXI7CkBAIC03NzksMTAgKzc3
OCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQYXNzUmVmUHRyPFRhc2s+KTsgLy8gRXhl
Y3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4KIAotICAg
IHZvaWQgYWRkVGltZW91dChpbnQgdGltZW91dElkLCBET01UaW1lciopOwotICAgIHZvaWQgcmVt
b3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKLSAgICBET01UaW1lciogZmluZFRpbWVvdXQoaW50
IHRpbWVvdXRJZCk7Ci0gICAgCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBib29s
IGlzWEhUTUwpOwogCkBAIC0xMDkxLDkgKzEwODYsNiBAQCBwcml2YXRlOgogI2lmIFVTRShMT1df
QkFORFdJRFRIX0RJU1BMQVkpCiAgICAgYm9vbCBtX2luTG93QmFuZHdpZHRoRGlzcGxheTsKICNl
bmRpZgotCi0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRE9NVGltZXIqPiBUaW1lb3V0c01hcDsK
LSAgICBUaW1lb3V0c01hcCBtX3RpbWVvdXRzOwogfTsKIAogaW5saW5lIGJvb2wgRG9jdW1lbnQ6
Omhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0Cg==
</data>
<flag name="review"
          id="12227"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26084</attachid>
            <date>2008-12-16 20:14:31 -0800</date>
            <delta_ts>2008-12-16 22:04:59 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>patch_v2.txt</filename>
            <type>text/plain</type>
            <size>13934</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTM1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDgtMTItMTYgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzU1CisgICAgICAgIFBy
ZXBhcmUgdG8gYWRkIGNyZWF0ZS9yZW1vdmUgdGltZW91dCBtZXRob2RzIHRvIEpTV29ya2VyQ29u
dGV4dCBieSBtb3ZpbmcKKyAgICAgICAgdGltZXItc3BlY2lmaWMgY29kZSBmcm9tIEpTRE9NV2lu
ZG93QmFzZSB0byBET01UaW1lci4KKyAgICAgICAgTW92ZWQgZXZlcnl0aGluZyBKUy1yZWxhdGVk
IGZyb20gRE9NVGltZXIgdG8gU2NoZWR1bGVkQWN0aW9uLgorICAgICAgICBOb3cgU2NoZWR1bGVk
QWN0aW9uIGlzIHdoYXQgaXQgd2FudGVkIHRvIGJlIGFsbCB0aGUgdGltZTogYSBKUyBlbmdpbmUt
c3BlY2lmaWMgCisgICAgICAgIGNvbnRhaW5lciBmb3IgdGltZXIgY2FsbGJhY2sgdGhhdCBrbm93
cyBob3cgdG8gaW52b2tlIGl0LgorICAgICAgICBET01UaW1lciBpcyBub3QgYW55bW9yZSBKUy1z
cGVjaWZpYy4KKworICAgICAgICBUaGlzIGlzIG1vc3RseSBtb3ZpbmcgdGhlIGNvZGUgYXJvdW5k
LiBObyBpbnRlbmRlZCBmdW5jdGlvbmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9ET01UaW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6RE9NVGltZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6On5ET01UaW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpET01UaW1lcjo6aW5zdGFsbCk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6cmVtb3Zl
QnlJZCk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6ZmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NVGltZXI6OnN0b3ApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVRpbWVyLmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6aW5zdGFsbFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3dCYXNlOjpyZW1vdmVUaW1lb3V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaDoKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkZFRpbWVvdXQpOgorCiAy
MDA4LTEyLTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBhbmQgbGFuZGVkIGJ5IENhbWVyb24gWndhcmljaC4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvRE9NVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvRE9N
VGltZXIuY3BwCShyZXZpc2lvbiAzOTI0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvRE9NVGlt
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNiArMjgsMjAgQEAKICNpbmNsdWRlICJET01U
aW1lci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQgTWF4VGltZXJOZXN0aW5nTGV2ZWwgPSA1Oworc3Rh
dGljIGNvbnN0IGRvdWJsZSBPbmVNaWxsaXNlY29uZCA9IDAuMDAxOworc3RhdGljIGNvbnN0IGRv
dWJsZSBNaW5UaW1lckludGVydmFsID0gMC4wMTA7IC8vIDEwIG1pbGxpc2Vjb25kcworCiBpbnQg
RE9NVGltZXI6Om1fdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwogCi1ET01UaW1lcjo6RE9NVGltZXIo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24p
CitET01UaW1lcjo6RE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2No
ZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCiAgICAg
OiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fYWN0aW9uKGFjdGlvbikK
ICAgICAsIG1fbmV4dEZpcmVJbnRlcnZhbCgwKQpAQCAtNTEsMjggKzU1LDc2IEBAIERPTVRpbWVy
OjpET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICBtX3RpbWVvdXRJZCA9IGxhc3RV
c2VkVGltZW91dElkOwogICAgIAogICAgIG1fbmVzdGluZ0xldmVsID0gbV90aW1lck5lc3RpbmdM
ZXZlbCArIDE7CisKKyAgICAvLyBGSVhNRTogbW92ZSB0aGUgdGltZW91dCBtYXAgYW5kIEFQSSB0
byBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHRvIGJlIGFibGUKKyAgICAvLyB0byBjcmVhdGUgdGlt
ZW91dHMgZnJvbSBXb3JrZXJzLgorICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
JiYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOworICAgIHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+YWRkVGltZW91dChtX3Rp
bWVvdXRJZCwgdGhpcyk7CisKKyAgICBkb3VibGUgaW50ZXJ2YWxNaWxsaXNlY29uZHMgPSBzdGQ6
Om1heChPbmVNaWxsaXNlY29uZCwgdGltZW91dCAqIE9uZU1pbGxpc2Vjb25kKTsKKworICAgIC8v
IFVzZSBhIG1pbmltdW0gaW50ZXJ2YWwgb2YgMTAgbXMgdG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMs
IGJ1dCBvbmx5IG9uY2Ugd2UndmUKKyAgICAvLyBuZXN0ZWQgZW5vdWdoIHRvIG5vdGljZSB0aGF0
IHdlJ3JlIHJlcGVhdGluZy4KKyAgICAvLyBGYXN0ZXIgdGltZXJzIG1pZ2h0IGJlICJiZXR0ZXIi
LCBidXQgdGhleSdyZSBpbmNvbXBhdGlibGUuCisgICAgaWYgKGludGVydmFsTWlsbGlzZWNvbmRz
IDwgTWluVGltZXJJbnRlcnZhbCAmJiBtX25lc3RpbmdMZXZlbCA+PSBNYXhUaW1lck5lc3RpbmdM
ZXZlbCkKKyAgICAgICAgaW50ZXJ2YWxNaWxsaXNlY29uZHMgPSBNaW5UaW1lckludGVydmFsOwor
ICAgIGlmIChzaW5nbGVTaG90KQorICAgICAgICBzdGFydE9uZVNob3QoaW50ZXJ2YWxNaWxsaXNl
Y29uZHMpOworICAgIGVsc2UKKyAgICAgICAgc3RhcnRSZXBlYXRpbmcoaW50ZXJ2YWxNaWxsaXNl
Y29uZHMpOwogfQogCiBET01UaW1lcjo6fkRPTVRpbWVyKCkKIHsKLSAgICBpZiAobV9hY3Rpb24p
IHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIGRlbGV0ZSBtX2Fj
dGlvbjsKLSAgICB9CisgICAgZGVsZXRlIG1fYWN0aW9uOworfQorCitpbnQgRE9NVGltZXI6Omlu
c3RhbGwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBh
Y3Rpb24sIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCit7CisgICAgRE9NVGltZXIqIHRp
bWVyID0gbmV3IERPTVRpbWVyKGNvbnRleHQsIGFjdGlvbiwgdGltZW91dCwgc2luZ2xlU2hvdCk7
CisgICAgcmV0dXJuIHRpbWVyLT5tX3RpbWVvdXRJZDsKK30KKwordm9pZCBET01UaW1lcjo6cmVt
b3ZlQnlJZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQgdGltZW91dElkKQor
eworICAgIC8vIHRpbWVvdXQgSURzIGhhdmUgdG8gYmUgcG9zaXRpdmUsIGFuZCAwIGFuZCAtMSBh
cmUgdW5zYWZlIHRvCisgICAgLy8gZXZlbiBsb29rIHVwIHNpbmNlIHRoZXkgYXJlIHRoZSBlbXB0
eSBhbmQgZGVsZXRlZCB2YWx1ZQorICAgIC8vIHJlc3BlY3RpdmVseQorICAgIGlmICh0aW1lb3V0
SWQgPD0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBtb3ZlIHRoZSB0aW1lb3V0
IG1hcCBhbmQgQVBJIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8gYmUgYWJsZQorICAgIC8v
IHRvIGNyZWF0ZSB0aW1lb3V0cyBmcm9tIFdvcmtlcnMuCisgICAgQVNTRVJUKGNvbnRleHQgJiYg
Y29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRl
eHQpLT5yZW1vdmVUaW1lb3V0KHRpbWVvdXRJZCk7CiB9CiAKIHZvaWQgRE9NVGltZXI6OmZpcmVk
KCkKIHsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgIC8vIEZJWE1FOiBtYWtlIGl0IHdvcmsgd2l0aCBXb3JrZXJzIFNF
QyB0b28uCi0gICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwotICAgICAgICBp
ZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZG9jdW1lbnQtPmZyYW1lKCkp
KSB7Ci0gICAgICAgICAgICBtX3RpbWVyTmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2ZWw7Ci0g
ICAgICAgICAgICB3aW5kb3ctPnRpbWVyRmlyZWQodGhpcyk7Ci0gICAgICAgICAgICBtX3RpbWVy
TmVzdGluZ0xldmVsID0gMDsKKyAgICBtX3RpbWVyTmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2
ZWw7CisKKyAgICAvLyBTaW1wbGUgY2FzZSBmb3Igbm9uLW9uZS1zaG90IHRpbWVycy4KKyAgICBp
ZiAoaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAocmVwZWF0SW50ZXJ2YWwoKSAmJiByZXBlYXRJ
bnRlcnZhbCgpIDwgTWluVGltZXJJbnRlcnZhbCkgeworICAgICAgICAgICAgbV9uZXN0aW5nTGV2
ZWwrKzsKKyAgICAgICAgICAgIGlmIChtX25lc3RpbmdMZXZlbCA+PSBNYXhUaW1lck5lc3RpbmdM
ZXZlbCkKKyAgICAgICAgICAgICAgICBhdWdtZW50UmVwZWF0SW50ZXJ2YWwoTWluVGltZXJJbnRl
cnZhbCAtIHJlcGVhdEludGVydmFsKCkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBObyBhY2Nlc3MgdG8gbWVtYmVyIHZhcmlhYmxlcyBhZnRlciB0aGlzIHBvaW50LCBpdCBjYW4g
ZGVsZXRlIHRoZSB0aW1lci4KKyAgICAgICAgbV9hY3Rpb24tPmV4ZWN1dGUoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICAvLyBEZWxldGUgdGltZXIgYmVmb3JlIGV4ZWN1
dGluZyB0aGUgYWN0aW9uIGZvciBvbmUtc2hvdCB0aW1lcnMuCisgICAgU2NoZWR1bGVkQWN0aW9u
KiBhY3Rpb24gPSBtX2FjdGlvbjsKKyAgICBtX2FjdGlvbiA9IDA7CisgICAgLy8gTm8gYWNjZXNz
IHRvIG1lbWJlciB2YXJpYWJsZXMgYWZ0ZXIgdGhpcyBwb2ludC4KKyAgICBkZWxldGUgdGhpczsK
KworICAgIGFjdGlvbi0+ZXhlY3V0ZShjb250ZXh0KTsKKyAgICBkZWxldGUgYWN0aW9uOworICAg
IG1fdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwogfQogCiBib29sIERPTVRpbWVyOjpoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdApAQCAtOTIsNyArMTQ0LDYgQEAgdm9pZCBET01UaW1lcjo6c3RvcCgp
CiAgICAgLy8gTmVlZCB0byByZWxlYXNlIEpTIG9iamVjdHMgcG90ZW50aWFsbHkgcHJvdGVjdGVk
IGJ5IFNjaGVkdWxlZEFjdGlvbgogICAgIC8vIGJlY2F1c2UgdGhleSBjYW4gZm9ybSBjaXJjdWxh
ciByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICAvLyB3
aGljaCB3aWxsIGNhdXNlIGEgbWVtb3J5IGxlYWsuCi0gICAgSlNDOjpKU0xvY2sgbG9jayhmYWxz
ZSk7CiAgICAgZGVsZXRlIG1fYWN0aW9uOwogICAgIG1fYWN0aW9uID0gMDsKIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvRE9NVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTVRpbWVyLmgJKHJldmlzaW9uIDM5MjQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01UaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyMiArMzIsMTYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU0RPTVdpbmRvd0Jhc2U7CiBjbGFzcyBTY2hlZHVsZWRB
Y3Rpb247CiAKIGNsYXNzIERPTVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgLy8gQ3JlYXRlcyBhIG5ldyB0aW1lciB3aXRoIHRo
ZSBuZXh0IGlkIGFuZCBuZXN0aW5nIGxldmVsLgotICAgIERPTVRpbWVyKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBTY2hlZHVsZWRBY3Rpb24qKTsKICAgICB2aXJ0dWFsIH5ET01UaW1lcigpOwog
Ci0gICAgaW50IHRpbWVvdXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZW91dElkOyB9Ci0KLSAg
ICBpbnQgbmVzdGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9uZXN0aW5nTGV2ZWw7IH0KLSAg
ICB2b2lkIHNldE5lc3RpbmdMZXZlbChpbnQgbikgeyBtX25lc3RpbmdMZXZlbCA9IG47IH0KLQot
ICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0K
LSAgICBTY2hlZHVsZWRBY3Rpb24qIHRha2VBY3Rpb24oKSB7IFNjaGVkdWxlZEFjdGlvbiogYSA9
IG1fYWN0aW9uOyBtX2FjdGlvbiA9IDA7IHJldHVybiBhOyB9CisgICAgLy8gQ3JlYXRlcyBhIG5l
dyB0aW1lciBvd25lZCBieSBzcGVjaWZpZWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgc3RhcnRz
IGl0CisgICAgLy8gYW5kIHJldHVybnMgaXRzIElkLgorICAgIHN0YXRpYyBpbnQgaW5zdGFsbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NoZWR1bGVkQWN0aW9uKiwgaW50IHRpbWVvdXQsIGJv
b2wgc2luZ2xlU2hvdCk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlQnlJZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgaW50IHRpbWVvdXRJZCk7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CkBAIC01OCwxNCArNTIs
MTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKIAogcHJpdmF0ZToKKyAg
ICBET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NoZWR1bGVkQWN0aW9uKiwgaW50
IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCk7CisKICAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKTsK
IAogICAgIGludCBtX3RpbWVvdXRJZDsKICAgICBpbnQgbV9uZXN0aW5nTGV2ZWw7CiAgICAgU2No
ZWR1bGVkQWN0aW9uKiBtX2FjdGlvbjsKLSAgICBzdGF0aWMgaW50IG1fdGltZXJOZXN0aW5nTGV2
ZWw7CisKICAgICBkb3VibGUgbV9uZXh0RmlyZUludGVydmFsOwogICAgIGRvdWJsZSBtX3JlcGVh
dEludGVydmFsOworCisgICAgc3RhdGljIGludCBtX3RpbWVyTmVzdGluZ0xldmVsOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmNwcAkocmV2aXNpb24gMzkyNDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDkgKzk3LDYgQEAgc3RhdGljIHZv
aWQgc2V0SlNET01XaW5kb3dCYXNlWFNMVFByb2NlcwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNvbnN0IGludCBjTWF4VGltZXJOZXN0aW5nTGV2ZWwgPSA1OwotY29uc3QgZG91YmxlIGNNaW5p
bXVtVGltZXJJbnRlcnZhbCA9IDAuMDEwOwotCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEpTRE9N
V2luZG93QmFzZSBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIGNvbnN0IENsYXNz
SW5mbyBKU0RPTVdpbmRvd0Jhc2U6OnNfaW5mbyA9IHsgIldpbmRvdyIsIDAsICZKU0RPTVdpbmRv
d0Jhc2VUYWJsZSwgMCB9OwpAQCAtODI0LDIzICs4MjEsNyBAQCB2b2lkIEpTRE9NV2luZG93QmFz
ZTo6c2V0UmV0dXJuVmFsdWVTbG90CiAKIGludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1l
b3V0KFNjaGVkdWxlZEFjdGlvbiogYSwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKIHsKLSAgICBE
T01UaW1lciogdGltZXIgPSBuZXcgRE9NVGltZXIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBh
KTsKLSAgICBpbnQgdGltZW91dElkID0gdGltZXItPnRpbWVvdXRJZCgpOwotCi0gICAgQVNTRVJU
KGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7Ci0gICAgZCgpLT5pbXBsLT5kb2N1bWVudCgpLT5hZGRU
aW1lb3V0KHRpbWVvdXRJZCwgdGltZXIpOwotICAgIAotICAgIC8vIFVzZSBhIG1pbmltdW0gaW50
ZXJ2YWwgb2YgMTAgbXMgdG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMsIGJ1dCBvbmx5IG9uY2Ugd2Un
dmUKLSAgICAvLyBuZXN0ZWQgZW5vdWdoIHRvIG5vdGljZSB0aGF0IHdlJ3JlIHJlcGVhdGluZy4K
LSAgICAvLyBGYXN0ZXIgdGltZXJzIG1pZ2h0IGJlICJiZXR0ZXIiLCBidXQgdGhleSdyZSBpbmNv
bXBhdGlibGUuCi0gICAgZG91YmxlIGludGVydmFsID0gbWF4KDAuMDAxLCB0ICogMC4wMDEpOwot
ICAgIGlmIChpbnRlcnZhbCA8IGNNaW5pbXVtVGltZXJJbnRlcnZhbCAmJiB0aW1lci0+bmVzdGlu
Z0xldmVsKCkgPj0gY01heFRpbWVyTmVzdGluZ0xldmVsKQotICAgICAgICBpbnRlcnZhbCA9IGNN
aW5pbXVtVGltZXJJbnRlcnZhbDsKLSAgICBpZiAoc2luZ2xlU2hvdCkKLSAgICAgICAgdGltZXIt
PnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7Ci0gICAgZWxzZQotICAgICAgICB0aW1lci0+c3RhcnRS
ZXBlYXRpbmcoaW50ZXJ2YWwpOwotICAgIHJldHVybiB0aW1lb3V0SWQ7CisgICAgcmV0dXJuIERP
TVRpbWVyOjppbnN0YWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYSwgdCwgc2luZ2xlU2hv
dCk7CiB9CiAKIGludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KGNvbnN0IFVTdHJp
bmcmIGhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpCkBAIC04NTUsNDUgKzgzNiw3IEBA
IGludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWMKIAogdm9pZCBKU0RPTVdp
bmRvd0Jhc2U6OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCkKIHsKLSAgICAvLyB0aW1lb3V0
IElEcyBoYXZlIHRvIGJlIHBvc2l0aXZlLCBhbmQgMCBhbmQgLTEgYXJlIHVuc2FmZSB0bwotICAg
IC8vIGV2ZW4gbG9vayB1cCBzaW5jZSB0aGV5IGFyZSB0aGUgZW1wdHkgYW5kIGRlbGV0ZWQgdmFs
dWUKLSAgICAvLyByZXNwZWN0aXZlbHkKLSAgICBpZiAodGltZW91dElkIDw9IDApCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3VtZW50KCkpOwotICAgIGQoKS0+
aW1wbC0+ZG9jdW1lbnQoKS0+cmVtb3ZlVGltZW91dCh0aW1lb3V0SWQpOwotfQotCi12b2lkIEpT
RE9NV2luZG93QmFzZTo6dGltZXJGaXJlZChET01UaW1lciogdGltZXIpCi17Ci0gICAgLy8gU2lt
cGxlIGNhc2UgZm9yIG5vbi1vbmUtc2hvdCB0aW1lcnMuCi0gICAgaWYgKHRpbWVyLT5pc0FjdGl2
ZSgpKSB7Ci0gICAgICAgIGludCB0aW1lb3V0SWQgPSB0aW1lci0+dGltZW91dElkKCk7Ci0KLSAg
ICAgICAgdGltZXItPmFjdGlvbigpLT5leGVjdXRlKHNoZWxsKCkpOwotICAgICAgICAvLyBUaGUg
RE9NVGltZXIgb2JqZWN0IG1heSBoYXZlIGJlZW4gZGVsZXRlZCBvciByZXBsYWNlZCBkdXJpbmcg
ZXhlY3V0aW9uLAotICAgICAgICAvLyBzbyB3ZSByZS1mZXRjaCBpdC4KLSAgICAgICAgQVNTRVJU
KGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIHRpbWVyID0gZCgpLT5pbXBsLT5kb2N1
bWVudCgpLT5maW5kVGltZW91dCh0aW1lb3V0SWQpOwotICAgICAgICBpZiAoIXRpbWVyKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKSAm
JiB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKSA8IGNNaW5pbXVtVGltZXJJbnRlcnZhbCkgewotICAg
ICAgICAgICAgdGltZXItPnNldE5lc3RpbmdMZXZlbCh0aW1lci0+bmVzdGluZ0xldmVsKCkgKyAx
KTsKLSAgICAgICAgICAgIGlmICh0aW1lci0+bmVzdGluZ0xldmVsKCkgPj0gY01heFRpbWVyTmVz
dGluZ0xldmVsKQotICAgICAgICAgICAgICAgIHRpbWVyLT5hdWdtZW50UmVwZWF0SW50ZXJ2YWwo
Y01pbmltdW1UaW1lckludGVydmFsIC0gdGltZXItPnJlcGVhdEludGVydmFsKCkpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEZWxldGUgdGltZXIgYmVmb3Jl
IGV4ZWN1dGluZyB0aGUgYWN0aW9uIGZvciBvbmUtc2hvdCB0aW1lcnMuCi0gICAgU2NoZWR1bGVk
QWN0aW9uKiBhY3Rpb24gPSB0aW1lci0+dGFrZUFjdGlvbigpOwotICAgIHJlbW92ZVRpbWVvdXQo
dGltZXItPnRpbWVvdXRJZCgpKTsKLSAgICBhY3Rpb24tPmV4ZWN1dGUoc2hlbGwoKSk7Ci0KLSAg
ICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgZGVsZXRlIGFjdGlvbjsKKyAgICBET01UaW1lcjo6
cmVtb3ZlQnlJZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRpbWVvdXRJZCk7CiB9CiAKIHZv
aWQgSlNET01XaW5kb3dCYXNlOjpkaXNjb25uZWN0RnJhbWUoKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzOTI0NykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEF0b21pY1N0cmluZzsKLSAgICBjbGFz
cyBET01UaW1lcjsKICAgICBjbGFzcyBET01XaW5kb3c7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAg
Y2xhc3MgRnJhbWU7CkBAIC02OCw4ICs2Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgaW50IGluc3RhbGxUaW1lb3V0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiBmdW5j
dGlvbiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsK
ICAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOwogCi0gICAgICAgIHZv
aWQgdGltZXJGaXJlZChET01UaW1lciopOwotCiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAg
ICAgICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0dXJuIHZhbHVlIHdoZW4gdGhl
IHdpbmRvdyBpcyBjbGVhcmVkLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0
aW9uLmNwcAkocmV2aXNpb24gMzkyNDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBAIC00
Niw2ICs0NywxNSBAQCBTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihFeGVjU3RhCiAg
ICAgICAgIG1fYXJncy5hcHBlbmQoKCppdCkuanNWYWx1ZShleGVjKSk7CiB9CiAKK3ZvaWQgU2No
ZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7
CisgICAgLy8gRklYTUU6IG1ha2UgaXQgd29yayB3aXRoIFdvcmtlcnMgU0VDIHRvby4KKyAgICBB
U1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2lu
ZG93ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVudC0+ZnJhbWUoKSkpCisgICAgICBleGVjdXRlKHdp
bmRvdy0+c2hlbGwoKSk7Cit9CisKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKEpTRE9N
V2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKQogewogICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSB3
aW5kb3dTaGVsbC0+d2luZG93KCktPmltcGwoKS0+ZnJhbWUoKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY2hlZHVsZWRBY3Rpb24uaAkocmV2aXNpb24gMzkyNDcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0RPTVdpbmRvd1NoZWxsOworICAg
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgIC8qIEFuIGFjdGlvbiAoZWl0aGVy
IGZ1bmN0aW9uIG9yIHN0cmluZykgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgYSBzcGVjaWZpZWQKICAg
ICAqIHRpbWUgaW50ZXJ2YWwsIGVpdGhlciBvbmNlIG9yIHJlcGVhdGVkbHkuIFVzZWQgZm9yIHdp
bmRvdy5zZXRUaW1lb3V0KCkKQEAgLTM5LDEwICs0MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICA6IG1fY29kZShjb2RlKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAg
ICAgIAorICAgICAgICB2b2lkIGV4ZWN1dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisg
ICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBleGVjdXRlKEpTRE9NV2luZG93U2hlbGwqKTsKIAot
ICAgIHByaXZhdGU6CiAgICAgICAgIEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6SlNWYWx1ZT4gbV9m
dW5jdGlvbjsKICAgICAgICAgVmVjdG9yPEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6SlNWYWx1ZT4g
PiBtX2FyZ3M7CiAgICAgICAgIFN0cmluZyBtX2NvZGU7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAzOTI0NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDI1Miw3ICs0MjUyLDcgQEAgdm9pZCBEb2N1bWVudDo6cGFyc2VETlNQcmVmZXRjaENvbnRyb2xI
ZQogCiB2b2lkIERvY3VtZW50OjphZGRUaW1lb3V0KGludCB0aW1lb3V0SWQsIERPTVRpbWVyKiB0
aW1lcikKIHsKLSAgICBBU1NFUlQoIW1fdGltZW91dHMuZ2V0KHRpbWVvdXRJZCkpOworICAgIEFT
U0VSVCghbV90aW1lb3V0cy5jb250YWlucyh0aW1lb3V0SWQpKTsKICAgICBtX3RpbWVvdXRzLnNl
dCh0aW1lb3V0SWQsIHRpbWVyKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26085</attachid>
            <date>2008-12-16 22:04:59 -0800</date>
            <delta_ts>2008-12-28 01:50:13 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>patch_v2.txt</filename>
            <type>text/plain</type>
            <size>14005</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTM1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDgtMTItMTYgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzU1CisgICAgICAgIFBy
ZXBhcmUgdG8gYWRkIGNyZWF0ZS9yZW1vdmUgdGltZW91dCBtZXRob2RzIHRvIEpTV29ya2VyQ29u
dGV4dCBieSBtb3ZpbmcKKyAgICAgICAgdGltZXItc3BlY2lmaWMgY29kZSBmcm9tIEpTRE9NV2lu
ZG93QmFzZSB0byBET01UaW1lci4KKyAgICAgICAgTW92ZWQgZXZlcnl0aGluZyBKUy1yZWxhdGVk
IGZyb20gRE9NVGltZXIgdG8gU2NoZWR1bGVkQWN0aW9uLgorICAgICAgICBOb3cgU2NoZWR1bGVk
QWN0aW9uIGlzIHdoYXQgaXQgd2FudGVkIHRvIGJlIGFsbCB0aGUgdGltZTogYSBKUyBlbmdpbmUt
c3BlY2lmaWMgCisgICAgICAgIGNvbnRhaW5lciBmb3IgdGltZXIgY2FsbGJhY2sgdGhhdCBrbm93
cyBob3cgdG8gaW52b2tlIGl0LgorICAgICAgICBET01UaW1lciBpcyBub3QgYW55bW9yZSBKUy1z
cGVjaWZpYy4KKworICAgICAgICBUaGlzIGlzIG1vc3RseSBtb3ZpbmcgdGhlIGNvZGUgYXJvdW5k
LiBObyBpbnRlbmRlZCBmdW5jdGlvbmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9ET01UaW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6RE9NVGltZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6On5ET01UaW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpET01UaW1lcjo6aW5zdGFsbCk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6cmVtb3Zl
QnlJZCk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6ZmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NVGltZXI6OnN0b3ApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVRpbWVyLmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6aW5zdGFsbFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3dCYXNlOjpyZW1vdmVUaW1lb3V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaDoKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkZFRpbWVvdXQpOgorCiAy
MDA4LTEyLTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBhbmQgbGFuZGVkIGJ5IENhbWVyb24gWndhcmljaC4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvRE9NVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvRE9N
VGltZXIuY3BwCShyZXZpc2lvbiAzOTI0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvRE9NVGlt
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNiArMjgsMjAgQEAKICNpbmNsdWRlICJET01U
aW1lci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQgbWF4VGltZXJOZXN0aW5nTGV2ZWwgPSA1Oworc3Rh
dGljIGNvbnN0IGRvdWJsZSBvbmVNaWxsaXNlY29uZCA9IDAuMDAxOworc3RhdGljIGNvbnN0IGRv
dWJsZSBtaW5UaW1lckludGVydmFsID0gMC4wMTA7IC8vIDEwIG1pbGxpc2Vjb25kcworCiBpbnQg
RE9NVGltZXI6Om1fdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwogCi1ET01UaW1lcjo6RE9NVGltZXIo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24p
CitET01UaW1lcjo6RE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2No
ZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCiAgICAg
OiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fYWN0aW9uKGFjdGlvbikK
ICAgICAsIG1fbmV4dEZpcmVJbnRlcnZhbCgwKQpAQCAtNTEsMjggKzU1LDc3IEBAIERPTVRpbWVy
OjpET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICBtX3RpbWVvdXRJZCA9IGxhc3RV
c2VkVGltZW91dElkOwogICAgIAogICAgIG1fbmVzdGluZ0xldmVsID0gbV90aW1lck5lc3RpbmdM
ZXZlbCArIDE7CisKKyAgICAvLyBGSVhNRTogbW92ZSB0aGUgdGltZW91dCBtYXAgYW5kIEFQSSB0
byBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHRvIGJlIGFibGUKKyAgICAvLyB0byBjcmVhdGUgdGlt
ZW91dHMgZnJvbSBXb3JrZXJzLgorICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
JiYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOworICAgIHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+YWRkVGltZW91dChtX3Rp
bWVvdXRJZCwgdGhpcyk7CisKKyAgICBkb3VibGUgaW50ZXJ2YWxNaWxsaXNlY29uZHMgPSBzdGQ6
Om1heChvbmVNaWxsaXNlY29uZCwgdGltZW91dCAqIG9uZU1pbGxpc2Vjb25kKTsKKworICAgIC8v
IFVzZSBhIG1pbmltdW0gaW50ZXJ2YWwgb2YgMTAgbXMgdG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMs
IGJ1dCBvbmx5IG9uY2Ugd2UndmUKKyAgICAvLyBuZXN0ZWQgZW5vdWdoIHRvIG5vdGljZSB0aGF0
IHdlJ3JlIHJlcGVhdGluZy4KKyAgICAvLyBGYXN0ZXIgdGltZXJzIG1pZ2h0IGJlICJiZXR0ZXIi
LCBidXQgdGhleSdyZSBpbmNvbXBhdGlibGUuCisgICAgaWYgKGludGVydmFsTWlsbGlzZWNvbmRz
IDwgbWluVGltZXJJbnRlcnZhbCAmJiBtX25lc3RpbmdMZXZlbCA+PSBtYXhUaW1lck5lc3RpbmdM
ZXZlbCkKKyAgICAgICAgaW50ZXJ2YWxNaWxsaXNlY29uZHMgPSBtaW5UaW1lckludGVydmFsOwor
ICAgIGlmIChzaW5nbGVTaG90KQorICAgICAgICBzdGFydE9uZVNob3QoaW50ZXJ2YWxNaWxsaXNl
Y29uZHMpOworICAgIGVsc2UKKyAgICAgICAgc3RhcnRSZXBlYXRpbmcoaW50ZXJ2YWxNaWxsaXNl
Y29uZHMpOwogfQogCiBET01UaW1lcjo6fkRPTVRpbWVyKCkKIHsKLSAgICBpZiAobV9hY3Rpb24p
IHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIGRlbGV0ZSBtX2Fj
dGlvbjsKLSAgICB9CisgICAgZGVsZXRlIG1fYWN0aW9uOworfQorCitpbnQgRE9NVGltZXI6Omlu
c3RhbGwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBh
Y3Rpb24sIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCit7CisgICAgRE9NVGltZXIqIHRp
bWVyID0gbmV3IERPTVRpbWVyKGNvbnRleHQsIGFjdGlvbiwgdGltZW91dCwgc2luZ2xlU2hvdCk7
CisgICAgcmV0dXJuIHRpbWVyLT5tX3RpbWVvdXRJZDsKK30KKwordm9pZCBET01UaW1lcjo6cmVt
b3ZlQnlJZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQgdGltZW91dElkKQor
eworICAgIC8vIHRpbWVvdXQgSURzIGhhdmUgdG8gYmUgcG9zaXRpdmUsIGFuZCAwIGFuZCAtMSBh
cmUgdW5zYWZlIHRvCisgICAgLy8gZXZlbiBsb29rIHVwIHNpbmNlIHRoZXkgYXJlIHRoZSBlbXB0
eSBhbmQgZGVsZXRlZCB2YWx1ZQorICAgIC8vIHJlc3BlY3RpdmVseQorICAgIGlmICh0aW1lb3V0
SWQgPD0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBtb3ZlIHRoZSB0aW1lb3V0
IG1hcCBhbmQgQVBJIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8gYmUgYWJsZQorICAgIC8v
IHRvIGNyZWF0ZSB0aW1lb3V0cyBmcm9tIFdvcmtlcnMuCisgICAgQVNTRVJUKGNvbnRleHQgJiYg
Y29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRl
eHQpLT5yZW1vdmVUaW1lb3V0KHRpbWVvdXRJZCk7CiB9CiAKIHZvaWQgRE9NVGltZXI6OmZpcmVk
KCkKIHsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgIC8vIEZJWE1FOiBtYWtlIGl0IHdvcmsgd2l0aCBXb3JrZXJzIFNF
QyB0b28uCi0gICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwotICAgICAgICBp
ZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZG9jdW1lbnQtPmZyYW1lKCkp
KSB7Ci0gICAgICAgICAgICBtX3RpbWVyTmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2ZWw7Ci0g
ICAgICAgICAgICB3aW5kb3ctPnRpbWVyRmlyZWQodGhpcyk7Ci0gICAgICAgICAgICBtX3RpbWVy
TmVzdGluZ0xldmVsID0gMDsKKyAgICBtX3RpbWVyTmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2
ZWw7CisKKyAgICAvLyBTaW1wbGUgY2FzZSBmb3Igbm9uLW9uZS1zaG90IHRpbWVycy4KKyAgICBp
ZiAoaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAocmVwZWF0SW50ZXJ2YWwoKSAmJiByZXBlYXRJ
bnRlcnZhbCgpIDwgbWluVGltZXJJbnRlcnZhbCkgeworICAgICAgICAgICAgbV9uZXN0aW5nTGV2
ZWwrKzsKKyAgICAgICAgICAgIGlmIChtX25lc3RpbmdMZXZlbCA+PSBtYXhUaW1lck5lc3RpbmdM
ZXZlbCkKKyAgICAgICAgICAgICAgICBhdWdtZW50UmVwZWF0SW50ZXJ2YWwobWluVGltZXJJbnRl
cnZhbCAtIHJlcGVhdEludGVydmFsKCkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBObyBhY2Nlc3MgdG8gbWVtYmVyIHZhcmlhYmxlcyBhZnRlciB0aGlzIHBvaW50LCBpdCBjYW4g
ZGVsZXRlIHRoZSB0aW1lci4KKyAgICAgICAgbV9hY3Rpb24tPmV4ZWN1dGUoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICAvLyBEZWxldGUgdGltZXIgYmVmb3JlIGV4ZWN1
dGluZyB0aGUgYWN0aW9uIGZvciBvbmUtc2hvdCB0aW1lcnMuCisgICAgU2NoZWR1bGVkQWN0aW9u
KiBhY3Rpb24gPSBtX2FjdGlvbjsKKyAgICBtX2FjdGlvbiA9IDA7CisgICAgLy8gTm8gYWNjZXNz
IHRvIG1lbWJlciB2YXJpYWJsZXMgYWZ0ZXIgdGhpcyBwb2ludC4KKyAgICBkZWxldGUgdGhpczsK
KworICAgIGFjdGlvbi0+ZXhlY3V0ZShjb250ZXh0KTsKKyAgICBkZWxldGUgYWN0aW9uOworICAg
IC8vIFRoaXMgaXMgc3RhdGljLCBzbyBvayB0byBhc3NpZ24gYWZ0ZXIgZGVsZXRpbmcgdGhlIGlu
c3RhbmNlLgorICAgIG1fdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwogfQogCiBib29sIERPTVRpbWVy
OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdApAQCAtOTIsNyArMTQ1LDYgQEAgdm9pZCBET01U
aW1lcjo6c3RvcCgpCiAgICAgLy8gTmVlZCB0byByZWxlYXNlIEpTIG9iamVjdHMgcG90ZW50aWFs
bHkgcHJvdGVjdGVkIGJ5IFNjaGVkdWxlZEFjdGlvbgogICAgIC8vIGJlY2F1c2UgdGhleSBjYW4g
Zm9ybSBjaXJjdWxhciByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQKICAgICAvLyB3aGljaCB3aWxsIGNhdXNlIGEgbWVtb3J5IGxlYWsuCi0gICAgSlNDOjpKU0xv
Y2sgbG9jayhmYWxzZSk7CiAgICAgZGVsZXRlIG1fYWN0aW9uOwogICAgIG1fYWN0aW9uID0gMDsK
IH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvRE9NVGltZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmgJKHJldmlzaW9uIDM5MjQ3KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01UaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyMiArMzIsMTYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU0RPTVdpbmRvd0Jhc2U7CiBjbGFz
cyBTY2hlZHVsZWRBY3Rpb247CiAKIGNsYXNzIERPTVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSwg
cHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgLy8gQ3JlYXRlcyBhIG5ldyB0
aW1lciB3aXRoIHRoZSBuZXh0IGlkIGFuZCBuZXN0aW5nIGxldmVsLgotICAgIERPTVRpbWVyKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY2hlZHVsZWRBY3Rpb24qKTsKICAgICB2aXJ0dWFsIH5E
T01UaW1lcigpOwogCi0gICAgaW50IHRpbWVvdXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZW91
dElkOyB9Ci0KLSAgICBpbnQgbmVzdGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9uZXN0aW5n
TGV2ZWw7IH0KLSAgICB2b2lkIHNldE5lc3RpbmdMZXZlbChpbnQgbikgeyBtX25lc3RpbmdMZXZl
bCA9IG47IH0KLQotICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9hY3Rpb247IH0KLSAgICBTY2hlZHVsZWRBY3Rpb24qIHRha2VBY3Rpb24oKSB7IFNjaGVkdWxl
ZEFjdGlvbiogYSA9IG1fYWN0aW9uOyBtX2FjdGlvbiA9IDA7IHJldHVybiBhOyB9CisgICAgLy8g
Q3JlYXRlcyBhIG5ldyB0aW1lciBvd25lZCBieSBzcGVjaWZpZWQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgc3RhcnRzIGl0CisgICAgLy8gYW5kIHJldHVybnMgaXRzIElkLgorICAgIHN0YXRpYyBp
bnQgaW5zdGFsbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NoZWR1bGVkQWN0aW9uKiwgaW50
IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlQnlJZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgaW50IHRpbWVvdXRJZCk7CiAKICAgICAvLyBBY3RpdmVE
T01PYmplY3QKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CkBA
IC01OCwxNCArNTIsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKIAog
cHJpdmF0ZToKKyAgICBET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NoZWR1bGVk
QWN0aW9uKiwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCk7CisKICAgICB2aXJ0dWFsIHZv
aWQgZmlyZWQoKTsKIAogICAgIGludCBtX3RpbWVvdXRJZDsKICAgICBpbnQgbV9uZXN0aW5nTGV2
ZWw7CiAgICAgU2NoZWR1bGVkQWN0aW9uKiBtX2FjdGlvbjsKLSAgICBzdGF0aWMgaW50IG1fdGlt
ZXJOZXN0aW5nTGV2ZWw7CisKICAgICBkb3VibGUgbV9uZXh0RmlyZUludGVydmFsOwogICAgIGRv
dWJsZSBtX3JlcGVhdEludGVydmFsOworCisgICAgc3RhdGljIGludCBtX3RpbWVyTmVzdGluZ0xl
dmVsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzkyNDcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDkgKzk3LDYg
QEAgc3RhdGljIHZvaWQgc2V0SlNET01XaW5kb3dCYXNlWFNMVFByb2NlcwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNvbnN0IGludCBjTWF4VGltZXJOZXN0aW5nTGV2ZWwgPSA1OwotY29uc3Qg
ZG91YmxlIGNNaW5pbXVtVGltZXJJbnRlcnZhbCA9IDAuMDEwOwotCiAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vIEpTRE9NV2luZG93QmFzZSBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAK
IGNvbnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd0Jhc2U6OnNfaW5mbyA9IHsgIldpbmRvdyIsIDAs
ICZKU0RPTVdpbmRvd0Jhc2VUYWJsZSwgMCB9OwpAQCAtODI0LDIzICs4MjEsNyBAQCB2b2lkIEpT
RE9NV2luZG93QmFzZTo6c2V0UmV0dXJuVmFsdWVTbG90CiAKIGludCBKU0RPTVdpbmRvd0Jhc2U6
Omluc3RhbGxUaW1lb3V0KFNjaGVkdWxlZEFjdGlvbiogYSwgaW50IHQsIGJvb2wgc2luZ2xlU2hv
dCkKIHsKLSAgICBET01UaW1lciogdGltZXIgPSBuZXcgRE9NVGltZXIoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBhKTsKLSAgICBpbnQgdGltZW91dElkID0gdGltZXItPnRpbWVvdXRJZCgpOwot
Ci0gICAgQVNTRVJUKGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7Ci0gICAgZCgpLT5pbXBsLT5kb2N1
bWVudCgpLT5hZGRUaW1lb3V0KHRpbWVvdXRJZCwgdGltZXIpOwotICAgIAotICAgIC8vIFVzZSBh
IG1pbmltdW0gaW50ZXJ2YWwgb2YgMTAgbXMgdG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMsIGJ1dCBv
bmx5IG9uY2Ugd2UndmUKLSAgICAvLyBuZXN0ZWQgZW5vdWdoIHRvIG5vdGljZSB0aGF0IHdlJ3Jl
IHJlcGVhdGluZy4KLSAgICAvLyBGYXN0ZXIgdGltZXJzIG1pZ2h0IGJlICJiZXR0ZXIiLCBidXQg
dGhleSdyZSBpbmNvbXBhdGlibGUuCi0gICAgZG91YmxlIGludGVydmFsID0gbWF4KDAuMDAxLCB0
ICogMC4wMDEpOwotICAgIGlmIChpbnRlcnZhbCA8IGNNaW5pbXVtVGltZXJJbnRlcnZhbCAmJiB0
aW1lci0+bmVzdGluZ0xldmVsKCkgPj0gY01heFRpbWVyTmVzdGluZ0xldmVsKQotICAgICAgICBp
bnRlcnZhbCA9IGNNaW5pbXVtVGltZXJJbnRlcnZhbDsKLSAgICBpZiAoc2luZ2xlU2hvdCkKLSAg
ICAgICAgdGltZXItPnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7Ci0gICAgZWxzZQotICAgICAgICB0
aW1lci0+c3RhcnRSZXBlYXRpbmcoaW50ZXJ2YWwpOwotICAgIHJldHVybiB0aW1lb3V0SWQ7Cisg
ICAgcmV0dXJuIERPTVRpbWVyOjppbnN0YWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYSwg
dCwgc2luZ2xlU2hvdCk7CiB9CiAKIGludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0
KGNvbnN0IFVTdHJpbmcmIGhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpCkBAIC04NTUs
NDUgKzgzNiw3IEBAIGludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWMKIAog
dm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCkKIHsKLSAg
ICAvLyB0aW1lb3V0IElEcyBoYXZlIHRvIGJlIHBvc2l0aXZlLCBhbmQgMCBhbmQgLTEgYXJlIHVu
c2FmZSB0bwotICAgIC8vIGV2ZW4gbG9vayB1cCBzaW5jZSB0aGV5IGFyZSB0aGUgZW1wdHkgYW5k
IGRlbGV0ZWQgdmFsdWUKLSAgICAvLyByZXNwZWN0aXZlbHkKLSAgICBpZiAodGltZW91dElkIDw9
IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3VtZW50KCkp
OwotICAgIGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+cmVtb3ZlVGltZW91dCh0aW1lb3V0SWQpOwot
fQotCi12b2lkIEpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJlZChET01UaW1lciogdGltZXIpCi17
Ci0gICAgLy8gU2ltcGxlIGNhc2UgZm9yIG5vbi1vbmUtc2hvdCB0aW1lcnMuCi0gICAgaWYgKHRp
bWVyLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGludCB0aW1lb3V0SWQgPSB0aW1lci0+dGltZW91
dElkKCk7Ci0KLSAgICAgICAgdGltZXItPmFjdGlvbigpLT5leGVjdXRlKHNoZWxsKCkpOwotICAg
ICAgICAvLyBUaGUgRE9NVGltZXIgb2JqZWN0IG1heSBoYXZlIGJlZW4gZGVsZXRlZCBvciByZXBs
YWNlZCBkdXJpbmcgZXhlY3V0aW9uLAotICAgICAgICAvLyBzbyB3ZSByZS1mZXRjaCBpdC4KLSAg
ICAgICAgQVNTRVJUKGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIHRpbWVyID0gZCgp
LT5pbXBsLT5kb2N1bWVudCgpLT5maW5kVGltZW91dCh0aW1lb3V0SWQpOwotICAgICAgICBpZiAo
IXRpbWVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aW1lci0+cmVwZWF0
SW50ZXJ2YWwoKSAmJiB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKSA8IGNNaW5pbXVtVGltZXJJbnRl
cnZhbCkgewotICAgICAgICAgICAgdGltZXItPnNldE5lc3RpbmdMZXZlbCh0aW1lci0+bmVzdGlu
Z0xldmVsKCkgKyAxKTsKLSAgICAgICAgICAgIGlmICh0aW1lci0+bmVzdGluZ0xldmVsKCkgPj0g
Y01heFRpbWVyTmVzdGluZ0xldmVsKQotICAgICAgICAgICAgICAgIHRpbWVyLT5hdWdtZW50UmVw
ZWF0SW50ZXJ2YWwoY01pbmltdW1UaW1lckludGVydmFsIC0gdGltZXItPnJlcGVhdEludGVydmFs
KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEZWxldGUg
dGltZXIgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9uIGZvciBvbmUtc2hvdCB0aW1lcnMuCi0g
ICAgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24gPSB0aW1lci0+dGFrZUFjdGlvbigpOwotICAgIHJl
bW92ZVRpbWVvdXQodGltZXItPnRpbWVvdXRJZCgpKTsKLSAgICBhY3Rpb24tPmV4ZWN1dGUoc2hl
bGwoKSk7Ci0KLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgZGVsZXRlIGFjdGlvbjsKKyAg
ICBET01UaW1lcjo6cmVtb3ZlQnlJZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRpbWVvdXRJ
ZCk7CiB9CiAKIHZvaWQgSlNET01XaW5kb3dCYXNlOjpkaXNjb25uZWN0RnJhbWUoKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzOTI0NykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEF0b21pY1N0cmlu
ZzsKLSAgICBjbGFzcyBET01UaW1lcjsKICAgICBjbGFzcyBET01XaW5kb3c7CiAgICAgY2xhc3Mg
RXZlbnQ7CiAgICAgY2xhc3MgRnJhbWU7CkBAIC02OCw4ICs2Nyw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlKiBmdW5jdGlvbiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBz
aW5nbGVTaG90KTsKICAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOwog
Ci0gICAgICAgIHZvaWQgdGltZXJGaXJlZChET01UaW1lciopOwotCiAgICAgICAgIHZvaWQgY2xl
YXIoKTsKIAogICAgICAgICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0dXJuIHZh
bHVlIHdoZW4gdGhlIHdpbmRvdyBpcyBjbGVhcmVkLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMzkyNDcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9j
ay5oPgogCkBAIC00Niw2ICs0NywxNSBAQCBTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlv
bihFeGVjU3RhCiAgICAgICAgIG1fYXJncy5hcHBlbmQoKCppdCkuanNWYWx1ZShleGVjKSk7CiB9
CiAKK3ZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IG1ha2UgaXQgd29yayB3aXRoIFdvcmtlcnMgU0VD
IHRvby4KKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmIChKU0RP
TVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVudC0+ZnJhbWUoKSkpCisgICAg
ICAgIGV4ZWN1dGUod2luZG93LT5zaGVsbCgpKTsKK30KKwogdm9pZCBTY2hlZHVsZWRBY3Rpb246
OmV4ZWN1dGUoSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwpCiB7CiAgICAgUmVmUHRyPEZy
YW1lPiBmcmFtZSA9IHdpbmRvd1NoZWxsLT53aW5kb3coKS0+aW1wbCgpLT5mcmFtZSgpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCShyZXZpc2lvbiAzOTI0NykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTRE9NV2lu
ZG93U2hlbGw7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogICAgLyogQW4g
YWN0aW9uIChlaXRoZXIgZnVuY3Rpb24gb3Igc3RyaW5nKSB0byBiZSBleGVjdXRlZCBhZnRlciBh
IHNwZWNpZmllZAogICAgICogdGltZSBpbnRlcnZhbCwgZWl0aGVyIG9uY2Ugb3IgcmVwZWF0ZWRs
eS4gVXNlZCBmb3Igd2luZG93LnNldFRpbWVvdXQoKQpAQCAtMzksMTAgKzQwLDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAgICAgICAgIHsKICAg
ICAgICAgfQorICAgICAgICAgCisgICAgICAgIHZvaWQgZXhlY3V0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CiAKKyAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGV4ZWN1dGUoSlNET01XaW5k
b3dTaGVsbCopOwogCi0gICAgcHJpdmF0ZToKICAgICAgICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlND
OjpKU1ZhbHVlPiBtX2Z1bmN0aW9uOwogICAgICAgICBWZWN0b3I8SlNDOjpQcm90ZWN0ZWRQdHI8
SlNDOjpKU1ZhbHVlPiA+IG1fYXJnczsKICAgICAgICAgU3RyaW5nIG1fY29kZTsKSW5kZXg6IFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDM5MjQ3KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjUyLDcgKzQyNTIsNyBAQCB2b2lkIERvY3VtZW50OjpwYXJzZUROU1By
ZWZldGNoQ29udHJvbEhlCiAKIHZvaWQgRG9jdW1lbnQ6OmFkZFRpbWVvdXQoaW50IHRpbWVvdXRJ
ZCwgRE9NVGltZXIqIHRpbWVyKQogewotICAgIEFTU0VSVCghbV90aW1lb3V0cy5nZXQodGltZW91
dElkKSk7CisgICAgQVNTRVJUKCFtX3RpbWVvdXRzLmNvbnRhaW5zKHRpbWVvdXRJZCkpOwogICAg
IG1fdGltZW91dHMuc2V0KHRpbWVvdXRJZCwgdGltZXIpOwogfQogCg==
</data>
<flag name="review"
          id="12296"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26274</attachid>
            <date>2008-12-28 01:50:13 -0800</date>
            <delta_ts>2008-12-28 01:50:13 -0800</delta_ts>
            <desc>Addressed Darin&apos;s comments, final version.</desc>
            <filename>final.txt</filename>
            <type>text/plain</type>
            <size>14236</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTU2NjdhOC4uNDZmMzg5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAwOC0xMi0xNyAgRG1pdHJ5IFRpdG92
ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI3NTUKKyAgICAgICAgUHJlcGFyZSB0byBhZGQgY3JlYXRlL3JlbW92ZSB0aW1lb3V0IG1ldGhv
ZHMgdG8gSlNXb3JrZXJDb250ZXh0IGJ5IG1vdmluZworICAgICAgICB0aW1lci1zcGVjaWZpYyBj
b2RlIGZyb20gSlNET01XaW5kb3dCYXNlIHRvIERPTVRpbWVyLgorICAgICAgICBNb3ZlZCBldmVy
eXRoaW5nIEpTLXJlbGF0ZWQgZnJvbSBET01UaW1lciB0byBTY2hlZHVsZWRBY3Rpb24uCisgICAg
ICAgIE5vdyBTY2hlZHVsZWRBY3Rpb24gaXMgd2hhdCBpdCB3YW50ZWQgdG8gYmUgYWxsIHRoZSB0
aW1lOiBhIEpTIGVuZ2luZS1zcGVjaWZpYyAKKyAgICAgICAgY29udGFpbmVyIGZvciB0aW1lciBj
YWxsYmFjayB0aGF0IGtub3dzIGhvdyB0byBpbnZva2UgaXQuCisgICAgICAgIERPTVRpbWVyIGlz
IG5vdCBhbnltb3JlIEpTLXNwZWNpZmljLgorCisgICAgICAgIFRoaXMgaXMgbW9zdGx5IG1vdmlu
ZyB0aGUgY29kZSBhcm91bmQuIE5vIGludGVuZGVkIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRp
bWVyOjpET01UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6fkRPTVRpbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjppbnN0YWxsKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVRpbWVyOjpyZW1vdmVCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6c3RvcCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvRE9NVGltZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OnJlbW92ZVRpbWVvdXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rp
b246OmV4ZWN1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
YWRkVGltZW91dCk6CisKIDIwMDgtMTItMjYgIFphbGFuIEJ1anRhcyAgPHpidWp0YXNAZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRp
bWVyLmNwcAppbmRleCA0Y2Q1YjM1Li40ZjY3MTY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTVRpbWVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNw
cApAQCAtMjgsMTYgKzI4LDIyIEBACiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKIAogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJTY2hlZHVs
ZWRBY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbnQgRE9NVGltZXI6Om1fdGltZXJOZXN0aW5nTGV2ZWwgPSAwOworc3Rh
dGljIGNvbnN0IGludCBtYXhUaW1lck5lc3RpbmdMZXZlbCA9IDU7CitzdGF0aWMgY29uc3QgZG91
YmxlIG9uZU1pbGxpc2Vjb25kID0gMC4wMDE7CitzdGF0aWMgY29uc3QgZG91YmxlIG1pblRpbWVy
SW50ZXJ2YWwgPSAwLjAxMDsgLy8gMTAgbWlsbGlzZWNvbmRzCisKK3N0YXRpYyBpbnQgdGltZXJO
ZXN0aW5nTGV2ZWwgPSAwOwogCi1ET01UaW1lcjo6RE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24pCitET01UaW1lcjo6RE9NVGlt
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBhY3Rp
b24sIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCiAgICAgOiBBY3RpdmVET01PYmplY3Qo
Y29udGV4dCwgdGhpcykKICAgICAsIG1fYWN0aW9uKGFjdGlvbikKICAgICAsIG1fbmV4dEZpcmVJ
bnRlcnZhbCgwKQpAQCAtNTAsMjkgKzU2LDc2IEBAIERPTVRpbWVyOjpET01UaW1lcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKICAgICAg
ICAgbGFzdFVzZWRUaW1lb3V0SWQgPSAxOwogICAgIG1fdGltZW91dElkID0gbGFzdFVzZWRUaW1l
b3V0SWQ7CiAgICAgCi0gICAgbV9uZXN0aW5nTGV2ZWwgPSBtX3RpbWVyTmVzdGluZ0xldmVsICsg
MTsKKyAgICBtX25lc3RpbmdMZXZlbCA9IHRpbWVyTmVzdGluZ0xldmVsICsgMTsKKworICAgIC8v
IEZJWE1FOiBNb3ZlIHRoZSB0aW1lb3V0IG1hcCBhbmQgQVBJIHRvIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgdG8gYmUgYWJsZQorICAgIC8vIHRvIGNyZWF0ZSB0aW1lb3V0cyBmcm9tIFdvcmtlcnMu
CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSAmJiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpLT5hZGRUaW1lb3V0KG1fdGltZW91dElkLCB0aGlzKTsKKwor
ICAgIGRvdWJsZSBpbnRlcnZhbE1pbGxpc2Vjb25kcyA9IG1heChvbmVNaWxsaXNlY29uZCwgdGlt
ZW91dCAqIG9uZU1pbGxpc2Vjb25kKTsKKworICAgIC8vIFVzZSBhIG1pbmltdW0gaW50ZXJ2YWwg
b2YgMTAgbXMgdG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMsIGJ1dCBvbmx5IG9uY2Ugd2UndmUKKyAg
ICAvLyBuZXN0ZWQgZW5vdWdoIHRvIG5vdGljZSB0aGF0IHdlJ3JlIHJlcGVhdGluZy4KKyAgICAv
LyBGYXN0ZXIgdGltZXJzIG1pZ2h0IGJlICJiZXR0ZXIiLCBidXQgdGhleSdyZSBpbmNvbXBhdGli
bGUuCisgICAgaWYgKGludGVydmFsTWlsbGlzZWNvbmRzIDwgbWluVGltZXJJbnRlcnZhbCAmJiBt
X25lc3RpbmdMZXZlbCA+PSBtYXhUaW1lck5lc3RpbmdMZXZlbCkKKyAgICAgICAgaW50ZXJ2YWxN
aWxsaXNlY29uZHMgPSBtaW5UaW1lckludGVydmFsOworICAgIGlmIChzaW5nbGVTaG90KQorICAg
ICAgICBzdGFydE9uZVNob3QoaW50ZXJ2YWxNaWxsaXNlY29uZHMpOworICAgIGVsc2UKKyAgICAg
ICAgc3RhcnRSZXBlYXRpbmcoaW50ZXJ2YWxNaWxsaXNlY29uZHMpOwogfQogCiBET01UaW1lcjo6
fkRPTVRpbWVyKCkKIHsKLSAgICBpZiAobV9hY3Rpb24pIHsKLSAgICAgICAgSlNDOjpKU0xvY2sg
bG9jayhmYWxzZSk7Ci0gICAgICAgIGRlbGV0ZSBtX2FjdGlvbjsKLSAgICB9Cit9CisgICAgCitp
bnQgRE9NVGltZXI6Omluc3RhbGwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2No
ZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCit7Cisg
ICAgLy8gRE9NVGltZXIgY29uc3RydWN0b3IgbGlua3MgdGhlIG5ldyB0aW1lciBpbnRvIGEgbGlz
dCBvZiBBY3RpdkRPTU9iamVjdHMgaGVsZCBieSB0aGUgJ2NvbnRleHQnLgorICAgIC8vIFRoZSB0
aW1lciBpcyBkZWxldGVkIHdoZW4gY29udGV4dCBpcyBkZWxldGVkIChET01UaW1lcjo6Y29udGV4
dERlc3Ryb3llZCkgb3IgZXhwbGljaXRseSB2aWEgRE9NVGltZXI6OnJlbW92ZUJ5SWQoKS4KKyAg
ICBET01UaW1lciogdGltZXIgPSBuZXcgRE9NVGltZXIoY29udGV4dCwgYWN0aW9uLCB0aW1lb3V0
LCBzaW5nbGVTaG90KTsKKyAgICByZXR1cm4gdGltZXItPm1fdGltZW91dElkOworfQorCit2b2lk
IERPTVRpbWVyOjpyZW1vdmVCeUlkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGlu
dCB0aW1lb3V0SWQpCit7CisgICAgLy8gdGltZW91dCBJRHMgaGF2ZSB0byBiZSBwb3NpdGl2ZSwg
YW5kIDAgYW5kIC0xIGFyZSB1bnNhZmUgdG8KKyAgICAvLyBldmVuIGxvb2sgdXAgc2luY2UgdGhl
eSBhcmUgdGhlIGVtcHR5IGFuZCBkZWxldGVkIHZhbHVlCisgICAgLy8gcmVzcGVjdGl2ZWx5Cisg
ICAgaWYgKHRpbWVvdXRJZCA8PSAwKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGNvbnRl
eHQgJiYgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KGNvbnRleHQpLT5yZW1vdmVUaW1lb3V0KHRpbWVvdXRJZCk7CiB9CiAKIHZvaWQgRE9NVGltZXI6
OmZpcmVkKCkKIHsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIC8vIEZJWE1FOiBtYWtlIGl0IHdvcmsgd2l0aCBXb3Jr
ZXJzIFNFQyB0b28uCi0gICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwotICAg
ICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZG9jdW1lbnQtPmZy
YW1lKCkpKSB7Ci0gICAgICAgICAgICBtX3RpbWVyTmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2
ZWw7Ci0gICAgICAgICAgICB3aW5kb3ctPnRpbWVyRmlyZWQodGhpcyk7Ci0gICAgICAgICAgICBt
X3RpbWVyTmVzdGluZ0xldmVsID0gMDsKKyAgICB0aW1lck5lc3RpbmdMZXZlbCA9IG1fbmVzdGlu
Z0xldmVsOworCisgICAgLy8gU2ltcGxlIGNhc2UgZm9yIG5vbi1vbmUtc2hvdCB0aW1lcnMuCisg
ICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAgaWYgKHJlcGVhdEludGVydmFsKCkgJiYgcmVw
ZWF0SW50ZXJ2YWwoKSA8IG1pblRpbWVySW50ZXJ2YWwpIHsKKyAgICAgICAgICAgIG1fbmVzdGlu
Z0xldmVsKys7CisgICAgICAgICAgICBpZiAobV9uZXN0aW5nTGV2ZWwgPj0gbWF4VGltZXJOZXN0
aW5nTGV2ZWwpCisgICAgICAgICAgICAgICAgYXVnbWVudFJlcGVhdEludGVydmFsKG1pblRpbWVy
SW50ZXJ2YWwgLSByZXBlYXRJbnRlcnZhbCgpKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gTm8gYWNjZXNzIHRvIG1lbWJlciB2YXJpYWJsZXMgYWZ0ZXIgdGhpcyBwb2ludCwgaXQg
Y2FuIGRlbGV0ZSB0aGUgdGltZXIuCisgICAgICAgIG1fYWN0aW9uLT5leGVjdXRlKGNvbnRleHQp
OworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgLy8gRGVsZXRlIHRpbWVyIGJlZm9yZSBl
eGVjdXRpbmcgdGhlIGFjdGlvbiBmb3Igb25lLXNob3QgdGltZXJzLgorICAgIFNjaGVkdWxlZEFj
dGlvbiogYWN0aW9uID0gbV9hY3Rpb24ucmVsZWFzZSgpOworCisgICAgLy8gTm8gYWNjZXNzIHRv
IG1lbWJlciB2YXJpYWJsZXMgYWZ0ZXIgdGhpcyBwb2ludC4KKyAgICBkZWxldGUgdGhpczsKKwor
ICAgIGFjdGlvbi0+ZXhlY3V0ZShjb250ZXh0KTsKKyAgICBkZWxldGUgYWN0aW9uOworICAgIHRp
bWVyTmVzdGluZ0xldmVsID0gMDsKIH0KIAogYm9vbCBET01UaW1lcjo6aGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3QKQEAgLTkyLDkgKzE0NSw3IEBAIHZvaWQgRE9NVGltZXI6OnN0b3AoKQogICAg
IC8vIE5lZWQgdG8gcmVsZWFzZSBKUyBvYmplY3RzIHBvdGVudGlhbGx5IHByb3RlY3RlZCBieSBT
Y2hlZHVsZWRBY3Rpb24KICAgICAvLyBiZWNhdXNlIHRoZXkgY2FuIGZvcm0gY2lyY3VsYXIgcmVm
ZXJlbmNlcyBiYWNrIHRvIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgLy8gd2hpY2gg
d2lsbCBjYXVzZSBhIG1lbW9yeSBsZWFrLgotICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwot
ICAgIGRlbGV0ZSBtX2FjdGlvbjsKLSAgICBtX2FjdGlvbiA9IDA7CisgICAgbV9hY3Rpb24uY2xl
YXIoKTsKIH0KIAogdm9pZCBET01UaW1lcjo6c3VzcGVuZCgpIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01UaW1lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5o
CmluZGV4IDJmMjJiNGYuLjIwMGI5YjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NVGltZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmgKQEAgLTI5LDI1
ICsyOSwxOSBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgSlNET01XaW5kb3dCYXNlOwogY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwogCiBjbGFzcyBE
T01UaW1lciA6IHB1YmxpYyBUaW1lckJhc2UsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVi
bGljOgotICAgIC8vIENyZWF0ZXMgYSBuZXcgdGltZXIgd2l0aCB0aGUgbmV4dCBpZCBhbmQgbmVz
dGluZyBsZXZlbC4KLSAgICBET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NoZWR1
bGVkQWN0aW9uKik7CiAgICAgdmlydHVhbCB+RE9NVGltZXIoKTsKLQotICAgIGludCB0aW1lb3V0
SWQoKSBjb25zdCB7IHJldHVybiBtX3RpbWVvdXRJZDsgfQotCi0gICAgaW50IG5lc3RpbmdMZXZl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVzdGluZ0xldmVsOyB9Ci0gICAgdm9pZCBzZXROZXN0aW5n
TGV2ZWwoaW50IG4pIHsgbV9uZXN0aW5nTGV2ZWwgPSBuOyB9Ci0KLSAgICBTY2hlZHVsZWRBY3Rp
b24qIGFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aW9uOyB9Ci0gICAgU2NoZWR1bGVkQWN0
aW9uKiB0YWtlQWN0aW9uKCkgeyBTY2hlZHVsZWRBY3Rpb24qIGEgPSBtX2FjdGlvbjsgbV9hY3Rp
b24gPSAwOyByZXR1cm4gYTsgfQorICAgIC8vIENyZWF0ZXMgYSBuZXcgdGltZXIgb3duZWQgYnkg
c3BlY2lmaWVkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHN0YXJ0cyBpdAorICAgIC8vIGFuZCBy
ZXR1cm5zIGl0cyBJZC4KKyAgICBzdGF0aWMgaW50IGluc3RhbGwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFNjaGVkdWxlZEFjdGlvbiosIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOwor
ICAgIHN0YXRpYyB2b2lkIHJlbW92ZUJ5SWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGludCB0
aW1lb3V0SWQpOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwpAQCAtNTgsMTIgKzUyLDEyIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZhdGU6CisgICAgRE9NVGltZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFNjaGVkdWxlZEFjdGlvbiosIGludCB0aW1lb3V0LCBib29sIHNp
bmdsZVNob3QpOwogICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpOwogCiAgICAgaW50IG1fdGltZW91
dElkOwogICAgIGludCBtX25lc3RpbmdMZXZlbDsKLSAgICBTY2hlZHVsZWRBY3Rpb24qIG1fYWN0
aW9uOwotICAgIHN0YXRpYyBpbnQgbV90aW1lck5lc3RpbmdMZXZlbDsKKyAgICBPd25QdHI8U2No
ZWR1bGVkQWN0aW9uPiBtX2FjdGlvbjsKICAgICBkb3VibGUgbV9uZXh0RmlyZUludGVydmFsOwog
ICAgIGRvdWJsZSBtX3JlcGVhdEludGVydmFsOwogfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcAppbmRleCBhNzNhMTA2Li4wZmE4NTViIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBAIC05Nyw5ICs5Nyw2IEBAIHN0YXRpYyB2b2lkIHNldEpT
RE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
Kik7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgaW50IGNNYXhUaW1lck5lc3RpbmdM
ZXZlbCA9IDU7Ci1jb25zdCBkb3VibGUgY01pbmltdW1UaW1lckludGVydmFsID0gMC4wMTA7Ci0K
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gSlNET01XaW5kb3dCYXNlIE9iamVjdCAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KIAogY29uc3QgQ2xhc3NJbmZvIEpTRE9NV2luZG93QmFzZTo6c19pbmZv
ID0geyAiV2luZG93IiwgMCwgJkpTRE9NV2luZG93QmFzZVRhYmxlLCAwIH07CkBAIC04MjQsMjMg
KzgyMSw3IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpzZXRSZXR1cm5WYWx1ZVNsb3QoSlNWYWx1
ZSoqIHNsb3QpCiAKIGludCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KFNjaGVkdWxl
ZEFjdGlvbiogYSwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKIHsKLSAgICBET01UaW1lciogdGlt
ZXIgPSBuZXcgRE9NVGltZXIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBhKTsKLSAgICBpbnQg
dGltZW91dElkID0gdGltZXItPnRpbWVvdXRJZCgpOwotCi0gICAgQVNTRVJUKGQoKS0+aW1wbC0+
ZG9jdW1lbnQoKSk7Ci0gICAgZCgpLT5pbXBsLT5kb2N1bWVudCgpLT5hZGRUaW1lb3V0KHRpbWVv
dXRJZCwgdGltZXIpOwotICAgIAotICAgIC8vIFVzZSBhIG1pbmltdW0gaW50ZXJ2YWwgb2YgMTAg
bXMgdG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMsIGJ1dCBvbmx5IG9uY2Ugd2UndmUKLSAgICAvLyBu
ZXN0ZWQgZW5vdWdoIHRvIG5vdGljZSB0aGF0IHdlJ3JlIHJlcGVhdGluZy4KLSAgICAvLyBGYXN0
ZXIgdGltZXJzIG1pZ2h0IGJlICJiZXR0ZXIiLCBidXQgdGhleSdyZSBpbmNvbXBhdGlibGUuCi0g
ICAgZG91YmxlIGludGVydmFsID0gbWF4KDAuMDAxLCB0ICogMC4wMDEpOwotICAgIGlmIChpbnRl
cnZhbCA8IGNNaW5pbXVtVGltZXJJbnRlcnZhbCAmJiB0aW1lci0+bmVzdGluZ0xldmVsKCkgPj0g
Y01heFRpbWVyTmVzdGluZ0xldmVsKQotICAgICAgICBpbnRlcnZhbCA9IGNNaW5pbXVtVGltZXJJ
bnRlcnZhbDsKLSAgICBpZiAoc2luZ2xlU2hvdCkKLSAgICAgICAgdGltZXItPnN0YXJ0T25lU2hv
dChpbnRlcnZhbCk7Ci0gICAgZWxzZQotICAgICAgICB0aW1lci0+c3RhcnRSZXBlYXRpbmcoaW50
ZXJ2YWwpOwotICAgIHJldHVybiB0aW1lb3V0SWQ7CisgICAgcmV0dXJuIERPTVRpbWVyOjppbnN0
YWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYSwgdCwgc2luZ2xlU2hvdCk7CiB9CiAKIGlu
dCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KGNvbnN0IFVTdHJpbmcmIGhhbmRsZXIs
IGludCB0LCBib29sIHNpbmdsZVNob3QpCkBAIC04NTUsNDUgKzgzNiw3IEBAIGludCBKU0RPTVdp
bmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogZnVuYywg
Y29uc3QgQXJnTGlzCiAKIHZvaWQgSlNET01XaW5kb3dCYXNlOjpyZW1vdmVUaW1lb3V0KGludCB0
aW1lb3V0SWQpCiB7Ci0gICAgLy8gdGltZW91dCBJRHMgaGF2ZSB0byBiZSBwb3NpdGl2ZSwgYW5k
IDAgYW5kIC0xIGFyZSB1bnNhZmUgdG8KLSAgICAvLyBldmVuIGxvb2sgdXAgc2luY2UgdGhleSBh
cmUgdGhlIGVtcHR5IGFuZCBkZWxldGVkIHZhbHVlCi0gICAgLy8gcmVzcGVjdGl2ZWx5Ci0gICAg
aWYgKHRpbWVvdXRJZCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZCgpLT5p
bXBsLT5kb2N1bWVudCgpKTsKLSAgICBkKCktPmltcGwtPmRvY3VtZW50KCktPnJlbW92ZVRpbWVv
dXQodGltZW91dElkKTsKLX0KLQotdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnRpbWVyRmlyZWQoRE9N
VGltZXIqIHRpbWVyKQotewotICAgIC8vIFNpbXBsZSBjYXNlIGZvciBub24tb25lLXNob3QgdGlt
ZXJzLgotICAgIGlmICh0aW1lci0+aXNBY3RpdmUoKSkgewotICAgICAgICBpbnQgdGltZW91dElk
ID0gdGltZXItPnRpbWVvdXRJZCgpOwotCi0gICAgICAgIHRpbWVyLT5hY3Rpb24oKS0+ZXhlY3V0
ZShzaGVsbCgpKTsKLSAgICAgICAgLy8gVGhlIERPTVRpbWVyIG9iamVjdCBtYXkgaGF2ZSBiZWVu
IGRlbGV0ZWQgb3IgcmVwbGFjZWQgZHVyaW5nIGV4ZWN1dGlvbiwKLSAgICAgICAgLy8gc28gd2Ug
cmUtZmV0Y2ggaXQuCi0gICAgICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3VtZW50KCkpOwotICAg
ICAgICB0aW1lciA9IGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+ZmluZFRpbWVvdXQodGltZW91dElk
KTsKLSAgICAgICAgaWYgKCF0aW1lcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBp
ZiAodGltZXItPnJlcGVhdEludGVydmFsKCkgJiYgdGltZXItPnJlcGVhdEludGVydmFsKCkgPCBj
TWluaW11bVRpbWVySW50ZXJ2YWwpIHsKLSAgICAgICAgICAgIHRpbWVyLT5zZXROZXN0aW5nTGV2
ZWwodGltZXItPm5lc3RpbmdMZXZlbCgpICsgMSk7Ci0gICAgICAgICAgICBpZiAodGltZXItPm5l
c3RpbmdMZXZlbCgpID49IGNNYXhUaW1lck5lc3RpbmdMZXZlbCkKLSAgICAgICAgICAgICAgICB0
aW1lci0+YXVnbWVudFJlcGVhdEludGVydmFsKGNNaW5pbXVtVGltZXJJbnRlcnZhbCAtIHRpbWVy
LT5yZXBlYXRJbnRlcnZhbCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gRGVsZXRlIHRpbWVyIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbiBmb3Igb25l
LXNob3QgdGltZXJzLgotICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uID0gdGltZXItPnRha2VB
Y3Rpb24oKTsKLSAgICByZW1vdmVUaW1lb3V0KHRpbWVyLT50aW1lb3V0SWQoKSk7Ci0gICAgYWN0
aW9uLT5leGVjdXRlKHNoZWxsKCkpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIGRl
bGV0ZSBhY3Rpb247CisgICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCB0aW1lb3V0SWQpOwogfQogCiB2b2lkIEpTRE9NV2luZG93QmFzZTo6ZGlzY29ubmVj
dEZyYW1lKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCmluZGV4IDI2YjIxMzgu
LjhhNzcxMzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaApAQCAtMjksNyAr
MjksNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQXRvbWljU3RyaW5nOwot
ICAgIGNsYXNzIERPTVRpbWVyOwogICAgIGNsYXNzIERPTVdpbmRvdzsKICAgICBjbGFzcyBFdmVu
dDsKICAgICBjbGFzcyBGcmFtZTsKQEAgLTY4LDggKzY3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUqIGZ1bmN0aW9uLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIGludCB0LCBib29sIHNpbmds
ZVNob3QpOwogICAgICAgICB2b2lkIHJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAKLSAg
ICAgICAgdm9pZCB0aW1lckZpcmVkKERPTVRpbWVyKik7Ci0KICAgICAgICAgdm9pZCBjbGVhcigp
OwogCiAgICAgICAgIC8vIFNldCBhIHBsYWNlIHRvIHB1dCBhIGRpYWxvZyByZXR1cm4gdmFsdWUg
d2hlbiB0aGUgd2luZG93IGlzIGNsZWFyZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAKaW5kZXggNjgzZTk3Ny4uYzcwMDk3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2No
ZWR1bGVkQWN0aW9uLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTY3Jp
cHRWYWx1ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKQEAgLTQ2LDYgKzQ3LDE1
IEBAIFNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSogZnVuY3Rpb24sIGNvbnN0IEFyZ0xpCiAgICAgICAgIG1fYXJncy5hcHBlbmQoKCppdCku
anNWYWx1ZShleGVjKSk7CiB9CiAKK3ZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IG1ha2UgaXQgd29y
ayB3aXRoIFdvcmtlcnMgU0VDIHRvby4KKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgp
KTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRl
eHQpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVu
dC0+ZnJhbWUoKSkpCisgICAgICAgIGV4ZWN1dGUod2luZG93LT5zaGVsbCgpKTsKK30KKwogdm9p
ZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwp
CiB7CiAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IHdpbmRvd1NoZWxsLT53aW5kb3coKS0+aW1w
bCgpLT5mcmFtZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgKaW5kZXggNzhh
Zjk2Mi4uOWRiMzgxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCkBAIC0y
Nyw2ICsyNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0RPTVdpbmRv
d1NoZWxsOworICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgIC8qIEFuIGFj
dGlvbiAoZWl0aGVyIGZ1bmN0aW9uIG9yIHN0cmluZykgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgYSBz
cGVjaWZpZWQKICAgICAqIHRpbWUgaW50ZXJ2YWwsIGVpdGhlciBvbmNlIG9yIHJlcGVhdGVkbHku
IFVzZWQgZm9yIHdpbmRvdy5zZXRUaW1lb3V0KCkKQEAgLTM5LDEwICs0MCwxMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICA6IG1fY29kZShjb2RlKQogICAgICAgICB7CiAgICAg
ICAgIH0KKyAgICAgICAgIAorICAgICAgICB2b2lkIGV4ZWN1dGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwogCisgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBleGVjdXRlKEpTRE9NV2luZG93
U2hlbGwqKTsKIAotICAgIHByaXZhdGU6CiAgICAgICAgIEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6
SlNWYWx1ZT4gbV9mdW5jdGlvbjsKICAgICAgICAgVmVjdG9yPEpTQzo6UHJvdGVjdGVkUHRyPEpT
Qzo6SlNWYWx1ZT4gPiBtX2FyZ3M7CiAgICAgICAgIFN0cmluZyBtX2NvZGU7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5k
ZXggZWMwZjE0OS4uZWQ3NGQ5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDI3Myw3ICs0MjczLDcgQEAgdm9p
ZCBEb2N1bWVudDo6cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5nJiBk
bnNQcmVmZXRjaENvbnRyb2wpCiAKIHZvaWQgRG9jdW1lbnQ6OmFkZFRpbWVvdXQoaW50IHRpbWVv
dXRJZCwgRE9NVGltZXIqIHRpbWVyKQogewotICAgIEFTU0VSVCghbV90aW1lb3V0cy5nZXQodGlt
ZW91dElkKSk7CisgICAgQVNTRVJUKCFtX3RpbWVvdXRzLmNvbnRhaW5zKHRpbWVvdXRJZCkpOwog
ICAgIG1fdGltZW91dHMuc2V0KHRpbWVvdXRJZCwgdGltZXIpOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>