<?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>115332</bug_id>
          
          <creation_ts>2013-04-28 12:19:30 -0700</creation_ts>
          <short_desc>[EFL][WK2] Separate dispatch context from WorkQueue.</short_desc>
          <delta_ts>2013-10-10 21:54:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>114432</blocked>
    
    <blocked>118882</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Byungwoo Lee">bw80.lee</reporter>
          <assigned_to name="Byungwoo Lee">bw80.lee</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>naginenis</cc>
    
    <cc>nick.diego</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>882405</commentid>
    <comment_count>0</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-04-28 12:19:30 -0700</bug_when>
    <thetext>With current implementation, deref() in the performWork() and performTimerWork() can make dangling workQueue pointer in WorkQueue::workQueueThread() at certain situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882406</commentid>
    <comment_count>1</comment_count>
      <attachid>199969</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-04-28 12:33:18 -0700</bug_when>
    <thetext>Created attachment 199969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882444</commentid>
    <comment_count>2</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-04-28 19:39:24 -0700</bug_when>
    <thetext>Need some refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882446</commentid>
    <comment_count>3</comment_count>
      <attachid>199980</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-04-28 20:22:30 -0700</bug_when>
    <thetext>Created attachment 199980
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882792</commentid>
    <comment_count>4</comment_count>
      <attachid>199980</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-04-29 15:38:20 -0700</bug_when>
    <thetext>Comment on attachment 199980
Patch

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

&gt; Source/WebKit2/ChangeLog:19
&gt; +        To make the code clear, WorkQueue::WorkQueueThreadPoller class is added.

What is the link between this bug (needing to ref/unref the work queue) and the WorkQueueThreadPoller? Maybe they should be split into 2 patches as one seems like a bug fix, and the other one seems to be refactoring. I don&apos;t think it is a good idea to do both at the same time.

&gt; Source/WebKit2/Platform/WorkQueue.h:185
&gt; +    class WorkQueueThreadPoller : public ThreadSafeRefCounted&lt;WorkQueueThreadPoller&gt; {

Does this really need to be ref counted?

&gt; Source/WebKit2/Platform/WorkQueue.h:193
&gt; +        bool socketActivated() { return m_socketActivated; }

Should be a const method.

&gt; Source/WebKit2/Platform/WorkQueue.h:209
&gt; +    RefPtr&lt;WorkQueueThreadPoller&gt; m_threadPoller;

It does not seem to be shared, is it? If so, we could use OwnPtr.

&gt; Source/WebKit2/Platform/WorkQueue.h:217
&gt; +    PassRefPtr&lt;WorkQueueThreadPoller&gt; threadPoller() { return m_threadPoller; }

I don&apos;t believe you want to pass ownership to the caller so this should return a raw pointer, not a PassRefPtr. Otherwise, this is confusing.

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:83
&gt; +        char readBuf[threadMessageSize];

Not new but considering our message is always of size one. I think we could get rid of those arrays everywhere and use a simple char.

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:100
&gt; +void WorkQueue::WorkQueueThreadPoller::registerSocketEventHandler(int fileDescriptor, const Function&lt;void()&gt;&amp; function)

handler might be clearer than &quot;function&quot;.

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:103
&gt; +        LOG_ERROR(&quot;%d is already registerd.&quot;, fileDescriptor);

&quot;registered&quot;
Shouldn&apos;t we ASSERT instead?

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:115
&gt;      m_socketDescriptor = invalidSocketDescriptor;

We should probably have an ASSERTION(m_socketDescriptor == fileDescriptor)?

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:261
&gt; +    m_threadPoller-&gt;sendMessageToThread(wakupThreadMessage);

I know this is not new but &quot;wakup&quot; is a typo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882878</commentid>
    <comment_count>5</comment_count>
      <attachid>199980</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-04-29 18:09:23 -0700</bug_when>
    <thetext>Comment on attachment 199980
Patch

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

&gt;&gt; Source/WebKit2/ChangeLog:19
&gt;&gt; +        To make the code clear, WorkQueue::WorkQueueThreadPoller class is added.
&gt; 
&gt; What is the link between this bug (needing to ref/unref the work queue) and the WorkQueueThreadPoller? Maybe they should be split into 2 patches as one seems like a bug fix, and the other one seems to be refactoring. I don&apos;t think it is a good idea to do both at the same time.

Hm.. During the bug fixing, I need to refactoring because I need to re-arrange performing work items and performing socket event handler to be placed under the WorkQueue keeper.
But if this refactoring alone is meeningful, I think separating this also ok.

&gt;&gt; Source/WebKit2/Platform/WorkQueue.h:185
&gt;&gt; +    class WorkQueueThreadPoller : public ThreadSafeRefCounted&lt;WorkQueueThreadPoller&gt; {
&gt; 
&gt; Does this really need to be ref counted?

Yes,
There is a reason that I use Ref-Counted object, because this can be shared with WorkQueue instance and workQueueThread function.
At the destructor of this instance, pipe fd is closed, so this instance should be alive when a WorkQueue instance is alive or workQueueThread function is not finished (or polling loop is finished).
As you can see, WorkQueue instance can be destroyed in the middle of the polling loop.

&gt;&gt; Source/WebKit2/Platform/WorkQueue.h:193
&gt;&gt; +        bool socketActivated() { return m_socketActivated; }
&gt; 
&gt; Should be a const method.

Ok, will change.

&gt;&gt; Source/WebKit2/Platform/WorkQueue.h:209
&gt;&gt; +    RefPtr&lt;WorkQueueThreadPoller&gt; m_threadPoller;
&gt; 
&gt; It does not seem to be shared, is it? If so, we could use OwnPtr.

Ditto.

&gt;&gt; Source/WebKit2/Platform/WorkQueue.h:217
&gt;&gt; +    PassRefPtr&lt;WorkQueueThreadPoller&gt; threadPoller() { return m_threadPoller; }
&gt; 
&gt; I don&apos;t believe you want to pass ownership to the caller so this should return a raw pointer, not a PassRefPtr. Otherwise, this is confusing.

I want to share the ownership so I used PassRefPtr.

&gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:83
&gt;&gt; +        char readBuf[threadMessageSize];
&gt; 
&gt; Not new but considering our message is always of size one. I think we could get rid of those arrays everywhere and use a simple char.

Yes, I used the previous code, but this can be more simpler. Will change this also :)

&gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:100
&gt;&gt; +void WorkQueue::WorkQueueThreadPoller::registerSocketEventHandler(int fileDescriptor, const Function&lt;void()&gt;&amp; function)
&gt; 
&gt; handler might be clearer than &quot;function&quot;.

I used the same function in the WorkQueue. Do I need to change the name?

&gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:103
&gt;&gt; +        LOG_ERROR(&quot;%d is already registerd.&quot;, fileDescriptor);
&gt; 
&gt; &quot;registered&quot;
&gt; Shouldn&apos;t we ASSERT instead?

Yes assert might be better to find the problem easier.
This is the same code as previous also. I&apos;ll change this also.

&gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:115
&gt;&gt;      m_socketDescriptor = invalidSocketDescriptor;
&gt; 
&gt; We should probably have an ASSERTION(m_socketDescriptor == fileDescriptor)?

Yes it will be better. Same as previous, but will add it.

&gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:261
&gt;&gt; +    m_threadPoller-&gt;sendMessageToThread(wakupThreadMessage);
&gt; 
&gt; I know this is not new but &quot;wakup&quot; is a typo.

Yes should be changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883410</commentid>
    <comment_count>6</comment_count>
      <attachid>200209</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-01 03:00:45 -0700</bug_when>
    <thetext>Created attachment 200209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888233</commentid>
    <comment_count>7</comment_count>
      <attachid>200209</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-05-13 06:54:38 -0700</bug_when>
    <thetext>Comment on attachment 200209
Patch

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

&gt; Source/WebKit2/Platform/WorkQueue.h:185
&gt; +    class WorkQueueThread : public ThreadSafeRefCounted&lt;WorkQueueThread&gt; {

Does this really need to be ref counted?

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:142
&gt; +    RefPtr&lt;WorkQueueThread&gt; thread = workQueue-&gt;thread();

I&apos;m still not convinced workQueue-&gt;thread() should return a PassRefPtr. This is confusing as you don&apos;t pass ownership to the caller.
Also, I don&apos;t think the WorkQueueThread can go away as you ref the WorkQueue already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888251</commentid>
    <comment_count>8</comment_count>
      <attachid>200209</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-05-13 07:17:00 -0700</bug_when>
    <thetext>Comment on attachment 200209
Patch

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

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:47
&gt; +    , m_socketActivated(false)

where all the other class members?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888661</commentid>
    <comment_count>9</comment_count>
      <attachid>201669</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-13 19:33:35 -0700</bug_when>
    <thetext>Created attachment 201669
Patch

Did the API test and the crash about WorkQueue(reported at build.webkit.org) was fixed with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888670</commentid>
    <comment_count>10</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-13 20:26:31 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 200209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=200209&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/WorkQueue.h:185
&gt; &gt; +    class WorkQueueThread : public ThreadSafeRefCounted&lt;WorkQueueThread&gt; {
&gt; 
&gt; Does this really need to be ref counted?
&gt; 
&gt; &gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:142
&gt; &gt; +    RefPtr&lt;WorkQueueThread&gt; thread = workQueue-&gt;thread();
&gt; 
&gt; I&apos;m still not convinced workQueue-&gt;thread() should return a PassRefPtr. This is confusing as you don&apos;t pass ownership to the caller.
&gt; Also, I don&apos;t think the WorkQueueThread can go away as you ref the WorkQueue already.

WorkQueueThread contains information for polling thread.
(Means, it has pipe fds to implement work queue thread polling loop)

WorkQueue class intance can be deleted at any thread.
But WorkQueueThread:main() function can be terminated at a certain thread.

The pipe fds are accessed at the thread that WorkQueueThread:main() works.
And the function can work after WorkQueue instance is deleted at another thread.

Let&apos;s think about the followings.
WorkQueueThread:main() is working at Thread 1, and at any point while Thread 1 is working inside the polling loop, workQueue is deleted at Thread 2.

If workQueue only has the ownership of pipe fds, select or read might be
failed unintentionally.

So, pipe fds should be kept until the polling task is successfuly finished.

To this, pipe fds should be stored at Thread 1 that WorkQueueThread:main() is working, and passing ownership of WorkQueueThread is the way that I choose.

Please let me know if there are anything that I misunderstood.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888672</commentid>
    <comment_count>11</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-13 20:30:01 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 200209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=200209&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:47
&gt; &gt; +    , m_socketActivated(false)
&gt; 
&gt; where all the other class members?

Others are initialized at the body of the constructor.

Maybe diff align makes you confused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888742</commentid>
    <comment_count>12</comment_count>
      <attachid>201669</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-05-14 01:58:52 -0700</bug_when>
    <thetext>Comment on attachment 201669
Patch

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

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:136
&gt; +        RefPtr&lt;WorkQueue&gt; keep(workQueue);

Constructing a RefPtr from a raw pointer is dangerous. See m_adoptionIsRequired assertions in RefCountedBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888815</commentid>
    <comment_count>13</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-14 06:52:26 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 201669 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=201669&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:136
&gt; &gt; +        RefPtr&lt;WorkQueue&gt; keep(workQueue);
&gt; 
&gt; Constructing a RefPtr from a raw pointer is dangerous. See m_adoptionIsRequired assertions in RefCountedBase.

Yes, this should be carefully considered, Thanks.

I think assertions will happen when trying to keep it before adopted or after deleted. (is it right?)

I&apos;ll update when I find a way to protect the danger.

If you have any suggestion, please let me know :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889657</commentid>
    <comment_count>14</comment_count>
      <attachid>201916</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-15 20:20:31 -0700</bug_when>
    <thetext>Created attachment 201916
Patch

Minimize patch to fix the workqueue crash issue on the build bot first and make review easier. (Following the suggestion from Chris)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889745</commentid>
    <comment_count>15</comment_count>
      <attachid>201916</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-05-16 02:40:17 -0700</bug_when>
    <thetext>Comment on attachment 201916
Patch

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

We do have a problem but I don&apos;t think the approach to fix it is right. It seems to be that it does not solve the issue, just makes it less likely to happen. I&apos;m still thinking about a better solution to this.
Waiting for the thread completion in the WorkQueue destructor would have done the trick but you did not like this proposal either :)

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:179
&gt;      while (workQueue-&gt;m_threadLoop) {

workQueue may be destroyed already.

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:184
&gt; +        if (workQueue-&gt;m_threadLoop)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889761</commentid>
    <comment_count>16</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-16 04:27:21 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 201916 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=201916&amp;action=review
&gt; 
&gt; We do have a problem but I don&apos;t think the approach to fix it is right. It seems to be that it does not solve the issue, just makes it less likely to happen. I&apos;m still thinking about a better solution to this.
&gt; Waiting for the thread completion in the WorkQueue destructor would have done the trick but you did not like this proposal either :)
&gt; 
&gt; &gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:179
&gt; &gt;      while (workQueue-&gt;m_threadLoop) {
&gt; 
&gt; workQueue may be destroyed already.
&gt; 
&gt; &gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:184
&gt; &gt; +        if (workQueue-&gt;m_threadLoop)
&gt; 
&gt; Ditto.

Yes, your point is correct and to consider those, I had to do refactoring at the previous patch.

With your proposal to wait the thread termination, I have a concern about some situations that,Connection is being destroyed but workqueue is alive, and some lockup issue when workqueue is destroyed on the workqueue thread.

Both seems to be already mentioned on bug 114432.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895490</commentid>
    <comment_count>17</comment_count>
      <attachid>203344</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-30 05:12:25 -0700</bug_when>
    <thetext>Created attachment 203344
Refactoring patch to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895493</commentid>
    <comment_count>18</comment_count>
      <attachid>203344</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-05-30 05:17:25 -0700</bug_when>
    <thetext>Comment on attachment 203344
Refactoring patch to review

I uploaded new patch that focuses refactoring.
I didn&apos;t consider naming and ordering to make review easy by minimizing difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895668</commentid>
    <comment_count>19</comment_count>
      <attachid>203344</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2013-05-30 14:00:30 -0700</bug_when>
    <thetext>Comment on attachment 203344
Refactoring patch to review

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

Looks good! I think it would be nice to have DispatchQueue in a separate file so it will be easier to understand (both end with &quot;queue&quot;, I think it&apos;s easy to get confused about what function is part of what). I think your approach is correct, I will look more into it later. :)

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:151
&gt; +    dispatchQueue-&gt;dispatchRelease();

Awesome!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897116</commentid>
    <comment_count>20</comment_count>
      <attachid>203749</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-04 19:32:12 -0700</bug_when>
    <thetext>Created attachment 203749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897117</commentid>
    <comment_count>21</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-04 19:34:14 -0700</bug_when>
    <thetext>Uploaded new patch with separated file for DispatchQueue class according to the Rafael&apos;s suggestion. (Just moved the implementation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897134</commentid>
    <comment_count>22</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-04 22:35:36 -0700</bug_when>
    <thetext>Tested api test and LayoutTest, and there was no regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897149</commentid>
    <comment_count>23</comment_count>
      <attachid>203749</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-06-05 00:04:49 -0700</bug_when>
    <thetext>Comment on attachment 203749
Patch

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

&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:28
&gt; +    m_dispatchQueue = new DispatchQueue(name);

I fail to see who is freeing this allocated memory. Could you please explained? Looks to me that m_dispatchQueue is never deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897187</commentid>
    <comment_count>24</comment_count>
      <attachid>203749</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-05 01:36:51 -0700</bug_when>
    <thetext>Comment on attachment 203749
Patch

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

&gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:28
&gt;&gt; +    m_dispatchQueue = new DispatchQueue(name);
&gt; 
&gt; I fail to see who is freeing this allocated memory. Could you please explained? Looks to me that m_dispatchQueue is never deleted.

The created DispatchQueue instance will be passed to the dispatch queue thread at DispatchQueue.cpp:90 and it will be deleted when the thread is terminated (DispatchQueue.cpp:237.
To make the thead termination, m_dispatchQueue-&gt;dispatchRelease() function is called in WorkQueue::platformInvalidate().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897191</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-06-05 01:44:30 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 203749 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=203749&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:28
&gt; &gt;&gt; +    m_dispatchQueue = new DispatchQueue(name);
&gt; &gt; 
&gt; &gt; I fail to see who is freeing this allocated memory. Could you please explained? Looks to me that m_dispatchQueue is never deleted.
&gt; 
&gt; The created DispatchQueue instance will be passed to the dispatch queue thread at DispatchQueue.cpp:90 and it will be deleted when the thread is terminated (DispatchQueue.cpp:237.
&gt; To make the thead termination, m_dispatchQueue-&gt;dispatchRelease() function is called in WorkQueue::platformInvalidate().

Right, I missed it. Thanks for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897193</commentid>
    <comment_count>26</comment_count>
    <who name="Sergio Correia (qrwteyrutiyoup)">sergio</who>
    <bug_when>2013-06-05 01:56:36 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (From update of attachment 203749 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=203749&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:28
&gt; &gt; &gt;&gt; +    m_dispatchQueue = new DispatchQueue(name);
&gt; &gt; &gt; 
&gt; &gt; &gt; I fail to see who is freeing this allocated memory. Could you please explained? Looks to me that m_dispatchQueue is never deleted.
&gt; &gt; 
&gt; &gt; The created DispatchQueue instance will be passed to the dispatch queue thread at DispatchQueue.cpp:90 and it will be deleted when the thread is terminated (DispatchQueue.cpp:237.
&gt; &gt; To make the thead termination, m_dispatchQueue-&gt;dispatchRelease() function is called in WorkQueue::platformInvalidate().
&gt; 
&gt; Right, I missed it. Thanks for the clarification.

One problem with the current implementation (being discussed at https://bugs.webkit.org/show_bug.cgi?id=114432, still without a working solution) is that the workqueue instance stays on forever, so we won&apos;t reach WorkQueue::platformInvalidate() to trigger this deletion path.

@Byungwoo: a few nits in your current patch:
In the changelog: typo: reference countable

DispatchQueue.cpp:129
&gt; LOG_ERROR(&quot;%d is already registerd.&quot;, fileDescriptor);
Please fix this typo as well: registered

Source/WebKit2/Platform/efl/DispatchQueue.cpp:203
&gt; LOG_ERROR(&quot;Failed to read from WorkQueueThread pipe&quot;);

Source/WebKit2/Platform/efl/DispatchQueue.cpp:245
&gt; LOG_ERROR(&quot;Failed to wake up WorkQueue Thread&quot;);

You probably should update those error messages, since you changed it to be a DispatchQueue Thread. If you decide not to change it, at least make them both equal: &quot;WorkQueue Thread&quot; vs. &quot;WorkQueueThread&quot;

Anyway, I like the approach you are taking here, taking out (almost all) the EFL-specific bits from WorkQueue.h and managing the tasks dispatch with the DispatchQueue class. The code seems cleaner now, and once this has landed, we could start working again on https://bugs.webkit.org/show_bug.cgi?id=114432 and on possible race conditions that might to happen in the concurrent access of m_maxFileDescriptor/m_fileDescriptorSet in performFileDescriptorWork() and registerSocketEventHandler().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897195</commentid>
    <comment_count>27</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-05 02:11:23 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; (From update of attachment 203749 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=203749&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebKit2/Platform/efl/WorkQueueEfl.cpp:28
&gt; &gt; &gt; &gt;&gt; +    m_dispatchQueue = new DispatchQueue(name);
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I fail to see who is freeing this allocated memory. Could you please explained? Looks to me that m_dispatchQueue is never deleted.
&gt; &gt; &gt; 
&gt; &gt; &gt; The created DispatchQueue instance will be passed to the dispatch queue thread at DispatchQueue.cpp:90 and it will be deleted when the thread is terminated (DispatchQueue.cpp:237.
&gt; &gt; &gt; To make the thead termination, m_dispatchQueue-&gt;dispatchRelease() function is called in WorkQueue::platformInvalidate().
&gt; &gt; 
&gt; &gt; Right, I missed it. Thanks for the clarification.
&gt; 
&gt; One problem with the current implementation (being discussed at https://bugs.webkit.org/show_bug.cgi?id=114432, still without a working solution) is that the workqueue instance stays on forever, so we won&apos;t reach WorkQueue::platformInvalidate() to trigger this deletion path.
Yes, The issue can be handled separately at the bug 114432.

&gt; @Byungwoo: a few nits in your current patch:
&gt; In the changelog: typo: reference countable
&gt; 
&gt; DispatchQueue.cpp:129
&gt; &gt; LOG_ERROR(&quot;%d is already registerd.&quot;, fileDescriptor);
&gt; Please fix this typo as well: registered
&gt; 
&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:203
&gt; &gt; LOG_ERROR(&quot;Failed to read from WorkQueueThread pipe&quot;);
&gt; 
&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:245
&gt; &gt; LOG_ERROR(&quot;Failed to wake up WorkQueue Thread&quot;);
&gt; 
&gt; You probably should update those error messages, since you changed it to be a DispatchQueue Thread. If you decide not to change it, at least make them both equal: &quot;WorkQueue Thread&quot; vs. &quot;WorkQueueThread&quot;
I missed the log messages. Thanks for pointing this. Will update it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897974</commentid>
    <comment_count>28</comment_count>
    <who name="Nick Diego Yamane (diegoyam)">nick.diego</who>
    <bug_when>2013-06-06 16:40:26 -0700</bug_when>
    <thetext>I&apos;ve just made some tests using the latest version of patch from https://bugs.webkit.org/show_bug.cgi?id=115332 + the WorkQueue&apos;s socketEventHandler cleanup at &apos;unregisterSocketEventHandler&apos; function (proposed previously here).
I used this API test case (https://github.com/WebKitNix/webkitnix/blob/master/Tools/TestWebKitAPI/Tests/nix/WebViewWebProcessCrashed.cpp) from WebKitNix port, which forces WebProcess to crash/reload sequentially multiple times. Bellow some details about the results:

New implementation based on &apos;DispatchQueue&apos; seems to be much more robust and easy to maintain/extend than the previous one, however at some point (usually after 400 crash/respawns) the test crashes with a ASSERTION fail at WTF::Mutex&apos;s destructor. More details here, gdb session log: http://paste.debian.net/8904/).

From that debug session I could see that a call to pthread_mutex_destroy() at Mutex&apos;s destructor was returning error code 16, which most probably means it was trying to destroy a locked mutex[1]. m_writeToPipeDescriptorLock was the mutex causing the problem. So, I propose (after the mentioned patch has been landed) to protect the DispatchQueue destruction using a MutexLocker on that mutex to prevent this concurrency issue between ~DispatchQueue and DispatchQueue::wakeup().

[1] http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_init.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897975</commentid>
    <comment_count>29</comment_count>
    <who name="Nick Diego Yamane (diegoyam)">nick.diego</who>
    <bug_when>2013-06-06 16:45:20 -0700</bug_when>
    <thetext>(In reply to comment #28)

Sorry guys, this comment was meant to https://bugs.webkit.org/show_bug.cgi?id=114432 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898526</commentid>
    <comment_count>30</comment_count>
      <attachid>204130</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-09 18:24:21 -0700</bug_when>
    <thetext>Created attachment 204130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900462</commentid>
    <comment_count>31</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-14 01:58:57 -0700</bug_when>
    <thetext>@Chris, could you please review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900480</commentid>
    <comment_count>32</comment_count>
      <attachid>204130</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-06-14 03:12:25 -0700</bug_when>
    <thetext>Comment on attachment 204130
Patch

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

Since you&apos;re touching the generic WK2 WorkQueue code, you&apos;ll likely need a WK2 owner to at least sign off on it.

&gt; Source/WebKit2/ChangeLog:10
&gt; +        Previously, WorkQueue class have all context about dispatch.

&quot;the WorkQueue class had all the context...&quot;

&gt; Source/WebKit2/ChangeLog:12
&gt; +        and those are accessed on the work queue thread through WorkQueue

&quot;those were&quot;

&gt; Source/WebKit2/ChangeLog:16
&gt; +        complicates handling workqueue ref-counting and makes dangling

&quot;causes dangling&quot;

&gt; Source/WebKit2/Platform/WorkQueue.h:58
&gt;  #include &lt;Ecore.h&gt;

Do we still need this include?

&gt; Source/WebKit2/Platform/WorkQueue.h:172
&gt; +    DispatchQueue* m_dispatchQueue;

Maybe a comment to explain why this is a raw pointer (and not a OwnPtr for e.g.)

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:2
&gt; + * Copyright (C) 2012 Samsung Electronics. All rights reserved.

2012, 2013?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:36
&gt; +static const char wakeupThreadMessage = &apos;W&apos;;

&quot;wakeUpThreadMessage&quot;

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:57
&gt; +PassOwnPtr&lt;TimerWorkItem&gt; TimerWorkItem::create(WorkQueue* workQueue, const Function&lt;void()&gt;&amp; function, double delay)

Let&apos;s include the unit in the &quot;delay&quot; argument name for clarity. e.g. delaySeconds.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:62
&gt; +    double expireTime = currentTime() + delay;

expirationTime ?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:63
&gt; +    if (expireTime &lt; 0)

How can this happen?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:71
&gt; +    , m_expireTime(expireTime)

m_expirationTime?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:89
&gt; +    m_threadLoop = true;

m_isThreadRunnning?
Could probably be initialized in the initializer list.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:111
&gt; +    if (!item)

Is this really normal? Maybe this can be replaced by an assertion?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:118
&gt; +void DispatchQueue::dispatchRelease()

Maybe something like &quot;stopThread()&quot; would be more easily understandable?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:126
&gt; +void DispatchQueue::registerSocketEventHandler(int fileDescriptor, const Function&lt;void()&gt;&amp; function)

I would rename this to setSocketEventHandler() since only one can be set.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:128
&gt; +    if (m_socketDescriptor != invalidSocketDescriptor)

Can probably be an assertion.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:139
&gt; +void DispatchQueue::unregisterSocketEventHandler(int fileDescriptor)

I would rename this to clearSocketEventHandler() and remove the argument.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:150
&gt; +    while (true) {

Would while(m_threadLoop) make more sense here? (i.e. help exit earlier).

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:190
&gt; +        // If a timer work item expired, dispatch the function of the work item.

This comment is not needed.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:202
&gt; +            if (read(m_readFromPipeDescriptor, &amp;message, sizeof(char)) == -1)

char size is guaranteed to be 1 so we don&apos;t really need a sizeof.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:215
&gt; +    if (!item)

Why can this happen? Could this be replaced by an assertion?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:221
&gt; +    // m_timerWorkItems should be ordered by expire time.

&quot;The items should be ordered by expiration time.&quot;

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:237
&gt; +    delete dispatchQueue;

Maybe a comment to explain that the dispatchQueue needs to be destroyed in the thread?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:241
&gt; +void DispatchQueue::wakeup()

wakeUpThread?

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:248
&gt; +struct timeval* DispatchQueue::getNextTimeOut()

This should probably be const.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:254
&gt; +    static struct timeval timeValue;

I don&apos;t think we need the &quot;struct&quot; since this is C++.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:260
&gt; +        timeValue.tv_usec = static_cast&lt;long&gt;((timeOut - timeValue.tv_sec) * 1000000);

1000000 should probably be a global static const variable for readability. e.g. &quot;nanoSecondsPerSecond&quot;.

&gt; Source/WebKit2/Platform/efl/DispatchQueue.h:52
&gt; +    double expireTime() const { return m_expireTime; }

expirationTime

&gt; Source/WebKit2/Platform/efl/DispatchQueue.h:53
&gt; +    bool expired(double currentTime) const { return currentTime &gt;= m_expireTime; }

&quot;hasExpired&quot;

&gt; Source/WebKit2/Platform/efl/DispatchQueue.h:80
&gt; +    struct timeval* getNextTimeOut();

struct probably not needed.

&gt; Source/WebKit2/PlatformEfl.cmake:2
&gt; +    Platform/efl/DispatchQueue.cpp

All the other files end with &quot;Efl&quot;, why not this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900499</commentid>
    <comment_count>33</comment_count>
      <attachid>204130</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-14 04:05:42 -0700</bug_when>
    <thetext>Comment on attachment 204130
Patch

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

Thanks for quick review! :)
I&apos;ll apply those.

&gt;&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:63
&gt;&gt; +    if (expireTime &lt; 0)
&gt; 
&gt; How can this happen?

I just added this condition because &apos;delay&apos; is signed value, but as you pointed, this looks redundant (and I cannot find the normal cases with negative delay).
Will remove this and use assertion for the 59, 60 line.

&gt;&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:111
&gt;&gt; +    if (!item)
&gt; 
&gt; Is this really normal? Maybe this can be replaced by an assertion?

Your point is correct. item will be null when delay is negative, but I cannot find a normal cases with the negative delay.
Will change to use assertion.

&gt;&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:150
&gt;&gt; +    while (true) {
&gt; 
&gt; Would while(m_threadLoop) make more sense here? (i.e. help exit earlier).

This loop will be finished after all work items are dispatched.
I think you thought the loop in DispatchQueue::dispatchQueueThread(), and the loop is checking m_threadLoop now.
If I misunderstood your comment, please let me know.

&gt;&gt; Source/WebKit2/PlatformEfl.cmake:2
&gt;&gt; +    Platform/efl/DispatchQueue.cpp
&gt; 
&gt; All the other files end with &quot;Efl&quot;, why not this one?

I thought that &apos;Efl&apos; post-fix is used for the port source files which contains port specific functions of common class. (e.g. WorkQueueEfl.cpp has EFL specific implementations of WorkQueue cleass)
There is no common class for &apos;DispatchQueue&apos; so I didn&apos;t use that keyword.
But I also think that adding &apos;Efl&apos; will be more clear. Will add it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900501</commentid>
    <comment_count>34</comment_count>
      <attachid>204130</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-06-14 04:10:47 -0700</bug_when>
    <thetext>Comment on attachment 204130
Patch

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

&gt;&gt;&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:150
&gt;&gt;&gt; +    while (true) {
&gt;&gt; 
&gt;&gt; Would while(m_threadLoop) make more sense here? (i.e. help exit earlier).
&gt; 
&gt; This loop will be finished after all work items are dispatched.
&gt; I think you thought the loop in DispatchQueue::dispatchQueueThread(), and the loop is checking m_threadLoop now.
&gt; If I misunderstood your comment, please let me know.

My point is that we may not want to process all the work items if the thread is being terminated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900963</commentid>
    <comment_count>35</comment_count>
      <attachid>204130</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-17 02:28:48 -0700</bug_when>
    <thetext>Comment on attachment 204130
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:150
&gt;&gt;&gt;&gt; +    while (true) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Would while(m_threadLoop) make more sense here? (i.e. help exit earlier).
&gt;&gt; 
&gt;&gt; This loop will be finished after all work items are dispatched.
&gt;&gt; I think you thought the loop in DispatchQueue::dispatchQueueThread(), and the loop is checking m_threadLoop now.
&gt;&gt; If I misunderstood your comment, please let me know.
&gt; 
&gt; My point is that we may not want to process all the work items if the thread is being terminated.

Ok, I can understand your point.
I think that m_threadLoop should not be false if there are work items in the dispatch queue, because each work item keeps WorkQueue reference, and the m_threadLoop is set as false at WorkQueue destructor.
(This means, m_threadLoop will be set as false only if there isn&apos;t any work item in the queue)
Do you think checking the condition still needed for the exceptional cases? How about adding ASSERT to check the status that m_threadLoop is false but there are still remained work items in the queue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900972</commentid>
    <comment_count>36</comment_count>
      <attachid>204130</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-06-17 02:59:42 -0700</bug_when>
    <thetext>Comment on attachment 204130
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebKit2/Platform/efl/DispatchQueue.cpp:150
&gt;&gt;&gt;&gt;&gt; +    while (true) {
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Would while(m_threadLoop) make more sense here? (i.e. help exit earlier).
&gt;&gt;&gt; 
&gt;&gt;&gt; This loop will be finished after all work items are dispatched.
&gt;&gt;&gt; I think you thought the loop in DispatchQueue::dispatchQueueThread(), and the loop is checking m_threadLoop now.
&gt;&gt;&gt; If I misunderstood your comment, please let me know.
&gt;&gt; 
&gt;&gt; My point is that we may not want to process all the work items if the thread is being terminated.
&gt; 
&gt; Ok, I can understand your point.
&gt; I think that m_threadLoop should not be false if there are work items in the dispatch queue, because each work item keeps WorkQueue reference, and the m_threadLoop is set as false at WorkQueue destructor.
&gt; (This means, m_threadLoop will be set as false only if there isn&apos;t any work item in the queue)
&gt; Do you think checking the condition still needed for the exceptional cases? How about adding ASSERT to check the status that m_threadLoop is false but there are still remained work items in the queue?

thanks for clarifying, you can leave as it is then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901415</commentid>
    <comment_count>37</comment_count>
      <attachid>204917</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-18 08:36:08 -0700</bug_when>
    <thetext>Created attachment 204917
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901418</commentid>
    <comment_count>38</comment_count>
      <attachid>204917</attachid>
    <who name="Sergio Correia (qrwteyrutiyoup)">sergio</who>
    <bug_when>2013-06-18 08:43:25 -0700</bug_when>
    <thetext>Comment on attachment 204917
Patch

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

&gt; Source/WebKit2/Platform/WorkQueue.h:172
&gt; +    // The instance is passed to it&apos;s own thread function and deleted in it.

Nit: its own thread

&gt; Source/WebKit2/Platform/efl/DispatchQueueEfl.cpp:35
&gt; +static const int nanoSecondsPerSecond = 1000000;

I guess it should be &quot;microSecondsPerSecond&quot;, no?

&gt; Source/WebKit2/Platform/efl/DispatchQueueEfl.cpp:258
&gt; +        timeValue.tv_usec = static_cast&lt;long&gt;((timeOut - timeValue.tv_sec) * nanoSecondsPerSecond);

Yes, this is in microseconds, not nanoseconds :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901587</commentid>
    <comment_count>39</comment_count>
      <attachid>204954</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-18 16:48:40 -0700</bug_when>
    <thetext>Created attachment 204954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902866</commentid>
    <comment_count>40</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-06-23 23:35:00 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 204917 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204917&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/WorkQueue.h:172
&gt; &gt; +    // The instance is passed to it&apos;s own thread function and deleted in it.
&gt; 
&gt; Nit: its own thread
Done.

&gt; 
&gt; &gt; Source/WebKit2/Platform/efl/DispatchQueueEfl.cpp:35
&gt; &gt; +static const int nanoSecondsPerSecond = 1000000;
&gt; 
&gt; I guess it should be &quot;microSecondsPerSecond&quot;, no?
&gt; 
&gt; &gt; Source/WebKit2/Platform/efl/DispatchQueueEfl.cpp:258
&gt; &gt; +        timeValue.tv_usec = static_cast&lt;long&gt;((timeOut - timeValue.tv_sec) * nanoSecondsPerSecond);
&gt; 
&gt; Yes, this is in microseconds, not nanoseconds :)
Done. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934445</commentid>
    <comment_count>41</comment_count>
      <attachid>212951</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-09-29 22:20:41 -0700</bug_when>
    <thetext>Created attachment 212951
Patch

Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934665</commentid>
    <comment_count>42</comment_count>
    <who name="Sergio Correia (qrwteyrutiyoup)">sergio</who>
    <bug_when>2013-09-30 10:41:46 -0700</bug_when>
    <thetext>Anders, could you take a look at this patch as a WK2 owner?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936122</commentid>
    <comment_count>43</comment_count>
      <attachid>213339</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-10-04 00:18:20 -0700</bug_when>
    <thetext>Created attachment 213339
Patch

Change for WorkQueue to contain the RefPtr&lt;DispatchQueue&gt; instead of DispatchQueue raw pointer to prevent concurrency issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936172</commentid>
    <comment_count>44</comment_count>
    <who name="Sergio Correia (qrwteyrutiyoup)">sergio</who>
    <bug_when>2013-10-04 06:09:33 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; Created an attachment (id=213339) [details]
&gt; Patch
&gt; 
&gt; Change for WorkQueue to contain the RefPtr&lt;DispatchQueue&gt; instead of DispatchQueue raw pointer to prevent concurrency issues.

Given recent patches (e.g. [1][2]) getting rid of OwnPtr/PassOwnPtr, it might be a good idea to do the same here.

[1] https://bugs.webkit.org/show_bug.cgi?id=122136
[2] https://bugs.webkit.org/show_bug.cgi?id=122086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936194</commentid>
    <comment_count>45</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-10-04 07:38:44 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #43)
&gt; &gt; Created an attachment (id=213339) [details] [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Change for WorkQueue to contain the RefPtr&lt;DispatchQueue&gt; instead of DispatchQueue raw pointer to prevent concurrency issues.
&gt; 
&gt; Given recent patches (e.g. [1][2]) getting rid of OwnPtr/PassOwnPtr, it might be a good idea to do the same here.
&gt; 
&gt; [1] https://bugs.webkit.org/show_bug.cgi?id=122136
&gt; [2] https://bugs.webkit.org/show_bug.cgi?id=122086

Thank you for the comment. Will apply it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936232</commentid>
    <comment_count>46</comment_count>
      <attachid>213373</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-10-04 10:29:00 -0700</bug_when>
    <thetext>Created attachment 213373
Change to apply unique_ptr

I tried to apply std::unique_ptr to the patch, but it needs additional changes of WTF::Vector::insert() functions because it haven&apos;t been applied the unique_ptr.
The additional diff might be as attached, and I think this will be better to handle separately.
Sergio, Is it ok to apply the unique_ptr later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936235</commentid>
    <comment_count>47</comment_count>
    <who name="Sergio Correia (qrwteyrutiyoup)">sergio</who>
    <bug_when>2013-10-04 10:34:58 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; Created an attachment (id=213373) [details]
&gt; Change to apply unique_ptr
&gt; 
&gt; I tried to apply std::unique_ptr to the patch, but it needs additional changes of WTF::Vector::insert() functions because it haven&apos;t been applied the unique_ptr.
&gt; The additional diff might be as attached, and I think this will be better to handle separately.
&gt; Sergio, Is it ok to apply the unique_ptr later?

Yes, I think it&apos;s fine if we handle the unique_ptr conversion separately, in a further patch. 

We just need a WK2 owner to review the patch now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937296</commentid>
    <comment_count>48</comment_count>
      <attachid>213373</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-10-07 17:54:14 -0700</bug_when>
    <thetext>Comment on attachment 213373
Change to apply unique_ptr

unique_ptr will be applied later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937353</commentid>
    <comment_count>49</comment_count>
      <attachid>213647</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-10-07 20:46:17 -0700</bug_when>
    <thetext>Created attachment 213647
Patch

Applied unique_ptr - WTF::Vector::insert() can handle unique_ptr after r157074</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937740</commentid>
    <comment_count>50</comment_count>
      <attachid>213647</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-08 16:11:13 -0700</bug_when>
    <thetext>Comment on attachment 213647
Patch

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

&gt; Source/WebKit2/Platform/efl/DispatchQueueEfl.cpp:49
&gt; +    : m_dispatchQueue(dispatchQueue)

This should be indented.

&gt; Source/WebKit2/Platform/efl/DispatchQueueEfl.cpp:73
&gt; +    m_workQueue-&gt;ref();

Can&apos;t you just make m_workQueue a RefPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937783</commentid>
    <comment_count>51</comment_count>
      <attachid>213647</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-10-08 18:54:44 -0700</bug_when>
    <thetext>Comment on attachment 213647
Patch

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

&gt;&gt; Source/WebKit2/Platform/efl/DispatchQueueEfl.cpp:49
&gt;&gt; +    : m_dispatchQueue(dispatchQueue)
&gt; 
&gt; This should be indented.

Oops, I&apos;ll fix it.

&gt;&gt; Source/WebKit2/Platform/efl/DispatchQueueEfl.cpp:73
&gt;&gt; +    m_workQueue-&gt;ref();
&gt; 
&gt; Can&apos;t you just make m_workQueue a RefPtr?

Yes, I can use RefPtr. I&apos;ll apply this with a separated header file to prevent circular header include.
Thanks to point this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937785</commentid>
    <comment_count>52</comment_count>
      <attachid>213740</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2013-10-08 19:02:09 -0700</bug_when>
    <thetext>Created attachment 213740
Patch

Applied the comment from Anders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938680</commentid>
    <comment_count>53</comment_count>
      <attachid>213740</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-10 21:54:17 -0700</bug_when>
    <thetext>Comment on attachment 213740
Patch

Clearing flags on attachment: 213740

Committed r157289: &lt;http://trac.webkit.org/changeset/157289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938681</commentid>
    <comment_count>54</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-10 21:54:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199969</attachid>
            <date>2013-04-28 12:33:18 -0700</date>
            <delta_ts>2013-04-28 20:22:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20130429043234.patch</filename>
            <type>text/plain</type>
            <size>6229</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5MjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMGQyMGUzNTNjMTU0OTBl
NTg0MWU0ZGZjYjYwYjk3MDI3OTE4OTMyOS4uYmZiOGNjZmI0NjQ1Mzg2YTk0MmMxYzIwNWYwMGNl
NTQ1MTYwNjY0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEzLTA0LTI4ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBLZWVwIHdv
cmtRdWV1ZSBkdXJpbmcgcGVyZm9ybWluZyBldmVudCBoYW5kZXIgYW5kIHdvcmsgaXRlbXMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWxsIHJlZigp
IGJlZm9yZSBwZXJmb3JtaW5nIHdvcmsgcXVldWUgZXZlbnQgaGFuZGxlciBhbmQgd29yayBpdGVt
cywKKyAgICAgICAgYW5kIGNhbGwgZGVyZWYoKSBhZnRlciB0aG9zZSBhcmUgZmluaXNoZWQuCisK
KyAgICAgICAgRHVyaW5nIHBlcmZvcm1Xb3JrLCBwZXJmb3JtVGltZXJXb3JrIGFuZCBzb2NrZXQg
ZXZlbnQgaGFuZGVyLCBkZXJlZigpCisgICAgICAgIGNhbiBiZSBjYWxsZWQgYW5kIHRoaXMgY2Fu
IGRlbGV0ZSB3b3JrUXVldWUgaW5zdGFuY2UuCisgICAgICAgIFdpdGggcHJldmlvdXMgaW1wbGVt
ZW50YXRpb24sIHRoaXMgY2FuIG1ha2UgZGFuZ2xpbmcgd29ya1F1ZXVlIHBvaW50ZXIKKyAgICAg
ICAgaW4gV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoKS4KKworICAgICAgICBUbyBwcmV2ZW50
IHRoaXMsIGFkZGl0aW9uYWwgcmVmKCkgYW5kIGRlcmVmKCkgaXMgYWRkZWQgYW5kIGtlZXAgc29t
ZQorICAgICAgICB3b3JrUXVldWUgaW5mb3JtYXRpb24gZm9yIHBvbGxpbmcgYmVmb3JlIGRlcmVm
KCkuCisKKyAgICAgICAgQW5kIHRvIG1ha2UgdGhlIGNvZGUgY2xlYXIsIFdvcmtRdWV1ZTo6cGVy
Zm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCisgICAgICAgIGlzIHJlbW92ZWQgYW5kIHRoZSBjb2Rl
cyBpbiB0aGUgZnVuY3Rpb24gYXJlIG1vdmVkIHRvIHRoZQorICAgICAgICBXb3JrUXVldWU6Ondv
cmtRdWV1ZVRocmVhZCgpLgorCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAg
ICAgIChXb3JrUXVldWUpOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3Bw
OgorICAgICAgICAoV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpOgorCiAyMDEzLTA0LTI3ICBK
ZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAppbmRleCBhYzAyZDE4NDAwNjM4MzE0MDhiNTFk
NGQ2ZDBhMzJmM2U4Y2U3MjU3Li5mZjExYzUzZDkyNTMxOWJhY2JjYTdhNWE5YThhMzBmMDYyYmQw
NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApAQCAtMTg4LDggKzE4OCw2IEBA
IHByaXZhdGU6CiAgICAgaW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yOwogICAgIE11dGV4IG1f
d3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9jazsKIAotICAgIGJvb2wgbV90aHJlYWRMb29wOwotCiAg
ICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3dvcmtJdGVtUXVldWU7CiAgICAgTXV0ZXgg
bV93b3JrSXRlbVF1ZXVlTG9jazsKIApAQCAtMjAyLDcgKzIwMCw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqKTsKICAgICBzdGF0aWMgdm9pZCog
d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOwogICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKLSAg
ICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKICAgICBzdGF0aWMgZG91YmxlIGdl
dEN1cnJlbnRUaW1lKCk7CiAgICAgc3RydWN0IHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCk7CiAg
ICAgdm9pZCBwZXJmb3JtVGltZXJXb3JrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2Vm
bC9Xb3JrUXVldWVFZmwuY3BwCmluZGV4IGViZGI4YTZmOGU4YTBiZjNiMDk4YThkZmYwOGE5Y2Iz
MjI1MzRlYjAuLjRjMjQ3N2Y2MDgyODZiNmM0YWJmNDUzMDkzODJlNjAyYTZiMWMwYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCkBAIC01Nyw3ICs1
Nyw2IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFt
ZSkKIAogICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwog
Ci0gICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKICAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRf
Y2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0
aGlzLCBuYW1lKTsKIH0KIApAQCAtODYsMjQgKzg1LDYgQEAgdm9pZCBXb3JrUXVldWU6OnBlcmZv
cm1Xb3JrKCkKICAgICB9CiB9CiAKLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0
b3JXb3JrKCkKLXsKLSAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVz
Y3JpcHRvclNldDsKLQotICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZy
ZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIGdldE5leHRUaW1lT3V0KCkpID49IDApIHsKLSAg
ICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVz
Y3JpcHRvclNldCkpIHsKLSAgICAgICAgICAgIGNoYXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6
ZV07Ci0gICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRC
dWYsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUiKTsKLSAgICAgICAgICAg
IGlmICghc3RybmNtcChyZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNzYWdlLCB0aHJlYWRNZXNzYWdl
U2l6ZSkpCi0gICAgICAgICAgICAgICAgbV90aHJlYWRMb29wID0gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlw
dG9yICYmIEZEX0lTU0VUKG1fc29ja2V0RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNl
dCkpCi0gICAgICAgICAgICBtX3NvY2tldEV2ZW50SGFuZGxlcigpOwotICAgIH0KLX0KLQogc3Ry
dWN0IHRpbWV2YWwqIFdvcmtRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQoKQogewogICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CkBAIC0xNzcsMTYgKzE1OCw1NCBAQCB2
b2lkIFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKiBtZXNzYWdlKQog
CiB2b2lkKiBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqIHdvcmtRdWV1ZSkK
IHsKLSAgICB3aGlsZSAod29ya1F1ZXVlLT5tX3RocmVhZExvb3ApIHsKKyAgICBib29sIHNvY2tl
dEV2ZW50QWN0aXZhdGVkID0gZmFsc2U7CisgICAgaW50IHJlYWRGcm9tUGlwZURlc2NyaXB0b3Ig
PSB3b3JrUXVldWUtPm1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICBpbnQgd3JpdGVUb1Bp
cGVEZXNjcmlwdG9yID0gd29ya1F1ZXVlLT5tX3dyaXRlVG9QaXBlRGVzY3JpcHRvcjsKKworICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIEtlZXAgd29ya1F1ZXVlIHVudGlsIHBlcmZvcm0g
ZXZlbnQgaGFuZGxlciBhbmQgd29yayBpdGVtcworICAgICAgICB3b3JrUXVldWUtPnJlZigpOwor
CisgICAgICAgIC8vIFBlcmZvcm0gZXZlbnQgaGFuZGVyIGFuZCB3b3JrIGl0ZW1zCisgICAgICAg
IGlmIChzb2NrZXRFdmVudEFjdGl2YXRlZCkKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+bV9zb2Nr
ZXRFdmVudEhhbmRsZXIoKTsKICAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtV29yaygpOwogICAg
ICAgICB3b3JrUXVldWUtPnBlcmZvcm1UaW1lcldvcmsoKTsKLSAgICAgICAgd29ya1F1ZXVlLT5w
ZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgfQogCi0gICAgY2xvc2Uod29ya1F1ZXVl
LT5tX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOwotICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV93cml0
ZVRvUGlwZURlc2NyaXB0b3IpOworICAgICAgICAvLyB3b3JrUXVldWUtPmRlcmVmKCkgY2FuIGRl
bGV0ZSB3b3JrUXVldWUgaW5zdGFuY2UuCisgICAgICAgIC8vIFNvIGJlZm9yZSBjYWxsIHRoZSBm
dW5jdGlvbiwgY29weSB3b3JrUXVldWUgaW5mb3JtYXRpb25zIGFib3V0IGV2ZW50IHBvbGwuCisg
ICAgICAgIGZkX3NldCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSB3b3JrUXVldWUtPm1fZmlsZURl
c2NyaXB0b3JTZXQ7CisgICAgICAgIGludCBtYXhGaWxlRGVzY3JpcHRvciA9IHdvcmtRdWV1ZS0+
bV9tYXhGaWxlRGVzY3JpcHRvcjsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwqIHRpbWVvdXQgPSB3
b3JrUXVldWUtPmdldE5leHRUaW1lT3V0KCk7CisgICAgICAgIGludCBzb2NrZXREZXNjcmlwdG9y
ID0gd29ya1F1ZXVlLT5tX3NvY2tldERlc2NyaXB0b3I7CisgICAgICAgIHNvY2tldEV2ZW50QWN0
aXZhdGVkID0gZmFsc2U7CisKKyAgICAgICAgLy8gRGVyZWYgd29ya3F1ZXVlLgorICAgICAgICAv
LyBJZiByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwLCB0aGUgd29ya1F1ZXVlIGluc3RhbmNlIHdp
bGwgYmUgZGVsZXRlZCwKKyAgICAgICAgLy8gYW5kIGZpbmlzaFRocmVhZE1lc3NhZ2Ugd2lsbCBi
ZSBzZW50IHRvIHRoZSBwaXBlIHRvIGZpbmlzaCB3b3JrUXVldWVUaHJlYWQuCisgICAgICAgIHdv
cmtRdWV1ZS0+ZGVyZWYoKTsKKworICAgICAgICBpZiAoc2VsZWN0KG1heEZpbGVEZXNjcmlwdG9y
ICsgMSwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwgdGltZW91dCkgPCAwKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKEZEX0lTU0VUKHJlYWRGcm9tUGlwZURlc2Ny
aXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7CisgICAgICAgICAgICBjaGFyIHJlYWRC
dWZbdGhyZWFkTWVzc2FnZVNpemVdOwogCi0gICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAo
cmVhZChyZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkg
PT0gLTEpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdv
cmtRdWV1ZVRocmVhZCBwaXBlIik7CisKKyAgICAgICAgICAgIC8vIFdoZW4gd29ya1F1ZXVlIHRo
cmVhZCByZWNlaXZlZCBmaW5pc2hUaHJlYWRNZXNzYWdlLAorICAgICAgICAgICAgLy8gY2xvc2Ug
cGlwZSBhbmQgdGVybWluYXRlIHdvcmtRdWV1ZSB0aHJlYWQuCisgICAgICAgICAgICBpZiAoIXN0
cm5jbXAocmVhZEJ1ZiwgZmluaXNoVGhyZWFkTWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpKSB7
CisgICAgICAgICAgICAgICAgY2xvc2UocmVhZEZyb21QaXBlRGVzY3JpcHRvcik7CisgICAgICAg
ICAgICAgICAgY2xvc2Uod3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzb2NrZXRE
ZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKHNvY2tldERl
c2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQorICAgICAgICAgICAgc29ja2V0RXZl
bnRBY3RpdmF0ZWQgPSB0cnVlOworICAgIH0KIH0KIAogdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVy
U29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199980</attachid>
            <date>2013-04-28 20:22:30 -0700</date>
            <delta_ts>2013-05-01 03:00:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20130429122150.patch</filename>
            <type>text/plain</type>
            <size>11495</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5MjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMGQyMGUzNTNjMTU0OTBl
NTg0MWU0ZGZjYjYwYjk3MDI3OTE4OTMyOS4uYTMzOWRkOGQ5YzEzN2UzNDZmMjY5YWZjYTdkY2I1
N2FlNTk2ZjkzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTA0LTI4ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBLZWVwIHdv
cmtRdWV1ZSBkdXJpbmcgcGVyZm9ybWluZyBldmVudCBoYW5kZXIgYW5kIHdvcmsgaXRlbXMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWxsIHJlZigp
IGJlZm9yZSBwZXJmb3JtaW5nIHdvcmsgcXVldWUgZXZlbnQgaGFuZGxlciBhbmQgd29yayBpdGVt
cywKKyAgICAgICAgYW5kIGNhbGwgZGVyZWYoKSBhZnRlciB0aG9zZSBhcmUgZmluaXNoZWQuCisK
KyAgICAgICAgRHVyaW5nIHBlcmZvcm1Xb3JrLCBwZXJmb3JtVGltZXJXb3JrIGFuZCBzb2NrZXQg
ZXZlbnQgaGFuZGVyLCBkZXJlZigpCisgICAgICAgIGNhbiBiZSBjYWxsZWQgYW5kIHRoaXMgY2Fu
IGRlbGV0ZSB3b3JrUXVldWUgaW5zdGFuY2UuCisgICAgICAgIFdpdGggcHJldmlvdXMgaW1wbGVt
ZW50YXRpb24sIHRoaXMgY2FuIG1ha2UgZGFuZ2xpbmcgd29ya1F1ZXVlIHBvaW50ZXIKKyAgICAg
ICAgaW4gV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoKS4KKworICAgICAgICBUbyBwcmV2ZW50
IHRoaXMsIGFkZGl0aW9uYWwgcmVmKCkgYW5kIGRlcmVmKCkgaXMgYWRkZWQgYW5kIGtlZXAgc29t
ZQorICAgICAgICB3b3JrUXVldWUgaW5mb3JtYXRpb24gZm9yIHBvbGxpbmcgYmVmb3JlIGRlcmVm
KCkuCisKKyAgICAgICAgVG8gbWFrZSB0aGUgY29kZSBjbGVhciwgV29ya1F1ZXVlOjpXb3JrUXVl
dWVUaHJlYWRQb2xsZXIgY2xhc3MgaXMgYWRkZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Xb3Jr
UXVldWUuaDoKKyAgICAgICAgKFdvcmtRdWV1ZVRocmVhZFBvbGxlcik6CisgICAgICAgIChXb3Jr
UXVldWU6OldvcmtRdWV1ZVRocmVhZFBvbGxlcjo6cGVyZm9ybVNvY2tldEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZFBvbGxlcjo6c29ja2V0QWN0aXZh
dGVkKToKKyAgICAgICAgKFdvcmtRdWV1ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnRocmVhZFBv
bGxlcik6CisgICAgICAgICogUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHA6CisgICAgICAg
IChXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZFBvbGxlcjo6V29ya1F1ZXVlVGhyZWFkUG9sbGVy
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkUG9sbGVyOjp+V29ya1F1ZXVl
VGhyZWFkUG9sbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkUG9sbGVy
OjpzZW5kTWVzc2FnZVRvVGhyZWFkKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhy
ZWFkUG9sbGVyOjpwb2xsKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkUG9s
bGVyOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6Oldv
cmtRdWV1ZVRocmVhZFBvbGxlcjo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVh
ZCk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAg
IChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRl
ckRlbGF5KToKKwogMjAxMy0wNC0yNyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKaW5k
ZXggYWMwMmQxODQwMDYzODMxNDA4YjUxZDRkNmQwYTMyZjNlOGNlNzI1Ny4uMjE1YmQ5ZDQ1NTZm
YWM4OGI5MzU2ZjFjYTVjMDE4ZGRiZmZjZGY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1
ZXVlLmgKQEAgLTE4MiwyNyArMTgyLDQxIEBAIHByaXZhdGU6CiAgICAgICAgIGRvdWJsZSBtX2V4
cGlyZVRpbWU7CiAgICAgfTsKIAotICAgIGZkX3NldCBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotICAg
IGludCBtX21heEZpbGVEZXNjcmlwdG9yOwotICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2NyaXB0
b3I7Ci0gICAgaW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yOwotICAgIE11dGV4IG1fd3JpdGVU
b1BpcGVEZXNjcmlwdG9yTG9jazsKKyAgICBjbGFzcyBXb3JrUXVldWVUaHJlYWRQb2xsZXIgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29ya1F1ZXVlVGhyZWFkUG9sbGVyPiB7CisgICAg
cHVibGljOgorICAgICAgICBXb3JrUXVldWVUaHJlYWRQb2xsZXIoKTsKKyAgICAgICAgfldvcmtR
dWV1ZVRocmVhZFBvbGxlcigpOworCisgICAgICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChj
b25zdCBjaGFyKik7CisgICAgICAgIGJvb2wgcG9sbChzdHJ1Y3QgdGltZXZhbCogdGltZW91dCk7
CisgICAgICAgIHZvaWQgcGVyZm9ybVNvY2tldEV2ZW50SGFuZGxlcigpIHsgbV9zb2NrZXRFdmVu
dEhhbmRsZXIoKTsgfQorICAgICAgICBib29sIHNvY2tldEFjdGl2YXRlZCgpIHsgcmV0dXJuIG1f
c29ja2V0QWN0aXZhdGVkOyB9CiAKLSAgICBib29sIG1fdGhyZWFkTG9vcDsKKyAgICAgICAgdm9p
ZCByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
KTsKKyAgICAgICAgdm9pZCB1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCk7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBmZF9zZXQgbV9maWxlRGVzY3JpcHRvclNldDsKKyAgICAgICAg
aW50IG1fbWF4RmlsZURlc2NyaXB0b3I7CisgICAgICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2Ny
aXB0b3I7CisgICAgICAgIGludCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcjsKKyAgICAgICAgTXV0
ZXggbV93cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrOworICAgICAgICBpbnQgbV9zb2NrZXREZXNj
cmlwdG9yOworICAgICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOwor
ICAgICAgICBib29sIG1fc29ja2V0QWN0aXZhdGVkOworICAgIH07CisKKyAgICBSZWZQdHI8V29y
a1F1ZXVlVGhyZWFkUG9sbGVyPiBtX3RocmVhZFBvbGxlcjsKIAogICAgIFZlY3RvcjxGdW5jdGlv
bjx2b2lkKCk+ID4gbV93b3JrSXRlbVF1ZXVlOwogICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxv
Y2s7CiAKLSAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4g
bV9zb2NrZXRFdmVudEhhbmRsZXI7Ci0KICAgICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+
ID4gbV90aW1lcldvcmtJdGVtczsKICAgICBNdXRleCBtX3RpbWVyV29ya0l0ZW1zTG9jazsKIAot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7CisgICAgUGFzc1JlZlB0
cjxXb3JrUXVldWVUaHJlYWRQb2xsZXI+IHRocmVhZFBvbGxlcigpIHsgcmV0dXJuIG1fdGhyZWFk
UG9sbGVyOyB9CiAgICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsK
ICAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7Ci0gICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JX
b3JrKCk7CiAgICAgc3RhdGljIGRvdWJsZSBnZXRDdXJyZW50VGltZSgpOwogICAgIHN0cnVjdCB0
aW1ldmFsKiBnZXROZXh0VGltZU91dCgpOwogICAgIHZvaWQgcGVyZm9ybVRpbWVyV29yaygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAppbmRleCBlYmRi
OGE2ZjhlOGEwYmYzYjA5OGE4ZGZmMDhhOWNiMzIyNTM0ZWIwLi41MzE0ZmE2NDFkZjQ3NWRmYmY1
ZjU5YzRhZGMzMDg3MWZmNzBiNTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwv
V29ya1F1ZXVlRWZsLmNwcApAQCAtNDMsNyArNDMsOSBAQCBXb3JrUXVldWU6OlRpbWVyV29ya0l0
ZW06OlRpbWVyV29ya0l0ZW0oRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbiwgZG91YmxlIGV4cGly
ZQogewogfQogCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIq
IG5hbWUpCitXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZFBvbGxlcjo6V29ya1F1ZXVlVGhyZWFk
UG9sbGVyKCkKKyAgICA6IG1fc29ja2V0RGVzY3JpcHRvcihpbnZhbGlkU29ja2V0RGVzY3JpcHRv
cikKKyAgICAsIG1fc29ja2V0QWN0aXZhdGVkKGZhbHNlKQogewogICAgIGludCBmZHNbMl07CiAg
ICAgaWYgKHBpcGUoZmRzKSkKQEAgLTU0LDE2ICs1Niw3OSBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgRkRfWkVSTygmbV9maWxlRGVz
Y3JpcHRvclNldCk7CiAgICAgRkRfU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1fZmls
ZURlc2NyaXB0b3JTZXQpOwogICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlw
ZURlc2NyaXB0b3I7Cit9CisKK1dvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkUG9sbGVyOjp+V29y
a1F1ZXVlVGhyZWFkUG9sbGVyKCkKK3sKKyAgICBjbG9zZShtX3JlYWRGcm9tUGlwZURlc2NyaXB0
b3IpOworICAgIGNsb3NlKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKK30KKwordm9pZCBXb3Jr
UXVldWU6OldvcmtRdWV1ZVRocmVhZFBvbGxlcjo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBj
aGFyKiBtZXNzYWdlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dyaXRlVG9QaXBlRGVz
Y3JpcHRvckxvY2spOworICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwgbWVz
c2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byB3YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKK30KKworYm9vbCBXb3JrUXVldWU6Oldv
cmtRdWV1ZVRocmVhZFBvbGxlcjo6cG9sbChzdHJ1Y3QgdGltZXZhbCogdGltZW91dCkKK3sKKyAg
ICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKKwor
ICAgIG1fc29ja2V0QWN0aXZhdGVkID0gZmFsc2U7CisgICAgaWYgKHNlbGVjdChtX21heEZpbGVE
ZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwgdGltZW91dCkgPCAw
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlw
ZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7CisgICAgICAgIGNoYXIgcmVh
ZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07CisKKyAgICAgICAgaWYgKHJlYWQobV9yZWFkRnJvbVBp
cGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCisgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUi
KTsKKworICAgICAgICAvLyBXaGVuIHdvcmtRdWV1ZSB0aHJlYWQgcmVjZWl2ZWQgZmluaXNoVGhy
ZWFkTWVzc2FnZSwKKyAgICAgICAgLy8gY2xvc2UgcGlwZSBhbmQgdGVybWluYXRlIHdvcmtRdWV1
ZSB0aHJlYWQuCisgICAgICAgIGlmICghc3RybmNtcChyZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNz
YWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRv
ciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQp
KQorICAgICAgICBtX3NvY2tldEFjdGl2YXRlZCA9IHRydWU7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZFBvbGxlcjo6cmVnaXN0ZXJTb2Nr
ZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKK3sKKyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2Nr
ZXREZXNjcmlwdG9yKQorICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0ZXJk
LiIsIGZpbGVEZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNj
cmlwdG9yOworICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CiAKKyAgICBpZiAo
ZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVE
ZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9yLCAm
bV9maWxlRGVzY3JpcHRvclNldCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJl
YWRQb2xsZXI6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9y
KQorewogICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwog
Ci0gICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKKyAgICBpZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9t
YXhGaWxlRGVzY3JpcHRvcikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvcjsKKyAgICBGRF9DTFIoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNj
cmlwdG9yU2V0KTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25z
dCBjaGFyKiBuYW1lKQoreworICAgIG1fdGhyZWFkUG9sbGVyID0gYWRvcHRSZWYobmV3IFdvcmtR
dWV1ZVRocmVhZFBvbGxlcigpKTsKKwogICAgIGNyZWF0ZVRocmVhZChyZWludGVycHJldF9jYXN0
PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZCksIHRoaXMs
IG5hbWUpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHsKLSAg
ICBzZW5kTWVzc2FnZVRvVGhyZWFkKGZpbmlzaFRocmVhZE1lc3NhZ2UpOworICAgIG1fdGhyZWFk
UG9sbGVyLT5zZW5kTWVzc2FnZVRvVGhyZWFkKGZpbmlzaFRocmVhZE1lc3NhZ2UpOwogfQogCiB2
b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQpAQCAtODYsMjQgKzE1MSw2IEBAIHZvaWQgV29y
a1F1ZXVlOjpwZXJmb3JtV29yaygpCiAgICAgfQogfQogCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9y
bUZpbGVEZXNjcmlwdG9yV29yaygpCi17Ci0gICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNl
dCA9IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2Ny
aXB0b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBnZXROZXh0VGltZU91dCgp
KSA+PSAwKSB7Ci0gICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3Is
ICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7Ci0gICAgICAgICAgICBjaGFyIHJlYWRCdWZbdGhy
ZWFkTWVzc2FnZVNpemVdOwotICAgICAgICAgICAgaWYgKHJlYWQobV9yZWFkRnJvbVBpcGVEZXNj
cmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdvcmtRdWV1ZVRocmVhZCBwaXBlIik7
Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1ZiwgZmluaXNoVGhyZWFkTWVzc2FnZSwg
dGhyZWFkTWVzc2FnZVNpemUpKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkTG9vcCA9IGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlk
U29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFkRmls
ZURlc2NyaXB0b3JTZXQpKQotICAgICAgICAgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsKLSAg
ICB9Ci19Ci0KIHN0cnVjdCB0aW1ldmFsKiBXb3JrUXVldWU6OmdldE5leHRUaW1lT3V0KCkKIHsK
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwpAQCAtMTY4LDQ3
ICsyMTUsMzggQEAgdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1UaW1lcldvcmsoKQogICAgIH0KIH0K
IAotdm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciogbWVzc2Fn
ZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93cml0ZVRvUGlwZURlc2NyaXB0b3JMb2Nr
KTsKLSAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVh
ZE1lc3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1
cCBXb3JrUXVldWUgVGhyZWFkIik7Ci19Ci0KIHZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhy
ZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQogewotICAgIHdoaWxlICh3b3JrUXVldWUtPm1fdGhy
ZWFkTG9vcCkgeworICAgIHN0cnVjdCB0aW1ldmFsKiB0aW1lb3V0OworICAgIFJlZlB0cjxXb3Jr
UXVldWVUaHJlYWRQb2xsZXI+IHBvbGxlciA9IHdvcmtRdWV1ZS0+dGhyZWFkUG9sbGVyKCk7CisK
KyAgICBkbyB7CisgICAgICAgIC8vIEtlZXAgd29ya1F1ZXVlIGR1cmluZyBwZXJmb3JtaW1nIGV2
ZW50IGhhbmRsZXIgYW5kIHdvcmsgaXRlbXMKKyAgICAgICAgLy8gRGVyZWYgd29ya3F1ZXVlIGF0
IHRoZSBlbmQgb2YgdGhpcyBibG9jay4KKyAgICAgICAgLy8gSWYgcmVmZXJlbmNlIGNvdW50IHJl
YWNoZXMgMCwgdGhlIHdvcmtRdWV1ZSBpbnN0YW5jZSB3aWxsIGJlIGRlbGV0ZWQsCisgICAgICAg
IC8vIGFuZCBmaW5pc2hUaHJlYWRNZXNzYWdlIHdpbGwgYmUgc2VudCB0byB0aGUgcGlwZSB0byBm
aW5pc2ggd29ya1F1ZXVlVGhyZWFkLgorICAgICAgICBSZWZQdHI8V29ya1F1ZXVlPiBrZWVwKHdv
cmtRdWV1ZSk7CisKKyAgICAgICAgLy8gUGVyZm9ybSBldmVudCBoYW5kZXIgYW5kIHdvcmsgaXRl
bXMKKyAgICAgICAgaWYgKHBvbGxlci0+c29ja2V0QWN0aXZhdGVkKCkpCisgICAgICAgICAgICBw
b2xsZXItPnBlcmZvcm1Tb2NrZXRFdmVudEhhbmRsZXIoKTsKICAgICAgICAgd29ya1F1ZXVlLT5w
ZXJmb3JtV29yaygpOwogICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1UaW1lcldvcmsoKTsKLSAg
ICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgfQogCi0g
ICAgY2xvc2Uod29ya1F1ZXVlLT5tX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOwotICAgIGNsb3Nl
KHdvcmtRdWV1ZS0+bV93cml0ZVRvUGlwZURlc2NyaXB0b3IpOworICAgICAgICB0aW1lb3V0ID0g
d29ya1F1ZXVlLT5nZXROZXh0VGltZU91dCgpOworICAgIH0gd2hpbGUgKHBvbGxlci0+cG9sbCh0
aW1lb3V0KSk7CiAKICAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVy
U29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCiB7Ci0gICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlk
U29ja2V0RGVzY3JpcHRvcikKLSAgICAgICAgTE9HX0VSUk9SKCIlZCBpcyBhbHJlYWR5IHJlZ2lz
dGVyZC4iLCBmaWxlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBmaWxl
RGVzY3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uOwotCi0gICAg
aWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9tYXhG
aWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIEZEX1NFVChmaWxlRGVzY3JpcHRv
ciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIG1fdGhyZWFkUG9sbGVyLT5yZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvciwgZnVuY3Rpb24pOwogfQogCiB2b2lkIFdv
cmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3Ip
CiB7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0K
LSAgICBpZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAg
bV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBGRF9D
TFIoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBtX3RocmVhZFBv
bGxlci0+dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvcik7CiB9CiAK
IHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
bikKQEAgLTIyMCw3ICsyNTgsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiAgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQo
ZnVuY3Rpb24pOwogICAgIH0KIAotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRN
ZXNzYWdlKTsKKyAgICBtX3RocmVhZFBvbGxlci0+c2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRo
cmVhZE1lc3NhZ2UpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCkBAIC0yMzQsNSAr
MjcyLDUgQEAgdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGEKIAogICAgIHJlZigpOwogICAgIGluc2Vy
dFRpbWVyV29ya0l0ZW0odGltZXJXb3JrSXRlbS5yZWxlYXNlKCkpOwotICAgIHNlbmRNZXNzYWdl
VG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKKyAgICBtX3RocmVhZFBvbGxlci0+c2VuZE1l
c3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200209</attachid>
            <date>2013-05-01 03:00:45 -0700</date>
            <delta_ts>2013-05-13 19:33:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20130501185957.patch</filename>
            <type>text/plain</type>
            <size>12453</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTAzNmMyNDA3NTI2ZDY3
YTZjNzZiZmFkYTZlNDMzMGE1YWVhOTI4MC4uNTRiYjZjZGU5M2RlNWVjZmY2ZDRkZjcxNTJiZDg4
MGQwOTdmZDBmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEzLTA1LTAxICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBLZWVwIHdv
cmtRdWV1ZSBkdXJpbmcgcGVyZm9ybWluZyBldmVudCBoYW5kZXIgYW5kIHdvcmsgaXRlbXMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWxsIHJlZigp
IGJlZm9yZSBwZXJmb3JtaW5nIHdvcmsgcXVldWUgZXZlbnQgaGFuZGxlciBhbmQgd29yayBpdGVt
cywKKyAgICAgICAgYW5kIGNhbGwgZGVyZWYoKSBhZnRlciB0aG9zZSBhcmUgZmluaXNoZWQuCisK
KyAgICAgICAgRHVyaW5nIHBlcmZvcm1Xb3JrLCBwZXJmb3JtVGltZXJXb3JrIGFuZCBzb2NrZXQg
ZXZlbnQgaGFuZGVyLCBkZXJlZigpCisgICAgICAgIGNhbiBiZSBjYWxsZWQgYW5kIHRoaXMgY2Fu
IGRlbGV0ZSB3b3JrUXVldWUgaW5zdGFuY2UuCisgICAgICAgIFdpdGggcHJldmlvdXMgaW1wbGVt
ZW50YXRpb24sIHRoaXMgY2FuIG1ha2UgZGFuZ2xpbmcgd29ya1F1ZXVlIHBvaW50ZXIKKyAgICAg
ICAgaW4gV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoKS4KKworICAgICAgICBUbyBwcmV2ZW50
IHRoaXMsIGFkZGl0aW9uYWwgcmVmKCkgYW5kIGRlcmVmKCkgaXMgYWRkZWQgYW5kIGtlZXAgc29t
ZQorICAgICAgICB3b3JrUXVldWUgaW5mb3JtYXRpb24gZm9yIHBvbGxpbmcgYmVmb3JlIGRlcmVm
KCkuCisKKyAgICAgICAgVG8gbWFrZSB0aGUgY29kZSBjbGVhciwgV29ya1F1ZXVlOjpXb3JrUXVl
dWVUaHJlYWQgY2xhc3MgaXMgYWRkZWQuCisgICAgICAgIFRoaXMgY2xhc3MgaGFzIG1ldGhvZHMg
dG8gY29udHJvbCB3b3JrcXVldWUgdGhyZWFkLgorCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1
ZXVlLmg6CisgICAgICAgIChXb3JrUXVldWVUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlKToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6dGhyZWFkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9lZmwvV29y
a1F1ZXVlRWZsLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjpXb3Jr
UXVldWVUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJlYWQ6OnN0YXJ0
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjp+V29ya1F1ZXVlVGhyZWFk
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjpzZW5kRXZlbnQpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJlYWQ6Ondha2V1cCk6CisgICAgICAgIChXb3Jr
UXVldWU6OldvcmtRdWV1ZVRocmVhZDo6ZmluaXNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29y
a1F1ZXVlVGhyZWFkOjpwb2xsKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFk
OjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtR
dWV1ZVRocmVhZDo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3Jr
UXVldWU6OldvcmtRdWV1ZVRocmVhZDo6bWFpbik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtR
dWV1ZVRocmVhZDo6cGVyZm9ybVNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVl
dWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0
Y2hBZnRlckRlbGF5KToKKwogMjAxMy0wNC0zMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM3NTc0NzU+IFdlYlByb2Nlc3Mg
ZGVueSBpcGMtcG9zaXgtc2htLXJlYWQtZGF0YSBDRlBCUzpBMjoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmgKaW5kZXggYWMwMmQxODQwMDYzODMxNDA4YjUxZDRkNmQwYTMyZjNlOGNlNzI1
Ny4uNDMyY2I2MGViYjZmZmI3NDVjNTJhOTFhMWRlYTQ5NmU0ZTIwZmRlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vV29ya1F1ZXVlLmgKQEAgLTE4MiwyNyArMTgyLDQ1IEBAIHByaXZhdGU6CiAgICAg
ICAgIGRvdWJsZSBtX2V4cGlyZVRpbWU7CiAgICAgfTsKIAotICAgIGZkX3NldCBtX2ZpbGVEZXNj
cmlwdG9yU2V0OwotICAgIGludCBtX21heEZpbGVEZXNjcmlwdG9yOwotICAgIGludCBtX3JlYWRG
cm9tUGlwZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yOwotICAg
IE11dGV4IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9jazsKKyAgICBjbGFzcyBXb3JrUXVldWVU
aHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29ya1F1ZXVlVGhyZWFkPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBXb3JrUXVldWVUaHJlYWQoKTsKKyAgICAgICAgfldvcmtRdWV1
ZVRocmVhZCgpOworCisgICAgICAgIHZvaWQgc3RhcnQoV29ya1F1ZXVlKiwgY29uc3QgY2hhciog
bmFtZSk7CisgICAgICAgIHZvaWQgd2FrZXVwKCk7CisgICAgICAgIHZvaWQgZmluaXNoKCk7CiAK
LSAgICBib29sIG1fdGhyZWFkTG9vcDsKKyAgICAgICAgdm9pZCByZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICAgICAgdm9pZCB1bnJl
Z2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBz
dGF0aWMgdm9pZCogbWFpbihXb3JrUXVldWUqKTsKKworICAgICAgICBpbmxpbmUgdm9pZCBzZW5k
RXZlbnQoY29uc3QgY2hhcik7CisgICAgICAgIGJvb2wgcG9sbChzdHJ1Y3QgdGltZXZhbCogdGlt
ZW91dCk7CisgICAgICAgIHZvaWQgcGVyZm9ybVNvY2tldEV2ZW50SGFuZGxlcigpOworCisgICAg
ICAgIGZkX3NldCBtX2ZpbGVEZXNjcmlwdG9yU2V0OworICAgICAgICBpbnQgbV9tYXhGaWxlRGVz
Y3JpcHRvcjsKKyAgICAgICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICAgICAg
aW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yOworICAgICAgICBNdXRleCBtX3dyaXRlVG9QaXBl
RGVzY3JpcHRvckxvY2s7CisgICAgICAgIGludCBtX3NvY2tldERlc2NyaXB0b3I7CisgICAgICAg
IEZ1bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7CisgICAgICAgIGJvb2wgbV9z
b2NrZXRBY3RpdmF0ZWQ7CisgICAgfTsKKworICAgIFJlZlB0cjxXb3JrUXVldWVUaHJlYWQ+IG1f
dGhyZWFkOwogCiAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3dvcmtJdGVtUXVldWU7
CiAgICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsKIAotICAgIGludCBtX3NvY2tldERlc2Ny
aXB0b3I7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX3NvY2tldEV2ZW50SGFuZGxlcjsKLQogICAg
IFZlY3RvcjxPd25QdHI8VGltZXJXb3JrSXRlbT4gPiBtX3RpbWVyV29ya0l0ZW1zOwogICAgIE11
dGV4IG1fdGltZXJXb3JrSXRlbXNMb2NrOwogCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFk
KGNvbnN0IGNoYXIqKTsKLSAgICBzdGF0aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1
ZSopOworICAgIFBhc3NSZWZQdHI8V29ya1F1ZXVlVGhyZWFkPiB0aHJlYWQoKSB7IHJldHVybiBt
X3RocmVhZDsgfQogICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxl
RGVzY3JpcHRvcldvcmsoKTsKICAgICBzdGF0aWMgZG91YmxlIGdldEN1cnJlbnRUaW1lKCk7CiAg
ICAgc3RydWN0IHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCk7CiAgICAgdm9pZCBwZXJmb3JtVGlt
ZXJXb3JrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1
ZXVlRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3Bw
CmluZGV4IGViZGI4YTZmOGU4YTBiZjNiMDk4YThkZmYwOGE5Y2IzMjI1MzRlYjAuLmE4N2ExZDNh
ZTA1ZTFmMzcwZWNiNWQ5MmU2MWE4NWMyMzUxMjE2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCkBAIC0yNSw5ICsyNSw4IEBACiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAKIHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tldERlc2Ny
aXB0b3IgPSAtMTsKLXN0YXRpYyBjb25zdCBpbnQgdGhyZWFkTWVzc2FnZVNpemUgPSAxOwotc3Rh
dGljIGNvbnN0IGNoYXIgZmluaXNoVGhyZWFkTWVzc2FnZVtdID0gIkYiOwotc3RhdGljIGNvbnN0
IGNoYXIgd2FrdXBUaHJlYWRNZXNzYWdlW10gPSAiVyI7CitzdGF0aWMgY29uc3QgY2hhciBmaW5p
c2hUaHJlYWQgPSAnRic7CitzdGF0aWMgY29uc3QgY2hhciB3YWtldXBUaHJlYWQgPSAnVyc7CiAK
IFBhc3NPd25QdHI8V29ya1F1ZXVlOjpUaW1lcldvcmtJdGVtPiBXb3JrUXVldWU6OlRpbWVyV29y
a0l0ZW06OmNyZWF0ZShGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uLCBkb3VibGUgZXhwaXJlVGlt
ZSkKIHsKQEAgLTQzLDcgKzQyLDkgQEAgV29ya1F1ZXVlOjpUaW1lcldvcmtJdGVtOjpUaW1lcldv
cmtJdGVtKEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24sIGRvdWJsZSBleHBpcmUKIHsKIH0KIAot
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQorV29y
a1F1ZXVlOjpXb3JrUXVldWVUaHJlYWQ6OldvcmtRdWV1ZVRocmVhZCgpCisgICAgOiBtX3NvY2tl
dERlc2NyaXB0b3IoaW52YWxpZFNvY2tldERlc2NyaXB0b3IpCisgICAgLCBtX3NvY2tldEFjdGl2
YXRlZChmYWxzZSkKIHsKICAgICBpbnQgZmRzWzJdOwogICAgIGlmIChwaXBlKGZkcykpCkBAIC01
NCwxNiArNTUsMTI1IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3Qg
Y2hhciogbmFtZSkKICAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKICAgICBGRF9T
RVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CiAgICAg
bV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKK30KKwordm9p
ZCBXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZDo6c3RhcnQoV29ya1F1ZXVlKiB3b3JrUXVldWUs
IGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8
V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZVRocmVhZDo6bWFpbiksIHdvcmtRdWV1ZSwg
bmFtZSk7Cit9CisKK1dvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjp+V29ya1F1ZXVlVGhyZWFk
KCkKK3sKKyAgICBjbG9zZShtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOworICAgIGNsb3NlKG1f
d3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKK30KKwordm9pZCBXb3JrUXVldWU6OldvcmtRdWV1ZVRo
cmVhZDo6c2VuZEV2ZW50KGNvbnN0IGNoYXIgZXZlbnQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9jayk7CisgICAgaWYgKHdyaXRlKG1fd3JpdGVU
b1BpcGVEZXNjcmlwdG9yLCAmZXZlbnQsIHNpemVvZihjaGFyKSkgPT0gLTEpCisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHdha2UgdXAgV29ya1F1ZXVlIFRocmVhZCIpOworfQorCit2b2lk
IFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjp3YWtldXAoKQoreworICAgIHNlbmRFdmVudCh3
YWtldXBUaHJlYWQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjpmaW5p
c2goKQoreworICAgIHNlbmRFdmVudChmaW5pc2hUaHJlYWQpOworfQorCitib29sIFdvcmtRdWV1
ZTo6V29ya1F1ZXVlVGhyZWFkOjpwb2xsKHN0cnVjdCB0aW1ldmFsKiB0aW1lb3V0KQoreworICAg
IGZkX3NldCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0OworCisg
ICAgbV9zb2NrZXRBY3RpdmF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURl
c2NyaXB0b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCB0aW1lb3V0KSA8IDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBl
RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKKyAgICAgICAgY2hhciBldmVu
dDsKKworICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZldmVudCwg
c2l6ZW9mKGNoYXIpKSA9PSAtMSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJl
YWQgZnJvbSBXb3JrUXVldWVUaHJlYWQgcGlwZSIpOworCisgICAgICAgIC8vIFdoZW4gd29ya1F1
ZXVlIHRocmVhZCByZWNlaXZlZCBmaW5pc2hUaHJlYWRNZXNzYWdlLAorICAgICAgICAvLyBjbG9z
ZSBwaXBlIGFuZCB0ZXJtaW5hdGUgd29ya1F1ZXVlIHRocmVhZC4KKyAgICAgICAgaWYgKGV2ZW50
ID09IGZpbmlzaFRocmVhZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBB
U1NFUlQoZXZlbnQgPT0gd2FrZXVwVGhyZWFkKTsKKyAgICB9CisKKyAgICBpZiAobV9zb2NrZXRE
ZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1fc29ja2V0
RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCisgICAgICAgIG1fc29ja2V0QWN0
aXZhdGVkID0gdHJ1ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
V29ya1F1ZXVlVGhyZWFkOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2Ny
aXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVCht
X3NvY2tldERlc2NyaXB0b3IgPT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOworCisgICAgbV9z
b2NrZXREZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgbV9zb2NrZXRFdmVudEhhbmRs
ZXIgPSBmdW5jdGlvbjsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2Ny
aXB0b3IpCisgICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAg
ICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKK30KKwordm9p
ZCBXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZDo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxl
cihpbnQgZmlsZURlc2NyaXB0b3IpCit7CisgICAgQVNTRVJUKG1fc29ja2V0RGVzY3JpcHRvciAh
PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7CiAKICAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBp
bnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKIAotICAgIG1fdGhyZWFkTG9vcCA9IHRydWU7Ci0gICAg
Y3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtR
dWV1ZTo6d29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7CisgICAgaWYgKGZpbGVEZXNjcmlw
dG9yID09IG1fbWF4RmlsZURlc2NyaXB0b3IpCisgICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3Ig
PSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisgICAgRkRfQ0xSKGZpbGVEZXNjcmlwdG9yLCAm
bV9maWxlRGVzY3JpcHRvclNldCk7Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhy
ZWFkOjptYWluKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAgIHN0cnVjdCB0aW1ldmFsKiB0
aW1lb3V0OworICAgIFJlZlB0cjxXb3JrUXVldWVUaHJlYWQ+IHRocmVhZCA9IHdvcmtRdWV1ZS0+
dGhyZWFkKCk7CisKKyAgICBkbyB7CisgICAgICAgIC8vIEtlZXAgd29ya1F1ZXVlIGR1cmluZyBw
ZXJmb3JtaW1nIGV2ZW50IGhhbmRsZXIgYW5kIHdvcmsgaXRlbXMKKyAgICAgICAgLy8gRGVyZWYg
d29ya3F1ZXVlIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9jay4KKyAgICAgICAgLy8gSWYgcmVmZXJl
bmNlIGNvdW50IHJlYWNoZXMgMCwgdGhlIHdvcmtRdWV1ZSBpbnN0YW5jZSB3aWxsIGJlIGRlbGV0
ZWQsCisgICAgICAgIC8vIGFuZCBmaW5pc2hUaHJlYWRNZXNzYWdlIHdpbGwgYmUgc2VudCB0byB0
aGUgcGlwZSB0byBmaW5pc2ggd29ya1F1ZXVlVGhyZWFkLgorICAgICAgICBSZWZQdHI8V29ya1F1
ZXVlPiBrZWVwKHdvcmtRdWV1ZSk7CisKKyAgICAgICAgLy8gUGVyZm9ybSBldmVudCBoYW5kZXIg
YW5kIHdvcmsgaXRlbXMKKyAgICAgICAgdGhyZWFkLT5wZXJmb3JtU29ja2V0RXZlbnRIYW5kbGVy
KCk7CisgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKKyAgICAgICAgd29ya1F1ZXVl
LT5wZXJmb3JtVGltZXJXb3JrKCk7CisKKyAgICAgICAgdGltZW91dCA9IHdvcmtRdWV1ZS0+Z2V0
TmV4dFRpbWVPdXQoKTsKKyAgICB9IHdoaWxlICh0aHJlYWQtPnBvbGwodGltZW91dCkpOworCisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJlYWQ6OnBlcmZv
cm1Tb2NrZXRFdmVudEhhbmRsZXIoKQoreworICAgIGlmIChtX3NvY2tldEFjdGl2YXRlZCkKKyAg
ICAgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRm
b3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIG1fdGhyZWFkID0gYWRvcHRS
ZWYobmV3IFdvcmtRdWV1ZVRocmVhZCgpKTsKKyAgICBtX3RocmVhZC0+c3RhcnQodGhpcywgbmFt
ZSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogewotICAgIHNl
bmRNZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhyZWFkTWVzc2FnZSk7CisgICAgbV90aHJlYWQtPmZp
bmlzaCgpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQpAQCAtODYsMjQgKzE5
Niw2IEBAIHZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29yaygpCiAgICAgfQogfQogCi12b2lkIFdv
cmtRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCi17Ci0gICAgZmRfc2V0IHJlYWRG
aWxlRGVzY3JpcHRvclNldCA9IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0
KG1fbWF4RmlsZURlc2NyaXB0b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBn
ZXROZXh0VGltZU91dCgpKSA+PSAwKSB7Ci0gICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9t
UGlwZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7Ci0gICAgICAgICAgICBj
aGFyIHJlYWRCdWZbdGhyZWFkTWVzc2FnZVNpemVdOwotICAgICAgICAgICAgaWYgKHJlYWQobV9y
ZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEp
Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdvcmtRdWV1
ZVRocmVhZCBwaXBlIik7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1ZiwgZmluaXNo
VGhyZWFkTWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpKQotICAgICAgICAgICAgICAgIG1fdGhy
ZWFkTG9vcCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fc29ja2V0RGVzY3Jp
cHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2Ny
aXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQotICAgICAgICAgICAgbV9zb2NrZXRFdmVu
dEhhbmRsZXIoKTsKLSAgICB9Ci19Ci0KIHN0cnVjdCB0aW1ldmFsKiBXb3JrUXVldWU6OmdldE5l
eHRUaW1lT3V0KCkKIHsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xv
Y2spOwpAQCAtMTY4LDQ3ICsyNjAsMTQgQEAgdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1UaW1lcldv
cmsoKQogICAgIH0KIH0KIAotdm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29u
c3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93cml0ZVRvUGlw
ZURlc2NyaXB0b3JMb2NrKTsKLSAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3Is
IG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7Ci19Ci0KLXZvaWQqIFdvcmtRdWV1
ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQotewotICAgIHdoaWxlICh3
b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgewotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1Xb3Jr
KCk7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVRpbWVyV29yaygpOwotICAgICAgICB3b3Jr
UXVldWUtPnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICB9Ci0KLSAgICBjbG9zZSh3
b3JrUXVldWUtPm1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2Uod29ya1F1ZXVl
LT5tX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBX
b3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiB7Ci0gICAgaWYgKG1fc29ja2V0RGVz
Y3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcikKLSAgICAgICAgTE9HX0VSUk9SKCIl
ZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZC4iLCBmaWxlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3NvY2tl
dERlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9
IGZ1bmN0aW9uOwotCi0gICAgaWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRv
cikKLSAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIEZE
X1NFVChmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIG1fdGhyZWFk
LT5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvciwgZnVuY3Rpb24pOwog
fQogCiB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmls
ZURlc2NyaXB0b3IpCiB7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERl
c2NyaXB0b3I7Ci0KLSAgICBpZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRv
cikKLSAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRv
cjsKLSAgICBGRF9DTFIoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAg
ICBtX3RocmVhZC0+dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvcik7
CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbikKQEAgLTIyMCw3ICsyNzksNyBAQCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiAgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5h
cHBlbmQoZnVuY3Rpb24pOwogICAgIH0KIAotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBU
aHJlYWRNZXNzYWdlKTsKKyAgICBtX3RocmVhZC0+d2FrZXVwKCk7CiB9CiAKIHZvaWQgV29ya1F1
ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24s
IGRvdWJsZSBkZWxheSkKQEAgLTIzNCw1ICsyOTMsNSBAQCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0
Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVs
YQogCiAgICAgcmVmKCk7CiAgICAgaW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtLnJl
bGVhc2UoKSk7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOwor
ICAgIG1fdGhyZWFkLT53YWtldXAoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201669</attachid>
            <date>2013-05-13 19:33:35 -0700</date>
            <delta_ts>2013-05-15 20:20:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>workqueue.diff</filename>
            <type>text/plain</type>
            <size>11808</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzZGUzMzMyLi4xZWIyMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYg
QEAKKzIwMTMtMDUtMTQgIEJ5dW5nd29vIExlZSAgPGJ3ODAubGVlQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtFRkxdIEtlZXAgd29ya1F1ZXVlIGR1cmluZyBwZXJmb3JtaW5nIGV2ZW50IGhhbmRl
ciBhbmQgd29yayBpdGVtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNTMzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIENhbGwgcmVmKCkgYmVmb3JlIHBlcmZvcm1pbmcgd29yayBxdWV1ZSBldmVudCBo
YW5kbGVyIGFuZCB3b3JrIGl0ZW1zLAorICAgICAgICBhbmQgY2FsbCBkZXJlZigpIGFmdGVyIHRo
b3NlIGFyZSBmaW5pc2hlZC4KKworICAgICAgICBEdXJpbmcgcGVyZm9ybVdvcmssIHBlcmZvcm1U
aW1lcldvcmsgYW5kIHNvY2tldCBldmVudCBoYW5kZXIsIGRlcmVmKCkKKyAgICAgICAgY2FuIGJl
IGNhbGxlZCBhbmQgdGhpcyBjYW4gZGVsZXRlIHdvcmtRdWV1ZSBpbnN0YW5jZS4KKyAgICAgICAg
V2l0aCBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBjYW4gbWFrZSBkYW5nbGluZyB3b3Jr
UXVldWUgcG9pbnRlcgorICAgICAgICBpbiBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZCgpLgor
CisgICAgICAgIFRvIHByZXZlbnQgdGhpcywgYWRkaXRpb25hbCByZWYoKSBhbmQgZGVyZWYoKSBp
cyBhZGRlZCBhbmQga2VlcCBzb21lCisgICAgICAgIHdvcmtRdWV1ZSBpbmZvcm1hdGlvbiBmb3Ig
cG9sbGluZyBiZWZvcmUgZGVyZWYoKS4KKworICAgICAgICBUbyBtYWtlIHRoZSBjb2RlIGNsZWFy
LCBXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZCBjbGFzcyBpcyBhZGRlZC4KKyAgICAgICAgVGhp
cyBjbGFzcyBoYXMgbWV0aG9kcyB0byBjb250cm9sIHdvcmtxdWV1ZSB0aHJlYWQuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybS9Xb3JrUXVldWUuaDoKKyAgICAgICAgKFdvcmtRdWV1ZVRocmVhZCk6Cisg
ICAgICAgIChXb3JrUXVldWUpOgorICAgICAgICAoV29ya1F1ZXVlOjp0aHJlYWQpOgorICAgICAg
ICAqIFBsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpX
b3JrUXVldWVUaHJlYWQ6OldvcmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6Oldv
cmtRdWV1ZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJl
YWQ6On5Xb3JrUXVldWVUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJl
YWQ6Ondha2V1cCk6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZDo6ZmluaXNo
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjpwb2xsKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZDo6dW5yZWdpc3RlclNvY2tldEV2
ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZDo6bWFpbik6
CisgICAgICAgIChXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZDo6cGVyZm9ybVNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKwogMjAxMy0wNS0xMyAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
ZWQgdGVzdFJ1bm5lci5zZXRQcmludGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgK
aW5kZXggZDk1NGY1Ny4uMDQyYTJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgK
QEAgLTE4MiwyNyArMTgyLDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIGRvdWJsZSBtX2V4cGlyZVRp
bWU7CiAgICAgfTsKIAotICAgIGZkX3NldCBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotICAgIGludCBt
X21heEZpbGVEZXNjcmlwdG9yOwotICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0g
ICAgaW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yOwotICAgIE11dGV4IG1fd3JpdGVUb1BpcGVE
ZXNjcmlwdG9yTG9jazsKKyAgICBjbGFzcyBXb3JrUXVldWVUaHJlYWQgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8V29ya1F1ZXVlVGhyZWFkPiB7CisgICAgcHVibGljOgorICAgICAgICBX
b3JrUXVldWVUaHJlYWQoKTsKKyAgICAgICAgfldvcmtRdWV1ZVRocmVhZCgpOworCisgICAgICAg
IHZvaWQgc3RhcnQoV29ya1F1ZXVlKiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgICAgIHZvaWQg
d2FrZXVwKCk7CisgICAgICAgIHZvaWQgZmluaXNoKCk7CiAKLSAgICBib29sIG1fdGhyZWFkTG9v
cDsKKyAgICAgICAgdm9pZCByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mKTsKKyAgICAgICAgdm9pZCB1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5k
bGVyKGludCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgdm9pZCogbWFpbihXb3Jr
UXVldWUqKTsKKworICAgICAgICBib29sIHBvbGwoc3RydWN0IHRpbWV2YWwqIHRpbWVvdXQpOwor
ICAgICAgICB2b2lkIHBlcmZvcm1Tb2NrZXRFdmVudEhhbmRsZXIoKTsKKworICAgICAgICBmZF9z
ZXQgbV9maWxlRGVzY3JpcHRvclNldDsKKyAgICAgICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7
CisgICAgICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisgICAgICAgIGludCBtX3dy
aXRlVG9QaXBlRGVzY3JpcHRvcjsKKyAgICAgICAgTXV0ZXggbV93cml0ZVRvUGlwZURlc2NyaXB0
b3JMb2NrOworICAgICAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOworICAgICAgICBGdW5jdGlv
bjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOworICAgICAgICBib29sIG1fc29ja2V0QWN0
aXZhdGVkOworICAgICAgICBib29sIG1fZmluaXNoZWQ7CisgICAgfTsKKworICAgIFJlZlB0cjxX
b3JrUXVldWVUaHJlYWQ+IG1fdGhyZWFkOwogCiAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4+
IG1fd29ya0l0ZW1RdWV1ZTsKICAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwogCi0gICAg
aW50IG1fc29ja2V0RGVzY3JpcHRvcjsKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZl
bnRIYW5kbGVyOwotCiAgICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVtPj4gbV90aW1lcldv
cmtJdGVtczsKICAgICBNdXRleCBtX3RpbWVyV29ya0l0ZW1zTG9jazsKIAotICAgIHZvaWQgc2Vu
ZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7Ci0gICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1
ZVRocmVhZChXb3JrUXVldWUqKTsKKyAgICBQYXNzUmVmUHRyPFdvcmtRdWV1ZVRocmVhZD4gdGhy
ZWFkKCkgeyByZXR1cm4gbV90aHJlYWQ7IH0KICAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7Ci0gICAg
dm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CiAgICAgc3RhdGljIGRvdWJsZSBnZXRD
dXJyZW50VGltZSgpOwogICAgIHN0cnVjdCB0aW1ldmFsKiBnZXROZXh0VGltZU91dCgpOwogICAg
IHZvaWQgcGVyZm9ybVRpbWVyV29yaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwv
V29ya1F1ZXVlRWZsLmNwcAppbmRleCBlYmRiOGE2Li4wZWNmYmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMjUsOSArMjUsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiBzdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2Nr
ZXREZXNjcmlwdG9yID0gLTE7Ci1zdGF0aWMgY29uc3QgaW50IHRocmVhZE1lc3NhZ2VTaXplID0g
MTsKLXN0YXRpYyBjb25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9ICJGIjsKLXN0YXRp
YyBjb25zdCBjaGFyIHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlciOworc3RhdGljIGNvbnN0IGNo
YXIgd2FrZXVwVGhyZWFkID0gJ1cnOwogCiBQYXNzT3duUHRyPFdvcmtRdWV1ZTo6VGltZXJXb3Jr
SXRlbT4gV29ya1F1ZXVlOjpUaW1lcldvcmtJdGVtOjpjcmVhdGUoRnVuY3Rpb248dm9pZCgpPiBm
dW5jdGlvbiwgZG91YmxlIGV4cGlyZVRpbWUpCiB7CkBAIC00Myw3ICs0MSwxMCBAQCBXb3JrUXVl
dWU6OlRpbWVyV29ya0l0ZW06OlRpbWVyV29ya0l0ZW0oRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlv
biwgZG91YmxlIGV4cGlyZQogewogfQogCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFs
aXplKGNvbnN0IGNoYXIqIG5hbWUpCitXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZDo6V29ya1F1
ZXVlVGhyZWFkKCkKKyAgICA6IG1fc29ja2V0RGVzY3JpcHRvcihpbnZhbGlkU29ja2V0RGVzY3Jp
cHRvcikKKyAgICAsIG1fc29ja2V0QWN0aXZhdGVkKGZhbHNlKQorICAgICwgbV9maW5pc2hlZChm
YWxzZSkKIHsKICAgICBpbnQgZmRzWzJdOwogICAgIGlmIChwaXBlKGZkcykpCkBAIC01NCwxNiAr
NTUsMTEyIEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciog
bmFtZSkKICAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKICAgICBGRF9TRVQobV9y
ZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CiAgICAgbV9tYXhG
aWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKK30KKwordm9pZCBXb3Jr
UXVldWU6OldvcmtRdWV1ZVRocmVhZDo6c3RhcnQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0
IGNoYXIqIG5hbWUpCit7CisgICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpU
aHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZVRocmVhZDo6bWFpbiksIHdvcmtRdWV1ZSwgbmFtZSk7
Cit9CisKK1dvcmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjp+V29ya1F1ZXVlVGhyZWFkKCkKK3sK
KyAgICBjbG9zZShtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOworICAgIGNsb3NlKG1fd3JpdGVU
b1BpcGVEZXNjcmlwdG9yKTsKK30KKwordm9pZCBXb3JrUXVldWU6OldvcmtRdWV1ZVRocmVhZDo6
d2FrZXVwKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV93cml0ZVRvUGlwZURlc2NyaXB0
b3JMb2NrKTsKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsICZ3YWtldXBU
aHJlYWQsIHNpemVvZih3YWtldXBUaHJlYWQpKSA9PSAtMSkKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
OjpXb3JrUXVldWVUaHJlYWQ6OmZpbmlzaCgpCit7CisgICAgbV9maW5pc2hlZCA9IHRydWU7Cisg
ICAgd2FrZXVwKCk7Cit9CisKK2Jvb2wgV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJlYWQ6OnBvbGwo
c3RydWN0IHRpbWV2YWwqIHRpbWVvdXQpCit7CisgICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRv
clNldCA9IG1fZmlsZURlc2NyaXB0b3JTZXQ7CisKKyAgICBtX3NvY2tldEFjdGl2YXRlZCA9IGZh
bHNlOworICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURl
c2NyaXB0b3JTZXQsIDAsIDAsIHRpbWVvdXQpID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lTU0VU
KG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKKyAg
ICAgICAgICAgIGNoYXIgZXZlbnQ7CisgICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlw
ZURlc2NyaXB0b3IsICZldmVudCwgc2l6ZW9mKGNoYXIpKSA9PSAtMSkKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUiKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNv
Y2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVE
ZXNjcmlwdG9yU2V0KSkKKyAgICAgICAgICAgIG1fc29ja2V0QWN0aXZhdGVkID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gIW1fZmluaXNoZWQ7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpXb3Jr
UXVldWVUaHJlYWQ6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRv
ciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKG1fc29j
a2V0RGVzY3JpcHRvciA9PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7CisKKyAgICBtX3NvY2tl
dERlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9
IGZ1bmN0aW9uOworCisgICAgaWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRv
cikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIEZE
X1NFVChmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworfQorCit2b2lkIFdv
cmtRdWV1ZTo6V29ya1F1ZXVlVGhyZWFkOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGlu
dCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yICE9IGlu
dmFsaWRTb2NrZXREZXNjcmlwdG9yKTsKIAogICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFs
aWRTb2NrZXREZXNjcmlwdG9yOwogCi0gICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKLSAgICBjcmVh
dGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVl
Ojp3b3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKKyAgICBpZiAoZmlsZURlc2NyaXB0b3Ig
PT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1f
cmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICBGRF9DTFIoZmlsZURlc2NyaXB0b3IsICZtX2Zp
bGVEZXNjcmlwdG9yU2V0KTsKK30KKwordm9pZCogV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJlYWQ6
Om1haW4oV29ya1F1ZXVlKiB3b3JrUXVldWUpCit7CisgICAgc3RydWN0IHRpbWV2YWwqIHRpbWVv
dXQ7CisgICAgUmVmUHRyPFdvcmtRdWV1ZVRocmVhZD4gdGhyZWFkID0gd29ya1F1ZXVlLT50aHJl
YWQoKTsKKworICAgIGRvIHsKKyAgICAgICAgLy8gS2VlcCB3b3JrUXVldWUgZHVyaW5nIHBlcmZv
cm1pbWcgZXZlbnQgaGFuZGxlciBhbmQgd29yayBpdGVtcworICAgICAgICAvLyBEZXJlZiB3b3Jr
cXVldWUgYXQgdGhlIGVuZCBvZiB0aGlzIGJsb2NrLgorICAgICAgICAvLyBJZiByZWZlcmVuY2Ug
Y291bnQgcmVhY2hlcyAwLCB0aGUgd29ya1F1ZXVlIGluc3RhbmNlIHdpbGwgYmUgZGVsZXRlZCwK
KyAgICAgICAgLy8gYW5kIHdvcmsgcXVldWUgdGhyZWFkIHdpbGwgYmUgc2V0IGFzICdmaW5pc2hl
ZCcgYW5kIHdha2VkIHVwLgorICAgICAgICBSZWZQdHI8V29ya1F1ZXVlPiBrZWVwKHdvcmtRdWV1
ZSk7CisKKyAgICAgICAgLy8gUGVyZm9ybSBldmVudCBoYW5kZXIgYW5kIHdvcmsgaXRlbXMKKyAg
ICAgICAgdGhyZWFkLT5wZXJmb3JtU29ja2V0RXZlbnRIYW5kbGVyKCk7CisgICAgICAgIHdvcmtR
dWV1ZS0+cGVyZm9ybVdvcmsoKTsKKyAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtVGltZXJXb3Jr
KCk7CisKKyAgICAgICAgdGltZW91dCA9IHdvcmtRdWV1ZS0+Z2V0TmV4dFRpbWVPdXQoKTsKKyAg
ICB9IHdoaWxlICh0aHJlYWQtPnBvbGwodGltZW91dCkpOworCisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgV29ya1F1ZXVlOjpXb3JrUXVldWVUaHJlYWQ6OnBlcmZvcm1Tb2NrZXRFdmVudEhhbmRs
ZXIoKQoreworICAgIGlmIChtX3NvY2tldEFjdGl2YXRlZCkKKyAgICAgICAgbV9zb2NrZXRFdmVu
dEhhbmRsZXIoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25z
dCBjaGFyKiBuYW1lKQoreworICAgIG1fdGhyZWFkID0gYWRvcHRSZWYobmV3IFdvcmtRdWV1ZVRo
cmVhZCgpKTsKKyAgICBtX3RocmVhZC0+c3RhcnQodGhpcywgbmFtZSk7CiB9CiAKIHZvaWQgV29y
a1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogewotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQo
ZmluaXNoVGhyZWFkTWVzc2FnZSk7CisgICAgbV90aHJlYWQtPmZpbmlzaCgpOwogfQogCiB2b2lk
IFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQpAQCAtODYsMjQgKzE4Myw2IEBAIHZvaWQgV29ya1F1
ZXVlOjpwZXJmb3JtV29yaygpCiAgICAgfQogfQogCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybUZp
bGVEZXNjcmlwdG9yV29yaygpCi17Ci0gICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9
IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0
b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBnZXROZXh0VGltZU91dCgpKSA+
PSAwKSB7Ci0gICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZy
ZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7Ci0gICAgICAgICAgICBjaGFyIHJlYWRCdWZbdGhyZWFk
TWVzc2FnZVNpemVdOwotICAgICAgICAgICAgaWYgKHJlYWQobV9yZWFkRnJvbVBpcGVEZXNjcmlw
dG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdvcmtRdWV1ZVRocmVhZCBwaXBlIik7Ci0g
ICAgICAgICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1ZiwgZmluaXNoVGhyZWFkTWVzc2FnZSwgdGhy
ZWFkTWVzc2FnZVNpemUpKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkTG9vcCA9IGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29j
a2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFkRmlsZURl
c2NyaXB0b3JTZXQpKQotICAgICAgICAgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsKLSAgICB9
Ci19Ci0KIHN0cnVjdCB0aW1ldmFsKiBXb3JrUXVldWU6OmdldE5leHRUaW1lT3V0KCkKIHsKICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwpAQCAtMTY4LDQ3ICsy
NDcsMTQgQEAgdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1UaW1lcldvcmsoKQogICAgIH0KIH0KIAot
dm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciogbWVzc2FnZSkK
LXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrKTsK
LSAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1l
c3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBX
b3JrUXVldWUgVGhyZWFkIik7Ci19Ci0KLXZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFk
KFdvcmtRdWV1ZSogd29ya1F1ZXVlKQotewotICAgIHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFk
TG9vcCkgewotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1Xb3JrKCk7Ci0gICAgICAgIHdvcmtR
dWV1ZS0+cGVyZm9ybVRpbWVyV29yaygpOwotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1GaWxl
RGVzY3JpcHRvcldvcmsoKTsKLSAgICB9Ci0KLSAgICBjbG9zZSh3b3JrUXVldWUtPm1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3dyaXRlVG9QaXBlRGVz
Y3JpcHRvcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVy
U29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCiB7Ci0gICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlk
U29ja2V0RGVzY3JpcHRvcikKLSAgICAgICAgTE9HX0VSUk9SKCIlZCBpcyBhbHJlYWR5IHJlZ2lz
dGVyZC4iLCBmaWxlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBmaWxl
RGVzY3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uOwotCi0gICAg
aWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9tYXhG
aWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIEZEX1NFVChmaWxlRGVzY3JpcHRv
ciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIG1fdGhyZWFkLT5yZWdpc3RlclNvY2tldEV2
ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvciwgZnVuY3Rpb24pOwogfQogCiB2b2lkIFdvcmtRdWV1
ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCiB7Ci0g
ICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0KLSAgICBp
ZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9tYXhG
aWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBGRF9DTFIoZmls
ZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBtX3RocmVhZC0+dW5yZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvcik7CiB9CiAKIHZvaWQgV29ya1F1
ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKQEAgLTIyMCw3
ICsyNjYsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCiAgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOwog
ICAgIH0KIAotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKKyAg
ICBtX3RocmVhZC0+d2FrZXVwKCk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVy
RGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKQEAg
LTIzNCw1ICsyODAsNSBAQCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYQogCiAgICAgcmVmKCk7CiAg
ICAgaW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtLnJlbGVhc2UoKSk7Ci0gICAgc2Vu
ZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOworICAgIG1fdGhyZWFkLT53YWtl
dXAoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201916</attachid>
            <date>2013-05-15 20:20:31 -0700</date>
            <delta_ts>2013-05-30 05:12:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>workqueue_crash_minimum.diff</filename>
            <type>text/plain</type>
            <size>3096</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzZGUzMzMyLi44ZjcyZjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTMtMDUtMTUgIEJ5dW5nd29vIExlZSAgPGJ3ODAubGVlQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtFRkxdIFByZXZlbnQgYWNjZXNzIHRvIHRoZSBpbnZhbGlkYXRlZCB3b3JrUXVldWUg
aW5zdGFuY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTUzMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICB3b3JrUXVldWUgcmVmKCkgYW5kIGRlcmVmKCkgYXJlIGFkZGVkIGFyb3VuZCBwZXJmb3JtaW5n
IHdvcmsgcXVldWUKKyAgICAgICAgaXRlbXMgdG8gZW5zdXJlIHdvcmtRdWV1ZSBub3QgdG8gYmUg
aW52YWxpZGF0ZWQgb24gYW5vdGhlciB0aHJlYWQgd2hpbGUKKyAgICAgICAgcGVyZm9ybWluZyB3
b3JrUXVldWUgaXRlbXMuCisKKyAgICAgICAgQW5kIHNldCBtX3RocmVhZExvb3AgYXMgZmFsc2Ug
YXQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKSB0bworICAgICAgICBjaGVjayB3aGV0
aGVyIHRoZSB3b3JrUXVldWUgYWxyZWFkeSBpbnZhbGlkYXRlZCBiZWZvcmUKKyAgICAgICAgV29y
a1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoKSBmdW5jdGlvbiBpcyBzdGFydGVkLgorCisgICAgICAg
IEluIHRoZSBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZCgpLCBhZnRlciBjYWxsaW5nIHdvcmtR
dWV1ZSBkZXJlZigpLAorICAgICAgICBjaGVjayBtX3RocmVhZExvb3AgdG8gc2tpcCBwZXJmb3Jt
RmlsZURlc2NyaXB0b3JXb3JrKCkgaWYgd29ya1F1ZXVlCisgICAgICAgIGlzIGFscmVhZHkgaW52
YWxpZGF0ZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcDoKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtRdWV1
ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yayk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtR
dWV1ZVRocmVhZCk6CisKIDIwMTMtMDUtMTMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIHRlc3RSdW5uZXIuc2V0UHJpbnRpbmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCmluZGV4IGViZGI4
YTYuLjE5YzFlOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3Jr
UXVldWVFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVF
ZmwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tl
dERlc2NyaXB0b3IgPSAtMTsKIHN0YXRpYyBjb25zdCBpbnQgdGhyZWFkTWVzc2FnZVNpemUgPSAx
Owotc3RhdGljIGNvbnN0IGNoYXIgZmluaXNoVGhyZWFkTWVzc2FnZVtdID0gIkYiOworCiBzdGF0
aWMgY29uc3QgY2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9ICJXIjsKIAogUGFzc093blB0cjxX
b3JrUXVldWU6OlRpbWVyV29ya0l0ZW0+IFdvcmtRdWV1ZTo6VGltZXJXb3JrSXRlbTo6Y3JlYXRl
KEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24sIGRvdWJsZSBleHBpcmVUaW1lKQpAQCAtNjMsNyAr
NjMsOCBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5h
bWUpCiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogewotICAgIHNlbmRN
ZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhyZWFkTWVzc2FnZSk7CisgICAgbV90aHJlYWRMb29wID0g
ZmFsc2U7CisgICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOwogfQog
CiB2b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQpAQCAtOTUsOCArOTYsNiBAQCB2b2lkIFdv
cmtRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCiAgICAgICAgICAgICBjaGFyIHJl
YWRCdWZbdGhyZWFkTWVzc2FnZVNpemVdOwogICAgICAgICAgICAgaWYgKHJlYWQobV9yZWFkRnJv
bVBpcGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCiAgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdvcmtRdWV1ZVRocmVh
ZCBwaXBlIik7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1ZiwgZmluaXNoVGhyZWFk
TWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkTG9v
cCA9IGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAh
PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3Is
ICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQpAQCAtMTc4LDkgKzE3NywxMiBAQCB2b2lkIFdvcmtR
dWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKiBtZXNzYWdlKQogdm9pZCogV29y
a1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCiB7CiAgICAgd2hp
bGUgKHdvcmtRdWV1ZS0+bV90aHJlYWRMb29wKSB7CisgICAgICAgIHdvcmtRdWV1ZS0+cmVmKCk7
CiAgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKICAgICAgICAgd29ya1F1ZXVlLT5w
ZXJmb3JtVGltZXJXb3JrKCk7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybUZpbGVEZXNjcmlw
dG9yV29yaygpOworICAgICAgICB3b3JrUXVldWUtPmRlcmVmKCk7CisgICAgICAgIGlmICh3b3Jr
UXVldWUtPm1fdGhyZWFkTG9vcCkKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybUZpbGVE
ZXNjcmlwdG9yV29yaygpOwogICAgIH0KIAogICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9yZWFkRnJv
bVBpcGVEZXNjcmlwdG9yKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203344</attachid>
            <date>2013-05-30 05:12:25 -0700</date>
            <delta_ts>2013-06-04 19:32:04 -0700</delta_ts>
            <desc>Refactoring patch to review</desc>
            <filename>workqueue_refactoring.diff</filename>
            <type>text/plain</type>
            <size>14697</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhZDY1MjFlLi42ZDkzZTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYg
QEAKKzIwMTMtMDUtMzAgIEJ5dW5nd29vIExlZSAgPGJ3ODAubGVlQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtFRkxdW1dLMl0gU2VwYXJhdGUgZGlzcGF0Y2ggY29udGV4dCBmcm9tIFdvcmtRdWV1
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTMz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFj
dG9yIFdvcmtRdWV1ZSB0byBwcmV2ZW50IGRhbmdsaW5nIHdvcmtxdWV1ZSBhY2Nlc3MuCisKKyAg
ICAgICAgUHJldmlvdXNseSwgV29ya1F1ZXVlIGNsYXNzIGhhdmUgYWxsIGNvbnRleHQgYWJvdXQg
ZGlzcGF0Y2guCisgICAgICAgIFdvcmtRdWV1ZSBoYWQgZGlzcGF0Y2ggaXRlbSBxdWV1ZSBhbmQg
c29ja2V0IGV2ZW50IGhhbmRsZXIsCisgICAgICAgIGFuZCB0aG9zZSBhcmUgYWNjZXNzZWQgb24g
dGhlIHdvcmsgcXVldWUgdGhyZWFkIHRocm91Z2ggV29ya1F1ZXVlCisgICAgICAgIGluc3RhbmNl
LgorCisgICAgICAgIFdpdGggcmVmZXJhbmNlIGNvdW50YWJsZSBXb3JrUXVldWUgY29uY2VwdCwg
dGhpcyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBjb21wbGljYXRlcyBoYW5kbGluZyB3b3JrcXVl
dWUgcmVmLWNvdW50aW5nIGFuZCBtYWtlcyBkYW5nbGluZworICAgICAgICB3b3JrcXVldWUgYWNj
ZXNzIHByb2JsZW0uCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXN5IHRvIGhhbmRsZSBXb3JrUXVl
dWUgcmVmZXJlbmNlIGNvdW50IGFuZCB0byBwcmV2ZW50CisgICAgICAgIGRhbmdsaW5nIGFjY2Vz
cyBwcm9ibGVtLCBEaXNwYXRjaFF1ZXVlIGNsYXNzIGlzIGFkZGVkIHRvIGhhbmRsZQorICAgICAg
ICBkaXNwYXRjaCB0YXNrcyBhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgRGlzcGF0Y2hRdWV1ZSBp
bnN0YW5jZSB3aWxsCisgICAgICAgIGZvbGxvdyB0aGUgd29ya3F1ZXVlIHRocmVhZCBub3QgV29y
a1F1ZXVlIGluc3RhbmNlLgorCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAg
ICAgICogUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHA6CisgICAgICAgIChXb3JrSXRlbTo6
fldvcmtJdGVtKToKKyAgICAgICAgKFdvcmtJdGVtOjpkaXNwYXRjaCk6CisgICAgICAgIChXb3Jr
SXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdvcmtJdGVtOjpXb3JrSXRlbSk6CisgICAgICAgIChU
aW1lcldvcmtJdGVtOjpleHBpcmVUaW1lKToKKyAgICAgICAgKFRpbWVyV29ya0l0ZW06OmV4cGly
ZWQpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFRpbWVyV29y
a0l0ZW06OlRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRp
YWxpemUpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6RGlzcGF0Y2hRdWV1ZSk6CisgICAgICAg
IChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVl
OjpkaXNwYXRjaFJlbGVhc2UpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVdvcmsp
OgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yayk6Cisg
ICAgICAgIChEaXNwYXRjaFF1ZXVlOjpnZXROZXh0VGltZU91dCk6CisgICAgICAgIChEaXNwYXRj
aFF1ZXVlOjppbnNlcnRUaW1lcldvcmtJdGVtKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnBl
cmZvcm1UaW1lcldvcmspOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6d2FrZXVwKToKKyAgICAg
ICAgKERpc3BhdGNoUXVldWU6OmRpc3BhdGNoUXVldWVUaHJlYWQpOgorICAgICAgICAoRGlzcGF0
Y2hRdWV1ZTo6fkRpc3BhdGNoUXVldWUpOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpyZWdpc3RlclNvY2tl
dEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVu
dEhhbmRsZXIpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKERpc3Bh
dGNoUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRl
bGF5KToKKwogMjAxMy0wNS0yOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIFdlYktpdCBzaG91bGQgZXhwb3NlIEhTVFMgQVBJcyB0byBkZXRlcm1pbmUg
d2hldGhlciBhIGhvc3QgaXMgaW4gdGhlIEhTVFMgY2FjaGUgYW5kIHRvIHJlc2V0IEhTVFMgcG9s
aWNpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKaW5kZXggZDk1NGY1Ny4uNzQ1MzVj
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKQEAgLTU2LDYgKzU2LDggQEAgUVRf
RU5EX05BTUVTUEFDRQogdHlwZWRlZiBnYm9vbGVhbiAoKkdTb3VyY2VGdW5jKSAoZ3BvaW50ZXIg
ZGF0YSk7CiAjZWxpZiBQTEFURk9STShFRkwpCiAjaW5jbHVkZSA8RWNvcmUuaD4KKworY2xhc3Mg
RGlzcGF0Y2hRdWV1ZTsKICNlbmRpZgogCiBjbGFzcyBXb3JrUXVldWUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8V29ya1F1ZXVlPiB7CkBAIC0xNjcsNDYgKzE2OSw3IEBAIHByaXZhdGU6
CiAgICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxTb2NrZXRFdmVudFNvdXJjZSo+PiBtX2V2ZW50U291
cmNlczsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8U29ja2V0RXZlbnRTb3VyY2Uq
Pj46Oml0ZXJhdG9yIFNvY2tldEV2ZW50U291cmNlSXRlcmF0b3I7CiAjZWxpZiBQTEFURk9STShF
RkwpCi0gICAgY2xhc3MgVGltZXJXb3JrSXRlbSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBjcmVhdGUoRnVuY3Rpb248dm9pZCgpPiwgZG91
YmxlIGV4cGlyZVRpbWUpOwotICAgICAgICB2b2lkIGRpc3BhdGNoKCkgeyBtX2Z1bmN0aW9uKCk7
IH0KLSAgICAgICAgZG91YmxlIGV4cGlyZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX2V4cGlyZVRp
bWU7IH0KLSAgICAgICAgYm9vbCBleHBpcmVkKGRvdWJsZSBjdXJyZW50VGltZSkgY29uc3QgeyBy
ZXR1cm4gY3VycmVudFRpbWUgPj0gbV9leHBpcmVUaW1lOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIFRpbWVyV29ya0l0ZW0oRnVuY3Rpb248dm9pZCgpPiwgZG91YmxlIGV4cGlyZVRpbWUp
OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwot
ICAgICAgICBkb3VibGUgbV9leHBpcmVUaW1lOwotICAgIH07Ci0KLSAgICBmZF9zZXQgbV9maWxl
RGVzY3JpcHRvclNldDsKLSAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRvcjsKLSAgICBpbnQgbV9y
ZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIGludCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcjsK
LSAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxvY2s7Ci0KLSAgICBib29sIG1fdGhy
ZWFkTG9vcDsKLQotICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+PiBtX3dvcmtJdGVtUXVldWU7
Ci0gICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsKLQotICAgIGludCBtX3NvY2tldERlc2Ny
aXB0b3I7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX3NvY2tldEV2ZW50SGFuZGxlcjsKLQotICAg
IFZlY3RvcjxPd25QdHI8VGltZXJXb3JrSXRlbT4+IG1fdGltZXJXb3JrSXRlbXM7Ci0gICAgTXV0
ZXggbV90aW1lcldvcmtJdGVtc0xvY2s7Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UaHJlYWQo
Y29uc3QgY2hhciopOwotICAgIHN0YXRpYyB2b2lkKiB3b3JrUXVldWVUaHJlYWQoV29ya1F1ZXVl
Kik7Ci0gICAgdm9pZCBwZXJmb3JtV29yaygpOwotICAgIHZvaWQgcGVyZm9ybUZpbGVEZXNjcmlw
dG9yV29yaygpOwotICAgIHN0YXRpYyBkb3VibGUgZ2V0Q3VycmVudFRpbWUoKTsKLSAgICBzdHJ1
Y3QgdGltZXZhbCogZ2V0TmV4dFRpbWVPdXQoKTsKLSAgICB2b2lkIHBlcmZvcm1UaW1lcldvcmso
KTsKLSAgICB2b2lkIGluc2VydFRpbWVyV29ya0l0ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVt
Pik7CisgICAgRGlzcGF0Y2hRdWV1ZSogbV9kaXNwYXRjaFF1ZXVlOwogI2VuZGlmCiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCmluZGV4IGViZGI4
YTYuLjBhNzFhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3Jr
UXVldWVFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVF
ZmwuY3BwCkBAIC0yNSwyNiArMjUsMTA4IEBACiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAKIHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tldERlc2NyaXB0b3IgPSAtMTsKLXN0YXRp
YyBjb25zdCBpbnQgdGhyZWFkTWVzc2FnZVNpemUgPSAxOwotc3RhdGljIGNvbnN0IGNoYXIgZmlu
aXNoVGhyZWFkTWVzc2FnZVtdID0gIkYiOwotc3RhdGljIGNvbnN0IGNoYXIgd2FrdXBUaHJlYWRN
ZXNzYWdlW10gPSAiVyI7CitzdGF0aWMgY29uc3QgY2hhciB3YWtldXBUaHJlYWRNZXNzYWdlID0g
J1cnOwogCi1QYXNzT3duUHRyPFdvcmtRdWV1ZTo6VGltZXJXb3JrSXRlbT4gV29ya1F1ZXVlOjpU
aW1lcldvcmtJdGVtOjpjcmVhdGUoRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbiwgZG91YmxlIGV4
cGlyZVRpbWUpCitjbGFzcyBXb3JrSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8V29ya0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7
CisgICAgfldvcmtJdGVtKCkgeyBtX3dvcmtRdWV1ZS0+ZGVyZWYoKTsgfQorICAgIHZvaWQgZGlz
cGF0Y2goKSB7IG1fZnVuY3Rpb24oKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgV29ya0l0ZW0oV29y
a1F1ZXVlKiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworCitwcml2YXRlOgorICAgIFdvcmtR
dWV1ZSogbV93b3JrUXVldWU7CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOworfTsK
KworUGFzc093blB0cjxXb3JrSXRlbT4gV29ya0l0ZW06OmNyZWF0ZShXb3JrUXVldWUqIHdvcmtR
dWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyPFdvcmtJdGVtPihuZXcgV29ya0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlvbikpOworfQor
CitXb3JrSXRlbTo6V29ya0l0ZW0oV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgIDogbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgICwg
bV9mdW5jdGlvbihmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93b3JrUXVldWUpOworCisgICAg
bV93b3JrUXVldWUtPnJlZigpOworfQorCitjbGFzcyBUaW1lcldvcmtJdGVtIDogcHVibGljIFdv
cmtJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBj
cmVhdGUoV29ya1F1ZXVlKiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIGRvdWJsZSBleHBpcmVU
aW1lKTsKKyAgICBkb3VibGUgZXhwaXJlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwaXJlVGlt
ZTsgfQorICAgIGJvb2wgZXhwaXJlZChkb3VibGUgY3VycmVudFRpbWUpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnRUaW1lID49IG1fZXhwaXJlVGltZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVGltZXJX
b3JrSXRlbShXb3JrUXVldWUqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGV4cGly
ZVRpbWUpOworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX2V4cGlyZVRpbWU7Cit9OworCitQYXNz
T3duUHRyPFRpbWVyV29ya0l0ZW0+IFRpbWVyV29ya0l0ZW06OmNyZWF0ZShXb3JrUXVldWUqIHdv
cmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBleHBpcmVU
aW1lKQogewogICAgIGlmIChleHBpcmVUaW1lIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbWVyV29ya0l0ZW0oZnVuY3Rpb24sIGV4cGly
ZVRpbWUpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbWVyV29ya0l0ZW0od29ya1F1ZXVl
LCBmdW5jdGlvbiwgZXhwaXJlVGltZSkpOwogfQogCi1Xb3JrUXVldWU6OlRpbWVyV29ya0l0ZW06
OlRpbWVyV29ya0l0ZW0oRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyZVRp
bWUpCi0gICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorVGltZXJXb3JrSXRlbTo6VGltZXJXb3Jr
SXRlbShXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24sIGRvdWJsZSBleHBpcmVUaW1lKQorICAgIDogV29ya0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlv
bikKICAgICAsIG1fZXhwaXJlVGltZShleHBpcmVUaW1lKQogewogfQogCitjbGFzcyBEaXNwYXRj
aFF1ZXVlIHsKK3B1YmxpYzoKKyAgICBEaXNwYXRjaFF1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpOwor
ICAgIH5EaXNwYXRjaFF1ZXVlKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoKFBhc3NPd25QdHI8V29y
a0l0ZW0+KTsKKyAgICB2b2lkIGRpc3BhdGNoKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4pOwor
ICAgIHZvaWQgZGlzcGF0Y2hSZWxlYXNlKCk7CisgICAgdm9pZCByZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0
ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KTsKKworcHJpdmF0ZToKKyAgICBmZF9zZXQgbV9maWxl
RGVzY3JpcHRvclNldDsKKyAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRvcjsKKyAgICBpbnQgbV9y
ZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIGludCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcjsK
KyAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxvY2s7CisKKyAgICBib29sIG1fdGhy
ZWFkTG9vcDsKKworICAgIGludCBtX3NvY2tldERlc2NyaXB0b3I7CisgICAgRnVuY3Rpb248dm9p
ZCgpPiBtX3NvY2tldEV2ZW50SGFuZGxlcjsKKworICAgIFZlY3RvcjxPd25QdHI8V29ya0l0ZW0+
ID4gbV93b3JrSXRlbVF1ZXVlOworICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxvY2s7CisKKyAg
ICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+ID4gbV90aW1lcldvcmtJdGVtczsKKyAgICBN
dXRleCBtX3RpbWVyV29ya0l0ZW1zTG9jazsKKworICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKKyAg
ICB2b2lkIHBlcmZvcm1UaW1lcldvcmsoKTsKKyAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRv
cldvcmsoKTsKKyAgICB2b2lkIGluc2VydFRpbWVyV29ya0l0ZW0oUGFzc093blB0cjxUaW1lcldv
cmtJdGVtPik7CisgICAgc3RhdGljIHZvaWQqIGRpc3BhdGNoUXVldWVUaHJlYWQoRGlzcGF0Y2hR
dWV1ZSopOworICAgIHZvaWQgd2FrZXVwKCk7CisgICAgc3RydWN0IHRpbWV2YWwqIGdldE5leHRU
aW1lT3V0KCk7Cit9OworCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0
IGNoYXIqIG5hbWUpCiB7CisgICAgbV9kaXNwYXRjaFF1ZXVlID0gbmV3IERpc3BhdGNoUXVldWUo
bmFtZSk7Cit9CisKK0Rpc3BhdGNoUXVldWU6OkRpc3BhdGNoUXVldWUoY29uc3QgY2hhciogbmFt
ZSkKK3sKICAgICBpbnQgZmRzWzJdOwogICAgIGlmIChwaXBlKGZkcykpCiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTgsMTggKzE0MCwyOSBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgbV9zb2NrZXREZXNjcmlwdG9y
ID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7CiAKICAgICBtX3RocmVhZExvb3AgPSB0cnVlOwot
ICAgIGNyZWF0ZVRocmVhZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZX
b3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZCksIHRoaXMsIG5hbWUpOworICAgIGNyZWF0ZVRocmVh
ZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZEaXNwYXRjaFF1ZXVlOjpk
aXNwYXRjaFF1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpw
bGF0Zm9ybUludmFsaWRhdGUoKQogewotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhy
ZWFkTWVzc2FnZSk7CisgICAgLy8gbV9kaXNwYXRjaFF1ZXVlIHdpbGwgYmUgZGVsZXRlZCBvbiB0
aGUgZGlzcGF0Y2ggcXVldWUgdGhyZWFkLgorICAgIERpc3BhdGNoUXVldWUqIGRpc3BhdGNoUXVl
dWUgPSBtX2Rpc3BhdGNoUXVldWU7CisgICAgbV9kaXNwYXRjaFF1ZXVlID0gMDsKKyAgICBkaXNw
YXRjaFF1ZXVlLT5kaXNwYXRjaFJlbGVhc2UoKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpk
aXNwYXRjaFJlbGVhc2UoKQoreworICAgIEFTU0VSVChtX3NvY2tldERlc2NyaXB0b3IgPT0gaW52
YWxpZFNvY2tldERlc2NyaXB0b3IpOworCisgICAgbV90aHJlYWRMb29wID0gZmFsc2U7CisgICAg
d2FrZXVwKCk7CiB9CiAKLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29yaygpCit2b2lkIERpc3Bh
dGNoUXVldWU6OnBlcmZvcm1Xb3JrKCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBW
ZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7CisgICAgICAgIFZlY3RvcjxP
d25QdHI8V29ya0l0ZW0+ID4gd29ya0l0ZW1RdWV1ZTsKIAogICAgICAgICB7CiAgICAgICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7CkBAIC03OSwyNCArMTcy
LDIyIEBAIHZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29yaygpCiAgICAgICAgICAgICBtX3dvcmtJ
dGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgd29ya0l0ZW1RdWV1ZVtpXSgpOwotICAgICAgICAgICAgZGVyZWYoKTsKLSAgICAgICAgfQor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldLT5kaXNwYXRjaCgpOwogICAgIH0KIH0KIAot
dm9pZCBXb3JrUXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQordm9pZCBEaXNwYXRj
aFF1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKIHsKICAgICBmZF9zZXQgcmVhZEZp
bGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKIAogICAgIGlmIChzZWxlY3Qo
bV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIGdl
dE5leHRUaW1lT3V0KCkpID49IDApIHsKICAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKLSAgICAgICAgICAgIGNo
YXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07Ci0gICAgICAgICAgICBpZiAocmVhZChtX3Jl
YWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkK
KyAgICAgICAgICAgIGNoYXIgbWVzc2FnZTsKKyAgICAgICAgICAgIGlmIChyZWFkKG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvciwgJm1lc3NhZ2UsIHNpemVvZihjaGFyKSkgPT0gLTEpCiAgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdvcmtRdWV1ZVRocmVhZCBw
aXBlIik7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1ZiwgZmluaXNoVGhyZWFkTWVz
c2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkTG9vcCA9
IGZhbHNlOworCisgICAgICAgICAgICBBU1NFUlQobWVzc2FnZSA9PSB3YWtldXBUaHJlYWRNZXNz
YWdlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52
YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlwdG9yLCAmcmVh
ZEZpbGVEZXNjcmlwdG9yU2V0KSkKQEAgLTEwNCw3ICsxOTUsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6
cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCiAgICAgfQogfQogCi1zdHJ1Y3QgdGltZXZhbCog
V29ya1F1ZXVlOjpnZXROZXh0VGltZU91dCgpCitzdHJ1Y3QgdGltZXZhbCogRGlzcGF0Y2hRdWV1
ZTo6Z2V0TmV4dFRpbWVPdXQoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29y
a0l0ZW1zTG9jayk7CiAgICAgaWYgKG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQpAQCAtMTIy
LDcgKzIxMyw3IEBAIHN0cnVjdCB0aW1ldmFsKiBXb3JrUXVldWU6OmdldE5leHRUaW1lT3V0KCkK
ICAgICByZXR1cm4gJnRpbWVWYWx1ZTsKIH0KIAotdm9pZCBXb3JrUXVldWU6Omluc2VydFRpbWVy
V29ya0l0ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQordm9pZCBEaXNwYXRjaFF1
ZXVlOjppbnNlcnRUaW1lcldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkK
IHsKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybjsKQEAgLTEzOCw3ICsyMjksNyBAQCB2
b2lkIFdvcmtRdWV1ZTo6aW5zZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0
ZW0+IGl0ZW0pCiAgICAgbV90aW1lcldvcmtJdGVtcy5pbnNlcnQocG9zaXRpb24sIGl0ZW0pOwog
fQogCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVRpbWVyV29yaygpCit2b2lkIERpc3BhdGNoUXVl
dWU6OnBlcmZvcm1UaW1lcldvcmsoKQogewogICAgIFZlY3RvcjxPd25QdHI8VGltZXJXb3JrSXRl
bT4gPiB0aW1lcldvcmtJdGVtczsKIApAQCAtMTY0LDMzICsyNTUsNDQgQEAgdm9pZCBXb3JrUXVl
dWU6OnBlcmZvcm1UaW1lcldvcmsoKQogCiAgICAgICAgIC8vIElmIGEgdGltZXIgd29yayBpdGVt
IGV4cGlyZWQsIGRpc3BhdGNoIHRoZSBmdW5jdGlvbiBvZiB0aGUgd29yayBpdGVtLgogICAgICAg
ICB0aW1lcldvcmtJdGVtc1tpXS0+ZGlzcGF0Y2goKTsKLSAgICAgICAgZGVyZWYoKTsKICAgICB9
CiB9CiAKLXZvaWQgV29ya1F1ZXVlOjpzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCit2b2lkIERpc3BhdGNoUXVldWU6Ondha2V1cCgpCiB7CiAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9jayk7Ci0gICAgaWYgKHdyaXRlKG1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yLCBtZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCisg
ICAgaWYgKHdyaXRlKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yLCAmd2FrZXVwVGhyZWFkTWVzc2Fn
ZSwgc2l6ZW9mKGNoYXIpKSA9PSAtMSkKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2Fr
ZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7CiB9CiAKLXZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVl
VGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQordm9pZCogRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0
Y2hRdWV1ZVRocmVhZChEaXNwYXRjaFF1ZXVlKiBkaXNwYXRjaFF1ZXVlKQogewotICAgIHdoaWxl
ICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgewotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1X
b3JrKCk7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVRpbWVyV29yaygpOwotICAgICAgICB3
b3JrUXVldWUtPnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKKyAgICB3aGlsZSAoZGlzcGF0
Y2hRdWV1ZS0+bV90aHJlYWRMb29wKSB7CisgICAgICAgIGRpc3BhdGNoUXVldWUtPnBlcmZvcm1X
b3JrKCk7CisgICAgICAgIGRpc3BhdGNoUXVldWUtPnBlcmZvcm1UaW1lcldvcmsoKTsKKyAgICAg
ICAgZGlzcGF0Y2hRdWV1ZS0+cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwogICAgIH0KIAot
ICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKLSAgICBjbG9z
ZSh3b3JrUXVldWUtPm1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKLQorICAgIGRlbGV0ZSBkaXNw
YXRjaFF1ZXVlOwogICAgIHJldHVybiAwOwogfQogCitEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hR
dWV1ZSgpCit7CisgICAgY2xvc2UobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKKyAgICBjbG9z
ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7Cit9CisKIHZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rl
clNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uKQogeworICAgIGlmICghbV9kaXNwYXRjaFF1ZXVlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2Rpc3BhdGNoUXVldWUtPnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVy
KGZpbGVEZXNjcmlwdG9yLCBmdW5jdGlvbik7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cmVn
aXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGlu
dmFsaWRTb2NrZXREZXNjcmlwdG9yKQogICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkg
cmVnaXN0ZXJkLiIsIGZpbGVEZXNjcmlwdG9yKTsKIApAQCAtMjA0LDYgKzMwNiwxNCBAQCB2b2lk
IFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9y
LCBjb25zdCBGdW5jdGlvbjx2bwogCiB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2
ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCiB7CisgICAgaWYgKCFtX2Rpc3BhdGNoUXVl
dWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGlzcGF0Y2hRdWV1ZS0+dW5yZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1
ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCit7CiAg
ICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7CiAKICAgICBp
ZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKQEAgLTIxMywyNiArMzIz
LDM1IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBm
aWxlRGVzY3JpcHRvcikKIAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uKQogewotICAgIHJlZigpOworICAgIGlmICghbV9kaXNwYXRjaFF1
ZXVlKQorICAgICAgICByZXR1cm47CiAKKyAgICBtX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNoKFdv
cmtJdGVtOjpjcmVhdGUodGhpcywgZnVuY3Rpb24pKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVl
OjpkaXNwYXRjaChQYXNzT3duUHRyPFdvcmtJdGVtPiBpdGVtKQorewogICAgIHsKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotICAgICAgICBtX3dvcmtJ
dGVtUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVu
ZChpdGVtKTsKICAgICB9CiAKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3VwVGhyZWFkTWVz
c2FnZSk7CisgICAgd2FrZXVwKCk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVy
RGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKIHsK
LSAgICBpZiAoZGVsYXkgPCAwKQorICAgIGlmIChkZWxheSA8IDAgfHwgIW1fZGlzcGF0Y2hRdWV1
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3duUHRyPFRpbWVyV29ya0l0ZW0+IHRpbWVyV29y
a0l0ZW0gPSBUaW1lcldvcmtJdGVtOjpjcmVhdGUoZnVuY3Rpb24sIGN1cnJlbnRUaW1lKCkgKyBk
ZWxheSk7Ci0gICAgaWYgKCF0aW1lcldvcmtJdGVtKQorICAgIG1fZGlzcGF0Y2hRdWV1ZS0+ZGlz
cGF0Y2goVGltZXJXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsIGZ1bmN0aW9uLCBjdXJyZW50VGltZSgp
ICsgZGVsYXkpKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaChQYXNzT3duUHRy
PFRpbWVyV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm47
CiAKLSAgICByZWYoKTsKLSAgICBpbnNlcnRUaW1lcldvcmtJdGVtKHRpbWVyV29ya0l0ZW0ucmVs
ZWFzZSgpKTsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3VwVGhyZWFkTWVzc2FnZSk7Cisg
ICAgaW5zZXJ0VGltZXJXb3JrSXRlbShpdGVtKTsKKyAgICB3YWtldXAoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203749</attachid>
            <date>2013-06-04 19:32:12 -0700</date>
            <delta_ts>2013-06-09 18:24:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20130605113052.patch</filename>
            <type>text/plain</type>
            <size>24981</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTJjNzYyMTBkM2IzYzlm
NWRhZmE0OWY0M2ZkYTNiYjU4NTBjYWVkYi4uYWQxNzc1NWVmMjlhZWFkMjdmN2UwY2QxZjVmMWI2
MmY5NTY3YTdjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA2LTA0ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNl
cGFyYXRlIGRpc3BhdGNoIGNvbnRleHQgZnJvbSBXb3JrUXVldWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXb3JrUXVldWUgdG8gcHJl
dmVudCBkYW5nbGluZyB3b3JrcXVldWUgYWNjZXNzLgorCisgICAgICAgIFByZXZpb3VzbHksIFdv
cmtRdWV1ZSBjbGFzcyBoYXZlIGFsbCBjb250ZXh0IGFib3V0IGRpc3BhdGNoLgorICAgICAgICBX
b3JrUXVldWUgaGFkIGRpc3BhdGNoIGl0ZW0gcXVldWUgYW5kIHNvY2tldCBldmVudCBoYW5kbGVy
LAorICAgICAgICBhbmQgdGhvc2UgYXJlIGFjY2Vzc2VkIG9uIHRoZSB3b3JrIHF1ZXVlIHRocmVh
ZCB0aHJvdWdoIFdvcmtRdWV1ZQorICAgICAgICBpbnN0YW5jZS4KKworICAgICAgICBXaXRoIHJl
ZmVyYW5jZSBjb3VudGFibGUgV29ya1F1ZXVlIGNvbmNlcHQsIHRoaXMgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgY29tcGxpY2F0ZXMgaGFuZGxpbmcgd29ya3F1ZXVlIHJlZi1jb3VudGluZyBhbmQg
bWFrZXMgZGFuZ2xpbmcKKyAgICAgICAgd29ya3F1ZXVlIGFjY2VzcyBwcm9ibGVtLgorCisgICAg
ICAgIFRvIG1ha2UgaXQgZWFzeSB0byBoYW5kbGUgV29ya1F1ZXVlIHJlZmVyZW5jZSBjb3VudCBh
bmQgdG8gcHJldmVudAorICAgICAgICBkYW5nbGluZyBhY2Nlc3MgcHJvYmxlbSwgRGlzcGF0Y2hR
dWV1ZSBjbGFzcyBpcyBhZGRlZCB0byBoYW5kbGUKKyAgICAgICAgZGlzcGF0Y2ggdGFza3MgYW5k
IHRoZSBsaWZlY3ljbGUgb2YgdGhlIERpc3BhdGNoUXVldWUgaW5zdGFuY2Ugd2lsbAorICAgICAg
ICBmb2xsb3cgdGhlIHdvcmtxdWV1ZSB0aHJlYWQgbm90IFdvcmtRdWV1ZSBpbnN0YW5jZS4KKwor
ICAgICAgICAqIFBsYXRmb3JtL1dvcmtRdWV1ZS5oOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9E
aXNwYXRjaFF1ZXVlLmNwcDogQWRkZWQuCisgICAgICAgIChXb3JrSXRlbTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdvcmtJdGVtOjpXb3JrSXRlbSk6CisgICAgICAgIChXb3JrSXRlbTo6fldvcmtJdGVt
KToKKyAgICAgICAgKFRpbWVyV29ya0l0ZW06OmNyZWF0ZSk6CisgICAgICAgIChUaW1lcldvcmtJ
dGVtOjpUaW1lcldvcmtJdGVtKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OkRpc3BhdGNoUXVl
dWUpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVldWUpOgorICAgICAgICAo
RGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2gpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0
Y2hSZWxlYXNlKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVdvcmspOgorICAgICAgICAo
RGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVRpbWVyV29yayk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVl
OjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6Omlu
c2VydFRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2hRdWV1
ZVRocmVhZCk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjp3YWtldXApOgorICAgICAgICAoRGlz
cGF0Y2hRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQpOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9EaXNw
YXRjaFF1ZXVlLmg6IEFkZGVkLgorICAgICAgICAoV29ya0l0ZW06OmRpc3BhdGNoKToKKyAgICAg
ICAgKFRpbWVyV29ya0l0ZW06OmV4cGlyZVRpbWUpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6
ZXhwaXJlZCk6CisgICAgICAgICogUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHA6CisgICAg
ICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToK
KwogMjAxMy0wNi0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFYOiBXSzI6IGFjY2Vzc2liaWxpdHkgcG9zaXRpb24gaXMgY2FsY3VsYXRlZCBldmVy
eSB0aW1lIHdpbmRvdyBmcmFtZSBpcyB1cGRhdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1
ZS5oCmluZGV4IGQ5NTRmNTdkYjRmNmRkNzBjMmI2MWUwZjhmN2I0NmExZTExMWY0OTAuLjc0NTM1
YzA3MzBlNDNlNDkxM2I2ZWVjOTNlODgxMmZhYzhiOTE5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L1dvcmtRdWV1ZS5oCkBAIC01Niw2ICs1Niw4IEBAIFFUX0VORF9OQU1FU1BBQ0UKIHR5cGVkZWYg
Z2Jvb2xlYW4gKCpHU291cmNlRnVuYykgKGdwb2ludGVyIGRhdGEpOwogI2VsaWYgUExBVEZPUk0o
RUZMKQogI2luY2x1ZGUgPEVjb3JlLmg+CisKK2NsYXNzIERpc3BhdGNoUXVldWU7CiAjZW5kaWYK
IAogY2xhc3MgV29ya1F1ZXVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdvcmtRdWV1
ZT4gewpAQCAtMTY3LDQ2ICsxNjksNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8aW50LCBWZWN0
b3I8U29ja2V0RXZlbnRTb3VyY2UqPj4gbV9ldmVudFNvdXJjZXM7CiAgICAgdHlwZWRlZiBIYXNo
TWFwPGludCwgVmVjdG9yPFNvY2tldEV2ZW50U291cmNlKj4+OjppdGVyYXRvciBTb2NrZXRFdmVu
dFNvdXJjZUl0ZXJhdG9yOwogI2VsaWYgUExBVEZPUk0oRUZMKQotICAgIGNsYXNzIFRpbWVyV29y
a0l0ZW0gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8VGltZXJXb3Jr
SXRlbT4gY3JlYXRlKEZ1bmN0aW9uPHZvaWQoKT4sIGRvdWJsZSBleHBpcmVUaW1lKTsKLSAgICAg
ICAgdm9pZCBkaXNwYXRjaCgpIHsgbV9mdW5jdGlvbigpOyB9Ci0gICAgICAgIGRvdWJsZSBleHBp
cmVUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9leHBpcmVUaW1lOyB9Ci0gICAgICAgIGJvb2wgZXhw
aXJlZChkb3VibGUgY3VycmVudFRpbWUpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaW1lID49IG1f
ZXhwaXJlVGltZTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBUaW1lcldvcmtJdGVtKEZ1
bmN0aW9uPHZvaWQoKT4sIGRvdWJsZSBleHBpcmVUaW1lKTsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICAgICAgZG91YmxlIG1fZXhwaXJl
VGltZTsKLSAgICB9OwotCi0gICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0gICAgaW50
IG1fbWF4RmlsZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsK
LSAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7Ci0gICAgTXV0ZXggbV93cml0ZVRvUGlw
ZURlc2NyaXB0b3JMb2NrOwotCi0gICAgYm9vbCBtX3RocmVhZExvb3A7Ci0KLSAgICBWZWN0b3I8
RnVuY3Rpb248dm9pZCgpPj4gbV93b3JrSXRlbVF1ZXVlOwotICAgIE11dGV4IG1fd29ya0l0ZW1R
dWV1ZUxvY2s7Ci0KLSAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotICAgIEZ1bmN0aW9uPHZv
aWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7Ci0KLSAgICBWZWN0b3I8T3duUHRyPFRpbWVyV29y
a0l0ZW0+PiBtX3RpbWVyV29ya0l0ZW1zOwotICAgIE11dGV4IG1fdGltZXJXb3JrSXRlbXNMb2Nr
OwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqKTsKLSAgICBzdGF0
aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOwotICAgIHZvaWQgcGVyZm9ybVdv
cmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICBzdGF0aWMg
ZG91YmxlIGdldEN1cnJlbnRUaW1lKCk7Ci0gICAgc3RydWN0IHRpbWV2YWwqIGdldE5leHRUaW1l
T3V0KCk7Ci0gICAgdm9pZCBwZXJmb3JtVGltZXJXb3JrKCk7Ci0gICAgdm9pZCBpbnNlcnRUaW1l
cldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4pOworICAgIERpc3BhdGNoUXVldWUq
IG1fZGlzcGF0Y2hRdWV1ZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWUuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vZWZsL0Rpc3BhdGNoUXVldWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkYjQ4Y2VhNDM0NDYwNDZkNjhj
MjMzMzBjNTIxOWY2NzI5OTAzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZS5jcHAKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BhdGNoUXVl
dWUuaCIKKworI2luY2x1ZGUgPFdvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lcmZkLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK3N0YXRpYyBjb25zdCBpbnQgaW52YWxp
ZFNvY2tldERlc2NyaXB0b3IgPSAtMTsKK3N0YXRpYyBjb25zdCBjaGFyIHdha2V1cFRocmVhZE1l
c3NhZ2UgPSAnVyc7CisKK1Bhc3NPd25QdHI8V29ya0l0ZW0+IFdvcmtJdGVtOjpjcmVhdGUoV29y
a1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorewor
ICAgIHJldHVybiBhZG9wdFB0cjxXb3JrSXRlbT4obmV3IFdvcmtJdGVtKHdvcmtRdWV1ZSwgZnVu
Y3Rpb24pKTsKK30KKworV29ya0l0ZW06OldvcmtJdGVtKFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICA6IG1fd29ya1F1ZXVlKHdvcmtR
dWV1ZSkKKyAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKG1fd29ya1F1
ZXVlKTsKKworICAgIG1fd29ya1F1ZXVlLT5yZWYoKTsKK30KKworV29ya0l0ZW06On5Xb3JrSXRl
bSgpCit7CisgICAgbV93b3JrUXVldWUtPmRlcmVmKCk7Cit9CisKK1Bhc3NPd25QdHI8VGltZXJX
b3JrSXRlbT4gVGltZXJXb3JrSXRlbTo6Y3JlYXRlKFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQoreworICAgIGlmIChk
ZWxheSA8IDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZG91YmxlIGV4cGlyZVRp
bWUgPSBjdXJyZW50VGltZSgpICsgZGVsYXk7CisgICAgaWYgKGV4cGlyZVRpbWUgPCAwKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGltZXJXb3Jr
SXRlbSh3b3JrUXVldWUsIGZ1bmN0aW9uLCBleHBpcmVUaW1lKSk7Cit9CisKK1RpbWVyV29ya0l0
ZW06OlRpbWVyV29ya0l0ZW0oV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZXhwaXJlVGltZSkKKyAgICA6IFdvcmtJdGVtKHdvcmtR
dWV1ZSwgZnVuY3Rpb24pCisgICAgLCBtX2V4cGlyZVRpbWUoZXhwaXJlVGltZSkKK3sKK30KKwor
RGlzcGF0Y2hRdWV1ZTo6RGlzcGF0Y2hRdWV1ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGlu
dCBmZHNbMl07CisgICAgaWYgKHBpcGUoZmRzKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisKKyAgICBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IgPSBmZHNbMF07CisgICAgbV93cml0
ZVRvUGlwZURlc2NyaXB0b3IgPSBmZHNbMV07CisgICAgRkRfWkVSTygmbV9maWxlRGVzY3JpcHRv
clNldCk7CisgICAgRkRfU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1fZmlsZURlc2Ny
aXB0b3JTZXQpOworICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2Ny
aXB0b3I7CisKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRv
cjsKKworICAgIG1fdGhyZWFkTG9vcCA9IHRydWU7CisgICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJw
cmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJkRpc3BhdGNoUXVldWU6OmRpc3BhdGNoUXVl
dWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKK30KKworRGlzcGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVl
dWUoKQoreworICAgIGNsb3NlKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcik7CisgICAgY2xvc2Uo
bV93cml0ZVRvUGlwZURlc2NyaXB0b3IpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmRpc3Bh
dGNoKFBhc3NPd25QdHI8V29ya0l0ZW0+IGl0ZW0pCit7CisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV93b3JrSXRlbXNMb2NrKTsKKyAgICAgICAgbV93b3JrSXRlbXMuYXBwZW5k
KGl0ZW0pOworICAgIH0KKworICAgIHdha2V1cCgpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6
OmRpc3BhdGNoKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBpZiAoIWl0
ZW0pCisgICAgICAgIHJldHVybjsKKworICAgIGluc2VydFRpbWVyV29ya0l0ZW0oaXRlbSk7Cisg
ICAgd2FrZXVwKCk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2hSZWxlYXNlKCkK
K3sKKyAgICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yID09IGludmFsaWRTb2NrZXREZXNjcmlw
dG9yKTsKKworICAgIG1fdGhyZWFkTG9vcCA9IGZhbHNlOworICAgIHdha2V1cCgpOworfQorCit2
b2lkIERpc3BhdGNoUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVz
Y3JpcHRvciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgaWYgKG1f
c29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcikKKyAgICAgICAgTE9H
X0VSUk9SKCIlZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZC4iLCBmaWxlRGVzY3JpcHRvcik7CisKKyAg
ICBtX3NvY2tldERlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAgICBtX3NvY2tldEV2ZW50
SGFuZGxlciA9IGZ1bmN0aW9uOworCisgICAgaWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxl
RGVzY3JpcHRvcikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9y
OworICAgIEZEX1NFVChmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworfQor
Cit2b2lkIERpc3BhdGNoUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZp
bGVEZXNjcmlwdG9yKQoreworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXRE
ZXNjcmlwdG9yOworCisgICAgaWYgKGZpbGVEZXNjcmlwdG9yID09IG1fbWF4RmlsZURlc2NyaXB0
b3IpCisgICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0
b3I7CisgICAgRkRfQ0xSKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Cit9
CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVdvcmsoKQoreworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIFZlY3RvcjxPd25QdHI8V29ya0l0ZW0+ID4gd29ya0l0ZW1zOworCisgICAg
ICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtc0xvY2spOwor
ICAgICAgICAgICAgaWYgKG1fd29ya0l0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIG1fd29ya0l0ZW1zLnN3YXAod29ya0l0ZW1zKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1zLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgd29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgpOworICAgIH0KK30KKwor
dm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKCkKK3sKKyAgICBWZWN0b3I8T3du
UHRyPFRpbWVyV29ya0l0ZW0+ID4gdGltZXJXb3JrSXRlbXM7CisKKyAgICB7CisgICAgICAgIC8v
IFByb3RlY3RzIG1fdGltZXJXb3JrSXRlbXMuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgICAgIGlmIChtX3RpbWVyV29ya0l0ZW1zLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb3BpZXMgYWxsIHRoZSB0
aW1lciB3b3JrIGl0ZW1zIGluIG1fdGltZXJXb3JrSXRlbXMgdG8gbG9jYWwgdmVjdG9yLgorICAg
ICAgICBtX3RpbWVyV29ya0l0ZW1zLnN3YXAodGltZXJXb3JrSXRlbXMpOworICAgIH0KKworICAg
IGRvdWJsZSBjdXJyZW50ID0gY3VycmVudFRpbWUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF0aW1lcldv
cmtJdGVtc1tpXS0+ZXhwaXJlZChjdXJyZW50KSkgeworICAgICAgICAgICAgLy8gSWYgYSB0aW1l
ciB3b3JrIGl0ZW0gZG9lcyBub3QgZXhwaXJlZCwga2VlcCBpdCB0byB0aGUgbV90aW1lcldvcmtJ
dGVtcy4KKyAgICAgICAgICAgIC8vIG1fdGltZXJXb3JrSXRlbXMgc2hvdWxkIGJlIG9yZGVyZWQg
YnkgZXhwaXJlIHRpbWUuCisgICAgICAgICAgICBpbnNlcnRUaW1lcldvcmtJdGVtKHRpbWVyV29y
a0l0ZW1zW2ldLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIElmIGEgdGltZXIgd29yayBpdGVtIGV4cGlyZWQsIGRpc3BhdGNoIHRoZSBm
dW5jdGlvbiBvZiB0aGUgd29yayBpdGVtLgorICAgICAgICB0aW1lcldvcmtJdGVtc1tpXS0+ZGlz
cGF0Y2goKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybUZpbGVEZXNj
cmlwdG9yV29yaygpCit7CisgICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9IG1fZmls
ZURlc2NyaXB0b3JTZXQ7CisKKyAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0b3IgKyAx
LCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBnZXROZXh0VGltZU91dCgpKSA+PSAwKSB7
CisgICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmls
ZURlc2NyaXB0b3JTZXQpKSB7CisgICAgICAgICAgICBjaGFyIG1lc3NhZ2U7CisgICAgICAgICAg
ICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtZXNzYWdlLCBzaXplb2YoY2hh
cikpID09IC0xKQorICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJv
bSBXb3JrUXVldWVUaHJlYWQgcGlwZSIpOworCisgICAgICAgICAgICBBU1NFUlQobWVzc2FnZSA9
PSB3YWtldXBUaHJlYWRNZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3NvY2tl
dERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2Nr
ZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKKyAgICAgICAgICAgIG1fc29j
a2V0RXZlbnRIYW5kbGVyKCk7CisgICAgfQorfQorCit2b2lkIERpc3BhdGNoUXVldWU6Omluc2Vy
dFRpbWVyV29ya0l0ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQoreworICAgIGlm
ICghaXRlbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKKwor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgLy8gbV90
aW1lcldvcmtJdGVtcyBzaG91bGQgYmUgb3JkZXJlZCBieSBleHBpcmUgdGltZS4KKyAgICBmb3Ig
KDsgcG9zaXRpb24gPCBtX3RpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytwb3NpdGlvbikKKyAgICAg
ICAgaWYgKGl0ZW0tPmV4cGlyZVRpbWUoKSA8IG1fdGltZXJXb3JrSXRlbXNbcG9zaXRpb25dLT5l
eHBpcmVUaW1lKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgIG1fdGltZXJXb3JrSXRlbXMu
aW5zZXJ0KHBvc2l0aW9uLCBpdGVtKTsKK30KKwordm9pZCogRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0
Y2hRdWV1ZVRocmVhZChEaXNwYXRjaFF1ZXVlKiBkaXNwYXRjaFF1ZXVlKQoreworICAgIHdoaWxl
IChkaXNwYXRjaFF1ZXVlLT5tX3RocmVhZExvb3ApIHsKKyAgICAgICAgZGlzcGF0Y2hRdWV1ZS0+
cGVyZm9ybVdvcmsoKTsKKyAgICAgICAgZGlzcGF0Y2hRdWV1ZS0+cGVyZm9ybVRpbWVyV29yaygp
OworICAgICAgICBkaXNwYXRjaFF1ZXVlLT5wZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Cisg
ICAgfQorCisgICAgZGVsZXRlIGRpc3BhdGNoUXVldWU7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgRGlzcGF0Y2hRdWV1ZTo6d2FrZXVwKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV93
cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrKTsKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURl
c2NyaXB0b3IsICZ3YWtldXBUaHJlYWRNZXNzYWdlLCBzaXplb2YoY2hhcikpID09IC0xKQorICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKK30K
Kworc3RydWN0IHRpbWV2YWwqIERpc3BhdGNoUXVldWU6OmdldE5leHRUaW1lT3V0KCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOworICAgIGlmIChtX3Rp
bWVyV29ya0l0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzdGF0aWMg
c3RydWN0IHRpbWV2YWwgdGltZVZhbHVlOworICAgIHRpbWVWYWx1ZS50dl9zZWMgPSAwOworICAg
IHRpbWVWYWx1ZS50dl91c2VjID0gMDsKKyAgICBkb3VibGUgdGltZU91dCA9IG1fdGltZXJXb3Jr
SXRlbXNbMF0tPmV4cGlyZVRpbWUoKSAtIGN1cnJlbnRUaW1lKCk7CisgICAgaWYgKHRpbWVPdXQg
PiAwKSB7CisgICAgICAgIHRpbWVWYWx1ZS50dl9zZWMgPSBzdGF0aWNfY2FzdDxsb25nPih0aW1l
T3V0KTsKKyAgICAgICAgdGltZVZhbHVlLnR2X3VzZWMgPSBzdGF0aWNfY2FzdDxsb25nPigodGlt
ZU91dCAtIHRpbWVWYWx1ZS50dl9zZWMpICogMTAwMDAwMCk7CisgICAgfQorCisgICAgcmV0dXJu
ICZ0aW1lVmFsdWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwv
RGlzcGF0Y2hRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVl
dWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mZTNiNTVjNTdhNzhhNDFhNjUzNTdkYWQwZjg4NWE2ZjdlZjQwOWE1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNo
UXVldWUuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IERpc3BhdGNoUXVldWVfaAorI2RlZmluZSBEaXNwYXRjaFF1ZXVlX2gKKworI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK2NsYXNzIFdvcmtRdWV1ZTsKKworY2xhc3MgV29ya0l0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtJdGVtPiBjcmVhdGUoV29ya1F1ZXVlKiwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIH5Xb3JrSXRlbSgpOworICAgIHZvaWQgZGlz
cGF0Y2goKSB7IG1fZnVuY3Rpb24oKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgV29ya0l0ZW0oV29y
a1F1ZXVlKiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworCitwcml2YXRlOgorICAgIFdvcmtR
dWV1ZSogbV93b3JrUXVldWU7CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOworfTsK
KworY2xhc3MgVGltZXJXb3JrSXRlbSA6IHB1YmxpYyBXb3JrSXRlbSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gY3JlYXRlKFdvcmtRdWV1ZSosIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mLCBkb3VibGUgZGVsYXkpOworICAgIGRvdWJsZSBleHBpcmVUaW1l
KCkgY29uc3QgeyByZXR1cm4gbV9leHBpcmVUaW1lOyB9CisgICAgYm9vbCBleHBpcmVkKGRvdWJs
ZSBjdXJyZW50VGltZSkgY29uc3QgeyByZXR1cm4gY3VycmVudFRpbWUgPj0gbV9leHBpcmVUaW1l
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBUaW1lcldvcmtJdGVtKFdvcmtRdWV1ZSosIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mLCBkb3VibGUgZXhwaXJlVGltZSk7CisKK3ByaXZhdGU6CisgICAgZG91
YmxlIG1fZXhwaXJlVGltZTsKK307CisKK2NsYXNzIERpc3BhdGNoUXVldWUgeworcHVibGljOgor
ICAgIERpc3BhdGNoUXVldWUoY29uc3QgY2hhciogbmFtZSk7CisgICAgfkRpc3BhdGNoUXVldWUo
KTsKKworICAgIHZvaWQgZGlzcGF0Y2goUGFzc093blB0cjxXb3JrSXRlbT4pOworICAgIHZvaWQg
ZGlzcGF0Y2goUGFzc093blB0cjxUaW1lcldvcmtJdGVtPik7CisgICAgdm9pZCBkaXNwYXRjaFJl
bGVhc2UoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgdW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxl
cihpbnQpOworCitwcml2YXRlOgorICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKKyAgICB2b2lkIHBl
cmZvcm1UaW1lcldvcmsoKTsKKyAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsK
KyAgICB2b2lkIGluc2VydFRpbWVyV29ya0l0ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVtPik7
CisgICAgc3RhdGljIHZvaWQqIGRpc3BhdGNoUXVldWVUaHJlYWQoRGlzcGF0Y2hRdWV1ZSopOwor
ICAgIHZvaWQgd2FrZXVwKCk7CisgICAgc3RydWN0IHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCk7
CisKKyAgICBmZF9zZXQgbV9maWxlRGVzY3JpcHRvclNldDsKKyAgICBpbnQgbV9tYXhGaWxlRGVz
Y3JpcHRvcjsKKyAgICBpbnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIGludCBtX3dy
aXRlVG9QaXBlRGVzY3JpcHRvcjsKKyAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxv
Y2s7CisKKyAgICBib29sIG1fdGhyZWFkTG9vcDsKKworICAgIGludCBtX3NvY2tldERlc2NyaXB0
b3I7CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX3NvY2tldEV2ZW50SGFuZGxlcjsKKworICAgIFZl
Y3RvcjxPd25QdHI8V29ya0l0ZW0+ID4gbV93b3JrSXRlbXM7CisgICAgTXV0ZXggbV93b3JrSXRl
bXNMb2NrOworCisgICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVtPiA+IG1fdGltZXJXb3Jr
SXRlbXM7CisgICAgTXV0ZXggbV90aW1lcldvcmtJdGVtc0xvY2s7Cit9OworCisjZW5kaWYgLy8g
RGlzcGF0Y2hRdWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwv
V29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVF
ZmwuY3BwCmluZGV4IGViZGI4YTZmOGU4YTBiZjNiMDk4YThkZmYwOGE5Y2IzMjI1MzRlYjAuLjc5
ODM3MWRjNDE3ZGU1ZWE4Njg3OWY4Njk5ZjJhMTliMmQ4ZDRhZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCkBAIC0yMCwyMTkgKzIwLDUwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAKLSNpbmNsdWRlIDxz
eXMvdGltZXJmZC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8RGlz
cGF0Y2hRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCi1zdGF0aWMgY29u
c3QgaW50IGludmFsaWRTb2NrZXREZXNjcmlwdG9yID0gLTE7Ci1zdGF0aWMgY29uc3QgaW50IHRo
cmVhZE1lc3NhZ2VTaXplID0gMTsKLXN0YXRpYyBjb25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3Nh
Z2VbXSA9ICJGIjsKLXN0YXRpYyBjb25zdCBjaGFyIHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlci
OwotCi1QYXNzT3duUHRyPFdvcmtRdWV1ZTo6VGltZXJXb3JrSXRlbT4gV29ya1F1ZXVlOjpUaW1l
cldvcmtJdGVtOjpjcmVhdGUoRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbiwgZG91YmxlIGV4cGly
ZVRpbWUpCi17Ci0gICAgaWYgKGV4cGlyZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGltZXJXb3JrSXRlbShmdW5jdGlvbiwgZXhw
aXJlVGltZSkpOwotfQotCi1Xb3JrUXVldWU6OlRpbWVyV29ya0l0ZW06OlRpbWVyV29ya0l0ZW0o
RnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyZVRpbWUpCi0gICAgOiBtX2Z1
bmN0aW9uKGZ1bmN0aW9uKQotICAgICwgbV9leHBpcmVUaW1lKGV4cGlyZVRpbWUpCi17Ci19Ci0K
IHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKIHsK
LSAgICBpbnQgZmRzWzJdOwotICAgIGlmIChwaXBlKGZkcykpCi0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotCi0gICAgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yID0gZmRzWzBdOwotICAg
IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yID0gZmRzWzFdOwotICAgIEZEX1pFUk8oJm1fZmlsZURl
c2NyaXB0b3JTZXQpOwotICAgIEZEX1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtX2Zp
bGVEZXNjcmlwdG9yU2V0KTsKLSAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBp
cGVEZXNjcmlwdG9yOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERl
c2NyaXB0b3I7Ci0KLSAgICBtX3RocmVhZExvb3AgPSB0cnVlOwotICAgIGNyZWF0ZVRocmVhZChy
ZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6OndvcmtRdWV1
ZVRocmVhZCksIHRoaXMsIG5hbWUpOworICAgIG1fZGlzcGF0Y2hRdWV1ZSA9IG5ldyBEaXNwYXRj
aFF1ZXVlKG5hbWUpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
IHsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKGZpbmlzaFRocmVhZE1lc3NhZ2UpOwotfQotCi12
b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQotewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAg
ICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gd29ya0l0ZW1RdWV1ZTsKLQotICAgICAgICB7
Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0g
ICAgICAgICAgICBpZiAobV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdvcmtJdGVtUXVl
dWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JrSXRl
bVF1ZXVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldKCk7Ci0g
ICAgICAgICAgICBkZXJlZigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1
ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCi17Ci0gICAgZmRfc2V0IHJlYWRGaWxlRGVz
Y3JpcHRvclNldCA9IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0KG1fbWF4
RmlsZURlc2NyaXB0b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBnZXROZXh0
VGltZU91dCgpKSA+PSAwKSB7Ci0gICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURl
c2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7Ci0gICAgICAgICAgICBjaGFyIHJl
YWRCdWZbdGhyZWFkTWVzc2FnZVNpemVdOwotICAgICAgICAgICAgaWYgKHJlYWQobV9yZWFkRnJv
bVBpcGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCi0gICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdvcmtRdWV1ZVRocmVh
ZCBwaXBlIik7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1ZiwgZmluaXNoVGhyZWFk
TWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkTG9v
cCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAh
PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3Is
ICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQotICAgICAgICAgICAgbV9zb2NrZXRFdmVudEhhbmRs
ZXIoKTsKLSAgICB9Ci19Ci0KLXN0cnVjdCB0aW1ldmFsKiBXb3JrUXVldWU6OmdldE5leHRUaW1l
T3V0KCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwot
ICAgIGlmIChtX3RpbWVyV29ya0l0ZW1zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgdGltZVZhbHVlOwotICAgIHRpbWVWYWx1ZS50dl9z
ZWMgPSAwOwotICAgIHRpbWVWYWx1ZS50dl91c2VjID0gMDsKLSAgICBkb3VibGUgdGltZU91dCA9
IG1fdGltZXJXb3JrSXRlbXNbMF0tPmV4cGlyZVRpbWUoKSAtIGN1cnJlbnRUaW1lKCk7Ci0gICAg
aWYgKHRpbWVPdXQgPiAwKSB7Ci0gICAgICAgIHRpbWVWYWx1ZS50dl9zZWMgPSBzdGF0aWNfY2Fz
dDxsb25nPih0aW1lT3V0KTsKLSAgICAgICAgdGltZVZhbHVlLnR2X3VzZWMgPSBzdGF0aWNfY2Fz
dDxsb25nPigodGltZU91dCAtIHRpbWVWYWx1ZS50dl9zZWMpICogMTAwMDAwMCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuICZ0aW1lVmFsdWU7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjppbnNlcnRUaW1l
cldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKLXsKLSAgICBpZiAoIWl0
ZW0pCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7Ci0KLSAgICBN
dXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwotICAgIC8vIG1fdGltZXJX
b3JrSXRlbXMgc2hvdWxkIGJlIG9yZGVyZWQgYnkgZXhwaXJlIHRpbWUuCi0gICAgZm9yICg7IHBv
c2l0aW9uIDwgbV90aW1lcldvcmtJdGVtcy5zaXplKCk7ICsrcG9zaXRpb24pCi0gICAgICAgIGlm
IChpdGVtLT5leHBpcmVUaW1lKCkgPCBtX3RpbWVyV29ya0l0ZW1zW3Bvc2l0aW9uXS0+ZXhwaXJl
VGltZSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICBtX3RpbWVyV29ya0l0ZW1zLmluc2Vy
dChwb3NpdGlvbiwgaXRlbSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtVGltZXJXb3Jr
KCkKLXsKLSAgICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+ID4gdGltZXJXb3JrSXRlbXM7
Ci0KLSAgICB7Ci0gICAgICAgIC8vIFByb3RlY3RzIG1fdGltZXJXb3JrSXRlbXMuCi0gICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7Ci0gICAgICAgIGlmICht
X3RpbWVyV29ya0l0ZW1zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAvLyBDb3BpZXMgYWxsIHRoZSB0aW1lciB3b3JrIGl0ZW1zIGluIG1fdGltZXJXb3JrSXRlbXMg
dG8gbG9jYWwgdmVjdG9yLgotICAgICAgICBtX3RpbWVyV29ya0l0ZW1zLnN3YXAodGltZXJXb3Jr
SXRlbXMpOwotICAgIH0KLQotICAgIGRvdWJsZSBjdXJyZW50ID0gY3VycmVudFRpbWUoKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKCF0aW1lcldvcmtJdGVtc1tpXS0+ZXhwaXJlZChjdXJyZW50KSkgewotICAg
ICAgICAgICAgLy8gSWYgYSB0aW1lciB3b3JrIGl0ZW0gZG9lcyBub3QgZXhwaXJlZCwga2VlcCBp
dCB0byB0aGUgbV90aW1lcldvcmtJdGVtcy4KLSAgICAgICAgICAgIC8vIG1fdGltZXJXb3JrSXRl
bXMgc2hvdWxkIGJlIG9yZGVyZWQgYnkgZXhwaXJlIHRpbWUuCi0gICAgICAgICAgICBpbnNlcnRU
aW1lcldvcmtJdGVtKHRpbWVyV29ya0l0ZW1zW2ldLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIGEgdGltZXIgd29yayBpdGVtIGV4
cGlyZWQsIGRpc3BhdGNoIHRoZSBmdW5jdGlvbiBvZiB0aGUgd29yayBpdGVtLgotICAgICAgICB0
aW1lcldvcmtJdGVtc1tpXS0+ZGlzcGF0Y2goKTsKLSAgICAgICAgZGVyZWYoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgV29ya1F1ZXVlOjpzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9j
ayk7Ci0gICAgaWYgKHdyaXRlKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yLCBtZXNzYWdlLCB0aHJl
YWRNZXNzYWdlU2l6ZSkgPT0gLTEpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdha2Ug
dXAgV29ya1F1ZXVlIFRocmVhZCIpOwotfQotCi12b2lkKiBXb3JrUXVldWU6OndvcmtRdWV1ZVRo
cmVhZChXb3JrUXVldWUqIHdvcmtRdWV1ZSkKLXsKLSAgICB3aGlsZSAod29ya1F1ZXVlLT5tX3Ro
cmVhZExvb3ApIHsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtV29yaygpOwotICAgICAgICB3
b3JrUXVldWUtPnBlcmZvcm1UaW1lcldvcmsoKTsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3Jt
RmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgfQotCi0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3Jl
YWRGcm9tUGlwZURlc2NyaXB0b3IpOwotICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV93cml0ZVRvUGlw
ZURlc2NyaXB0b3IpOwotCi0gICAgcmV0dXJuIDA7CisgICAgLy8gbV9kaXNwYXRjaFF1ZXVlIHdp
bGwgYmUgZGVsZXRlZCBvbiB0aGUgZGlzcGF0Y2ggcXVldWUgdGhyZWFkLgorICAgIERpc3BhdGNo
UXVldWUqIGRpc3BhdGNoUXVldWUgPSBtX2Rpc3BhdGNoUXVldWU7CisgICAgbV9kaXNwYXRjaFF1
ZXVlID0gMDsKKyAgICBkaXNwYXRjaFF1ZXVlLT5kaXNwYXRjaFJlbGVhc2UoKTsKIH0KIAogdm9p
ZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRv
ciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiB7Ci0gICAgaWYgKG1fc29ja2V0
RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcikKLSAgICAgICAgTE9HX0VSUk9S
KCIlZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZC4iLCBmaWxlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3Nv
Y2tldERlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxl
ciA9IGZ1bmN0aW9uOworICAgIGlmICghbV9kaXNwYXRjaFF1ZXVlKQorICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQotICAgICAg
ICBtX21heEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7Ci0gICAgRkRfU0VUKGZpbGVE
ZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisgICAgbV9kaXNwYXRjaFF1ZXVlLT5y
ZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvciwgZnVuY3Rpb24pOwogfQog
CiB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURl
c2NyaXB0b3IpCiB7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2Ny
aXB0b3I7CisgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCisgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQotICAgICAgICBtX21h
eEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIEZEX0NMUihm
aWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIG1fZGlzcGF0Y2hRdWV1
ZS0+dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvcik7CiB9CiAKIHZv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
IHsKLSAgICByZWYoKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29y
a0l0ZW1RdWV1ZUxvY2spOwotICAgICAgICBtX3dvcmtJdGVtUXVldWUuYXBwZW5kKGZ1bmN0aW9u
KTsKLSAgICB9CisgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCisgICAgICAgIHJldHVybjsKIAot
ICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKKyAgICBtX2Rpc3Bh
dGNoUXVldWUtPmRpc3BhdGNoKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgZnVuY3Rpb24pKTsKIH0K
IAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQogewotICAgIGlmIChkZWxheSA8IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIE93blB0cjxUaW1lcldvcmtJdGVtPiB0aW1lcldvcmtJdGVtID0g
VGltZXJXb3JrSXRlbTo6Y3JlYXRlKGZ1bmN0aW9uLCBjdXJyZW50VGltZSgpICsgZGVsYXkpOwot
ICAgIGlmICghdGltZXJXb3JrSXRlbSkKKyAgICBpZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgcmVmKCk7Ci0gICAgaW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldv
cmtJdGVtLnJlbGVhc2UoKSk7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1l
c3NhZ2UpOworICAgIG1fZGlzcGF0Y2hRdWV1ZS0+ZGlzcGF0Y2goVGltZXJXb3JrSXRlbTo6Y3Jl
YXRlKHRoaXMsIGZ1bmN0aW9uLCBkZWxheSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpp
bmRleCA5YjZiOWU1YmRhNGExZWVjNzY3ZDYwNzRlOWQ5MzVjMTkyYjI1YWFiLi5iYTJlYzQyZGFm
MDIwMTc5ZGI4ZGU2ZmVlMTI1ODYzMTkxYmY1NzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMSw0ICsxLDUgQEAKIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUworICAgIFBsYXRm
b3JtL2VmbC9EaXNwYXRjaFF1ZXVlLmNwcAogICAgIFBsYXRmb3JtL2VmbC9Mb2dnaW5nRWZsLmNw
cAogICAgIFBsYXRmb3JtL2VmbC9Nb2R1bGVFZmwuY3BwCiAgICAgUGxhdGZvcm0vZWZsL1dvcmtR
dWV1ZUVmbC5jcHAKQEAgLTE4Miw2ICsxODMsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xV
REVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lbmNoYW50IgorICAgICIke1dFQktJVDJfRElSfS9Q
bGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkvYy9lZmwiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMvc291cCIKICAgICAiJHtXRUJLSVQyX0RJ
Un0vU2hhcmVkL2VmbCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204130</attachid>
            <date>2013-06-09 18:24:21 -0700</date>
            <delta_ts>2013-06-18 08:35:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20130610102256.patch</filename>
            <type>text/plain</type>
            <size>24985</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2Y1N2I2MDYzNjllMjhl
ODE1ZDQ0M2E2YzlmYWRmZjMxNzBhMDEzMy4uMTdhMDUyNzBiNzUyMDQ1ZjAxOTBlNzg0ZGVlYzMy
NTNlMTJkNTNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA2LTA5ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNl
cGFyYXRlIGRpc3BhdGNoIGNvbnRleHQgZnJvbSBXb3JrUXVldWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXb3JrUXVldWUgdG8gcHJl
dmVudCBkYW5nbGluZyB3b3JrcXVldWUgYWNjZXNzLgorCisgICAgICAgIFByZXZpb3VzbHksIFdv
cmtRdWV1ZSBjbGFzcyBoYXZlIGFsbCBjb250ZXh0IGFib3V0IGRpc3BhdGNoLgorICAgICAgICBX
b3JrUXVldWUgaGFkIGRpc3BhdGNoIGl0ZW0gcXVldWUgYW5kIHNvY2tldCBldmVudCBoYW5kbGVy
LAorICAgICAgICBhbmQgdGhvc2UgYXJlIGFjY2Vzc2VkIG9uIHRoZSB3b3JrIHF1ZXVlIHRocmVh
ZCB0aHJvdWdoIFdvcmtRdWV1ZQorICAgICAgICBpbnN0YW5jZS4KKworICAgICAgICBXaXRoIHJl
ZmVyZW5jZSBjb3VudGFibGUgV29ya1F1ZXVlIGNvbmNlcHQsIHRoaXMgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgY29tcGxpY2F0ZXMgaGFuZGxpbmcgd29ya3F1ZXVlIHJlZi1jb3VudGluZyBhbmQg
bWFrZXMgZGFuZ2xpbmcKKyAgICAgICAgd29ya3F1ZXVlIGFjY2VzcyBwcm9ibGVtLgorCisgICAg
ICAgIFRvIG1ha2UgaXQgZWFzeSB0byBoYW5kbGUgV29ya1F1ZXVlIHJlZmVyZW5jZSBjb3VudCBh
bmQgdG8gcHJldmVudAorICAgICAgICBkYW5nbGluZyBhY2Nlc3MgcHJvYmxlbSwgRGlzcGF0Y2hR
dWV1ZSBjbGFzcyBpcyBhZGRlZCB0byBoYW5kbGUKKyAgICAgICAgZGlzcGF0Y2ggdGFza3MgYW5k
IHRoZSBsaWZlY3ljbGUgb2YgdGhlIERpc3BhdGNoUXVldWUgaW5zdGFuY2Ugd2lsbAorICAgICAg
ICBmb2xsb3cgdGhlIHdvcmtxdWV1ZSB0aHJlYWQgbm90IFdvcmtRdWV1ZSBpbnN0YW5jZS4KKwor
ICAgICAgICAqIFBsYXRmb3JtL1dvcmtRdWV1ZS5oOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9E
aXNwYXRjaFF1ZXVlLmNwcDogQWRkZWQuCisgICAgICAgIChXb3JrSXRlbTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdvcmtJdGVtOjpXb3JrSXRlbSk6CisgICAgICAgIChXb3JrSXRlbTo6fldvcmtJdGVt
KToKKyAgICAgICAgKFRpbWVyV29ya0l0ZW06OmNyZWF0ZSk6CisgICAgICAgIChUaW1lcldvcmtJ
dGVtOjpUaW1lcldvcmtJdGVtKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OkRpc3BhdGNoUXVl
dWUpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVldWUpOgorICAgICAgICAo
RGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2gpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0
Y2hSZWxlYXNlKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVdvcmspOgorICAgICAgICAo
RGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVRpbWVyV29yayk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVl
OjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6Omlu
c2VydFRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2hRdWV1
ZVRocmVhZCk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjp3YWtldXApOgorICAgICAgICAoRGlz
cGF0Y2hRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQpOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9EaXNw
YXRjaFF1ZXVlLmg6IEFkZGVkLgorICAgICAgICAoV29ya0l0ZW06OmRpc3BhdGNoKToKKyAgICAg
ICAgKFRpbWVyV29ya0l0ZW06OmV4cGlyZVRpbWUpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6
ZXhwaXJlZCk6CisgICAgICAgICogUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHA6CisgICAg
ICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToK
KwogMjAxMy0wNi0wOCAgSmFlIEh5dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0Pgog
CiAgICAgICAgIFtDb29yZGluYXRlZCBHcmFwaGljc10gUGFzcyB0aGUgb3duZXJzaGlwIG9mIEdy
YXBoaWNzU3VyZmFjZSBleHBsaWNpdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCmlu
ZGV4IGQ5NTRmNTdkYjRmNmRkNzBjMmI2MWUwZjhmN2I0NmExZTExMWY0OTAuLjc0NTM1YzA3MzBl
NDNlNDkxM2I2ZWVjOTNlODgxMmZhYzhiOTE5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtR
dWV1ZS5oCkBAIC01Niw2ICs1Niw4IEBAIFFUX0VORF9OQU1FU1BBQ0UKIHR5cGVkZWYgZ2Jvb2xl
YW4gKCpHU291cmNlRnVuYykgKGdwb2ludGVyIGRhdGEpOwogI2VsaWYgUExBVEZPUk0oRUZMKQog
I2luY2x1ZGUgPEVjb3JlLmg+CisKK2NsYXNzIERpc3BhdGNoUXVldWU7CiAjZW5kaWYKIAogY2xh
c3MgV29ya1F1ZXVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdvcmtRdWV1ZT4gewpA
QCAtMTY3LDQ2ICsxNjksNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8aW50LCBWZWN0b3I8U29j
a2V0RXZlbnRTb3VyY2UqPj4gbV9ldmVudFNvdXJjZXM7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgVmVjdG9yPFNvY2tldEV2ZW50U291cmNlKj4+OjppdGVyYXRvciBTb2NrZXRFdmVudFNvdXJj
ZUl0ZXJhdG9yOwogI2VsaWYgUExBVEZPUk0oRUZMKQotICAgIGNsYXNzIFRpbWVyV29ya0l0ZW0g
ewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4g
Y3JlYXRlKEZ1bmN0aW9uPHZvaWQoKT4sIGRvdWJsZSBleHBpcmVUaW1lKTsKLSAgICAgICAgdm9p
ZCBkaXNwYXRjaCgpIHsgbV9mdW5jdGlvbigpOyB9Ci0gICAgICAgIGRvdWJsZSBleHBpcmVUaW1l
KCkgY29uc3QgeyByZXR1cm4gbV9leHBpcmVUaW1lOyB9Ci0gICAgICAgIGJvb2wgZXhwaXJlZChk
b3VibGUgY3VycmVudFRpbWUpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaW1lID49IG1fZXhwaXJl
VGltZTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBUaW1lcldvcmtJdGVtKEZ1bmN0aW9u
PHZvaWQoKT4sIGRvdWJsZSBleHBpcmVUaW1lKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1
bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICAgICAgZG91YmxlIG1fZXhwaXJlVGltZTsK
LSAgICB9OwotCi0gICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0gICAgaW50IG1fbWF4
RmlsZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBp
bnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7Ci0gICAgTXV0ZXggbV93cml0ZVRvUGlwZURlc2Ny
aXB0b3JMb2NrOwotCi0gICAgYm9vbCBtX3RocmVhZExvb3A7Ci0KLSAgICBWZWN0b3I8RnVuY3Rp
b248dm9pZCgpPj4gbV93b3JrSXRlbVF1ZXVlOwotICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxv
Y2s7Ci0KLSAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4g
bV9zb2NrZXRFdmVudEhhbmRsZXI7Ci0KLSAgICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+
PiBtX3RpbWVyV29ya0l0ZW1zOwotICAgIE11dGV4IG1fdGltZXJXb3JrSXRlbXNMb2NrOwotCi0g
ICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqKTsKLSAgICBzdGF0aWMgdm9p
ZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOwotICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsK
LSAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICBzdGF0aWMgZG91Ymxl
IGdldEN1cnJlbnRUaW1lKCk7Ci0gICAgc3RydWN0IHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCk7
Ci0gICAgdm9pZCBwZXJmb3JtVGltZXJXb3JrKCk7Ci0gICAgdm9pZCBpbnNlcnRUaW1lcldvcmtJ
dGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4pOworICAgIERpc3BhdGNoUXVldWUqIG1fZGlz
cGF0Y2hRdWV1ZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vZWZsL0Rpc3BhdGNoUXVldWUuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZs
L0Rpc3BhdGNoUXVldWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhNzFlMmZiNTkxZTRmZTllOTE1ZGYxYjRl
OWI1MTNkMjNhZjcxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9lZmwvRGlzcGF0Y2hRdWV1ZS5jcHAKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BhdGNoUXVldWUuaCIK
KworI2luY2x1ZGUgPFdvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lcmZkLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK3N0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tl
dERlc2NyaXB0b3IgPSAtMTsKK3N0YXRpYyBjb25zdCBjaGFyIHdha2V1cFRocmVhZE1lc3NhZ2Ug
PSAnVyc7CisKK1Bhc3NPd25QdHI8V29ya0l0ZW0+IFdvcmtJdGVtOjpjcmVhdGUoV29ya1F1ZXVl
KiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIHJl
dHVybiBhZG9wdFB0cjxXb3JrSXRlbT4obmV3IFdvcmtJdGVtKHdvcmtRdWV1ZSwgZnVuY3Rpb24p
KTsKK30KKworV29ya0l0ZW06OldvcmtJdGVtKFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICA6IG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkK
KyAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKG1fd29ya1F1ZXVlKTsK
KworICAgIG1fd29ya1F1ZXVlLT5yZWYoKTsKK30KKworV29ya0l0ZW06On5Xb3JrSXRlbSgpCit7
CisgICAgbV93b3JrUXVldWUtPmRlcmVmKCk7Cit9CisKK1Bhc3NPd25QdHI8VGltZXJXb3JrSXRl
bT4gVGltZXJXb3JrSXRlbTo6Y3JlYXRlKFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQoreworICAgIGlmIChkZWxheSA8
IDApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZG91YmxlIGV4cGlyZVRpbWUgPSBj
dXJyZW50VGltZSgpICsgZGVsYXk7CisgICAgaWYgKGV4cGlyZVRpbWUgPCAwKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGltZXJXb3JrSXRlbSh3
b3JrUXVldWUsIGZ1bmN0aW9uLCBleHBpcmVUaW1lKSk7Cit9CisKK1RpbWVyV29ya0l0ZW06OlRp
bWVyV29ya0l0ZW0oV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uLCBkb3VibGUgZXhwaXJlVGltZSkKKyAgICA6IFdvcmtJdGVtKHdvcmtRdWV1ZSwg
ZnVuY3Rpb24pCisgICAgLCBtX2V4cGlyZVRpbWUoZXhwaXJlVGltZSkKK3sKK30KKworRGlzcGF0
Y2hRdWV1ZTo6RGlzcGF0Y2hRdWV1ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGludCBmZHNb
Ml07CisgICAgaWYgKHBpcGUoZmRzKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisK
KyAgICBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IgPSBmZHNbMF07CisgICAgbV93cml0ZVRvUGlw
ZURlc2NyaXB0b3IgPSBmZHNbMV07CisgICAgRkRfWkVSTygmbV9maWxlRGVzY3JpcHRvclNldCk7
CisgICAgRkRfU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JT
ZXQpOworICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7
CisKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKwor
ICAgIG1fdGhyZWFkTG9vcCA9IHRydWU7CisgICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nh
c3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJkRpc3BhdGNoUXVldWU6OmRpc3BhdGNoUXVldWVUaHJl
YWQpLCB0aGlzLCBuYW1lKTsKK30KKworRGlzcGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVldWUoKQor
eworICAgIGNsb3NlKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcik7CisgICAgY2xvc2UobV93cml0
ZVRvUGlwZURlc2NyaXB0b3IpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoKFBh
c3NPd25QdHI8V29ya0l0ZW0+IGl0ZW0pCit7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV93b3JrSXRlbXNMb2NrKTsKKyAgICAgICAgbV93b3JrSXRlbXMuYXBwZW5kKGl0ZW0p
OworICAgIH0KKworICAgIHdha2V1cCgpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmRpc3Bh
dGNoKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisg
ICAgICAgIHJldHVybjsKKworICAgIGluc2VydFRpbWVyV29ya0l0ZW0oaXRlbSk7CisgICAgd2Fr
ZXVwKCk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2hSZWxlYXNlKCkKK3sKKyAg
ICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yID09IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKTsK
KworICAgIG1fdGhyZWFkTG9vcCA9IGZhbHNlOworICAgIHdha2V1cCgpOworfQorCit2b2lkIERp
c3BhdGNoUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRv
ciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgaWYgKG1fc29ja2V0
RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcikKKyAgICAgICAgTE9HX0VSUk9S
KCIlZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIiwgZmlsZURlc2NyaXB0b3IpOworCisgICAgbV9z
b2NrZXREZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgbV9zb2NrZXRFdmVudEhhbmRs
ZXIgPSBmdW5jdGlvbjsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2Ny
aXB0b3IpCisgICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAg
ICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKK30KKwordm9p
ZCBEaXNwYXRjaFF1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVz
Y3JpcHRvcikKK3sKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3Jp
cHRvcjsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQor
ICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwor
ICAgIEZEX0NMUihmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworfQorCit2
b2lkIERpc3BhdGNoUXVldWU6OnBlcmZvcm1Xb3JrKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICBWZWN0b3I8T3duUHRyPFdvcmtJdGVtPiA+IHdvcmtJdGVtczsKKworICAgICAgICB7
CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbXNMb2NrKTsKKyAgICAg
ICAgICAgIGlmIChtX3dvcmtJdGVtcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBtX3dvcmtJdGVtcy5zd2FwKHdvcmtJdGVtcyk7CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIHdvcmtJdGVtc1tpXS0+ZGlzcGF0Y2goKTsKKyAgICB9Cit9CisKK3ZvaWQg
RGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVRpbWVyV29yaygpCit7CisgICAgVmVjdG9yPE93blB0cjxU
aW1lcldvcmtJdGVtPiA+IHRpbWVyV29ya0l0ZW1zOworCisgICAgeworICAgICAgICAvLyBQcm90
ZWN0cyBtX3RpbWVyV29ya0l0ZW1zLgorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1l
cldvcmtJdGVtc0xvY2spOworICAgICAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQ29waWVzIGFsbCB0aGUgdGltZXIg
d29yayBpdGVtcyBpbiBtX3RpbWVyV29ya0l0ZW1zIHRvIGxvY2FsIHZlY3Rvci4KKyAgICAgICAg
bV90aW1lcldvcmtJdGVtcy5zd2FwKHRpbWVyV29ya0l0ZW1zKTsKKyAgICB9CisKKyAgICBkb3Vi
bGUgY3VycmVudCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghdGltZXJXb3JrSXRl
bXNbaV0tPmV4cGlyZWQoY3VycmVudCkpIHsKKyAgICAgICAgICAgIC8vIElmIGEgdGltZXIgd29y
ayBpdGVtIGRvZXMgbm90IGV4cGlyZWQsIGtlZXAgaXQgdG8gdGhlIG1fdGltZXJXb3JrSXRlbXMu
CisgICAgICAgICAgICAvLyBtX3RpbWVyV29ya0l0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4
cGlyZSB0aW1lLgorICAgICAgICAgICAgaW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVt
c1tpXS5yZWxlYXNlKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBJZiBhIHRpbWVyIHdvcmsgaXRlbSBleHBpcmVkLCBkaXNwYXRjaCB0aGUgZnVuY3Rp
b24gb2YgdGhlIHdvcmsgaXRlbS4KKyAgICAgICAgdGltZXJXb3JrSXRlbXNbaV0tPmRpc3BhdGNo
KCk7CisgICAgfQorfQorCit2b2lkIERpc3BhdGNoUXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRv
cldvcmsoKQoreworICAgIGZkX3NldCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNj
cmlwdG9yU2V0OworCisgICAgaWYgKHNlbGVjdChtX21heEZpbGVEZXNjcmlwdG9yICsgMSwgJnJl
YWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwgZ2V0TmV4dFRpbWVPdXQoKSkgPj0gMCkgeworICAg
ICAgICBpZiAoRkRfSVNTRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNj
cmlwdG9yU2V0KSkgeworICAgICAgICAgICAgY2hhciBtZXNzYWdlOworICAgICAgICAgICAgaWYg
KHJlYWQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbWVzc2FnZSwgc2l6ZW9mKGNoYXIpKSA9
PSAtMSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gRGlz
cGF0Y2hRdWV1ZSBUaHJlYWQgcGlwZSIpOworCisgICAgICAgICAgICBBU1NFUlQobWVzc2FnZSA9
PSB3YWtldXBUaHJlYWRNZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3NvY2tl
dERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2Nr
ZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKKyAgICAgICAgICAgIG1fc29j
a2V0RXZlbnRIYW5kbGVyKCk7CisgICAgfQorfQorCit2b2lkIERpc3BhdGNoUXVldWU6Omluc2Vy
dFRpbWVyV29ya0l0ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQoreworICAgIGlm
ICghaXRlbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKKwor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgLy8gbV90
aW1lcldvcmtJdGVtcyBzaG91bGQgYmUgb3JkZXJlZCBieSBleHBpcmUgdGltZS4KKyAgICBmb3Ig
KDsgcG9zaXRpb24gPCBtX3RpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytwb3NpdGlvbikKKyAgICAg
ICAgaWYgKGl0ZW0tPmV4cGlyZVRpbWUoKSA8IG1fdGltZXJXb3JrSXRlbXNbcG9zaXRpb25dLT5l
eHBpcmVUaW1lKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgIG1fdGltZXJXb3JrSXRlbXMu
aW5zZXJ0KHBvc2l0aW9uLCBpdGVtKTsKK30KKwordm9pZCogRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0
Y2hRdWV1ZVRocmVhZChEaXNwYXRjaFF1ZXVlKiBkaXNwYXRjaFF1ZXVlKQoreworICAgIHdoaWxl
IChkaXNwYXRjaFF1ZXVlLT5tX3RocmVhZExvb3ApIHsKKyAgICAgICAgZGlzcGF0Y2hRdWV1ZS0+
cGVyZm9ybVdvcmsoKTsKKyAgICAgICAgZGlzcGF0Y2hRdWV1ZS0+cGVyZm9ybVRpbWVyV29yaygp
OworICAgICAgICBkaXNwYXRjaFF1ZXVlLT5wZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Cisg
ICAgfQorCisgICAgZGVsZXRlIGRpc3BhdGNoUXVldWU7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgRGlzcGF0Y2hRdWV1ZTo6d2FrZXVwKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV93
cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrKTsKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURl
c2NyaXB0b3IsICZ3YWtldXBUaHJlYWRNZXNzYWdlLCBzaXplb2YoY2hhcikpID09IC0xKQorICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3YWtlIHVwIERpc3BhdGNoUXVldWUgVGhyZWFkIik7
Cit9CisKK3N0cnVjdCB0aW1ldmFsKiBEaXNwYXRjaFF1ZXVlOjpnZXROZXh0VGltZU91dCgpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKKyAgICBpZiAo
bV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3Rh
dGljIHN0cnVjdCB0aW1ldmFsIHRpbWVWYWx1ZTsKKyAgICB0aW1lVmFsdWUudHZfc2VjID0gMDsK
KyAgICB0aW1lVmFsdWUudHZfdXNlYyA9IDA7CisgICAgZG91YmxlIHRpbWVPdXQgPSBtX3RpbWVy
V29ya0l0ZW1zWzBdLT5leHBpcmVUaW1lKCkgLSBjdXJyZW50VGltZSgpOworICAgIGlmICh0aW1l
T3V0ID4gMCkgeworICAgICAgICB0aW1lVmFsdWUudHZfc2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4o
dGltZU91dCk7CisgICAgICAgIHRpbWVWYWx1ZS50dl91c2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4o
KHRpbWVPdXQgLSB0aW1lVmFsdWUudHZfc2VjKSAqIDEwMDAwMDApOworICAgIH0KKworICAgIHJl
dHVybiAmdGltZVZhbHVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
ZWZsL0Rpc3BhdGNoUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRj
aFF1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUzYjU1YzU3YTc4YTQxYTY1MzU3ZGFkMGY4ODVhNmY3ZWY0
MDlhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNw
YXRjaFF1ZXVlLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBEaXNwYXRjaFF1ZXVlX2gKKyNkZWZpbmUgRGlzcGF0Y2hRdWV1ZV9oCisKKyNpbmNsdWRl
IDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCitjbGFzcyBXb3JrUXVldWU7CisKK2NsYXNzIFdvcmtJdGVtIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXb3JrSXRlbT4gY3JlYXRlKFdvcmtRdWV1
ZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB+V29ya0l0ZW0oKTsKKyAgICB2b2lk
IGRpc3BhdGNoKCkgeyBtX2Z1bmN0aW9uKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdvcmtJdGVt
KFdvcmtRdWV1ZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworcHJpdmF0ZToKKyAgICBX
b3JrUXVldWUqIG1fd29ya1F1ZXVlOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsK
K307CisKK2NsYXNzIFRpbWVyV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW0geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUqLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGRlbGF5KTsKKyAgICBkb3VibGUgZXhwaXJl
VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwaXJlVGltZTsgfQorICAgIGJvb2wgZXhwaXJlZChk
b3VibGUgY3VycmVudFRpbWUpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaW1lID49IG1fZXhwaXJl
VGltZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVGltZXJXb3JrSXRlbShXb3JrUXVldWUqLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGV4cGlyZVRpbWUpOworCitwcml2YXRlOgorICAg
IGRvdWJsZSBtX2V4cGlyZVRpbWU7Cit9OworCitjbGFzcyBEaXNwYXRjaFF1ZXVlIHsKK3B1Ymxp
YzoKKyAgICBEaXNwYXRjaFF1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5EaXNwYXRjaFF1
ZXVlKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoKFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKKyAgICB2
b2lkIGRpc3BhdGNoKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4pOworICAgIHZvaWQgZGlzcGF0
Y2hSZWxlYXNlKCk7CisgICAgdm9pZCByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTb2NrZXRFdmVudEhh
bmRsZXIoaW50KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9p
ZCBwZXJmb3JtVGltZXJXb3JrKCk7CisgICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3Jr
KCk7CisgICAgdm9pZCBpbnNlcnRUaW1lcldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRl
bT4pOworICAgIHN0YXRpYyB2b2lkKiBkaXNwYXRjaFF1ZXVlVGhyZWFkKERpc3BhdGNoUXVldWUq
KTsKKyAgICB2b2lkIHdha2V1cCgpOworICAgIHN0cnVjdCB0aW1ldmFsKiBnZXROZXh0VGltZU91
dCgpOworCisgICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7CisgICAgaW50IG1fbWF4Rmls
ZURlc2NyaXB0b3I7CisgICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICBpbnQg
bV93cml0ZVRvUGlwZURlc2NyaXB0b3I7CisgICAgTXV0ZXggbV93cml0ZVRvUGlwZURlc2NyaXB0
b3JMb2NrOworCisgICAgYm9vbCBtX3RocmVhZExvb3A7CisKKyAgICBpbnQgbV9zb2NrZXREZXNj
cmlwdG9yOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7CisKKyAg
ICBWZWN0b3I8T3duUHRyPFdvcmtJdGVtPiA+IG1fd29ya0l0ZW1zOworICAgIE11dGV4IG1fd29y
a0l0ZW1zTG9jazsKKworICAgIFZlY3RvcjxPd25QdHI8VGltZXJXb3JrSXRlbT4gPiBtX3RpbWVy
V29ya0l0ZW1zOworICAgIE11dGV4IG1fdGltZXJXb3JrSXRlbXNMb2NrOworfTsKKworI2VuZGlm
IC8vIERpc3BhdGNoUXVldWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
ZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1
ZXVlRWZsLmNwcAppbmRleCBlYmRiOGE2ZjhlOGEwYmYzYjA5OGE4ZGZmMDhhOWNiMzIyNTM0ZWIw
Li43OTgzNzFkYzQxN2RlNWVhODY4NzlmODY5OWYyYTE5YjJkOGQ0YWYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMjAsMjE5ICsyMCw1MCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogCi0jaW5jbHVk
ZSA8c3lzL3RpbWVyZmQuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PERpc3BhdGNoUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAotc3RhdGlj
IGNvbnN0IGludCBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciA9IC0xOwotc3RhdGljIGNvbnN0IGlu
dCB0aHJlYWRNZXNzYWdlU2l6ZSA9IDE7Ci1zdGF0aWMgY29uc3QgY2hhciBmaW5pc2hUaHJlYWRN
ZXNzYWdlW10gPSAiRiI7Ci1zdGF0aWMgY29uc3QgY2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9
ICJXIjsKLQotUGFzc093blB0cjxXb3JrUXVldWU6OlRpbWVyV29ya0l0ZW0+IFdvcmtRdWV1ZTo6
VGltZXJXb3JrSXRlbTo6Y3JlYXRlKEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24sIGRvdWJsZSBl
eHBpcmVUaW1lKQotewotICAgIGlmIChleHBpcmVUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbWVyV29ya0l0ZW0oZnVuY3Rpb24s
IGV4cGlyZVRpbWUpKTsKLX0KLQotV29ya1F1ZXVlOjpUaW1lcldvcmtJdGVtOjpUaW1lcldvcmtJ
dGVtKEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24sIGRvdWJsZSBleHBpcmVUaW1lKQotICAgIDog
bV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAsIG1fZXhwaXJlVGltZShleHBpcmVUaW1lKQotewot
fQotCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUp
CiB7Ci0gICAgaW50IGZkc1syXTsKLSAgICBpZiAocGlwZShmZHMpKQotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLQotICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsK
LSAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKLSAgICBGRF9aRVJPKCZtX2Zp
bGVEZXNjcmlwdG9yU2V0KTsKLSAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAm
bV9maWxlRGVzY3JpcHRvclNldCk7Ci0gICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvcjsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2Nr
ZXREZXNjcmlwdG9yOwotCi0gICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKLSAgICBjcmVhdGVUaHJl
YWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3Jr
UXVldWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBuZXcgRGlz
cGF0Y2hRdWV1ZShuYW1lKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0
ZSgpCiB7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsKLX0K
LQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkKLXsKLSAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7Ci0KLSAgICAg
ICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2sp
OwotICAgICAgICAgICAgaWYgKG1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRl
bVF1ZXVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29y
a0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXSgp
OwotICAgICAgICAgICAgZGVyZWYoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBXb3Jr
UXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQotewotICAgIGZkX3NldCByZWFkRmls
ZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotCi0gICAgaWYgKHNlbGVjdCht
X21heEZpbGVEZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwgZ2V0
TmV4dFRpbWVPdXQoKSkgPj0gMCkgewotICAgICAgICBpZiAoRkRfSVNTRVQobV9yZWFkRnJvbVBp
cGVEZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkgewotICAgICAgICAgICAgY2hh
ciByZWFkQnVmW3RocmVhZE1lc3NhZ2VTaXplXTsKLSAgICAgICAgICAgIGlmIChyZWFkKG1fcmVh
ZEZyb21QaXBlRGVzY3JpcHRvciwgcmVhZEJ1ZiwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQot
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBXb3JrUXVldWVU
aHJlYWQgcGlwZSIpOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKHJlYWRCdWYsIGZpbmlzaFRo
cmVhZE1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSkKLSAgICAgICAgICAgICAgICBtX3RocmVh
ZExvb3AgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0
b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlw
dG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAgICAgICAgIG1fc29ja2V0RXZlbnRI
YW5kbGVyKCk7Ci0gICAgfQotfQotCi1zdHJ1Y3QgdGltZXZhbCogV29ya1F1ZXVlOjpnZXROZXh0
VGltZU91dCgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2Nr
KTsKLSAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVWYWx1ZTsKLSAgICB0aW1lVmFsdWUu
dHZfc2VjID0gMDsKLSAgICB0aW1lVmFsdWUudHZfdXNlYyA9IDA7Ci0gICAgZG91YmxlIHRpbWVP
dXQgPSBtX3RpbWVyV29ya0l0ZW1zWzBdLT5leHBpcmVUaW1lKCkgLSBjdXJyZW50VGltZSgpOwot
ICAgIGlmICh0aW1lT3V0ID4gMCkgewotICAgICAgICB0aW1lVmFsdWUudHZfc2VjID0gc3RhdGlj
X2Nhc3Q8bG9uZz4odGltZU91dCk7Ci0gICAgICAgIHRpbWVWYWx1ZS50dl91c2VjID0gc3RhdGlj
X2Nhc3Q8bG9uZz4oKHRpbWVPdXQgLSB0aW1lVmFsdWUudHZfc2VjKSAqIDEwMDAwMDApOwotICAg
IH0KLQotICAgIHJldHVybiAmdGltZVZhbHVlOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6aW5zZXJ0
VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0pCi17Ci0gICAgaWYg
KCFpdGVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgcG9zaXRpb24gPSAwOwotCi0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKLSAgICAvLyBtX3Rp
bWVyV29ya0l0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgotICAgIGZvciAo
OyBwb3NpdGlvbiA8IG1fdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK3Bvc2l0aW9uKQotICAgICAg
ICBpZiAoaXRlbS0+ZXhwaXJlVGltZSgpIDwgbV90aW1lcldvcmtJdGVtc1twb3NpdGlvbl0tPmV4
cGlyZVRpbWUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgbV90aW1lcldvcmtJdGVtcy5p
bnNlcnQocG9zaXRpb24sIGl0ZW0pOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVRpbWVy
V29yaygpCi17Ci0gICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVtPiA+IHRpbWVyV29ya0l0
ZW1zOwotCi0gICAgewotICAgICAgICAvLyBQcm90ZWN0cyBtX3RpbWVyV29ya0l0ZW1zLgotICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwotICAgICAgICBp
ZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgLy8gQ29waWVzIGFsbCB0aGUgdGltZXIgd29yayBpdGVtcyBpbiBtX3RpbWVyV29ya0l0
ZW1zIHRvIGxvY2FsIHZlY3Rvci4KLSAgICAgICAgbV90aW1lcldvcmtJdGVtcy5zd2FwKHRpbWVy
V29ya0l0ZW1zKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgY3VycmVudCA9IGN1cnJlbnRUaW1lKCk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmICghdGltZXJXb3JrSXRlbXNbaV0tPmV4cGlyZWQoY3VycmVudCkpIHsK
LSAgICAgICAgICAgIC8vIElmIGEgdGltZXIgd29yayBpdGVtIGRvZXMgbm90IGV4cGlyZWQsIGtl
ZXAgaXQgdG8gdGhlIG1fdGltZXJXb3JrSXRlbXMuCi0gICAgICAgICAgICAvLyBtX3RpbWVyV29y
a0l0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgotICAgICAgICAgICAgaW5z
ZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtc1tpXS5yZWxlYXNlKCkpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBhIHRpbWVyIHdvcmsgaXRl
bSBleHBpcmVkLCBkaXNwYXRjaCB0aGUgZnVuY3Rpb24gb2YgdGhlIHdvcmsgaXRlbS4KLSAgICAg
ICAgdGltZXJXb3JrSXRlbXNbaV0tPmRpc3BhdGNoKCk7Ci0gICAgICAgIGRlcmVmKCk7Ci0gICAg
fQotfQotCi12b2lkIFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKiBt
ZXNzYWdlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dyaXRlVG9QaXBlRGVzY3JpcHRv
ckxvY2spOwotICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwgbWVzc2FnZSwg
dGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3
YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKLX0KLQotdm9pZCogV29ya1F1ZXVlOjp3b3JrUXVl
dWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCi17Ci0gICAgd2hpbGUgKHdvcmtRdWV1ZS0+
bV90aHJlYWRMb29wKSB7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKLSAgICAg
ICAgd29ya1F1ZXVlLT5wZXJmb3JtVGltZXJXb3JrKCk7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVy
Zm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwotICAgIH0KLQotICAgIGNsb3NlKHdvcmtRdWV1ZS0+
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKLSAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3JpdGVU
b1BpcGVEZXNjcmlwdG9yKTsKLQotICAgIHJldHVybiAwOworICAgIC8vIG1fZGlzcGF0Y2hRdWV1
ZSB3aWxsIGJlIGRlbGV0ZWQgb24gdGhlIGRpc3BhdGNoIHF1ZXVlIHRocmVhZC4KKyAgICBEaXNw
YXRjaFF1ZXVlKiBkaXNwYXRjaFF1ZXVlID0gbV9kaXNwYXRjaFF1ZXVlOworICAgIG1fZGlzcGF0
Y2hRdWV1ZSA9IDA7CisgICAgZGlzcGF0Y2hRdWV1ZS0+ZGlzcGF0Y2hSZWxlYXNlKCk7CiB9CiAK
IHZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2Ny
aXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQogewotICAgIGlmIChtX3Nv
Y2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpCi0gICAgICAgIExPR19F
UlJPUigiJWQgaXMgYWxyZWFkeSByZWdpc3RlcmQuIiwgZmlsZURlc2NyaXB0b3IpOwotCi0gICAg
bV9zb2NrZXREZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7Ci0gICAgbV9zb2NrZXRFdmVudEhh
bmRsZXIgPSBmdW5jdGlvbjsKKyAgICBpZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAg
ICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIEZEX1NFVChm
aWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIG1fZGlzcGF0Y2hRdWV1
ZS0+cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoZmlsZURlc2NyaXB0b3IsIGZ1bmN0aW9uKTsK
IH0KIAogdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZp
bGVEZXNjcmlwdG9yKQogewotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXRE
ZXNjcmlwdG9yOworICAgIGlmICghbV9kaXNwYXRjaFF1ZXVlKQorICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAg
bV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBGRF9D
TFIoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBtX2Rpc3BhdGNo
UXVldWUtPnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoZmlsZURlc2NyaXB0b3IpOwogfQog
CiB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24pCiB7Ci0gICAgcmVmKCk7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICAgICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChmdW5j
dGlvbik7Ci0gICAgfQorICAgIGlmICghbV9kaXNwYXRjaFF1ZXVlKQorICAgICAgICByZXR1cm47
CiAKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3VwVGhyZWFkTWVzc2FnZSk7CisgICAgbV9k
aXNwYXRjaFF1ZXVlLT5kaXNwYXRjaChXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsIGZ1bmN0aW9uKSk7
CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKIHsKLSAgICBpZiAoZGVsYXkgPCAwKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBPd25QdHI8VGltZXJXb3JrSXRlbT4gdGltZXJXb3JrSXRl
bSA9IFRpbWVyV29ya0l0ZW06OmNyZWF0ZShmdW5jdGlvbiwgY3VycmVudFRpbWUoKSArIGRlbGF5
KTsKLSAgICBpZiAoIXRpbWVyV29ya0l0ZW0pCisgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHJlZigpOwotICAgIGluc2VydFRpbWVyV29ya0l0ZW0odGlt
ZXJXb3JrSXRlbS5yZWxlYXNlKCkpOwotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJl
YWRNZXNzYWdlKTsKKyAgICBtX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNoKFRpbWVyV29ya0l0ZW06
OmNyZWF0ZSh0aGlzLCBmdW5jdGlvbiwgZGVsYXkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggOWI2YjllNWJkYTRhMWVlYzc2N2Q2MDc0ZTlkOTM1YzE5MmIyNWFhYi4uYmEyZWM0
MmRhZjAyMDE3OWRiOGRlNmZlZTEyNTg2MzE5MWJmNTcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwu
Y21ha2UKQEAgLTEsNCArMSw1IEBACiBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKKyAgICBQ
bGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZS5jcHAKICAgICBQbGF0Zm9ybS9lZmwvTG9nZ2luZ0Vm
bC5jcHAKICAgICBQbGF0Zm9ybS9lZmwvTW9kdWxlRWZsLmNwcAogICAgIFBsYXRmb3JtL2VmbC9X
b3JrUXVldWVFZmwuY3BwCkBAIC0xODIsNiArMTgzLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZW5jaGFudCIKKyAgICAiJHtXRUJLSVQyX0RJ
Un0vUGxhdGZvcm0vZWZsIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQVBJL2MvZWZsIgog
ICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvRG93bmxvYWRzL3NvdXAiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1NoYXJlZC9lZmwiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204917</attachid>
            <date>2013-06-18 08:36:08 -0700</date>
            <delta_ts>2013-06-18 16:48:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20130619003433.patch</filename>
            <type>text/plain</type>
            <size>25642</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxNjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYWYwYzZmZDE0YmE4OGJj
MGM5MmU0MTk2NTY1MGE5OTAzYTIyYjQzMC4uMzk3MmE1Y2JhNDI0ZGE5N2E4NmZlMDZlZGQ1OTk0
MTBkMmU2MGRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA2LTE4ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNl
cGFyYXRlIGRpc3BhdGNoIGNvbnRleHQgZnJvbSBXb3JrUXVldWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXb3JrUXVldWUgdG8gcHJl
dmVudCBkYW5nbGluZyB3b3JrcXVldWUgYWNjZXNzLgorCisgICAgICAgIFByZXZpb3VzbHksIHRo
ZSBXb3JrUXVldWUgY2xhc3MgaGFkIGFsbCBjb250ZXh0IGFib3V0IGRpc3BhdGNoLgorICAgICAg
ICBXb3JrUXVldWUgaGFkIGRpc3BhdGNoIGl0ZW0gcXVldWUgYW5kIHNvY2tldCBldmVudCBoYW5k
bGVyLAorICAgICAgICBhbmQgdGhvc2Ugd2VyZSBhY2Nlc3NlZCBvbiB0aGUgd29yayBxdWV1ZSB0
aHJlYWQgdGhyb3VnaCBXb3JrUXVldWUKKyAgICAgICAgaW5zdGFuY2UuCisKKyAgICAgICAgV2l0
aCByZWZlcmVuY2UgY291bnRhYmxlIFdvcmtRdWV1ZSBjb25jZXB0LCB0aGlzIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGNvbXBsaWNhdGVzIGhhbmRsaW5nIHdvcmtxdWV1ZSByZWYtY291bnRpbmcg
YW5kIGNhdXNlcyBkYW5nbGluZworICAgICAgICB3b3JrcXVldWUgYWNjZXNzIHByb2JsZW0uCisK
KyAgICAgICAgVG8gbWFrZSBpdCBlYXN5IHRvIGhhbmRsZSBXb3JrUXVldWUgcmVmZXJlbmNlIGNv
dW50IGFuZCB0byBwcmV2ZW50CisgICAgICAgIGRhbmdsaW5nIGFjY2VzcyBwcm9ibGVtLCBEaXNw
YXRjaFF1ZXVlIGNsYXNzIGlzIGFkZGVkIHRvIGhhbmRsZQorICAgICAgICBkaXNwYXRjaCB0YXNr
cyBhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgRGlzcGF0Y2hRdWV1ZSBpbnN0YW5jZSB3aWxsCisg
ICAgICAgIGZvbGxvdyB0aGUgd29ya3F1ZXVlIHRocmVhZCBub3QgV29ya1F1ZXVlIGluc3RhbmNl
LgorCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAgICAgICogUGxhdGZvcm0v
ZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdvcmtJdGVtOjpjcmVh
dGUpOgorICAgICAgICAoV29ya0l0ZW06OldvcmtJdGVtKToKKyAgICAgICAgKFdvcmtJdGVtOjp+
V29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFRp
bWVyV29ya0l0ZW06OlRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6RGlz
cGF0Y2hRdWV1ZSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1ZSk6Cisg
ICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVl
OjpzdG9wVGhyZWFkKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnNldFNvY2tldEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpjbGVhclNvY2tldEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtV29yayk6CisgICAgICAgIChEaXNwYXRj
aFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnBlcmZv
cm1GaWxlRGVzY3JpcHRvcldvcmspOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6aW5zZXJ0VGlt
ZXJXb3JrSXRlbSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaFF1ZXVlVGhyZWFk
KToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6Ondha2VVcFRocmVhZCk6CisgICAgICAgIChEaXNw
YXRjaFF1ZXVlOjpnZXROZXh0VGltZU91dCk6CisgICAgICAgICogUGxhdGZvcm0vZWZsL0Rpc3Bh
dGNoUXVldWVFZmwuaDogQWRkZWQuCisgICAgICAgIChXb3JrSXRlbTo6ZGlzcGF0Y2gpOgorICAg
ICAgICAoVGltZXJXb3JrSXRlbTo6ZXhwaXJhdGlvblRpbWVTZWNvbmRzKToKKyAgICAgICAgKFRp
bWVyV29ya0l0ZW06Omhhc0V4cGlyZWQpOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9Xb3JrUXVl
dWVFZmwuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVl
OjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVn
aXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6
CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgICogUGxh
dGZvcm1FZmwuY21ha2U6CisKIDIwMTMtMDYtMTcgIFNhbnRvc2ggTWFodG8gIDxzYW50b3NoLm1h
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIEV4dHJhIHdoaXRlc3BhY2UgaW4gYmxhbmsgbGluZSBp
biBQbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5o
CmluZGV4IGQ5NTRmNTdkYjRmNmRkNzBjMmI2MWUwZjhmN2I0NmExZTExMWY0OTAuLmE3N2U4ZjI2
MTdjNTJjOTI5MDI4MTdiNjg3ZDkzOGE3YTQ2MWYwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dv
cmtRdWV1ZS5oCkBAIC01NSw3ICs1NSw3IEBAIFFUX0VORF9OQU1FU1BBQ0UKICNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CiB0eXBlZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChn
cG9pbnRlciBkYXRhKTsKICNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDxFY29yZS5oPgor
Y2xhc3MgRGlzcGF0Y2hRdWV1ZTsKICNlbmRpZgogCiBjbGFzcyBXb3JrUXVldWUgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29ya1F1ZXVlPiB7CkBAIC0xNjcsNDYgKzE2NywxMCBAQCBw
cml2YXRlOgogICAgIEhhc2hNYXA8aW50LCBWZWN0b3I8U29ja2V0RXZlbnRTb3VyY2UqPj4gbV9l
dmVudFNvdXJjZXM7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPFNvY2tldEV2ZW50
U291cmNlKj4+OjppdGVyYXRvciBTb2NrZXRFdmVudFNvdXJjZUl0ZXJhdG9yOwogI2VsaWYgUExB
VEZPUk0oRUZMKQotICAgIGNsYXNzIFRpbWVyV29ya0l0ZW0gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gY3JlYXRlKEZ1bmN0aW9uPHZvaWQo
KT4sIGRvdWJsZSBleHBpcmVUaW1lKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaCgpIHsgbV9mdW5j
dGlvbigpOyB9Ci0gICAgICAgIGRvdWJsZSBleHBpcmVUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9l
eHBpcmVUaW1lOyB9Ci0gICAgICAgIGJvb2wgZXhwaXJlZChkb3VibGUgY3VycmVudFRpbWUpIGNv
bnN0IHsgcmV0dXJuIGN1cnJlbnRUaW1lID49IG1fZXhwaXJlVGltZTsgfQotCi0gICAgcHJvdGVj
dGVkOgotICAgICAgICBUaW1lcldvcmtJdGVtKEZ1bmN0aW9uPHZvaWQoKT4sIGRvdWJsZSBleHBp
cmVUaW1lKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5j
dGlvbjsKLSAgICAgICAgZG91YmxlIG1fZXhwaXJlVGltZTsKLSAgICB9OwotCi0gICAgZmRfc2V0
IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0gICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7Ci0gICAg
aW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBpbnQgbV93cml0ZVRvUGlwZURlc2Ny
aXB0b3I7Ci0gICAgTXV0ZXggbV93cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrOwotCi0gICAgYm9v
bCBtX3RocmVhZExvb3A7Ci0KLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPj4gbV93b3JrSXRl
bVF1ZXVlOwotICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxvY2s7Ci0KLSAgICBpbnQgbV9zb2Nr
ZXREZXNjcmlwdG9yOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7
Ci0KLSAgICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+PiBtX3RpbWVyV29ya0l0ZW1zOwot
ICAgIE11dGV4IG1fdGltZXJXb3JrSXRlbXNMb2NrOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRv
VGhyZWFkKGNvbnN0IGNoYXIqKTsKLSAgICBzdGF0aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdv
cmtRdWV1ZSopOwotICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxl
RGVzY3JpcHRvcldvcmsoKTsKLSAgICBzdGF0aWMgZG91YmxlIGdldEN1cnJlbnRUaW1lKCk7Ci0g
ICAgc3RydWN0IHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCk7Ci0gICAgdm9pZCBwZXJmb3JtVGlt
ZXJXb3JrKCk7Ci0gICAgdm9pZCBpbnNlcnRUaW1lcldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJX
b3JrSXRlbT4pOworICAgIC8vIFdvcmtRdWV1ZSBqdXN0IGtlZXAgdGhlIERpc3BhdGNoUXVldWUg
cG9pbnRlciB3aXRob3V0IHVzaW5nIE93blB0ciwgYmVjYXVzZQorICAgIC8vIHRoZSBvd25lcnNo
aXAgb2YgdGhlIERpc3BhdGNoUXVldWUgaW5zdGFuY2UgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBX
b3JrUXVldWUuCisgICAgLy8gVGhlIGluc3RhbmNlIGlzIHBhc3NlZCB0byBpdCdzIG93biB0aHJl
YWQgZnVuY3Rpb24gYW5kIGRlbGV0ZWQgaW4gaXQuCisgICAgRGlzcGF0Y2hRdWV1ZSogbV9kaXNw
YXRjaFF1ZXVlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9l
ZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JjNjcyMjQxZjE4MzFmMGY4NmQ4
ZmNiM2I4MmRiN2YwZmM0NWIxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcApAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGF0Y2hR
dWV1ZUVmbC5oIgorCisjaW5jbHVkZSA8V29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVy
ZmQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworc3RhdGljIGNvbnN0IGludCBu
YW5vU2Vjb25kc1BlclNlY29uZCA9IDEwMDAwMDA7CitzdGF0aWMgY29uc3QgaW50IGludmFsaWRT
b2NrZXREZXNjcmlwdG9yID0gLTE7CitzdGF0aWMgY29uc3QgY2hhciB3YWtlVXBUaHJlYWRNZXNz
YWdlID0gJ1cnOworCitQYXNzT3duUHRyPFdvcmtJdGVtPiBXb3JrSXRlbTo6Y3JlYXRlKFdvcmtR
dWV1ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHI8V29ya0l0ZW0+KG5ldyBXb3JrSXRlbSh3b3JrUXVldWUsIGZ1bmN0
aW9uKSk7Cit9CisKK1dvcmtJdGVtOjpXb3JrSXRlbShXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgOiBtX3dvcmtRdWV1ZSh3b3JrUXVl
dWUpCisgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX3dvcmtRdWV1
ZSk7CisKKyAgICBtX3dvcmtRdWV1ZS0+cmVmKCk7Cit9CisKK1dvcmtJdGVtOjp+V29ya0l0ZW0o
KQoreworICAgIG1fd29ya1F1ZXVlLT5kZXJlZigpOworfQorCitQYXNzT3duUHRyPFRpbWVyV29y
a0l0ZW0+IFRpbWVyV29ya0l0ZW06OmNyZWF0ZShXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheVNlY29uZHMpCit7CisgICAg
QVNTRVJUKGRlbGF5U2Vjb25kcyA+PSAwKTsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGlt
ZXJXb3JrSXRlbSh3b3JrUXVldWUsIGZ1bmN0aW9uLCBjdXJyZW50VGltZSgpICsgZGVsYXlTZWNv
bmRzKSk7Cit9CisKK1RpbWVyV29ya0l0ZW06OlRpbWVyV29ya0l0ZW0oV29ya1F1ZXVlKiB3b3Jr
UXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZXhwaXJhdGlv
blRpbWVTZWNvbmRzKQorICAgIDogV29ya0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlvbikKKyAgICAs
IG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzKGV4cGlyYXRpb25UaW1lU2Vjb25kcykKK3sKK30KKwor
RGlzcGF0Y2hRdWV1ZTo6RGlzcGF0Y2hRdWV1ZShjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9p
c1RocmVhZFJ1bm5pbmcodHJ1ZSkKK3sKKyAgICBpbnQgZmRzWzJdOworICAgIGlmIChwaXBlKGZk
cykpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgbV9yZWFkRnJvbVBpcGVE
ZXNjcmlwdG9yID0gZmRzWzBdOworICAgIG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yID0gZmRzWzFd
OworICAgIEZEX1pFUk8oJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIEZEX1NFVChtX3JlYWRG
cm9tUGlwZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBtX21heEZpbGVE
ZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworCisgICAgbV9zb2NrZXREZXNj
cmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7CisKKyAgICBjcmVhdGVUaHJlYWQocmVp
bnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0
Y2hRdWV1ZVRocmVhZCksIHRoaXMsIG5hbWUpOworfQorCitEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0
Y2hRdWV1ZSgpCit7CisgICAgY2xvc2UobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKKyAgICBj
bG9zZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6
ZGlzcGF0Y2goUGFzc093blB0cjxXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtc0xvY2spOworICAgICAgICBtX3dvcmtJdGVtcy5h
cHBlbmQoaXRlbSk7CisgICAgfQorCisgICAgd2FrZVVwVGhyZWFkKCk7Cit9CisKK3ZvaWQgRGlz
cGF0Y2hRdWV1ZTo6ZGlzcGF0Y2goUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQorewor
ICAgIGluc2VydFRpbWVyV29ya0l0ZW0oaXRlbSk7CisgICAgd2FrZVVwVGhyZWFkKCk7Cit9CisK
K3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6c3RvcFRocmVhZCgpCit7CisgICAgQVNTRVJUKG1fc29ja2V0
RGVzY3JpcHRvciA9PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7CisKKyAgICBtX2lzVGhyZWFk
UnVubmluZyA9IGZhbHNlOworICAgIHdha2VVcFRocmVhZCgpOworfQorCit2b2lkIERpc3BhdGNo
UXVldWU6OnNldFNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX3NvY2tldERlc2NyaXB0
b3IgPT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOworCisgICAgbV9zb2NrZXREZXNjcmlwdG9y
ID0gZmlsZURlc2NyaXB0b3I7CisgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIgPSBmdW5jdGlvbjsK
KworICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2NyaXB0b3IpCisgICAgICAg
IG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAgICBGRF9TRVQoZmlsZURl
c2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVl
OjpjbGVhclNvY2tldEV2ZW50SGFuZGxlcigpCit7CisgICAgQVNTRVJUKG1fc29ja2V0RGVzY3Jp
cHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7CisKKyAgICBpZiAobV9zb2NrZXREZXNj
cmlwdG9yID09IG1fbWF4RmlsZURlc2NyaXB0b3IpCisgICAgICAgIG1fbWF4RmlsZURlc2NyaXB0
b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisKKyAgICBGRF9DTFIobV9zb2NrZXREZXNj
cmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisKKyAgICBtX3NvY2tldERlc2NyaXB0b3Ig
PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJm
b3JtV29yaygpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgVmVjdG9yPE93blB0cjxX
b3JrSXRlbT4gPiB3b3JrSXRlbXM7CisKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fd29ya0l0ZW1zTG9jayk7CisgICAgICAgICAgICBpZiAobV93b3JrSXRlbXMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbV93b3Jr
SXRlbXMuc3dhcCh3b3JrSXRlbXMpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB3b3JrSXRlbXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB3b3JrSXRlbXNb
aV0tPmRpc3BhdGNoKCk7CisgICAgfQorfQorCit2b2lkIERpc3BhdGNoUXVldWU6OnBlcmZvcm1U
aW1lcldvcmsoKQoreworICAgIFZlY3RvcjxPd25QdHI8VGltZXJXb3JrSXRlbT4gPiB0aW1lcldv
cmtJdGVtczsKKworICAgIHsKKyAgICAgICAgLy8gUHJvdGVjdHMgbV90aW1lcldvcmtJdGVtcy4K
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKKyAgICAg
ICAgaWYgKG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIC8vIENvcGllcyBhbGwgdGhlIHRpbWVyIHdvcmsgaXRlbXMgaW4gbV90aW1lcldv
cmtJdGVtcyB0byBsb2NhbCB2ZWN0b3IuCisgICAgICAgIG1fdGltZXJXb3JrSXRlbXMuc3dhcCh0
aW1lcldvcmtJdGVtcyk7CisgICAgfQorCisgICAgZG91YmxlIGN1cnJlbnRUaW1lU2Vjb25kcyA9
IGN1cnJlbnRUaW1lKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVyV29ya0l0
ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghdGltZXJXb3JrSXRlbXNbaV0tPmhhc0V4
cGlyZWQoY3VycmVudFRpbWVTZWNvbmRzKSkgeworICAgICAgICAgICAgaW5zZXJ0VGltZXJXb3Jr
SXRlbSh0aW1lcldvcmtJdGVtc1tpXS5yZWxlYXNlKCkpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBhIHRpbWVyIHdvcmsgaXRlbSBoYXMgZXhwaXJl
ZCwgZGlzcGF0Y2ggdGhlIGZ1bmN0aW9uIG9mIHRoZSB3b3JrIGl0ZW0uCisgICAgICAgIHRpbWVy
V29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgpOworICAgIH0KK30KKwordm9pZCBEaXNwYXRjaFF1ZXVl
OjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKK3sKKyAgICBmZF9zZXQgcmVhZEZpbGVEZXNj
cmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKKworICAgIGlmIChzZWxlY3QobV9tYXhG
aWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIGdldE5leHRU
aW1lT3V0KCkpID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVz
Y3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKKyAgICAgICAgICAgIGNoYXIgbWVz
c2FnZTsKKyAgICAgICAgICAgIGlmIChyZWFkKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1l
c3NhZ2UsIDEpID09IC0xKQorICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJl
YWQgZnJvbSBEaXNwYXRjaFF1ZXVlIFRocmVhZCBwaXBlIik7CisKKyAgICAgICAgICAgIEFTU0VS
VChtZXNzYWdlID09IHdha2VVcFRocmVhZE1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9J
U1NFVChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQorICAgICAg
ICAgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGF0Y2hR
dWV1ZTo6aW5zZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0p
Cit7CisgICAgQVNTRVJUKGl0ZW0pOworCisgICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKKworICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgLy8gVGhlIGl0
ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgorICAgIGZvciAoOyBwb3NpdGlv
biA8IG1fdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK3Bvc2l0aW9uKQorICAgICAgICBpZiAoaXRl
bS0+ZXhwaXJhdGlvblRpbWVTZWNvbmRzKCkgPCBtX3RpbWVyV29ya0l0ZW1zW3Bvc2l0aW9uXS0+
ZXhwaXJhdGlvblRpbWVTZWNvbmRzKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgIG1fdGlt
ZXJXb3JrSXRlbXMuaW5zZXJ0KHBvc2l0aW9uLCBpdGVtKTsKK30KKwordm9pZCogRGlzcGF0Y2hR
dWV1ZTo6ZGlzcGF0Y2hRdWV1ZVRocmVhZChEaXNwYXRjaFF1ZXVlKiBkaXNwYXRjaFF1ZXVlKQor
eworICAgIHdoaWxlIChkaXNwYXRjaFF1ZXVlLT5tX2lzVGhyZWFkUnVubmluZykgeworICAgICAg
ICBkaXNwYXRjaFF1ZXVlLT5wZXJmb3JtV29yaygpOworICAgICAgICBkaXNwYXRjaFF1ZXVlLT5w
ZXJmb3JtVGltZXJXb3JrKCk7CisgICAgICAgIGRpc3BhdGNoUXVldWUtPnBlcmZvcm1GaWxlRGVz
Y3JpcHRvcldvcmsoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgb3duZXJzaGlwIG9mIHRoZSBEaXNw
YXRjaFF1ZXVlIGluc3RhbmNlIGJlbG9uZ3MgdG8gdGhpcyB0aHJlYWQKKyAgICAvLyBmdW5jdGlv
biwgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2VzIHRoZSBpbnN0YW5jZSBkdXJpbmcgdGhl
IGxvb3AuCisgICAgLy8gVGhlIGluc3RhbmNlIHBvaW50ZXIgaXMgcGFzc2VkIHRvIHRoaXMgZnVu
Y3Rpb24gdGhyb3VnaCB0aGUgYXJndW1lbnQKKyAgICAvLyAnZGlzcGF0Y2hRdWV1ZScgYnkgdGhl
IERpc3BhdGNoUXVldWUgY29uc3RydWN0b3IuCisgICAgLy8gV2hlbiB0aGUgdGhyZWFkIGxvb3Ag
aXMgZmluaXNoZWQsIERpc3BhdGNoUXVldWUgaW5zdGFuY2Ugc2hvdWxkIGJlCisgICAgLy8gZGVs
ZXRlZC4KKyAgICBkZWxldGUgZGlzcGF0Y2hRdWV1ZTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBEaXNwYXRjaFF1ZXVlOjp3YWtlVXBUaHJlYWQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxvY2spOworICAgIGlmICh3cml0ZShtX3dyaXRlVG9Q
aXBlRGVzY3JpcHRvciwgJndha2VVcFRocmVhZE1lc3NhZ2UsIHNpemVvZihjaGFyKSkgPT0gLTEp
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdha2UgdXAgRGlzcGF0Y2hRdWV1ZSBUaHJl
YWQiKTsKK30KKwordGltZXZhbCogRGlzcGF0Y2hRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQoKSBjb25z
dAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAg
aWYgKG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHN0YXRpYyB0aW1ldmFsIHRpbWVWYWx1ZTsKKyAgICB0aW1lVmFsdWUudHZfc2VjID0gMDsKKyAg
ICB0aW1lVmFsdWUudHZfdXNlYyA9IDA7CisgICAgZG91YmxlIHRpbWVPdXQgPSBtX3RpbWVyV29y
a0l0ZW1zWzBdLT5leHBpcmF0aW9uVGltZVNlY29uZHMoKSAtIGN1cnJlbnRUaW1lKCk7CisgICAg
aWYgKHRpbWVPdXQgPiAwKSB7CisgICAgICAgIHRpbWVWYWx1ZS50dl9zZWMgPSBzdGF0aWNfY2Fz
dDxsb25nPih0aW1lT3V0KTsKKyAgICAgICAgdGltZVZhbHVlLnR2X3VzZWMgPSBzdGF0aWNfY2Fz
dDxsb25nPigodGltZU91dCAtIHRpbWVWYWx1ZS50dl9zZWMpICogbmFub1NlY29uZHNQZXJTZWNv
bmQpOworICAgIH0KKworICAgIHJldHVybiAmdGltZVZhbHVlOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuaCBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQwNTI2MTA2
NWI4OGQ4NTIyYTM1ODgzZjRhNTMwNzhlYWE4MmQ2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmgKQEAgLTAsMCArMSwxMDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaXNwYXRjaFF1ZXVlRWZsX2gKKyNk
ZWZpbmUgRGlzcGF0Y2hRdWV1ZUVmbF9oCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworY2xhc3MgV29ya1F1ZXVlOworCitjbGFzcyBXb3JrSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V29ya0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUq
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgfldvcmtJdGVtKCk7CisgICAgdm9pZCBk
aXNwYXRjaCgpIHsgbV9mdW5jdGlvbigpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXb3JrSXRlbShX
b3JrUXVldWUqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKK3ByaXZhdGU6CisgICAgV29y
a1F1ZXVlKiBtX3dvcmtRdWV1ZTsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Cit9
OworCitjbGFzcyBUaW1lcldvcmtJdGVtIDogcHVibGljIFdvcmtJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBjcmVhdGUoV29ya1F1ZXVlKiwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYsIGRvdWJsZSBkZWxheSk7CisgICAgZG91YmxlIGV4cGlyYXRp
b25UaW1lU2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzOyB9
CisgICAgYm9vbCBoYXNFeHBpcmVkKGRvdWJsZSBjdXJyZW50VGltZVNlY29uZHMpIGNvbnN0IHsg
cmV0dXJuIGN1cnJlbnRUaW1lU2Vjb25kcyA+PSBtX2V4cGlyYXRpb25UaW1lU2Vjb25kczsgfQor
Citwcm90ZWN0ZWQ6CisgICAgVGltZXJXb3JrSXRlbShXb3JrUXVldWUqLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiwgZG91YmxlIGV4cGlyYXRpb25UaW1lU2Vjb25kcyk7CisKK3ByaXZhdGU6Cisg
ICAgZG91YmxlIG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzOworfTsKKworY2xhc3MgRGlzcGF0Y2hR
dWV1ZSB7CitwdWJsaWM6CisgICAgRGlzcGF0Y2hRdWV1ZShjb25zdCBjaGFyKiBuYW1lKTsKKyAg
ICB+RGlzcGF0Y2hRdWV1ZSgpOworCisgICAgdm9pZCBkaXNwYXRjaChQYXNzT3duUHRyPFdvcmtJ
dGVtPik7CisgICAgdm9pZCBkaXNwYXRjaChQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+KTsKKyAg
ICB2b2lkIHN0b3BUaHJlYWQoKTsKKyAgICB2b2lkIHNldFNvY2tldEV2ZW50SGFuZGxlcihpbnQs
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIGNsZWFyU29ja2V0RXZlbnRIYW5k
bGVyKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwZXJmb3JtV29yaygpOworICAgIHZvaWQgcGVy
Zm9ybVRpbWVyV29yaygpOworICAgIHZvaWQgcGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwor
ICAgIHZvaWQgaW5zZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+KTsK
KyAgICBzdGF0aWMgdm9pZCogZGlzcGF0Y2hRdWV1ZVRocmVhZChEaXNwYXRjaFF1ZXVlKik7Cisg
ICAgdm9pZCB3YWtlVXBUaHJlYWQoKTsKKyAgICB0aW1ldmFsKiBnZXROZXh0VGltZU91dCgpIGNv
bnN0OworCisgICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7CisgICAgaW50IG1fbWF4Rmls
ZURlc2NyaXB0b3I7CisgICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICBpbnQg
bV93cml0ZVRvUGlwZURlc2NyaXB0b3I7CisgICAgTXV0ZXggbV93cml0ZVRvUGlwZURlc2NyaXB0
b3JMb2NrOworCisgICAgYm9vbCBtX2lzVGhyZWFkUnVubmluZzsKKworICAgIGludCBtX3NvY2tl
dERlc2NyaXB0b3I7CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX3NvY2tldEV2ZW50SGFuZGxlcjsK
KworICAgIFZlY3RvcjxPd25QdHI8V29ya0l0ZW0+ID4gbV93b3JrSXRlbXM7CisgICAgTXV0ZXgg
bV93b3JrSXRlbXNMb2NrOworCisgICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVtPiA+IG1f
dGltZXJXb3JrSXRlbXM7CisgICAgbXV0YWJsZSBNdXRleCBtX3RpbWVyV29ya0l0ZW1zTG9jazsK
K307CisKKyNlbmRpZiAvLyBEaXNwYXRjaFF1ZXVlRWZsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAKaW5kZXggZWJkYjhhNmY4ZThhMGJmM2IwOThhOGRm
ZjA4YTljYjMyMjUzNGViMC4uNGM2OTU2MzdhODA3MDFjZTI0OWFjOWQ5NzFlMTk0YmFmZDMyYzk5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAKQEAg
LTIwLDIxOSArMjAsNTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXb3JrUXVl
dWUuaCIKIAotI2luY2x1ZGUgPHN5cy90aW1lcmZkLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDxEaXNwYXRjaFF1ZXVlRWZsLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKLXN0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tldERlc2NyaXB0b3IgPSAt
MTsKLXN0YXRpYyBjb25zdCBpbnQgdGhyZWFkTWVzc2FnZVNpemUgPSAxOwotc3RhdGljIGNvbnN0
IGNoYXIgZmluaXNoVGhyZWFkTWVzc2FnZVtdID0gIkYiOwotc3RhdGljIGNvbnN0IGNoYXIgd2Fr
dXBUaHJlYWRNZXNzYWdlW10gPSAiVyI7Ci0KLVBhc3NPd25QdHI8V29ya1F1ZXVlOjpUaW1lcldv
cmtJdGVtPiBXb3JrUXVldWU6OlRpbWVyV29ya0l0ZW06OmNyZWF0ZShGdW5jdGlvbjx2b2lkKCk+
IGZ1bmN0aW9uLCBkb3VibGUgZXhwaXJlVGltZSkKLXsKLSAgICBpZiAoZXhwaXJlVGltZSA8IDAp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaW1l
cldvcmtJdGVtKGZ1bmN0aW9uLCBleHBpcmVUaW1lKSk7Ci19Ci0KLVdvcmtRdWV1ZTo6VGltZXJX
b3JrSXRlbTo6VGltZXJXb3JrSXRlbShGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uLCBkb3VibGUg
ZXhwaXJlVGltZSkKLSAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgLCBtX2V4cGlyZVRp
bWUoZXhwaXJlVGltZSkKLXsKLX0KLQogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6
ZShjb25zdCBjaGFyKiBuYW1lKQogewotICAgIGludCBmZHNbMl07Ci0gICAgaWYgKHBpcGUoZmRz
KSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBtX3JlYWRGcm9tUGlwZURl
c2NyaXB0b3IgPSBmZHNbMF07Ci0gICAgbV93cml0ZVRvUGlwZURlc2NyaXB0b3IgPSBmZHNbMV07
Ci0gICAgRkRfWkVSTygmbV9maWxlRGVzY3JpcHRvclNldCk7Ci0gICAgRkRfU0VUKG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotICAgIG1fbWF4RmlsZURl
c2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0KLSAgICBtX3NvY2tldERlc2Ny
aXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKLQotICAgIG1fdGhyZWFkTG9vcCA9IHRy
dWU7Ci0gICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlv
bj4oJldvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7CisgICAgbV9kaXNw
YXRjaFF1ZXVlID0gbmV3IERpc3BhdGNoUXVldWUobmFtZSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVl
OjpwbGF0Zm9ybUludmFsaWRhdGUoKQogewotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQoZmluaXNo
VGhyZWFkTWVzc2FnZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29yaygpCi17Ci0g
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiB3b3Jr
SXRlbVF1ZXVlOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3dvcmtJdGVtUXVldWUuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgbV93b3JrSXRl
bVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IHdvcmtJdGVtUXVldWVbaV0oKTsKLSAgICAgICAgICAgIGRlcmVmKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKLXsK
LSAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsK
LQotICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2Ny
aXB0b3JTZXQsIDAsIDAsIGdldE5leHRUaW1lT3V0KCkpID49IDApIHsKLSAgICAgICAgaWYgKEZE
X0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkp
IHsKLSAgICAgICAgICAgIGNoYXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07Ci0gICAgICAg
ICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1l
c3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBy
ZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUiKTsKLSAgICAgICAgICAgIGlmICghc3RybmNt
cChyZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkpCi0gICAg
ICAgICAgICAgICAgbV90aHJlYWRMb29wID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lT
U0VUKG1fc29ja2V0RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCi0gICAgICAg
ICAgICBtX3NvY2tldEV2ZW50SGFuZGxlcigpOwotICAgIH0KLX0KLQotc3RydWN0IHRpbWV2YWwq
IFdvcmtRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQoKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3RpbWVyV29ya0l0ZW1zTG9jayk7Ci0gICAgaWYgKG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lVmFs
dWU7Ci0gICAgdGltZVZhbHVlLnR2X3NlYyA9IDA7Ci0gICAgdGltZVZhbHVlLnR2X3VzZWMgPSAw
OwotICAgIGRvdWJsZSB0aW1lT3V0ID0gbV90aW1lcldvcmtJdGVtc1swXS0+ZXhwaXJlVGltZSgp
IC0gY3VycmVudFRpbWUoKTsKLSAgICBpZiAodGltZU91dCA+IDApIHsKLSAgICAgICAgdGltZVZh
bHVlLnR2X3NlYyA9IHN0YXRpY19jYXN0PGxvbmc+KHRpbWVPdXQpOwotICAgICAgICB0aW1lVmFs
dWUudHZfdXNlYyA9IHN0YXRpY19jYXN0PGxvbmc+KCh0aW1lT3V0IC0gdGltZVZhbHVlLnR2X3Nl
YykgKiAxMDAwMDAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gJnRpbWVWYWx1ZTsKLX0KLQotdm9p
ZCBXb3JrUXVldWU6Omluc2VydFRpbWVyV29ya0l0ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVt
PiBpdGVtKQotewotICAgIGlmICghaXRlbSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90
IHBvc2l0aW9uID0gMDsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1z
TG9jayk7Ci0gICAgLy8gbV90aW1lcldvcmtJdGVtcyBzaG91bGQgYmUgb3JkZXJlZCBieSBleHBp
cmUgdGltZS4KLSAgICBmb3IgKDsgcG9zaXRpb24gPCBtX3RpbWVyV29ya0l0ZW1zLnNpemUoKTsg
Kytwb3NpdGlvbikKLSAgICAgICAgaWYgKGl0ZW0tPmV4cGlyZVRpbWUoKSA8IG1fdGltZXJXb3Jr
SXRlbXNbcG9zaXRpb25dLT5leHBpcmVUaW1lKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAg
IG1fdGltZXJXb3JrSXRlbXMuaW5zZXJ0KHBvc2l0aW9uLCBpdGVtKTsKLX0KLQotdm9pZCBXb3Jr
UXVldWU6OnBlcmZvcm1UaW1lcldvcmsoKQotewotICAgIFZlY3RvcjxPd25QdHI8VGltZXJXb3Jr
SXRlbT4gPiB0aW1lcldvcmtJdGVtczsKLQotICAgIHsKLSAgICAgICAgLy8gUHJvdGVjdHMgbV90
aW1lcldvcmtJdGVtcy4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRl
bXNMb2NrKTsKLSAgICAgICAgaWYgKG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIENvcGllcyBhbGwgdGhlIHRpbWVyIHdvcmsgaXRl
bXMgaW4gbV90aW1lcldvcmtJdGVtcyB0byBsb2NhbCB2ZWN0b3IuCi0gICAgICAgIG1fdGltZXJX
b3JrSXRlbXMuc3dhcCh0aW1lcldvcmtJdGVtcyk7Ci0gICAgfQotCi0gICAgZG91YmxlIGN1cnJl
bnQgPSBjdXJyZW50VGltZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aW1lcldv
cmtJdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIXRpbWVyV29ya0l0ZW1zW2ldLT5l
eHBpcmVkKGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAvLyBJZiBhIHRpbWVyIHdvcmsgaXRlbSBk
b2VzIG5vdCBleHBpcmVkLCBrZWVwIGl0IHRvIHRoZSBtX3RpbWVyV29ya0l0ZW1zLgotICAgICAg
ICAgICAgLy8gbV90aW1lcldvcmtJdGVtcyBzaG91bGQgYmUgb3JkZXJlZCBieSBleHBpcmUgdGlt
ZS4KLSAgICAgICAgICAgIGluc2VydFRpbWVyV29ya0l0ZW0odGltZXJXb3JrSXRlbXNbaV0ucmVs
ZWFzZSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
SWYgYSB0aW1lciB3b3JrIGl0ZW0gZXhwaXJlZCwgZGlzcGF0Y2ggdGhlIGZ1bmN0aW9uIG9mIHRo
ZSB3b3JrIGl0ZW0uCi0gICAgICAgIHRpbWVyV29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgpOwotICAg
ICAgICBkZXJlZigpOwotICAgIH0KLX0KLQotdm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9U
aHJlYWQoY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93
cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrKTsKLSAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURl
c2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7Ci19Ci0KLXZvaWQq
IFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQotewotICAg
IHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgewotICAgICAgICB3b3JrUXVldWUtPnBl
cmZvcm1Xb3JrKCk7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVRpbWVyV29yaygpOwotICAg
ICAgICB3b3JrUXVldWUtPnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICB9Ci0KLSAg
ICBjbG9zZSh3b3JrUXVldWUtPm1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2Uo
d29ya1F1ZXVlLT5tX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7Ci0KLSAgICByZXR1cm4gMDsKKyAg
ICAvLyBtX2Rpc3BhdGNoUXVldWUgd2lsbCBiZSBkZWxldGVkIG9uIHRoZSBkaXNwYXRjaCBxdWV1
ZSB0aHJlYWQuCisgICAgRGlzcGF0Y2hRdWV1ZSogZGlzcGF0Y2hRdWV1ZSA9IG1fZGlzcGF0Y2hR
dWV1ZTsKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSAwOworICAgIGRpc3BhdGNoUXVldWUtPnN0b3BU
aHJlYWQoKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiB7
Ci0gICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcikK
LSAgICAgICAgTE9HX0VSUk9SKCIlZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZC4iLCBmaWxlRGVzY3Jp
cHRvcik7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBt
X3NvY2tldEV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uOworICAgIGlmICghbV9kaXNwYXRjaFF1ZXVl
KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVE
ZXNjcmlwdG9yKQotICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7
Ci0gICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisgICAg
bV9kaXNwYXRjaFF1ZXVlLT5zZXRTb2NrZXRFdmVudEhhbmRsZXIoZmlsZURlc2NyaXB0b3IsIGZ1
bmN0aW9uKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRs
ZXIoaW50IGZpbGVEZXNjcmlwdG9yKQogewotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFs
aWRTb2NrZXREZXNjcmlwdG9yOworICAgIFVOVVNFRF9QQVJBTShmaWxlRGVzY3JpcHRvcik7CiAK
LSAgICBpZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAg
bV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBGRF9D
TFIoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBpZiAoIW1fZGlz
cGF0Y2hRdWV1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kaXNwYXRjaFF1ZXVlLT5jbGVh
clNvY2tldEV2ZW50SGFuZGxlcigpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiB7Ci0gICAgcmVmKCk7Ci0KLSAgICB7Ci0g
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICAgICAg
bV93b3JrSXRlbVF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Ci0gICAgfQorICAgIGlmICghbV9kaXNw
YXRjaFF1ZXVlKQorICAgICAgICByZXR1cm47CiAKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdh
a3VwVGhyZWFkTWVzc2FnZSk7CisgICAgbV9kaXNwYXRjaFF1ZXVlLT5kaXNwYXRjaChXb3JrSXRl
bTo6Y3JlYXRlKHRoaXMsIGZ1bmN0aW9uKSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRj
aEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxh
eSkKIHsKLSAgICBpZiAoZGVsYXkgPCAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPd25QdHI8
VGltZXJXb3JrSXRlbT4gdGltZXJXb3JrSXRlbSA9IFRpbWVyV29ya0l0ZW06OmNyZWF0ZShmdW5j
dGlvbiwgY3VycmVudFRpbWUoKSArIGRlbGF5KTsKLSAgICBpZiAoIXRpbWVyV29ya0l0ZW0pCisg
ICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlZigpOwot
ICAgIGluc2VydFRpbWVyV29ya0l0ZW0odGltZXJXb3JrSXRlbS5yZWxlYXNlKCkpOwotICAgIHNl
bmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKKyAgICBtX2Rpc3BhdGNoUXVl
dWUtPmRpc3BhdGNoKFRpbWVyV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCBmdW5jdGlvbiwgZGVsYXkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOWI2YjllNWJkYTRhMWVlYzc2N2Q2
MDc0ZTlkOTM1YzE5MmIyNWFhYi4uNGY3MDBjNjI2NjJiYWZkNDU1NDYxNmNkOGMzMDYyMjE0Mzk2
MjcwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEsNCArMSw1IEBACiBsaXN0KEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKKyAgICBQbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5j
cHAKICAgICBQbGF0Zm9ybS9lZmwvTG9nZ2luZ0VmbC5jcHAKICAgICBQbGF0Zm9ybS9lZmwvTW9k
dWxlRWZsLmNwcAogICAgIFBsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCkBAIC0xODIsNiAr
MTgzLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3Rl
eHQvZW5jaGFudCIKKyAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0vZWZsIgogICAgICIke1dF
QktJVDJfRElSfS9TaGFyZWQvQVBJL2MvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQv
RG93bmxvYWRzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9lZmwiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204954</attachid>
            <date>2013-06-18 16:48:40 -0700</date>
            <delta_ts>2013-09-29 22:20:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20130619084651.patch</filename>
            <type>text/plain</type>
            <size>25638</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxNzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTRmMDE0ZWU2NDEyN2Uw
MDg2YmNjZGZmZWVjZjM5NDYxN2IyM2MzMi4uZTk1MTc5NDNhZjMxZjA3MDA3ZWMxMmNhNWEwYzFk
N2NlNDgxZDQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA2LTE4ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNl
cGFyYXRlIGRpc3BhdGNoIGNvbnRleHQgZnJvbSBXb3JrUXVldWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXb3JrUXVldWUgdG8gcHJl
dmVudCBkYW5nbGluZyB3b3JrcXVldWUgYWNjZXNzLgorCisgICAgICAgIFByZXZpb3VzbHksIHRo
ZSBXb3JrUXVldWUgY2xhc3MgaGFkIGFsbCBjb250ZXh0IGFib3V0IGRpc3BhdGNoLgorICAgICAg
ICBXb3JrUXVldWUgaGFkIGRpc3BhdGNoIGl0ZW0gcXVldWUgYW5kIHNvY2tldCBldmVudCBoYW5k
bGVyLAorICAgICAgICBhbmQgdGhvc2Ugd2VyZSBhY2Nlc3NlZCBvbiB0aGUgd29yayBxdWV1ZSB0
aHJlYWQgdGhyb3VnaCBXb3JrUXVldWUKKyAgICAgICAgaW5zdGFuY2UuCisKKyAgICAgICAgV2l0
aCByZWZlcmVuY2UgY291bnRhYmxlIFdvcmtRdWV1ZSBjb25jZXB0LCB0aGlzIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGNvbXBsaWNhdGVzIGhhbmRsaW5nIHdvcmtxdWV1ZSByZWYtY291bnRpbmcg
YW5kIGNhdXNlcyBkYW5nbGluZworICAgICAgICB3b3JrcXVldWUgYWNjZXNzIHByb2JsZW0uCisK
KyAgICAgICAgVG8gbWFrZSBpdCBlYXN5IHRvIGhhbmRsZSBXb3JrUXVldWUgcmVmZXJlbmNlIGNv
dW50IGFuZCB0byBwcmV2ZW50CisgICAgICAgIGRhbmdsaW5nIGFjY2VzcyBwcm9ibGVtLCBEaXNw
YXRjaFF1ZXVlIGNsYXNzIGlzIGFkZGVkIHRvIGhhbmRsZQorICAgICAgICBkaXNwYXRjaCB0YXNr
cyBhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgRGlzcGF0Y2hRdWV1ZSBpbnN0YW5jZSB3aWxsCisg
ICAgICAgIGZvbGxvdyB0aGUgd29ya3F1ZXVlIHRocmVhZCBub3QgV29ya1F1ZXVlIGluc3RhbmNl
LgorCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAgICAgICogUGxhdGZvcm0v
ZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdvcmtJdGVtOjpjcmVh
dGUpOgorICAgICAgICAoV29ya0l0ZW06OldvcmtJdGVtKToKKyAgICAgICAgKFdvcmtJdGVtOjp+
V29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFRp
bWVyV29ya0l0ZW06OlRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6RGlz
cGF0Y2hRdWV1ZSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1ZSk6Cisg
ICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVl
OjpzdG9wVGhyZWFkKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnNldFNvY2tldEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpjbGVhclNvY2tldEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtV29yayk6CisgICAgICAgIChEaXNwYXRj
aFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnBlcmZv
cm1GaWxlRGVzY3JpcHRvcldvcmspOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6aW5zZXJ0VGlt
ZXJXb3JrSXRlbSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaFF1ZXVlVGhyZWFk
KToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6Ondha2VVcFRocmVhZCk6CisgICAgICAgIChEaXNw
YXRjaFF1ZXVlOjpnZXROZXh0VGltZU91dCk6CisgICAgICAgICogUGxhdGZvcm0vZWZsL0Rpc3Bh
dGNoUXVldWVFZmwuaDogQWRkZWQuCisgICAgICAgIChXb3JrSXRlbTo6ZGlzcGF0Y2gpOgorICAg
ICAgICAoVGltZXJXb3JrSXRlbTo6ZXhwaXJhdGlvblRpbWVTZWNvbmRzKToKKyAgICAgICAgKFRp
bWVyV29ya0l0ZW06Omhhc0V4cGlyZWQpOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9Xb3JrUXVl
dWVFZmwuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVl
OjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVn
aXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6
CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgICogUGxh
dGZvcm1FZmwuY21ha2U6CisKIDIwMTMtMDYtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHNldCBhIG1pbmltdW0g
aGVpZ2h0IGZvciBhdXRvLWxheW91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAppbmRl
eCBkOTU0ZjU3ZGI0ZjZkZDcwYzJiNjFlMGY4ZjdiNDZhMWUxMTFmNDkwLi43YjhlZWY5OWU1MDU2
ODIyODU5Zjg0Zjc2MDA3NzQyZjg5MzliNzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuaApAQCAtNTUsNyArNTUsNyBAQCBRVF9FTkRfTkFNRVNQQUNFCiAjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgogdHlwZWRlZiBnYm9vbGVhbiAoKkdTb3VyY2VGdW5jKSAoZ3BvaW50
ZXIgZGF0YSk7CiAjZWxpZiBQTEFURk9STShFRkwpCi0jaW5jbHVkZSA8RWNvcmUuaD4KK2NsYXNz
IERpc3BhdGNoUXVldWU7CiAjZW5kaWYKIAogY2xhc3MgV29ya1F1ZXVlIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFdvcmtRdWV1ZT4gewpAQCAtMTY3LDQ2ICsxNjcsMTAgQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPGludCwgVmVjdG9yPFNvY2tldEV2ZW50U291cmNlKj4+IG1fZXZlbnRT
b3VyY2VzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFZlY3RvcjxTb2NrZXRFdmVudFNvdXJj
ZSo+Pjo6aXRlcmF0b3IgU29ja2V0RXZlbnRTb3VyY2VJdGVyYXRvcjsKICNlbGlmIFBMQVRGT1JN
KEVGTCkKLSAgICBjbGFzcyBUaW1lcldvcmtJdGVtIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShGdW5jdGlvbjx2b2lkKCk+LCBk
b3VibGUgZXhwaXJlVGltZSk7Ci0gICAgICAgIHZvaWQgZGlzcGF0Y2goKSB7IG1fZnVuY3Rpb24o
KTsgfQotICAgICAgICBkb3VibGUgZXhwaXJlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwaXJl
VGltZTsgfQotICAgICAgICBib29sIGV4cGlyZWQoZG91YmxlIGN1cnJlbnRUaW1lKSBjb25zdCB7
IHJldHVybiBjdXJyZW50VGltZSA+PSBtX2V4cGlyZVRpbWU7IH0KLQotICAgIHByb3RlY3RlZDoK
LSAgICAgICAgVGltZXJXb3JrSXRlbShGdW5jdGlvbjx2b2lkKCk+LCBkb3VibGUgZXhwaXJlVGlt
ZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247
Ci0gICAgICAgIGRvdWJsZSBtX2V4cGlyZVRpbWU7Ci0gICAgfTsKLQotICAgIGZkX3NldCBtX2Zp
bGVEZXNjcmlwdG9yU2V0OwotICAgIGludCBtX21heEZpbGVEZXNjcmlwdG9yOwotICAgIGludCBt
X3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9y
OwotICAgIE11dGV4IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9jazsKLQotICAgIGJvb2wgbV90
aHJlYWRMb29wOwotCi0gICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4+IG1fd29ya0l0ZW1RdWV1
ZTsKLSAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotCi0gICAgaW50IG1fc29ja2V0RGVz
Y3JpcHRvcjsKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOwotCi0g
ICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVtPj4gbV90aW1lcldvcmtJdGVtczsKLSAgICBN
dXRleCBtX3RpbWVyV29ya0l0ZW1zTG9jazsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVh
ZChjb25zdCBjaGFyKik7Ci0gICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVl
dWUqKTsKLSAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7Ci0gICAgdm9pZCBwZXJmb3JtRmlsZURlc2Ny
aXB0b3JXb3JrKCk7Ci0gICAgc3RhdGljIGRvdWJsZSBnZXRDdXJyZW50VGltZSgpOwotICAgIHN0
cnVjdCB0aW1ldmFsKiBnZXROZXh0VGltZU91dCgpOwotICAgIHZvaWQgcGVyZm9ybVRpbWVyV29y
aygpOwotICAgIHZvaWQgaW5zZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0
ZW0+KTsKKyAgICAvLyBXb3JrUXVldWUganVzdCBrZWVwIHRoZSBEaXNwYXRjaFF1ZXVlIHBvaW50
ZXIgd2l0aG91dCB1c2luZyBPd25QdHIsIGJlY2F1c2UKKyAgICAvLyB0aGUgb3duZXJzaGlwIG9m
IHRoZSBEaXNwYXRjaFF1ZXVlIGluc3RhbmNlIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgV29ya1F1
ZXVlLgorICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBwYXNzZWQgdG8gaXRzIG93biB0aHJlYWQgZnVu
Y3Rpb24gYW5kIGRlbGV0ZWQgaW4gaXQuCisgICAgRGlzcGF0Y2hRdWV1ZSogbV9kaXNwYXRjaFF1
ZXVlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9l
ZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlz
cGF0Y2hRdWV1ZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2VkODlhODVlYjg1MzFiMjc5MWQ2NzU0NjA3
OGM1MzI1NjRjMTY4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcApAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGF0Y2hRdWV1ZUVm
bC5oIgorCisjaW5jbHVkZSA8V29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworc3RhdGljIGNvbnN0IGludCBtaWNyb1Nl
Y29uZHNQZXJTZWNvbmQgPSAxMDAwMDAwOworc3RhdGljIGNvbnN0IGludCBpbnZhbGlkU29ja2V0
RGVzY3JpcHRvciA9IC0xOworc3RhdGljIGNvbnN0IGNoYXIgd2FrZVVwVGhyZWFkTWVzc2FnZSA9
ICdXJzsKKworUGFzc093blB0cjxXb3JrSXRlbT4gV29ya0l0ZW06OmNyZWF0ZShXb3JrUXVldWUq
IHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyPFdvcmtJdGVtPihuZXcgV29ya0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlvbikp
OworfQorCitXb3JrSXRlbTo6V29ya0l0ZW0oV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgIDogbV93b3JrUXVldWUod29ya1F1ZXVlKQor
ICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93b3JrUXVldWUpOwor
CisgICAgbV93b3JrUXVldWUtPnJlZigpOworfQorCitXb3JrSXRlbTo6fldvcmtJdGVtKCkKK3sK
KyAgICBtX3dvcmtRdWV1ZS0+ZGVyZWYoKTsKK30KKworUGFzc093blB0cjxUaW1lcldvcmtJdGVt
PiBUaW1lcldvcmtJdGVtOjpjcmVhdGUoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXlTZWNvbmRzKQoreworICAgIEFTU0VS
VChkZWxheVNlY29uZHMgPj0gMCk7CisKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbWVyV29y
a0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlvbiwgY3VycmVudFRpbWUoKSArIGRlbGF5U2Vjb25kcykp
OworfQorCitUaW1lcldvcmtJdGVtOjpUaW1lcldvcmtJdGVtKFdvcmtRdWV1ZSogd29ya1F1ZXVl
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyYXRpb25UaW1l
U2Vjb25kcykKKyAgICA6IFdvcmtJdGVtKHdvcmtRdWV1ZSwgZnVuY3Rpb24pCisgICAgLCBtX2V4
cGlyYXRpb25UaW1lU2Vjb25kcyhleHBpcmF0aW9uVGltZVNlY29uZHMpCit7Cit9CisKK0Rpc3Bh
dGNoUXVldWU6OkRpc3BhdGNoUXVldWUoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1faXNUaHJl
YWRSdW5uaW5nKHRydWUpCit7CisgICAgaW50IGZkc1syXTsKKyAgICBpZiAocGlwZShmZHMpKQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIG1fcmVhZEZyb21QaXBlRGVzY3Jp
cHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKKyAg
ICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBGRF9TRVQobV9yZWFkRnJvbVBp
cGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisgICAgbV9tYXhGaWxlRGVzY3Jp
cHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKworICAgIG1fc29ja2V0RGVzY3JpcHRv
ciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOworCisgICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJw
cmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJkRpc3BhdGNoUXVldWU6OmRpc3BhdGNoUXVl
dWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKK30KKworRGlzcGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVl
dWUoKQoreworICAgIGNsb3NlKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcik7CisgICAgY2xvc2Uo
bV93cml0ZVRvUGlwZURlc2NyaXB0b3IpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmRpc3Bh
dGNoKFBhc3NPd25QdHI8V29ya0l0ZW0+IGl0ZW0pCit7CisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV93b3JrSXRlbXNMb2NrKTsKKyAgICAgICAgbV93b3JrSXRlbXMuYXBwZW5k
KGl0ZW0pOworICAgIH0KKworICAgIHdha2VVcFRocmVhZCgpOworfQorCit2b2lkIERpc3BhdGNo
UXVldWU6OmRpc3BhdGNoKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBp
bnNlcnRUaW1lcldvcmtJdGVtKGl0ZW0pOworICAgIHdha2VVcFRocmVhZCgpOworfQorCit2b2lk
IERpc3BhdGNoUXVldWU6OnN0b3BUaHJlYWQoKQoreworICAgIEFTU0VSVChtX3NvY2tldERlc2Ny
aXB0b3IgPT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOworCisgICAgbV9pc1RocmVhZFJ1bm5p
bmcgPSBmYWxzZTsKKyAgICB3YWtlVXBUaHJlYWQoKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVl
OjpzZXRTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yID09
IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZp
bGVEZXNjcmlwdG9yOworICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisKKyAg
ICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21h
eEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlw
dG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6Y2xl
YXJTb2NrZXRFdmVudEhhbmRsZXIoKQoreworICAgIEFTU0VSVChtX3NvY2tldERlc2NyaXB0b3Ig
IT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOworCisgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRv
ciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0g
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworCisgICAgRkRfQ0xSKG1fc29ja2V0RGVzY3JpcHRv
ciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworCisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52
YWxpZFNvY2tldERlc2NyaXB0b3I7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVdv
cmsoKQoreworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFZlY3RvcjxPd25QdHI8V29ya0l0
ZW0+ID4gd29ya0l0ZW1zOworCisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3dvcmtJdGVtc0xvY2spOworICAgICAgICAgICAgaWYgKG1fd29ya0l0ZW1zLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG1fd29ya0l0ZW1z
LnN3YXAod29ya0l0ZW1zKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd29ya0l0ZW1zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgd29ya0l0ZW1zW2ldLT5k
aXNwYXRjaCgpOworICAgIH0KK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtVGltZXJX
b3JrKCkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+ID4gdGltZXJXb3JrSXRl
bXM7CisKKyAgICB7CisgICAgICAgIC8vIFByb3RlY3RzIG1fdGltZXJXb3JrSXRlbXMuCisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgICAgIGlm
IChtX3RpbWVyV29ya0l0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBDb3BpZXMgYWxsIHRoZSB0aW1lciB3b3JrIGl0ZW1zIGluIG1fdGltZXJXb3JrSXRl
bXMgdG8gbG9jYWwgdmVjdG9yLgorICAgICAgICBtX3RpbWVyV29ya0l0ZW1zLnN3YXAodGltZXJX
b3JrSXRlbXMpOworICAgIH0KKworICAgIGRvdWJsZSBjdXJyZW50VGltZVNlY29uZHMgPSBjdXJy
ZW50VGltZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aW1lcldvcmtJdGVtcy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAoIXRpbWVyV29ya0l0ZW1zW2ldLT5oYXNFeHBpcmVk
KGN1cnJlbnRUaW1lU2Vjb25kcykpIHsKKyAgICAgICAgICAgIGluc2VydFRpbWVyV29ya0l0ZW0o
dGltZXJXb3JrSXRlbXNbaV0ucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gSWYgYSB0aW1lciB3b3JrIGl0ZW0gaGFzIGV4cGlyZWQsIGRp
c3BhdGNoIHRoZSBmdW5jdGlvbiBvZiB0aGUgd29yayBpdGVtLgorICAgICAgICB0aW1lcldvcmtJ
dGVtc1tpXS0+ZGlzcGF0Y2goKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVy
Zm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCit7CisgICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRv
clNldCA9IG1fZmlsZURlc2NyaXB0b3JTZXQ7CisKKyAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURl
c2NyaXB0b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBnZXROZXh0VGltZU91
dCgpKSA+PSAwKSB7CisgICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0
b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7CisgICAgICAgICAgICBjaGFyIG1lc3NhZ2U7
CisgICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtZXNzYWdl
LCAxKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZy
b20gRGlzcGF0Y2hRdWV1ZSBUaHJlYWQgcGlwZSIpOworCisgICAgICAgICAgICBBU1NFUlQobWVz
c2FnZSA9PSB3YWtlVXBUaHJlYWRNZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQo
bV9zb2NrZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKKyAgICAgICAgICAg
IG1fc29ja2V0RXZlbnRIYW5kbGVyKCk7CisgICAgfQorfQorCit2b2lkIERpc3BhdGNoUXVldWU6
Omluc2VydFRpbWVyV29ya0l0ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQorewor
ICAgIEFTU0VSVChpdGVtKTsKKworICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CisKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOworICAgIC8vIFRoZSBpdGVtcyBz
aG91bGQgYmUgb3JkZXJlZCBieSBleHBpcmUgdGltZS4KKyAgICBmb3IgKDsgcG9zaXRpb24gPCBt
X3RpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytwb3NpdGlvbikKKyAgICAgICAgaWYgKGl0ZW0tPmV4
cGlyYXRpb25UaW1lU2Vjb25kcygpIDwgbV90aW1lcldvcmtJdGVtc1twb3NpdGlvbl0tPmV4cGly
YXRpb25UaW1lU2Vjb25kcygpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBtX3RpbWVyV29y
a0l0ZW1zLmluc2VydChwb3NpdGlvbiwgaXRlbSk7Cit9CisKK3ZvaWQqIERpc3BhdGNoUXVldWU6
OmRpc3BhdGNoUXVldWVUaHJlYWQoRGlzcGF0Y2hRdWV1ZSogZGlzcGF0Y2hRdWV1ZSkKK3sKKyAg
ICB3aGlsZSAoZGlzcGF0Y2hRdWV1ZS0+bV9pc1RocmVhZFJ1bm5pbmcpIHsKKyAgICAgICAgZGlz
cGF0Y2hRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKKyAgICAgICAgZGlzcGF0Y2hRdWV1ZS0+cGVyZm9y
bVRpbWVyV29yaygpOworICAgICAgICBkaXNwYXRjaFF1ZXVlLT5wZXJmb3JtRmlsZURlc2NyaXB0
b3JXb3JrKCk7CisgICAgfQorCisgICAgLy8gVGhlIG93bmVyc2hpcCBvZiB0aGUgRGlzcGF0Y2hR
dWV1ZSBpbnN0YW5jZSBiZWxvbmdzIHRvIHRoaXMgdGhyZWFkCisgICAgLy8gZnVuY3Rpb24sIGJl
Y2F1c2UgdGhpcyBmdW5jdGlvbiBhY2Nlc3NlcyB0aGUgaW5zdGFuY2UgZHVyaW5nIHRoZSBsb29w
LgorICAgIC8vIFRoZSBpbnN0YW5jZSBwb2ludGVyIGlzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9u
IHRocm91Z2ggdGhlIGFyZ3VtZW50CisgICAgLy8gJ2Rpc3BhdGNoUXVldWUnIGJ5IHRoZSBEaXNw
YXRjaFF1ZXVlIGNvbnN0cnVjdG9yLgorICAgIC8vIFdoZW4gdGhlIHRocmVhZCBsb29wIGlzIGZp
bmlzaGVkLCBEaXNwYXRjaFF1ZXVlIGluc3RhbmNlIHNob3VsZCBiZQorICAgIC8vIGRlbGV0ZWQu
CisgICAgZGVsZXRlIGRpc3BhdGNoUXVldWU7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRGlz
cGF0Y2hRdWV1ZTo6d2FrZVVwVGhyZWFkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV93
cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrKTsKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURl
c2NyaXB0b3IsICZ3YWtlVXBUaHJlYWRNZXNzYWdlLCBzaXplb2YoY2hhcikpID09IC0xKQorICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3YWtlIHVwIERpc3BhdGNoUXVldWUgVGhyZWFkIik7
Cit9CisKK3RpbWV2YWwqIERpc3BhdGNoUXVldWU6OmdldE5leHRUaW1lT3V0KCkgY29uc3QKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOworICAgIGlmICht
X3RpbWVyV29ya0l0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzdGF0
aWMgdGltZXZhbCB0aW1lVmFsdWU7CisgICAgdGltZVZhbHVlLnR2X3NlYyA9IDA7CisgICAgdGlt
ZVZhbHVlLnR2X3VzZWMgPSAwOworICAgIGRvdWJsZSB0aW1lT3V0ID0gbV90aW1lcldvcmtJdGVt
c1swXS0+ZXhwaXJhdGlvblRpbWVTZWNvbmRzKCkgLSBjdXJyZW50VGltZSgpOworICAgIGlmICh0
aW1lT3V0ID4gMCkgeworICAgICAgICB0aW1lVmFsdWUudHZfc2VjID0gc3RhdGljX2Nhc3Q8bG9u
Zz4odGltZU91dCk7CisgICAgICAgIHRpbWVWYWx1ZS50dl91c2VjID0gc3RhdGljX2Nhc3Q8bG9u
Zz4oKHRpbWVPdXQgLSB0aW1lVmFsdWUudHZfc2VjKSAqIG1pY3JvU2Vjb25kc1BlclNlY29uZCk7
CisgICAgfQorCisgICAgcmV0dXJuICZ0aW1lVmFsdWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDA1MjYxMDY1Yjg4
ZDg1MjJhMzU4ODNmNGE1MzA3OGVhYTgyZDYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuaApAQCAtMCwwICsxLDEwMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpc3BhdGNoUXVldWVFZmxfaAorI2RlZmlu
ZSBEaXNwYXRjaFF1ZXVlRWZsX2gKKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYv
RnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCitjbGFzcyBXb3JrUXVldWU7CisKK2NsYXNzIFdvcmtJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXb3JrSXRlbT4gY3JlYXRlKFdvcmtRdWV1ZSosIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB+V29ya0l0ZW0oKTsKKyAgICB2b2lkIGRpc3Bh
dGNoKCkgeyBtX2Z1bmN0aW9uKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdvcmtJdGVtKFdvcmtR
dWV1ZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworcHJpdmF0ZToKKyAgICBXb3JrUXVl
dWUqIG1fd29ya1F1ZXVlOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisK
K2NsYXNzIFRpbWVyV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUqLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGRlbGF5KTsKKyAgICBkb3VibGUgZXhwaXJhdGlvblRp
bWVTZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV9leHBpcmF0aW9uVGltZVNlY29uZHM7IH0KKyAg
ICBib29sIGhhc0V4cGlyZWQoZG91YmxlIGN1cnJlbnRUaW1lU2Vjb25kcykgY29uc3QgeyByZXR1
cm4gY3VycmVudFRpbWVTZWNvbmRzID49IG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzOyB9CisKK3By
b3RlY3RlZDoKKyAgICBUaW1lcldvcmtJdGVtKFdvcmtRdWV1ZSosIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mLCBkb3VibGUgZXhwaXJhdGlvblRpbWVTZWNvbmRzKTsKKworcHJpdmF0ZToKKyAgICBk
b3VibGUgbV9leHBpcmF0aW9uVGltZVNlY29uZHM7Cit9OworCitjbGFzcyBEaXNwYXRjaFF1ZXVl
IHsKK3B1YmxpYzoKKyAgICBEaXNwYXRjaFF1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5E
aXNwYXRjaFF1ZXVlKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoKFBhc3NPd25QdHI8V29ya0l0ZW0+
KTsKKyAgICB2b2lkIGRpc3BhdGNoKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4pOworICAgIHZv
aWQgc3RvcFRocmVhZCgpOworICAgIHZvaWQgc2V0U29ja2V0RXZlbnRIYW5kbGVyKGludCwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgY2xlYXJTb2NrZXRFdmVudEhhbmRsZXIo
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9pZCBwZXJmb3Jt
VGltZXJXb3JrKCk7CisgICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CisgICAg
dm9pZCBpbnNlcnRUaW1lcldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4pOworICAg
IHN0YXRpYyB2b2lkKiBkaXNwYXRjaFF1ZXVlVGhyZWFkKERpc3BhdGNoUXVldWUqKTsKKyAgICB2
b2lkIHdha2VVcFRocmVhZCgpOworICAgIHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCkgY29uc3Q7
CisKKyAgICBmZF9zZXQgbV9maWxlRGVzY3JpcHRvclNldDsKKyAgICBpbnQgbV9tYXhGaWxlRGVz
Y3JpcHRvcjsKKyAgICBpbnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIGludCBtX3dy
aXRlVG9QaXBlRGVzY3JpcHRvcjsKKyAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxv
Y2s7CisKKyAgICBib29sIG1faXNUaHJlYWRSdW5uaW5nOworCisgICAgaW50IG1fc29ja2V0RGVz
Y3JpcHRvcjsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOworCisg
ICAgVmVjdG9yPE93blB0cjxXb3JrSXRlbT4gPiBtX3dvcmtJdGVtczsKKyAgICBNdXRleCBtX3dv
cmtJdGVtc0xvY2s7CisKKyAgICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+ID4gbV90aW1l
cldvcmtJdGVtczsKKyAgICBtdXRhYmxlIE11dGV4IG1fdGltZXJXb3JrSXRlbXNMb2NrOworfTsK
KworI2VuZGlmIC8vIERpc3BhdGNoUXVldWVFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9lZmwvV29ya1F1ZXVlRWZsLmNwcAppbmRleCBlYmRiOGE2ZjhlOGEwYmYzYjA5OGE4ZGZmMDhh
OWNiMzIyNTM0ZWIwLi40YzY5NTYzN2E4MDcwMWNlMjQ5YWM5ZDk3MWUxOTRiYWZkMzJjOTk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMjAs
MjE5ICsyMCw1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5o
IgogCi0jaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPERpc3BhdGNoUXVldWVFZmwuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KIAotc3RhdGljIGNvbnN0IGludCBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciA9IC0xOwot
c3RhdGljIGNvbnN0IGludCB0aHJlYWRNZXNzYWdlU2l6ZSA9IDE7Ci1zdGF0aWMgY29uc3QgY2hh
ciBmaW5pc2hUaHJlYWRNZXNzYWdlW10gPSAiRiI7Ci1zdGF0aWMgY29uc3QgY2hhciB3YWt1cFRo
cmVhZE1lc3NhZ2VbXSA9ICJXIjsKLQotUGFzc093blB0cjxXb3JrUXVldWU6OlRpbWVyV29ya0l0
ZW0+IFdvcmtRdWV1ZTo6VGltZXJXb3JrSXRlbTo6Y3JlYXRlKEZ1bmN0aW9uPHZvaWQoKT4gZnVu
Y3Rpb24sIGRvdWJsZSBleHBpcmVUaW1lKQotewotICAgIGlmIChleHBpcmVUaW1lIDwgMCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbWVyV29y
a0l0ZW0oZnVuY3Rpb24sIGV4cGlyZVRpbWUpKTsKLX0KLQotV29ya1F1ZXVlOjpUaW1lcldvcmtJ
dGVtOjpUaW1lcldvcmtJdGVtKEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24sIGRvdWJsZSBleHBp
cmVUaW1lKQotICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAsIG1fZXhwaXJlVGltZShl
eHBpcmVUaW1lKQotewotfQotCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNv
bnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgaW50IGZkc1syXTsKLSAgICBpZiAocGlwZShmZHMpKQot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIG1fcmVhZEZyb21QaXBlRGVzY3Jp
cHRvciA9IGZkc1swXTsKLSAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKLSAg
ICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLSAgICBGRF9TRVQobV9yZWFkRnJvbVBp
cGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Ci0gICAgbV9tYXhGaWxlRGVzY3Jp
cHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRv
ciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwotCi0gICAgbV90aHJlYWRMb29wID0gdHJ1ZTsK
LSAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigm
V29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKKyAgICBtX2Rpc3BhdGNo
UXVldWUgPSBuZXcgRGlzcGF0Y2hRdWV1ZShuYW1lKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnBs
YXRmb3JtSW52YWxpZGF0ZSgpCiB7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZChmaW5pc2hUaHJl
YWRNZXNzYWdlKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkKLXsKLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVt
UXVldWU7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29y
a0l0ZW1RdWV1ZUxvY2spOwotICAgICAgICAgICAgaWYgKG1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtX3dvcmtJdGVtUXVl
dWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgd29y
a0l0ZW1RdWV1ZVtpXSgpOwotICAgICAgICAgICAgZGVyZWYoKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQotewotICAg
IGZkX3NldCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotCi0g
ICAgaWYgKHNlbGVjdChtX21heEZpbGVEZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVzY3JpcHRv
clNldCwgMCwgMCwgZ2V0TmV4dFRpbWVPdXQoKSkgPj0gMCkgewotICAgICAgICBpZiAoRkRfSVNT
RVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkgewot
ICAgICAgICAgICAgY2hhciByZWFkQnVmW3RocmVhZE1lc3NhZ2VTaXplXTsKLSAgICAgICAgICAg
IGlmIChyZWFkKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgcmVhZEJ1ZiwgdGhyZWFkTWVzc2Fn
ZVNpemUpID09IC0xKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQg
ZnJvbSBXb3JrUXVldWVUaHJlYWQgcGlwZSIpOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKHJl
YWRCdWYsIGZpbmlzaFRocmVhZE1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSkKLSAgICAgICAg
ICAgICAgICBtX3RocmVhZExvb3AgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
X3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQo
bV9zb2NrZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAgICAgICAg
IG1fc29ja2V0RXZlbnRIYW5kbGVyKCk7Ci0gICAgfQotfQotCi1zdHJ1Y3QgdGltZXZhbCogV29y
a1F1ZXVlOjpnZXROZXh0VGltZU91dCgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlt
ZXJXb3JrSXRlbXNMb2NrKTsKLSAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVWYWx1ZTsK
LSAgICB0aW1lVmFsdWUudHZfc2VjID0gMDsKLSAgICB0aW1lVmFsdWUudHZfdXNlYyA9IDA7Ci0g
ICAgZG91YmxlIHRpbWVPdXQgPSBtX3RpbWVyV29ya0l0ZW1zWzBdLT5leHBpcmVUaW1lKCkgLSBj
dXJyZW50VGltZSgpOwotICAgIGlmICh0aW1lT3V0ID4gMCkgewotICAgICAgICB0aW1lVmFsdWUu
dHZfc2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4odGltZU91dCk7Ci0gICAgICAgIHRpbWVWYWx1ZS50
dl91c2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4oKHRpbWVPdXQgLSB0aW1lVmFsdWUudHZfc2VjKSAq
IDEwMDAwMDApOwotICAgIH0KLQotICAgIHJldHVybiAmdGltZVZhbHVlOwotfQotCi12b2lkIFdv
cmtRdWV1ZTo6aW5zZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGl0
ZW0pCi17Ci0gICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgcG9z
aXRpb24gPSAwOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2Nr
KTsKLSAgICAvLyBtX3RpbWVyV29ya0l0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0
aW1lLgotICAgIGZvciAoOyBwb3NpdGlvbiA8IG1fdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK3Bv
c2l0aW9uKQotICAgICAgICBpZiAoaXRlbS0+ZXhwaXJlVGltZSgpIDwgbV90aW1lcldvcmtJdGVt
c1twb3NpdGlvbl0tPmV4cGlyZVRpbWUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgbV90
aW1lcldvcmtJdGVtcy5pbnNlcnQocG9zaXRpb24sIGl0ZW0pOwotfQotCi12b2lkIFdvcmtRdWV1
ZTo6cGVyZm9ybVRpbWVyV29yaygpCi17Ci0gICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVt
PiA+IHRpbWVyV29ya0l0ZW1zOwotCi0gICAgewotICAgICAgICAvLyBQcm90ZWN0cyBtX3RpbWVy
V29ya0l0ZW1zLgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xv
Y2spOwotICAgICAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29waWVzIGFsbCB0aGUgdGltZXIgd29yayBpdGVtcyBp
biBtX3RpbWVyV29ya0l0ZW1zIHRvIGxvY2FsIHZlY3Rvci4KLSAgICAgICAgbV90aW1lcldvcmtJ
dGVtcy5zd2FwKHRpbWVyV29ya0l0ZW1zKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgY3VycmVudCA9
IGN1cnJlbnRUaW1lKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVyV29ya0l0
ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghdGltZXJXb3JrSXRlbXNbaV0tPmV4cGly
ZWQoY3VycmVudCkpIHsKLSAgICAgICAgICAgIC8vIElmIGEgdGltZXIgd29yayBpdGVtIGRvZXMg
bm90IGV4cGlyZWQsIGtlZXAgaXQgdG8gdGhlIG1fdGltZXJXb3JrSXRlbXMuCi0gICAgICAgICAg
ICAvLyBtX3RpbWVyV29ya0l0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgot
ICAgICAgICAgICAgaW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtc1tpXS5yZWxlYXNl
KCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBh
IHRpbWVyIHdvcmsgaXRlbSBleHBpcmVkLCBkaXNwYXRjaCB0aGUgZnVuY3Rpb24gb2YgdGhlIHdv
cmsgaXRlbS4KLSAgICAgICAgdGltZXJXb3JrSXRlbXNbaV0tPmRpc3BhdGNoKCk7Ci0gICAgICAg
IGRlcmVmKCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVh
ZChjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dyaXRl
VG9QaXBlRGVzY3JpcHRvckxvY2spOwotICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3Jp
cHRvciwgbWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byB3YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKLX0KLQotdm9pZCogV29y
a1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCi17Ci0gICAgd2hp
bGUgKHdvcmtRdWV1ZS0+bV90aHJlYWRMb29wKSB7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9y
bVdvcmsoKTsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtVGltZXJXb3JrKCk7Ci0gICAgICAg
IHdvcmtRdWV1ZS0+cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwotICAgIH0KLQotICAgIGNs
b3NlKHdvcmtRdWV1ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKLSAgICBjbG9zZSh3b3Jr
UXVldWUtPm1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKLQotICAgIHJldHVybiAwOworICAgIC8v
IG1fZGlzcGF0Y2hRdWV1ZSB3aWxsIGJlIGRlbGV0ZWQgb24gdGhlIGRpc3BhdGNoIHF1ZXVlIHRo
cmVhZC4KKyAgICBEaXNwYXRjaFF1ZXVlKiBkaXNwYXRjaFF1ZXVlID0gbV9kaXNwYXRjaFF1ZXVl
OworICAgIG1fZGlzcGF0Y2hRdWV1ZSA9IDA7CisgICAgZGlzcGF0Y2hRdWV1ZS0+c3RvcFRocmVh
ZCgpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50
IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIHsKLSAg
ICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKQotICAg
ICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVEZXNjcmlwdG9y
KTsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIG1fc29j
a2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCisg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2Ny
aXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAg
ICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBtX2Rp
c3BhdGNoUXVldWUtPnNldFNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvciwgZnVuY3Rp
b24pOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihp
bnQgZmlsZURlc2NyaXB0b3IpCiB7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNv
Y2tldERlc2NyaXB0b3I7CisgICAgVU5VU0VEX1BBUkFNKGZpbGVEZXNjcmlwdG9yKTsKIAotICAg
IGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQotICAgICAgICBtX21h
eEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIEZEX0NMUihm
aWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIGlmICghbV9kaXNwYXRj
aFF1ZXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rpc3BhdGNoUXVldWUtPmNsZWFyU29j
a2V0RXZlbnRIYW5kbGVyKCk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIHsKLSAgICByZWYoKTsKLQotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotICAgICAgICBtX3dv
cmtJdGVtUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKLSAgICB9CisgICAgaWYgKCFtX2Rpc3BhdGNo
UXVldWUpCisgICAgICAgIHJldHVybjsKIAotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBU
aHJlYWRNZXNzYWdlKTsKKyAgICBtX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNoKFdvcmtJdGVtOjpj
cmVhdGUodGhpcywgZnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0
ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQog
ewotICAgIGlmIChkZWxheSA8IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIE93blB0cjxUaW1l
cldvcmtJdGVtPiB0aW1lcldvcmtJdGVtID0gVGltZXJXb3JrSXRlbTo6Y3JlYXRlKGZ1bmN0aW9u
LCBjdXJyZW50VGltZSgpICsgZGVsYXkpOwotICAgIGlmICghdGltZXJXb3JrSXRlbSkKKyAgICBp
ZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVmKCk7Ci0gICAg
aW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtLnJlbGVhc2UoKSk7Ci0gICAgc2VuZE1l
c3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOworICAgIG1fZGlzcGF0Y2hRdWV1ZS0+
ZGlzcGF0Y2goVGltZXJXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsIGZ1bmN0aW9uLCBkZWxheSkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA5YjZiOWU1YmRhNGExZWVjNzY3ZDYwNzRl
OWQ5MzVjMTkyYjI1YWFiLi40ZjcwMGM2MjY2MmJhZmQ0NTU0NjE2Y2Q4YzMwNjIyMTQzOTYyNzBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMSw0ICsxLDUgQEAKIGxpc3QoQVBQRU5E
IFdlYktpdDJfU09VUkNFUworICAgIFBsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcAog
ICAgIFBsYXRmb3JtL2VmbC9Mb2dnaW5nRWZsLmNwcAogICAgIFBsYXRmb3JtL2VmbC9Nb2R1bGVF
ZmwuY3BwCiAgICAgUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAKQEAgLTE4Miw2ICsxODMs
NyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9l
bmNoYW50IgorICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1NoYXJlZC9BUEkvYy9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3du
bG9hZHMvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212951</attachid>
            <date>2013-09-29 22:20:41 -0700</date>
            <delta_ts>2013-10-04 00:18:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20130930142041.patch</filename>
            <type>text/plain</type>
            <size>25713</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjRjOWRkY2I5YThlNDU2
ZmQ3NDU4MmI3NmRhMGJmNGNiZjE1MjFmYS4uYjQ2NzE2YjcwMTY1ZDAxMTBmNmE1OGNlN2ViM2Ji
ODYxZGZkNmE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA5LTI5ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNl
cGFyYXRlIGRpc3BhdGNoIGNvbnRleHQgZnJvbSBXb3JrUXVldWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXb3JrUXVldWUgdG8gcHJl
dmVudCBkYW5nbGluZyB3b3JrcXVldWUgYWNjZXNzLgorCisgICAgICAgIFByZXZpb3VzbHksIHRo
ZSBXb3JrUXVldWUgY2xhc3MgaGFkIGFsbCBjb250ZXh0IGFib3V0IGRpc3BhdGNoLgorICAgICAg
ICBXb3JrUXVldWUgaGFkIGRpc3BhdGNoIGl0ZW0gcXVldWUgYW5kIHNvY2tldCBldmVudCBoYW5k
bGVyLAorICAgICAgICBhbmQgdGhvc2Ugd2VyZSBhY2Nlc3NlZCBvbiB0aGUgd29yayBxdWV1ZSB0
aHJlYWQgdGhyb3VnaCBXb3JrUXVldWUKKyAgICAgICAgaW5zdGFuY2UuCisKKyAgICAgICAgV2l0
aCByZWZlcmVuY2UgY291bnRhYmxlIFdvcmtRdWV1ZSBjb25jZXB0LCB0aGlzIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGNvbXBsaWNhdGVzIGhhbmRsaW5nIHdvcmtxdWV1ZSByZWYtY291bnRpbmcg
YW5kIGNhdXNlcyBkYW5nbGluZworICAgICAgICB3b3JrcXVldWUgYWNjZXNzIHByb2JsZW0uCisK
KyAgICAgICAgVG8gbWFrZSBpdCBlYXN5IHRvIGhhbmRsZSBXb3JrUXVldWUgcmVmZXJlbmNlIGNv
dW50IGFuZCB0byBwcmV2ZW50CisgICAgICAgIGRhbmdsaW5nIGFjY2VzcyBwcm9ibGVtLCBEaXNw
YXRjaFF1ZXVlIGNsYXNzIGlzIGFkZGVkIHRvIGhhbmRsZQorICAgICAgICBkaXNwYXRjaCB0YXNr
cyBhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgRGlzcGF0Y2hRdWV1ZSBpbnN0YW5jZSB3aWxsCisg
ICAgICAgIGZvbGxvdyB0aGUgd29ya3F1ZXVlIHRocmVhZCBub3QgV29ya1F1ZXVlIGluc3RhbmNl
LgorCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAgICAgICogUGxhdGZvcm0v
ZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdvcmtJdGVtOjpjcmVh
dGUpOgorICAgICAgICAoV29ya0l0ZW06OldvcmtJdGVtKToKKyAgICAgICAgKFdvcmtJdGVtOjp+
V29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFRp
bWVyV29ya0l0ZW06OlRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6RGlz
cGF0Y2hRdWV1ZSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1ZSk6Cisg
ICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVl
OjpzdG9wVGhyZWFkKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnNldFNvY2tldEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpjbGVhclNvY2tldEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtV29yayk6CisgICAgICAgIChEaXNwYXRj
aFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnBlcmZv
cm1GaWxlRGVzY3JpcHRvcldvcmspOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6aW5zZXJ0VGlt
ZXJXb3JrSXRlbSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaFF1ZXVlVGhyZWFk
KToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6Ondha2VVcFRocmVhZCk6CisgICAgICAgIChEaXNw
YXRjaFF1ZXVlOjpnZXROZXh0VGltZU91dCk6CisgICAgICAgICogUGxhdGZvcm0vZWZsL0Rpc3Bh
dGNoUXVldWVFZmwuaDogQWRkZWQuCisgICAgICAgIChXb3JrSXRlbTo6ZGlzcGF0Y2gpOgorICAg
ICAgICAoVGltZXJXb3JrSXRlbTo6ZXhwaXJhdGlvblRpbWVTZWNvbmRzKToKKyAgICAgICAgKFRp
bWVyV29ya0l0ZW06Omhhc0V4cGlyZWQpOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9Xb3JrUXVl
dWVFZmwuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVl
OjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVn
aXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6
CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgICogUGxh
dGZvcm1FZmwuY21ha2U6CisKIDIwMTMtMDktMjggIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXggc29tZSBmYWlsdXJlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGNs
YW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAppbmRleCBhNGZhOWRjZjJmYjVhYWI3
YzU4ZWViYWRmMTUwOWU4OWEwNTA3ZGVlLi45MDc4NmQzYTgzY2Q1MWZiMDZkY2YxZjU0NmNjMGZl
ZjEyNzY4MzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApAQCAtNTUsNyArNTUs
NyBAQCBRVF9FTkRfTkFNRVNQQUNFCiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgog
dHlwZWRlZiBnYm9vbGVhbiAoKkdTb3VyY2VGdW5jKSAoZ3BvaW50ZXIgZGF0YSk7CiAjZWxpZiBQ
TEFURk9STShFRkwpCi0jaW5jbHVkZSA8RWNvcmUuaD4KK2NsYXNzIERpc3BhdGNoUXVldWU7CiAj
ZW5kaWYKIAogY2xhc3MgV29ya1F1ZXVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdv
cmtRdWV1ZT4gewpAQCAtMTExLDQ2ICsxMTEsMTAgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPGlu
dCwgVmVjdG9yPFNvY2tldEV2ZW50U291cmNlKj4+IG1fZXZlbnRTb3VyY2VzOwogICAgIHR5cGVk
ZWYgSGFzaE1hcDxpbnQsIFZlY3RvcjxTb2NrZXRFdmVudFNvdXJjZSo+Pjo6aXRlcmF0b3IgU29j
a2V0RXZlbnRTb3VyY2VJdGVyYXRvcjsKICNlbGlmIFBMQVRGT1JNKEVGTCkKLSAgICBjbGFzcyBU
aW1lcldvcmtJdGVtIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRp
bWVyV29ya0l0ZW0+IGNyZWF0ZShGdW5jdGlvbjx2b2lkKCk+LCBkb3VibGUgZXhwaXJlVGltZSk7
Ci0gICAgICAgIHZvaWQgZGlzcGF0Y2goKSB7IG1fZnVuY3Rpb24oKTsgfQotICAgICAgICBkb3Vi
bGUgZXhwaXJlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwaXJlVGltZTsgfQotICAgICAgICBi
b29sIGV4cGlyZWQoZG91YmxlIGN1cnJlbnRUaW1lKSBjb25zdCB7IHJldHVybiBjdXJyZW50VGlt
ZSA+PSBtX2V4cGlyZVRpbWU7IH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgVGltZXJXb3Jr
SXRlbShGdW5jdGlvbjx2b2lkKCk+LCBkb3VibGUgZXhwaXJlVGltZSk7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgICAgIGRvdWJsZSBt
X2V4cGlyZVRpbWU7Ci0gICAgfTsKLQotICAgIGZkX3NldCBtX2ZpbGVEZXNjcmlwdG9yU2V0Owot
ICAgIGludCBtX21heEZpbGVEZXNjcmlwdG9yOwotICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2Ny
aXB0b3I7Ci0gICAgaW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yOwotICAgIE11dGV4IG1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yTG9jazsKLQotICAgIGJvb2wgbV90aHJlYWRMb29wOwotCi0gICAg
VmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4+IG1fd29ya0l0ZW1RdWV1ZTsKLSAgICBNdXRleCBtX3dv
cmtJdGVtUXVldWVMb2NrOwotCi0gICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKLSAgICBGdW5j
dGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOwotCi0gICAgVmVjdG9yPE93blB0cjxU
aW1lcldvcmtJdGVtPj4gbV90aW1lcldvcmtJdGVtczsKLSAgICBNdXRleCBtX3RpbWVyV29ya0l0
ZW1zTG9jazsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7Ci0g
ICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHBl
cmZvcm1Xb3JrKCk7Ci0gICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAg
c3RhdGljIGRvdWJsZSBnZXRDdXJyZW50VGltZSgpOwotICAgIHN0cnVjdCB0aW1ldmFsKiBnZXRO
ZXh0VGltZU91dCgpOwotICAgIHZvaWQgcGVyZm9ybVRpbWVyV29yaygpOwotICAgIHZvaWQgaW5z
ZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+KTsKKyAgICAvLyBXb3Jr
UXVldWUganVzdCBrZWVwIHRoZSBEaXNwYXRjaFF1ZXVlIHBvaW50ZXIgd2l0aG91dCB1c2luZyBP
d25QdHIsIGJlY2F1c2UKKyAgICAvLyB0aGUgb3duZXJzaGlwIG9mIHRoZSBEaXNwYXRjaFF1ZXVl
IGluc3RhbmNlIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgV29ya1F1ZXVlLgorICAgIC8vIFRoZSBp
bnN0YW5jZSBpcyBwYXNzZWQgdG8gaXRzIG93biB0aHJlYWQgZnVuY3Rpb24gYW5kIGRlbGV0ZWQg
aW4gaXQuCisgICAgRGlzcGF0Y2hRdWV1ZSogbV9kaXNwYXRjaFF1ZXVlOwogI2VuZGlmCiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVm
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2VkODlhODVlYjg1MzFiMjc5MWQ2NzU0NjA3OGM1MzI1NjRjMTY4ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVl
RWZsLmNwcApAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGF0Y2hRdWV1ZUVmbC5oIgorCisjaW5jbHVkZSA8
V29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKworc3RhdGljIGNvbnN0IGludCBtaWNyb1NlY29uZHNQZXJTZWNvbmQgPSAx
MDAwMDAwOworc3RhdGljIGNvbnN0IGludCBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciA9IC0xOwor
c3RhdGljIGNvbnN0IGNoYXIgd2FrZVVwVGhyZWFkTWVzc2FnZSA9ICdXJzsKKworUGFzc093blB0
cjxXb3JrSXRlbT4gV29ya0l0ZW06OmNyZWF0ZShXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyPFdvcmtJ
dGVtPihuZXcgV29ya0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlvbikpOworfQorCitXb3JrSXRlbTo6
V29ya0l0ZW0oV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uKQorICAgIDogbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgICwgbV9mdW5jdGlvbihm
dW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93b3JrUXVldWUpOworCisgICAgbV93b3JrUXVldWUt
PnJlZigpOworfQorCitXb3JrSXRlbTo6fldvcmtJdGVtKCkKK3sKKyAgICBtX3dvcmtRdWV1ZS0+
ZGVyZWYoKTsKK30KKworUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBUaW1lcldvcmtJdGVtOjpj
cmVhdGUoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0
aW9uLCBkb3VibGUgZGVsYXlTZWNvbmRzKQoreworICAgIEFTU0VSVChkZWxheVNlY29uZHMgPj0g
MCk7CisKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbWVyV29ya0l0ZW0od29ya1F1ZXVlLCBm
dW5jdGlvbiwgY3VycmVudFRpbWUoKSArIGRlbGF5U2Vjb25kcykpOworfQorCitUaW1lcldvcmtJ
dGVtOjpUaW1lcldvcmtJdGVtKFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5jdGlvbjx2
b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyYXRpb25UaW1lU2Vjb25kcykKKyAgICA6IFdv
cmtJdGVtKHdvcmtRdWV1ZSwgZnVuY3Rpb24pCisgICAgLCBtX2V4cGlyYXRpb25UaW1lU2Vjb25k
cyhleHBpcmF0aW9uVGltZVNlY29uZHMpCit7Cit9CisKK0Rpc3BhdGNoUXVldWU6OkRpc3BhdGNo
UXVldWUoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1faXNUaHJlYWRSdW5uaW5nKHRydWUpCit7
CisgICAgaW50IGZkc1syXTsKKyAgICBpZiAocGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKworICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAg
ICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVE
ZXNjcmlwdG9yU2V0KTsKKyAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9m
aWxlRGVzY3JpcHRvclNldCk7CisgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvcjsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXRE
ZXNjcmlwdG9yOworCisgICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJl
YWRGdW5jdGlvbj4oJkRpc3BhdGNoUXVldWU6OmRpc3BhdGNoUXVldWVUaHJlYWQpLCB0aGlzLCBu
YW1lKTsKK30KKworRGlzcGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVldWUoKQoreworICAgIGNsb3Nl
KG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcik7CisgICAgY2xvc2UobV93cml0ZVRvUGlwZURlc2Ny
aXB0b3IpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoKFBhc3NPd25QdHI8V29y
a0l0ZW0+IGl0ZW0pCit7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3Jr
SXRlbXNMb2NrKTsKKyAgICAgICAgbV93b3JrSXRlbXMuYXBwZW5kKGl0ZW0pOworICAgIH0KKwor
ICAgIHdha2VVcFRocmVhZCgpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoKFBh
c3NPd25QdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBpbnNlcnRUaW1lcldvcmtJdGVt
KGl0ZW0pOworICAgIHdha2VVcFRocmVhZCgpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OnN0
b3BUaHJlYWQoKQoreworICAgIEFTU0VSVChtX3NvY2tldERlc2NyaXB0b3IgPT0gaW52YWxpZFNv
Y2tldERlc2NyaXB0b3IpOworCisgICAgbV9pc1RocmVhZFJ1bm5pbmcgPSBmYWxzZTsKKyAgICB3
YWtlVXBUaHJlYWQoKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpzZXRTb2NrZXRFdmVudEhh
bmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
bikKK3sKKyAgICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yID09IGludmFsaWRTb2NrZXREZXNj
cmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAg
IG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisKKyAgICBpZiAoZmlsZURlc2NyaXB0
b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0g
ZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3Jp
cHRvclNldCk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6Y2xlYXJTb2NrZXRFdmVudEhhbmRs
ZXIoKQoreworICAgIEFTU0VSVChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERl
c2NyaXB0b3IpOworCisgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNj
cmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNj
cmlwdG9yOworCisgICAgRkRfQ0xSKG1fc29ja2V0RGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0
b3JTZXQpOworCisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0
b3I7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVdvcmsoKQoreworICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgIFZlY3RvcjxPd25QdHI8V29ya0l0ZW0+ID4gd29ya0l0ZW1zOwor
CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtc0xv
Y2spOworICAgICAgICAgICAgaWYgKG1fd29ya0l0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG1fd29ya0l0ZW1zLnN3YXAod29ya0l0ZW1zKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1zLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgd29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgpOworICAgIH0K
K30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKCkKK3sKKyAgICBWZWN0
b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+ID4gdGltZXJXb3JrSXRlbXM7CisKKyAgICB7CisgICAg
ICAgIC8vIFByb3RlY3RzIG1fdGltZXJXb3JrSXRlbXMuCisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgICAgIGlmIChtX3RpbWVyV29ya0l0ZW1z
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb3BpZXMgYWxs
IHRoZSB0aW1lciB3b3JrIGl0ZW1zIGluIG1fdGltZXJXb3JrSXRlbXMgdG8gbG9jYWwgdmVjdG9y
LgorICAgICAgICBtX3RpbWVyV29ya0l0ZW1zLnN3YXAodGltZXJXb3JrSXRlbXMpOworICAgIH0K
KworICAgIGRvdWJsZSBjdXJyZW50VGltZVNlY29uZHMgPSBjdXJyZW50VGltZSgpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aW1lcldvcmtJdGVtcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoIXRpbWVyV29ya0l0ZW1zW2ldLT5oYXNFeHBpcmVkKGN1cnJlbnRUaW1lU2Vjb25k
cykpIHsKKyAgICAgICAgICAgIGluc2VydFRpbWVyV29ya0l0ZW0odGltZXJXb3JrSXRlbXNbaV0u
cmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgYSB0aW1lciB3b3JrIGl0ZW0gaGFzIGV4cGlyZWQsIGRpc3BhdGNoIHRoZSBmdW5jdGlv
biBvZiB0aGUgd29yayBpdGVtLgorICAgICAgICB0aW1lcldvcmtJdGVtc1tpXS0+ZGlzcGF0Y2go
KTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9y
V29yaygpCit7CisgICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9IG1fZmlsZURlc2Ny
aXB0b3JTZXQ7CisKKyAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0b3IgKyAxLCAmcmVh
ZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBnZXROZXh0VGltZU91dCgpKSA+PSAwKSB7CisgICAg
ICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2Ny
aXB0b3JTZXQpKSB7CisgICAgICAgICAgICBjaGFyIG1lc3NhZ2U7CisgICAgICAgICAgICBpZiAo
cmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtZXNzYWdlLCAxKSA9PSAtMSkKKyAgICAg
ICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gRGlzcGF0Y2hRdWV1ZSBU
aHJlYWQgcGlwZSIpOworCisgICAgICAgICAgICBBU1NFUlQobWVzc2FnZSA9PSB3YWtlVXBUaHJl
YWRNZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3Ig
IT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlwdG9y
LCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKKyAgICAgICAgICAgIG1fc29ja2V0RXZlbnRIYW5k
bGVyKCk7CisgICAgfQorfQorCit2b2lkIERpc3BhdGNoUXVldWU6Omluc2VydFRpbWVyV29ya0l0
ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQoreworICAgIEFTU0VSVChpdGVtKTsK
KworICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90
aW1lcldvcmtJdGVtc0xvY2spOworICAgIC8vIFRoZSBpdGVtcyBzaG91bGQgYmUgb3JkZXJlZCBi
eSBleHBpcmUgdGltZS4KKyAgICBmb3IgKDsgcG9zaXRpb24gPCBtX3RpbWVyV29ya0l0ZW1zLnNp
emUoKTsgKytwb3NpdGlvbikKKyAgICAgICAgaWYgKGl0ZW0tPmV4cGlyYXRpb25UaW1lU2Vjb25k
cygpIDwgbV90aW1lcldvcmtJdGVtc1twb3NpdGlvbl0tPmV4cGlyYXRpb25UaW1lU2Vjb25kcygp
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBtX3RpbWVyV29ya0l0ZW1zLmluc2VydChwb3Np
dGlvbiwgaXRlbSk7Cit9CisKK3ZvaWQqIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoUXVldWVUaHJl
YWQoRGlzcGF0Y2hRdWV1ZSogZGlzcGF0Y2hRdWV1ZSkKK3sKKyAgICB3aGlsZSAoZGlzcGF0Y2hR
dWV1ZS0+bV9pc1RocmVhZFJ1bm5pbmcpIHsKKyAgICAgICAgZGlzcGF0Y2hRdWV1ZS0+cGVyZm9y
bVdvcmsoKTsKKyAgICAgICAgZGlzcGF0Y2hRdWV1ZS0+cGVyZm9ybVRpbWVyV29yaygpOworICAg
ICAgICBkaXNwYXRjaFF1ZXVlLT5wZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CisgICAgfQor
CisgICAgLy8gVGhlIG93bmVyc2hpcCBvZiB0aGUgRGlzcGF0Y2hRdWV1ZSBpbnN0YW5jZSBiZWxv
bmdzIHRvIHRoaXMgdGhyZWFkCisgICAgLy8gZnVuY3Rpb24sIGJlY2F1c2UgdGhpcyBmdW5jdGlv
biBhY2Nlc3NlcyB0aGUgaW5zdGFuY2UgZHVyaW5nIHRoZSBsb29wLgorICAgIC8vIFRoZSBpbnN0
YW5jZSBwb2ludGVyIGlzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIHRocm91Z2ggdGhlIGFyZ3Vt
ZW50CisgICAgLy8gJ2Rpc3BhdGNoUXVldWUnIGJ5IHRoZSBEaXNwYXRjaFF1ZXVlIGNvbnN0cnVj
dG9yLgorICAgIC8vIFdoZW4gdGhlIHRocmVhZCBsb29wIGlzIGZpbmlzaGVkLCBEaXNwYXRjaFF1
ZXVlIGluc3RhbmNlIHNob3VsZCBiZQorICAgIC8vIGRlbGV0ZWQuCisgICAgZGVsZXRlIGRpc3Bh
dGNoUXVldWU7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6d2FrZVVw
VGhyZWFkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV93cml0ZVRvUGlwZURlc2NyaXB0
b3JMb2NrKTsKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsICZ3YWtlVXBU
aHJlYWRNZXNzYWdlLCBzaXplb2YoY2hhcikpID09IC0xKQorICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byB3YWtlIHVwIERpc3BhdGNoUXVldWUgVGhyZWFkIik7Cit9CisKK3RpbWV2YWwqIERp
c3BhdGNoUXVldWU6OmdldE5leHRUaW1lT3V0KCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOworICAgIGlmIChtX3RpbWVyV29ya0l0ZW1zLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzdGF0aWMgdGltZXZhbCB0aW1lVmFs
dWU7CisgICAgdGltZVZhbHVlLnR2X3NlYyA9IDA7CisgICAgdGltZVZhbHVlLnR2X3VzZWMgPSAw
OworICAgIGRvdWJsZSB0aW1lT3V0ID0gbV90aW1lcldvcmtJdGVtc1swXS0+ZXhwaXJhdGlvblRp
bWVTZWNvbmRzKCkgLSBjdXJyZW50VGltZSgpOworICAgIGlmICh0aW1lT3V0ID4gMCkgeworICAg
ICAgICB0aW1lVmFsdWUudHZfc2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4odGltZU91dCk7CisgICAg
ICAgIHRpbWVWYWx1ZS50dl91c2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4oKHRpbWVPdXQgLSB0aW1l
VmFsdWUudHZfc2VjKSAqIG1pY3JvU2Vjb25kc1BlclNlY29uZCk7CisgICAgfQorCisgICAgcmV0
dXJuICZ0aW1lVmFsdWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9l
ZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3Bh
dGNoUXVldWVFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDA1MjYxMDY1Yjg4ZDg1MjJhMzU4ODNmNGE1MzA3
OGVhYTgyZDYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZs
L0Rpc3BhdGNoUXVldWVFZmwuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERpc3BhdGNoUXVldWVFZmxfaAorI2RlZmluZSBEaXNwYXRjaFF1ZXVlRWZs
X2gKKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitjbGFz
cyBXb3JrUXVldWU7CisKK2NsYXNzIFdvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxXb3JrSXRlbT4gY3JlYXRlKFdvcmtRdWV1ZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mKTsKKyAgICB+V29ya0l0ZW0oKTsKKyAgICB2b2lkIGRpc3BhdGNoKCkgeyBtX2Z1bmN0aW9u
KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdvcmtJdGVtKFdvcmtRdWV1ZSosIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mKTsKKworcHJpdmF0ZToKKyAgICBXb3JrUXVldWUqIG1fd29ya1F1ZXVlOwor
ICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisKK2NsYXNzIFRpbWVyV29ya0l0
ZW0gOiBwdWJsaWMgV29ya0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRp
bWVyV29ya0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jiwg
ZG91YmxlIGRlbGF5KTsKKyAgICBkb3VibGUgZXhwaXJhdGlvblRpbWVTZWNvbmRzKCkgY29uc3Qg
eyByZXR1cm4gbV9leHBpcmF0aW9uVGltZVNlY29uZHM7IH0KKyAgICBib29sIGhhc0V4cGlyZWQo
ZG91YmxlIGN1cnJlbnRUaW1lU2Vjb25kcykgY29uc3QgeyByZXR1cm4gY3VycmVudFRpbWVTZWNv
bmRzID49IG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUaW1l
cldvcmtJdGVtKFdvcmtRdWV1ZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBkb3VibGUgZXhw
aXJhdGlvblRpbWVTZWNvbmRzKTsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9leHBpcmF0aW9u
VGltZVNlY29uZHM7Cit9OworCitjbGFzcyBEaXNwYXRjaFF1ZXVlIHsKK3B1YmxpYzoKKyAgICBE
aXNwYXRjaFF1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5EaXNwYXRjaFF1ZXVlKCk7CisK
KyAgICB2b2lkIGRpc3BhdGNoKFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKKyAgICB2b2lkIGRpc3Bh
dGNoKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4pOworICAgIHZvaWQgc3RvcFRocmVhZCgpOwor
ICAgIHZvaWQgc2V0U29ja2V0RXZlbnRIYW5kbGVyKGludCwgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYpOworICAgIHZvaWQgY2xlYXJTb2NrZXRFdmVudEhhbmRsZXIoKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9pZCBwZXJmb3JtVGltZXJXb3JrKCk7CisgICAg
dm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CisgICAgdm9pZCBpbnNlcnRUaW1lcldv
cmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4pOworICAgIHN0YXRpYyB2b2lkKiBkaXNw
YXRjaFF1ZXVlVGhyZWFkKERpc3BhdGNoUXVldWUqKTsKKyAgICB2b2lkIHdha2VVcFRocmVhZCgp
OworICAgIHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCkgY29uc3Q7CisKKyAgICBmZF9zZXQgbV9m
aWxlRGVzY3JpcHRvclNldDsKKyAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRvcjsKKyAgICBpbnQg
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIGludCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRv
cjsKKyAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxvY2s7CisKKyAgICBib29sIG1f
aXNUaHJlYWRSdW5uaW5nOworCisgICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKKyAgICBGdW5j
dGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOworCisgICAgVmVjdG9yPE93blB0cjxX
b3JrSXRlbT4gPiBtX3dvcmtJdGVtczsKKyAgICBNdXRleCBtX3dvcmtJdGVtc0xvY2s7CisKKyAg
ICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+ID4gbV90aW1lcldvcmtJdGVtczsKKyAgICBt
dXRhYmxlIE11dGV4IG1fdGltZXJXb3JrSXRlbXNMb2NrOworfTsKKworI2VuZGlmIC8vIERpc3Bh
dGNoUXVldWVFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL1dv
cmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZs
LmNwcAppbmRleCBlYmRiOGE2ZjhlOGEwYmYzYjA5OGE4ZGZmMDhhOWNiMzIyNTM0ZWIwLi40YzY5
NTYzN2E4MDcwMWNlMjQ5YWM5ZDk3MWUxOTRiYWZkMzJjOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMjAsMjE5ICsyMCw1MiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogCi0jaW5jbHVkZSA8c3lz
L3RpbWVyZmQuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPERpc3Bh
dGNoUXVldWVFZmwuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAotc3RhdGljIGNv
bnN0IGludCBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciA9IC0xOwotc3RhdGljIGNvbnN0IGludCB0
aHJlYWRNZXNzYWdlU2l6ZSA9IDE7Ci1zdGF0aWMgY29uc3QgY2hhciBmaW5pc2hUaHJlYWRNZXNz
YWdlW10gPSAiRiI7Ci1zdGF0aWMgY29uc3QgY2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9ICJX
IjsKLQotUGFzc093blB0cjxXb3JrUXVldWU6OlRpbWVyV29ya0l0ZW0+IFdvcmtRdWV1ZTo6VGlt
ZXJXb3JrSXRlbTo6Y3JlYXRlKEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24sIGRvdWJsZSBleHBp
cmVUaW1lKQotewotICAgIGlmIChleHBpcmVUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbWVyV29ya0l0ZW0oZnVuY3Rpb24sIGV4
cGlyZVRpbWUpKTsKLX0KLQotV29ya1F1ZXVlOjpUaW1lcldvcmtJdGVtOjpUaW1lcldvcmtJdGVt
KEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24sIGRvdWJsZSBleHBpcmVUaW1lKQotICAgIDogbV9m
dW5jdGlvbihmdW5jdGlvbikKLSAgICAsIG1fZXhwaXJlVGltZShleHBpcmVUaW1lKQotewotfQot
CiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCiB7
Ci0gICAgaW50IGZkc1syXTsKLSAgICBpZiAocGlwZShmZHMpKQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLQotICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKLSAg
ICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKLSAgICBGRF9aRVJPKCZtX2ZpbGVE
ZXNjcmlwdG9yU2V0KTsKLSAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9m
aWxlRGVzY3JpcHRvclNldCk7Ci0gICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvcjsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXRE
ZXNjcmlwdG9yOwotCi0gICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKLSAgICBjcmVhdGVUaHJlYWQo
cmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVl
dWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBuZXcgRGlzcGF0
Y2hRdWV1ZShuYW1lKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
CiB7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkKLXsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7Ci0KLSAgICAgICAg
ewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwot
ICAgICAgICAgICAgaWYgKG1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1
ZXVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0
ZW1RdWV1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXSgpOwot
ICAgICAgICAgICAgZGVyZWYoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQotewotICAgIGZkX3NldCByZWFkRmlsZURl
c2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotCi0gICAgaWYgKHNlbGVjdChtX21h
eEZpbGVEZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwgZ2V0TmV4
dFRpbWVPdXQoKSkgPj0gMCkgewotICAgICAgICBpZiAoRkRfSVNTRVQobV9yZWFkRnJvbVBpcGVE
ZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkgewotICAgICAgICAgICAgY2hhciBy
ZWFkQnVmW3RocmVhZE1lc3NhZ2VTaXplXTsKLSAgICAgICAgICAgIGlmIChyZWFkKG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvciwgcmVhZEJ1ZiwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAg
ICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBXb3JrUXVldWVUaHJl
YWQgcGlwZSIpOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKHJlYWRCdWYsIGZpbmlzaFRocmVh
ZE1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSkKLSAgICAgICAgICAgICAgICBtX3RocmVhZExv
b3AgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3Ig
IT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlwdG9y
LCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAgICAgICAgIG1fc29ja2V0RXZlbnRIYW5k
bGVyKCk7Ci0gICAgfQotfQotCi1zdHJ1Y3QgdGltZXZhbCogV29ya1F1ZXVlOjpnZXROZXh0VGlt
ZU91dCgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsK
LSAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVWYWx1ZTsKLSAgICB0aW1lVmFsdWUudHZf
c2VjID0gMDsKLSAgICB0aW1lVmFsdWUudHZfdXNlYyA9IDA7Ci0gICAgZG91YmxlIHRpbWVPdXQg
PSBtX3RpbWVyV29ya0l0ZW1zWzBdLT5leHBpcmVUaW1lKCkgLSBjdXJyZW50VGltZSgpOwotICAg
IGlmICh0aW1lT3V0ID4gMCkgewotICAgICAgICB0aW1lVmFsdWUudHZfc2VjID0gc3RhdGljX2Nh
c3Q8bG9uZz4odGltZU91dCk7Ci0gICAgICAgIHRpbWVWYWx1ZS50dl91c2VjID0gc3RhdGljX2Nh
c3Q8bG9uZz4oKHRpbWVPdXQgLSB0aW1lVmFsdWUudHZfc2VjKSAqIDEwMDAwMDApOwotICAgIH0K
LQotICAgIHJldHVybiAmdGltZVZhbHVlOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6aW5zZXJ0VGlt
ZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0pCi17Ci0gICAgaWYgKCFp
dGVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgcG9zaXRpb24gPSAwOwotCi0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKLSAgICAvLyBtX3RpbWVy
V29ya0l0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgotICAgIGZvciAoOyBw
b3NpdGlvbiA8IG1fdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK3Bvc2l0aW9uKQotICAgICAgICBp
ZiAoaXRlbS0+ZXhwaXJlVGltZSgpIDwgbV90aW1lcldvcmtJdGVtc1twb3NpdGlvbl0tPmV4cGly
ZVRpbWUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgbV90aW1lcldvcmtJdGVtcy5pbnNl
cnQocG9zaXRpb24sIGl0ZW0pOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVRpbWVyV29y
aygpCi17Ci0gICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVtPiA+IHRpbWVyV29ya0l0ZW1z
OwotCi0gICAgewotICAgICAgICAvLyBQcm90ZWN0cyBtX3RpbWVyV29ya0l0ZW1zLgotICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwotICAgICAgICBpZiAo
bV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgLy8gQ29waWVzIGFsbCB0aGUgdGltZXIgd29yayBpdGVtcyBpbiBtX3RpbWVyV29ya0l0ZW1z
IHRvIGxvY2FsIHZlY3Rvci4KLSAgICAgICAgbV90aW1lcldvcmtJdGVtcy5zd2FwKHRpbWVyV29y
a0l0ZW1zKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgY3VycmVudCA9IGN1cnJlbnRUaW1lKCk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmICghdGltZXJXb3JrSXRlbXNbaV0tPmV4cGlyZWQoY3VycmVudCkpIHsKLSAg
ICAgICAgICAgIC8vIElmIGEgdGltZXIgd29yayBpdGVtIGRvZXMgbm90IGV4cGlyZWQsIGtlZXAg
aXQgdG8gdGhlIG1fdGltZXJXb3JrSXRlbXMuCi0gICAgICAgICAgICAvLyBtX3RpbWVyV29ya0l0
ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgotICAgICAgICAgICAgaW5zZXJ0
VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtc1tpXS5yZWxlYXNlKCkpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBhIHRpbWVyIHdvcmsgaXRlbSBl
eHBpcmVkLCBkaXNwYXRjaCB0aGUgZnVuY3Rpb24gb2YgdGhlIHdvcmsgaXRlbS4KLSAgICAgICAg
dGltZXJXb3JrSXRlbXNbaV0tPmRpc3BhdGNoKCk7Ci0gICAgICAgIGRlcmVmKCk7Ci0gICAgfQot
fQotCi12b2lkIFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKiBtZXNz
YWdlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxv
Y2spOwotICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwgbWVzc2FnZSwgdGhy
ZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3YWtl
IHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKLX0KLQotdm9pZCogV29ya1F1ZXVlOjp3b3JrUXVldWVU
aHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCi17Ci0gICAgd2hpbGUgKHdvcmtRdWV1ZS0+bV90
aHJlYWRMb29wKSB7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKLSAgICAgICAg
d29ya1F1ZXVlLT5wZXJmb3JtVGltZXJXb3JrKCk7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9y
bUZpbGVEZXNjcmlwdG9yV29yaygpOwotICAgIH0KLQotICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9y
ZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKLSAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3JpdGVUb1Bp
cGVEZXNjcmlwdG9yKTsKLQotICAgIHJldHVybiAwOworICAgIC8vIG1fZGlzcGF0Y2hRdWV1ZSB3
aWxsIGJlIGRlbGV0ZWQgb24gdGhlIGRpc3BhdGNoIHF1ZXVlIHRocmVhZC4KKyAgICBEaXNwYXRj
aFF1ZXVlKiBkaXNwYXRjaFF1ZXVlID0gbV9kaXNwYXRjaFF1ZXVlOworICAgIG1fZGlzcGF0Y2hR
dWV1ZSA9IDA7CisgICAgZGlzcGF0Y2hRdWV1ZS0+c3RvcFRocmVhZCgpOwogfQogCiB2b2lkIFdv
cmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIHsKLSAgICBpZiAobV9zb2NrZXREZXNj
cmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKQotICAgICAgICBMT0dfRVJST1IoIiVk
IGlzIGFscmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVEZXNjcmlwdG9yKTsKLQotICAgIG1fc29ja2V0
RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0g
ZnVuY3Rpb247CisgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCisgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1f
bWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBGRF9TRVQoZmlsZURlc2Ny
aXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBtX2Rpc3BhdGNoUXVldWUtPnNldFNv
Y2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvciwgZnVuY3Rpb24pOwogfQogCiB2b2lkIFdv
cmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3Ip
CiB7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Cisg
ICAgVU5VU0VEX1BBUkFNKGZpbGVEZXNjcmlwdG9yKTsKIAotICAgIGlmIChmaWxlRGVzY3JpcHRv
ciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQotICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0g
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIEZEX0NMUihmaWxlRGVzY3JpcHRvciwgJm1f
ZmlsZURlc2NyaXB0b3JTZXQpOworICAgIGlmICghbV9kaXNwYXRjaFF1ZXVlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2Rpc3BhdGNoUXVldWUtPmNsZWFyU29ja2V0RXZlbnRIYW5kbGVyKCk7
CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbikKIHsKLSAgICByZWYoKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotICAgICAgICBtX3dvcmtJdGVtUXVldWUuYXBwZW5k
KGZ1bmN0aW9uKTsKLSAgICB9CisgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCisgICAgICAgIHJl
dHVybjsKIAotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKKyAg
ICBtX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNoKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgZnVuY3Rp
b24pKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQogewotICAgIGlmIChkZWxheSA8
IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIE93blB0cjxUaW1lcldvcmtJdGVtPiB0aW1lcldv
cmtJdGVtID0gVGltZXJXb3JrSXRlbTo6Y3JlYXRlKGZ1bmN0aW9uLCBjdXJyZW50VGltZSgpICsg
ZGVsYXkpOwotICAgIGlmICghdGltZXJXb3JrSXRlbSkKKyAgICBpZiAoIW1fZGlzcGF0Y2hRdWV1
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVmKCk7Ci0gICAgaW5zZXJ0VGltZXJXb3JrSXRl
bSh0aW1lcldvcmtJdGVtLnJlbGVhc2UoKSk7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1
cFRocmVhZE1lc3NhZ2UpOworICAgIG1fZGlzcGF0Y2hRdWV1ZS0+ZGlzcGF0Y2goVGltZXJXb3Jr
SXRlbTo6Y3JlYXRlKHRoaXMsIGZ1bmN0aW9uLCBkZWxheSkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCA4ODA1MGMxOTgzYTY1YmY1N2I0OWRjOWJjOTc3Y2ZmYzVkZjc1MTliLi5k
MmZhMzQ2M2ZjNjY5ZTg2YmM0ZWE3MjJhNDBhMTI5NmIyMjYyYjFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtMiw2ICsyLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKIAorICAgIFBsYXRmb3JtL2VmbC9EaXNw
YXRjaFF1ZXVlRWZsLmNwcAogICAgIFBsYXRmb3JtL2VmbC9Mb2dnaW5nRWZsLmNwcAogICAgIFBs
YXRmb3JtL2VmbC9Nb2R1bGVFZmwuY3BwCiAgICAgUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5j
cHAKQEAgLTE5Myw2ICsxOTQsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vdGV4dC9lbmNoYW50IgorICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9l
ZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkvYy9lZmwiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVk
L2VmbCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213339</attachid>
            <date>2013-10-04 00:18:20 -0700</date>
            <delta_ts>2013-10-07 20:46:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20131004161821.patch</filename>
            <type>text/plain</type>
            <size>26153</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2ODc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2JiNjE5ZmI2YmU2YmE0
MDFkOGNkN2MxZWFkNjBiYTQ0ZDc3MTgzMy4uNjc2OWQ2NTkwMTU5MTQyMDJmYTFlZjgwZjRjNGZk
NTVlNzNiMDQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEzLTEwLTAzICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNl
cGFyYXRlIGRpc3BhdGNoIGNvbnRleHQgZnJvbSBXb3JrUXVldWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXb3JrUXVldWUgdG8gcHJl
dmVudCBkYW5nbGluZyB3b3JrcXVldWUgYWNjZXNzLgorCisgICAgICAgIFByZXZpb3VzbHksIHRo
ZSBXb3JrUXVldWUgY2xhc3MgaGFkIGFsbCBjb250ZXh0IGFib3V0IGRpc3BhdGNoLgorICAgICAg
ICBXb3JrUXVldWUgaGFkIGRpc3BhdGNoIGl0ZW0gcXVldWUgYW5kIHNvY2tldCBldmVudCBoYW5k
bGVyLAorICAgICAgICBhbmQgdGhvc2Ugd2VyZSBhY2Nlc3NlZCBvbiB0aGUgd29yayBxdWV1ZSB0
aHJlYWQgdGhyb3VnaCBXb3JrUXVldWUKKyAgICAgICAgaW5zdGFuY2UuCisKKyAgICAgICAgV2l0
aCByZWZlcmVuY2UgY291bnRhYmxlIFdvcmtRdWV1ZSBjb25jZXB0LCB0aGlzIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGNvbXBsaWNhdGVzIGhhbmRsaW5nIHdvcmtxdWV1ZSByZWYtY291bnRpbmcg
YW5kIGNhdXNlcyBkYW5nbGluZworICAgICAgICB3b3JrcXVldWUgYWNjZXNzIHByb2JsZW0uCisK
KyAgICAgICAgVG8gbWFrZSBpdCBlYXN5IHRvIGhhbmRsZSBXb3JrUXVldWUgcmVmZXJlbmNlIGNv
dW50IGFuZCB0byBwcmV2ZW50CisgICAgICAgIGRhbmdsaW5nIGFjY2VzcyBwcm9ibGVtLCBEaXNw
YXRjaFF1ZXVlIGNsYXNzIGlzIGFkZGVkIHRvIGhhbmRsZQorICAgICAgICBkaXNwYXRjaCB0YXNr
cywgYW5kIHRoZSBXb3JrUXVldWUgaW5zdGFuY2UgYW5kIERpc3BhdGNoUXVldWUgdGhyZWFkCisg
ICAgICAgIHdpbGwgaGF2ZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBEaXNwYXRjaFF1ZXVl
IGluc3RhbmNlIHRvIHByZXZlbnQKKyAgICAgICAgZGFuZ2xpbmcgYWNjZXNzLgorCisgICAgICAg
ICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAgICAgICogUGxhdGZvcm0vZWZsL0Rpc3BhdGNo
UXVldWVFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKERpc3BhdGNoUXVldWU6OlRocmVhZENvbnRl
eHQ6OnN0YXJ0KToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OlRocmVhZENvbnRleHQ6OlRocmVh
ZENvbnRleHQpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6VGhyZWFkQ29udGV4dDo6ZnVuY3Rp
b24pOgorICAgICAgICAoV29ya0l0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXb3JrSXRlbTo6V29y
a0l0ZW0pOgorICAgICAgICAoV29ya0l0ZW06On5Xb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldv
cmtJdGVtOjpjcmVhdGUpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6VGltZXJXb3JrSXRlbSk6
CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpjcmVhdGUpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1
ZTo6RGlzcGF0Y2hRdWV1ZSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1
ZSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChEaXNwYXRj
aFF1ZXVlOjpzdG9wVGhyZWFkKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnNldFNvY2tldEV2
ZW50SGFuZGxlcik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpjbGVhclNvY2tldEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtV29yayk6CisgICAgICAgIChE
aXNwYXRjaFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6
OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmspOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6aW5z
ZXJ0VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaFF1ZXVl
VGhyZWFkKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6Ondha2VVcFRocmVhZCk6CisgICAgICAg
IChEaXNwYXRjaFF1ZXVlOjpnZXROZXh0VGltZU91dCk6CisgICAgICAgICogUGxhdGZvcm0vZWZs
L0Rpc3BhdGNoUXVldWVFZmwuaDogQWRkZWQuCisgICAgICAgIChXb3JrSXRlbTo6ZGlzcGF0Y2gp
OgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6ZXhwaXJhdGlvblRpbWVTZWNvbmRzKToKKyAgICAg
ICAgKFRpbWVyV29ya0l0ZW06Omhhc0V4cGlyZWQpOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9X
b3JrUXVldWVFZmwuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUp
OgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29y
a1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6
OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNw
YXRjaCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAg
ICogUGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTMtMTAtMDMgIE1hcmsgUm93ZSAgPG1yb3dlQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTU1Nzg3KTogV2ViS2l0VGVzdFJ1bm5l
ciByZWJ1aWxkcyBmcm9tIHNjcmF0Y2ggd2hlbiBkb2luZyBhbiBpbmNyZW1lbnRhbCBidWlsZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAppbmRleCA5YTI4ZDkwYjYxMTRiNDZhNDE1MmE3
ZTc0MTQ0YTk3N2Y5ODkzYmQ5Li4zODYxNDJiZDFlOGNlMjBjMGQ5MDY1YzNmMzg1NWNiMTc2Njlh
MTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApAQCAtNDksNyArNDksNyBAQAog
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIHR5cGVkZWYgZ2Jvb2xlYW4gKCpHU291
cmNlRnVuYykgKGdwb2ludGVyIGRhdGEpOwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUg
PEVjb3JlLmg+CisjaW5jbHVkZSA8RGlzcGF0Y2hRdWV1ZUVmbC5oPgogI2VuZGlmCiAKIGNsYXNz
IFdvcmtRdWV1ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXb3JrUXVldWU+IHsKQEAg
LTk4LDQ2ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxTb2NrZXRF
dmVudFNvdXJjZSo+PiBtX2V2ZW50U291cmNlczsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBW
ZWN0b3I8U29ja2V0RXZlbnRTb3VyY2UqPj46Oml0ZXJhdG9yIFNvY2tldEV2ZW50U291cmNlSXRl
cmF0b3I7CiAjZWxpZiBQTEFURk9STShFRkwpCi0gICAgY2xhc3MgVGltZXJXb3JrSXRlbSB7Ci0g
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBjcmVh
dGUoRnVuY3Rpb248dm9pZCgpPiwgZG91YmxlIGV4cGlyZVRpbWUpOwotICAgICAgICB2b2lkIGRp
c3BhdGNoKCkgeyBtX2Z1bmN0aW9uKCk7IH0KLSAgICAgICAgZG91YmxlIGV4cGlyZVRpbWUoKSBj
b25zdCB7IHJldHVybiBtX2V4cGlyZVRpbWU7IH0KLSAgICAgICAgYm9vbCBleHBpcmVkKGRvdWJs
ZSBjdXJyZW50VGltZSkgY29uc3QgeyByZXR1cm4gY3VycmVudFRpbWUgPj0gbV9leHBpcmVUaW1l
OyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFRpbWVyV29ya0l0ZW0oRnVuY3Rpb248dm9p
ZCgpPiwgZG91YmxlIGV4cGlyZVRpbWUpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rp
b248dm9pZCgpPiBtX2Z1bmN0aW9uOwotICAgICAgICBkb3VibGUgbV9leHBpcmVUaW1lOwotICAg
IH07Ci0KLSAgICBmZF9zZXQgbV9maWxlRGVzY3JpcHRvclNldDsKLSAgICBpbnQgbV9tYXhGaWxl
RGVzY3JpcHRvcjsKLSAgICBpbnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIGludCBt
X3dyaXRlVG9QaXBlRGVzY3JpcHRvcjsKLSAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRv
ckxvY2s7Ci0KLSAgICBib29sIG1fdGhyZWFkTG9vcDsKLQotICAgIFZlY3RvcjxGdW5jdGlvbjx2
b2lkKCk+PiBtX3dvcmtJdGVtUXVldWU7Ci0gICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsK
LQotICAgIGludCBtX3NvY2tldERlc2NyaXB0b3I7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX3Nv
Y2tldEV2ZW50SGFuZGxlcjsKLQotICAgIFZlY3RvcjxPd25QdHI8VGltZXJXb3JrSXRlbT4+IG1f
dGltZXJXb3JrSXRlbXM7Ci0gICAgTXV0ZXggbV90aW1lcldvcmtJdGVtc0xvY2s7Ci0KLSAgICB2
b2lkIHNlbmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciopOwotICAgIHN0YXRpYyB2b2lkKiB3
b3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7Ci0gICAgdm9pZCBwZXJmb3JtV29yaygpOwotICAg
IHZvaWQgcGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwotICAgIHN0YXRpYyBkb3VibGUgZ2V0
Q3VycmVudFRpbWUoKTsKLSAgICBzdHJ1Y3QgdGltZXZhbCogZ2V0TmV4dFRpbWVPdXQoKTsKLSAg
ICB2b2lkIHBlcmZvcm1UaW1lcldvcmsoKTsKLSAgICB2b2lkIGluc2VydFRpbWVyV29ya0l0ZW0o
UGFzc093blB0cjxUaW1lcldvcmtJdGVtPik7CisgICAgUmVmUHRyPERpc3BhdGNoUXVldWU+IG1f
ZGlzcGF0Y2hRdWV1ZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NDU1ZDUzZTBmMWU1ZTM3
ZWVhYjdhMjI2MzViYzJlNWFhOTEzZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAKQEAgLTAsMCArMSwyODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3Bh
dGNoUXVldWVFZmwuaCIKKworI2luY2x1ZGUgPFdvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy90
aW1lcmZkLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK3N0YXRpYyBjb25zdCBp
bnQgbWljcm9TZWNvbmRzUGVyU2Vjb25kID0gMTAwMDAwMDsKK3N0YXRpYyBjb25zdCBpbnQgaW52
YWxpZFNvY2tldERlc2NyaXB0b3IgPSAtMTsKK3N0YXRpYyBjb25zdCBjaGFyIHdha2VVcFRocmVh
ZE1lc3NhZ2UgPSAnVyc7CisKK2NsYXNzIERpc3BhdGNoUXVldWU6OlRocmVhZENvbnRleHQgewor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIHN0YXJ0KGNvbnN0IGNoYXIqIG5hbWUsIFBhc3NSZWZQ
dHI8RGlzcGF0Y2hRdWV1ZT4gZGlzcGF0Y2hRdWV1ZSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBE
aXNwYXRjaFF1ZXVlVGhyZWFkQ29udGV4dCBpbnN0YW5jZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
dGhyZWFkIGZ1bmN0aW9uIGFuZCBkZWxldGVkIGluIGl0LgorICAgICAgICBjcmVhdGVUaHJlYWQo
cmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmVGhyZWFkQ29udGV4dDo6ZnVu
Y3Rpb24pLCBuZXcgVGhyZWFkQ29udGV4dChkaXNwYXRjaFF1ZXVlKSwgbmFtZSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIFRocmVhZENvbnRleHQoUGFzc1JlZlB0cjxEaXNwYXRjaFF1ZXVlPiBk
aXNwYXRjaFF1ZXVlKQorICAgIDogbV9kaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUpCisgICAg
eworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBmdW5jdGlvbihUaHJlYWRDb250ZXh0KiB0aHJl
YWRDb250ZXh0KQorICAgIHsKKyAgICAgICAgdGhyZWFkQ29udGV4dC0+bV9kaXNwYXRjaFF1ZXVl
LT5kaXNwYXRjaFF1ZXVlVGhyZWFkKCk7CisgICAgICAgIGRlbGV0ZSB0aHJlYWRDb250ZXh0Owor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gbV9k
aXNwYXRjaFF1ZXVlOworfTsKKworUGFzc093blB0cjxXb3JrSXRlbT4gV29ya0l0ZW06OmNyZWF0
ZShXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24p
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyPFdvcmtJdGVtPihuZXcgV29ya0l0ZW0od29ya1F1ZXVl
LCBmdW5jdGlvbikpOworfQorCitXb3JrSXRlbTo6V29ya0l0ZW0oV29ya1F1ZXVlKiB3b3JrUXVl
dWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgIDogbV93b3JrUXVldWUo
d29ya1F1ZXVlKQorICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93
b3JrUXVldWUpOworCisgICAgbV93b3JrUXVldWUtPnJlZigpOworfQorCitXb3JrSXRlbTo6fldv
cmtJdGVtKCkKK3sKKyAgICBtX3dvcmtRdWV1ZS0+ZGVyZWYoKTsKK30KKworUGFzc093blB0cjxU
aW1lcldvcmtJdGVtPiBUaW1lcldvcmtJdGVtOjpjcmVhdGUoV29ya1F1ZXVlKiB3b3JrUXVldWUs
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXlTZWNvbmRzKQor
eworICAgIEFTU0VSVChkZWxheVNlY29uZHMgPj0gMCk7CisKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFRpbWVyV29ya0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlvbiwgY3VycmVudFRpbWUoKSArIGRl
bGF5U2Vjb25kcykpOworfQorCitUaW1lcldvcmtJdGVtOjpUaW1lcldvcmtJdGVtKFdvcmtRdWV1
ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGV4
cGlyYXRpb25UaW1lU2Vjb25kcykKKyAgICA6IFdvcmtJdGVtKHdvcmtRdWV1ZSwgZnVuY3Rpb24p
CisgICAgLCBtX2V4cGlyYXRpb25UaW1lU2Vjb25kcyhleHBpcmF0aW9uVGltZVNlY29uZHMpCit7
Cit9CisKK1Bhc3NSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gRGlzcGF0Y2hRdWV1ZTo6Y3JlYXRlKGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgUmVmUHRyPERpc3BhdGNoUXVldWU+IGRpc3BhdGNoUXVl
dWUgPSBhZG9wdFJlZjxEaXNwYXRjaFF1ZXVlPihuZXcgRGlzcGF0Y2hRdWV1ZSgpKTsKKworICAg
IFRocmVhZENvbnRleHQ6OnN0YXJ0KG5hbWUsIGRpc3BhdGNoUXVldWUpOworCisgICAgcmV0dXJu
IGRpc3BhdGNoUXVldWUucmVsZWFzZSgpOworfQorCitEaXNwYXRjaFF1ZXVlOjpEaXNwYXRjaFF1
ZXVlKCkKKyAgICA6IG1faXNUaHJlYWRSdW5uaW5nKHRydWUpCit7CisgICAgaW50IGZkc1syXTsK
KyAgICBpZiAocGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9QaXBlRGVz
Y3JpcHRvciA9IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAg
ICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7
CisgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKwor
ICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOworfQorCitE
aXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1ZSgpCit7CisgICAgY2xvc2UobV9yZWFkRnJvbVBp
cGVEZXNjcmlwdG9yKTsKKyAgICBjbG9zZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7Cit9CisK
K3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2goUGFzc093blB0cjxXb3JrSXRlbT4gaXRlbSkK
K3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtc0xvY2spOwor
ICAgICAgICBtX3dvcmtJdGVtcy5hcHBlbmQoaXRlbSk7CisgICAgfQorCisgICAgd2FrZVVwVGhy
ZWFkKCk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2goUGFzc093blB0cjxUaW1l
cldvcmtJdGVtPiBpdGVtKQoreworICAgIGluc2VydFRpbWVyV29ya0l0ZW0oaXRlbSk7CisgICAg
d2FrZVVwVGhyZWFkKCk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6c3RvcFRocmVhZCgpCit7
CisgICAgQVNTRVJUKG1fc29ja2V0RGVzY3JpcHRvciA9PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRv
cik7CisKKyAgICBtX2lzVGhyZWFkUnVubmluZyA9IGZhbHNlOworICAgIHdha2VVcFRocmVhZCgp
OworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OnNldFNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmls
ZURlc2NyaXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEFT
U0VSVChtX3NvY2tldERlc2NyaXB0b3IgPT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOworCisg
ICAgbV9zb2NrZXREZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgbV9zb2NrZXRFdmVu
dEhhbmRsZXIgPSBmdW5jdGlvbjsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4Rmls
ZURlc2NyaXB0b3IpCisgICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRv
cjsKKyAgICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKK30K
Kwordm9pZCBEaXNwYXRjaFF1ZXVlOjpjbGVhclNvY2tldEV2ZW50SGFuZGxlcigpCit7CisgICAg
QVNTRVJUKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7CisK
KyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yID09IG1fbWF4RmlsZURlc2NyaXB0b3IpCisgICAg
ICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisKKyAg
ICBGRF9DTFIobV9zb2NrZXREZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisKKyAg
ICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKK30KKwordm9p
ZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtV29yaygpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgVmVjdG9yPE93blB0cjxXb3JrSXRlbT4gPiB3b3JrSXRlbXM7CisKKyAgICAgICAgewor
ICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1zTG9jayk7CisgICAgICAg
ICAgICBpZiAobV93b3JrSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgbV93b3JrSXRlbXMuc3dhcCh3b3JrSXRlbXMpOworICAgICAgICB9CisK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JrSXRlbXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICB3b3JrSXRlbXNbaV0tPmRpc3BhdGNoKCk7CisgICAgfQorfQorCit2b2lkIERp
c3BhdGNoUXVldWU6OnBlcmZvcm1UaW1lcldvcmsoKQoreworICAgIFZlY3RvcjxPd25QdHI8VGlt
ZXJXb3JrSXRlbT4gPiB0aW1lcldvcmtJdGVtczsKKworICAgIHsKKyAgICAgICAgLy8gUHJvdGVj
dHMgbV90aW1lcldvcmtJdGVtcy4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJX
b3JrSXRlbXNMb2NrKTsKKyAgICAgICAgaWYgKG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENvcGllcyBhbGwgdGhlIHRpbWVyIHdv
cmsgaXRlbXMgaW4gbV90aW1lcldvcmtJdGVtcyB0byBsb2NhbCB2ZWN0b3IuCisgICAgICAgIG1f
dGltZXJXb3JrSXRlbXMuc3dhcCh0aW1lcldvcmtJdGVtcyk7CisgICAgfQorCisgICAgZG91Ymxl
IGN1cnJlbnRUaW1lU2Vjb25kcyA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghdGlt
ZXJXb3JrSXRlbXNbaV0tPmhhc0V4cGlyZWQoY3VycmVudFRpbWVTZWNvbmRzKSkgeworICAgICAg
ICAgICAgaW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtc1tpXS5yZWxlYXNlKCkpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBhIHRpbWVy
IHdvcmsgaXRlbSBoYXMgZXhwaXJlZCwgZGlzcGF0Y2ggdGhlIGZ1bmN0aW9uIG9mIHRoZSB3b3Jr
IGl0ZW0uCisgICAgICAgIHRpbWVyV29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgpOworICAgIH0KK30K
Kwordm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKK3sKKyAg
ICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKKwor
ICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2NyaXB0
b3JTZXQsIDAsIDAsIGdldE5leHRUaW1lT3V0KCkpID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lT
U0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsK
KyAgICAgICAgICAgIGNoYXIgbWVzc2FnZTsKKyAgICAgICAgICAgIGlmIChyZWFkKG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvciwgJm1lc3NhZ2UsIDEpID09IC0xKQorICAgICAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBEaXNwYXRjaFF1ZXVlIFRocmVhZCBwaXBlIik7
CisKKyAgICAgICAgICAgIEFTU0VSVChtZXNzYWdlID09IHdha2VVcFRocmVhZE1lc3NhZ2UpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29j
a2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFkRmlsZURl
c2NyaXB0b3JTZXQpKQorICAgICAgICAgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsKKyAgICB9
Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6aW5zZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRy
PFRpbWVyV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgQVNTRVJUKGl0ZW0pOworCisgICAgc2l6ZV90
IHBvc2l0aW9uID0gMDsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1z
TG9jayk7CisgICAgLy8gVGhlIGl0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1l
LgorICAgIGZvciAoOyBwb3NpdGlvbiA8IG1fdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK3Bvc2l0
aW9uKQorICAgICAgICBpZiAoaXRlbS0+ZXhwaXJhdGlvblRpbWVTZWNvbmRzKCkgPCBtX3RpbWVy
V29ya0l0ZW1zW3Bvc2l0aW9uXS0+ZXhwaXJhdGlvblRpbWVTZWNvbmRzKCkpCisgICAgICAgICAg
ICBicmVhazsKKworICAgIG1fdGltZXJXb3JrSXRlbXMuaW5zZXJ0KHBvc2l0aW9uLCBpdGVtKTsK
K30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaFF1ZXVlVGhyZWFkKCkKK3sKKyAgICB3
aGlsZSAobV9pc1RocmVhZFJ1bm5pbmcpIHsKKyAgICAgICAgcGVyZm9ybVdvcmsoKTsKKyAgICAg
ICAgcGVyZm9ybVRpbWVyV29yaygpOworICAgICAgICBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3Jr
KCk7CisgICAgfQorfQorCit2b2lkIERpc3BhdGNoUXVldWU6Ondha2VVcFRocmVhZCgpCit7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9jayk7CisgICAg
aWYgKHdyaXRlKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yLCAmd2FrZVVwVGhyZWFkTWVzc2FnZSwg
c2l6ZW9mKGNoYXIpKSA9PSAtMSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1
cCBEaXNwYXRjaFF1ZXVlIFRocmVhZCIpOworfQorCit0aW1ldmFsKiBEaXNwYXRjaFF1ZXVlOjpn
ZXROZXh0VGltZU91dCgpIGNvbnN0Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJX
b3JrSXRlbXNMb2NrKTsKKyAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgc3RhdGljIHRpbWV2YWwgdGltZVZhbHVlOworICAgIHRpbWVW
YWx1ZS50dl9zZWMgPSAwOworICAgIHRpbWVWYWx1ZS50dl91c2VjID0gMDsKKyAgICBkb3VibGUg
dGltZU91dCA9IG1fdGltZXJXb3JrSXRlbXNbMF0tPmV4cGlyYXRpb25UaW1lU2Vjb25kcygpIC0g
Y3VycmVudFRpbWUoKTsKKyAgICBpZiAodGltZU91dCA+IDApIHsKKyAgICAgICAgdGltZVZhbHVl
LnR2X3NlYyA9IHN0YXRpY19jYXN0PGxvbmc+KHRpbWVPdXQpOworICAgICAgICB0aW1lVmFsdWUu
dHZfdXNlYyA9IHN0YXRpY19jYXN0PGxvbmc+KCh0aW1lT3V0IC0gdGltZVZhbHVlLnR2X3NlYykg
KiBtaWNyb1NlY29uZHNQZXJTZWNvbmQpOworICAgIH0KKworICAgIHJldHVybiAmdGltZVZhbHVl
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVl
dWVFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDFjODg5OWIxZWU1N2VkMjQ4NTRlZjg4ZGY4YTI3ZWI1ZTFhZWNkMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVl
RWZsLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3Vu
ZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBE
aXNwYXRjaFF1ZXVlRWZsX2gKKyNkZWZpbmUgRGlzcGF0Y2hRdWV1ZUVmbF9oCisKKyNpbmNsdWRl
IDx0aW1lLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCitjbGFzcyBXb3JrUXVldWU7CisKK2NsYXNzIFdvcmtJdGVtIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxXb3JrSXRlbT4gY3JlYXRlKFdvcmtRdWV1ZSosIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB+V29ya0l0ZW0oKTsKKyAgICB2b2lkIGRpc3BhdGNo
KCkgeyBtX2Z1bmN0aW9uKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdvcmtJdGVtKFdvcmtRdWV1
ZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworcHJpdmF0ZToKKyAgICBXb3JrUXVldWUq
IG1fd29ya1F1ZXVlOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisKK2Ns
YXNzIFRpbWVyV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW0geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUqLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiwgZG91YmxlIGRlbGF5KTsKKyAgICBkb3VibGUgZXhwaXJhdGlvblRpbWVT
ZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV9leHBpcmF0aW9uVGltZVNlY29uZHM7IH0KKyAgICBi
b29sIGhhc0V4cGlyZWQoZG91YmxlIGN1cnJlbnRUaW1lU2Vjb25kcykgY29uc3QgeyByZXR1cm4g
Y3VycmVudFRpbWVTZWNvbmRzID49IG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBUaW1lcldvcmtJdGVtKFdvcmtRdWV1ZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mLCBkb3VibGUgZXhwaXJhdGlvblRpbWVTZWNvbmRzKTsKKworcHJpdmF0ZToKKyAgICBkb3Vi
bGUgbV9leHBpcmF0aW9uVGltZVNlY29uZHM7Cit9OworCitjbGFzcyBEaXNwYXRjaFF1ZXVlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERpc3BhdGNoUXVldWU+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEaXNwYXRjaFF1ZXVlPiBjcmVhdGUoY29uc3QgY2hhciogbmFt
ZSk7CisgICAgfkRpc3BhdGNoUXVldWUoKTsKKworICAgIHZvaWQgZGlzcGF0Y2goUGFzc093blB0
cjxXb3JrSXRlbT4pOworICAgIHZvaWQgZGlzcGF0Y2goUGFzc093blB0cjxUaW1lcldvcmtJdGVt
Pik7CisgICAgdm9pZCBzdG9wVGhyZWFkKCk7CisgICAgdm9pZCBzZXRTb2NrZXRFdmVudEhhbmRs
ZXIoaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCBjbGVhclNvY2tldEV2
ZW50SGFuZGxlcigpOworCitwcml2YXRlOgorICAgIGNsYXNzIFRocmVhZENvbnRleHQ7CisKKyAg
ICBEaXNwYXRjaFF1ZXVlKCk7CisKKyAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9pZCBw
ZXJmb3JtVGltZXJXb3JrKCk7CisgICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7
CisgICAgdm9pZCBpbnNlcnRUaW1lcldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4p
OworICAgIHZvaWQgZGlzcGF0Y2hRdWV1ZVRocmVhZCgpOworICAgIHZvaWQgd2FrZVVwVGhyZWFk
KCk7CisgICAgdGltZXZhbCogZ2V0TmV4dFRpbWVPdXQoKSBjb25zdDsKKworICAgIGZkX3NldCBt
X2ZpbGVEZXNjcmlwdG9yU2V0OworICAgIGludCBtX21heEZpbGVEZXNjcmlwdG9yOworICAgIGlu
dCBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisgICAgaW50IG1fd3JpdGVUb1BpcGVEZXNjcmlw
dG9yOworICAgIE11dGV4IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9jazsKKworICAgIGJvb2wg
bV9pc1RocmVhZFJ1bm5pbmc7CisKKyAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOworICAgIEZ1
bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7CisKKyAgICBWZWN0b3I8T3duUHRy
PFdvcmtJdGVtPiA+IG1fd29ya0l0ZW1zOworICAgIE11dGV4IG1fd29ya0l0ZW1zTG9jazsKKwor
ICAgIFZlY3RvcjxPd25QdHI8VGltZXJXb3JrSXRlbT4gPiBtX3RpbWVyV29ya0l0ZW1zOworICAg
IG11dGFibGUgTXV0ZXggbV90aW1lcldvcmtJdGVtc0xvY2s7Cit9OworCisjZW5kaWYgLy8gRGlz
cGF0Y2hRdWV1ZUVmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwv
V29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVF
ZmwuY3BwCmluZGV4IGViZGI4YTZmOGU4YTBiZjNiMDk4YThkZmYwOGE5Y2IzMjI1MzRlYjAuLjk4
YzQ0Njk3ZjVjMjdiNzRiNzBlMmQ3ZDJjYzhiYWJkNDI2OGM5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCkBAIC0yMCwyMTkgKzIwLDUwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAKLSNpbmNsdWRlIDxz
eXMvdGltZXJmZC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8RGlz
cGF0Y2hRdWV1ZUVmbC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCi1zdGF0aWMg
Y29uc3QgaW50IGludmFsaWRTb2NrZXREZXNjcmlwdG9yID0gLTE7Ci1zdGF0aWMgY29uc3QgaW50
IHRocmVhZE1lc3NhZ2VTaXplID0gMTsKLXN0YXRpYyBjb25zdCBjaGFyIGZpbmlzaFRocmVhZE1l
c3NhZ2VbXSA9ICJGIjsKLXN0YXRpYyBjb25zdCBjaGFyIHdha3VwVGhyZWFkTWVzc2FnZVtdID0g
IlciOwotCi1QYXNzT3duUHRyPFdvcmtRdWV1ZTo6VGltZXJXb3JrSXRlbT4gV29ya1F1ZXVlOjpU
aW1lcldvcmtJdGVtOjpjcmVhdGUoRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbiwgZG91YmxlIGV4
cGlyZVRpbWUpCi17Ci0gICAgaWYgKGV4cGlyZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGltZXJXb3JrSXRlbShmdW5jdGlvbiwg
ZXhwaXJlVGltZSkpOwotfQotCi1Xb3JrUXVldWU6OlRpbWVyV29ya0l0ZW06OlRpbWVyV29ya0l0
ZW0oRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyZVRpbWUpCi0gICAgOiBt
X2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICwgbV9leHBpcmVUaW1lKGV4cGlyZVRpbWUpCi17Ci19
Ci0KIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkK
IHsKLSAgICBpbnQgZmRzWzJdOwotICAgIGlmIChwaXBlKGZkcykpCi0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotCi0gICAgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yID0gZmRzWzBdOwot
ICAgIG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yID0gZmRzWzFdOwotICAgIEZEX1pFUk8oJm1fZmls
ZURlc2NyaXB0b3JTZXQpOwotICAgIEZEX1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZt
X2ZpbGVEZXNjcmlwdG9yU2V0KTsKLSAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJv
bVBpcGVEZXNjcmlwdG9yOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tl
dERlc2NyaXB0b3I7Ci0KLSAgICBtX3RocmVhZExvb3AgPSB0cnVlOwotICAgIGNyZWF0ZVRocmVh
ZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6OndvcmtR
dWV1ZVRocmVhZCksIHRoaXMsIG5hbWUpOworICAgIG1fZGlzcGF0Y2hRdWV1ZSA9IERpc3BhdGNo
UXVldWU6OmNyZWF0ZShuYW1lKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCiB7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsK
LX0KLQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkKLXsKLSAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7Ci0KLSAg
ICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxv
Y2spOwotICAgICAgICAgICAgaWYgKG1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3Jr
SXRlbVF1ZXVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtp
XSgpOwotICAgICAgICAgICAgZGVyZWYoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBX
b3JrUXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQotewotICAgIGZkX3NldCByZWFk
RmlsZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotCi0gICAgaWYgKHNlbGVj
dChtX21heEZpbGVEZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwg
Z2V0TmV4dFRpbWVPdXQoKSkgPj0gMCkgewotICAgICAgICBpZiAoRkRfSVNTRVQobV9yZWFkRnJv
bVBpcGVEZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkgewotICAgICAgICAgICAg
Y2hhciByZWFkQnVmW3RocmVhZE1lc3NhZ2VTaXplXTsKLSAgICAgICAgICAgIGlmIChyZWFkKG1f
cmVhZEZyb21QaXBlRGVzY3JpcHRvciwgcmVhZEJ1ZiwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0x
KQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBXb3JrUXVl
dWVUaHJlYWQgcGlwZSIpOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKHJlYWRCdWYsIGZpbmlz
aFRocmVhZE1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSkKLSAgICAgICAgICAgICAgICBtX3Ro
cmVhZExvb3AgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NvY2tldERlc2Ny
aXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNj
cmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAgICAgICAgIG1fc29ja2V0RXZl
bnRIYW5kbGVyKCk7Ci0gICAgfQotfQotCi1zdHJ1Y3QgdGltZXZhbCogV29ya1F1ZXVlOjpnZXRO
ZXh0VGltZU91dCgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNM
b2NrKTsKLSAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVWYWx1ZTsKLSAgICB0aW1lVmFs
dWUudHZfc2VjID0gMDsKLSAgICB0aW1lVmFsdWUudHZfdXNlYyA9IDA7Ci0gICAgZG91YmxlIHRp
bWVPdXQgPSBtX3RpbWVyV29ya0l0ZW1zWzBdLT5leHBpcmVUaW1lKCkgLSBjdXJyZW50VGltZSgp
OwotICAgIGlmICh0aW1lT3V0ID4gMCkgewotICAgICAgICB0aW1lVmFsdWUudHZfc2VjID0gc3Rh
dGljX2Nhc3Q8bG9uZz4odGltZU91dCk7Ci0gICAgICAgIHRpbWVWYWx1ZS50dl91c2VjID0gc3Rh
dGljX2Nhc3Q8bG9uZz4oKHRpbWVPdXQgLSB0aW1lVmFsdWUudHZfc2VjKSAqIDEwMDAwMDApOwot
ICAgIH0KLQotICAgIHJldHVybiAmdGltZVZhbHVlOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6aW5z
ZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0pCi17Ci0gICAg
aWYgKCFpdGVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgcG9zaXRpb24gPSAwOwot
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKLSAgICAvLyBt
X3RpbWVyV29ya0l0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgotICAgIGZv
ciAoOyBwb3NpdGlvbiA8IG1fdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK3Bvc2l0aW9uKQotICAg
ICAgICBpZiAoaXRlbS0+ZXhwaXJlVGltZSgpIDwgbV90aW1lcldvcmtJdGVtc1twb3NpdGlvbl0t
PmV4cGlyZVRpbWUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgbV90aW1lcldvcmtJdGVt
cy5pbnNlcnQocG9zaXRpb24sIGl0ZW0pOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVRp
bWVyV29yaygpCi17Ci0gICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVtPiA+IHRpbWVyV29y
a0l0ZW1zOwotCi0gICAgewotICAgICAgICAvLyBQcm90ZWN0cyBtX3RpbWVyV29ya0l0ZW1zLgot
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwotICAgICAg
ICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgLy8gQ29waWVzIGFsbCB0aGUgdGltZXIgd29yayBpdGVtcyBpbiBtX3RpbWVyV29y
a0l0ZW1zIHRvIGxvY2FsIHZlY3Rvci4KLSAgICAgICAgbV90aW1lcldvcmtJdGVtcy5zd2FwKHRp
bWVyV29ya0l0ZW1zKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgY3VycmVudCA9IGN1cnJlbnRUaW1l
KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVyV29ya0l0ZW1zLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmICghdGltZXJXb3JrSXRlbXNbaV0tPmV4cGlyZWQoY3VycmVudCkp
IHsKLSAgICAgICAgICAgIC8vIElmIGEgdGltZXIgd29yayBpdGVtIGRvZXMgbm90IGV4cGlyZWQs
IGtlZXAgaXQgdG8gdGhlIG1fdGltZXJXb3JrSXRlbXMuCi0gICAgICAgICAgICAvLyBtX3RpbWVy
V29ya0l0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgotICAgICAgICAgICAg
aW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtc1tpXS5yZWxlYXNlKCkpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBhIHRpbWVyIHdvcmsg
aXRlbSBleHBpcmVkLCBkaXNwYXRjaCB0aGUgZnVuY3Rpb24gb2YgdGhlIHdvcmsgaXRlbS4KLSAg
ICAgICAgdGltZXJXb3JrSXRlbXNbaV0tPmRpc3BhdGNoKCk7Ci0gICAgICAgIGRlcmVmKCk7Ci0g
ICAgfQotfQotCi12b2lkIFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFy
KiBtZXNzYWdlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dyaXRlVG9QaXBlRGVzY3Jp
cHRvckxvY2spOwotICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwgbWVzc2Fn
ZSwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byB3YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKLX0KLQotdm9pZCogV29ya1F1ZXVlOjp3b3Jr
UXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCi17Ci0gICAgd2hpbGUgKHdvcmtRdWV1
ZS0+bV90aHJlYWRMb29wKSB7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKLSAg
ICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtVGltZXJXb3JrKCk7Ci0gICAgICAgIHdvcmtRdWV1ZS0+
cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwotICAgIH0KLQotICAgIGNsb3NlKHdvcmtRdWV1
ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKLSAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yKTsKLQotICAgIHJldHVybiAwOworICAgIFJlZlB0cjxEaXNwYXRj
aFF1ZXVlPiBkaXNwYXRjaFF1ZXVlID0gbV9kaXNwYXRjaFF1ZXVlLnJlbGVhc2UoKTsKKyAgICBk
aXNwYXRjaFF1ZXVlLT5zdG9wVGhyZWFkKCk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rl
clNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uKQogewotICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxp
ZFNvY2tldERlc2NyaXB0b3IpCi0gICAgICAgIExPR19FUlJPUigiJWQgaXMgYWxyZWFkeSByZWdp
c3RlcmQuIiwgZmlsZURlc2NyaXB0b3IpOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gZmls
ZURlc2NyaXB0b3I7Ci0gICAgbV9zb2NrZXRFdmVudEhhbmRsZXIgPSBmdW5jdGlvbjsKKyAgICBp
ZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZpbGVEZXNj
cmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRv
ciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIEZEX1NFVChmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURl
c2NyaXB0b3JTZXQpOworICAgIG1fZGlzcGF0Y2hRdWV1ZS0+c2V0U29ja2V0RXZlbnRIYW5kbGVy
KGZpbGVEZXNjcmlwdG9yLCBmdW5jdGlvbik7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKIHsKLSAgICBtX3NvY2tl
dERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKyAgICBVTlVTRURfUEFSQU0o
ZmlsZURlc2NyaXB0b3IpOwogCi0gICAgaWYgKGZpbGVEZXNjcmlwdG9yID09IG1fbWF4RmlsZURl
c2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURl
c2NyaXB0b3I7Ci0gICAgRkRfQ0xSKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNl
dCk7CisgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
ZGlzcGF0Y2hRdWV1ZS0+Y2xlYXJTb2NrZXRFdmVudEhhbmRsZXIoKTsKIH0KIAogdm9pZCBXb3Jr
UXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQogewotICAg
IHJlZigpOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1
ZXVlTG9jayk7Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOwotICAg
IH0KKyAgICBpZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgc2Vu
ZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOworICAgIG1fZGlzcGF0Y2hRdWV1
ZS0+ZGlzcGF0Y2goV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCBmdW5jdGlvbikpOwogfQogCiB2b2lk
IFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uLCBkb3VibGUgZGVsYXkpCiB7Ci0gICAgaWYgKGRlbGF5IDwgMCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgT3duUHRyPFRpbWVyV29ya0l0ZW0+IHRpbWVyV29ya0l0ZW0gPSBUaW1lcldv
cmtJdGVtOjpjcmVhdGUoZnVuY3Rpb24sIGN1cnJlbnRUaW1lKCkgKyBkZWxheSk7Ci0gICAgaWYg
KCF0aW1lcldvcmtJdGVtKQorICAgIGlmICghbV9kaXNwYXRjaFF1ZXVlKQogICAgICAgICByZXR1
cm47CiAKLSAgICByZWYoKTsKLSAgICBpbnNlcnRUaW1lcldvcmtJdGVtKHRpbWVyV29ya0l0ZW0u
cmVsZWFzZSgpKTsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3VwVGhyZWFkTWVzc2FnZSk7
CisgICAgbV9kaXNwYXRjaFF1ZXVlLT5kaXNwYXRjaChUaW1lcldvcmtJdGVtOjpjcmVhdGUodGhp
cywgZnVuY3Rpb24sIGRlbGF5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDg4
MDUwYzE5ODNhNjViZjU3YjQ5ZGM5YmM5NzdjZmZjNWRmNzUxOWIuLmQyZmEzNDYzZmM2NjllODZi
YzRlYTcyMmE0MGExMjk2YjIyNjJiMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0y
LDYgKzIsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBQbGF0Zm9ybS9Db3Jl
SVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwCiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nv
bm5lY3Rpb25Vbml4LmNwcAogCisgICAgUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3Bw
CiAgICAgUGxhdGZvcm0vZWZsL0xvZ2dpbmdFZmwuY3BwCiAgICAgUGxhdGZvcm0vZWZsL01vZHVs
ZUVmbC5jcHAKICAgICBQbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMTkzLDYgKzE5
NCw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyIKICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vbmV0d29yay9zb3VwIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0
L2VuY2hhbnQiCisgICAgIiR7V0VCS0lUMl9ESVJ9L1BsYXRmb3JtL2VmbCIKICAgICAiJHtXRUJL
SVQyX0RJUn0vU2hhcmVkL0FQSS9jL2VmbCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0Rv
d25sb2Fkcy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvZWZsIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>213373</attachid>
            <date>2013-10-04 10:29:00 -0700</date>
            <delta_ts>2013-10-07 17:54:14 -0700</delta_ts>
            <desc>Change to apply unique_ptr</desc>
            <filename>apply_unique_ptr.diff</filename>
            <type>text/plain</type>
            <size>9980</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVj
dG9yLmgKaW5kZXggOTBiZjc4NS4uMTc1M2JiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTY0Niw4ICs2NDYsOCBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCB0cnlBcHBlbmQoY29uc3Qg
VSosIHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGluc2VydChzaXpl
X3QgcG9zaXRpb24sIGNvbnN0IFUqLCBzaXplX3QpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IHZvaWQgaW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVSYpOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUsIHNpemVfdCBjPiB2b2lkIGluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFZl
Y3RvcjxVLCBjPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgaW5zZXJ0KHNpemVf
dCBwb3NpdGlvbiwgVSYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgYz4gdm9p
ZCBpbnNlcnRWZWN0b3Ioc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8VSwgYz4mKTsKIAog
ICAgIHZvaWQgcmVtb3ZlKHNpemVfdCBwb3NpdGlvbik7CiAgICAgdm9pZCByZW1vdmUoc2l6ZV90
IHBvc2l0aW9uLCBzaXplX3QgbGVuZ3RoKTsKQEAgLTEwOTUsMjQgKzEwOTUsMjQgQEAgdm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydChzaXplX3Qg
cG9zaXRpb24sIGNvbnN0IFUKIH0KICAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBVJiB2YWwpCitpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydChzaXplX3QgcG9z
aXRpb24sIFUmJiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tihwb3NpdGlvbiA8PSBzaXplKCkpOwotICAgIGNvbnN0IFUqIGRhdGEgPSAmdmFsOworICAgIGF1
dG8gZGF0YSA9ICZ2YWx1ZTsKICAgICBpZiAoc2l6ZSgpID09IGNhcGFjaXR5KCkpIHsKICAgICAg
ICAgZGF0YSA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEsIGRhdGEpOwogICAgICAgICBBU1NF
UlQoYmVnaW4oKSk7CiAgICAgfQogICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CiAg
ICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3BvdCArIDEp
OwotICAgIG5ldyAoTm90TnVsbCwgc3BvdCkgVCgqZGF0YSk7CisgICAgbmV3IChOb3ROdWxsLCBz
cG90KSBUKHN0ZDo6Zm9yd2FyZDxVPigqZGF0YSkpOwogICAgICsrbV9zaXplOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGM+Ci1pbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydChzaXplX3QgcG9z
aXRpb24sIGNvbnN0IFZlY3RvcjxVLCBjPiYgdmFsKQoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnRWZWN0b3Ioc2l6ZV90IHBvc2l0
aW9uLCBjb25zdCBWZWN0b3I8VSwgYz4mIHZhbHVlKQogewotICAgIGluc2VydChwb3NpdGlvbiwg
dmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgIGluc2VydChwb3NpdGlvbiwgdmFsdWUuYmVn
aW4oKSwgdmFsdWUuc2l6ZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvSGlzdG9yeUl0ZW0uY3BwCmluZGV4IGI0ZjA1ZGYuLmFmMTU0ZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBIaXN0b3J5
SXRlbTo6cGFkRGFpbHlDb3VudHNGb3JOZXdWaXNpdChkb3VibGUgdGltZSkKIAogICAgIFZlY3Rv
cjxpbnQ+IHBhZGRpbmc7CiAgICAgcGFkZGluZy5maWxsKDAsIGRheXNFbGFwc2VkKTsKLSAgICBt
X2RhaWx5VmlzaXRDb3VudHMuaW5zZXJ0KDAsIHBhZGRpbmcpOworICAgIG1fZGFpbHlWaXNpdENv
dW50cy5pbnNlcnRWZWN0b3IoMCwgcGFkZGluZyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzaXplX3Qg
ZGF5c1BlcldlZWsgPSA3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZs
L0Rpc3BhdGNoUXVldWVFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3Bh
dGNoUXVldWVFZmwuY3BwCmluZGV4IGI0NDU1ZDUuLmY3MGEyMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAKQEAgLTYwLDkgKzYwLDkg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gbV9kaXNwYXRjaFF1ZXVlOwog
fTsKIAotUGFzc093blB0cjxXb3JrSXRlbT4gV29ya0l0ZW06OmNyZWF0ZShXb3JrUXVldWUqIHdv
cmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCitzdGQ6OnVuaXF1ZV9w
dHI8V29ya0l0ZW0+IFdvcmtJdGVtOjpjcmVhdGUoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQogewotICAgIHJldHVybiBhZG9wdFB0cjxXb3Jr
SXRlbT4obmV3IFdvcmtJdGVtKHdvcmtRdWV1ZSwgZnVuY3Rpb24pKTsKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPFdvcmtJdGVtPihuZXcgV29ya0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlvbikp
OwogfQogCiBXb3JrSXRlbTo6V29ya0l0ZW0oV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQpAQCAtNzksMTEgKzc5LDExIEBAIFdvcmtJdGVtOjp+
V29ya0l0ZW0oKQogICAgIG1fd29ya1F1ZXVlLT5kZXJlZigpOwogfQogCi1QYXNzT3duUHRyPFRp
bWVyV29ya0l0ZW0+IFRpbWVyV29ya0l0ZW06OmNyZWF0ZShXb3JrUXVldWUqIHdvcmtRdWV1ZSwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheVNlY29uZHMpCitz
dGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4gVGltZXJXb3JrSXRlbTo6Y3JlYXRlKFdvcmtR
dWV1ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91Ymxl
IGRlbGF5U2Vjb25kcykKIHsKICAgICBBU1NFUlQoZGVsYXlTZWNvbmRzID49IDApOwogCi0gICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBUaW1lcldvcmtJdGVtKHdvcmtRdWV1ZSwgZnVuY3Rpb24sIGN1
cnJlbnRUaW1lKCkgKyBkZWxheVNlY29uZHMpKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PFRpbWVyV29ya0l0ZW0+KG5ldyBUaW1lcldvcmtJdGVtKHdvcmtRdWV1ZSwgZnVuY3Rpb24sIGN1
cnJlbnRUaW1lKCkgKyBkZWxheVNlY29uZHMpKTsKIH0KIAogVGltZXJXb3JrSXRlbTo6VGltZXJX
b3JrSXRlbShXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24sIGRvdWJsZSBleHBpcmF0aW9uVGltZVNlY29uZHMpCkBAIC0xMjMsMTkgKzEyMywxOSBA
QCBEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1ZSgpCiAgICAgY2xvc2UobV93cml0ZVRvUGlw
ZURlc2NyaXB0b3IpOwogfQogCi12b2lkIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoKFBhc3NPd25Q
dHI8V29ya0l0ZW0+IGl0ZW0pCit2b2lkIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoKHN0ZDo6dW5p
cXVlX3B0cjxXb3JrSXRlbT4gaXRlbSkKIHsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3dvcmtJdGVtc0xvY2spOwotICAgICAgICBtX3dvcmtJdGVtcy5hcHBlbmQoaXRlbSk7
CisgICAgICAgIG1fd29ya0l0ZW1zLmFwcGVuZChzdGQ6Om1vdmUoaXRlbSkpOwogICAgIH0KIAog
ICAgIHdha2VVcFRocmVhZCgpOwogfQogCi12b2lkIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoKFBh
c3NPd25QdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0
Y2goc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0pCiB7Ci0gICAgaW5zZXJ0VGlt
ZXJXb3JrSXRlbShpdGVtKTsKKyAgICBpbnNlcnRUaW1lcldvcmtJdGVtKHN0ZDo6bW92ZShpdGVt
KSk7CiAgICAgd2FrZVVwVGhyZWFkKCk7CiB9CiAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIERp
c3BhdGNoUXVldWU6OmNsZWFyU29ja2V0RXZlbnRIYW5kbGVyKCkKIHZvaWQgRGlzcGF0Y2hRdWV1
ZTo6cGVyZm9ybVdvcmsoKQogewogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFZlY3RvcjxP
d25QdHI8V29ya0l0ZW0+ID4gd29ya0l0ZW1zOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFdvcmtJdGVtPiA+IHdvcmtJdGVtczsKIAogICAgICAgICB7CiAgICAgICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV93b3JrSXRlbXNMb2NrKTsKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lk
IERpc3BhdGNoUXVldWU6OnBlcmZvcm1Xb3JrKCkKIAogdm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJm
b3JtVGltZXJXb3JrKCkKIHsKLSAgICBWZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+ID4gdGlt
ZXJXb3JrSXRlbXM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPiA+
IHRpbWVyV29ya0l0ZW1zOwogCiAgICAgewogICAgICAgICAvLyBQcm90ZWN0cyBtX3RpbWVyV29y
a0l0ZW1zLgpAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVRp
bWVyV29yaygpCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVyV29ya0l0ZW1zLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmICghdGltZXJXb3JrSXRlbXNbaV0tPmhhc0V4cGlyZWQo
Y3VycmVudFRpbWVTZWNvbmRzKSkgewotICAgICAgICAgICAgaW5zZXJ0VGltZXJXb3JrSXRlbSh0
aW1lcldvcmtJdGVtc1tpXS5yZWxlYXNlKCkpOworICAgICAgICAgICAgaW5zZXJ0VGltZXJXb3Jr
SXRlbShzdGQ6Om1vdmUodGltZXJXb3JrSXRlbXNbaV0pKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIERpc3BhdGNoUXVldWU6OnBl
cmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQogICAgIH0KIH0KIAotdm9pZCBEaXNwYXRjaFF1ZXVl
OjppbnNlcnRUaW1lcldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKK3Zv
aWQgRGlzcGF0Y2hRdWV1ZTo6aW5zZXJ0VGltZXJXb3JrSXRlbShzdGQ6OnVuaXF1ZV9wdHI8VGlt
ZXJXb3JrSXRlbT4gaXRlbSkKIHsKICAgICBBU1NFUlQoaXRlbSk7CiAKQEAgLTI0Niw3ICsyNDYs
NyBAQCB2b2lkIERpc3BhdGNoUXVldWU6Omluc2VydFRpbWVyV29ya0l0ZW0oUGFzc093blB0cjxU
aW1lcldvcmtJdGVtPiBpdGVtKQogICAgICAgICBpZiAoaXRlbS0+ZXhwaXJhdGlvblRpbWVTZWNv
bmRzKCkgPCBtX3RpbWVyV29ya0l0ZW1zW3Bvc2l0aW9uXS0+ZXhwaXJhdGlvblRpbWVTZWNvbmRz
KCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgIG1fdGltZXJXb3JrSXRlbXMuaW5zZXJ0KHBv
c2l0aW9uLCBpdGVtKTsKKyAgICBtX3RpbWVyV29ya0l0ZW1zLmluc2VydChwb3NpdGlvbiwgc3Rk
Ojptb3ZlKGl0ZW0pKTsKIH0KIAogdm9pZCBEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaFF1ZXVlVGhy
ZWFkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1
ZXVlRWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5o
CmluZGV4IDQxYzg4OTkuLmVlMzVkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
ZWZsL0Rpc3BhdGNoUXVldWVFZmwuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSA8dGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIApAQCAtMzYsNyArMzUsNyBAQCBjbGFzcyBXb3JrUXVldWU7CiAKIGNsYXNzIFdvcmtJdGVt
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXb3JrSXRlbT4gY3JlYXRlKFdvcmtR
dWV1ZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFdvcmtJdGVtPiBjcmVhdGUoV29ya1F1ZXVlKiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYp
OwogICAgIH5Xb3JrSXRlbSgpOwogICAgIHZvaWQgZGlzcGF0Y2goKSB7IG1fZnVuY3Rpb24oKTsg
fQogCkBAIC01MCw3ICs0OSw3IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRpbWVyV29ya0l0ZW0gOiBw
dWJsaWMgV29ya0l0ZW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRpbWVyV29y
a0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91Ymxl
IGRlbGF5KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0
ZShXb3JrUXVldWUqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGRlbGF5KTsKICAg
ICBkb3VibGUgZXhwaXJhdGlvblRpbWVTZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV9leHBpcmF0
aW9uVGltZVNlY29uZHM7IH0KICAgICBib29sIGhhc0V4cGlyZWQoZG91YmxlIGN1cnJlbnRUaW1l
U2Vjb25kcykgY29uc3QgeyByZXR1cm4gY3VycmVudFRpbWVTZWNvbmRzID49IG1fZXhwaXJhdGlv
blRpbWVTZWNvbmRzOyB9CiAKQEAgLTY2LDggKzY1LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERpc3BhdGNoUXVldWU+IGNyZWF0ZShjb25zdCBjaGFyKiBuYW1lKTsKICAgICB+
RGlzcGF0Y2hRdWV1ZSgpOwogCi0gICAgdm9pZCBkaXNwYXRjaChQYXNzT3duUHRyPFdvcmtJdGVt
Pik7Ci0gICAgdm9pZCBkaXNwYXRjaChQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+KTsKKyAgICB2
b2lkIGRpc3BhdGNoKHN0ZDo6dW5pcXVlX3B0cjxXb3JrSXRlbT4pOworICAgIHZvaWQgZGlzcGF0
Y2goc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+KTsKICAgICB2b2lkIHN0b3BUaHJlYWQo
KTsKICAgICB2b2lkIHNldFNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mKTsKICAgICB2b2lkIGNsZWFyU29ja2V0RXZlbnRIYW5kbGVyKCk7CkBAIC04MCw3ICs3
OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtV29yaygpOwogICAgIHZvaWQgcGVyZm9y
bVRpbWVyV29yaygpOwogICAgIHZvaWQgcGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwotICAg
IHZvaWQgaW5zZXJ0VGltZXJXb3JrSXRlbShQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+KTsKKyAg
ICB2b2lkIGluc2VydFRpbWVyV29ya0l0ZW0oc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+
KTsKICAgICB2b2lkIGRpc3BhdGNoUXVldWVUaHJlYWQoKTsKICAgICB2b2lkIHdha2VVcFRocmVh
ZCgpOwogICAgIHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCkgY29uc3Q7CkBAIC05NiwxMCArOTUs
MTAgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwogICAgIEZ1bmN0aW9u
PHZvaWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7CiAKLSAgICBWZWN0b3I8T3duUHRyPFdvcmtJ
dGVtPiA+IG1fd29ya0l0ZW1zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V29ya0l0ZW0+
ID4gbV93b3JrSXRlbXM7CiAgICAgTXV0ZXggbV93b3JrSXRlbXNMb2NrOwogCi0gICAgVmVjdG9y
PE93blB0cjxUaW1lcldvcmtJdGVtPiA+IG1fdGltZXJXb3JrSXRlbXM7CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPiA+IG1fdGltZXJXb3JrSXRlbXM7CiAgICAgbXV0
YWJsZSBNdXRleCBtX3RpbWVyV29ya0l0ZW1zTG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WZWN0b3IuY3BwCmluZGV4IDdlOTA4MDkuLjE5NjkzYTggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcApAQCAtMTc2LDQgKzE3Niw1OSBAQCBURVNU
KFdURl9WZWN0b3IsIE1vdmVPbmx5X0FwcGVuZCkKICAgICB9CiB9CiAKK1RFU1QoV1RGX1ZlY3Rv
ciwgSW5zZXJ0KQoreworICAgIFZlY3RvcjxpbnQ+IHZlY3RvcjsKKworICAgIHZlY3Rvci5pbnNl
cnQoMCwgMSk7CisgICAgdmVjdG9yLmluc2VydCgwLCAwKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSA5OTsgaSA+IDE7IC0taSkgeworICAgICAgICB2ZWN0b3IuaW5zZXJ0KDIsIGkpOworICAgIH0K
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEVYUEVDVF9F
USh2ZWN0b3JbaV0sIGkpOworfQorCitURVNUKFdURl9WZWN0b3IsIE1vdmVPbmx5X0luc2VydCkK
K3sKKyAgICBWZWN0b3I8TW92ZU9ubHk+IHZlY3RvcjsKKworICAgIE1vdmVPbmx5IG1vdmVPbmx5
KDEpOworICAgIHZlY3Rvci5pbnNlcnQoMCwgc3RkOjptb3ZlKG1vdmVPbmx5KSk7CisgICAgRVhQ
RUNUX0VRKG1vdmVPbmx5LnZhbHVlKCksIDBVKTsKKworICAgIG1vdmVPbmx5ID0gc3RkOjptb3Zl
KE1vdmVPbmx5KDApKTsKKyAgICB2ZWN0b3IuaW5zZXJ0KDAsIHN0ZDo6bW92ZShtb3ZlT25seSkp
OworICAgIEVYUEVDVF9FUShtb3ZlT25seS52YWx1ZSgpLCAwVSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gOTk7IGkgPiAxOyAtLWkpIHsKKyAgICAgICAgTW92ZU9ubHkgbW92ZU9ubHkoaSk7Cisg
ICAgICAgIHZlY3Rvci5pbnNlcnQoMiwgc3RkOjptb3ZlKG1vdmVPbmx5KSk7CisgICAgICAgIEVY
UEVDVF9FUShtb3ZlT25seS52YWx1ZSgpLCAwVSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX0VRKHZlY3RvcltpXS52YWx1ZSgp
LCBpKTsKK30KKworVEVTVChXVEZfVmVjdG9yLCBJbnNlcnRWZWN0b3IpCit7CisgICAgVmVjdG9y
PGludD4gdmVjdG9yWzRdOworCisgICAgZm9yIChzaXplX3QgaSA9IDExOyBpID49IDA7IC0taSkK
KyAgICAgICAgdmVjdG9yW2kvM10uYXBwZW5kKGkpOworCisgICAgVmVjdG9yPGludD4gbmV3VmVj
dG9yOworCisgICAgbmV3VmVjdG9yLmluc2VydFZlY3RvcigwLCB2ZWN0b3JbMV0pOworICAgIG5l
d1ZlY3Rvci5pbnNlcnRWZWN0b3IoMCwgdmVjdG9yWzBdKTsKKyAgICBuZXdWZWN0b3IuaW5zZXJ0
VmVjdG9yKDYsIHZlY3RvclszXSk7CisgICAgbmV3VmVjdG9yLmluc2VydFZlY3Rvcig2LCB2ZWN0
b3JbMl0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMjsgKytpKQorICAgICAgICBF
WFBFQ1RfRVEobmV3VmVjdG9yW2ldLCBpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213647</attachid>
            <date>2013-10-07 20:46:17 -0700</date>
            <delta_ts>2013-10-08 19:02:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115332-20131008124619.patch</filename>
            <type>text/plain</type>
            <size>26244</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU3MDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYmExMWRmMDQ2OWUzYTc3
YjhkMTgxZTQ1YzJiODYwOWU3YWRiNWQ1MS4uODEyNTFhZTRjMjJmOGU5Yzc1MDNlNTc1ZjdlNGY3
MThjMTljMTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEzLTEwLTA3ICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNl
cGFyYXRlIGRpc3BhdGNoIGNvbnRleHQgZnJvbSBXb3JrUXVldWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXb3JrUXVldWUgdG8gcHJl
dmVudCBkYW5nbGluZyB3b3JrcXVldWUgYWNjZXNzLgorCisgICAgICAgIFByZXZpb3VzbHksIHRo
ZSBXb3JrUXVldWUgY2xhc3MgaGFkIGFsbCBjb250ZXh0IGFib3V0IGRpc3BhdGNoLgorICAgICAg
ICBXb3JrUXVldWUgaGFkIGRpc3BhdGNoIGl0ZW0gcXVldWUgYW5kIHNvY2tldCBldmVudCBoYW5k
bGVyLAorICAgICAgICBhbmQgdGhvc2Ugd2VyZSBhY2Nlc3NlZCBvbiB0aGUgd29yayBxdWV1ZSB0
aHJlYWQgdGhyb3VnaCBXb3JrUXVldWUKKyAgICAgICAgaW5zdGFuY2UuCisKKyAgICAgICAgV2l0
aCByZWZlcmVuY2UgY291bnRhYmxlIFdvcmtRdWV1ZSBjb25jZXB0LCB0aGlzIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGNvbXBsaWNhdGVzIGhhbmRsaW5nIHdvcmtxdWV1ZSByZWYtY291bnRpbmcg
YW5kIGNhdXNlcyBkYW5nbGluZworICAgICAgICB3b3JrcXVldWUgYWNjZXNzIHByb2JsZW0uCisK
KyAgICAgICAgVG8gbWFrZSBpdCBlYXN5IHRvIGhhbmRsZSBXb3JrUXVldWUgcmVmZXJlbmNlIGNv
dW50IGFuZCB0byBwcmV2ZW50CisgICAgICAgIGRhbmdsaW5nIGFjY2VzcyBwcm9ibGVtLCBEaXNw
YXRjaFF1ZXVlIGNsYXNzIGlzIGFkZGVkIHRvIGhhbmRsZQorICAgICAgICBkaXNwYXRjaCB0YXNr
cywgYW5kIHRoZSBXb3JrUXVldWUgaW5zdGFuY2UgYW5kIERpc3BhdGNoUXVldWUgdGhyZWFkCisg
ICAgICAgIHdpbGwgaGF2ZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBEaXNwYXRjaFF1ZXVl
IGluc3RhbmNlIHRvIHByZXZlbnQKKyAgICAgICAgZGFuZ2xpbmcgYWNjZXNzLgorCisgICAgICAg
ICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAgICAgICogUGxhdGZvcm0vZWZsL0Rpc3BhdGNo
UXVldWVFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKERpc3BhdGNoUXVldWU6OlRocmVhZENvbnRl
eHQ6OnN0YXJ0KToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OlRocmVhZENvbnRleHQ6OlRocmVh
ZENvbnRleHQpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6VGhyZWFkQ29udGV4dDo6ZnVuY3Rp
b24pOgorICAgICAgICAoV29ya0l0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXb3JrSXRlbTo6V29y
a0l0ZW0pOgorICAgICAgICAoV29ya0l0ZW06On5Xb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldv
cmtJdGVtOjpjcmVhdGUpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6VGltZXJXb3JrSXRlbSk6
CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpjcmVhdGUpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1
ZTo6RGlzcGF0Y2hRdWV1ZSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1
ZSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChEaXNwYXRj
aFF1ZXVlOjpzdG9wVGhyZWFkKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OnNldFNvY2tldEV2
ZW50SGFuZGxlcik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpjbGVhclNvY2tldEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtV29yayk6CisgICAgICAgIChE
aXNwYXRjaFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6
OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmspOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6aW5z
ZXJ0VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaFF1ZXVl
VGhyZWFkKToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6Ondha2VVcFRocmVhZCk6CisgICAgICAg
IChEaXNwYXRjaFF1ZXVlOjpnZXROZXh0VGltZU91dCk6CisgICAgICAgICogUGxhdGZvcm0vZWZs
L0Rpc3BhdGNoUXVldWVFZmwuaDogQWRkZWQuCisgICAgICAgIChXb3JrSXRlbTo6ZGlzcGF0Y2gp
OgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6ZXhwaXJhdGlvblRpbWVTZWNvbmRzKToKKyAgICAg
ICAgKFRpbWVyV29ya0l0ZW06Omhhc0V4cGlyZWQpOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9X
b3JrUXVldWVFZmwuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUp
OgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29y
a1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6
OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNw
YXRjaCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAg
ICogUGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTMtMTAtMDcgIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmVkdWNlIGR1
cGxpY2F0ZWQgY29kZSBpbiBXZWJQYWdlUHJveHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVl
LmgKaW5kZXggOWEyOGQ5MGI2MTE0YjQ2YTQxNTJhN2U3NDE0NGE5NzdmOTg5M2JkOS4uMzg2MTQy
YmQxZThjZTIwYzBkOTA2NWMzZjM4NTVjYjE3NjY5YTE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CiB0eXBlZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsK
ICNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPERpc3Bh
dGNoUXVldWVFZmwuaD4KICNlbmRpZgogCiBjbGFzcyBXb3JrUXVldWUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8V29ya1F1ZXVlPiB7CkBAIC05OCw0NiArOTgsNyBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8aW50LCBWZWN0b3I8U29ja2V0RXZlbnRTb3VyY2UqPj4gbV9ldmVudFNvdXJj
ZXM7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPFNvY2tldEV2ZW50U291cmNlKj4+
OjppdGVyYXRvciBTb2NrZXRFdmVudFNvdXJjZUl0ZXJhdG9yOwogI2VsaWYgUExBVEZPUk0oRUZM
KQotICAgIGNsYXNzIFRpbWVyV29ya0l0ZW0gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4gY3JlYXRlKEZ1bmN0aW9uPHZvaWQoKT4sIGRvdWJs
ZSBleHBpcmVUaW1lKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaCgpIHsgbV9mdW5jdGlvbigpOyB9
Ci0gICAgICAgIGRvdWJsZSBleHBpcmVUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9leHBpcmVUaW1l
OyB9Ci0gICAgICAgIGJvb2wgZXhwaXJlZChkb3VibGUgY3VycmVudFRpbWUpIGNvbnN0IHsgcmV0
dXJuIGN1cnJlbnRUaW1lID49IG1fZXhwaXJlVGltZTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAg
ICAgICBUaW1lcldvcmtJdGVtKEZ1bmN0aW9uPHZvaWQoKT4sIGRvdWJsZSBleHBpcmVUaW1lKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAg
ICAgICAgZG91YmxlIG1fZXhwaXJlVGltZTsKLSAgICB9OwotCi0gICAgZmRfc2V0IG1fZmlsZURl
c2NyaXB0b3JTZXQ7Ci0gICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fcmVh
ZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7Ci0g
ICAgTXV0ZXggbV93cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrOwotCi0gICAgYm9vbCBtX3RocmVh
ZExvb3A7Ci0KLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPj4gbV93b3JrSXRlbVF1ZXVlOwot
ICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxvY2s7Ci0KLSAgICBpbnQgbV9zb2NrZXREZXNjcmlw
dG9yOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7Ci0KLSAgICBW
ZWN0b3I8T3duUHRyPFRpbWVyV29ya0l0ZW0+PiBtX3RpbWVyV29ya0l0ZW1zOwotICAgIE11dGV4
IG1fdGltZXJXb3JrSXRlbXNMb2NrOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNv
bnN0IGNoYXIqKTsKLSAgICBzdGF0aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSop
OwotICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRv
cldvcmsoKTsKLSAgICBzdGF0aWMgZG91YmxlIGdldEN1cnJlbnRUaW1lKCk7Ci0gICAgc3RydWN0
IHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCk7Ci0gICAgdm9pZCBwZXJmb3JtVGltZXJXb3JrKCk7
Ci0gICAgdm9pZCBpbnNlcnRUaW1lcldvcmtJdGVtKFBhc3NPd25QdHI8VGltZXJXb3JrSXRlbT4p
OworICAgIFJlZlB0cjxEaXNwYXRjaFF1ZXVlPiBtX2Rpc3BhdGNoUXVldWU7CiAjZW5kaWYKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVl
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MDA5MDg5M2M3ZTNmZDM2NjA3MzVmYjM4ZDYzZmYzNmM0Nzc3OWQzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVl
dWVFZmwuY3BwCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNh
bXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwYXRjaFF1ZXVlRWZsLmgiCisKKyNpbmNsdWRl
IDxXb3JrUXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZXJmZC5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorCitzdGF0aWMgY29uc3QgaW50IG1pY3JvU2Vjb25kc1BlclNlY29uZCA9
IDEwMDAwMDA7CitzdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2NrZXREZXNjcmlwdG9yID0gLTE7
CitzdGF0aWMgY29uc3QgY2hhciB3YWtlVXBUaHJlYWRNZXNzYWdlID0gJ1cnOworCitjbGFzcyBE
aXNwYXRjaFF1ZXVlOjpUaHJlYWRDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBz
dGFydChjb25zdCBjaGFyKiBuYW1lLCBQYXNzUmVmUHRyPERpc3BhdGNoUXVldWU+IGRpc3BhdGNo
UXVldWUpCisgICAgeworICAgICAgICAvLyBUaGUgRGlzcGF0Y2hRdWV1ZVRocmVhZENvbnRleHQg
aW5zdGFuY2Ugd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRocmVhZCBmdW5jdGlvbiBhbmQgZGVsZXRl
ZCBpbiBpdC4KKyAgICAgICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJl
YWRGdW5jdGlvbj4oJlRocmVhZENvbnRleHQ6OmZ1bmN0aW9uKSwgbmV3IFRocmVhZENvbnRleHQo
ZGlzcGF0Y2hRdWV1ZSksIG5hbWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRDb250
ZXh0KFBhc3NSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gZGlzcGF0Y2hRdWV1ZSkKKyAgICA6IG1fZGlz
cGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCogZnVuY3Rpb24oVGhyZWFkQ29udGV4dCogdGhyZWFkQ29udGV4dCkKKyAgICB7CisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRDb250ZXh0Pih0aHJlYWRDb250ZXh0KS0+bV9kaXNwYXRj
aFF1ZXVlLT5kaXNwYXRjaFF1ZXVlVGhyZWFkKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIFJlZlB0cjxEaXNwYXRjaFF1ZXVlPiBtX2Rpc3BhdGNoUXVldWU7Cit9OworCitzdGQ6
OnVuaXF1ZV9wdHI8V29ya0l0ZW0+IFdvcmtJdGVtOjpjcmVhdGUoV29ya1F1ZXVlKiB3b3JrUXVl
dWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8V29ya0l0ZW0+KG5ldyBXb3JrSXRlbSh3b3JrUXVldWUsIGZ1bmN0aW9uKSk7
Cit9CisKK1dvcmtJdGVtOjpXb3JrSXRlbShXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgOiBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisg
ICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX3dvcmtRdWV1ZSk7CisK
KyAgICBtX3dvcmtRdWV1ZS0+cmVmKCk7Cit9CisKK1dvcmtJdGVtOjp+V29ya0l0ZW0oKQorewor
ICAgIG1fd29ya1F1ZXVlLT5kZXJlZigpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3Jr
SXRlbT4gVGltZXJXb3JrSXRlbTo6Y3JlYXRlKFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5U2Vjb25kcykKK3sKKyAgICBB
U1NFUlQoZGVsYXlTZWNvbmRzID49IDApOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxU
aW1lcldvcmtJdGVtPihuZXcgVGltZXJXb3JrSXRlbSh3b3JrUXVldWUsIGZ1bmN0aW9uLCBjdXJy
ZW50VGltZSgpICsgZGVsYXlTZWNvbmRzKSk7Cit9CisKK1RpbWVyV29ya0l0ZW06OlRpbWVyV29y
a0l0ZW0oV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0
aW9uLCBkb3VibGUgZXhwaXJhdGlvblRpbWVTZWNvbmRzKQorICAgIDogV29ya0l0ZW0od29ya1F1
ZXVlLCBmdW5jdGlvbikKKyAgICAsIG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzKGV4cGlyYXRpb25U
aW1lU2Vjb25kcykKK3sKK30KKworUGFzc1JlZlB0cjxEaXNwYXRjaFF1ZXVlPiBEaXNwYXRjaFF1
ZXVlOjpjcmVhdGUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBSZWZQdHI8RGlzcGF0Y2hRdWV1
ZT4gZGlzcGF0Y2hRdWV1ZSA9IGFkb3B0UmVmPERpc3BhdGNoUXVldWU+KG5ldyBEaXNwYXRjaFF1
ZXVlKCkpOworCisgICAgVGhyZWFkQ29udGV4dDo6c3RhcnQobmFtZSwgZGlzcGF0Y2hRdWV1ZSk7
CisKKyAgICByZXR1cm4gZGlzcGF0Y2hRdWV1ZS5yZWxlYXNlKCk7Cit9CisKK0Rpc3BhdGNoUXVl
dWU6OkRpc3BhdGNoUXVldWUoKQorICAgIDogbV9pc1RocmVhZFJ1bm5pbmcodHJ1ZSkKK3sKKyAg
ICBpbnQgZmRzWzJdOworICAgIGlmIChwaXBlKGZkcykpCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworCisgICAgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yID0gZmRzWzBdOworICAgIG1f
d3JpdGVUb1BpcGVEZXNjcmlwdG9yID0gZmRzWzFdOworICAgIEZEX1pFUk8oJm1fZmlsZURlc2Ny
aXB0b3JTZXQpOworICAgIEZEX1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtX2ZpbGVE
ZXNjcmlwdG9yU2V0KTsKKyAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVE
ZXNjcmlwdG9yOworCisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2Ny
aXB0b3I7Cit9CisKK0Rpc3BhdGNoUXVldWU6On5EaXNwYXRjaFF1ZXVlKCkKK3sKKyAgICBjbG9z
ZShtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOworICAgIGNsb3NlKG1fd3JpdGVUb1BpcGVEZXNj
cmlwdG9yKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpkaXNwYXRjaChzdGQ6OnVuaXF1ZV9w
dHI8V29ya0l0ZW0+IGl0ZW0pCit7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV93b3JrSXRlbXNMb2NrKTsKKyAgICAgICAgbV93b3JrSXRlbXMuYXBwZW5kKHN0ZDo6bW92ZShp
dGVtKSk7CisgICAgfQorCisgICAgd2FrZVVwVGhyZWFkKCk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hR
dWV1ZTo6ZGlzcGF0Y2goc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0pCit7Cisg
ICAgaW5zZXJ0VGltZXJXb3JrSXRlbShzdGQ6Om1vdmUoaXRlbSkpOworICAgIHdha2VVcFRocmVh
ZCgpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OnN0b3BUaHJlYWQoKQoreworICAgIEFTU0VS
VChtX3NvY2tldERlc2NyaXB0b3IgPT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOworCisgICAg
bV9pc1RocmVhZFJ1bm5pbmcgPSBmYWxzZTsKKyAgICB3YWtlVXBUaHJlYWQoKTsKK30KKwordm9p
ZCBEaXNwYXRjaFF1ZXVlOjpzZXRTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9y
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV9zb2Nr
ZXREZXNjcmlwdG9yID09IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0
RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0g
ZnVuY3Rpb247CisKKyAgICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9y
KQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRf
U0VUKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Cit9CisKK3ZvaWQgRGlz
cGF0Y2hRdWV1ZTo6Y2xlYXJTb2NrZXRFdmVudEhhbmRsZXIoKQoreworICAgIEFTU0VSVChtX3Nv
Y2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOworCisgICAgaWYgKG1f
c29ja2V0RGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZp
bGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworCisgICAgRkRfQ0xSKG1f
c29ja2V0RGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworCisgICAgbV9zb2NrZXRE
ZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Cit9CisKK3ZvaWQgRGlzcGF0Y2hR
dWV1ZTo6cGVyZm9ybVdvcmsoKQoreworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8V29ya0l0ZW0+PiB3b3JrSXRlbXM7CisKKyAgICAgICAgeworICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1zTG9jayk7CisgICAgICAgICAg
ICBpZiAobV93b3JrSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgbV93b3JrSXRlbXMuc3dhcCh3b3JrSXRlbXMpOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JrSXRlbXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICB3b3JrSXRlbXNbaV0tPmRpc3BhdGNoKCk7CisgICAgfQorfQorCit2b2lkIERpc3Bh
dGNoUXVldWU6OnBlcmZvcm1UaW1lcldvcmsoKQoreworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8VGltZXJXb3JrSXRlbT4+IHRpbWVyV29ya0l0ZW1zOworCisgICAgeworICAgICAgICAvLyBQ
cm90ZWN0cyBtX3RpbWVyV29ya0l0ZW1zLgorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90
aW1lcldvcmtJdGVtc0xvY2spOworICAgICAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQ29waWVzIGFsbCB0aGUgdGlt
ZXIgd29yayBpdGVtcyBpbiBtX3RpbWVyV29ya0l0ZW1zIHRvIGxvY2FsIHZlY3Rvci4KKyAgICAg
ICAgbV90aW1lcldvcmtJdGVtcy5zd2FwKHRpbWVyV29ya0l0ZW1zKTsKKyAgICB9CisKKyAgICBk
b3VibGUgY3VycmVudFRpbWVTZWNvbmRzID0gY3VycmVudFRpbWUoKTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KCF0aW1lcldvcmtJdGVtc1tpXS0+aGFzRXhwaXJlZChjdXJyZW50VGltZVNlY29uZHMpKSB7Cisg
ICAgICAgICAgICBpbnNlcnRUaW1lcldvcmtJdGVtKHN0ZDo6bW92ZSh0aW1lcldvcmtJdGVtc1tp
XSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBh
IHRpbWVyIHdvcmsgaXRlbSBoYXMgZXhwaXJlZCwgZGlzcGF0Y2ggdGhlIGZ1bmN0aW9uIG9mIHRo
ZSB3b3JrIGl0ZW0uCisgICAgICAgIHRpbWVyV29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgpOworICAg
IH0KK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkK
K3sKKyAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNl
dDsKKworICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURl
c2NyaXB0b3JTZXQsIDAsIDAsIGdldE5leHRUaW1lT3V0KCkpID49IDApIHsKKyAgICAgICAgaWYg
KEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNl
dCkpIHsKKyAgICAgICAgICAgIGNoYXIgbWVzc2FnZTsKKyAgICAgICAgICAgIGlmIChyZWFkKG1f
cmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1lc3NhZ2UsIDEpID09IC0xKQorICAgICAgICAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBEaXNwYXRjaFF1ZXVlIFRocmVhZCBw
aXBlIik7CisKKyAgICAgICAgICAgIEFTU0VSVChtZXNzYWdlID09IHdha2VVcFRocmVhZE1lc3Nh
Z2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZh
bGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFk
RmlsZURlc2NyaXB0b3JTZXQpKQorICAgICAgICAgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsK
KyAgICB9Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6aW5zZXJ0VGltZXJXb3JrSXRlbShzdGQ6
OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBBU1NFUlQoaXRlbSk7CisK
KyAgICBzaXplX3QgcG9zaXRpb24gPSAwOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlt
ZXJXb3JrSXRlbXNMb2NrKTsKKyAgICAvLyBUaGUgaXRlbXMgc2hvdWxkIGJlIG9yZGVyZWQgYnkg
ZXhwaXJlIHRpbWUuCisgICAgZm9yICg7IHBvc2l0aW9uIDwgbV90aW1lcldvcmtJdGVtcy5zaXpl
KCk7ICsrcG9zaXRpb24pCisgICAgICAgIGlmIChpdGVtLT5leHBpcmF0aW9uVGltZVNlY29uZHMo
KSA8IG1fdGltZXJXb3JrSXRlbXNbcG9zaXRpb25dLT5leHBpcmF0aW9uVGltZVNlY29uZHMoKSkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgbV90aW1lcldvcmtJdGVtcy5pbnNlcnQocG9zaXRp
b24sIHN0ZDo6bW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2hR
dWV1ZVRocmVhZCgpCit7CisgICAgd2hpbGUgKG1faXNUaHJlYWRSdW5uaW5nKSB7CisgICAgICAg
IHBlcmZvcm1Xb3JrKCk7CisgICAgICAgIHBlcmZvcm1UaW1lcldvcmsoKTsKKyAgICAgICAgcGVy
Zm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOworICAgIH0KK30KKwordm9pZCBEaXNwYXRjaFF1ZXVl
Ojp3YWtlVXBUaHJlYWQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dyaXRlVG9QaXBl
RGVzY3JpcHRvckxvY2spOworICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwg
Jndha2VVcFRocmVhZE1lc3NhZ2UsIHNpemVvZihjaGFyKSkgPT0gLTEpCisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHdha2UgdXAgRGlzcGF0Y2hRdWV1ZSBUaHJlYWQiKTsKK30KKwordGlt
ZXZhbCogRGlzcGF0Y2hRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQoKSBjb25zdAoreworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgaWYgKG1fdGltZXJXb3Jr
SXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN0YXRpYyB0aW1ldmFs
IHRpbWVWYWx1ZTsKKyAgICB0aW1lVmFsdWUudHZfc2VjID0gMDsKKyAgICB0aW1lVmFsdWUudHZf
dXNlYyA9IDA7CisgICAgZG91YmxlIHRpbWVPdXQgPSBtX3RpbWVyV29ya0l0ZW1zWzBdLT5leHBp
cmF0aW9uVGltZVNlY29uZHMoKSAtIGN1cnJlbnRUaW1lKCk7CisgICAgaWYgKHRpbWVPdXQgPiAw
KSB7CisgICAgICAgIHRpbWVWYWx1ZS50dl9zZWMgPSBzdGF0aWNfY2FzdDxsb25nPih0aW1lT3V0
KTsKKyAgICAgICAgdGltZVZhbHVlLnR2X3VzZWMgPSBzdGF0aWNfY2FzdDxsb25nPigodGltZU91
dCAtIHRpbWVWYWx1ZS50dl9zZWMpICogbWljcm9TZWNvbmRzUGVyU2Vjb25kKTsKKyAgICB9CisK
KyAgICByZXR1cm4gJnRpbWVWYWx1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9l
ZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwNzY0NmUzNDcxNjI4YWFlNjU2MWVl
YjZkNTUxYTUyM2UxNzhmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgRGlzcGF0Y2hRdWV1ZUVmbF9oCisjZGVmaW5lIERpc3BhdGNo
UXVldWVFZmxfaAorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK2NsYXNzIFdvcmtRdWV1ZTsKKworY2xhc3MgV29ya0l0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V29ya0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUqLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7CisgICAgfldvcmtJdGVtKCk7CisgICAgdm9pZCBkaXNwYXRjaCgp
IHsgbV9mdW5jdGlvbigpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXb3JrSXRlbShXb3JrUXVldWUq
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKK3ByaXZhdGU6CisgICAgV29ya1F1ZXVlKiBt
X3dvcmtRdWV1ZTsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Cit9OworCitjbGFz
cyBUaW1lcldvcmtJdGVtIDogcHVibGljIFdvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShXb3JrUXVldWUqLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGRlbGF5KTsKKyAgICBkb3VibGUgZXhwaXJhdGlvblRp
bWVTZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV9leHBpcmF0aW9uVGltZVNlY29uZHM7IH0KKyAg
ICBib29sIGhhc0V4cGlyZWQoZG91YmxlIGN1cnJlbnRUaW1lU2Vjb25kcykgY29uc3QgeyByZXR1
cm4gY3VycmVudFRpbWVTZWNvbmRzID49IG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzOyB9CisKK3By
b3RlY3RlZDoKKyAgICBUaW1lcldvcmtJdGVtKFdvcmtRdWV1ZSosIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mLCBkb3VibGUgZXhwaXJhdGlvblRpbWVTZWNvbmRzKTsKKworcHJpdmF0ZToKKyAgICBk
b3VibGUgbV9leHBpcmF0aW9uVGltZVNlY29uZHM7Cit9OworCitjbGFzcyBEaXNwYXRjaFF1ZXVl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERpc3BhdGNoUXVldWU+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaXNwYXRjaFF1ZXVlPiBjcmVhdGUoY29uc3QgY2hhciog
bmFtZSk7CisgICAgfkRpc3BhdGNoUXVldWUoKTsKKworICAgIHZvaWQgZGlzcGF0Y2goc3RkOjp1
bmlxdWVfcHRyPFdvcmtJdGVtPik7CisgICAgdm9pZCBkaXNwYXRjaChzdGQ6OnVuaXF1ZV9wdHI8
VGltZXJXb3JrSXRlbT4pOworICAgIHZvaWQgc3RvcFRocmVhZCgpOworICAgIHZvaWQgc2V0U29j
a2V0RXZlbnRIYW5kbGVyKGludCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQg
Y2xlYXJTb2NrZXRFdmVudEhhbmRsZXIoKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBUaHJlYWRD
b250ZXh0OworCisgICAgRGlzcGF0Y2hRdWV1ZSgpOworCisgICAgdm9pZCBwZXJmb3JtV29yaygp
OworICAgIHZvaWQgcGVyZm9ybVRpbWVyV29yaygpOworICAgIHZvaWQgcGVyZm9ybUZpbGVEZXNj
cmlwdG9yV29yaygpOworICAgIHZvaWQgaW5zZXJ0VGltZXJXb3JrSXRlbShzdGQ6OnVuaXF1ZV9w
dHI8VGltZXJXb3JrSXRlbT4pOworICAgIHZvaWQgZGlzcGF0Y2hRdWV1ZVRocmVhZCgpOworICAg
IHZvaWQgd2FrZVVwVGhyZWFkKCk7CisgICAgdGltZXZhbCogZ2V0TmV4dFRpbWVPdXQoKSBjb25z
dDsKKworICAgIGZkX3NldCBtX2ZpbGVEZXNjcmlwdG9yU2V0OworICAgIGludCBtX21heEZpbGVE
ZXNjcmlwdG9yOworICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisgICAgaW50IG1f
d3JpdGVUb1BpcGVEZXNjcmlwdG9yOworICAgIE11dGV4IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9y
TG9jazsKKworICAgIGJvb2wgbV9pc1RocmVhZFJ1bm5pbmc7CisKKyAgICBpbnQgbV9zb2NrZXRE
ZXNjcmlwdG9yOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7CisK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdvcmtJdGVtPj4gbV93b3JrSXRlbXM7CisgICAg
TXV0ZXggbV93b3JrSXRlbXNMb2NrOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaW1l
cldvcmtJdGVtPj4gbV90aW1lcldvcmtJdGVtczsKKyAgICBtdXRhYmxlIE11dGV4IG1fdGltZXJX
b3JrSXRlbXNMb2NrOworfTsKKworI2VuZGlmIC8vIERpc3BhdGNoUXVldWVFZmxfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAppbmRleCBlYmRiOGE2Zjhl
OGEwYmYzYjA5OGE4ZGZmMDhhOWNiMzIyNTM0ZWIwLi45OGM0NDY5N2Y1YzI3Yjc0YjcwZTJkN2Qy
Y2M4YmFiZDQyNjhjOWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwv
V29ya1F1ZXVlRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1
ZXVlRWZsLmNwcApAQCAtMjAsMjE5ICsyMCw1MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldvcmtRdWV1ZS5oIgogCi0jaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPERpc3BhdGNoUXVldWVFZmwuaD4KICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAotc3RhdGljIGNvbnN0IGludCBpbnZhbGlkU29ja2V0
RGVzY3JpcHRvciA9IC0xOwotc3RhdGljIGNvbnN0IGludCB0aHJlYWRNZXNzYWdlU2l6ZSA9IDE7
Ci1zdGF0aWMgY29uc3QgY2hhciBmaW5pc2hUaHJlYWRNZXNzYWdlW10gPSAiRiI7Ci1zdGF0aWMg
Y29uc3QgY2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9ICJXIjsKLQotUGFzc093blB0cjxXb3Jr
UXVldWU6OlRpbWVyV29ya0l0ZW0+IFdvcmtRdWV1ZTo6VGltZXJXb3JrSXRlbTo6Y3JlYXRlKEZ1
bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24sIGRvdWJsZSBleHBpcmVUaW1lKQotewotICAgIGlmIChl
eHBpcmVUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFRpbWVyV29ya0l0ZW0oZnVuY3Rpb24sIGV4cGlyZVRpbWUpKTsKLX0KLQotV29y
a1F1ZXVlOjpUaW1lcldvcmtJdGVtOjpUaW1lcldvcmtJdGVtKEZ1bmN0aW9uPHZvaWQoKT4gZnVu
Y3Rpb24sIGRvdWJsZSBleHBpcmVUaW1lKQotICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKLSAg
ICAsIG1fZXhwaXJlVGltZShleHBpcmVUaW1lKQotewotfQotCiB2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgaW50IGZkc1syXTsKLSAg
ICBpZiAocGlwZShmZHMpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIG1f
cmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKLSAgICBtX3dyaXRlVG9QaXBlRGVzY3Jp
cHRvciA9IGZkc1sxXTsKLSAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLSAgICBG
RF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Ci0g
ICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLQotICAg
IG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwotCi0gICAgbV90
aHJlYWRMb29wID0gdHJ1ZTsKLSAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6
OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1l
KTsKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBEaXNwYXRjaFF1ZXVlOjpjcmVhdGUobmFtZSk7CiB9
CiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogewotICAgIHNlbmRNZXNz
YWdlVG9UaHJlYWQoZmluaXNoVGhyZWFkTWVzc2FnZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpw
ZXJmb3JtV29yaygpCi17Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgVmVjdG9yPEZ1bmN0
aW9uPHZvaWQoKT4gPiB3b3JrSXRlbVF1ZXVlOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICAgICAgICAgIGlmICht
X3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgbV93b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0oKTsKLSAgICAgICAgICAgIGRlcmVm
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURl
c2NyaXB0b3JXb3JrKCkKLXsKLSAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9m
aWxlRGVzY3JpcHRvclNldDsKLQotICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciAr
IDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIGdldE5leHRUaW1lT3V0KCkpID49IDAp
IHsKLSAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRG
aWxlRGVzY3JpcHRvclNldCkpIHsKLSAgICAgICAgICAgIGNoYXIgcmVhZEJ1Zlt0aHJlYWRNZXNz
YWdlU2l6ZV07Ci0gICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3Is
IHJlYWRCdWYsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUiKTsKLSAgICAg
ICAgICAgIGlmICghc3RybmNtcChyZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNzYWdlLCB0aHJlYWRN
ZXNzYWdlU2l6ZSkpCi0gICAgICAgICAgICAgICAgbV90aHJlYWRMb29wID0gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXRE
ZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1fc29ja2V0RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3Jp
cHRvclNldCkpCi0gICAgICAgICAgICBtX3NvY2tldEV2ZW50SGFuZGxlcigpOwotICAgIH0KLX0K
LQotc3RydWN0IHRpbWV2YWwqIFdvcmtRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQoKQotewotICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7Ci0gICAgaWYgKG1fdGltZXJX
b3JrSXRlbXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHN0YXRpYyBzdHJ1
Y3QgdGltZXZhbCB0aW1lVmFsdWU7Ci0gICAgdGltZVZhbHVlLnR2X3NlYyA9IDA7Ci0gICAgdGlt
ZVZhbHVlLnR2X3VzZWMgPSAwOwotICAgIGRvdWJsZSB0aW1lT3V0ID0gbV90aW1lcldvcmtJdGVt
c1swXS0+ZXhwaXJlVGltZSgpIC0gY3VycmVudFRpbWUoKTsKLSAgICBpZiAodGltZU91dCA+IDAp
IHsKLSAgICAgICAgdGltZVZhbHVlLnR2X3NlYyA9IHN0YXRpY19jYXN0PGxvbmc+KHRpbWVPdXQp
OwotICAgICAgICB0aW1lVmFsdWUudHZfdXNlYyA9IHN0YXRpY19jYXN0PGxvbmc+KCh0aW1lT3V0
IC0gdGltZVZhbHVlLnR2X3NlYykgKiAxMDAwMDAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gJnRp
bWVWYWx1ZTsKLX0KLQotdm9pZCBXb3JrUXVldWU6Omluc2VydFRpbWVyV29ya0l0ZW0oUGFzc093
blB0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQotewotICAgIGlmICghaXRlbSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3RpbWVyV29ya0l0ZW1zTG9jayk7Ci0gICAgLy8gbV90aW1lcldvcmtJdGVtcyBzaG91bGQg
YmUgb3JkZXJlZCBieSBleHBpcmUgdGltZS4KLSAgICBmb3IgKDsgcG9zaXRpb24gPCBtX3RpbWVy
V29ya0l0ZW1zLnNpemUoKTsgKytwb3NpdGlvbikKLSAgICAgICAgaWYgKGl0ZW0tPmV4cGlyZVRp
bWUoKSA8IG1fdGltZXJXb3JrSXRlbXNbcG9zaXRpb25dLT5leHBpcmVUaW1lKCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgIG1fdGltZXJXb3JrSXRlbXMuaW5zZXJ0KHBvc2l0aW9uLCBpdGVt
KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1UaW1lcldvcmsoKQotewotICAgIFZlY3Rv
cjxPd25QdHI8VGltZXJXb3JrSXRlbT4gPiB0aW1lcldvcmtJdGVtczsKLQotICAgIHsKLSAgICAg
ICAgLy8gUHJvdGVjdHMgbV90aW1lcldvcmtJdGVtcy4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKLSAgICAgICAgaWYgKG1fdGltZXJXb3JrSXRlbXMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIENvcGllcyBhbGwg
dGhlIHRpbWVyIHdvcmsgaXRlbXMgaW4gbV90aW1lcldvcmtJdGVtcyB0byBsb2NhbCB2ZWN0b3Iu
Ci0gICAgICAgIG1fdGltZXJXb3JrSXRlbXMuc3dhcCh0aW1lcldvcmtJdGVtcyk7Ci0gICAgfQot
Ci0gICAgZG91YmxlIGN1cnJlbnQgPSBjdXJyZW50VGltZSgpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB0aW1lcldvcmtJdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIXRp
bWVyV29ya0l0ZW1zW2ldLT5leHBpcmVkKGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAvLyBJZiBh
IHRpbWVyIHdvcmsgaXRlbSBkb2VzIG5vdCBleHBpcmVkLCBrZWVwIGl0IHRvIHRoZSBtX3RpbWVy
V29ya0l0ZW1zLgotICAgICAgICAgICAgLy8gbV90aW1lcldvcmtJdGVtcyBzaG91bGQgYmUgb3Jk
ZXJlZCBieSBleHBpcmUgdGltZS4KLSAgICAgICAgICAgIGluc2VydFRpbWVyV29ya0l0ZW0odGlt
ZXJXb3JrSXRlbXNbaV0ucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gSWYgYSB0aW1lciB3b3JrIGl0ZW0gZXhwaXJlZCwgZGlzcGF0Y2gg
dGhlIGZ1bmN0aW9uIG9mIHRoZSB3b3JrIGl0ZW0uCi0gICAgICAgIHRpbWVyV29ya0l0ZW1zW2ld
LT5kaXNwYXRjaCgpOwotICAgICAgICBkZXJlZigpOwotICAgIH0KLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBNdXRl
eExvY2tlciBsb2NrZXIobV93cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrKTsKLSAgICBpZiAod3Jp
dGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9
PSAtMSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhy
ZWFkIik7Ci19Ci0KLXZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSog
d29ya1F1ZXVlKQotewotICAgIHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgewotICAg
ICAgICB3b3JrUXVldWUtPnBlcmZvcm1Xb3JrKCk7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9y
bVRpbWVyV29yaygpOwotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1GaWxlRGVzY3JpcHRvcldv
cmsoKTsKLSAgICB9Ci0KLSAgICBjbG9zZSh3b3JrUXVldWUtPm1fcmVhZEZyb21QaXBlRGVzY3Jp
cHRvcik7Ci0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7Ci0K
LSAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gZGlzcGF0Y2hRdWV1ZSA9
IG1fZGlzcGF0Y2hRdWV1ZS5yZWxlYXNlKCk7CisgICAgZGlzcGF0Y2hRdWV1ZS0+c3RvcFRocmVh
ZCgpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50
IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIHsKLSAg
ICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKQotICAg
ICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVEZXNjcmlwdG9y
KTsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIG1fc29j
a2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCisg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2Ny
aXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAg
ICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBtX2Rp
c3BhdGNoUXVldWUtPnNldFNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3JpcHRvciwgZnVuY3Rp
b24pOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihp
bnQgZmlsZURlc2NyaXB0b3IpCiB7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNv
Y2tldERlc2NyaXB0b3I7CisgICAgVU5VU0VEX1BBUkFNKGZpbGVEZXNjcmlwdG9yKTsKIAotICAg
IGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQotICAgICAgICBtX21h
eEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIEZEX0NMUihm
aWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIGlmICghbV9kaXNwYXRj
aFF1ZXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rpc3BhdGNoUXVldWUtPmNsZWFyU29j
a2V0RXZlbnRIYW5kbGVyKCk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIHsKLSAgICByZWYoKTsKLQotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotICAgICAgICBtX3dv
cmtJdGVtUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKLSAgICB9CisgICAgaWYgKCFtX2Rpc3BhdGNo
UXVldWUpCisgICAgICAgIHJldHVybjsKIAotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBU
aHJlYWRNZXNzYWdlKTsKKyAgICBtX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNoKFdvcmtJdGVtOjpj
cmVhdGUodGhpcywgZnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0
ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQog
ewotICAgIGlmIChkZWxheSA8IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIE93blB0cjxUaW1l
cldvcmtJdGVtPiB0aW1lcldvcmtJdGVtID0gVGltZXJXb3JrSXRlbTo6Y3JlYXRlKGZ1bmN0aW9u
LCBjdXJyZW50VGltZSgpICsgZGVsYXkpOwotICAgIGlmICghdGltZXJXb3JrSXRlbSkKKyAgICBp
ZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVmKCk7Ci0gICAg
aW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtLnJlbGVhc2UoKSk7Ci0gICAgc2VuZE1l
c3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOworICAgIG1fZGlzcGF0Y2hRdWV1ZS0+
ZGlzcGF0Y2goVGltZXJXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsIGZ1bmN0aW9uLCBkZWxheSkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA4ODA1MGMxOTgzYTY1YmY1N2I0OWRjOWJj
OTc3Y2ZmYzVkZjc1MTliLi5kMmZhMzQ2M2ZjNjY5ZTg2YmM0ZWE3MjJhNDBhMTI5NmIyMjYyYjFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMiw2ICsyLDcgQEAgbGlzdChBUFBFTkQg
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4
LmNwcAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKIAorICAg
IFBsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcAogICAgIFBsYXRmb3JtL2VmbC9Mb2dn
aW5nRWZsLmNwcAogICAgIFBsYXRmb3JtL2VmbC9Nb2R1bGVFZmwuY3BwCiAgICAgUGxhdGZvcm0v
ZWZsL1dvcmtRdWV1ZUVmbC5jcHAKQEAgLTE5Myw2ICsxOTQsNyBAQCBsaXN0KEFQUEVORCBXZWJL
aXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lbmNoYW50IgorICAgICIke1dFQktJ
VDJfRElSfS9QbGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkvYy9l
ZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMvc291cCIKICAgICAiJHtX
RUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIK
</data>
<flag name="review"
          id="236028"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213740</attachid>
            <date>2013-10-08 19:02:09 -0700</date>
            <delta_ts>2013-10-10 21:54:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>workqueue_refactorying.diff</filename>
            <type>text/plain</type>
            <size>27444</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5Nzc0NDE1Li4wMjM0ZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMTMtMTAtMDggIEJ5dW5nd29vIExlZSAgPGJ3ODAubGVlQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtFRkxdW1dLMl0gU2VwYXJhdGUgZGlzcGF0Y2ggY29udGV4dCBmcm9tIFdvcmtRdWV1
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTMz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KKworICAgICAgICBSZWZh
Y3RvciBXb3JrUXVldWUgdG8gcHJldmVudCBkYW5nbGluZyB3b3JrcXVldWUgYWNjZXNzLgorCisg
ICAgICAgIFByZXZpb3VzbHksIHRoZSBXb3JrUXVldWUgY2xhc3MgaGFkIGFsbCBjb250ZXh0IGFi
b3V0IGRpc3BhdGNoLgorICAgICAgICBXb3JrUXVldWUgaGFkIGRpc3BhdGNoIGl0ZW0gcXVldWUg
YW5kIHNvY2tldCBldmVudCBoYW5kbGVyLAorICAgICAgICBhbmQgdGhvc2Ugd2VyZSBhY2Nlc3Nl
ZCBvbiB0aGUgd29yayBxdWV1ZSB0aHJlYWQgdGhyb3VnaCBXb3JrUXVldWUKKyAgICAgICAgaW5z
dGFuY2UuCisKKyAgICAgICAgV2l0aCByZWZlcmVuY2UgY291bnRhYmxlIFdvcmtRdWV1ZSBjb25j
ZXB0LCB0aGlzIGltcGxlbWVudGF0aW9uCisgICAgICAgIGNvbXBsaWNhdGVzIGhhbmRsaW5nIHdv
cmtxdWV1ZSByZWYtY291bnRpbmcgYW5kIGNhdXNlcyBkYW5nbGluZworICAgICAgICB3b3JrcXVl
dWUgYWNjZXNzIHByb2JsZW0uCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXN5IHRvIGhhbmRsZSBX
b3JrUXVldWUgcmVmZXJlbmNlIGNvdW50IGFuZCB0byBwcmV2ZW50CisgICAgICAgIGRhbmdsaW5n
IGFjY2VzcyBwcm9ibGVtLCBEaXNwYXRjaFF1ZXVlIGNsYXNzIGlzIGFkZGVkIHRvIGhhbmRsZQor
ICAgICAgICBkaXNwYXRjaCB0YXNrcywgYW5kIHRoZSBXb3JrUXVldWUgaW5zdGFuY2UgYW5kIERp
c3BhdGNoUXVldWUgdGhyZWFkCisgICAgICAgIHdpbGwgaGF2ZSB0aGUgcmVmZXJlbmNlIGNvdW50
IG9mIHRoZSBEaXNwYXRjaFF1ZXVlIGluc3RhbmNlIHRvIHByZXZlbnQKKyAgICAgICAgZGFuZ2xp
bmcgYWNjZXNzLgorCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAgICAgICog
UGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKERpc3Bh
dGNoUXVldWU6OlRocmVhZENvbnRleHQ6OnN0YXJ0KToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6
OlRocmVhZENvbnRleHQ6OlRocmVhZENvbnRleHQpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6
VGhyZWFkQ29udGV4dDo6ZnVuY3Rpb24pOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6Y3JlYXRl
KToKKyAgICAgICAgKERpc3BhdGNoUXVldWU6OkRpc3BhdGNoUXVldWUpOgorICAgICAgICAoRGlz
cGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVldWUpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6ZGlz
cGF0Y2gpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6c3RvcFRocmVhZCk6CisgICAgICAgIChE
aXNwYXRjaFF1ZXVlOjpzZXRTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoRGlzcGF0Y2hR
dWV1ZTo6Y2xlYXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6
cGVyZm9ybVdvcmspOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVRpbWVyV29yayk6
CisgICAgICAgIChEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKToKKyAg
ICAgICAgKERpc3BhdGNoUXVldWU6Omluc2VydFRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoRGlz
cGF0Y2hRdWV1ZTo6ZGlzcGF0Y2hRdWV1ZVRocmVhZCk6CisgICAgICAgIChEaXNwYXRjaFF1ZXVl
Ojp3YWtlVXBUaHJlYWQpOgorICAgICAgICAoRGlzcGF0Y2hRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQp
OgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmg6IEFkZGVkLgorICAg
ICAgICAqIFBsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmwuaDogQWRkZWQuCisg
ICAgICAgIChXb3JrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdvcmtJdGVtOjpkaXNwYXRjaCk6
CisgICAgICAgIChXb3JrSXRlbTo6V29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6
Y3JlYXRlKToKKyAgICAgICAgKFRpbWVyV29ya0l0ZW06OmV4cGlyYXRpb25UaW1lU2Vjb25kcyk6
CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpoYXNFeHBpcmVkKToKKyAgICAgICAgKFRpbWVyV29y
a0l0ZW06OlRpbWVyV29ya0l0ZW0pOgorICAgICAgICAqIFBsYXRmb3JtL2VmbC9Xb3JrUXVldWVF
ZmwuY3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpy
ZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0
ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6Cisg
ICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6CisKIDIwMTMtMTAtMDggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWJQcm9jZXNzIGNyYXNoIG9uIFNBUCBXZWJDeWNsZSB3ZWIg
YXBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCmluZGV4IDlhMjhkOTAuLjM4NjE0MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCkBAIC00OSw3ICs0OSw3IEBACiAjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogdHlwZWRlZiBnYm9vbGVhbiAoKkdTb3VyY2VG
dW5jKSAoZ3BvaW50ZXIgZGF0YSk7CiAjZWxpZiBQTEFURk9STShFRkwpCi0jaW5jbHVkZSA8RWNv
cmUuaD4KKyNpbmNsdWRlIDxEaXNwYXRjaFF1ZXVlRWZsLmg+CiAjZW5kaWYKIAogY2xhc3MgV29y
a1F1ZXVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdvcmtRdWV1ZT4gewpAQCAtOTgs
NDYgKzk4LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPGludCwgVmVjdG9yPFNvY2tldEV2ZW50
U291cmNlKj4+IG1fZXZlbnRTb3VyY2VzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFZlY3Rv
cjxTb2NrZXRFdmVudFNvdXJjZSo+Pjo6aXRlcmF0b3IgU29ja2V0RXZlbnRTb3VyY2VJdGVyYXRv
cjsKICNlbGlmIFBMQVRGT1JNKEVGTCkKLSAgICBjbGFzcyBUaW1lcldvcmtJdGVtIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShG
dW5jdGlvbjx2b2lkKCk+LCBkb3VibGUgZXhwaXJlVGltZSk7Ci0gICAgICAgIHZvaWQgZGlzcGF0
Y2goKSB7IG1fZnVuY3Rpb24oKTsgfQotICAgICAgICBkb3VibGUgZXhwaXJlVGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwaXJlVGltZTsgfQotICAgICAgICBib29sIGV4cGlyZWQoZG91YmxlIGN1
cnJlbnRUaW1lKSBjb25zdCB7IHJldHVybiBjdXJyZW50VGltZSA+PSBtX2V4cGlyZVRpbWU7IH0K
LQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgVGltZXJXb3JrSXRlbShGdW5jdGlvbjx2b2lkKCk+
LCBkb3VibGUgZXhwaXJlVGltZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbjx2
b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgICAgIGRvdWJsZSBtX2V4cGlyZVRpbWU7Ci0gICAgfTsK
LQotICAgIGZkX3NldCBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotICAgIGludCBtX21heEZpbGVEZXNj
cmlwdG9yOwotICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yOwotICAgIE11dGV4IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9j
azsKLQotICAgIGJvb2wgbV90aHJlYWRMb29wOwotCi0gICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQo
KT4+IG1fd29ya0l0ZW1RdWV1ZTsKLSAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotCi0g
ICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0
RXZlbnRIYW5kbGVyOwotCi0gICAgVmVjdG9yPE93blB0cjxUaW1lcldvcmtJdGVtPj4gbV90aW1l
cldvcmtJdGVtczsKLSAgICBNdXRleCBtX3RpbWVyV29ya0l0ZW1zTG9jazsKLQotICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7Ci0gICAgc3RhdGljIHZvaWQqIHdvcmtR
dWV1ZVRocmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7Ci0gICAgdm9p
ZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgc3RhdGljIGRvdWJsZSBnZXRDdXJy
ZW50VGltZSgpOwotICAgIHN0cnVjdCB0aW1ldmFsKiBnZXROZXh0VGltZU91dCgpOwotICAgIHZv
aWQgcGVyZm9ybVRpbWVyV29yaygpOwotICAgIHZvaWQgaW5zZXJ0VGltZXJXb3JrSXRlbShQYXNz
T3duUHRyPFRpbWVyV29ya0l0ZW0+KTsKKyAgICBSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gbV9kaXNw
YXRjaFF1ZXVlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9l
ZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTVjYzEyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2Vm
bC9EaXNwYXRjaFF1ZXVlRWZsLmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGF0Y2hRdWV1ZUVmbC5o
IgorCisjaW5jbHVkZSA8RGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsLmg+CisjaW5jbHVkZSA8c3lz
L3RpbWVyZmQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworc3RhdGljIGNvbnN0
IGludCBtaWNyb1NlY29uZHNQZXJTZWNvbmQgPSAxMDAwMDAwOworc3RhdGljIGNvbnN0IGludCBp
bnZhbGlkU29ja2V0RGVzY3JpcHRvciA9IC0xOworc3RhdGljIGNvbnN0IGNoYXIgd2FrZVVwVGhy
ZWFkTWVzc2FnZSA9ICdXJzsKKworY2xhc3MgRGlzcGF0Y2hRdWV1ZTo6VGhyZWFkQ29udGV4dCB7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc3RhcnQoY29uc3QgY2hhciogbmFtZSwgUGFzc1Jl
ZlB0cjxEaXNwYXRjaFF1ZXVlPiBkaXNwYXRjaFF1ZXVlKQorICAgIHsKKyAgICAgICAgLy8gVGhl
IERpc3BhdGNoUXVldWVUaHJlYWRDb250ZXh0IGluc3RhbmNlIHdpbGwgYmUgcGFzc2VkIHRvIHRo
ZSB0aHJlYWQgZnVuY3Rpb24gYW5kIGRlbGV0ZWQgaW4gaXQuCisgICAgICAgIGNyZWF0ZVRocmVh
ZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZUaHJlYWRDb250ZXh0Ojpm
dW5jdGlvbiksIG5ldyBUaHJlYWRDb250ZXh0KGRpc3BhdGNoUXVldWUpLCBuYW1lKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVGhyZWFkQ29udGV4dChQYXNzUmVmUHRyPERpc3BhdGNoUXVldWU+
IGRpc3BhdGNoUXVldWUpCisgICAgICAgIDogbV9kaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUp
CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBmdW5jdGlvbihUaHJlYWRDb250ZXh0
KiB0aHJlYWRDb250ZXh0KQorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZENv
bnRleHQ+KHRocmVhZENvbnRleHQpLT5tX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNoUXVldWVUaHJl
YWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPERpc3BhdGNoUXVl
dWU+IG1fZGlzcGF0Y2hRdWV1ZTsKK307CisKK1Bhc3NSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gRGlz
cGF0Y2hRdWV1ZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgUmVmUHRyPERpc3Bh
dGNoUXVldWU+IGRpc3BhdGNoUXVldWUgPSBhZG9wdFJlZjxEaXNwYXRjaFF1ZXVlPihuZXcgRGlz
cGF0Y2hRdWV1ZSgpKTsKKworICAgIFRocmVhZENvbnRleHQ6OnN0YXJ0KG5hbWUsIGRpc3BhdGNo
UXVldWUpOworCisgICAgcmV0dXJuIGRpc3BhdGNoUXVldWUucmVsZWFzZSgpOworfQorCitEaXNw
YXRjaFF1ZXVlOjpEaXNwYXRjaFF1ZXVlKCkKKyAgICA6IG1faXNUaHJlYWRSdW5uaW5nKHRydWUp
Cit7CisgICAgaW50IGZkc1syXTsKKyAgICBpZiAocGlwZShmZHMpKQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKworICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsK
KyAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2Zp
bGVEZXNjcmlwdG9yU2V0KTsKKyAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAm
bV9maWxlRGVzY3JpcHRvclNldCk7CisgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvcjsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2Nr
ZXREZXNjcmlwdG9yOworfQorCitEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1ZSgpCit7Cisg
ICAgY2xvc2UobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKKyAgICBjbG9zZShtX3dyaXRlVG9Q
aXBlRGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2goc3RkOjp1
bmlxdWVfcHRyPFdvcmtJdGVtPiBpdGVtKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fd29ya0l0ZW1zTG9jayk7CisgICAgICAgIG1fd29ya0l0ZW1zLmFwcGVuZChzdGQ6
Om1vdmUoaXRlbSkpOworICAgIH0KKworICAgIHdha2VVcFRocmVhZCgpOworfQorCit2b2lkIERp
c3BhdGNoUXVldWU6OmRpc3BhdGNoKHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPiBpdGVt
KQoreworICAgIGluc2VydFRpbWVyV29ya0l0ZW0oc3RkOjptb3ZlKGl0ZW0pKTsKKyAgICB3YWtl
VXBUaHJlYWQoKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpzdG9wVGhyZWFkKCkKK3sKKyAg
ICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yID09IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKTsK
KworICAgIG1faXNUaHJlYWRSdW5uaW5nID0gZmFsc2U7CisgICAgd2FrZVVwVGhyZWFkKCk7Cit9
CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6c2V0U29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVz
Y3JpcHRvciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgQVNTRVJU
KG1fc29ja2V0RGVzY3JpcHRvciA9PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7CisKKyAgICBt
X3NvY2tldERlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAgICBtX3NvY2tldEV2ZW50SGFu
ZGxlciA9IGZ1bmN0aW9uOworCisgICAgaWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVz
Y3JpcHRvcikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwor
ICAgIEZEX1NFVChmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworfQorCit2
b2lkIERpc3BhdGNoUXVldWU6OmNsZWFyU29ja2V0RXZlbnRIYW5kbGVyKCkKK3sKKyAgICBBU1NF
UlQobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKTsKKworICAg
IGlmIChtX3NvY2tldERlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKKyAgICAgICAg
bV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKworICAgIEZE
X0NMUihtX3NvY2tldERlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKworICAgIG1f
c29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOworfQorCit2b2lkIERp
c3BhdGNoUXVldWU6OnBlcmZvcm1Xb3JrKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdvcmtJdGVtPj4gd29ya0l0ZW1zOworCisgICAgICAg
IHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtc0xvY2spOworICAg
ICAgICAgICAgaWYgKG1fd29ya0l0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIG1fd29ya0l0ZW1zLnN3YXAod29ya0l0ZW1zKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1zLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgd29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgpOworICAgIH0KK30KKwordm9p
ZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKCkKK3sKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+PiB0aW1lcldvcmtJdGVtczsKKworICAgIHsKKyAgICAg
ICAgLy8gUHJvdGVjdHMgbV90aW1lcldvcmtJdGVtcy4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKKyAgICAgICAgaWYgKG1fdGltZXJXb3JrSXRlbXMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENvcGllcyBhbGwg
dGhlIHRpbWVyIHdvcmsgaXRlbXMgaW4gbV90aW1lcldvcmtJdGVtcyB0byBsb2NhbCB2ZWN0b3Iu
CisgICAgICAgIG1fdGltZXJXb3JrSXRlbXMuc3dhcCh0aW1lcldvcmtJdGVtcyk7CisgICAgfQor
CisgICAgZG91YmxlIGN1cnJlbnRUaW1lU2Vjb25kcyA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmICghdGltZXJXb3JrSXRlbXNbaV0tPmhhc0V4cGlyZWQoY3VycmVudFRpbWVTZWNvbmRz
KSkgeworICAgICAgICAgICAgaW5zZXJ0VGltZXJXb3JrSXRlbShzdGQ6Om1vdmUodGltZXJXb3Jr
SXRlbXNbaV0pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgYSB0aW1lciB3b3JrIGl0ZW0gaGFzIGV4cGlyZWQsIGRpc3BhdGNoIHRoZSBmdW5jdGlv
biBvZiB0aGUgd29yayBpdGVtLgorICAgICAgICB0aW1lcldvcmtJdGVtc1tpXS0+ZGlzcGF0Y2go
KTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9y
V29yaygpCit7CisgICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9IG1fZmlsZURlc2Ny
aXB0b3JTZXQ7CisKKyAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0b3IgKyAxLCAmcmVh
ZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBnZXROZXh0VGltZU91dCgpKSA+PSAwKSB7CisgICAg
ICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2Ny
aXB0b3JTZXQpKSB7CisgICAgICAgICAgICBjaGFyIG1lc3NhZ2U7CisgICAgICAgICAgICBpZiAo
cmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtZXNzYWdlLCAxKSA9PSAtMSkKKyAgICAg
ICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gRGlzcGF0Y2hRdWV1ZSBU
aHJlYWQgcGlwZSIpOworCisgICAgICAgICAgICBBU1NFUlQobWVzc2FnZSA9PSB3YWtlVXBUaHJl
YWRNZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3Ig
IT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlwdG9y
LCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKKyAgICAgICAgICAgIG1fc29ja2V0RXZlbnRIYW5k
bGVyKCk7CisgICAgfQorfQorCit2b2lkIERpc3BhdGNoUXVldWU6Omluc2VydFRpbWVyV29ya0l0
ZW0oc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgQVNTRVJUKGl0
ZW0pOworCisgICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKKworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgLy8gVGhlIGl0ZW1zIHNob3VsZCBiZSBvcmRl
cmVkIGJ5IGV4cGlyZSB0aW1lLgorICAgIGZvciAoOyBwb3NpdGlvbiA8IG1fdGltZXJXb3JrSXRl
bXMuc2l6ZSgpOyArK3Bvc2l0aW9uKQorICAgICAgICBpZiAoaXRlbS0+ZXhwaXJhdGlvblRpbWVT
ZWNvbmRzKCkgPCBtX3RpbWVyV29ya0l0ZW1zW3Bvc2l0aW9uXS0+ZXhwaXJhdGlvblRpbWVTZWNv
bmRzKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgIG1fdGltZXJXb3JrSXRlbXMuaW5zZXJ0
KHBvc2l0aW9uLCBzdGQ6Om1vdmUoaXRlbSkpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmRp
c3BhdGNoUXVldWVUaHJlYWQoKQoreworICAgIHdoaWxlIChtX2lzVGhyZWFkUnVubmluZykgewor
ICAgICAgICBwZXJmb3JtV29yaygpOworICAgICAgICBwZXJmb3JtVGltZXJXb3JrKCk7CisgICAg
ICAgIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGF0
Y2hRdWV1ZTo6d2FrZVVwVGhyZWFkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV93cml0
ZVRvUGlwZURlc2NyaXB0b3JMb2NrKTsKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2Ny
aXB0b3IsICZ3YWtlVXBUaHJlYWRNZXNzYWdlLCBzaXplb2YoY2hhcikpID09IC0xKQorICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byB3YWtlIHVwIERpc3BhdGNoUXVldWUgVGhyZWFkIik7Cit9
CisKK3RpbWV2YWwqIERpc3BhdGNoUXVldWU6OmdldE5leHRUaW1lT3V0KCkgY29uc3QKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOworICAgIGlmIChtX3Rp
bWVyV29ya0l0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzdGF0aWMg
dGltZXZhbCB0aW1lVmFsdWU7CisgICAgdGltZVZhbHVlLnR2X3NlYyA9IDA7CisgICAgdGltZVZh
bHVlLnR2X3VzZWMgPSAwOworICAgIGRvdWJsZSB0aW1lT3V0ID0gbV90aW1lcldvcmtJdGVtc1sw
XS0+ZXhwaXJhdGlvblRpbWVTZWNvbmRzKCkgLSBjdXJyZW50VGltZSgpOworICAgIGlmICh0aW1l
T3V0ID4gMCkgeworICAgICAgICB0aW1lVmFsdWUudHZfc2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4o
dGltZU91dCk7CisgICAgICAgIHRpbWVWYWx1ZS50dl91c2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4o
KHRpbWVPdXQgLSB0aW1lVmFsdWUudHZfc2VjKSAqIG1pY3JvU2Vjb25kc1BlclNlY29uZCk7Cisg
ICAgfQorCisgICAgcmV0dXJuICZ0aW1lVmFsdWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44N2EyZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRGlzcGF0Y2hRdWV1ZUVmbF9oCisjZGVmaW5lIERpc3BhdGNoUXVl
dWVFZmxfaAorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K2NsYXNzIFRpbWVyV29ya0l0ZW07CitjbGFzcyBXb3JrSXRlbTsKKworY2xhc3MgRGlzcGF0Y2hR
dWV1ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEaXNwYXRjaFF1ZXVlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gY3JlYXRlKGNvbnN0IGNo
YXIqIG5hbWUpOworICAgIH5EaXNwYXRjaFF1ZXVlKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoKHN0
ZDo6dW5pcXVlX3B0cjxXb3JrSXRlbT4pOworICAgIHZvaWQgZGlzcGF0Y2goc3RkOjp1bmlxdWVf
cHRyPFRpbWVyV29ya0l0ZW0+KTsKKyAgICB2b2lkIHN0b3BUaHJlYWQoKTsKKyAgICB2b2lkIHNl
dFNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2
b2lkIGNsZWFyU29ja2V0RXZlbnRIYW5kbGVyKCk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgVGhy
ZWFkQ29udGV4dDsKKworICAgIERpc3BhdGNoUXVldWUoKTsKKworICAgIHZvaWQgcGVyZm9ybVdv
cmsoKTsKKyAgICB2b2lkIHBlcmZvcm1UaW1lcldvcmsoKTsKKyAgICB2b2lkIHBlcmZvcm1GaWxl
RGVzY3JpcHRvcldvcmsoKTsKKyAgICB2b2lkIGluc2VydFRpbWVyV29ya0l0ZW0oc3RkOjp1bmlx
dWVfcHRyPFRpbWVyV29ya0l0ZW0+KTsKKyAgICB2b2lkIGRpc3BhdGNoUXVldWVUaHJlYWQoKTsK
KyAgICB2b2lkIHdha2VVcFRocmVhZCgpOworICAgIHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCkg
Y29uc3Q7CisKKyAgICBmZF9zZXQgbV9maWxlRGVzY3JpcHRvclNldDsKKyAgICBpbnQgbV9tYXhG
aWxlRGVzY3JpcHRvcjsKKyAgICBpbnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIGlu
dCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcjsKKyAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3Jp
cHRvckxvY2s7CisKKyAgICBib29sIG1faXNUaHJlYWRSdW5uaW5nOworCisgICAgaW50IG1fc29j
a2V0RGVzY3JpcHRvcjsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVy
OworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXb3JrSXRlbT4+IG1fd29ya0l0ZW1zOwor
ICAgIE11dGV4IG1fd29ya0l0ZW1zTG9jazsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
VGltZXJXb3JrSXRlbT4+IG1fdGltZXJXb3JrSXRlbXM7CisgICAgbXV0YWJsZSBNdXRleCBtX3Rp
bWVyV29ya0l0ZW1zTG9jazsKK307CisKKyNlbmRpZiAvLyBEaXNwYXRjaFF1ZXVlRWZsX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0
ZW1FZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0
ZW1FZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjEzOTk0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVX
b3JrSXRlbUVmbC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBEaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmxfaAorI2RlZmluZSBEaXNwYXRjaFF1ZXVlV29y
a0l0ZW1FZmxfaAorCisjaW5jbHVkZSA8V29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK2NsYXNzIFdvcmtJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdvcmtJdGVtPiBjcmVhdGUo
UGFzc1JlZlB0cjxXb3JrUXVldWU+IHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFdvcmtJdGVt
PihuZXcgV29ya0l0ZW0od29ya1F1ZXVlLCBmdW5jdGlvbikpOworICAgIH0KKyAgICB2b2lkIGRp
c3BhdGNoKCkgeyBtX2Z1bmN0aW9uKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdvcmtJdGVtKFBh
c3NSZWZQdHI8V29ya1F1ZXVlPiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uKQorICAgICAgICA6IG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKKyAgICAgICAgLCBtX2Z1
bmN0aW9uKGZ1bmN0aW9uKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdv
cmtRdWV1ZT4gbV93b3JrUXVldWU7CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwor
fTsKKworY2xhc3MgVGltZXJXb3JrSXRlbSA6IHB1YmxpYyBXb3JrSXRlbSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPiBjcmVhdGUoUGFzc1JlZlB0
cjxXb3JrUXVldWU+IHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24s
IGRvdWJsZSBkZWxheVNlY29uZHMpCisgICAgeworICAgICAgICBBU1NFUlQoZGVsYXlTZWNvbmRz
ID49IDApOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+KG5l
dyBUaW1lcldvcmtJdGVtKHdvcmtRdWV1ZSwgZnVuY3Rpb24sIGN1cnJlbnRUaW1lKCkgKyBkZWxh
eVNlY29uZHMpKTsKKyAgICB9CisgICAgZG91YmxlIGV4cGlyYXRpb25UaW1lU2Vjb25kcygpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwaXJhdGlvblRpbWVTZWNvbmRzOyB9CisgICAgYm9vbCBoYXNFeHBp
cmVkKGRvdWJsZSBjdXJyZW50VGltZVNlY29uZHMpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaW1l
U2Vjb25kcyA+PSBtX2V4cGlyYXRpb25UaW1lU2Vjb25kczsgfQorCitwcm90ZWN0ZWQ6CisgICAg
VGltZXJXb3JrSXRlbShQYXNzUmVmUHRyPFdvcmtRdWV1ZT4gd29ya1F1ZXVlLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyYXRpb25UaW1lU2Vjb25kcykKKyAg
ICAgICAgOiBXb3JrSXRlbSh3b3JrUXVldWUsIGZ1bmN0aW9uKQorICAgICAgICAsIG1fZXhwaXJh
dGlvblRpbWVTZWNvbmRzKGV4cGlyYXRpb25UaW1lU2Vjb25kcykKKyAgICB7CisgICAgfQorCitw
cml2YXRlOgorICAgIGRvdWJsZSBtX2V4cGlyYXRpb25UaW1lU2Vjb25kczsKK307CisKKyNlbmRp
ZiAvLyBEaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9lZmwvV29ya1F1ZXVlRWZsLmNwcAppbmRleCBlYmRiOGE2Li44YjFmYWQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMjAsMjE5ICsyMCw1
MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogCi0jaW5j
bHVkZSA8c3lzL3RpbWVyZmQuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotCi1zdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2NrZXRE
ZXNjcmlwdG9yID0gLTE7Ci1zdGF0aWMgY29uc3QgaW50IHRocmVhZE1lc3NhZ2VTaXplID0gMTsK
LXN0YXRpYyBjb25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9ICJGIjsKLXN0YXRpYyBj
b25zdCBjaGFyIHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlciOwotCi1QYXNzT3duUHRyPFdvcmtR
dWV1ZTo6VGltZXJXb3JrSXRlbT4gV29ya1F1ZXVlOjpUaW1lcldvcmtJdGVtOjpjcmVhdGUoRnVu
Y3Rpb248dm9pZCgpPiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyZVRpbWUpCi17Ci0gICAgaWYgKGV4
cGlyZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgVGltZXJXb3JrSXRlbShmdW5jdGlvbiwgZXhwaXJlVGltZSkpOwotfQotCi1Xb3Jr
UXVldWU6OlRpbWVyV29ya0l0ZW06OlRpbWVyV29ya0l0ZW0oRnVuY3Rpb248dm9pZCgpPiBmdW5j
dGlvbiwgZG91YmxlIGV4cGlyZVRpbWUpCi0gICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAg
ICwgbV9leHBpcmVUaW1lKGV4cGlyZVRpbWUpCi17Ci19CisjaW5jbHVkZSA8RGlzcGF0Y2hRdWV1
ZUVmbC5oPgorI2luY2x1ZGUgPERpc3BhdGNoUXVldWVXb3JrSXRlbUVmbC5oPgogCiB2b2lkIFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgaW50
IGZkc1syXTsKLSAgICBpZiAocGlwZShmZHMpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLQotICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKLSAgICBtX3dyaXRl
VG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKLSAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9y
U2V0KTsKLSAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3Jp
cHRvclNldCk7Ci0gICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3Jp
cHRvcjsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9y
OwotCi0gICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKLSAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnBy
ZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQp
LCB0aGlzLCBuYW1lKTsKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBEaXNwYXRjaFF1ZXVlOjpjcmVh
dGUobmFtZSk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogewot
ICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhyZWFkTWVzc2FnZSk7Ci19Ci0KLXZvaWQg
V29ya1F1ZXVlOjpwZXJmb3JtV29yaygpCi17Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
VmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiB3b3JrSXRlbVF1ZXVlOwotCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICAg
ICAgICAgIGlmIChtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgbV93b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVl
dWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0oKTsKLSAgICAg
ICAgICAgIGRlcmVmKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpw
ZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKLXsKLSAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlw
dG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKLQotICAgIGlmIChzZWxlY3QobV9tYXhGaWxl
RGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIGdldE5leHRUaW1l
T3V0KCkpID49IDApIHsKLSAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3Jp
cHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKLSAgICAgICAgICAgIGNoYXIgcmVhZEJ1
Zlt0aHJlYWRNZXNzYWdlU2l6ZV07Ci0gICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlw
ZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBp
cGUiKTsKLSAgICAgICAgICAgIGlmICghc3RybmNtcChyZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNz
YWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkpCi0gICAgICAgICAgICAgICAgbV90aHJlYWRMb29wID0g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGlu
dmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1fc29ja2V0RGVzY3JpcHRvciwgJnJl
YWRGaWxlRGVzY3JpcHRvclNldCkpCi0gICAgICAgICAgICBtX3NvY2tldEV2ZW50SGFuZGxlcigp
OwotICAgIH0KLX0KLQotc3RydWN0IHRpbWV2YWwqIFdvcmtRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQo
KQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7Ci0gICAg
aWYgKG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lVmFsdWU7Ci0gICAgdGltZVZhbHVlLnR2X3NlYyA9
IDA7Ci0gICAgdGltZVZhbHVlLnR2X3VzZWMgPSAwOwotICAgIGRvdWJsZSB0aW1lT3V0ID0gbV90
aW1lcldvcmtJdGVtc1swXS0+ZXhwaXJlVGltZSgpIC0gY3VycmVudFRpbWUoKTsKLSAgICBpZiAo
dGltZU91dCA+IDApIHsKLSAgICAgICAgdGltZVZhbHVlLnR2X3NlYyA9IHN0YXRpY19jYXN0PGxv
bmc+KHRpbWVPdXQpOwotICAgICAgICB0aW1lVmFsdWUudHZfdXNlYyA9IHN0YXRpY19jYXN0PGxv
bmc+KCh0aW1lT3V0IC0gdGltZVZhbHVlLnR2X3NlYykgKiAxMDAwMDAwKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gJnRpbWVWYWx1ZTsKLX0KLQotdm9pZCBXb3JrUXVldWU6Omluc2VydFRpbWVyV29y
a0l0ZW0oUGFzc093blB0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQotewotICAgIGlmICghaXRlbSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKLQotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7Ci0gICAgLy8gbV90aW1lcldvcmtJ
dGVtcyBzaG91bGQgYmUgb3JkZXJlZCBieSBleHBpcmUgdGltZS4KLSAgICBmb3IgKDsgcG9zaXRp
b24gPCBtX3RpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytwb3NpdGlvbikKLSAgICAgICAgaWYgKGl0
ZW0tPmV4cGlyZVRpbWUoKSA8IG1fdGltZXJXb3JrSXRlbXNbcG9zaXRpb25dLT5leHBpcmVUaW1l
KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgIG1fdGltZXJXb3JrSXRlbXMuaW5zZXJ0KHBv
c2l0aW9uLCBpdGVtKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1UaW1lcldvcmsoKQot
ewotICAgIFZlY3RvcjxPd25QdHI8VGltZXJXb3JrSXRlbT4gPiB0aW1lcldvcmtJdGVtczsKLQot
ICAgIHsKLSAgICAgICAgLy8gUHJvdGVjdHMgbV90aW1lcldvcmtJdGVtcy4KLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKLSAgICAgICAgaWYgKG1fdGlt
ZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8v
IENvcGllcyBhbGwgdGhlIHRpbWVyIHdvcmsgaXRlbXMgaW4gbV90aW1lcldvcmtJdGVtcyB0byBs
b2NhbCB2ZWN0b3IuCi0gICAgICAgIG1fdGltZXJXb3JrSXRlbXMuc3dhcCh0aW1lcldvcmtJdGVt
cyk7Ci0gICAgfQotCi0gICAgZG91YmxlIGN1cnJlbnQgPSBjdXJyZW50VGltZSgpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aW1lcldvcmtJdGVtcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoIXRpbWVyV29ya0l0ZW1zW2ldLT5leHBpcmVkKGN1cnJlbnQpKSB7Ci0gICAgICAg
ICAgICAvLyBJZiBhIHRpbWVyIHdvcmsgaXRlbSBkb2VzIG5vdCBleHBpcmVkLCBrZWVwIGl0IHRv
IHRoZSBtX3RpbWVyV29ya0l0ZW1zLgotICAgICAgICAgICAgLy8gbV90aW1lcldvcmtJdGVtcyBz
aG91bGQgYmUgb3JkZXJlZCBieSBleHBpcmUgdGltZS4KLSAgICAgICAgICAgIGluc2VydFRpbWVy
V29ya0l0ZW0odGltZXJXb3JrSXRlbXNbaV0ucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgYSB0aW1lciB3b3JrIGl0ZW0gZXhwaXJl
ZCwgZGlzcGF0Y2ggdGhlIGZ1bmN0aW9uIG9mIHRoZSB3b3JrIGl0ZW0uCi0gICAgICAgIHRpbWVy
V29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgpOwotICAgICAgICBkZXJlZigpOwotICAgIH0KLX0KLQot
dm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciogbWVzc2FnZSkK
LXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93cml0ZVRvUGlwZURlc2NyaXB0b3JMb2NrKTsK
LSAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1l
c3NhZ2VTaXplKSA9PSAtMSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBX
b3JrUXVldWUgVGhyZWFkIik7Ci19Ci0KLXZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFk
KFdvcmtRdWV1ZSogd29ya1F1ZXVlKQotewotICAgIHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFk
TG9vcCkgewotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1Xb3JrKCk7Ci0gICAgICAgIHdvcmtR
dWV1ZS0+cGVyZm9ybVRpbWVyV29yaygpOwotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1GaWxl
RGVzY3JpcHRvcldvcmsoKTsKLSAgICB9Ci0KLSAgICBjbG9zZSh3b3JrUXVldWUtPm1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3dyaXRlVG9QaXBlRGVz
Y3JpcHRvcik7Ci0KLSAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gZGlz
cGF0Y2hRdWV1ZSA9IG1fZGlzcGF0Y2hRdWV1ZS5yZWxlYXNlKCk7CisgICAgZGlzcGF0Y2hRdWV1
ZS0+c3RvcFRocmVhZCgpOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVu
dEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbikKIHsKLSAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNj
cmlwdG9yKQotICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0ZXJkLiIsIGZp
bGVEZXNjcmlwdG9yKTsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9y
OwotICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisgICAgaWYgKCFtX2Rpc3Bh
dGNoUXVldWUpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1f
bWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVz
Y3JpcHRvcjsKLSAgICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0
KTsKKyAgICBtX2Rpc3BhdGNoUXVldWUtPnNldFNvY2tldEV2ZW50SGFuZGxlcihmaWxlRGVzY3Jp
cHRvciwgZnVuY3Rpb24pOwogfQogCiB2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2
ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCiB7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9y
ID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7CisgICAgVU5VU0VEX1BBUkFNKGZpbGVEZXNjcmlw
dG9yKTsKIAotICAgIGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQot
ICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwot
ICAgIEZEX0NMUihmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIGlm
ICghbV9kaXNwYXRjaFF1ZXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rpc3BhdGNoUXVl
dWUtPmNsZWFyU29ja2V0RXZlbnRIYW5kbGVyKCk7CiB9CiAKIHZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIHsKLSAgICByZWYoKTsKLQot
ICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwot
ICAgICAgICBtX3dvcmtJdGVtUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKLSAgICB9CisgICAgaWYg
KCFtX2Rpc3BhdGNoUXVldWUpCisgICAgICAgIHJldHVybjsKIAotICAgIHNlbmRNZXNzYWdlVG9U
aHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKKyAgICBtX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNo
KFdvcmtJdGVtOjpjcmVhdGUodGhpcywgZnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6
OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91
YmxlIGRlbGF5KQogewotICAgIGlmIChkZWxheSA8IDApCi0gICAgICAgIHJldHVybjsKLQotICAg
IE93blB0cjxUaW1lcldvcmtJdGVtPiB0aW1lcldvcmtJdGVtID0gVGltZXJXb3JrSXRlbTo6Y3Jl
YXRlKGZ1bmN0aW9uLCBjdXJyZW50VGltZSgpICsgZGVsYXkpOwotICAgIGlmICghdGltZXJXb3Jr
SXRlbSkKKyAgICBpZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
cmVmKCk7Ci0gICAgaW5zZXJ0VGltZXJXb3JrSXRlbSh0aW1lcldvcmtJdGVtLnJlbGVhc2UoKSk7
Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOworICAgIG1fZGlz
cGF0Y2hRdWV1ZS0+ZGlzcGF0Y2goVGltZXJXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsIGZ1bmN0aW9u
LCBkZWxheSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA4ODA1MGMxLi5kMmZh
MzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMiw2ICsyLDcgQEAgbGlzdChBUFBF
TkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRV
bml4LmNwcAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKIAor
ICAgIFBsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcAogICAgIFBsYXRmb3JtL2VmbC9M
b2dnaW5nRWZsLmNwcAogICAgIFBsYXRmb3JtL2VmbC9Nb2R1bGVFZmwuY3BwCiAgICAgUGxhdGZv
cm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAKQEAgLTE5Myw2ICsxOTQsNyBAQCBsaXN0KEFQUEVORCBX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291
cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lbmNoYW50IgorICAgICIke1dF
QktJVDJfRElSfS9QbGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkv
Yy9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMvc291cCIKICAgICAi
JHtXRUJLSVQyX0RJUn0vU2hhcmVkL2VmbCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>