<?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>38233</bug_id>
          
          <creation_ts>2010-04-27 17:23:13 -0700</creation_ts>
          <short_desc>Slow rendering w/multiple animated resizes</short_desc>
          <delta_ts>2010-06-22 21:07:34 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>adele</cc>
    
    <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>levin</cc>
    
    <cc>mitz</cc>
    
    <cc>oliver</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>218069</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-04-27 17:23:13 -0700</bug_when>
    <thetext>WebKit rendering is slow (5fps) when multiple images have animated resizes, such as http://ie.microsoft.com/testdrive/Performance/01FlyingImages/Default.html.  (Firefox renders this demo at 15-60fps).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218073</commentid>
    <comment_count>1</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-04-27 17:26:49 -0700</bug_when>
    <thetext>Some history:  back in http://trac.webkit.org/changeset/34210, Dave Hyatt introduced a speedup for GUIMark.  The heuristic is (roughly) &quot;did we get another resize request for this image within the last 50ms?  If so, render in low quality, set a timer, and render in high quality when the timer expires&quot;.
This is a good idea, but won&apos;t work in this case for a couple of reasons:

1)  The heuristic depends on render time.  If the scene is complex enough (ie., takes more than 50ms), the condition will never be met, and we will always render at high quality.  (In the case of Chrome, our high quality render is slow enough that this happens even for GUIMark, and we never fall into the low quality path).

2)  There are multiple images in the scene, each with their own timer.  When one image&apos;s timer expires (telling it to render at high quality), it may be overlapping another image which has already rendered at high quality, and the redraw will be considered &quot;another (quick) resize request&quot; and the images will toggle back-and-forth between high and low quality (this only happens if #1 is fixed).

3)  There is a &quot;sticky bit&quot; that keeps the render at the previous quality if it renders at the same size.  In this case, it causes a slowdown since one image may not be resizing on a particular frame, while others are, so the non-resizing images render at high quality while the others render at low, until that image rotates far enough to also need a resize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219082</commentid>
    <comment_count>2</comment_count>
      <attachid>54717</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-04-29 10:32:10 -0700</bug_when>
    <thetext>Created attachment 54717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219089</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-04-29 10:43:54 -0700</bug_when>
    <thetext>Consider this patch a request for comments on a work-in-progress, since this change fixes things for Chromium, but isn&apos;t optimal for Safari yet (see * below).

This addresses the issues above as follows:

1)  This is fixed by recording the render time of the previous frame, and subtracting that off the difference between the last-requested resize and the current time.  This is intended to factor out render time from the heuristic used to determine whether to draw low quality or not.

2)  There is now a single timer for all outstanding resizes, owned by RenderImageScaleObserver (which I turned into a singleton -- not sure what WebKit policy is on those; let me know if I should implement this another way).

3)  There is no &quot;sticky bit&quot; anymore.  Each redraw (whether timer-driven or not) computes the heuristic independently, and uses that to determine whether to draw high or low quality.

Here are the benchmarks:

flying images

chrome/win before:  5-6fps
chrome/win after:     60fps
chrome/mac before:  5-6fps
chrome/mac after:   45fps
safari before:  5-6 FPS
safari after:   5-6 fps, then 63 fps once it gets &quot;unstuck&quot; *

GUIMark:

chrome/win before:  11fps
chrome/win after:   29fps
chrome/mac before:  55fps
chrome/mac after:   55fps
safari before:   55fps
safari after:    55fps

The changes in platform/graphics/skia/ are plumbing to implement setImageInterpolationQuality() in Chromium.

The changes in page/ and rendering/ implement the heuristic above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220649</commentid>
    <comment_count>4</comment_count>
      <attachid>55027</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-04 10:35:27 -0700</bug_when>
    <thetext>Created attachment 55027
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220653</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-04 10:42:04 -0700</bug_when>
    <thetext>(In reply to comment #4)

It turns out the reason this fix works on Chrome but sticks on Safari is that there are 3 separate damage rects:  one for the moving images, one for the FPS and one for the text at the bottom that get invalidated every frame.  Chrome coalesces invalidation regions into one big rect, so it records a single (long) paint time for the whole frame.  Safari does not, so there are alternating slow and fast repaints, and the fast repaints store a short paint duration into the FrameView, which messes up the &quot;how fast is this resizing&quot; heuristic.

In this patch, I reverted the changes to FrameView to record render time, and simply increased the threshold to 500ms (as it is for resized background images in RenderBoxModelObject).  This works for this test case (and GUIMark), but has the same scalability problems as the original code:  it&apos;s always possible to come up with a more complex scene whose render time  I&apos;d like to come up with a heuristic that works, but for now I&apos;m just using the same approach as the existing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221880</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-06 12:17:32 -0700</bug_when>
    <thetext>(In reply to comment #3)

&gt; The changes in platform/graphics/skia/ are plumbing to implement
&gt; setImageInterpolationQuality() in Chromium.

Please do these in a separate patch. You can/should do these before the rest of the changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231736</commentid>
    <comment_count>7</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-28 09:04:21 -0700</bug_when>
    <thetext>OK, I&apos;ve broken out the Chromium-specific stuff as https://bugs.webkit.org/show_bug.cgi?id=38686.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231894</commentid>
    <comment_count>8</comment_count>
      <attachid>57367</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-28 13:08:27 -0700</bug_when>
    <thetext>Created attachment 57367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231897</commentid>
    <comment_count>9</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-28 13:09:58 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=57367) [details]
&gt; Patch

Same as patch #2, but with all the Chromium-related plumbing removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231900</commentid>
    <comment_count>10</comment_count>
      <attachid>57367</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-28 13:14:15 -0700</bug_when>
    <thetext>Comment on attachment 57367
Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; +
&gt; +        This improves Safari performance for the following IE9 platform demos on my C2D MacPro (10.5):

This doesn&apos;t help me understand what your patch is changing. You should give a high-level summary of
1) the underlying problem
2) how this patch addresses it.

This will help me review the rest of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231905</commentid>
    <comment_count>11</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-28 13:29:16 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 57367 [details])
&gt; &gt; Index: WebCore/ChangeLog
&gt; &gt; ===================================================================
&gt; &gt; +
&gt; &gt; +        This improves Safari performance for the following IE9 platform demos on my C2D MacPro (10.5):
&gt; 
&gt; This doesn&apos;t help me understand what your patch is changing. You should give a high-level summary of
&gt; 1) the underlying problem
&gt; 2) how this patch addresses it.
&gt; 
&gt; This will help me review the rest of the patch.

Description and Comment #1 describe the overall problem, and Comments #3 and #5 describe how they are addressed.  I&apos;ll try to summarize everything here:

The heuristic introduced in trac.webkit.org/changeset/34210 is a good idea, and works for a single animated resize, but when multiple images are resizing simultaneously, it doesn&apos;t work.

1)  The heuristic depends on render time.  If the scene is complex enough (ie., takes more than 50ms), the condition will never be met, and we will always render at high quality.

Solution:  bump the threshold to 500ms.  This is not ideal (my original approach was to try to measure time between repaints, exclusive of draw time, but that didn&apos;t work in Safari).  However, it is the same threshold as that used for background image resizing.

2)  There are multiple images in the scene, each with their own timer.

Solution:  Unify all the timers into a single timer, turn RenderImageScaleObserver into a singleton, and have it maintain the list of pending images to be redrawn.

3)  There is a &quot;sticky bit&quot; that keeps the render at the previous quality if it renders at the same size.  If an image which is &quot;sticking&quot; at high quality overlaps an image attempting to draw at low quality, it slows down the redraw.

Solution:  There is no &quot;sticky bit&quot; anymore.  Each redraw (whether timer-driven or not) computes the heuristic independently, and uses that to determine whether to draw high or low quality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231911</commentid>
    <comment_count>12</comment_count>
      <attachid>57367</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-28 13:39:08 -0700</bug_when>
    <thetext>Comment on attachment 57367
Patch

There are two problems i have with this patch 
* This optimisation also exists for scaled background-images, but i think has (effectively) a duplicate of the code.
* I think the cut off logic is bad -- We shouldn&apos;t be looking at how long between frames, we should be looking at how long it takes to do the paint.  I think a &quot;workable&quot; approach maybe to trigger with something along the lines of:
   1. if shouldUseNormalQuality || (scale == FloatSize(1.0, 1.0))
      a. setScalingMode()
      b. paint normally
      c. return
   2. startTime = currentTime()
   3. paint normally
   4. endTime = currentTime();
   5. shouldUseNormalQuality = (endTime-startTime) &gt; magicValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231920</commentid>
    <comment_count>13</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-28 13:58:31 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 57367 [details])
&gt; There are two problems i have with this patch 
&gt; * This optimisation also exists for scaled background-images, but i think has (effectively) a duplicate of the code.

Hmm.  So you&apos;d like me to refactor the two using the algorithm below?  I can give that a try.

&gt; * I think the cut off logic is bad -- We shouldn&apos;t be looking at how long between frames, we should be looking at how long it takes to do the paint.  I think a &quot;workable&quot; approach maybe to trigger with something along the lines of:
&gt;    1. if shouldUseNormalQuality || (scale == FloatSize(1.0, 1.0))
&gt;       a. setScalingMode()
&gt;       b. paint normally
&gt;       c. return
&gt;    2. startTime = currentTime()
&gt;    3. paint normally
&gt;    4. endTime = currentTime();
&gt;    5. shouldUseNormalQuality = (endTime-startTime) &gt; magicValue

Interesting.  Three potential problems with this approach:

1)  Images which are resized more than once, will remain at low quality after the second paint.  E.g., an image which animates for a while, and then stops animating, while remain at low quality.  See the flickr demo, for example.

2)  A scene consisting of many many small images resizing may not trigger the &quot;fast&quot; rendering, even though its total render time is much more than a scene consisting of one larger image.  It may be tricky to get the threshold correct for something like the &quot;flying images&quot; demo, for example, in a way that doesn&apos;t basically just cause fast (low quality) rendering always.

3)  Consider an image resizing from very small to very large and back again.  Since the time to resize a single image depends on the number of pixels covered, an image may not trigger the fast case until it&apos;s drawn large enough.  Once it is, though, as in #1, it won&apos;t go back, even if it stops.

I&apos;m willing to give it a try, but I thought I&apos;d point this out before I start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231987</commentid>
    <comment_count>14</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-28 15:51:41 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 57367 [details] [details])
&gt; &gt; There are two problems i have with this patch 
&gt; &gt; * This optimisation also exists for scaled background-images, but i think has (effectively) a duplicate of the code.
&gt; 
&gt; Hmm.  So you&apos;d like me to refactor the two using the algorithm below?  I can give that a try.
&gt; 
&gt; &gt; * I think the cut off logic is bad -- We shouldn&apos;t be looking at how long between frames, we should be looking at how long it takes to do the paint.  I think a &quot;workable&quot; approach maybe to trigger with something along the lines of:
&gt; &gt;    1. if shouldUseNormalQuality || (scale == FloatSize(1.0, 1.0))
&gt; &gt;       a. setScalingMode()
&gt; &gt;       b. paint normally
&gt; &gt;       c. return
&gt; &gt;    2. startTime = currentTime()
&gt; &gt;    3. paint normally
&gt; &gt;    4. endTime = currentTime();
&gt; &gt;    5. shouldUseNormalQuality = (endTime-startTime) &gt; magicValue
&gt; 
&gt; Interesting.  Three potential problems with this approach:
&gt; 
&gt; 1)  Images which are resized more than once, will remain at low quality after the second paint.  E.g., an image which animates for a while, and then stops animating, while remain at low quality.  See the flickr demo, for example.
&gt; 
&gt; 2)  A scene consisting of many many small images resizing may not trigger the &quot;fast&quot; rendering, even though its total render time is much more than a scene consisting of one larger image.  It may be tricky to get the threshold correct for something like the &quot;flying images&quot; demo, for example, in a way that doesn&apos;t basically just cause fast (low quality) rendering always.
&gt; 
&gt; 3)  Consider an image resizing from very small to very large and back again.  Since the time to resize a single image depends on the number of pixels covered, an image may not trigger the fast case until it&apos;s drawn large enough.  Once it is, though, as in #1, it won&apos;t go back, even if it stops.

After thinking about/discussing it some more, if the low quality resize becomes sticky, this would be a showstopper for us.  So I can&apos;t really go ahead with that proposal as-is.

I will try refactoring this code with the background image resize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231998</commentid>
    <comment_count>15</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-28 16:15:44 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (From update of attachment 57367 [details] [details] [details])
&gt; &gt; &gt; There are two problems i have with this patch 
&gt; &gt; &gt; * This optimisation also exists for scaled background-images, but i think has (effectively) a duplicate of the code.
&gt; &gt; 
&gt; &gt; Hmm.  So you&apos;d like me to refactor the two using the algorithm below?  I can give that a try.
&gt; &gt; 
&gt; &gt; &gt; * I think the cut off logic is bad -- We shouldn&apos;t be looking at how long between frames, we should be looking at how long it takes to do the paint.  I think a &quot;workable&quot; approach maybe to trigger with something along the lines of:
&gt; &gt; &gt;    1. if shouldUseNormalQuality || (scale == FloatSize(1.0, 1.0))
&gt; &gt; &gt;       a. setScalingMode()
&gt; &gt; &gt;       b. paint normally
&gt; &gt; &gt;       c. return
&gt; &gt; &gt;    2. startTime = currentTime()
&gt; &gt; &gt;    3. paint normally
&gt; &gt; &gt;    4. endTime = currentTime();
&gt; &gt; &gt;    5. shouldUseNormalQuality = (endTime-startTime) &gt; magicValue
&gt; &gt; 
&gt; &gt; Interesting.  Three potential problems with this approach:
&gt; &gt; 
&gt; &gt; 1)  Images which are resized more than once, will remain at low quality after the second paint.  E.g., an image which animates for a while, and then stops animating, while remain at low quality.  See the flickr demo, for example.
&gt; &gt; 
&gt; &gt; 2)  A scene consisting of many many small images resizing may not trigger the &quot;fast&quot; rendering, even though its total render time is much more than a scene consisting of one larger image.  It may be tricky to get the threshold correct for something like the &quot;flying images&quot; demo, for example, in a way that doesn&apos;t basically just cause fast (low quality) rendering always.
&gt; &gt; 
&gt; &gt; 3)  Consider an image resizing from very small to very large and back again.  Since the time to resize a single image depends on the number of pixels covered, an image may not trigger the fast case until it&apos;s drawn large enough.  Once it is, though, as in #1, it won&apos;t go back, even if it stops.
&gt; 
&gt; After thinking about/discussing it some more, if the low quality resize becomes sticky, this would be a showstopper for us.  So I can&apos;t really go ahead with that proposal as-is.
&gt; 
&gt; I will try refactoring this code with the background image resize.

I&apos;m not sure what the skia issue is -- for webkit with the CG backend the problem we have is by default we use trilinear filtering (vs. bilinear for everyone else) which makes scaling much more expensive than in other browsers.  Anyhoo, so we should be dropping into bilinear filter rather than trilinear so it&apos;s not an &quot;ugly&quot; vs. &quot;non-ugly&quot; issue but rather &quot;good&quot; vs. &quot;excessive&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232017</commentid>
    <comment_count>16</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-05-28 17:07:37 -0700</bug_when>
    <thetext>(In reply to comment #15)

&gt; I&apos;m not sure what the skia issue is -- for webkit with the CG backend the problem we have is by default we use trilinear filtering (vs. bilinear for everyone else) which makes scaling much more expensive than in other browsers.  Anyhoo, so we should be dropping into bilinear filter rather than trilinear so it&apos;s not an &quot;ugly&quot; vs. &quot;non-ugly&quot; issue but rather &quot;good&quot; vs. &quot;excessive&quot;

In the Skia backend, the default is Lanczos3, and the &quot;low quality&quot; is bilinear (or at least, it will be once 38686 lands -- before that, there were some heuristics in the backend to switch between the two, but 38686 hooks up the setInterpolationQuality() call, so that it behaves much more like the CG backend, and will use Lanczos3 less).  The bilinear is fast and heavily optimized, the Lanczos3 is beautiful but slow, and memory bandwidth heavy, so I doubt it will come close to bilinear even if optimized.

Note that the numbers above are from Safari, not Chrome, and show a 5x-10x perf delta.  Chrome&apos;s performance delta is larger, but not hugely so.  So this is an issue that Chrome and Safari both share, so I was hoping to fix them both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232764</commentid>
    <comment_count>17</comment_count>
      <attachid>57547</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-01 08:27:01 -0700</bug_when>
    <thetext>Created attachment 57547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232765</commentid>
    <comment_count>18</comment_count>
      <attachid>57547</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-01 08:27:41 -0700</bug_when>
    <thetext>Comment on attachment 57547
Patch

This patch refactors the implementations in RenderBoxModelObject and RenderImage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234351</commentid>
    <comment_count>19</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-04 13:05:00 -0700</bug_when>
    <thetext>We just need to make sure iChat chat window resizing with a scaled photo (the default) in it doesn&apos;t get slow.  Olliej held off on changing RenderImage to 500ms because of this.  We need to test it to make sure we don&apos;t break it with a 500ms threshold.  I don&apos;t think we will, but we should just make sure.

run-webkit-app would work great for launching iChat and checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235025</commentid>
    <comment_count>20</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-07 13:39:15 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; We just need to make sure iChat chat window resizing with a scaled photo (the default) in it doesn&apos;t get slow.  Olliej held off on changing RenderImage to 500ms because of this.  We need to test it to make sure we don&apos;t break it with a 500ms threshold.  I don&apos;t think we will, but we should just make sure.
&gt; 
&gt; run-webkit-app would work great for launching iChat and checking.

OK, it seems to be ok.   I tried it with iChat, and it seems to do low quality while dragging, then high quality on mouseup.  Seems to be the same as without this change.

I also tried a large IMG with WIDTH=100%, and it used the new algorithm:  rendered at low quality until no mouse events for 500ms, then rendered at high quality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235954</commentid>
    <comment_count>21</comment_count>
      <attachid>58284</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-09 13:01:24 -0700</bug_when>
    <thetext>Created attachment 58284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235956</commentid>
    <comment_count>22</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-09 13:04:29 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=58284) [details]
&gt; Patch

Minor cleanup from previous patch:  removed some redundant class scope operators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236138</commentid>
    <comment_count>23</comment_count>
      <attachid>58284</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-06-09 20:26:33 -0700</bug_when>
    <thetext>Comment on attachment 58284
Patch

These are my 1st pass comments, but there are enough of them that I decided to enter them before doing my second pass comments. (My 1st pass tends to be simpler to spot items, more stylistic, etc. My second pass is where I finish getting a big picture and try to verify correctness. I&apos;ll try to start a second pass soon.)

---------------------------------
http://wkrietveld.appspot.com/38233/diff/1/2
File WebCore/ChangeLog (right):

http://wkrietveld.appspot.com/38233/diff/1/2#newcode6
WebCore/ChangeLog:6: https://bugs.webkit.org/show_bug.cgi?id=38233
I would add a return here.

http://wkrietveld.appspot.com/38233/diff/1/3
File WebCore/rendering/RenderBoxModelObject.cpp (left):

http://wkrietveld.appspot.com/38233/diff/1/3#oldcode134
WebCore/rendering/RenderBoxModelObject.cpp:134: bool contextIsScaled = !currentTransform.isIdentityOrTranslationOrFlipped();
Why are we now using &quot;size&quot; instead of the transform as was done here before? 

I see this matched what the other instance of this code was doing, but did we loose something from this instance by doing this change?

http://wkrietveld.appspot.com/38233/diff/1/3
File WebCore/rendering/RenderBoxModelObject.cpp (right):

http://wkrietveld.appspot.com/38233/diff/1/3#newcode6
WebCore/rendering/RenderBoxModelObject.cpp:6: * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
You should add a copyright line here and other files where you made changes of more than a few lines.

http://wkrietveld.appspot.com/38233/diff/1/3#newcode51
WebCore/rendering/RenderBoxModelObject.cpp:51: RenderBoxModelObject::ScaleObserver::ScaleObserver() : m_objects(0), m_timer(this, &amp;ScaleObserver::highQualityRepaintTimerFired) {}
The initializers are typically put on separate lines (as RenderBoxModelScaleData did before) and then the {} would be on separate lines as well.

http://wkrietveld.appspot.com/38233/diff/1/3#newcode62
WebCore/rendering/RenderBoxModelObject.cpp:62: if (m_objects) {
Please consider the fail fast approach.

if (!m_objects)
    return;

etc.

http://wkrietveld.appspot.com/38233/diff/1/3#newcode63
WebCore/rendering/RenderBoxModelObject.cpp:63: m_objects-&gt;take(object);
Just use &quot;remove&quot; instead of &quot;take&quot; since you don&apos;t need the object returned.

http://wkrietveld.appspot.com/38233/diff/1/3#newcode66
WebCore/rendering/RenderBoxModelObject.cpp:66: m_objects = 0;
m_timer.stop(); ?

Maybe that isn&apos;t worth it.

http://wkrietveld.appspot.com/38233/diff/1/3#newcode73
WebCore/rendering/RenderBoxModelObject.cpp:73: if (m_objects) {
fail fast?

http://wkrietveld.appspot.com/38233/diff/1/3#newcode81
WebCore/rendering/RenderBoxModelObject.cpp:81: m_timer.stop();
There is no need to call stop, since you are setting the time on the next line. There is only one firing time that this timer may hold (see WebCore/platform/Timer.cpp).

http://wkrietveld.appspot.com/38233/diff/1/3#newcode102
WebCore/rendering/RenderBoxModelObject.cpp:102: // There is no scale in effect.  If we had a scale in effect before, we can just remove this object from the list.
One space after periods in WebKit comments.

http://wkrietveld.appspot.com/38233/diff/1/3#newcode103
WebCore/rendering/RenderBoxModelObject.cpp:103: if (time) {
The { should go away since the statement is now one line.

http://wkrietveld.appspot.com/38233/diff/1/3#newcode103
WebCore/rendering/RenderBoxModelObject.cpp:103: if (time) {
What is &quot;if (time)&quot; suppose to be checking for? that m_objects exists? If so, why not just check m_objects?

&quot;m_objects-&gt;get(object)&quot; will return &quot;static T emptyValue() { return std::numeric_limits&lt;T&gt;::infinity(); }&quot; if the object doesn&apos;t exist in the hashmap.

Before when the value was a pointer, the default value would be 0, so this code is different from before.

http://wkrietveld.appspot.com/38233/diff/1/3#newcode118
WebCore/rendering/RenderBoxModelObject.cpp:118: if (!time) {
What is !time checking for? (see comment above).

http://wkrietveld.appspot.com/38233/diff/1/3#newcode127
WebCore/rendering/RenderBoxModelObject.cpp:127: // If it has been at least &lt;threshold&gt; seconds since the last time a
Is &quot;&lt;threshold&gt;&quot; == cLowQualityTimeThreshold ?

http://wkrietveld.appspot.com/38233/diff/1/3#newcode128
WebCore/rendering/RenderBoxModelObject.cpp:128: // resize was requested, draw at hi quality and don&apos;t set the timer.
s/hi/high/

http://wkrietveld.appspot.com/38233/diff/1/3#newcode132
WebCore/rendering/RenderBoxModelObject.cpp:132: // Draw at low quality first, and set a timer for HQ.
HQ: Please avoid abreviations.

Also no comma before and (just like you did above for a similar comment).

http://wkrietveld.appspot.com/38233/diff/1/4
File WebCore/rendering/RenderBoxModelObject.h (right):

http://wkrietveld.appspot.com/38233/diff/1/4#newcode108
WebCore/rendering/RenderBoxModelObject.h:108: typedef HashMap&lt;RenderBoxModelObject*, double&gt; ScaleMap;
It seems like this file should include wtf/HashMap.

ScaleMap doesn&apos;t really give you scales or map scales to something. It maps RenderBoxModelObject to the time that object last painted. Can you come up with a better name?

http://wkrietveld.appspot.com/38233/diff/1/4#newcode110
WebCore/rendering/RenderBoxModelObject.h:110: class ScaleObserver : public Noncopyable {
Nice use of Noncopyable!

http://wkrietveld.appspot.com/38233/diff/1/4#newcode112
WebCore/rendering/RenderBoxModelObject.h:112: ScaleObserver();
Why is the constructor public?

http://wkrietveld.appspot.com/38233/diff/1/4#newcode113
WebCore/rendering/RenderBoxModelObject.h:113: static ScaleObserver* getInstance();
Misc idea: What about &quot;instance()&quot; as the name?

I wonder getInstance() is even exposed.  It looks like every time this is called, one does this:

ScaleObserver::getInstance()&gt;method...

So why not just hide getInstance and make a few static methods that do this for you?

In fact, you could just expose the the static methods on  RenderBoxModelObject (not sure if method names will need to change) and then just hide the whole class inside of RenderBoxModelObject.cpp.

http://wkrietveld.appspot.com/38233/diff/1/4#newcode115
WebCore/rendering/RenderBoxModelObject.h:115: void objectDestroyed(RenderBoxModelObject* object);
&quot;object&quot; shouldn&apos;t be here.

http://wkrietveld.appspot.com/38233/diff/1/4#newcode116
WebCore/rendering/RenderBoxModelObject.h:116: void highQualityRepaintTimerFired(Timer&lt;ScaleObserver&gt;*);
highQualityRepaintTimerFire should be private.

http://wkrietveld.appspot.com/38233/diff/1/4#newcode117
WebCore/rendering/RenderBoxModelObject.h:117: void restartTimer();
Please add a blank line here before private:

http://wkrietveld.appspot.com/38233/diff/1/4#newcode117
WebCore/rendering/RenderBoxModelObject.h:117: void restartTimer();
restartTimer should be private.

http://wkrietveld.appspot.com/38233/diff/1/4#newcode119
WebCore/rendering/RenderBoxModelObject.h:119: ScaleMap* m_objects;
Every time I see m_objects, I don&apos;t know what it is.

It seems to be a mapping of RenderBoxModelObject&apos;s that are painted at low quality to the last time at which they were painted. Is that correct? Can this name be more descriptive (but not as long as my sentence :) )?

http://wkrietveld.appspot.com/38233/diff/1/4#newcode121
WebCore/rendering/RenderBoxModelObject.h:121: static ScaleObserver* gInstance;
Recent style guideline addition &quot;Static data members should be prefixed by &quot;s_&quot;. &quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237056</commentid>
    <comment_count>24</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-11 15:04:33 -0700</bug_when>
    <thetext>(In reply to comment #23)

(I&apos;m going to send these comments, although I won&apos;t be uploading a new version just yet -- having some issues).

&gt; http://wkrietveld.appspot.com/38233/diff/1/2#newcode6
&gt; WebCore/ChangeLog:6: https://bugs.webkit.org/show_bug.cgi?id=38233
&gt; I would add a return here.

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3
&gt; File WebCore/rendering/RenderBoxModelObject.cpp (left):
&gt; 
&gt; http://wkrietveld.appspot.com/38233/diff/1/3#oldcode134
&gt; WebCore/rendering/RenderBoxModelObject.cpp:134: bool contextIsScaled = !currentTransform.isIdentityOrTranslationOrFlipped();
&gt; Why are we now using &quot;size&quot; instead of the transform as was done here before? 
&gt; I see this matched what the other instance of this code was doing, but did we loose something from this instance by doing this change?

We&apos;re still doing the check for size, we&apos;re just not doing the check for identity transform.  I pulled this out when I refactored with RenderImage (which had no such check), but to be honest, I&apos;m not sure if it&apos;s 100% correct.

Oliver, could you take a look?  Should I try to preserve this check?

&gt; http://wkrietveld.appspot.com/38233/diff/1/3
&gt; File WebCore/rendering/RenderBoxModelObject.cpp (right):
&gt; 
&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode6
&gt; WebCore/rendering/RenderBoxModelObject.cpp:6: * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
&gt; You should add a copyright line here and other files where you made changes of more than a few lines.

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode51
&gt; WebCore/rendering/RenderBoxModelObject.cpp:51: RenderBoxModelObject::ScaleObserver::ScaleObserver() : m_objects(0), m_timer(this, &amp;ScaleObserver::highQualityRepaintTimerFired) {}
&gt; The initializers are typically put on separate lines (as RenderBoxModelScaleData did before) and then the {} would be on separate lines as well.

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode62
&gt; WebCore/rendering/RenderBoxModelObject.cpp:62: if (m_objects) {
&gt; Please consider the fail fast approach.
&gt; 
&gt; if (!m_objects)
&gt;     return;
&gt; 
&gt; etc.

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode63
&gt; WebCore/rendering/RenderBoxModelObject.cpp:63: m_objects-&gt;take(object);
&gt; Just use &quot;remove&quot; instead of &quot;take&quot; since you don&apos;t need the object returned.

Done.

&gt; 
&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode66
&gt; WebCore/rendering/RenderBoxModelObject.cpp:66: m_objects = 0;
&gt; m_timer.stop(); ?
&gt; 
&gt; Maybe that isn&apos;t worth it.

Done.  (Why not.)

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode73
&gt; WebCore/rendering/RenderBoxModelObject.cpp:73: if (m_objects) {
&gt; fail fast?

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode81
&gt; WebCore/rendering/RenderBoxModelObject.cpp:81: m_timer.stop();
&gt; There is no need to call stop, since you are setting the time on the next line. There is only one firing time that this timer may hold (see WebCore/platform/Timer.cpp).

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode102
&gt; WebCore/rendering/RenderBoxModelObject.cpp:102: // There is no scale in effect.  If we had a scale in effect before, we can just remove this object from the list.
&gt; One space after periods in WebKit comments.

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode103
&gt; WebCore/rendering/RenderBoxModelObject.cpp:103: if (time) {
&gt; The { should go away since the statement is now one line.
&gt; 
&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode103
&gt; WebCore/rendering/RenderBoxModelObject.cpp:103: if (time) {
&gt; What is &quot;if (time)&quot; suppose to be checking for? that m_objects exists? If so, why not just check m_objects?
&gt; 
&gt; &quot;m_objects-&gt;get(object)&quot; will return &quot;static T emptyValue() { return std::numeric_limits&lt;T&gt;::infinity(); }&quot; if the object doesn&apos;t exist in the hashmap.

You&apos;re right.  Changed to compare against HashTraits&lt;double&gt;::emptyValue() instead.

&gt; Before when the value was a pointer, the default value would be 0, so this code is different from before.
&gt; 
&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode118
&gt; WebCore/rendering/RenderBoxModelObject.cpp:118: if (!time) {
&gt; What is !time checking for? (see comment above).

Fixed.  In fact, we don&apos;t want this check anymore, since we&apos;re always going to draw at low quality first (since time never == 0, we were never falling into this case, so it should have been removed anyway).

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode127
&gt; WebCore/rendering/RenderBoxModelObject.cpp:127: // If it has been at least &lt;threshold&gt; seconds since the last time a
&gt; Is &quot;&lt;threshold&gt;&quot; == cLowQualityTimeThreshold ?

Fixed.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode128
&gt; WebCore/rendering/RenderBoxModelObject.cpp:128: // resize was requested, draw at hi quality and don&apos;t set the timer.
&gt; s/hi/high/

Fixed.

&gt; http://wkrietveld.appspot.com/38233/diff/1/3#newcode132
&gt; WebCore/rendering/RenderBoxModelObject.cpp:132: // Draw at low quality first, and set a timer for HQ.
&gt; HQ: Please avoid abreviations.

Done.

&gt; Also no comma before and (just like you did above for a similar comment).

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/4
&gt; File WebCore/rendering/RenderBoxModelObject.h (right):
&gt; 
&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode108
&gt; WebCore/rendering/RenderBoxModelObject.h:108: typedef HashMap&lt;RenderBoxModelObject*, double&gt; ScaleMap;
&gt; It seems like this file should include wtf/HashMap.

Done.

&gt; ScaleMap doesn&apos;t really give you scales or map scales to something. It maps RenderBoxModelObject to the time that object last painted. Can you come up with a better name?

Changed to LastPaintTimeMap, as discussed.

&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode110
&gt; WebCore/rendering/RenderBoxModelObject.h:110: class ScaleObserver : public Noncopyable {
&gt; Nice use of Noncopyable!
&gt; 
&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode112
&gt; WebCore/rendering/RenderBoxModelObject.h:112: ScaleObserver();
&gt; Why is the constructor public?

Fixed.

&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode113
&gt; WebCore/rendering/RenderBoxModelObject.h:113: static ScaleObserver* getInstance();
&gt; Misc idea: What about &quot;instance()&quot; as the name?

I was following the Singleton design pattern, where it&apos;s usually called getInstance().  I&apos;ll change it if you like.

&gt; I wonder getInstance() is even exposed.  It looks like every time this is called, one does this:
&gt; 
&gt; ScaleObserver::getInstance()&gt;method...
&gt; 
&gt; So why not just hide getInstance and make a few static methods that do this for you?
&gt; 
&gt; In fact, you could just expose the the static methods on  RenderBoxModelObject (not sure if method names will need to change) and then just hide the whole class inside of RenderBoxModelObject.cpp.

Good idea.  Done.

(Note that since RenderImage derives from RenderBoxModelObject, the call to objectDestroyed() in its destructor was redundant, and was removed.)

&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode115
&gt; WebCore/rendering/RenderBoxModelObject.h:115: void objectDestroyed(RenderBoxModelObject* object);
&gt; &quot;object&quot; shouldn&apos;t be here.

Fixed.

&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode116
&gt; WebCore/rendering/RenderBoxModelObject.h:116: void highQualityRepaintTimerFired(Timer&lt;ScaleObserver&gt;*);
&gt; highQualityRepaintTimerFire should be private.

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode117
&gt; WebCore/rendering/RenderBoxModelObject.h:117: void restartTimer();
&gt; Please add a blank line here before private:

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode117
&gt; WebCore/rendering/RenderBoxModelObject.h:117: void restartTimer();
&gt; restartTimer should be private.

Done.

&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode119
&gt; WebCore/rendering/RenderBoxModelObject.h:119: ScaleMap* m_objects;
&gt; Every time I see m_objects, I don&apos;t know what it is.
&gt; It seems to be a mapping of RenderBoxModelObject&apos;s that are painted at low quality to the last time at which they were painted. Is that correct? Can this name be more descriptive (but not as long as my sentence :) )?

Changed to m_lastPaintTimeMap.

&gt; http://wkrietveld.appspot.com/38233/diff/1/4#newcode121
&gt; WebCore/rendering/RenderBoxModelObject.h:121: static ScaleObserver* gInstance;
&gt; Recent style guideline addition &quot;Static data members should be prefixed by &quot;s_&quot;. &quot;

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237983</commentid>
    <comment_count>25</comment_count>
      <attachid>58687</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-14 12:29:54 -0700</bug_when>
    <thetext>Created attachment 58687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238026</commentid>
    <comment_count>26</comment_count>
      <attachid>58687</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-14 13:52:15 -0700</bug_when>
    <thetext>Comment on attachment 58687
Patch

This is great! I think we&apos;ll want to use this for other things as well, and maybe it eventually won&apos;t be entirely tied to RenderBoxModelObject.

&gt; +typedef HashMap&lt;RenderBoxModelObject*, double&gt; LastPaintTimeMap;
&gt; +
&gt; +class RenderBoxModelScaleObserver : public Noncopyable {
&gt;  public:
&gt; +    static RenderBoxModelScaleObserver* getInstance();
&gt; +    bool shouldPaintAtLowQuality(GraphicsContext*, RenderBoxModelObject*, Image*, const IntSize&amp;);
&gt; +    void objectDestroyed(RenderBoxModelObject*);
&gt;  
&gt;  private:
&gt; +    RenderBoxModelScaleObserver();
&gt; +    void highQualityRepaintTimerFired(Timer&lt;RenderBoxModelScaleObserver&gt;*);
&gt; +    void restartTimer();
&gt; +    LastPaintTimeMap* m_lastPaintTimeMap;
&gt; +    Timer&lt;RenderBoxModelScaleObserver&gt; m_timer;
&gt; +    static RenderBoxModelScaleObserver* s_instance;
&gt;  };

I normally find classes easier to read if they are paragraphed so that functions are split from the data. This one seems a little too cramped.

I think m_lastPaintTimeMap should be an OwnPtr even if we never do delete this object. Also, why use a pointer to the map. If we only ever have one of these objects it seems fine to just have the map in the object. No need for all that pointer dereferencing.

In WebKit code we do not use &quot;get&quot; in the names of functions like getInstance. Normally we&apos;d call the function &quot;sharedInstance&quot; or something like that. Even &quot;instance&quot; would probably be OK.

I think the name RenderBoxModelScaleObserver is confusing, since is not a &quot;scale observer&quot;. It does not observe scale. We should name the class based on what the object is. I think it’s an object that controls painting quality based on painting activity, so its name should reflect that. I also don&apos;t think its name needs to have a RenderBoxModel prefix. Maybe ImageQualityController would be a good name?

&gt; +RenderBoxModelScaleObserver* RenderBoxModelScaleObserver::getInstance()
&gt; +{
&gt; +    if (!s_instance)
&gt; +        s_instance = new RenderBoxModelScaleObserver;
&gt; +    return s_instance;
&gt; +}

A static data member is not the best idiom for this sort of thing. A better idiom is just a global variable scoped to the getter function.

    static ImageQualityController* imageQualityController()
    {
        static ImageQualityController* controller = new ImageQualityController;
        return controller;
    }

Since nothing outside the function accesses the global variable, there&apos;s no need for it to be a class static data member. I also think we can just let the function be a free function at the call site so it can be:
 
    imageQualityController()-&gt;objectDestroyed(this)

Rather than:

    RenderBoxModelScaleObserver::getInstance()-&gt;objectDestroyed(this)

I see no reason the policy that we use a single shared instance of this needs to be built into the class.

&gt; +    if (!m_lastPaintTimeMap-&gt;size()) {

This should use isEmpty instead.

&gt; -    if (!image || !image-&gt;isBitmapImage())
&gt; +    if (!image || !image-&gt;isBitmapImage() || context-&gt;paintingDisabled())
&gt;          return false;

Why this change? Did you run into a test case that showed this is needed? Seems OK to optimize like this but perhaps a little strange. We could also check if the image has a 0x0 size or is entirely clipped.

&gt; +        // There is no scale in effect. If we had a scale in effect before, we can just remove this object from the list.
&gt; +        if (time != HashTraits&lt;double&gt;::emptyValue())
&gt; +            m_lastPaintTimeMap-&gt;remove(object);

To find out if something is in the map I think it&apos;s best to use find rather than get. With find you can compare with end to detect if the item was in the map. Using HashTraits::emptyValue explicitly like this is more awkward.

&gt; +    bool shouldPaintAtLowQuality(GraphicsContext*, Image* image, const IntSize&amp; size);

The &quot;image&quot; and &quot;size&quot; argument names here should be omitted.

This function should be protected, unless there&apos;s some reason for it to be public.

review- because I think you should do at least some of what I suggest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238085</commentid>
    <comment_count>27</comment_count>
      <attachid>58711</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-14 15:25:37 -0700</bug_when>
    <thetext>Created attachment 58711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238088</commentid>
    <comment_count>28</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-14 15:28:33 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 58687 [details])
&gt; This is great! I think we&apos;ll want to use this for other things as well, and maybe it eventually won&apos;t be entirely tied to RenderBoxModelObject.
&gt; 
&gt; &gt; +typedef HashMap&lt;RenderBoxModelObject*, double&gt; LastPaintTimeMap;
&gt; &gt; +
&gt; &gt; +class RenderBoxModelScaleObserver : public Noncopyable {
&gt; &gt;  public:
&gt; &gt; +    static RenderBoxModelScaleObserver* getInstance();
&gt; &gt; +    bool shouldPaintAtLowQuality(GraphicsContext*, RenderBoxModelObject*, Image*, const IntSize&amp;);
&gt; &gt; +    void objectDestroyed(RenderBoxModelObject*);
&gt; &gt;  
&gt; &gt;  private:
&gt; &gt; +    RenderBoxModelScaleObserver();
&gt; &gt; +    void highQualityRepaintTimerFired(Timer&lt;RenderBoxModelScaleObserver&gt;*);
&gt; &gt; +    void restartTimer();
&gt; &gt; +    LastPaintTimeMap* m_lastPaintTimeMap;
&gt; &gt; +    Timer&lt;RenderBoxModelScaleObserver&gt; m_timer;
&gt; &gt; +    static RenderBoxModelScaleObserver* s_instance;
&gt; &gt;  };
&gt; 
&gt; I normally find classes easier to read if they are paragraphed so that functions are split from the data. This one seems a little too cramped.

Fixed.

&gt; I think m_lastPaintTimeMap should be an OwnPtr even if we never do delete this object. Also, why use a pointer to the map. If we only ever have one of these objects it seems fine to just have the map in the object. No need for all that pointer dereferencing.

Done.  BTW, in RenderImageScaleObserver (from whence some of this code came), it was originally a pointer, I&apos;m guessing to minimize memory use when the map was not in use.

&gt; In WebKit code we do not use &quot;get&quot; in the names of functions like getInstance. Normally we&apos;d call the function &quot;sharedInstance&quot; or something like that. Even &quot;instance&quot; would probably be OK.

Function removed (now using imageQualityController() file-level static, as you suggested below).

&gt; I think the name RenderBoxModelScaleObserver is confusing, since is not a &quot;scale observer&quot;. It does not observe scale. We should name the class based on what the object is. I think it’s an object that controls painting quality based on painting activity, so its name should reflect that. I also don&apos;t think its name needs to have a RenderBoxModel prefix. Maybe ImageQualityController would be a good name?

Done.

&gt; &gt; +RenderBoxModelScaleObserver* RenderBoxModelScaleObserver::getInstance()
&gt; &gt; +{
&gt; &gt; +    if (!s_instance)
&gt; &gt; +        s_instance = new RenderBoxModelScaleObserver;
&gt; &gt; +    return s_instance;
&gt; &gt; +}
&gt; 
&gt; A static data member is not the best idiom for this sort of thing. A better idiom is just a global variable scoped to the getter function.
&gt; 
&gt;     static ImageQualityController* imageQualityController()
&gt;     {
&gt;         static ImageQualityController* controller = new ImageQualityController;
&gt;         return controller;
&gt;     }
&gt; Since nothing outside the function accesses the global variable, there&apos;s no need for it to be a class static data member. I also think we can just let the function be a free function at the call site so it can be:
&gt; 
&gt;     imageQualityController()-&gt;objectDestroyed(this)
&gt; 
&gt; Rather than:
&gt; 
&gt;     RenderBoxModelScaleObserver::getInstance()-&gt;objectDestroyed(this)
&gt; 
&gt; I see no reason the policy that we use a single shared instance of this needs to be built into the class.

Good idea; done.

&gt; &gt; +    if (!m_lastPaintTimeMap-&gt;size()) {
&gt; 
&gt; This should use isEmpty instead.

Done.

&gt; &gt; -    if (!image || !image-&gt;isBitmapImage())
&gt; &gt; +    if (!image || !image-&gt;isBitmapImage() || context-&gt;paintingDisabled())
&gt; &gt;          return false;
&gt; 
&gt; Why this change? Did you run into a test case that showed this is needed? Seems OK to optimize like this but perhaps a little strange. We could also check if the image has a 0x0 size or is entirely clipped.

Once I introduced the context for the RenderImage case (in the last patch), the call to context-&gt;getCTM() would assert, since the platform context was NULL (I&apos;m assuming because it was called during initialization).  Putting in this check avoids the assert (and makes sense -- there&apos;s no reason to start the timer until we&apos;ve actually painted something).

&gt; &gt; +        // There is no scale in effect. If we had a scale in effect before, we can just remove this object from the list.
&gt; &gt; +        if (time != HashTraits&lt;double&gt;::emptyValue())
&gt; &gt; +            m_lastPaintTimeMap-&gt;remove(object);
&gt; 
&gt; To find out if something is in the map I think it&apos;s best to use find rather than get. With find you can compare with end to detect if the item was in the map. Using HashTraits::emptyValue explicitly like this is more awkward.

Fixed to use find() and an iterator.  Not super-familiar with the wtf classes, so please check that I didn&apos;t mess something up.

&gt; &gt; +    bool shouldPaintAtLowQuality(GraphicsContext*, Image* image, const IntSize&amp; size);
&gt; 
&gt; The &quot;image&quot; and &quot;size&quot; argument names here should be omitted.

Done.

&gt; This function should be protected, unless there&apos;s some reason for it to be public.

Done.

&gt; review- because I think you should do at least some of what I suggest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238097</commentid>
    <comment_count>29</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-14 15:34:30 -0700</bug_when>
    <thetext>Attachment 58711 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/3308146</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238098</commentid>
    <comment_count>30</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-14 15:34:55 -0700</bug_when>
    <thetext>Attachment 58711 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3278140</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238099</commentid>
    <comment_count>31</comment_count>
      <attachid>58711</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-06-14 15:35:02 -0700</bug_when>
    <thetext>Comment on attachment 58711
Patch

I&apos;m not sure how this fixes the multiple scaling+animating images case.

For example if a page has n images, and it animates those n images with some scaling applied it seems that eventually n * &lt;time to draw each image&gt; would be greater than cLowQualityTimeThreshold and so stop the lower quality rendering just when it should be using it.

Am I misunderstanding the code?

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238104</commentid>
    <comment_count>32</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-14 15:42:24 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 58711 [details])
&gt; I&apos;m not sure how this fixes the multiple scaling+animating images case.
&gt; 
&gt; For example if a page has n images, and it animates those n images with some scaling applied it seems that eventually n * &lt;time to draw each image&gt; would be greater than cLowQualityTimeThreshold and so stop the lower quality rendering just when it should be using it.
&gt; 
&gt; Am I misunderstanding the code?
&gt; 
&gt; --Oliver

Yes, if your entire page takes more than 500ms to render, it&apos;ll never kick in.  This is the same problem that the original algorithm had in Chrome (and I&apos;m assuming why 500ms was used for the background image version, instead of 50ms for RenderImage).

In my first patch, I tried to factor out rendering time by measuring it, but unfortunately this is quite tricky to do.  It worked in Chrome, but not in Safari, due to differing ways that damage rects are coalesced in the two browsers.

The current patch just extends the existing algorithm to cover multiple resizes, with the caveat that the total rendering time still has to be less than 500ms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238107</commentid>
    <comment_count>33</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-06-14 15:47:00 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; (From update of attachment 58711 [details] [details])
&gt; &gt; I&apos;m not sure how this fixes the multiple scaling+animating images case.
&gt; &gt; 
&gt; &gt; For example if a page has n images, and it animates those n images with some scaling applied it seems that eventually n * &lt;time to draw each image&gt; would be greater than cLowQualityTimeThreshold and so stop the lower quality rendering just when it should be using it.
&gt; &gt; 
&gt; &gt; Am I misunderstanding the code?
&gt; &gt; 
&gt; &gt; --Oliver
&gt; 
&gt; Yes, if your entire page takes more than 500ms to render, it&apos;ll never kick in.  This is the same problem that the original algorithm had in Chrome (and I&apos;m assuming why 500ms was used for the background image version, instead of 50ms for RenderImage).
&gt; 
&gt; In my first patch, I tried to factor out rendering time by measuring it, but unfortunately this is quite tricky to do.  It worked in Chrome, but not in Safari, due to differing ways that damage rects are coalesced in the two browsers.
&gt; 
&gt; The current patch just extends the existing algorithm to cover multiple resizes, with the caveat that the total rendering time still has to be less than 500ms.

Something i was considering was doing something along the lines of measuring how much time had passed since the last paint call, and if it was lower than a certain threshold use that as a flag to indicate that it may be worth recording information to trigger lower quality scaling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238110</commentid>
    <comment_count>34</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-14 15:55:26 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; (From update of attachment 58711 [details] [details] [details])
&gt; &gt; &gt; I&apos;m not sure how this fixes the multiple scaling+animating images case.
&gt; &gt; &gt; 
&gt; &gt; &gt; For example if a page has n images, and it animates those n images with some scaling applied it seems that eventually n * &lt;time to draw each image&gt; would be greater than cLowQualityTimeThreshold and so stop the lower quality rendering just when it should be using it.
&gt; &gt; &gt; 
&gt; &gt; &gt; Am I misunderstanding the code?
&gt; &gt; &gt; 
&gt; &gt; &gt; --Oliver
&gt; &gt; 
&gt; &gt; Yes, if your entire page takes more than 500ms to render, it&apos;ll never kick in.  This is the same problem that the original algorithm had in Chrome (and I&apos;m assuming why 500ms was used for the background image version, instead of 50ms for RenderImage).
&gt; &gt; 
&gt; &gt; In my first patch, I tried to factor out rendering time by measuring it, but unfortunately this is quite tricky to do.  It worked in Chrome, but not in Safari, due to differing ways that damage rects are coalesced in the two browsers.
&gt; &gt; 
&gt; &gt; The current patch just extends the existing algorithm to cover multiple resizes, with the caveat that the total rendering time still has to be less than 500ms.
&gt; 
&gt; Something i was considering was doing something along the lines of measuring how much time had passed since the last paint call, and if it was lower than a certain threshold use that as a flag to indicate that it may be worth recording information to trigger lower quality scaling?

That&apos;s kind of what I did in the first patch.  The problem is, Safari was doing three separate paint calls (three damage rects) for each draw.  So even on a single draw, where no animation was happening, there would be two quick &quot;zero time between paint&quot; events.  So it&apos;s hard to distinguish between that and a timer-based redraw loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238112</commentid>
    <comment_count>35</comment_count>
      <attachid>58718</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-14 15:56:41 -0700</bug_when>
    <thetext>Created attachment 58718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239135</commentid>
    <comment_count>36</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-16 16:06:19 -0700</bug_when>
    <thetext>r-&apos;ing myself.

During additional testing, I found an issue where the system could end up toggling endlessly between high and low quality.  I originally thought I had fixed this problem by introducing a factor of 2.0 between the time threshold and the timer, but this was just masking the problem.

The real fix here is not to do a high quality draw if the timer is still outstanding.  This fixes the flickering problem, and lets me lower the timer:threshold factor to 1.05 (so that it just covers the threshold).  Patch upcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239160</commentid>
    <comment_count>37</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-06-16 17:27:00 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; r-&apos;ing myself.

Thanks I was just looking at this.


&gt; During additional testing, I found an issue where the system could end up toggling endlessly between high and low quality.  I originally thought I had fixed this problem by introducing a factor of 2.0 between the time threshold and the timer, but this was just masking the problem.
&gt; 
&gt; The real fix here is not to do a high quality draw if the timer is still outstanding.  This fixes the flickering problem, and lets me lower the timer:threshold factor to 1.05 (so that it just covers the threshold).  Patch upcoming.

I validated that your previous patch didn&apos;t regress (nor improve) GUIMark and GUIMark 2.

When I looked at the checkins for the code that you are changing, I found this comment:

   https://bugs.webkit.org/show_bug.cgi?id=33808#c21 (and then comment 24)

which is interesting. Note that this is what resulted in the transform check that you are removing.

In short, please *make sure to test the new tab page* in Chromium to verify that the problem isn&apos;t reintroduced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239402</commentid>
    <comment_count>38</comment_count>
      <attachid>58996</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-17 08:17:33 -0700</bug_when>
    <thetext>Created attachment 58996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239496</commentid>
    <comment_count>39</comment_count>
      <attachid>59020</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-17 11:25:08 -0700</bug_when>
    <thetext>Created attachment 59020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239499</commentid>
    <comment_count>40</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-17 11:27:18 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=59020) [details]
&gt; Patch

No code changes; added expected pixel test failures to test_expectations.txt.  Updated ChangeLogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239501</commentid>
    <comment_count>41</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-17 11:31:54 -0700</bug_when>
    <thetext>I responded to David in private; posting here for posterity.

(In reply to comment #37)
&gt; When I looked at the checkins for the code that you are changing, I found this comment:
&gt; 
&gt;    https://bugs.webkit.org/show_bug.cgi?id=33808#c21 (and then comment 24)
&gt; 
&gt; which is interesting. Note that this is what resulted in the transform check that you are removing.

Note that I put the transform check back (and added it also for the RenderImage case).

&gt; In short, please *make sure to test the new tab page* in Chromium to verify that the problem isn&apos;t reintroduced.

Checked.  The NTP seems fine, and a previous version of this change successfully passed the trybots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239535</commentid>
    <comment_count>42</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-06-17 12:51:11 -0700</bug_when>
    <thetext>Committed r61341: &lt;http://trac.webkit.org/changeset/61341&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241634</commentid>
    <comment_count>43</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-06-22 21:07:34 -0700</bug_when>
    <thetext>This change caused bug 41036.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54717</attachid>
            <date>2010-04-29 10:32:10 -0700</date>
            <delta_ts>2010-05-04 10:35:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100429103209.patch</filename>
            <type>text/plain</type>
            <size>17428</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODUyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMDQtMjkgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBtdWx0aXBsZSBhbmltYXRlZCByZXNpemUgaXNzdWUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODIzMworCisgICAgICAgIENv
dmVyZWQgYnkgYmFja2dyb3VuZFNpemUxNS5odG1sLCBjb250YWluLWFuZC1jb3Zlci5odG1sLCBi
YWNrZ3JvdW5kU2l6ZVJlcGFpbnQuaHRtbCwgbGlzdGJveC1zY3JvbGxiYXItY29tYmluYXRpb25z
Lmh0bWwsIG92ZXJmbG93LXNjcm9sbGJhci1jb21iaW5hdGlvbnMuaHRtbCwgY29vcmRzLXZpZXdh
dHRyLTAyLWIuc3ZnCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6bGFzdFBhaW50RHVyYXRpb24pOgorICAgICAgICBDb21wdXRlIHRo
ZSBkdXJhdGlvbiBvZiB0aGUgbGFzdCBwYWludCwgYW5kIHN0b3JlIGl0IGluIHRoZSBGcmFtZVZp
ZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgSW1wbGVtZW50IHNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSBieSBzdG9yaW5nIGl0IGluIHRoZSBwbGF0Zm9ybSBjb250ZXh0LgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZVJlc2FtcGxpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZXNh
bXBsZWRCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICBEbyBhbiBhZGRpdGlvbmFs
IGNoZWNrIHdoZW4gdXNpbmcgdGhlIExhbmN6b3MzIGltYWdlIGludGVycG9sYXRpb246IGNoZWNr
IHRoYXQgdGhlIHBsYXRmb3JtIGNvbnRleHQncyBpbWFnZSBpbnRlcnBvbGF0aW9uIHF1YWxpdHkg
aXMgc2V0IHRvIEludGVycG9sYXRpb25IaWdoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4
dFNraWE6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjppbnRl
cnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRJbnRl
cnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgIFJldGFpbiB0aGUgaW1hZ2UgaW50ZXJwb2xhdGlv
biBxdWFsaXR5IGluIFBsYXRmb3JtQ29udGV4dFNraWEsIGFuZCBzYXZlL3Jlc3RvcmUgaXQgd2l0
aCB0aGUgcGxhdGZvcm0gc3RhdGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZURhdGE6OlJlbmRlckltYWdl
U2NhbGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlU2NhbGVEYXRhOjp+UmVu
ZGVySW1hZ2VTY2FsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZURh
dGE6OnRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZURhdGE6OnNldFRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpSZW5kZXJJ
bWFnZVNjYWxlT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZU9i
c2VydmVyOjpnZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZVNjYWxl
T2JzZXJ2ZXI6OmltYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
U2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OnJlc3RhcnRUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OnNob3VsZEltYWdlUGFpbnRBdExv
d1F1YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6On5SZW5kZXJJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdCk6CisgICAgICAg
IEltcGxlbWVudCBhIHNpbmdsZSB0aW1lciBmb3IgYWxsIG91dHN0YW5kaW5nIHJlc2l6ZXM7IHJl
bW92ZSB0aGUgc3RpY2t5IGJpdCBmcm9tIHF1YWxpdHkgcmVzaXplczsgdHVybiBSZW5kZXJJbWFn
ZVNjYWxlT2JzZXJ2ZXIgaW50byBhIHNpbmdsZXRvbi4KKwogMjAxMC0wNC0yOCAgRGltaXRyaSBH
bGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDU4MzQyKQorKysgV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMsNyBAQCB2
b2lkIEZyYW1lVmlldzo6cmVzZXQoKQogICAgIG1fZGVmZXJyZWRSZXBhaW50RGVsYXkgPSBpbml0
aWFsRGVmZXJyZWRSZXBhaW50RGVsYXlEdXJpbmdMb2FkaW5nOwogICAgIG1fZGVmZXJyZWRSZXBh
aW50VGltZXIuc3RvcCgpOwogICAgIG1fbGFzdFBhaW50VGltZSA9IDA7CisgICAgbV9sYXN0UGFp
bnREdXJhdGlvbiA9IDA7CiAgICAgbV9wYWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1h
bDsKICAgICBtX2lzUGFpbnRpbmcgPSBmYWxzZTsKICAgICBtX2lzVmlzdWFsbHlOb25FbXB0eSA9
IGZhbHNlOwpAQCAtMTgxMyw2ICsxODE0LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVu
dHMoR3JhcGhpY3NDbwogICAgIEFTU0VSVCghbV9pc1BhaW50aW5nKTsKICAgICAgICAgCiAgICAg
bV9pc1BhaW50aW5nID0gdHJ1ZTsKKyAgICBkb3VibGUgcGFpbnRTdGFydFRpbWUgPSBjdXJyZW50
VGltZSgpOwogICAgICAgICAKICAgICAvLyBtX25vZGVUb0RyYXcgaXMgdXNlZCB0byBkcmF3IG9u
bHkgb25lIGVsZW1lbnQgKGFuZCBpdHMgZGVzY2VuZGFudHMpCiAgICAgUmVuZGVyT2JqZWN0KiBl
bHRSZW5kZXJlciA9IG1fbm9kZVRvRHJhdyA/IG1fbm9kZVRvRHJhdy0+cmVuZGVyZXIoKSA6IDA7
CkBAIC0xODMwLDYgKzE4MzIsNyBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFw
aGljc0NvCiAgICAgCiAgICAgbV9pc1BhaW50aW5nID0gZmFsc2U7CiAgICAgbV9sYXN0UGFpbnRU
aW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2xhc3RQYWludER1cmF0aW9uID0gbV9sYXN0UGFp
bnRUaW1lIC0gcGFpbnRTdGFydFRpbWU7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgLy8gUmVnaW9ucyBtYXkgaGF2ZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSB2aXNp
YmlsaXR5L3otaW5kZXggb2YgZWxlbWVudCBjaGFuZ2luZy4KSW5kZXg6IFdlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlz
aW9uIDU4MzQyKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODUsNiArMTg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Tm9kZVRvRHJhdyhOb2RlKik7
CiAKICAgICBzdGF0aWMgZG91YmxlIGN1cnJlbnRQYWludFRpbWVTdGFtcCgpIHsgcmV0dXJuIHND
dXJyZW50UGFpbnRUaW1lU3RhbXA7IH0gLy8gcmV0dXJucyAwIGlmIG5vdCBwYWludGluZworICAg
IGRvdWJsZSBsYXN0UGFpbnREdXJhdGlvbigpIHsgcmV0dXJuIG1fbGFzdFBhaW50RHVyYXRpb247
IH0KICAgICAKICAgICB2b2lkIGxheW91dElmTmVlZGVkUmVjdXJzaXZlKCk7CiAgICAgdm9pZCBm
bHVzaERlZmVycmVkUmVwYWludHMoKTsKQEAgLTMyMSw2ICszMjIsNyBAQCBwcml2YXRlOgogICAg
IFRpbWVyPEZyYW1lVmlldz4gbV9kZWZlcnJlZFJlcGFpbnRUaW1lcjsKICAgICBkb3VibGUgbV9k
ZWZlcnJlZFJlcGFpbnREZWxheTsKICAgICBkb3VibGUgbV9sYXN0UGFpbnRUaW1lOworICAgIGRv
dWJsZSBtX2xhc3RQYWludER1cmF0aW9uOwogCiAgICAgYm9vbCBtX3Nob3VsZFVwZGF0ZVdoaWxl
T2Zmc2NyZWVuOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA1ODM0MikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODc1LDkgKzg3NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21w
b3NpdGVPcGVyYXQKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0WGZlcm1vZGVNb2RlKFdlYkNv
cmVDb21wb3NpdGVUb1NraWFDb21wb3NpdGUob3ApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSBxKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPnNldEludGVycG9sYXRpb25RdWFsaXR5KHEpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCShyZXZpc2lvbiA1ODM0MikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw3ICs2NCw3IEBAIGVudW0gUmVzYW1wbGluZ01vZGUgewogICAgIFJFU0FNUExFX0FXRVNP
TUUsCiB9OwogCi1zdGF0aWMgUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNv
bnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQs
IGZsb2F0IGRlc3RXaWR0aCwgZmxvYXQgZGVzdEhlaWdodCkKK3N0YXRpYyBSZXNhbXBsaW5nTW9k
ZSBjb21wdXRlUmVzYW1wbGluZ01vZGUoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgaW50IHNyY1dpZHRoLCBpbnQgc3Jj
SGVpZ2h0LCBmbG9hdCBkZXN0V2lkdGgsIGZsb2F0IGRlc3RIZWlnaHQpCiB7CiAgICAgaW50IGRl
c3RJV2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCk7CiAgICAgaW50IGRlc3RJSGVp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihkZXN0SGVpZ2h0KTsKQEAgLTEzMCw3ICsxMzAsMTEgQEAg
c3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1dGVSZXNhbXBsaW5nTQogICAgICAgICByZXR1cm4g
UkVTQU1QTEVfTElORUFSOwogCiAgICAgLy8gRXZlcnl0aGluZyBlbHNlIGdldHMgcmVzYW1wbGVk
LgotICAgIHJldHVybiBSRVNBTVBMRV9BV0VTT01FOworICAgIC8vIElmIHRoZSBwbGF0Zm9ybSBj
b250ZXh0IHBlcm1pdHMgaGlnaCBxdWFsaXR5IGludGVycG9sYXRpb24sIHVzZSBpdC4KKyAgICBp
ZiAocGxhdGZvcm1Db250ZXh0LT5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpID09IEludGVycG9sYXRp
b25IaWdoKQorICAgICAgICByZXR1cm4gUkVTQU1QTEVfQVdFU09NRTsKKyAgICAKKyAgICByZXR1
cm4gUkVTQU1QTEVfTElORUFSOwogfQogCiAvLyBEcmF3cyB0aGUgZ2l2ZW4gYml0bWFwIHRvIHRo
ZSBnaXZlbiBjYW52YXMuIFRoZSBzdWJzZXQgb2YgdGhlIHNvdXJjZSBiaXRtYXAKQEAgLTE4NCw3
ICsxODgsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFzCiAgICAg
aWYgKCFkZXN0Qml0bWFwU3Vic2V0U2tJLmludGVyc2VjdChyZXNpemVkSW1hZ2VSZWN0KSkKICAg
ICAgICAgcmV0dXJuOyAgLy8gUmVzaXplZCBpbWFnZSBkb2VzIG5vdCBpbnRlcnNlY3QuCiAKLSAg
ICBpZiAoc3JjSXNGdWxsICYmIGJpdG1hcC5zaG91bGRDYWNoZVJlc2FtcGxpbmcoCisgICAgaWYg
KHNyY0lzRnVsbCB8fCBiaXRtYXAuc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKAogICAgICAgICAgICAg
cmVzaXplZEltYWdlUmVjdC53aWR0aCgpLAogICAgICAgICAgICAgcmVzaXplZEltYWdlUmVjdC5o
ZWlnaHQoKSwKICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRTa0kud2lkdGgoKSwKQEAgLTIz
MCw3ICsyMzQsNyBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4CiAg
ICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFz
KCk7CiAKICAgICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5p
c1ByaW50aW5nKCkgPyBSRVNBTVBMRV9OT05FIDoKLSAgICAgICAgY29tcHV0ZVJlc2FtcGxpbmdN
b2RlKGJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLAorICAgICAgICBj
b21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LCBiaXRtYXAsIHNyY1JlY3Qud2lk
dGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNr
U2NhbGFyVG9GbG9hdChkZXN0UmVjdC53aWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC5oZWlnaHQoKSkpOwogICAgIGlmIChyZXNh
bXBsaW5nID09IFJFU0FNUExFX0FXRVNPTUUpIHsKQEAgLTMzNiw3ICszNDAsNyBAQCB2b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgaWYgKGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5pc1ByaW50aW5nKCkpCiAgICAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVf
TElORUFSOwogICAgIGVsc2UgewotICAgICAgcmVzYW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5n
TW9kZSgqYml0bWFwLAorICAgICAgcmVzYW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5nTW9kZShj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgKmJpdG1hcCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Qml0bWFwV2lkdGgs
IGRlc3RCaXRtYXBIZWlnaHQpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDU4
MzQyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBAIHN0cnVjdCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpTdGF0ZSB7CiAgICAgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgY2xpcHBpbmcgcGF0
aHMgd2hpY2ggYXJlIGN1cnJlbnRseSBhY3RpdmUsIGluIHRoZQogICAgIC8vIG9yZGVyIGluIHdo
aWNoIHRoZXkgd2VyZSBwdXNoZWQuCiAgICAgV1RGOjpWZWN0b3I8U2tQYXRoPiBtX2FudGlBbGlh
c0NsaXBQYXRoczsKKyAgICBXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9s
YXRpb25RdWFsaXR5OwogCiBwcml2YXRlOgogICAgIC8vIE5vdCBzdXBwb3J0ZWQuCkBAIC0xMjMs
NiArMTI0LDcgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OlN0YXRlKCkKICAgICAsIG1f
bGluZUpvaW4oU2tQYWludDo6a0RlZmF1bHRfSm9pbikKICAgICAsIG1fZGFzaCgwKQogICAgICwg
bV90ZXh0RHJhd2luZ01vZGUoV2ViQ29yZTo6Y1RleHRGaWxsKQorICAgICwgbV9pbnRlcnBvbGF0
aW9uUXVhbGl0eShXZWJDb3JlOjpJbnRlcnBvbGF0aW9uSGlnaCkKIHsKIH0KIApAQCAtMTQ3LDYg
KzE0OSw3IEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjpTdGF0ZShjb25zdCAKICAgICAs
IG1faW1hZ2VCdWZmZXJDbGlwKG90aGVyLm1faW1hZ2VCdWZmZXJDbGlwKQogICAgICwgbV9jbGlw
KG90aGVyLm1fY2xpcCkKICNlbmRpZgorICAgICwgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eShvdGhl
ci5tX2ludGVycG9sYXRpb25RdWFsaXR5KQogewogICAgIC8vIFVwIHRoZSByZWYgY291bnQgb2Yg
dGhlc2UuIHNhdmVSZWYgZG9lcyBub3RoaW5nIGlmICd0aGlzJyBpcyBOVUxMLgogICAgIG1fbG9v
cGVyLT5zYWZlUmVmKCk7CkBAIC01MzksNiArNTQyLDE2IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6c2V0RmlsbFNoYWRlcigKICAgICB9CiB9CiAKK1dlYkNvcmU6OkludGVycG9sYXRpb25R
dWFsaXR5IFBsYXRmb3JtQ29udGV4dFNraWE6OmludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdGF0ZS0+bV9pbnRlcnBvbGF0aW9uUXVhbGl0eTsKK30KKwordm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShXZWJDb3JlOjpJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3sKKyAgICBtX3N0YXRl
LT5tX2ludGVycG9sYXRpb25RdWFsaXR5ID0gaW50ZXJwb2xhdGlvblF1YWxpdHk7Cit9CisKIHZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0RGFzaFBhdGhFZmZlY3QoU2tEYXNoUGF0aEVmZmVj
dCogZGFzaCkKIHsKICAgICBpZiAoZGFzaCAhPSBtX3N0YXRlLT5tX2Rhc2gpIHsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNr
aWEuaAkocmV2aXNpb24gNTgzNDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDkgQEAg
cHVibGljOgogCiAgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcygpIHsgcmV0dXJuIG1f
Y2FudmFzOyB9CiAKKyAgICBXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0
aW9uUXVhbGl0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoV2Vi
Q29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkpOworCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHB1c2hlZCBkb3duIHRvIEdyYXBoaWNzQ29udGV4dC4K
ICAgICB2b2lkIGRyYXdSZWN0KFNrUmVjdCByZWN0KTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcAkocmV2aXNpb24gNTgzNDIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDY0ICs1Niw2NCBAQCBzdGF0aWMgY29uc3Qg
ZG91YmxlIGNMb3dRdWFsaXR5VGltZVRocmVzCiAKIGNsYXNzIFJlbmRlckltYWdlU2NhbGVEYXRh
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBSZW5kZXJJbWFnZVNjYWxlRGF0
YShSZW5kZXJJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUsIGRvdWJsZSB0aW1lLCBi
b29sIGxvd1F1YWxpdHlTY2FsZSkKLSAgICAgICAgOiBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBt
X3RpbWUodGltZSkKLSAgICAgICAgLCBtX2xvd1F1YWxpdHlTY2FsZShsb3dRdWFsaXR5U2NhbGUp
Ci0gICAgICAgICwgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcihpbWFnZSwgJlJlbmRlckltYWdl
OjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKQorICAgIFJlbmRlckltYWdlU2NhbGVEYXRh
KGRvdWJsZSB0aW1lKSA6CisgICAgICAgIG1fdGltZSh0aW1lKQogICAgIHsKICAgICB9CiAKICAg
ICB+UmVuZGVySW1hZ2VTY2FsZURhdGEoKQogICAgIHsKLSAgICAgICAgbV9oaWdoUXVhbGl0eVJl
cGFpbnRUaW1lci5zdG9wKCk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IEludFNpemUmIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBkb3VibGUgdGltZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGltZTsgfQotICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9sb3dRdWFsaXR5U2NhbGU7IH0KLSAgICBUaW1lcjxSZW5kZXJJbWFnZT4mIGhpcWhRdWFs
aXR5UmVwYWludFRpbWVyKCkgeyByZXR1cm4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsgfQog
Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIHMpIHsgbV9zaXplID0gczsgfQogICAg
IHZvaWQgc2V0VGltZShkb3VibGUgdCkgeyBtX3RpbWUgPSB0OyB9Ci0gICAgdm9pZCBzZXRVc2VM
b3dRdWFsaXR5U2NhbGUoYm9vbCBiKQotICAgIHsKLSAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFp
bnRUaW1lci5zdG9wKCk7Ci0gICAgICAgIG1fbG93UXVhbGl0eVNjYWxlID0gYjsKLSAgICAgICAg
aWYgKGIpCi0gICAgICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0YXJ0T25lU2hv
dChjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQpOwotICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAg
SW50U2l6ZSBtX3NpemU7CiAgICAgZG91YmxlIG1fdGltZTsKLSAgICBib29sIG1fbG93UXVhbGl0
eVNjYWxlOwotICAgIFRpbWVyPFJlbmRlckltYWdlPiBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVy
OwogfTsKIAotY2xhc3MgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyIHsKK3R5cGVkZWYgSGFzaE1h
cDxSZW5kZXJJbWFnZSosIFJlbmRlckltYWdlU2NhbGVEYXRhKj4gUmVuZGVySW1hZ2VTY2FsZU1h
cDsKKworY2xhc3MgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5
KFJlbmRlckltYWdlKiwgY29uc3QgSW50U2l6ZSYpOworICAgIFJlbmRlckltYWdlU2NhbGVPYnNl
cnZlcigpIDogbV9pbWFnZXMoMCksIG1fdGltZXIodGhpcywgJlJlbmRlckltYWdlU2NhbGVPYnNl
cnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCkge30KKyAgICBzdGF0aWMgUmVuZGVy
SW1hZ2VTY2FsZU9ic2VydmVyKiBnZXRJbnN0YW5jZSgpCisgICAgeworICAgICAgICBpZiAoIWdJ
bnN0YW5jZSkKKyAgICAgICAgICAgIGdJbnN0YW5jZSA9IG5ldyBSZW5kZXJJbWFnZVNjYWxlT2Jz
ZXJ2ZXI7CisgICAgICAgIHJldHVybiBnSW5zdGFuY2U7CisgICAgfQorICAgIGJvb2wgc2hvdWxk
SW1hZ2VQYWludEF0TG93UXVhbGl0eShSZW5kZXJJbWFnZSosIGNvbnN0IEludFNpemUmKTsKIAot
ICAgIHN0YXRpYyB2b2lkIGltYWdlRGVzdHJveWVkKFJlbmRlckltYWdlKiBpbWFnZSkKKyAgICB2
b2lkIGltYWdlRGVzdHJveWVkKFJlbmRlckltYWdlKiBpbWFnZSkKICAgICB7Ci0gICAgICAgIGlm
IChnSW1hZ2VzKSB7Ci0gICAgICAgICAgICBSZW5kZXJJbWFnZVNjYWxlRGF0YSogZGF0YSA9IGdJ
bWFnZXMtPnRha2UoaW1hZ2UpOworICAgICAgICBpZiAobV9pbWFnZXMpIHsKKyAgICAgICAgICAg
IFJlbmRlckltYWdlU2NhbGVEYXRhKiBkYXRhID0gbV9pbWFnZXMtPnRha2UoaW1hZ2UpOwogICAg
ICAgICAgICAgZGVsZXRlIGRhdGE7Ci0gICAgICAgICAgICBpZiAoZ0ltYWdlcy0+c2l6ZSgpID09
IDApIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgZ0ltYWdlczsKLSAgICAgICAgICAgICAgICBn
SW1hZ2VzID0gMDsKKyAgICAgICAgICAgIGlmICghbV9pbWFnZXMtPnNpemUoKSkgeworICAgICAg
ICAgICAgICAgIGRlbGV0ZSBtX2ltYWdlczsKKyAgICAgICAgICAgICAgICBtX2ltYWdlcyA9IDA7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQg
aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChSZW5kZXJJbWFnZSogaW1hZ2UpCisgICAgdm9p
ZCBoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlckltYWdlU2NhbGVPYnNl
cnZlcj4qKQogICAgIHsKLSAgICAgICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjppbWFnZURl
c3Ryb3llZChpbWFnZSk7Ci0gICAgICAgIGltYWdlLT5yZXBhaW50KCk7CisgICAgICAgIGlmICht
X2ltYWdlcykgeworICAgICAgICAgICAgZm9yIChSZW5kZXJJbWFnZVNjYWxlTWFwOjppdGVyYXRv
ciBpdCA9IG1faW1hZ2VzLT5iZWdpbigpOyBpdCAhPSBtX2ltYWdlcy0+ZW5kKCk7ICsraXQpCisg
ICAgICAgICAgICAgICAgaXQtPmZpcnN0LT5yZXBhaW50KCk7CisgICAgICAgIH0KICAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIEhhc2hNYXA8UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFnZVNjYWxlRGF0
YSo+KiBnSW1hZ2VzOworICAgIHZvaWQgcmVzdGFydFRpbWVyKCkKKyAgICB7CisgICAgICAgIG1f
dGltZXIuc3RvcCgpOworICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChjTG93UXVhbGl0eVRp
bWVUaHJlc2hvbGQgKiAyKTsKKyAgICB9Citwcml2YXRlOgorICAgIFJlbmRlckltYWdlU2NhbGVN
YXAqIG1faW1hZ2VzOworICAgIFRpbWVyPFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcj4gbV90aW1l
cjsKKyAgICBzdGF0aWMgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyKiBnSW5zdGFuY2U7CiB9Owog
CiBib29sIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxkSW1hZ2VQYWludEF0TG93UXVh
bGl0eShSZW5kZXJJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0xMjksMTMg
KzEyOSwxMyBAQCBib29sIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxkSW1hCiAKICAg
ICAvLyBMb29rIG91cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlLgogICAgIFJlbmRlckltYWdl
U2NhbGVEYXRhKiBkYXRhID0gMDsKLSAgICBpZiAoZ0ltYWdlcykKLSAgICAgICAgZGF0YSA9IGdJ
bWFnZXMtPmdldChpbWFnZSk7CisgICAgaWYgKG1faW1hZ2VzKQorICAgICAgICBkYXRhID0gbV9p
bWFnZXMtPmdldChpbWFnZSk7CiAKICAgICBpZiAoaW1hZ2VTaXplID09IHNpemUpIHsKICAgICAg
ICAgLy8gVGhlcmUgaXMgbm8gc2NhbGUgaW4gZWZmZWN0LiAgSWYgd2UgaGFkIGEgc2NhbGUgaW4g
ZWZmZWN0IGJlZm9yZSwgd2UgY2FuIGp1c3QgZGVsZXRlIHRoaXMgZGF0YS4KICAgICAgICAgaWYg
KGRhdGEpIHsKLSAgICAgICAgICAgIGdJbWFnZXMtPnJlbW92ZShpbWFnZSk7CisgICAgICAgICAg
ICBtX2ltYWdlcy0+cmVtb3ZlKGltYWdlKTsKICAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1MSwzMiArMTUxLDI3IEBAIGJvb2wg
UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpzaG91bGRJbWEKICAgICAvLyBJZiB0aGVyZSBpcyBu
byBkYXRhIHlldCwgd2Ugd2lsbCBwYWludCB0aGUgZmlyc3Qgc2NhbGUgYXQgaGlnaCBxdWFsaXR5
IGFuZCByZWNvcmQgdGhlIHBhaW50IHRpbWUgaW4gY2FzZSBhIHNlY29uZCBzY2FsZSBoYXBwZW5z
CiAgICAgLy8gdmVyeSBzb29uLgogICAgIGlmICghZGF0YSkgewotICAgICAgICBkYXRhID0gbmV3
IFJlbmRlckltYWdlU2NhbGVEYXRhKGltYWdlLCBzaXplLCBjdXJyZW50VGltZSgpLCBmYWxzZSk7
Ci0gICAgICAgIGlmICghZ0ltYWdlcykKLSAgICAgICAgICAgIGdJbWFnZXMgPSBuZXcgSGFzaE1h
cDxSZW5kZXJJbWFnZSosIFJlbmRlckltYWdlU2NhbGVEYXRhKj47Ci0gICAgICAgIGdJbWFnZXMt
PnNldChpbWFnZSwgZGF0YSk7CisgICAgICAgIGRhdGEgPSBuZXcgUmVuZGVySW1hZ2VTY2FsZURh
dGEoY3VycmVudFRpbWUoKSk7CisgICAgICAgIGlmICghbV9pbWFnZXMpCisgICAgICAgICAgICBt
X2ltYWdlcyA9IG5ldyBSZW5kZXJJbWFnZVNjYWxlTWFwOworICAgICAgICBtX2ltYWdlcy0+c2V0
KGltYWdlLCBkYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIC8vIFdl
IGFyZSBzY2FsZWQsIGJ1dCB3ZSBwYWludGVkIGFscmVhZHkgYXQgdGhpcyBzaXplLCBzbyBqdXN0
IGtlZXAgdXNpbmcgd2hhdGV2ZXIgbW9kZSB3ZSBsYXN0IHBhaW50ZWQgd2l0aC4KLSAgICBpZiAo
ZGF0YS0+c2l6ZSgpID09IHNpemUpCi0gICAgICAgIHJldHVybiBkYXRhLT51c2VMb3dRdWFsaXR5
U2NhbGUoKTsKLQotICAgIC8vIFdlIGhhdmUgZGF0YSBhbmQgb3VyIHNpemUganVzdCBjaGFuZ2Vk
LiAgSWYgdGhpcyBjaGFuZ2UgaGFwcGVuZWQgcXVpY2tseSwgZ28gaW50byBsb3cgcXVhbGl0eSBt
b2RlIGFuZCB0aGVuIHNldCBhIHJlcGFpbnQKLSAgICAvLyB0aW1lciB0byBwYWludCBpbiBoaWdo
IHF1YWxpdHkgbW9kZS4gIE90aGVyd2lzZSBpdCBpcyBvayB0byBqdXN0IHBhaW50IGluIGhpZ2gg
cXVhbGl0eSBtb2RlLgogICAgIGRvdWJsZSBuZXdUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBk
YXRhLT5zZXRVc2VMb3dRdWFsaXR5U2NhbGUobmV3VGltZSAtIGRhdGEtPnRpbWUoKSA8IGNMb3dR
dWFsaXR5VGltZVRocmVzaG9sZCk7CisgICAgaWYgKG5ld1RpbWUgLSBkYXRhLT50aW1lKCkgLSBp
bWFnZS0+dmlldygpLT5mcmFtZVZpZXcoKS0+bGFzdFBhaW50RHVyYXRpb24oKSA+PSBjTG93UXVh
bGl0eVRpbWVUaHJlc2hvbGQpIHsKKyAgICAgICAgLy8gSWYgaXQgaGFzIGJlZW4gYXQgYSBsZWFz
dCA8dGhyZXNob2xkPiBzaW5jZSB0aGUgbGFzdCB0aW1lIGEgcmVzaXplCisgICAgICAgIC8vIHdh
cyByZXF1ZXN0ZWQsIGV4Y2x1ZGluZyBwYWludCB0aW1lLCBkcmF3IGF0IGhpIHF1YWxpdHkgYW5k
IGRvbid0CisgICAgICAgIC8vIHNldCB0aGUgdGltZXIuCisgICAgICAgIGltYWdlRGVzdHJveWVk
KGltYWdlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBEcmF3IGF0IGxv
dyBxdWFsaXR5IGZpcnN0LCBhbmQgc2V0IGEgdGltZXIgZm9yIEhRLgogICAgIGRhdGEtPnNldFRp
bWUobmV3VGltZSk7Ci0gICAgZGF0YS0+c2V0U2l6ZShzaXplKTsKLSAgICByZXR1cm4gZGF0YS0+
dXNlTG93UXVhbGl0eVNjYWxlKCk7CisgICAgcmVzdGFydFRpbWVyKCk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUhhc2hNYXA8UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFnZVNjYWxlRGF0YSo+KiBS
ZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmdJbWFnZXMgPSAwOwotCi12b2lkIFJlbmRlckltYWdl
OjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlckltYWdlPiopCi17Ci0g
ICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVk
KHRoaXMpOwotfQorUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyKiBSZW5kZXJJbWFnZVNjYWxlT2Jz
ZXJ2ZXI6OmdJbnN0YW5jZSA9IDA7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKQEAg
LTE5Myw3ICsxODgsNyBAQCBSZW5kZXJJbWFnZTo6flJlbmRlckltYWdlKCkKIHsKICAgICBpZiAo
bV9jYWNoZWRJbWFnZSkKICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMp
OwotICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aW1hZ2VEZXN0cm95ZWQodGhpcyk7Cisg
ICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpnZXRJbnN0YW5jZSgpLT5pbWFnZURlc3Ryb3ll
ZCh0aGlzKTsKIH0KIAogdm9pZCBSZW5kZXJJbWFnZTo6c2V0Q2FjaGVkSW1hZ2UoQ2FjaGVkSW1h
Z2UqIG5ld0ltYWdlKQpAQCAtNDg2LDcgKzQ4MSw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50
SW50b1JlY3QoR3JhcGhpY3MKIAogICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWx0ID0gKG5v
ZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoaW1nVGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MSW1h
Z2VFbGVtZW50Kj4obm9kZSgpKSA6IDA7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29t
cG9zaXRlU291cmNlT3ZlcjsKLSAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gUmVuZGVy
SW1hZ2VTY2FsZU9ic2VydmVyOjpzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KHRoaXMsIHJl
Y3Quc2l6ZSgpKTsKKyAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gUmVuZGVySW1hZ2VT
Y2FsZU9ic2VydmVyOjpnZXRJbnN0YW5jZSgpLT5zaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5
KHRoaXMsIHJlY3Quc2l6ZSgpKTsKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UocmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCByZWN0LCBjb21w
b3NpdGVPcGVyYXRvciwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55027</attachid>
            <date>2010-05-04 10:35:27 -0700</date>
            <delta_ts>2010-05-28 13:08:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100504133525.patch</filename>
            <type>text/plain</type>
            <size>14838</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODc2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDUtMDQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBtdWx0aXBsZSBhbmltYXRlZCByZXNpemUgaXNzdWUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODIzMworCisgICAgICAgIENv
dmVyZWQgYnkgYmFja2dyb3VuZFNpemUxNS5odG1sLCBjb250YWluLWFuZC1jb3Zlci5odG1sLCBi
YWNrZ3JvdW5kU2l6ZVJlcGFpbnQuaHRtbCwgbGlzdGJveC1zY3JvbGxiYXItY29tYmluYXRpb25z
Lmh0bWwsIG92ZXJmbG93LXNjcm9sbGJhci1jb21iaW5hdGlvbnMuaHRtbCwgY29vcmRzLXZpZXdh
dHRyLTAyLWIuc3ZnCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNz
Q29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVzYW1wbGluZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1Jlc2FtcGxlZEJpdG1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0
dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjpTdGF0ZSk6Cisg
ICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjppbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAg
ICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckltYWdlU2NhbGVEYXRhOjpSZW5kZXJJbWFnZVNjYWxlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZVNjYWxlRGF0YTo6flJlbmRlckltYWdlU2NhbGVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckltYWdlU2NhbGVEYXRhOjp0aW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckltYWdlU2NhbGVEYXRhOjpzZXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckltYWdlU2NhbGVPYnNlcnZlcjo6UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6Z2V0SW5zdGFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjppbWFnZURlc3Ryb3llZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmhpZ2hRdWFsaXR5UmVw
YWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZU9ic2Vy
dmVyOjpyZXN0YXJ0VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZU9i
c2VydmVyOjpzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckltYWdlOjp+UmVuZGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2U6OnBhaW50SW50b1JlY3QpOgorCiAyMDEwLTA1LTA0ICBCZW4gTXVyZG9jaCAgPGJlbm1AZ29v
Z2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAJKHJldmlzaW9uIDU4NzU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzksOSArODc5
LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdAogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXRYZmVybW9kZU1vZGUoV2ViQ29yZUNvbXBvc2l0ZVRvU2tpYUNvbXBv
c2l0ZShvcCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHEpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0SW50ZXJwb2xh
dGlvblF1YWxpdHkocSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExp
bmVDYXAgY2FwKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tp
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAJKHJldmlzaW9uIDU4NzU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgZW51bSBS
ZXNhbXBsaW5nTW9kZSB7CiAgICAgUkVTQU1QTEVfQVdFU09NRSwKIH07CiAKLXN0YXRpYyBSZXNh
bXBsaW5nTW9kZSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBi
aXRtYXAsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCwgZmxvYXQgZGVzdFdpZHRoLCBmbG9h
dCBkZXN0SGVpZ2h0KQorc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1dGVSZXNhbXBsaW5nTW9k
ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWdl
U2tpYSYgYml0bWFwLCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQsIGZsb2F0IGRlc3RXaWR0
aCwgZmxvYXQgZGVzdEhlaWdodCkKIHsKICAgICBpbnQgZGVzdElXaWR0aCA9IHN0YXRpY19jYXN0
PGludD4oZGVzdFdpZHRoKTsKICAgICBpbnQgZGVzdElIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KGRlc3RIZWlnaHQpOwpAQCAtMTMwLDcgKzEzMCwxMSBAQCBzdGF0aWMgUmVzYW1wbGluZ01vZGUg
Y29tcHV0ZVJlc2FtcGxpbmdNCiAgICAgICAgIHJldHVybiBSRVNBTVBMRV9MSU5FQVI7CiAKICAg
ICAvLyBFdmVyeXRoaW5nIGVsc2UgZ2V0cyByZXNhbXBsZWQuCi0gICAgcmV0dXJuIFJFU0FNUExF
X0FXRVNPTUU7CisgICAgLy8gSWYgdGhlIHBsYXRmb3JtIGNvbnRleHQgcGVybWl0cyBoaWdoIHF1
YWxpdHkgaW50ZXJwb2xhdGlvbiwgdXNlIGl0LgorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPmlu
dGVycG9sYXRpb25RdWFsaXR5KCkgPT0gSW50ZXJwb2xhdGlvbkhpZ2gpCisgICAgICAgIHJldHVy
biBSRVNBTVBMRV9BV0VTT01FOworICAgIAorICAgIHJldHVybiBSRVNBTVBMRV9MSU5FQVI7CiB9
CiAKIC8vIERyYXdzIHRoZSBnaXZlbiBiaXRtYXAgdG8gdGhlIGdpdmVuIGNhbnZhcy4gVGhlIHN1
YnNldCBvZiB0aGUgc291cmNlIGJpdG1hcApAQCAtMTg0LDcgKzE4OCw3IEBAIHN0YXRpYyB2b2lk
IGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMKICAgICBpZiAoIWRlc3RCaXRtYXBTdWJzZXRT
a0kuaW50ZXJzZWN0KHJlc2l6ZWRJbWFnZVJlY3QpKQogICAgICAgICByZXR1cm47ICAvLyBSZXNp
emVkIGltYWdlIGRvZXMgbm90IGludGVyc2VjdC4KIAotICAgIGlmIChzcmNJc0Z1bGwgJiYgYml0
bWFwLnNob3VsZENhY2hlUmVzYW1wbGluZygKKyAgICBpZiAoc3JjSXNGdWxsIHx8IGJpdG1hcC5z
aG91bGRDYWNoZVJlc2FtcGxpbmcoCiAgICAgICAgICAgICByZXNpemVkSW1hZ2VSZWN0LndpZHRo
KCksCiAgICAgICAgICAgICByZXNpemVkSW1hZ2VSZWN0LmhlaWdodCgpLAogICAgICAgICAgICAg
ZGVzdEJpdG1hcFN1YnNldFNrSS53aWR0aCgpLApAQCAtMjMwLDcgKzIzNCw3IEBAIHN0YXRpYyB2
b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXgKICAgICBza2lhOjpQbGF0Zm9ybUNhbnZh
cyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKTsKIAogICAgIFJlc2FtcGxpbmdN
b2RlIHJlc2FtcGxpbmcgPSBwbGF0Zm9ybUNvbnRleHQtPmlzUHJpbnRpbmcoKSA/IFJFU0FNUExF
X05PTkUgOgotICAgICAgICBjb21wdXRlUmVzYW1wbGluZ01vZGUoYml0bWFwLCBzcmNSZWN0Lndp
ZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCisgICAgICAgIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShw
bGF0Zm9ybUNvbnRleHQsIGJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0
LndpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0
KGRlc3RSZWN0LmhlaWdodCgpKSk7CiAgICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdF
U09NRSkgewpAQCAtMzM2LDcgKzM0MCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCoKICAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzUHJpbnRp
bmcoKSkKICAgICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CiAgICAgZWxzZSB7Ci0g
ICAgICByZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKCpiaXRtYXAsCisgICAgICBy
ZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCAqYml0bWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
cmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBXaWR0aCwgZGVzdEJpdG1hcEhlaWdodCk7CiAg
ICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNTg3NTkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDYgKzk5LDcgQEAgc3RydWN0IFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlIHsKICAg
ICAvLyBUaGlzIGlzIGEgbGlzdCBvZiBjbGlwcGluZyBwYXRocyB3aGljaCBhcmUgY3VycmVudGx5
IGFjdGl2ZSwgaW4gdGhlCiAgICAgLy8gb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHB1c2hlZC4K
ICAgICBXVEY6OlZlY3RvcjxTa1BhdGg+IG1fYW50aUFsaWFzQ2xpcFBhdGhzOworICAgIFdlYkNv
cmU6OkludGVycG9sYXRpb25RdWFsaXR5IG1faW50ZXJwb2xhdGlvblF1YWxpdHk7CiAKIHByaXZh
dGU6CiAgICAgLy8gTm90IHN1cHBvcnRlZC4KQEAgLTEyMyw2ICsxMjQsNyBAQCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpTdGF0ZTo6U3RhdGUoKQogICAgICwgbV9saW5lSm9pbihTa1BhaW50OjprRGVm
YXVsdF9Kb2luKQogICAgICwgbV9kYXNoKDApCiAgICAgLCBtX3RleHREcmF3aW5nTW9kZShXZWJD
b3JlOjpjVGV4dEZpbGwpCisgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5KFdlYkNvcmU6Oklu
dGVycG9sYXRpb25IaWdoKQogewogfQogCkBAIC0xNDcsNiArMTQ5LDcgQEAgUGxhdGZvcm1Db250
ZXh0U2tpYTo6U3RhdGU6OlN0YXRlKGNvbnN0IAogICAgICwgbV9pbWFnZUJ1ZmZlckNsaXAob3Ro
ZXIubV9pbWFnZUJ1ZmZlckNsaXApCiAgICAgLCBtX2NsaXAob3RoZXIubV9jbGlwKQogI2VuZGlm
CisgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5KG90aGVyLm1faW50ZXJwb2xhdGlvblF1YWxp
dHkpCiB7CiAgICAgLy8gVXAgdGhlIHJlZiBjb3VudCBvZiB0aGVzZS4gc2F2ZVJlZiBkb2VzIG5v
dGhpbmcgaWYgJ3RoaXMnIGlzIE5VTEwuCiAgICAgbV9sb29wZXItPnNhZmVSZWYoKTsKQEAgLTUz
OSw2ICs1NDIsMTYgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRGaWxsU2hhZGVyKAog
ICAgIH0KIH0KIAorV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHkgUGxhdGZvcm1Db250ZXh0
U2tpYTo6aW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRl
LT5tX2ludGVycG9sYXRpb25RdWFsaXR5OworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OnNldEludGVycG9sYXRpb25RdWFsaXR5KFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5IGlu
dGVycG9sYXRpb25RdWFsaXR5KQoreworICAgIG1fc3RhdGUtPm1faW50ZXJwb2xhdGlvblF1YWxp
dHkgPSBpbnRlcnBvbGF0aW9uUXVhbGl0eTsKK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpzZXREYXNoUGF0aEVmZmVjdChTa0Rhc2hQYXRoRWZmZWN0KiBkYXNoKQogewogICAgIGlmIChk
YXNoICE9IG1fc3RhdGUtPm1fZGFzaCkgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCShyZXZpc2lvbiA1ODc1OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsOSBAQCBwdWJsaWM6CiAKICAgICBza2lhOjpQ
bGF0Zm9ybUNhbnZhcyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KIAorICAgIFdlYkNv
cmU6OkludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVh
bGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgcHVzaGVkIGRvd24gdG8gR3JhcGhpY3NDb250ZXh0LgogICAgIHZvaWQgZHJhd1JlY3QoU2tS
ZWN0IHJlY3QpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA1
ODc1OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNjggKzUyLDY4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgY0ludGVycG9sYXRpb25DdXRvZmYgPSA4MDAu
ICogODAwLjsKLXN0YXRpYyBjb25zdCBkb3VibGUgY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkID0g
MC4wNTA7IC8vIDUwIG1zCitzdGF0aWMgY29uc3QgZG91YmxlIGNMb3dRdWFsaXR5VGltZVRocmVz
aG9sZCA9IDAuNTAwOyAvLyA1MDAgbXMKIAogY2xhc3MgUmVuZGVySW1hZ2VTY2FsZURhdGEgOiBw
dWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKFJl
bmRlckltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgZG91YmxlIHRpbWUsIGJvb2wg
bG93UXVhbGl0eVNjYWxlKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgICAgICAsIG1fdGlt
ZSh0aW1lKQotICAgICAgICAsIG1fbG93UXVhbGl0eVNjYWxlKGxvd1F1YWxpdHlTY2FsZSkKLSAg
ICAgICAgLCBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyKGltYWdlLCAmUmVuZGVySW1hZ2U6Omhp
Z2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQpCisgICAgUmVuZGVySW1hZ2VTY2FsZURhdGEoZG91
YmxlIHRpbWUpIDoKKyAgICAgICAgbV90aW1lKHRpbWUpCiAgICAgewogICAgIH0KIAogICAgIH5S
ZW5kZXJJbWFnZVNjYWxlRGF0YSgpCiAgICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWlu
dFRpbWVyLnN0b3AoKTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIGRvdWJsZSB0aW1lKCkgY29uc3QgeyByZXR1cm4g
bV90aW1lOyB9Ci0gICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUoKSBjb25zdCB7IHJldHVybiBt
X2xvd1F1YWxpdHlTY2FsZTsgfQotICAgIFRpbWVyPFJlbmRlckltYWdlPiYgaGlxaFF1YWxpdHlS
ZXBhaW50VGltZXIoKSB7IHJldHVybiBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyOyB9CiAKLSAg
ICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBtX3NpemUgPSBzOyB9CiAgICAgdm9p
ZCBzZXRUaW1lKGRvdWJsZSB0KSB7IG1fdGltZSA9IHQ7IH0KLSAgICB2b2lkIHNldFVzZUxvd1F1
YWxpdHlTY2FsZShib29sIGIpCi0gICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRp
bWVyLnN0b3AoKTsKLSAgICAgICAgbV9sb3dRdWFsaXR5U2NhbGUgPSBiOwotICAgICAgICBpZiAo
YikKLSAgICAgICAgICAgIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KGNM
b3dRdWFsaXR5VGltZVRocmVzaG9sZCk7Ci0gICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBJbnRT
aXplIG1fc2l6ZTsKICAgICBkb3VibGUgbV90aW1lOwotICAgIGJvb2wgbV9sb3dRdWFsaXR5U2Nh
bGU7Ci0gICAgVGltZXI8UmVuZGVySW1hZ2U+IG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXI7CiB9
OwogCi1jbGFzcyBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXIgewordHlwZWRlZiBIYXNoTWFwPFJl
bmRlckltYWdlKiwgUmVuZGVySW1hZ2VTY2FsZURhdGEqPiBSZW5kZXJJbWFnZVNjYWxlTWFwOwor
CitjbGFzcyBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewog
cHVibGljOgotICAgIHN0YXRpYyBib29sIHNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkoUmVu
ZGVySW1hZ2UqLCBjb25zdCBJbnRTaXplJik7CisgICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVy
KCkgOiBtX2ltYWdlcygwKSwgbV90aW1lcih0aGlzLCAmUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVy
OjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKSB7fQorICAgIHN0YXRpYyBSZW5kZXJJbWFn
ZVNjYWxlT2JzZXJ2ZXIqIGdldEluc3RhbmNlKCkKKyAgICB7CisgICAgICAgIGlmICghZ0luc3Rh
bmNlKQorICAgICAgICAgICAgZ0luc3RhbmNlID0gbmV3IFJlbmRlckltYWdlU2NhbGVPYnNlcnZl
cjsKKyAgICAgICAgcmV0dXJuIGdJbnN0YW5jZTsKKyAgICB9CisgICAgYm9vbCBzaG91bGRJbWFn
ZVBhaW50QXRMb3dRdWFsaXR5KFJlbmRlckltYWdlKiwgY29uc3QgSW50U2l6ZSYpOwogCi0gICAg
c3RhdGljIHZvaWQgaW1hZ2VEZXN0cm95ZWQoUmVuZGVySW1hZ2UqIGltYWdlKQorICAgIHZvaWQg
aW1hZ2VEZXN0cm95ZWQoUmVuZGVySW1hZ2UqIGltYWdlKQogICAgIHsKLSAgICAgICAgaWYgKGdJ
bWFnZXMpIHsKLSAgICAgICAgICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKiBkYXRhID0gZ0ltYWdl
cy0+dGFrZShpbWFnZSk7CisgICAgICAgIGlmIChtX2ltYWdlcykgeworICAgICAgICAgICAgUmVu
ZGVySW1hZ2VTY2FsZURhdGEqIGRhdGEgPSBtX2ltYWdlcy0+dGFrZShpbWFnZSk7CiAgICAgICAg
ICAgICBkZWxldGUgZGF0YTsKLSAgICAgICAgICAgIGlmIChnSW1hZ2VzLT5zaXplKCkgPT0gMCkg
ewotICAgICAgICAgICAgICAgIGRlbGV0ZSBnSW1hZ2VzOwotICAgICAgICAgICAgICAgIGdJbWFn
ZXMgPSAwOworICAgICAgICAgICAgaWYgKCFtX2ltYWdlcy0+c2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG1faW1hZ2VzOworICAgICAgICAgICAgICAgIG1faW1hZ2VzID0gMDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBoaWdo
UXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFJlbmRlckltYWdlKiBpbWFnZSkKKyAgICB2b2lkIGhp
Z2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVy
PiopCiAgICAgewotICAgICAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmltYWdlRGVzdHJv
eWVkKGltYWdlKTsKLSAgICAgICAgaW1hZ2UtPnJlcGFpbnQoKTsKKyAgICAgICAgaWYgKG1faW1h
Z2VzKSB7CisgICAgICAgICAgICBmb3IgKFJlbmRlckltYWdlU2NhbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pbWFnZXMtPmJlZ2luKCk7IGl0ICE9IG1faW1hZ2VzLT5lbmQoKTsgKytpdCkKKyAgICAg
ICAgICAgICAgICBpdC0+Zmlyc3QtPnJlcGFpbnQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAK
LSAgICBzdGF0aWMgSGFzaE1hcDxSZW5kZXJJbWFnZSosIFJlbmRlckltYWdlU2NhbGVEYXRhKj4q
IGdJbWFnZXM7CisgICAgdm9pZCByZXN0YXJ0VGltZXIoKQorICAgIHsKKyAgICAgICAgbV90aW1l
ci5zdG9wKCk7CisgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGNMb3dRdWFsaXR5VGltZVRo
cmVzaG9sZCAqIDIpOworICAgIH0KK3ByaXZhdGU6CisgICAgUmVuZGVySW1hZ2VTY2FsZU1hcCog
bV9pbWFnZXM7CisgICAgVGltZXI8UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyPiBtX3RpbWVyOwor
ICAgIHN0YXRpYyBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXIqIGdJbnN0YW5jZTsKIH07CiAKIGJv
b2wgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5
KFJlbmRlckltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTEyOSwxMyArMTI5
LDEzIEBAIGJvb2wgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpzaG91bGRJbWEKIAogICAgIC8v
IExvb2sgb3Vyc2VsdmVzIHVwIGluIHRoZSBoYXNodGFibGUuCiAgICAgUmVuZGVySW1hZ2VTY2Fs
ZURhdGEqIGRhdGEgPSAwOwotICAgIGlmIChnSW1hZ2VzKQotICAgICAgICBkYXRhID0gZ0ltYWdl
cy0+Z2V0KGltYWdlKTsKKyAgICBpZiAobV9pbWFnZXMpCisgICAgICAgIGRhdGEgPSBtX2ltYWdl
cy0+Z2V0KGltYWdlKTsKIAogICAgIGlmIChpbWFnZVNpemUgPT0gc2l6ZSkgewogICAgICAgICAv
LyBUaGVyZSBpcyBubyBzY2FsZSBpbiBlZmZlY3QuICBJZiB3ZSBoYWQgYSBzY2FsZSBpbiBlZmZl
Y3QgYmVmb3JlLCB3ZSBjYW4ganVzdCBkZWxldGUgdGhpcyBkYXRhLgogICAgICAgICBpZiAoZGF0
YSkgewotICAgICAgICAgICAgZ0ltYWdlcy0+cmVtb3ZlKGltYWdlKTsKKyAgICAgICAgICAgIG1f
aW1hZ2VzLT5yZW1vdmUoaW1hZ2UpOwogICAgICAgICAgICAgZGVsZXRlIGRhdGE7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUxLDMyICsxNTEsMjYgQEAgYm9vbCBSZW5k
ZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OnNob3VsZEltYQogICAgIC8vIElmIHRoZXJlIGlzIG5vIGRh
dGEgeWV0LCB3ZSB3aWxsIHBhaW50IHRoZSBmaXJzdCBzY2FsZSBhdCBoaWdoIHF1YWxpdHkgYW5k
IHJlY29yZCB0aGUgcGFpbnQgdGltZSBpbiBjYXNlIGEgc2Vjb25kIHNjYWxlIGhhcHBlbnMKICAg
ICAvLyB2ZXJ5IHNvb24uCiAgICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGRhdGEgPSBuZXcgUmVu
ZGVySW1hZ2VTY2FsZURhdGEoaW1hZ2UsIHNpemUsIGN1cnJlbnRUaW1lKCksIGZhbHNlKTsKLSAg
ICAgICAgaWYgKCFnSW1hZ2VzKQotICAgICAgICAgICAgZ0ltYWdlcyA9IG5ldyBIYXNoTWFwPFJl
bmRlckltYWdlKiwgUmVuZGVySW1hZ2VTY2FsZURhdGEqPjsKLSAgICAgICAgZ0ltYWdlcy0+c2V0
KGltYWdlLCBkYXRhKTsKKyAgICAgICAgZGF0YSA9IG5ldyBSZW5kZXJJbWFnZVNjYWxlRGF0YShj
dXJyZW50VGltZSgpKTsKKyAgICAgICAgaWYgKCFtX2ltYWdlcykKKyAgICAgICAgICAgIG1faW1h
Z2VzID0gbmV3IFJlbmRlckltYWdlU2NhbGVNYXA7CisgICAgICAgIG1faW1hZ2VzLT5zZXQoaW1h
Z2UsIGRhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgLy8gV2UgYXJl
IHNjYWxlZCwgYnV0IHdlIHBhaW50ZWQgYWxyZWFkeSBhdCB0aGlzIHNpemUsIHNvIGp1c3Qga2Vl
cCB1c2luZyB3aGF0ZXZlciBtb2RlIHdlIGxhc3QgcGFpbnRlZCB3aXRoLgotICAgIGlmIChkYXRh
LT5zaXplKCkgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuIGRhdGEtPnVzZUxvd1F1YWxpdHlTY2Fs
ZSgpOwotCi0gICAgLy8gV2UgaGF2ZSBkYXRhIGFuZCBvdXIgc2l6ZSBqdXN0IGNoYW5nZWQuICBJ
ZiB0aGlzIGNoYW5nZSBoYXBwZW5lZCBxdWlja2x5LCBnbyBpbnRvIGxvdyBxdWFsaXR5IG1vZGUg
YW5kIHRoZW4gc2V0IGEgcmVwYWludAotICAgIC8vIHRpbWVyIHRvIHBhaW50IGluIGhpZ2ggcXVh
bGl0eSBtb2RlLiAgT3RoZXJ3aXNlIGl0IGlzIG9rIHRvIGp1c3QgcGFpbnQgaW4gaGlnaCBxdWFs
aXR5IG1vZGUuCiAgICAgZG91YmxlIG5ld1RpbWUgPSBjdXJyZW50VGltZSgpOwotICAgIGRhdGEt
PnNldFVzZUxvd1F1YWxpdHlTY2FsZShuZXdUaW1lIC0gZGF0YS0+dGltZSgpIDwgY0xvd1F1YWxp
dHlUaW1lVGhyZXNob2xkKTsKKyAgICBpZiAobmV3VGltZSAtIGRhdGEtPnRpbWUoKSA+PSBjTG93
UXVhbGl0eVRpbWVUaHJlc2hvbGQpIHsKKyAgICAgICAgLy8gSWYgaXQgaGFzIGJlZW4gYXQgbGVh
c3QgPHRocmVzaG9sZD4gc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB0aW1lIGEKKyAgICAgICAgLy8g
cmVzaXplIHdhcyByZXF1ZXN0ZWQsIGRyYXcgYXQgaGkgcXVhbGl0eSBhbmQgZG9uJ3Qgc2V0IHRo
ZSB0aW1lci4KKyAgICAgICAgaW1hZ2VEZXN0cm95ZWQoaW1hZ2UpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIC8vIERyYXcgYXQgbG93IHF1YWxpdHkgZmlyc3QsIGFuZCBzZXQg
YSB0aW1lciBmb3IgSFEuCiAgICAgZGF0YS0+c2V0VGltZShuZXdUaW1lKTsKLSAgICBkYXRhLT5z
ZXRTaXplKHNpemUpOwotICAgIHJldHVybiBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKKyAg
ICByZXN0YXJ0VGltZXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSGFzaE1hcDxSZW5kZXJJ
bWFnZSosIFJlbmRlckltYWdlU2NhbGVEYXRhKj4qIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6
Z0ltYWdlcyA9IDA7Ci0KLXZvaWQgUmVuZGVySW1hZ2U6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVy
RmlyZWQoVGltZXI8UmVuZGVySW1hZ2U+KikKLXsKLSAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2
ZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQodGhpcyk7Ci19CitSZW5kZXJJbWFnZVNj
YWxlT2JzZXJ2ZXIqIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6Z0luc3RhbmNlID0gMDsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIApAQCAtMTkzLDcgKzE4Nyw3IEBAIFJlbmRlcklt
YWdlOjp+UmVuZGVySW1hZ2UoKQogewogICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAgICBt
X2NhY2hlZEltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgUmVuZGVySW1hZ2VTY2FsZU9i
c2VydmVyOjppbWFnZURlc3Ryb3llZCh0aGlzKTsKKyAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2
ZXI6OmdldEluc3RhbmNlKCktPmltYWdlRGVzdHJveWVkKHRoaXMpOwogfQogCiB2b2lkIFJlbmRl
ckltYWdlOjpzZXRDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSogbmV3SW1hZ2UpCkBAIC00ODYsNyAr
NDgwLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFwaGljcwogCiAgICAg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbHQgPSAobm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFt
ZShpbWdUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihub2RlKCkpIDogMDsK
ICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdlRWx0ID8gaW1h
Z2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3VyY2VPdmVyOwotICAgIGJv
b2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OnNob3Vs
ZEltYWdlUGFpbnRBdExvd1F1YWxpdHkodGhpcywgcmVjdC5zaXplKCkpOworICAgIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxpbmcgPSBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmdldEluc3RhbmNl
KCktPnNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkodGhpcywgcmVjdC5zaXplKCkpOwogICAg
IGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpLCBz
dHlsZSgpLT5jb2xvclNwYWNlKCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1c2VMb3dRdWFs
aXR5U2NhbGluZyk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57367</attachid>
            <date>2010-05-28 13:08:27 -0700</date>
            <delta_ts>2010-06-01 08:26:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100528160825.patch</filename>
            <type>text/plain</type>
            <size>9463</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDM3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDUtMjggIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBtdWx0aXBsZSBhbmltYXRlZCByZXNpemUgaXNzdWUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODIzMworCisgICAgICAgIFRo
aXMgaW1wcm92ZXMgU2FmYXJpIHBlcmZvcm1hbmNlIGZvciB0aGUgZm9sbG93aW5nIElFOSBwbGF0
Zm9ybSBkZW1vcyBvbiBteSBDMkQgTWFjUHJvICgxMC41KToKKyAgICAgICAgaHR0cDovL2llLm1p
Y3Jvc29mdC5jb20vdGVzdGRyaXZlL1BlcmZvcm1hbmNlLzAxRmx5aW5nSW1hZ2VzL0RlZmF1bHQu
aHRtbCAoNC0+NjBmcHMpCisgICAgICAgIGh0dHA6Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2
ZS9QZXJmb3JtYW5jZS8xMEZsaWNrckV4cGxvcmVyL0RlZmF1bHQuaHRtbCAoMy0+MTZmcHMpCisg
ICAgICAgIGh0dHA6Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9QZXJmb3JtYW5jZS8xMUJy
b3dzZXJGbGlwL0RlZmF1bHQuaHRtbCAoOS0+NjBmcHMpCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICBDaGFuZ2UgdGhlIHJlbmRlcmluZyB0aHJlc2hvbGQg
dG8gNTAwbXMgKHNhbWUgYXMgaXMgZG9uZSBmb3IgYmFja2dyb3VuZCBpbWFnZSByZXNpemUpLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZURhdGE6OlJlbmRlckltYWdlU2NhbGVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlU2NhbGVEYXRhOjp+UmVuZGVySW1h
Z2VTY2FsZURhdGEpOgorICAgICAgICBVbmlmeSBhbGwgdGltZXJzIGludG8gYSBzaW5nbGUgdGlt
ZXIsIGFuZCByZW1vdmUgdGhlIHJlc2l6ZSBxdWFsaXR5ICJzdGlja25lc3MiLCBzaW5jZSBpdCBk
b2Vzbid0IHdvcmsgd2l0aCBtdWx0aXBsZSBvdXRzdGFuZGluZyByZXNpemVzLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZURhdGE6OnNldFNpemUpOiAgUmVtb3ZlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6UmVuZGVySW1hZ2VTY2FsZU9i
c2VydmVyKToKKyAgICAgICAgTWFkZSBpbnRvIGEgc2luZ2xldG9uOyBtYWRlIG1faW1hZ2VzIGEg
bWVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpnZXRJ
bnN0YW5jZSk6CisgICAgICAgIFNpbmdsZXRvbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aW1hZ2VEZXN0cm95ZWQpOgorICAgICAg
ICBnSW1hZ2VzIGlzIG5vdyBtX2ltYWdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
U2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCk6CisgICAgICAgIEZu
IG1hZGUgbm9uLXN0YXRpYzsgcmVwYWludCBhbGwgcGVuZGluZyByZXNpemVzIChub3QganVzdCBv
bmUpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpyZXN0YXJ0
VGltZXIpOgorICAgICAgICBBZGRlZCBmbiB0byByZXN0YXJ0IHRpbWVyIGF0IDJ4IHRocmVzaG9s
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxkSW1h
Z2VQYWludEF0TG93UXVhbGl0eSk6CisgICAgICAgIFVzZSBtX2ltYWdlcywgbm90IGdJbWFnZXMu
ICBJbXBsZW1lbnQgbmV3IHRpbWVyIGFsZ29yaXRobS4gIFJlbW92ZQorICAgICAgICByZXNpemUg
InN0aWNraW5lc3MiLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6On5SZW5kZXJJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdCk6CisgICAg
ICAgIENoYW5nZXMgZm9yIHNpbmdsZXRvbi4KKwogMjAxMC0wNS0yOCAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gNjAzNzIpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDY4ICs1Miw2
OCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
Y29uc3QgZG91YmxlIGNJbnRlcnBvbGF0aW9uQ3V0b2ZmID0gODAwLiAqIDgwMC47Ci1zdGF0aWMg
Y29uc3QgZG91YmxlIGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCA9IDAuMDUwOyAvLyA1MCBtcwor
c3RhdGljIGNvbnN0IGRvdWJsZSBjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQgPSAwLjUwMDsgLy8g
NTAwIG1zCiAKIGNsYXNzIFJlbmRlckltYWdlU2NhbGVEYXRhIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJJbWFnZVNjYWxlRGF0YShSZW5kZXJJbWFnZSogaW1hZ2Us
IGNvbnN0IEludFNpemUmIHNpemUsIGRvdWJsZSB0aW1lLCBib29sIGxvd1F1YWxpdHlTY2FsZSkK
LSAgICAgICAgOiBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBtX3RpbWUodGltZSkKLSAgICAgICAg
LCBtX2xvd1F1YWxpdHlTY2FsZShsb3dRdWFsaXR5U2NhbGUpCi0gICAgICAgICwgbV9oaWdoUXVh
bGl0eVJlcGFpbnRUaW1lcihpbWFnZSwgJlJlbmRlckltYWdlOjpoaWdoUXVhbGl0eVJlcGFpbnRU
aW1lckZpcmVkKQorICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKGRvdWJsZSB0aW1lKSA6CisgICAg
ICAgIG1fdGltZSh0aW1lKQogICAgIHsKICAgICB9CiAKICAgICB+UmVuZGVySW1hZ2VTY2FsZURh
dGEoKQogICAgIHsKLSAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdG9wKCk7CiAg
ICAgfQogICAgIAotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KICAgICBkb3VibGUgdGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZTsgfQotICAgIGJv
b2wgdXNlTG93UXVhbGl0eVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dRdWFsaXR5U2NhbGU7
IH0KLSAgICBUaW1lcjxSZW5kZXJJbWFnZT4mIGhpcWhRdWFsaXR5UmVwYWludFRpbWVyKCkgeyBy
ZXR1cm4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsgfQogCi0gICAgdm9pZCBzZXRTaXplKGNv
bnN0IEludFNpemUmIHMpIHsgbV9zaXplID0gczsgfQogICAgIHZvaWQgc2V0VGltZShkb3VibGUg
dCkgeyBtX3RpbWUgPSB0OyB9Ci0gICAgdm9pZCBzZXRVc2VMb3dRdWFsaXR5U2NhbGUoYm9vbCBi
KQotICAgIHsKLSAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdG9wKCk7Ci0gICAg
ICAgIG1fbG93UXVhbGl0eVNjYWxlID0gYjsKLSAgICAgICAgaWYgKGIpCi0gICAgICAgICAgICBt
X2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0YXJ0T25lU2hvdChjTG93UXVhbGl0eVRpbWVUaHJl
c2hvbGQpOwotICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgSW50U2l6ZSBtX3NpemU7CiAgICAg
ZG91YmxlIG1fdGltZTsKLSAgICBib29sIG1fbG93UXVhbGl0eVNjYWxlOwotICAgIFRpbWVyPFJl
bmRlckltYWdlPiBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyOwogfTsKIAotY2xhc3MgUmVuZGVy
SW1hZ2VTY2FsZU9ic2VydmVyIHsKK3R5cGVkZWYgSGFzaE1hcDxSZW5kZXJJbWFnZSosIFJlbmRl
ckltYWdlU2NhbGVEYXRhKj4gUmVuZGVySW1hZ2VTY2FsZU1hcDsKKworY2xhc3MgUmVuZGVySW1h
Z2VTY2FsZU9ic2VydmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgYm9vbCBzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KFJlbmRlckltYWdlKiwgY29uc3Qg
SW50U2l6ZSYpOworICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcigpIDogbV9pbWFnZXMoMCks
IG1fdGltZXIodGhpcywgJlJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBh
aW50VGltZXJGaXJlZCkge30KKyAgICBzdGF0aWMgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyKiBn
ZXRJbnN0YW5jZSgpCisgICAgeworICAgICAgICBpZiAoIWdJbnN0YW5jZSkKKyAgICAgICAgICAg
IGdJbnN0YW5jZSA9IG5ldyBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI7CisgICAgICAgIHJldHVy
biBnSW5zdGFuY2U7CisgICAgfQorICAgIGJvb2wgc2hvdWxkSW1hZ2VQYWludEF0TG93UXVhbGl0
eShSZW5kZXJJbWFnZSosIGNvbnN0IEludFNpemUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGltYWdl
RGVzdHJveWVkKFJlbmRlckltYWdlKiBpbWFnZSkKKyAgICB2b2lkIGltYWdlRGVzdHJveWVkKFJl
bmRlckltYWdlKiBpbWFnZSkKICAgICB7Ci0gICAgICAgIGlmIChnSW1hZ2VzKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJJbWFnZVNjYWxlRGF0YSogZGF0YSA9IGdJbWFnZXMtPnRha2UoaW1hZ2UpOwor
ICAgICAgICBpZiAobV9pbWFnZXMpIHsKKyAgICAgICAgICAgIFJlbmRlckltYWdlU2NhbGVEYXRh
KiBkYXRhID0gbV9pbWFnZXMtPnRha2UoaW1hZ2UpOwogICAgICAgICAgICAgZGVsZXRlIGRhdGE7
Ci0gICAgICAgICAgICBpZiAoZ0ltYWdlcy0+c2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgZ0ltYWdlczsKLSAgICAgICAgICAgICAgICBnSW1hZ2VzID0gMDsKKyAgICAgICAg
ICAgIGlmICghbV9pbWFnZXMtPnNpemUoKSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX2lt
YWdlczsKKyAgICAgICAgICAgICAgICBtX2ltYWdlcyA9IDA7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGlt
ZXJGaXJlZChSZW5kZXJJbWFnZSogaW1hZ2UpCisgICAgdm9pZCBoaWdoUXVhbGl0eVJlcGFpbnRU
aW1lckZpcmVkKFRpbWVyPFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcj4qKQogICAgIHsKLSAgICAg
ICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjppbWFnZURlc3Ryb3llZChpbWFnZSk7Ci0gICAg
ICAgIGltYWdlLT5yZXBhaW50KCk7CisgICAgICAgIGlmIChtX2ltYWdlcykgeworICAgICAgICAg
ICAgZm9yIChSZW5kZXJJbWFnZVNjYWxlTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VzLT5iZWdp
bigpOyBpdCAhPSBtX2ltYWdlcy0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICAgICAgaXQtPmZp
cnN0LT5yZXBhaW50KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgc3RhdGljIEhhc2hN
YXA8UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFnZVNjYWxlRGF0YSo+KiBnSW1hZ2VzOworICAgIHZv
aWQgcmVzdGFydFRpbWVyKCkKKyAgICB7CisgICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgICAg
ICBtX3RpbWVyLnN0YXJ0T25lU2hvdChjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQgKiAyKTsKKyAg
ICB9Citwcml2YXRlOgorICAgIFJlbmRlckltYWdlU2NhbGVNYXAqIG1faW1hZ2VzOworICAgIFRp
bWVyPFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcj4gbV90aW1lcjsKKyAgICBzdGF0aWMgUmVuZGVy
SW1hZ2VTY2FsZU9ic2VydmVyKiBnSW5zdGFuY2U7CiB9OwogCiBib29sIFJlbmRlckltYWdlU2Nh
bGVPYnNlcnZlcjo6c2hvdWxkSW1hZ2VQYWludEF0TG93UXVhbGl0eShSZW5kZXJJbWFnZSogaW1h
Z2UsIGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0xMjksMTMgKzEyOSwxMyBAQCBib29sIFJlbmRl
ckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxkSW1hCiAKICAgICAvLyBMb29rIG91cnNlbHZlcyB1
cCBpbiB0aGUgaGFzaHRhYmxlLgogICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKiBkYXRhID0gMDsK
LSAgICBpZiAoZ0ltYWdlcykKLSAgICAgICAgZGF0YSA9IGdJbWFnZXMtPmdldChpbWFnZSk7Cisg
ICAgaWYgKG1faW1hZ2VzKQorICAgICAgICBkYXRhID0gbV9pbWFnZXMtPmdldChpbWFnZSk7CiAK
ICAgICBpZiAoaW1hZ2VTaXplID09IHNpemUpIHsKICAgICAgICAgLy8gVGhlcmUgaXMgbm8gc2Nh
bGUgaW4gZWZmZWN0LiAgSWYgd2UgaGFkIGEgc2NhbGUgaW4gZWZmZWN0IGJlZm9yZSwgd2UgY2Fu
IGp1c3QgZGVsZXRlIHRoaXMgZGF0YS4KICAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAg
IGdJbWFnZXMtPnJlbW92ZShpbWFnZSk7CisgICAgICAgICAgICBtX2ltYWdlcy0+cmVtb3ZlKGlt
YWdlKTsKICAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE1MSwzMiArMTUxLDI2IEBAIGJvb2wgUmVuZGVySW1hZ2VTY2FsZU9ic2Vy
dmVyOjpzaG91bGRJbWEKICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgd2Ugd2lsbCBw
YWludCB0aGUgZmlyc3Qgc2NhbGUgYXQgaGlnaCBxdWFsaXR5IGFuZCByZWNvcmQgdGhlIHBhaW50
IHRpbWUgaW4gY2FzZSBhIHNlY29uZCBzY2FsZSBoYXBwZW5zCiAgICAgLy8gdmVyeSBzb29uLgog
ICAgIGlmICghZGF0YSkgewotICAgICAgICBkYXRhID0gbmV3IFJlbmRlckltYWdlU2NhbGVEYXRh
KGltYWdlLCBzaXplLCBjdXJyZW50VGltZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZ0ltYWdl
cykKLSAgICAgICAgICAgIGdJbWFnZXMgPSBuZXcgSGFzaE1hcDxSZW5kZXJJbWFnZSosIFJlbmRl
ckltYWdlU2NhbGVEYXRhKj47Ci0gICAgICAgIGdJbWFnZXMtPnNldChpbWFnZSwgZGF0YSk7Cisg
ICAgICAgIGRhdGEgPSBuZXcgUmVuZGVySW1hZ2VTY2FsZURhdGEoY3VycmVudFRpbWUoKSk7Cisg
ICAgICAgIGlmICghbV9pbWFnZXMpCisgICAgICAgICAgICBtX2ltYWdlcyA9IG5ldyBSZW5kZXJJ
bWFnZVNjYWxlTWFwOworICAgICAgICBtX2ltYWdlcy0+c2V0KGltYWdlLCBkYXRhKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIC8vIFdlIGFyZSBzY2FsZWQsIGJ1dCB3ZSBw
YWludGVkIGFscmVhZHkgYXQgdGhpcyBzaXplLCBzbyBqdXN0IGtlZXAgdXNpbmcgd2hhdGV2ZXIg
bW9kZSB3ZSBsYXN0IHBhaW50ZWQgd2l0aC4KLSAgICBpZiAoZGF0YS0+c2l6ZSgpID09IHNpemUp
Ci0gICAgICAgIHJldHVybiBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKLQotICAgIC8vIFdl
IGhhdmUgZGF0YSBhbmQgb3VyIHNpemUganVzdCBjaGFuZ2VkLiAgSWYgdGhpcyBjaGFuZ2UgaGFw
cGVuZWQgcXVpY2tseSwgZ28gaW50byBsb3cgcXVhbGl0eSBtb2RlIGFuZCB0aGVuIHNldCBhIHJl
cGFpbnQKLSAgICAvLyB0aW1lciB0byBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4gIE90aGVy
d2lzZSBpdCBpcyBvayB0byBqdXN0IHBhaW50IGluIGhpZ2ggcXVhbGl0eSBtb2RlLgogICAgIGRv
dWJsZSBuZXdUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBkYXRhLT5zZXRVc2VMb3dRdWFsaXR5
U2NhbGUobmV3VGltZSAtIGRhdGEtPnRpbWUoKSA8IGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7
CisgICAgaWYgKG5ld1RpbWUgLSBkYXRhLT50aW1lKCkgPj0gY0xvd1F1YWxpdHlUaW1lVGhyZXNo
b2xkKSB7CisgICAgICAgIC8vIElmIGl0IGhhcyBiZWVuIGF0IGxlYXN0IDx0aHJlc2hvbGQ+IHNl
Y29uZHMgc2luY2UgdGhlIGxhc3QgdGltZSBhCisgICAgICAgIC8vIHJlc2l6ZSB3YXMgcmVxdWVz
dGVkLCBkcmF3IGF0IGhpIHF1YWxpdHkgYW5kIGRvbid0IHNldCB0aGUgdGltZXIuCisgICAgICAg
IGltYWdlRGVzdHJveWVkKGltYWdlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAvLyBEcmF3IGF0IGxvdyBxdWFsaXR5IGZpcnN0LCBhbmQgc2V0IGEgdGltZXIgZm9yIEhRLgog
ICAgIGRhdGEtPnNldFRpbWUobmV3VGltZSk7Ci0gICAgZGF0YS0+c2V0U2l6ZShzaXplKTsKLSAg
ICByZXR1cm4gZGF0YS0+dXNlTG93UXVhbGl0eVNjYWxlKCk7CisgICAgcmVzdGFydFRpbWVyKCk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhhc2hNYXA8UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFn
ZVNjYWxlRGF0YSo+KiBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmdJbWFnZXMgPSAwOwotCi12
b2lkIFJlbmRlckltYWdlOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRl
ckltYWdlPiopCi17Ci0gICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpoaWdoUXVhbGl0eVJl
cGFpbnRUaW1lckZpcmVkKHRoaXMpOwotfQorUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyKiBSZW5k
ZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmdJbnN0YW5jZSA9IDA7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKQEAgLTE5Myw3ICsxODcsNyBAQCBSZW5kZXJJbWFnZTo6flJlbmRlckltYWdl
KCkKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVt
b3ZlQ2xpZW50KHRoaXMpOwotICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aW1hZ2VEZXN0
cm95ZWQodGhpcyk7CisgICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpnZXRJbnN0YW5jZSgp
LT5pbWFnZURlc3Ryb3llZCh0aGlzKTsKIH0KIAogdm9pZCBSZW5kZXJJbWFnZTo6c2V0Q2FjaGVk
SW1hZ2UoQ2FjaGVkSW1hZ2UqIG5ld0ltYWdlKQpAQCAtNDg2LDcgKzQ4MCw3IEBAIHZvaWQgUmVu
ZGVySW1hZ2U6OnBhaW50SW50b1JlY3QoR3JhcGhpY3MKIAogICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlRWx0ID0gKG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoaW1nVGFnKSkgPyBzdGF0
aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obm9kZSgpKSA6IDA7CiAgICAgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVP
cGVyYXRvcigpIDogQ29tcG9zaXRlU291cmNlT3ZlcjsKLSAgICBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsaW5nID0gUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpzaG91bGRJbWFnZVBhaW50QXRMb3dR
dWFsaXR5KHRoaXMsIHJlY3Quc2l6ZSgpKTsKKyAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5n
ID0gUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpnZXRJbnN0YW5jZSgpLT5zaG91bGRJbWFnZVBh
aW50QXRMb3dRdWFsaXR5KHRoaXMsIHJlY3Quc2l6ZSgpKTsKICAgICBjb250ZXh0LT5kcmF3SW1h
Z2UoaW1hZ2UocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSwgc3R5bGUoKS0+Y29sb3JTcGFj
ZSgpLCByZWN0LCBjb21wb3NpdGVPcGVyYXRvciwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogfQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57547</attachid>
            <date>2010-06-01 08:27:01 -0700</date>
            <delta_ts>2010-06-09 13:01:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100601112659.patch</filename>
            <type>text/plain</type>
            <size>18657</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDQ3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDYtMDEgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBzbG93IG11bHRpcGxlIGFuaW1hdGVkIHJlc2l6ZSBpc3N1ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjMzCisgICAgICAg
IFRoZSB0aW1lci1iYXNlZCByZXNpemUgcXVhbGl0eSBhcHByb2FjaCBpbXBsZW1lbnRlZCBpbgor
ICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8zNDIxMCBpcyBhIGdvb2Qg
aWRlYSwgYnV0IGRvZXNuJ3QKKyAgICAgICAgc2NhbGUgdG8gbXVsdGlwbGUgaW1hZ2VzIHdpdGgg
YW5pbWF0ZWQgcmVzaXplcy4gIFRoaXMgZml4IHVuaWZpZXMgYWxsCisgICAgICAgIG91dHN0YW5k
aW5nIHJlc2l6ZSB0aW1lcnMgaW50byBhIHNpbmdsZSB0aW1lciwgYW5kIHJlbW92ZXMgdGhlICJ1
c2UKKyAgICAgICAgbGFzdCBxdWFsaXR5IiBjaGVjayAod2hpY2ggZG9lc24ndCB3b3JrIHdoZW4g
aW1hZ2VzIGFyZSBvdmVybGFwcGluZykuIAorICAgICAgICBJdCBhbHNvIHJlZmFjdG9ycyB0aGUg
Y29weSBvZiB0aGlzIGNvZGUgaW1wbGVtZW50ZWQgaW4KKyAgICAgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QgaW4gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNTM5NDkuCisKKyAgICAg
ICAgVGhpcyBpbXByb3ZlcyBTYWZhcmkgcGVyZm9ybWFuY2UgZm9yIHRoZSBmb2xsb3dpbmcgSUU5
IHBsYXRmb3JtIGRlbW9zIG9uIG15IEMyRCBNYWNQcm8gKDEwLjUpOgorICAgICAgICBodHRwOi8v
aWUubWljcm9zb2Z0LmNvbS90ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvMDFGbHlpbmdJbWFnZXMvRGVm
YXVsdC5odG1sICg0LT42MGZwcykKKyAgICAgICAgaHR0cDovL2llLm1pY3Jvc29mdC5jb20vdGVz
dGRyaXZlL1BlcmZvcm1hbmNlLzEwRmxpY2tyRXhwbG9yZXIvRGVmYXVsdC5odG1sICgzLT4xNmZw
cykKKyAgICAgICAgaHR0cDovL2llLm1pY3Jvc29mdC5jb20vdGVzdGRyaXZlL1BlcmZvcm1hbmNl
LzExQnJvd3NlckZsaXAvRGVmYXVsdC5odG1sICg5LT42MGZwcykKKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6U2NhbGVPYnNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6Z2V0SW5zdGFuY2Up
OgorICAgICAgICBVbmlmeSBhbGwgdGltZXJzIGludG8gYSBzaW5nbGUgdGltZXIsIGltcGxlbWVu
dCBTY2FsZU9ic2VydmVyIGFzIGEKKyAgICAgICAgc2luZ2xldG9uLCBhbmQgcmVtb3ZlIHRoZSBy
ZXNpemUgcXVhbGl0eSAic3RpY2tuZXNzIiwgc2luY2UgaXQgZG9lc24ndAorICAgICAgICB3b3Jr
IHdpdGggbXVsdGlwbGUgb3V0c3RhbmRpbmcgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpTY2FsZU9ic2VydmVyOjpvYmplY3REZXN0cm95ZWQpOgorICAg
ICAgICBnSW1hZ2VzIGlzIG5vdyBtX29iamVjdHMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJl
ZCk6CisgICAgICAgIEZ1bmN0aW9uIG1hZGUgbm9uLXN0YXRpYzsgcmVwYWludCBhbGwgcGVuZGlu
ZyByZXNpemVzIChub3QganVzdCBvbmUpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6OnJlc3RhcnRUaW1lcik6CisgICAgICAgIEFkZGVkIGZ1
bmN0aW9uIHRvIHJlc3RhcnQgdGltZXIgYXQgMnggdGhyZXNob2xkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6OnNob3VsZFBhaW50QXRMb3dR
dWFsaXR5KToKKyAgICAgICAgVXNlIG1fb2JqZWN0cywgbm90IGdJbWFnZXMuICBJbXBsZW1lbnQg
bmV3IHRpbWVyIGFsZ29yaXRobS4gIFJlbW92ZQorICAgICAgICByZXNpemUgInN0aWNraW5lc3Mi
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6On5SZW5kZXJCb3hNb2Rl
bE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRG
aWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIENoYW5nZXMgZm9yIHNpbmdsZXRvbi4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgSW1wbGVtZW50
IFNjYWxlT2JzZXJ2ZXIgYXMgYSBuZXN0ZWQgY2xhc3MuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp+UmVuZGVySW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAg
ICAgICBDaGFuZ2VzIGZvciBzaW5nbGV0b24uCisKIDIwMTAtMDYtMDEgIEFkYW0gTGFuZ2xleSAg
PGFnbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lv
biA2MDQ3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNzMgKzQ4LDQxIEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnNfbGF5ZXJXYXNTZWwKIHN0YXRpYyBjb25zdCBkb3VibGUgY0ludGVycG9sYXRpb25DdXRv
ZmYgPSA4MDAuICogODAwLjsKIHN0YXRpYyBjb25zdCBkb3VibGUgY0xvd1F1YWxpdHlUaW1lVGhy
ZXNob2xkID0gMC41MDA7IC8vIDUwMCBtcwogCi1jbGFzcyBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0
YSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyQm94TW9kZWxTY2Fs
ZURhdGEoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGRvdWJsZSB0aW1lLCBib29sIGxvd1F1
YWxpdHlTY2FsZSkKLSAgICAgICAgOiBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBtX3RyYW5zZm9y
bSh0cmFuc2Zvcm0pCi0gICAgICAgICwgbV9sYXN0UGFpbnRUaW1lKHRpbWUpCi0gICAgICAgICwg
bV9sb3dRdWFsaXR5U2NhbGUobG93UXVhbGl0eVNjYWxlKQotICAgICAgICAsIG1faGlnaFF1YWxp
dHlSZXBhaW50VGltZXIob2JqZWN0LCAmUmVuZGVyQm94TW9kZWxPYmplY3Q6OmhpZ2hRdWFsaXR5
UmVwYWludFRpbWVyRmlyZWQpCi0gICAgewotICAgIH0KLQotICAgIH5SZW5kZXJCb3hNb2RlbFNj
YWxlRGF0YSgpCi0gICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0b3Ao
KTsKLSAgICB9Ci0KLSAgICBUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4mIGhpcWhRdWFsaXR5
UmVwYWludFRpbWVyKCkgeyByZXR1cm4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsgfQotCi0g
ICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZv
aWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzKSB7IG1fc2l6ZSA9IHM7IH0KLSAgICBkb3VibGUg
bGFzdFBhaW50VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBhaW50VGltZTsgfQotICAgIHZv
aWQgc2V0TGFzdFBhaW50VGltZShkb3VibGUgdCkgeyBtX2xhc3RQYWludFRpbWUgPSB0OyB9Ci0g
ICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvd1F1YWxpdHlT
Y2FsZTsgfQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQotICAgIHZv
aWQgc2V0VXNlTG93UXVhbGl0eVNjYWxlKGJvb2wgYikKLSAgICB7Ci0gICAgICAgIG1faGlnaFF1
YWxpdHlSZXBhaW50VGltZXIuc3RvcCgpOwotICAgICAgICBtX2xvd1F1YWxpdHlTY2FsZSA9IGI7
Ci0gICAgICAgIGlmIChiKQotICAgICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5z
dGFydE9uZVNob3QoY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwot
ICAgIGRvdWJsZSBtX2xhc3RQYWludFRpbWU7Ci0gICAgYm9vbCBtX2xvd1F1YWxpdHlTY2FsZTsK
LSAgICBUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1l
cjsKLX07Ci0KLWNsYXNzIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGJvb2wgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRMb3dRdWFsaXR5KEdyYXBoaWNz
Q29udGV4dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiwgSW1hZ2UqLCBjb25zdCBJbnRTaXplJik7
Ci0KLSAgICBzdGF0aWMgdm9pZCBib3hNb2RlbE9iamVjdERlc3Ryb3llZChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogb2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKGdCb3hNb2RlbE9iamVjdHMpIHsK
LSAgICAgICAgICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKiBkYXRhID0gZ0JveE1vZGVsT2Jq
ZWN0cy0+dGFrZShvYmplY3QpOwotICAgICAgICAgICAgZGVsZXRlIGRhdGE7Ci0gICAgICAgICAg
ICBpZiAoIWdCb3hNb2RlbE9iamVjdHMtPnNpemUoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0
ZSBnQm94TW9kZWxPYmplY3RzOwotICAgICAgICAgICAgICAgIGdCb3hNb2RlbE9iamVjdHMgPSAw
OwotICAgICAgICAgICAgfQorUmVuZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6OlNj
YWxlT2JzZXJ2ZXIoKSA6IG1fb2JqZWN0cygwKSwgbV90aW1lcih0aGlzLCAmU2NhbGVPYnNlcnZl
cjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCkge30KKworUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OlNjYWxlT2JzZXJ2ZXIqIFJlbmRlckJveE1vZGVsT2JqZWN0OjpTY2FsZU9ic2VydmVyOjpn
ZXRJbnN0YW5jZSgpCit7CisgICAgaWYgKCFnSW5zdGFuY2UpCisgICAgICAgIGdJbnN0YW5jZSA9
IG5ldyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjsKKyAgICByZXR1cm4gZ0lu
c3RhbmNlOworfQorCit2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpTY2FsZU9ic2VydmVyOjpv
YmplY3REZXN0cm95ZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAo
bV9vYmplY3RzKSB7CisgICAgICAgIG1fb2JqZWN0cy0+dGFrZShvYmplY3QpOworICAgICAgICBp
ZiAoIW1fb2JqZWN0cy0+c2l6ZSgpKSB7CisgICAgICAgICAgICBkZWxldGUgbV9vYmplY3RzOwor
ICAgICAgICAgICAgbV9vYmplY3RzID0gMDsKICAgICAgICAgfQogICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IG9iamVjdCkKLSAgICB7Ci0gICAgICAgIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6Ym94
TW9kZWxPYmplY3REZXN0cm95ZWQob2JqZWN0KTsKLSAgICAgICAgb2JqZWN0LT5yZXBhaW50KCk7
Cit9CisgICAgCit2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpTY2FsZU9ic2VydmVyOjpoaWdo
UXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlckJveE1vZGVsT2JqZWN0OjpTY2Fs
ZU9ic2VydmVyPiopCit7CisgICAgaWYgKG1fb2JqZWN0cykgeworICAgICAgICBmb3IgKFNjYWxl
TWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gbV9vYmplY3RzLT5l
bmQoKTsgKytpdCkKKyAgICAgICAgICAgIGl0LT5maXJzdC0+cmVwYWludCgpOwogICAgIH0KK30K
IAotICAgIHN0YXRpYyBIYXNoTWFwPFJlbmRlckJveE1vZGVsT2JqZWN0KiwgUmVuZGVyQm94TW9k
ZWxTY2FsZURhdGEqPiogZ0JveE1vZGVsT2JqZWN0czsKLX07Cit2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpTY2FsZU9ic2VydmVyOjpyZXN0YXJ0VGltZXIoKQoreworICAgIG1fdGltZXIuc3Rv
cCgpOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCAq
IDIpOworfQogCi1ib29sIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkUGFpbnRC
YWNrZ3JvdW5kQXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyQm94
TW9kZWxPYmplY3QqIG9iamVjdCwgSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRTaXplJiBzaXplKQor
Ym9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6c2hvdWxkUGFpbnRBdExv
d1F1YWxpdHkoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCwgSW1hZ2UqIGltYWdlLCBjb25z
dCBJbnRTaXplJiBzaXplKQogewogICAgIC8vIElmIHRoZSBpbWFnZSBpcyBub3QgYSBiaXRtYXAg
aW1hZ2UsIHRoZW4gbm9uZSBvZiB0aGlzIGlzIHJlbGV2YW50IGFuZCB3ZSBqdXN0IHBhaW50IGF0
IGhpZ2gKICAgICAvLyBxdWFsaXR5LgpAQCAtMTI2LDE3ICs5NCwxNCBAQCBib29sIFJlbmRlckJv
eE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkCiAgICAgSW50U2l6ZSBpbWFnZVNpemUoaW1hZ2Ut
PndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CiAKICAgICAvLyBMb29rIG91cnNlbHZlcyB1cCBp
biB0aGUgaGFzaHRhYmxlLgotICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKiBkYXRhID0gMDsK
LSAgICBpZiAoZ0JveE1vZGVsT2JqZWN0cykKLSAgICAgICAgZGF0YSA9IGdCb3hNb2RlbE9iamVj
dHMtPmdldChvYmplY3QpOwotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdXJyZW50VHJh
bnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7Ci0gICAgYm9vbCBjb250ZXh0SXNTY2FsZWQgPSAh
Y3VycmVudFRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpOwotICAg
IGlmICghY29udGV4dElzU2NhbGVkICYmIGltYWdlU2l6ZSA9PSBzaXplKSB7Ci0gICAgICAgIC8v
IFRoZXJlIGlzIG5vIHNjYWxlIGluIGVmZmVjdC4gIElmIHdlIGhhZCBhIHNjYWxlIGluIGVmZmVj
dCBiZWZvcmUsIHdlIGNhbiBqdXN0IGRlbGV0ZSB0aGlzIGRhdGEuCi0gICAgICAgIGlmIChkYXRh
KSB7Ci0gICAgICAgICAgICBnQm94TW9kZWxPYmplY3RzLT5yZW1vdmUob2JqZWN0KTsKLSAgICAg
ICAgICAgIGRlbGV0ZSBkYXRhOworICAgIGRvdWJsZSB0aW1lID0gMC4wOworICAgIGlmIChtX29i
amVjdHMpCisgICAgICAgIHRpbWUgPSBtX29iamVjdHMtPmdldChvYmplY3QpOworCisgICAgaWYg
KGltYWdlU2l6ZSA9PSBzaXplKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG5vIHNjYWxlIGluIGVm
ZmVjdC4gIElmIHdlIGhhZCBhIHNjYWxlIGluIGVmZmVjdCBiZWZvcmUsIHdlIGNhbiBqdXN0IHJl
bW92ZSB0aGlzIG9iamVjdCBmcm9tIHRoZSBsaXN0LgorICAgICAgICBpZiAodGltZSkgeworICAg
ICAgICAgICAgbV9vYmplY3RzLT5yZW1vdmUob2JqZWN0KTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTUwLDM2ICsxMTUsMjcgQEAgYm9vbCBSZW5kZXJCb3hN
b2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZAogCiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5
ZXQsIHdlIHdpbGwgcGFpbnQgdGhlIGZpcnN0IHNjYWxlIGF0IGhpZ2ggcXVhbGl0eSBhbmQgcmVj
b3JkIHRoZSBwYWludCB0aW1lIGluIGNhc2UgYSBzZWNvbmQgc2NhbGUgaGFwcGVucwogICAgIC8v
IHZlcnkgc29vbi4KLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgZGF0YSA9IG5ldyBSZW5kZXJC
b3hNb2RlbFNjYWxlRGF0YShvYmplY3QsIHNpemUsIGN1cnJlbnRUcmFuc2Zvcm0sIGN1cnJlbnRU
aW1lKCksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFnQm94TW9kZWxPYmplY3RzKQotICAgICAgICAg
ICAgZ0JveE1vZGVsT2JqZWN0cyA9IG5ldyBIYXNoTWFwPFJlbmRlckJveE1vZGVsT2JqZWN0Kiwg
UmVuZGVyQm94TW9kZWxTY2FsZURhdGEqPjsKLSAgICAgICAgZ0JveE1vZGVsT2JqZWN0cy0+c2V0
KG9iamVjdCwgZGF0YSk7CisgICAgaWYgKCF0aW1lKSB7CisgICAgICAgIHRpbWUgPSBjdXJyZW50
VGltZSgpOworICAgICAgICBpZiAoIW1fb2JqZWN0cykKKyAgICAgICAgICAgIG1fb2JqZWN0cyA9
IG5ldyBTY2FsZU1hcDsKKyAgICAgICAgbV9vYmplY3RzLT5zZXQob2JqZWN0LCB0aW1lKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHIgPSBkYXRhLT50cmFuc2Zvcm0oKTsKLSAgICBib29sIHNjYWxlVW5jaGFuZ2VkID0gdHIuYSgp
ID09IGN1cnJlbnRUcmFuc2Zvcm0uYSgpICYmIHRyLmIoKSA9PSBjdXJyZW50VHJhbnNmb3JtLmIo
KSAmJiB0ci5jKCkgPT0gY3VycmVudFRyYW5zZm9ybS5jKCkgJiYgdHIuZCgpID09IGN1cnJlbnRU
cmFuc2Zvcm0uZCgpOwotICAgIC8vIFdlIGFyZSBzY2FsZWQsIGJ1dCB3ZSBwYWludGVkIGFscmVh
ZHkgYXQgdGhpcyBzaXplLCBzbyBqdXN0IGtlZXAgdXNpbmcgd2hhdGV2ZXIgbW9kZSB3ZSBsYXN0
IHBhaW50ZWQgd2l0aC4KLSAgICBpZiAoKCFjb250ZXh0SXNTY2FsZWQgfHwgc2NhbGVVbmNoYW5n
ZWQpICYmIGRhdGEtPnNpemUoKSA9PSBzaXplKQotICAgICAgICByZXR1cm4gZGF0YS0+dXNlTG93
UXVhbGl0eVNjYWxlKCk7Ci0KLSAgICAvLyBXZSBoYXZlIGRhdGEgYW5kIG91ciBzaXplIGp1c3Qg
Y2hhbmdlZC4gIElmIHRoaXMgY2hhbmdlIGhhcHBlbmVkIHF1aWNrbHksIGdvIGludG8gbG93IHF1
YWxpdHkgbW9kZSBhbmQgdGhlbiBzZXQgYSByZXBhaW50Ci0gICAgLy8gdGltZXIgdG8gcGFpbnQg
aW4gaGlnaCBxdWFsaXR5IG1vZGUuICBPdGhlcndpc2UgaXQgaXMgb2sgdG8ganVzdCBwYWludCBp
biBoaWdoIHF1YWxpdHkgbW9kZS4KICAgICBkb3VibGUgbmV3VGltZSA9IGN1cnJlbnRUaW1lKCk7
Ci0gICAgZGF0YS0+c2V0VXNlTG93UXVhbGl0eVNjYWxlKG5ld1RpbWUgLSBkYXRhLT5sYXN0UGFp
bnRUaW1lKCkgPCBjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQpOwotICAgIGRhdGEtPnNldExhc3RQ
YWludFRpbWUobmV3VGltZSk7Ci0gICAgZGF0YS0+c2V0VHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zv
cm0pOwotICAgIGRhdGEtPnNldFNpemUoc2l6ZSk7Ci0gICAgcmV0dXJuIGRhdGEtPnVzZUxvd1F1
YWxpdHlTY2FsZSgpOworICAgIGlmIChuZXdUaW1lIC0gdGltZSA+PSBjTG93UXVhbGl0eVRpbWVU
aHJlc2hvbGQpIHsKKyAgICAgICAgLy8gSWYgaXQgaGFzIGJlZW4gYXQgbGVhc3QgPHRocmVzaG9s
ZD4gc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB0aW1lIGEKKyAgICAgICAgLy8gcmVzaXplIHdhcyBy
ZXF1ZXN0ZWQsIGRyYXcgYXQgaGkgcXVhbGl0eSBhbmQgZG9uJ3Qgc2V0IHRoZSB0aW1lci4KKyAg
ICAgICAgb2JqZWN0RGVzdHJveWVkKG9iamVjdCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgLy8gRHJhdyBhdCBsb3cgcXVhbGl0eSBmaXJzdCwgYW5kIHNldCBhIHRpbWVyIGZv
ciBIUS4KKyAgICBtX29iamVjdHMtPnNldChvYmplY3QsIG5ld1RpbWUpOworICAgIHJlc3RhcnRU
aW1lcigpOworICAgIHJldHVybiB0cnVlOwogfQogCi1IYXNoTWFwPFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiwgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEqPiogUmVuZGVyQm94TW9kZWxTY2FsZU9ic2Vy
dmVyOjpnQm94TW9kZWxPYmplY3RzID0gMDsKLQotdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4q
KQotewotICAgIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50
VGltZXJGaXJlZCh0aGlzKTsKLX0KK1JlbmRlckJveE1vZGVsT2JqZWN0OjpTY2FsZU9ic2VydmVy
KiBSZW5kZXJCb3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6Z0luc3RhbmNlID0gMDsKIAog
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3Rh
dGUgcykKIHsKQEAgLTIxNSw3ICsxNzEsNyBAQCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6flJlbmRl
ckJveE1vZGVsT2JqCiAgICAgLy8gT3VyIGxheWVyIHNob3VsZCBoYXZlIGJlZW4gZGVzdHJveWVk
IGFuZCBjbGVhcmVkIGJ5IG5vdwogICAgIEFTU0VSVCghaGFzTGF5ZXIoKSk7CiAgICAgQVNTRVJU
KCFtX2xheWVyKTsKLSAgICBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OmJveE1vZGVsT2Jq
ZWN0RGVzdHJveWVkKHRoaXMpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0OjpTY2FsZU9ic2Vy
dmVyOjpnZXRJbnN0YW5jZSgpLT5vYmplY3REZXN0cm95ZWQodGhpcyk7CiB9CiAKIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmRlc3Ryb3lMYXllcigpCkBAIC02MzEsNyArNTg3LDcgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAgICAgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3AgPSBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gYmdM
YXllci0+Y29tcG9zaXRlKCkgOiBvcDsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2xpZW50
Rm9yQmFja2dyb3VuZEltYWdlID0gYmFja2dyb3VuZE9iamVjdCA/IGJhY2tncm91bmRPYmplY3Qg
OiB0aGlzOwogICAgICAgICAgICAgSW1hZ2UqIGltYWdlID0gYmctPmltYWdlKGNsaWVudEZvckJh
Y2tncm91bmRJbWFnZSwgdGlsZVNpemUpOwotICAgICAgICAgICAgYm9vbCB1c2VMb3dRdWFsaXR5
U2NhbGluZyA9IFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkUGFpbnRCYWNrZ3Jv
dW5kQXRMb3dRdWFsaXR5KGNvbnRleHQsIHRoaXMsIGltYWdlLCB0aWxlU2l6ZSk7CisgICAgICAg
ICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gUmVuZGVyQm94TW9kZWxPYmplY3Q6OlNj
YWxlT2JzZXJ2ZXI6OmdldEluc3RhbmNlKCktPnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KHRoaXMs
IGltYWdlLCB0aWxlU2l6ZSk7CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGlsZWRJbWFnZShp
bWFnZSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBkZXN0UmVjdCwgcGhhc2UsIHRpbGVTaXplLCBj
b21wb3NpdGVPcCwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA2MDQ3
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNCw2ICsxMDQsMjMgQEAgcHVibGljOgogICAgIHZvaWQgaGlnaFF1YWxpdHlS
ZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4qKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxSZW5kZXJCb3hNb2RlbE9iamVjdCosIGRvdWJsZT4gU2NhbGVNYXA7CisK
KyAgICBjbGFzcyBTY2FsZU9ic2VydmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFNjYWxlT2JzZXJ2ZXIoKTsKKyAgICAgICAgc3RhdGljIFNjYWxlT2JzZXJ2
ZXIqIGdldEluc3RhbmNlKCk7CisgICAgICAgIGJvb2wgc2hvdWxkUGFpbnRBdExvd1F1YWxpdHko
UmVuZGVyQm94TW9kZWxPYmplY3QqLCBJbWFnZSosIGNvbnN0IEludFNpemUmKTsKKyAgICAgICAg
dm9pZCBvYmplY3REZXN0cm95ZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCk7CisgICAg
ICAgIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxTY2FsZU9ic2VydmVy
PiopOworICAgICAgICB2b2lkIHJlc3RhcnRUaW1lcigpOworICAgIHByaXZhdGU6CisgICAgICAg
IFNjYWxlTWFwKiBtX29iamVjdHM7CisgICAgICAgIFRpbWVyPFNjYWxlT2JzZXJ2ZXI+IG1fdGlt
ZXI7CisgICAgICAgIHN0YXRpYyBTY2FsZU9ic2VydmVyKiBnSW5zdGFuY2U7CisgICAgfTsKKwog
cHJvdGVjdGVkOgogICAgIHZvaWQgY2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkoY29u
c3QgRmlsbExheWVyKiwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwgSW50UmVjdCYgZGVz
dFJlY3QsIEludFBvaW50JiBwaGFzZSwgSW50U2l6ZSYgdGlsZVNpemUpOwogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA2MDQ3NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTMzICs1MSw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0
IGRvdWJsZSBjSW50ZXJwb2xhdGlvbkN1dG9mZiA9IDgwMC4gKiA4MDAuOwotc3RhdGljIGNvbnN0
IGRvdWJsZSBjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQgPSAwLjA1MDsgLy8gNTAgbXMKLQotY2xh
c3MgUmVuZGVySW1hZ2VTY2FsZURhdGEgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgot
ICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKFJlbmRlckltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgZG91YmxlIHRpbWUsIGJvb2wgbG93UXVhbGl0eVNjYWxlKQotICAgICAgICA6IG1f
c2l6ZShzaXplKQotICAgICAgICAsIG1fdGltZSh0aW1lKQotICAgICAgICAsIG1fbG93UXVhbGl0
eVNjYWxlKGxvd1F1YWxpdHlTY2FsZSkKLSAgICAgICAgLCBtX2hpZ2hRdWFsaXR5UmVwYWludFRp
bWVyKGltYWdlLCAmUmVuZGVySW1hZ2U6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQpCi0g
ICAgewotICAgIH0KLQotICAgIH5SZW5kZXJJbWFnZVNjYWxlRGF0YSgpCi0gICAgewotICAgICAg
ICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0b3AoKTsKLSAgICB9Ci0gICAgCi0gICAgY29u
c3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGRvdWJsZSB0
aW1lKCkgY29uc3QgeyByZXR1cm4gbV90aW1lOyB9Ci0gICAgYm9vbCB1c2VMb3dRdWFsaXR5U2Nh
bGUoKSBjb25zdCB7IHJldHVybiBtX2xvd1F1YWxpdHlTY2FsZTsgfQotICAgIFRpbWVyPFJlbmRl
ckltYWdlPiYgaGlxaFF1YWxpdHlSZXBhaW50VGltZXIoKSB7IHJldHVybiBtX2hpZ2hRdWFsaXR5
UmVwYWludFRpbWVyOyB9Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBt
X3NpemUgPSBzOyB9Ci0gICAgdm9pZCBzZXRUaW1lKGRvdWJsZSB0KSB7IG1fdGltZSA9IHQ7IH0K
LSAgICB2b2lkIHNldFVzZUxvd1F1YWxpdHlTY2FsZShib29sIGIpCi0gICAgewotICAgICAgICBt
X2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0b3AoKTsKLSAgICAgICAgbV9sb3dRdWFsaXR5U2Nh
bGUgPSBiOwotICAgICAgICBpZiAoYikKLSAgICAgICAgICAgIG1faGlnaFF1YWxpdHlSZXBhaW50
VGltZXIuc3RhcnRPbmVTaG90KGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7Ci0gICAgfQotICAg
IAotcHJpdmF0ZToKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBkb3VibGUgbV90aW1lOwotICAg
IGJvb2wgbV9sb3dRdWFsaXR5U2NhbGU7Ci0gICAgVGltZXI8UmVuZGVySW1hZ2U+IG1faGlnaFF1
YWxpdHlSZXBhaW50VGltZXI7Ci19OwotCi1jbGFzcyBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBib29sIHNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHko
UmVuZGVySW1hZ2UqLCBjb25zdCBJbnRTaXplJik7Ci0KLSAgICBzdGF0aWMgdm9pZCBpbWFnZURl
c3Ryb3llZChSZW5kZXJJbWFnZSogaW1hZ2UpCi0gICAgewotICAgICAgICBpZiAoZ0ltYWdlcykg
ewotICAgICAgICAgICAgUmVuZGVySW1hZ2VTY2FsZURhdGEqIGRhdGEgPSBnSW1hZ2VzLT50YWtl
KGltYWdlKTsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICAgICAgaWYgKGdJbWFn
ZXMtPnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGdJbWFnZXM7Ci0gICAg
ICAgICAgICAgICAgZ0ltYWdlcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChSZW5k
ZXJJbWFnZSogaW1hZ2UpCi0gICAgewotICAgICAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6
OmltYWdlRGVzdHJveWVkKGltYWdlKTsKLSAgICAgICAgaW1hZ2UtPnJlcGFpbnQoKTsKLSAgICB9
Ci0gICAgCi0gICAgc3RhdGljIEhhc2hNYXA8UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFnZVNjYWxl
RGF0YSo+KiBnSW1hZ2VzOwotfTsKLQotYm9vbCBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OnNo
b3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkoUmVuZGVySW1hZ2UqIGltYWdlLCBjb25zdCBJbnRT
aXplJiBzaXplKQotewotICAgIC8vIElmIHRoZSBpbWFnZSBpcyBub3QgYSBiaXRtYXAgaW1hZ2Us
IHRoZW4gbm9uZSBvZiB0aGlzIGlzIHJlbGV2YW50IGFuZCB3ZSBqdXN0IHBhaW50IGF0IGhpZ2gK
LSAgICAvLyBxdWFsaXR5LgotICAgIGlmICghaW1hZ2UtPmltYWdlKCkgfHwgIWltYWdlLT5pbWFn
ZSgpLT5pc0JpdG1hcEltYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE1h
a2Ugc3VyZSB0byB1c2UgdGhlIHVuem9vbWVkIGltYWdlIHNpemUsIHNpbmNlIGlmIGEgZnVsbCBw
YWdlIHpvb20gaXMgaW4gZWZmZWN0LCB0aGUgaW1hZ2UKLSAgICAvLyBpcyBhY3R1YWxseSBiZWlu
ZyBzY2FsZWQuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoaW1hZ2UtPmltYWdlKCktPndpZHRoKCks
IGltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKSk7Ci0KLSAgICAvLyBMb29rIG91cnNlbHZlcyB1cCBp
biB0aGUgaGFzaHRhYmxlLgotICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKiBkYXRhID0gMDsKLSAg
ICBpZiAoZ0ltYWdlcykKLSAgICAgICAgZGF0YSA9IGdJbWFnZXMtPmdldChpbWFnZSk7Ci0KLSAg
ICBpZiAoaW1hZ2VTaXplID09IHNpemUpIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gc2NhbGUg
aW4gZWZmZWN0LiAgSWYgd2UgaGFkIGEgc2NhbGUgaW4gZWZmZWN0IGJlZm9yZSwgd2UgY2FuIGp1
c3QgZGVsZXRlIHRoaXMgZGF0YS4KLSAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAgIGdJ
bWFnZXMtPnJlbW92ZShpbWFnZSk7Ci0gICAgICAgICAgICBkZWxldGUgZGF0YTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgaXMgbm8gbmVl
ZCB0byBoYXNoIHNjYWxlZCBpbWFnZXMgdGhhdCBhbHdheXMgdXNlIGxvdyBxdWFsaXR5IG1vZGUg
d2hlbiB0aGUgcGFnZSBkZW1hbmRzIGl0LiAgVGhpcyBpcyB0aGUgaUNoYXQgY2FzZS4KLSAgICBp
ZiAoaW1hZ2UtPmRvY3VtZW50KCktPnBhZ2UoKS0+aW5Mb3dRdWFsaXR5SW1hZ2VJbnRlcnBvbGF0
aW9uTW9kZSgpKSB7Ci0gICAgICAgIGRvdWJsZSB0b3RhbFBpeGVscyA9IHN0YXRpY19jYXN0PGRv
dWJsZT4oaW1hZ2UtPmltYWdlKCktPndpZHRoKCkpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFn
ZS0+aW1hZ2UoKS0+aGVpZ2h0KCkpOwotICAgICAgICBpZiAodG90YWxQaXhlbHMgPiBjSW50ZXJw
b2xhdGlvbkN1dG9mZikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v
IElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCB3ZSB3aWxsIHBhaW50IHRoZSBmaXJzdCBzY2FsZSBh
dCBoaWdoIHF1YWxpdHkgYW5kIHJlY29yZCB0aGUgcGFpbnQgdGltZSBpbiBjYXNlIGEgc2Vjb25k
IHNjYWxlIGhhcHBlbnMKLSAgICAvLyB2ZXJ5IHNvb24uCi0gICAgaWYgKCFkYXRhKSB7Ci0gICAg
ICAgIGRhdGEgPSBuZXcgUmVuZGVySW1hZ2VTY2FsZURhdGEoaW1hZ2UsIHNpemUsIGN1cnJlbnRU
aW1lKCksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFnSW1hZ2VzKQotICAgICAgICAgICAgZ0ltYWdl
cyA9IG5ldyBIYXNoTWFwPFJlbmRlckltYWdlKiwgUmVuZGVySW1hZ2VTY2FsZURhdGEqPjsKLSAg
ICAgICAgZ0ltYWdlcy0+c2V0KGltYWdlLCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIFdlIGFyZSBzY2FsZWQsIGJ1dCB3ZSBwYWludGVkIGFscmVhZHkgYXQg
dGhpcyBzaXplLCBzbyBqdXN0IGtlZXAgdXNpbmcgd2hhdGV2ZXIgbW9kZSB3ZSBsYXN0IHBhaW50
ZWQgd2l0aC4KLSAgICBpZiAoZGF0YS0+c2l6ZSgpID09IHNpemUpCi0gICAgICAgIHJldHVybiBk
YXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKLQotICAgIC8vIFdlIGhhdmUgZGF0YSBhbmQgb3Vy
IHNpemUganVzdCBjaGFuZ2VkLiAgSWYgdGhpcyBjaGFuZ2UgaGFwcGVuZWQgcXVpY2tseSwgZ28g
aW50byBsb3cgcXVhbGl0eSBtb2RlIGFuZCB0aGVuIHNldCBhIHJlcGFpbnQKLSAgICAvLyB0aW1l
ciB0byBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4gIE90aGVyd2lzZSBpdCBpcyBvayB0byBq
dXN0IHBhaW50IGluIGhpZ2ggcXVhbGl0eSBtb2RlLgotICAgIGRvdWJsZSBuZXdUaW1lID0gY3Vy
cmVudFRpbWUoKTsKLSAgICBkYXRhLT5zZXRVc2VMb3dRdWFsaXR5U2NhbGUobmV3VGltZSAtIGRh
dGEtPnRpbWUoKSA8IGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7Ci0gICAgZGF0YS0+c2V0VGlt
ZShuZXdUaW1lKTsKLSAgICBkYXRhLT5zZXRTaXplKHNpemUpOwotICAgIHJldHVybiBkYXRhLT51
c2VMb3dRdWFsaXR5U2NhbGUoKTsKLX0KLQotSGFzaE1hcDxSZW5kZXJJbWFnZSosIFJlbmRlcklt
YWdlU2NhbGVEYXRhKj4qIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6Z0ltYWdlcyA9IDA7Ci0K
LXZvaWQgUmVuZGVySW1hZ2U6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8UmVu
ZGVySW1hZ2U+KikKLXsKLSAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmhpZ2hRdWFsaXR5
UmVwYWludFRpbWVyRmlyZWQodGhpcyk7Ci19Ci0KIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKIFJlbmRlckltYWdlOjpSZW5kZXJJbWFnZShOb2RlKiBub2RlKQpAQCAtMTkzLDcgKzY2LDcg
QEAgUmVuZGVySW1hZ2U6On5SZW5kZXJJbWFnZSgpCiB7CiAgICAgaWYgKG1fY2FjaGVkSW1hZ2Up
CiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICBSZW5kZXJJ
bWFnZVNjYWxlT2JzZXJ2ZXI6OmltYWdlRGVzdHJveWVkKHRoaXMpOworICAgIFNjYWxlT2JzZXJ2
ZXI6OmdldEluc3RhbmNlKCktPm9iamVjdERlc3Ryb3llZCh0aGlzKTsKIH0KIAogdm9pZCBSZW5k
ZXJJbWFnZTo6c2V0Q2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqIG5ld0ltYWdlKQpAQCAtNDg2LDcg
KzM1OSw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QoR3JhcGhpY3MKIAogICAg
IEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWx0ID0gKG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05h
bWUoaW1nVGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obm9kZSgpKSA6IDA7
CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsdCA/IGlt
YWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29tcG9zaXRlU291cmNlT3ZlcjsKLSAgICBi
b29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpzaG91
bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KHRoaXMsIHJlY3Quc2l6ZSgpKTsKKyAgICBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsaW5nID0gU2NhbGVPYnNlcnZlcjo6Z2V0SW5zdGFuY2UoKS0+c2hvdWxk
UGFpbnRBdExvd1F1YWxpdHkodGhpcywgdGhpcy0+aW1hZ2UoKSwgcmVjdC5zaXplKCkpOwogICAg
IGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpLCBz
dHlsZSgpLT5jb2xvclNwYWNlKCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1c2VMb3dRdWFs
aXR5U2NhbGluZyk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58284</attachid>
            <date>2010-06-09 13:01:24 -0700</date>
            <delta_ts>2010-06-14 12:29:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100609160122.patch</filename>
            <type>text/plain</type>
            <size>18572</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDkwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDYtMDQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBzbG93IG11bHRpcGxlIGFuaW1hdGVkIHJlc2l6ZSBpc3N1ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjMzCisgICAgICAg
IFRoZSB0aW1lci1iYXNlZCByZXNpemUgcXVhbGl0eSBhcHByb2FjaCBpbXBsZW1lbnRlZCBpbgor
ICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8zNDIxMCBpcyBhIGdvb2Qg
aWRlYSwgYnV0IGRvZXNuJ3QKKyAgICAgICAgc2NhbGUgdG8gbXVsdGlwbGUgaW1hZ2VzIHdpdGgg
YW5pbWF0ZWQgcmVzaXplcy4gIFRoaXMgZml4IHVuaWZpZXMgYWxsCisgICAgICAgIG91dHN0YW5k
aW5nIHJlc2l6ZSB0aW1lcnMgaW50byBhIHNpbmdsZSB0aW1lciwgYW5kIHJlbW92ZXMgdGhlICJ1
c2UKKyAgICAgICAgbGFzdCBxdWFsaXR5IiBjaGVjayAod2hpY2ggZG9lc24ndCB3b3JrIHdoZW4g
aW1hZ2VzIGFyZSBvdmVybGFwcGluZykuIAorICAgICAgICBJdCBhbHNvIHJlZmFjdG9ycyB0aGUg
Y29weSBvZiB0aGlzIGNvZGUgaW1wbGVtZW50ZWQgaW4KKyAgICAgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QgaW4gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNTM5NDkuCisKKyAgICAg
ICAgVGhpcyBpbXByb3ZlcyBTYWZhcmkgcGVyZm9ybWFuY2UgZm9yIHRoZSBmb2xsb3dpbmcgSUU5
IHBsYXRmb3JtIGRlbW9zIG9uIG15IEMyRCBNYWNQcm8gKDEwLjUpOgorICAgICAgICBodHRwOi8v
aWUubWljcm9zb2Z0LmNvbS90ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvMDFGbHlpbmdJbWFnZXMvRGVm
YXVsdC5odG1sICg0LT42MGZwcykKKyAgICAgICAgaHR0cDovL2llLm1pY3Jvc29mdC5jb20vdGVz
dGRyaXZlL1BlcmZvcm1hbmNlLzEwRmxpY2tyRXhwbG9yZXIvRGVmYXVsdC5odG1sICgzLT4xNmZw
cykKKyAgICAgICAgaHR0cDovL2llLm1pY3Jvc29mdC5jb20vdGVzdGRyaXZlL1BlcmZvcm1hbmNl
LzExQnJvd3NlckZsaXAvRGVmYXVsdC5odG1sICg5LT42MGZwcykKKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6U2NhbGVPYnNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6Z2V0SW5zdGFuY2Up
OgorICAgICAgICBVbmlmeSBhbGwgdGltZXJzIGludG8gYSBzaW5nbGUgdGltZXIsIGltcGxlbWVu
dCBTY2FsZU9ic2VydmVyIGFzIGEKKyAgICAgICAgc2luZ2xldG9uLCBhbmQgcmVtb3ZlIHRoZSBy
ZXNpemUgcXVhbGl0eSAic3RpY2tuZXNzIiwgc2luY2UgaXQgZG9lc24ndAorICAgICAgICB3b3Jr
IHdpdGggbXVsdGlwbGUgb3V0c3RhbmRpbmcgcmVzaXplcy4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpTY2FsZU9ic2VydmVyOjpvYmplY3REZXN0cm95ZWQpOgorICAg
ICAgICBnSW1hZ2VzIGlzIG5vdyBtX29iamVjdHMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJl
ZCk6CisgICAgICAgIEZ1bmN0aW9uIG1hZGUgbm9uLXN0YXRpYzsgcmVwYWludCBhbGwgcGVuZGlu
ZyByZXNpemVzIChub3QganVzdCBvbmUpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6OnJlc3RhcnRUaW1lcik6CisgICAgICAgIEFkZGVkIGZ1
bmN0aW9uIHRvIHJlc3RhcnQgdGltZXIgYXQgMnggdGhyZXNob2xkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6OnNob3VsZFBhaW50QXRMb3dR
dWFsaXR5KToKKyAgICAgICAgVXNlIG1fb2JqZWN0cywgbm90IGdJbWFnZXMuICBJbXBsZW1lbnQg
bmV3IHRpbWVyIGFsZ29yaXRobS4gIFJlbW92ZQorICAgICAgICByZXNpemUgInN0aWNraW5lc3Mi
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6On5SZW5kZXJCb3hNb2Rl
bE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRG
aWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIENoYW5nZXMgZm9yIHNpbmdsZXRvbi4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgSW1wbGVtZW50
IFNjYWxlT2JzZXJ2ZXIgYXMgYSBuZXN0ZWQgY2xhc3MuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp+UmVuZGVySW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAg
ICAgICBDaGFuZ2VzIGZvciBzaW5nbGV0b24uCisKIDIwMTAtMDYtMDkgIEFuZGVycyBCYWtrZW4g
IDxhZ2Jha2tlbkBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4u
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZp
c2lvbiA2MDkwNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsNzMgKzQ4LDQxIEBAIGJvb2wgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnNfbGF5ZXJXYXNTZWwKIHN0YXRpYyBjb25zdCBkb3VibGUgY0ludGVycG9sYXRpb25D
dXRvZmYgPSA4MDAuICogODAwLjsKIHN0YXRpYyBjb25zdCBkb3VibGUgY0xvd1F1YWxpdHlUaW1l
VGhyZXNob2xkID0gMC41MDA7IC8vIDUwMCBtcwogCi1jbGFzcyBSZW5kZXJCb3hNb2RlbFNjYWxl
RGF0YSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyQm94TW9kZWxT
Y2FsZURhdGEoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGRvdWJsZSB0aW1lLCBib29sIGxv
d1F1YWxpdHlTY2FsZSkKLSAgICAgICAgOiBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBtX3RyYW5z
Zm9ybSh0cmFuc2Zvcm0pCi0gICAgICAgICwgbV9sYXN0UGFpbnRUaW1lKHRpbWUpCi0gICAgICAg
ICwgbV9sb3dRdWFsaXR5U2NhbGUobG93UXVhbGl0eVNjYWxlKQotICAgICAgICAsIG1faGlnaFF1
YWxpdHlSZXBhaW50VGltZXIob2JqZWN0LCAmUmVuZGVyQm94TW9kZWxPYmplY3Q6OmhpZ2hRdWFs
aXR5UmVwYWludFRpbWVyRmlyZWQpCi0gICAgewotICAgIH0KLQotICAgIH5SZW5kZXJCb3hNb2Rl
bFNjYWxlRGF0YSgpCi0gICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0
b3AoKTsKLSAgICB9Ci0KLSAgICBUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4mIGhpcWhRdWFs
aXR5UmVwYWludFRpbWVyKCkgeyByZXR1cm4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsgfQot
Ci0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAg
IHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzKSB7IG1fc2l6ZSA9IHM7IH0KLSAgICBkb3Vi
bGUgbGFzdFBhaW50VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBhaW50VGltZTsgfQotICAg
IHZvaWQgc2V0TGFzdFBhaW50VGltZShkb3VibGUgdCkgeyBtX2xhc3RQYWludFRpbWUgPSB0OyB9
Ci0gICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvd1F1YWxp
dHlTY2FsZTsgfQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQotICAg
IHZvaWQgc2V0VXNlTG93UXVhbGl0eVNjYWxlKGJvb2wgYikKLSAgICB7Ci0gICAgICAgIG1faGln
aFF1YWxpdHlSZXBhaW50VGltZXIuc3RvcCgpOwotICAgICAgICBtX2xvd1F1YWxpdHlTY2FsZSA9
IGI7Ci0gICAgICAgIGlmIChiKQotICAgICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1l
ci5zdGFydE9uZVNob3QoY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3Jt
OwotICAgIGRvdWJsZSBtX2xhc3RQYWludFRpbWU7Ci0gICAgYm9vbCBtX2xvd1F1YWxpdHlTY2Fs
ZTsKLSAgICBUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4gbV9oaWdoUXVhbGl0eVJlcGFpbnRU
aW1lcjsKLX07Ci0KLWNsYXNzIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRMb3dRdWFsaXR5KEdyYXBo
aWNzQ29udGV4dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiwgSW1hZ2UqLCBjb25zdCBJbnRTaXpl
Jik7Ci0KLSAgICBzdGF0aWMgdm9pZCBib3hNb2RlbE9iamVjdERlc3Ryb3llZChSZW5kZXJCb3hN
b2RlbE9iamVjdCogb2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKGdCb3hNb2RlbE9iamVjdHMp
IHsKLSAgICAgICAgICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKiBkYXRhID0gZ0JveE1vZGVs
T2JqZWN0cy0+dGFrZShvYmplY3QpOwotICAgICAgICAgICAgZGVsZXRlIGRhdGE7Ci0gICAgICAg
ICAgICBpZiAoIWdCb3hNb2RlbE9iamVjdHMtPnNpemUoKSkgewotICAgICAgICAgICAgICAgIGRl
bGV0ZSBnQm94TW9kZWxPYmplY3RzOwotICAgICAgICAgICAgICAgIGdCb3hNb2RlbE9iamVjdHMg
PSAwOwotICAgICAgICAgICAgfQorUmVuZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6
OlNjYWxlT2JzZXJ2ZXIoKSA6IG1fb2JqZWN0cygwKSwgbV90aW1lcih0aGlzLCAmU2NhbGVPYnNl
cnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCkge30KKworUmVuZGVyQm94TW9kZWxP
YmplY3Q6OlNjYWxlT2JzZXJ2ZXIqIFJlbmRlckJveE1vZGVsT2JqZWN0OjpTY2FsZU9ic2VydmVy
OjpnZXRJbnN0YW5jZSgpCit7CisgICAgaWYgKCFnSW5zdGFuY2UpCisgICAgICAgIGdJbnN0YW5j
ZSA9IG5ldyBTY2FsZU9ic2VydmVyOworICAgIHJldHVybiBnSW5zdGFuY2U7Cit9CisKK3ZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6Om9iamVjdERlc3Ryb3llZChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChtX29iamVjdHMpIHsKKyAgICAg
ICAgbV9vYmplY3RzLT50YWtlKG9iamVjdCk7CisgICAgICAgIGlmICghbV9vYmplY3RzLT5zaXpl
KCkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX29iamVjdHM7CisgICAgICAgICAgICBtX29iamVj
dHMgPSAwOwogICAgICAgICB9CiAgICAgfQotCi0gICAgc3RhdGljIHZvaWQgaGlnaFF1YWxpdHlS
ZXBhaW50VGltZXJGaXJlZChSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0KQotICAgIHsKLSAg
ICAgICAgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpib3hNb2RlbE9iamVjdERlc3Ryb3ll
ZChvYmplY3QpOwotICAgICAgICBvYmplY3QtPnJlcGFpbnQoKTsKK30KKyAgICAKK3ZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVy
RmlyZWQoVGltZXI8U2NhbGVPYnNlcnZlcj4qKQoreworICAgIGlmIChtX29iamVjdHMpIHsKKyAg
ICAgICAgZm9yIChTY2FsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdHMtPmJlZ2luKCk7IGl0
ICE9IG1fb2JqZWN0cy0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICBpdC0+Zmlyc3QtPnJlcGFp
bnQoKTsKICAgICB9Cit9CiAKLSAgICBzdGF0aWMgSGFzaE1hcDxSZW5kZXJCb3hNb2RlbE9iamVj
dCosIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKj4qIGdCb3hNb2RlbE9iamVjdHM7Ci19Owordm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6U2NhbGVPYnNlcnZlcjo6cmVzdGFydFRpbWVyKCkKK3sK
KyAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChjTG93UXVhbGl0
eVRpbWVUaHJlc2hvbGQgKiAyKTsKK30KIAotYm9vbCBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2
ZXI6OnNob3VsZFBhaW50QmFja2dyb3VuZEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3QsIEltYWdlKiBpbWFnZSwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKK2Jvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6
OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3QsIElt
YWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICAvLyBJZiB0aGUgaW1hZ2Ug
aXMgbm90IGEgYml0bWFwIGltYWdlLCB0aGVuIG5vbmUgb2YgdGhpcyBpcyByZWxldmFudCBhbmQg
d2UganVzdCBwYWludCBhdCBoaWdoCiAgICAgLy8gcXVhbGl0eS4KQEAgLTEyNiwxNyArOTQsMTQg
QEAgYm9vbCBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZAogICAgIEludFNpemUg
aW1hZ2VTaXplKGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwogCiAgICAgLy8gTG9v
ayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZS4KLSAgICBSZW5kZXJCb3hNb2RlbFNjYWxl
RGF0YSogZGF0YSA9IDA7Ci0gICAgaWYgKGdCb3hNb2RlbE9iamVjdHMpCi0gICAgICAgIGRhdGEg
PSBnQm94TW9kZWxPYmplY3RzLT5nZXQob2JqZWN0KTsKLQotICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgY3VycmVudFRyYW5zZm9ybSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgIGJvb2wgY29u
dGV4dElzU2NhbGVkID0gIWN1cnJlbnRUcmFuc2Zvcm0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKTsKLSAgICBpZiAoIWNvbnRleHRJc1NjYWxlZCAmJiBpbWFnZVNpemUgPT0gc2l6
ZSkgewotICAgICAgICAvLyBUaGVyZSBpcyBubyBzY2FsZSBpbiBlZmZlY3QuICBJZiB3ZSBoYWQg
YSBzY2FsZSBpbiBlZmZlY3QgYmVmb3JlLCB3ZSBjYW4ganVzdCBkZWxldGUgdGhpcyBkYXRhLgot
ICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgZ0JveE1vZGVsT2JqZWN0cy0+cmVtb3Zl
KG9iamVjdCk7Ci0gICAgICAgICAgICBkZWxldGUgZGF0YTsKKyAgICBkb3VibGUgdGltZSA9IDAu
MDsKKyAgICBpZiAobV9vYmplY3RzKQorICAgICAgICB0aW1lID0gbV9vYmplY3RzLT5nZXQob2Jq
ZWN0KTsKKworICAgIGlmIChpbWFnZVNpemUgPT0gc2l6ZSkgeworICAgICAgICAvLyBUaGVyZSBp
cyBubyBzY2FsZSBpbiBlZmZlY3QuICBJZiB3ZSBoYWQgYSBzY2FsZSBpbiBlZmZlY3QgYmVmb3Jl
LCB3ZSBjYW4ganVzdCByZW1vdmUgdGhpcyBvYmplY3QgZnJvbSB0aGUgbGlzdC4KKyAgICAgICAg
aWYgKHRpbWUpIHsKKyAgICAgICAgICAgIG1fb2JqZWN0cy0+cmVtb3ZlKG9iamVjdCk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE1MCwzNiArMTE1LDI3IEBA
IGJvb2wgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpzaG91bGQKIAogICAgIC8vIElmIHRo
ZXJlIGlzIG5vIGRhdGEgeWV0LCB3ZSB3aWxsIHBhaW50IHRoZSBmaXJzdCBzY2FsZSBhdCBoaWdo
IHF1YWxpdHkgYW5kIHJlY29yZCB0aGUgcGFpbnQgdGltZSBpbiBjYXNlIGEgc2Vjb25kIHNjYWxl
IGhhcHBlbnMKICAgICAvLyB2ZXJ5IHNvb24uCi0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGRh
dGEgPSBuZXcgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEob2JqZWN0LCBzaXplLCBjdXJyZW50VHJh
bnNmb3JtLCBjdXJyZW50VGltZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZ0JveE1vZGVsT2Jq
ZWN0cykKLSAgICAgICAgICAgIGdCb3hNb2RlbE9iamVjdHMgPSBuZXcgSGFzaE1hcDxSZW5kZXJC
b3hNb2RlbE9iamVjdCosIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKj47Ci0gICAgICAgIGdCb3hN
b2RlbE9iamVjdHMtPnNldChvYmplY3QsIGRhdGEpOworICAgIGlmICghdGltZSkgeworICAgICAg
ICB0aW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgaWYgKCFtX29iamVjdHMpCisgICAgICAg
ICAgICBtX29iamVjdHMgPSBuZXcgU2NhbGVNYXA7CisgICAgICAgIG1fb2JqZWN0cy0+c2V0KG9i
amVjdCwgdGltZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KLSAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyID0gZGF0YS0+dHJhbnNmb3JtKCk7Ci0gICAgYm9vbCBzY2FsZVVu
Y2hhbmdlZCA9IHRyLmEoKSA9PSBjdXJyZW50VHJhbnNmb3JtLmEoKSAmJiB0ci5iKCkgPT0gY3Vy
cmVudFRyYW5zZm9ybS5iKCkgJiYgdHIuYygpID09IGN1cnJlbnRUcmFuc2Zvcm0uYygpICYmIHRy
LmQoKSA9PSBjdXJyZW50VHJhbnNmb3JtLmQoKTsKLSAgICAvLyBXZSBhcmUgc2NhbGVkLCBidXQg
d2UgcGFpbnRlZCBhbHJlYWR5IGF0IHRoaXMgc2l6ZSwgc28ganVzdCBrZWVwIHVzaW5nIHdoYXRl
dmVyIG1vZGUgd2UgbGFzdCBwYWludGVkIHdpdGguCi0gICAgaWYgKCghY29udGV4dElzU2NhbGVk
IHx8IHNjYWxlVW5jaGFuZ2VkKSAmJiBkYXRhLT5zaXplKCkgPT0gc2l6ZSkKLSAgICAgICAgcmV0
dXJuIGRhdGEtPnVzZUxvd1F1YWxpdHlTY2FsZSgpOwotCi0gICAgLy8gV2UgaGF2ZSBkYXRhIGFu
ZCBvdXIgc2l6ZSBqdXN0IGNoYW5nZWQuICBJZiB0aGlzIGNoYW5nZSBoYXBwZW5lZCBxdWlja2x5
LCBnbyBpbnRvIGxvdyBxdWFsaXR5IG1vZGUgYW5kIHRoZW4gc2V0IGEgcmVwYWludAotICAgIC8v
IHRpbWVyIHRvIHBhaW50IGluIGhpZ2ggcXVhbGl0eSBtb2RlLiAgT3RoZXJ3aXNlIGl0IGlzIG9r
IHRvIGp1c3QgcGFpbnQgaW4gaGlnaCBxdWFsaXR5IG1vZGUuCiAgICAgZG91YmxlIG5ld1RpbWUg
PSBjdXJyZW50VGltZSgpOwotICAgIGRhdGEtPnNldFVzZUxvd1F1YWxpdHlTY2FsZShuZXdUaW1l
IC0gZGF0YS0+bGFzdFBhaW50VGltZSgpIDwgY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAg
ICBkYXRhLT5zZXRMYXN0UGFpbnRUaW1lKG5ld1RpbWUpOwotICAgIGRhdGEtPnNldFRyYW5zZm9y
bShjdXJyZW50VHJhbnNmb3JtKTsKLSAgICBkYXRhLT5zZXRTaXplKHNpemUpOwotICAgIHJldHVy
biBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKKyAgICBpZiAobmV3VGltZSAtIHRpbWUgPj0g
Y0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKSB7CisgICAgICAgIC8vIElmIGl0IGhhcyBiZWVuIGF0
IGxlYXN0IDx0aHJlc2hvbGQ+IHNlY29uZHMgc2luY2UgdGhlIGxhc3QgdGltZSBhCisgICAgICAg
IC8vIHJlc2l6ZSB3YXMgcmVxdWVzdGVkLCBkcmF3IGF0IGhpIHF1YWxpdHkgYW5kIGRvbid0IHNl
dCB0aGUgdGltZXIuCisgICAgICAgIG9iamVjdERlc3Ryb3llZChvYmplY3QpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIERyYXcgYXQgbG93IHF1YWxpdHkgZmlyc3QsIGFu
ZCBzZXQgYSB0aW1lciBmb3IgSFEuCisgICAgbV9vYmplY3RzLT5zZXQob2JqZWN0LCBuZXdUaW1l
KTsKKyAgICByZXN0YXJ0VGltZXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSGFzaE1hcDxS
ZW5kZXJCb3hNb2RlbE9iamVjdCosIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKj4qIFJlbmRlckJv
eE1vZGVsU2NhbGVPYnNlcnZlcjo6Z0JveE1vZGVsT2JqZWN0cyA9IDA7Ci0KLXZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+KikKLXsKLSAgICBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6Omhp
Z2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQodGhpcyk7Ci19CitSZW5kZXJCb3hNb2RlbE9iamVj
dDo6U2NhbGVPYnNlcnZlciogUmVuZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6OmdJ
bnN0YW5jZSA9IDA7CiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0
YXRlKFNlbGVjdGlvblN0YXRlIHMpCiB7CkBAIC0yMTUsNyArMTcxLDcgQEAgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6On5SZW5kZXJCb3hNb2RlbE9iagogICAgIC8vIE91ciBsYXllciBzaG91bGQgaGF2
ZSBiZWVuIGRlc3Ryb3llZCBhbmQgY2xlYXJlZCBieSBub3cKICAgICBBU1NFUlQoIWhhc0xheWVy
KCkpOwogICAgIEFTU0VSVCghbV9sYXllcik7Ci0gICAgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2Vy
dmVyOjpib3hNb2RlbE9iamVjdERlc3Ryb3llZCh0aGlzKTsKKyAgICBTY2FsZU9ic2VydmVyOjpn
ZXRJbnN0YW5jZSgpLT5vYmplY3REZXN0cm95ZWQodGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OmRlc3Ryb3lMYXllcigpCkBAIC02MzEsNyArNTg3LDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAgICAgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3AgPSBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gYmdMYXllci0+
Y29tcG9zaXRlKCkgOiBvcDsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2xpZW50Rm9yQmFj
a2dyb3VuZEltYWdlID0gYmFja2dyb3VuZE9iamVjdCA/IGJhY2tncm91bmRPYmplY3QgOiB0aGlz
OwogICAgICAgICAgICAgSW1hZ2UqIGltYWdlID0gYmctPmltYWdlKGNsaWVudEZvckJhY2tncm91
bmRJbWFnZSwgdGlsZVNpemUpOwotICAgICAgICAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGlu
ZyA9IFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRM
b3dRdWFsaXR5KGNvbnRleHQsIHRoaXMsIGltYWdlLCB0aWxlU2l6ZSk7CisgICAgICAgICAgICBi
b29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gU2NhbGVPYnNlcnZlcjo6Z2V0SW5zdGFuY2UoKS0+
c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkodGhpcywgaW1hZ2UsIHRpbGVTaXplKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBzdHlsZSgpLT5jb2xvclNwYWNlKCks
IGRlc3RSZWN0LCBwaGFzZSwgdGlsZVNpemUsIGNvbXBvc2l0ZU9wLCB1c2VMb3dRdWFsaXR5U2Nh
bGluZyk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDYwOTA1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCwyMyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRl
ckJveE1vZGVsT2JqZWN0PiopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRl
KFNlbGVjdGlvblN0YXRlIHMpOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlckJveE1vZGVs
T2JqZWN0KiwgZG91YmxlPiBTY2FsZU1hcDsKKworICAgIGNsYXNzIFNjYWxlT2JzZXJ2ZXIgOiBw
dWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2NhbGVPYnNlcnZlcigp
OworICAgICAgICBzdGF0aWMgU2NhbGVPYnNlcnZlciogZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAg
Ym9vbCBzaG91bGRQYWludEF0TG93UXVhbGl0eShSZW5kZXJCb3hNb2RlbE9iamVjdCosIEltYWdl
KiwgY29uc3QgSW50U2l6ZSYpOworICAgICAgICB2b2lkIG9iamVjdERlc3Ryb3llZChSZW5kZXJC
b3hNb2RlbE9iamVjdCogb2JqZWN0KTsKKyAgICAgICAgdm9pZCBoaWdoUXVhbGl0eVJlcGFpbnRU
aW1lckZpcmVkKFRpbWVyPFNjYWxlT2JzZXJ2ZXI+Kik7CisgICAgICAgIHZvaWQgcmVzdGFydFRp
bWVyKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgU2NhbGVNYXAqIG1fb2JqZWN0czsKKyAgICAg
ICAgVGltZXI8U2NhbGVPYnNlcnZlcj4gbV90aW1lcjsKKyAgICAgICAgc3RhdGljIFNjYWxlT2Jz
ZXJ2ZXIqIGdJbnN0YW5jZTsKKyAgICB9OworCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjYWxjdWxh
dGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShjb25zdCBGaWxsTGF5ZXIqLCBpbnQgdHgsIGludCB0
eSwgaW50IHcsIGludCBoLCBJbnRSZWN0JiBkZXN0UmVjdCwgSW50UG9pbnQmIHBoYXNlLCBJbnRT
aXplJiB0aWxlU2l6ZSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlz
aW9uIDYwOTA1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMzMgKzUxLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZG91YmxlIGNJbnRlcnBvbGF0aW9uQ3V0b2Zm
ID0gODAwLiAqIDgwMC47Ci1zdGF0aWMgY29uc3QgZG91YmxlIGNMb3dRdWFsaXR5VGltZVRocmVz
aG9sZCA9IDAuMDUwOyAvLyA1MCBtcwotCi1jbGFzcyBSZW5kZXJJbWFnZVNjYWxlRGF0YSA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVySW1hZ2VTY2FsZURhdGEoUmVu
ZGVySW1hZ2UqIGltYWdlLCBjb25zdCBJbnRTaXplJiBzaXplLCBkb3VibGUgdGltZSwgYm9vbCBs
b3dRdWFsaXR5U2NhbGUpCi0gICAgICAgIDogbV9zaXplKHNpemUpCi0gICAgICAgICwgbV90aW1l
KHRpbWUpCi0gICAgICAgICwgbV9sb3dRdWFsaXR5U2NhbGUobG93UXVhbGl0eVNjYWxlKQotICAg
ICAgICAsIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIoaW1hZ2UsICZSZW5kZXJJbWFnZTo6aGln
aFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCkKLSAgICB7Ci0gICAgfQotCi0gICAgflJlbmRlcklt
YWdlU2NhbGVEYXRhKCkKLSAgICB7Ci0gICAgICAgIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIu
c3RvcCgpOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9Ci0gICAgZG91YmxlIHRpbWUoKSBjb25zdCB7IHJldHVybiBtX3RpbWU7
IH0KLSAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG93UXVh
bGl0eVNjYWxlOyB9Ci0gICAgVGltZXI8UmVuZGVySW1hZ2U+JiBoaXFoUXVhbGl0eVJlcGFpbnRU
aW1lcigpIHsgcmV0dXJuIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXI7IH0KLQotICAgIHZvaWQg
c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzKSB7IG1fc2l6ZSA9IHM7IH0KLSAgICB2b2lkIHNldFRp
bWUoZG91YmxlIHQpIHsgbV90aW1lID0gdDsgfQotICAgIHZvaWQgc2V0VXNlTG93UXVhbGl0eVNj
YWxlKGJvb2wgYikKLSAgICB7Ci0gICAgICAgIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3Rv
cCgpOwotICAgICAgICBtX2xvd1F1YWxpdHlTY2FsZSA9IGI7Ci0gICAgICAgIGlmIChiKQotICAg
ICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdGFydE9uZVNob3QoY0xvd1F1YWxp
dHlUaW1lVGhyZXNob2xkKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEludFNpemUgbV9z
aXplOwotICAgIGRvdWJsZSBtX3RpbWU7Ci0gICAgYm9vbCBtX2xvd1F1YWxpdHlTY2FsZTsKLSAg
ICBUaW1lcjxSZW5kZXJJbWFnZT4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsKLX07Ci0KLWNs
YXNzIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wg
c2hvdWxkSW1hZ2VQYWludEF0TG93UXVhbGl0eShSZW5kZXJJbWFnZSosIGNvbnN0IEludFNpemUm
KTsKLQotICAgIHN0YXRpYyB2b2lkIGltYWdlRGVzdHJveWVkKFJlbmRlckltYWdlKiBpbWFnZSkK
LSAgICB7Ci0gICAgICAgIGlmIChnSW1hZ2VzKSB7Ci0gICAgICAgICAgICBSZW5kZXJJbWFnZVNj
YWxlRGF0YSogZGF0YSA9IGdJbWFnZXMtPnRha2UoaW1hZ2UpOwotICAgICAgICAgICAgZGVsZXRl
IGRhdGE7Ci0gICAgICAgICAgICBpZiAoZ0ltYWdlcy0+c2l6ZSgpID09IDApIHsKLSAgICAgICAg
ICAgICAgICBkZWxldGUgZ0ltYWdlczsKLSAgICAgICAgICAgICAgICBnSW1hZ2VzID0gMDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBoaWdo
UXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFJlbmRlckltYWdlKiBpbWFnZSkKLSAgICB7Ci0gICAg
ICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aW1hZ2VEZXN0cm95ZWQoaW1hZ2UpOwotICAg
ICAgICBpbWFnZS0+cmVwYWludCgpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgSGFzaE1hcDxS
ZW5kZXJJbWFnZSosIFJlbmRlckltYWdlU2NhbGVEYXRhKj4qIGdJbWFnZXM7Ci19OwotCi1ib29s
IFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxkSW1hZ2VQYWludEF0TG93UXVhbGl0eShS
ZW5kZXJJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgLy8gSWYgdGhl
IGltYWdlIGlzIG5vdCBhIGJpdG1hcCBpbWFnZSwgdGhlbiBub25lIG9mIHRoaXMgaXMgcmVsZXZh
bnQgYW5kIHdlIGp1c3QgcGFpbnQgYXQgaGlnaAotICAgIC8vIHF1YWxpdHkuCi0gICAgaWYgKCFp
bWFnZS0+aW1hZ2UoKSB8fCAhaW1hZ2UtPmltYWdlKCktPmlzQml0bWFwSW1hZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTWFrZSBzdXJlIHRvIHVzZSB0aGUgdW56b29tZWQg
aW1hZ2Ugc2l6ZSwgc2luY2UgaWYgYSBmdWxsIHBhZ2Ugem9vbSBpcyBpbiBlZmZlY3QsIHRoZSBp
bWFnZQotICAgIC8vIGlzIGFjdHVhbGx5IGJlaW5nIHNjYWxlZC4KLSAgICBJbnRTaXplIGltYWdl
U2l6ZShpbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKSwgaW1hZ2UtPmltYWdlKCktPmhlaWdodCgpKTsK
LQotICAgIC8vIExvb2sgb3Vyc2VsdmVzIHVwIGluIHRoZSBoYXNodGFibGUuCi0gICAgUmVuZGVy
SW1hZ2VTY2FsZURhdGEqIGRhdGEgPSAwOwotICAgIGlmIChnSW1hZ2VzKQotICAgICAgICBkYXRh
ID0gZ0ltYWdlcy0+Z2V0KGltYWdlKTsKLQotICAgIGlmIChpbWFnZVNpemUgPT0gc2l6ZSkgewot
ICAgICAgICAvLyBUaGVyZSBpcyBubyBzY2FsZSBpbiBlZmZlY3QuICBJZiB3ZSBoYWQgYSBzY2Fs
ZSBpbiBlZmZlY3QgYmVmb3JlLCB3ZSBjYW4ganVzdCBkZWxldGUgdGhpcyBkYXRhLgotICAgICAg
ICBpZiAoZGF0YSkgewotICAgICAgICAgICAgZ0ltYWdlcy0+cmVtb3ZlKGltYWdlKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggc2NhbGVkIGltYWdlcyB0aGF0
IGFsd2F5cyB1c2UgbG93IHF1YWxpdHkgbW9kZSB3aGVuIHRoZSBwYWdlIGRlbWFuZHMgaXQuICBU
aGlzIGlzIHRoZSBpQ2hhdCBjYXNlLgotICAgIGlmIChpbWFnZS0+ZG9jdW1lbnQoKS0+cGFnZSgp
LT5pbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRpb25Nb2RlKCkpIHsKLSAgICAgICAgZG91Ymxl
IHRvdGFsUGl4ZWxzID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFnZS0+aW1hZ2UoKS0+d2lkdGgo
KSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKSk7Ci0gICAg
ICAgIGlmICh0b3RhbFBpeGVscyA+IGNJbnRlcnBvbGF0aW9uQ3V0b2ZmKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHdl
IHdpbGwgcGFpbnQgdGhlIGZpcnN0IHNjYWxlIGF0IGhpZ2ggcXVhbGl0eSBhbmQgcmVjb3JkIHRo
ZSBwYWludCB0aW1lIGluIGNhc2UgYSBzZWNvbmQgc2NhbGUgaGFwcGVucwotICAgIC8vIHZlcnkg
c29vbi4KLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgZGF0YSA9IG5ldyBSZW5kZXJJbWFnZVNj
YWxlRGF0YShpbWFnZSwgc2l6ZSwgY3VycmVudFRpbWUoKSwgZmFsc2UpOwotICAgICAgICBpZiAo
IWdJbWFnZXMpCi0gICAgICAgICAgICBnSW1hZ2VzID0gbmV3IEhhc2hNYXA8UmVuZGVySW1hZ2Uq
LCBSZW5kZXJJbWFnZVNjYWxlRGF0YSo+OwotICAgICAgICBnSW1hZ2VzLT5zZXQoaW1hZ2UsIGRh
dGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIHNjYWxl
ZCwgYnV0IHdlIHBhaW50ZWQgYWxyZWFkeSBhdCB0aGlzIHNpemUsIHNvIGp1c3Qga2VlcCB1c2lu
ZyB3aGF0ZXZlciBtb2RlIHdlIGxhc3QgcGFpbnRlZCB3aXRoLgotICAgIGlmIChkYXRhLT5zaXpl
KCkgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuIGRhdGEtPnVzZUxvd1F1YWxpdHlTY2FsZSgpOwot
Ci0gICAgLy8gV2UgaGF2ZSBkYXRhIGFuZCBvdXIgc2l6ZSBqdXN0IGNoYW5nZWQuICBJZiB0aGlz
IGNoYW5nZSBoYXBwZW5lZCBxdWlja2x5LCBnbyBpbnRvIGxvdyBxdWFsaXR5IG1vZGUgYW5kIHRo
ZW4gc2V0IGEgcmVwYWludAotICAgIC8vIHRpbWVyIHRvIHBhaW50IGluIGhpZ2ggcXVhbGl0eSBt
b2RlLiAgT3RoZXJ3aXNlIGl0IGlzIG9rIHRvIGp1c3QgcGFpbnQgaW4gaGlnaCBxdWFsaXR5IG1v
ZGUuCi0gICAgZG91YmxlIG5ld1RpbWUgPSBjdXJyZW50VGltZSgpOwotICAgIGRhdGEtPnNldFVz
ZUxvd1F1YWxpdHlTY2FsZShuZXdUaW1lIC0gZGF0YS0+dGltZSgpIDwgY0xvd1F1YWxpdHlUaW1l
VGhyZXNob2xkKTsKLSAgICBkYXRhLT5zZXRUaW1lKG5ld1RpbWUpOwotICAgIGRhdGEtPnNldFNp
emUoc2l6ZSk7Ci0gICAgcmV0dXJuIGRhdGEtPnVzZUxvd1F1YWxpdHlTY2FsZSgpOwotfQotCi1I
YXNoTWFwPFJlbmRlckltYWdlKiwgUmVuZGVySW1hZ2VTY2FsZURhdGEqPiogUmVuZGVySW1hZ2VT
Y2FsZU9ic2VydmVyOjpnSW1hZ2VzID0gMDsKLQotdm9pZCBSZW5kZXJJbWFnZTo6aGlnaFF1YWxp
dHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJJbWFnZT4qKQotewotICAgIFJlbmRlcklt
YWdlU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCh0aGlzKTsKLX0K
LQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUmVuZGVySW1hZ2U6OlJlbmRlckltYWdl
KE5vZGUqIG5vZGUpCkBAIC0xOTMsNyArNjYsNyBAQCBSZW5kZXJJbWFnZTo6flJlbmRlckltYWdl
KCkKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVt
b3ZlQ2xpZW50KHRoaXMpOwotICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aW1hZ2VEZXN0
cm95ZWQodGhpcyk7CisgICAgU2NhbGVPYnNlcnZlcjo6Z2V0SW5zdGFuY2UoKS0+b2JqZWN0RGVz
dHJveWVkKHRoaXMpOwogfQogCiB2b2lkIFJlbmRlckltYWdlOjpzZXRDYWNoZWRJbWFnZShDYWNo
ZWRJbWFnZSogbmV3SW1hZ2UpCkBAIC00ODYsNyArMzU5LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6
cGFpbnRJbnRvUmVjdChHcmFwaGljcwogCiAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbHQg
PSAobm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShpbWdUYWcpKSA/IHN0YXRpY19jYXN0PEhU
TUxJbWFnZUVsZW1lbnQqPihub2RlKCkpIDogMDsKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcGVyYXRvciA9IGltYWdlRWx0ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkg
OiBDb21wb3NpdGVTb3VyY2VPdmVyOwotICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBS
ZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OnNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkodGhp
cywgcmVjdC5zaXplKCkpOworICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBTY2FsZU9i
c2VydmVyOjpnZXRJbnN0YW5jZSgpLT5zaG91bGRQYWludEF0TG93UXVhbGl0eSh0aGlzLCB0aGlz
LT5pbWFnZSgpLCByZWN0LnNpemUoKSk7CiAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcmVjdCwg
Y29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58687</attachid>
            <date>2010-06-14 12:29:54 -0700</date>
            <delta_ts>2010-06-14 15:25:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100614152949.patch</filename>
            <type>text/plain</type>
            <size>21846</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTEyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDYtMTQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBzbG93IG11bHRpcGxlIGFuaW1hdGVkIHJlc2l6ZSBpc3N1ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjMzCisKKyAgICAg
ICAgVGhlIHRpbWVyLWJhc2VkIHJlc2l6ZSBxdWFsaXR5IGFwcHJvYWNoIGltcGxlbWVudGVkIGlu
CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzM0MjEwIGlzIGEgZ29v
ZCBpZGVhLCBidXQgZG9lc24ndAorICAgICAgICBzY2FsZSB0byBtdWx0aXBsZSBpbWFnZXMgd2l0
aCBhbmltYXRlZCByZXNpemVzLiAgVGhpcyBmaXggdW5pZmllcyBhbGwKKyAgICAgICAgb3V0c3Rh
bmRpbmcgcmVzaXplIHRpbWVycyBpbnRvIGEgc2luZ2xlIHRpbWVyLCBhbmQgcmVtb3ZlcyB0aGUg
InVzZQorICAgICAgICBsYXN0IHF1YWxpdHkiIGNoZWNrICh3aGljaCBkb2Vzbid0IHdvcmsgd2hl
biBpbWFnZXMgYXJlIG92ZXJsYXBwaW5nKS4gCisgICAgICAgIEl0IGFsc28gcmVmYWN0b3JzIHRo
ZSBjb3B5IG9mIHRoaXMgY29kZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81Mzk0OS4KKworICAg
ICAgICBUaGlzIGltcHJvdmVzIFNhZmFyaSBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBJ
RTkgcGxhdGZvcm0gZGVtb3Mgb24gbXkgQzJEIE1hY1BybyAoMTAuNSk6CisgICAgICAgIGh0dHA6
Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9QZXJmb3JtYW5jZS8wMUZseWluZ0ltYWdlcy9E
ZWZhdWx0Lmh0bWwgKDQtPjYwZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvMTBGbGlja3JFeHBsb3Jlci9EZWZhdWx0Lmh0bWwgKDMtPjE2
ZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90ZXN0ZHJpdmUvUGVyZm9ybWFu
Y2UvMTFCcm93c2VyRmxpcC9EZWZhdWx0Lmh0bWwgKDktPjYwZnBzKQorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6UmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6Z2V0SW5zdGFuY2Up
OgorICAgICAgICBVbmlmeSBhbGwgdGltZXJzIGludG8gYSBzaW5nbGUgdGltZXIsIGNoYW5nZSBS
ZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXIKKyAgICAgICAgaW50byBhIHNpbmdsZXRvbiwgYW5k
IHJlbW92ZSB0aGUgcmVzaXplIHF1YWxpdHkgInN0aWNrbmVzcyIsIHNpbmNlIGl0CisgICAgICAg
IGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpcGxlIG91dHN0YW5kaW5nIHJlc2l6ZXMuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6Om9iamVjdERlc3Ryb3llZCk6
CisgICAgICAgIGdJbWFnZXMgaXMgbm93IHNfbGFzdFBhaW50VGltZU1hcC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGlt
ZXJGaXJlZCk6CisgICAgICAgIEZ1bmN0aW9uIG1hZGUgbm9uLXN0YXRpYzsgcmVwYWludCBhbGwg
cGVuZGluZyByZXNpemVzIChub3QganVzdCBvbmUpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxTY2FsZU9ic2VydmVyOjpyZXN0YXJ0VGltZXIpOgorICAgICAgICBBZGRlZCBmdW5j
dGlvbiB0byByZXN0YXJ0IHRpbWVyIGF0IDJ4IHRocmVzaG9sZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OlNjYWxlT2JzZXJ2ZXI6OnNo
b3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgVXNlIHNfbGFzdFBhaW50VGltZU1hcCwg
bm90IGdJbWFnZXMuICBJbXBsZW1lbnQgbmV3IHRpbWVyIGFsZ29yaXRobS4gCisgICAgICAgIFJl
bW92ZSByZXNpemUgInN0aWNraW5lc3MiLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6On5SZW5kZXJCb3hNb2RlbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIENoYW5n
ZXMgZm9yIHNpbmdsZXRvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnNob3VsZFBh
aW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgSW1wbGVtZW50IHNob3VsZFBhaW50QXRMb3dRdWFs
aXR5LCB3aGljaCBwdWxscyBvdXQgInRoaXMiIGFuZCBwYXNzZXMKKyAgICAgICAgdGhlIGNhbGwg
dG8gdGhlIFNjYWxlT2JzZXJ2ZXIgc2luZ2xldG9uLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICBFeHBvc2Ugc2hvdWxkUGFpbnRBdExvd1F1YWxp
dHkgYXMgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp+UmVuZGVySW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICBDaGFu
Z2VzIGZvciBzaW5nbGV0b24uCisKIDIwMTAtMDYtMTQgIENoYW5nIFNodSAgPGNoYW5nLnNodUBu
b2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5z
ZW4uCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShy
ZXZpc2lvbiA2MTAzMykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAw
NSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAgICAg
KEMpIDIwMDUsIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ4LDc3ICs0OSw2OCBAQCBi
b29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzX2xheWVyV2FzU2VsCiBzdGF0aWMgY29uc3QgZG91
YmxlIGNJbnRlcnBvbGF0aW9uQ3V0b2ZmID0gODAwLiAqIDgwMC47CiBzdGF0aWMgY29uc3QgZG91
YmxlIGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCA9IDAuNTAwOyAvLyA1MDAgbXMKIAotY2xhc3Mg
UmVuZGVyQm94TW9kZWxTY2FsZURhdGEgOiBwdWJsaWMgTm9uY29weWFibGUgewordHlwZWRlZiBI
YXNoTWFwPFJlbmRlckJveE1vZGVsT2JqZWN0KiwgZG91YmxlPiBMYXN0UGFpbnRUaW1lTWFwOwor
CitjbGFzcyBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXIgOiBwdWJsaWMgTm9uY29weWFibGUg
ewogcHVibGljOgotICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBkb3VibGUgdGltZSwgYm9vbCBsb3dRdWFsaXR5U2NhbGUpCi0gICAgICAgIDog
bV9zaXplKHNpemUpCi0gICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotICAgICAgICAs
IG1fbGFzdFBhaW50VGltZSh0aW1lKQotICAgICAgICAsIG1fbG93UXVhbGl0eVNjYWxlKGxvd1F1
YWxpdHlTY2FsZSkKLSAgICAgICAgLCBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyKG9iamVjdCwg
JlJlbmRlckJveE1vZGVsT2JqZWN0OjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKQotICAg
IHsKLSAgICB9Ci0KLSAgICB+UmVuZGVyQm94TW9kZWxTY2FsZURhdGEoKQotICAgIHsKLSAgICAg
ICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdG9wKCk7Ci0gICAgfQotCi0gICAgVGltZXI8
UmVuZGVyQm94TW9kZWxPYmplY3Q+JiBoaXFoUXVhbGl0eVJlcGFpbnRUaW1lcigpIHsgcmV0dXJu
IG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXI7IH0KLQotICAgIGNvbnN0IEludFNpemUmIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6
ZSYgcykgeyBtX3NpemUgPSBzOyB9Ci0gICAgZG91YmxlIGxhc3RQYWludFRpbWUoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RQYWludFRpbWU7IH0KLSAgICB2b2lkIHNldExhc3RQYWludFRpbWUoZG91
YmxlIHQpIHsgbV9sYXN0UGFpbnRUaW1lID0gdDsgfQotICAgIGJvb2wgdXNlTG93UXVhbGl0eVNj
YWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dRdWFsaXR5U2NhbGU7IH0KLSAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0g
ICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsg
bV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2b2lkIHNldFVzZUxvd1F1YWxpdHlTY2Fs
ZShib29sIGIpCi0gICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0b3Ao
KTsKLSAgICAgICAgbV9sb3dRdWFsaXR5U2NhbGUgPSBiOwotICAgICAgICBpZiAoYikKLSAgICAg
ICAgICAgIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KGNMb3dRdWFsaXR5
VGltZVRocmVzaG9sZCk7Ci0gICAgfQorICAgIHN0YXRpYyBSZW5kZXJCb3hNb2RlbFNjYWxlT2Jz
ZXJ2ZXIqIGdldEluc3RhbmNlKCk7CisgICAgYm9vbCBzaG91bGRQYWludEF0TG93UXVhbGl0eShH
cmFwaGljc0NvbnRleHQqLCBSZW5kZXJCb3hNb2RlbE9iamVjdCosIEltYWdlKiwgY29uc3QgSW50
U2l6ZSYpOworICAgIHZvaWQgb2JqZWN0RGVzdHJveWVkKFJlbmRlckJveE1vZGVsT2JqZWN0Kik7
CiAKIHByaXZhdGU6Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1f
dHJhbnNmb3JtOwotICAgIGRvdWJsZSBtX2xhc3RQYWludFRpbWU7Ci0gICAgYm9vbCBtX2xvd1F1
YWxpdHlTY2FsZTsKLSAgICBUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4gbV9oaWdoUXVhbGl0
eVJlcGFpbnRUaW1lcjsKKyAgICBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXIoKTsKKyAgICB2
b2lkIGhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8UmVuZGVyQm94TW9kZWxTY2Fs
ZU9ic2VydmVyPiopOworICAgIHZvaWQgcmVzdGFydFRpbWVyKCk7CisgICAgTGFzdFBhaW50VGlt
ZU1hcCogbV9sYXN0UGFpbnRUaW1lTWFwOworICAgIFRpbWVyPFJlbmRlckJveE1vZGVsU2NhbGVP
YnNlcnZlcj4gbV90aW1lcjsKKyAgICBzdGF0aWMgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVy
KiBzX2luc3RhbmNlOwogfTsKIAotY2xhc3MgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRQYWludEJhY2tncm91bmRBdExvd1F1YWxp
dHkoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqLCBJbWFnZSosIGNvbnN0
IEludFNpemUmKTsKK1JlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6UmVuZGVyQm94TW9kZWxT
Y2FsZU9ic2VydmVyKCkKKyAgICA6IG1fbGFzdFBhaW50VGltZU1hcCgwKQorICAgICwgbV90aW1l
cih0aGlzLCAmUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpoaWdoUXVhbGl0eVJlcGFpbnRU
aW1lckZpcmVkKQoreworfQogCi0gICAgc3RhdGljIHZvaWQgYm94TW9kZWxPYmplY3REZXN0cm95
ZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChnQm94
TW9kZWxPYmplY3RzKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSogZGF0
YSA9IGdCb3hNb2RlbE9iamVjdHMtPnRha2Uob2JqZWN0KTsKLSAgICAgICAgICAgIGRlbGV0ZSBk
YXRhOwotICAgICAgICAgICAgaWYgKCFnQm94TW9kZWxPYmplY3RzLT5zaXplKCkpIHsKLSAgICAg
ICAgICAgICAgICBkZWxldGUgZ0JveE1vZGVsT2JqZWN0czsKLSAgICAgICAgICAgICAgICBnQm94
TW9kZWxPYmplY3RzID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KK1JlbmRl
ckJveE1vZGVsU2NhbGVPYnNlcnZlciogUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpnZXRJ
bnN0YW5jZSgpCit7CisgICAgaWYgKCFzX2luc3RhbmNlKQorICAgICAgICBzX2luc3RhbmNlID0g
bmV3IFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjsKKyAgICByZXR1cm4gc19pbnN0YW5jZTsK
K30KIAotICAgIHN0YXRpYyB2b2lkIGhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIFJlbmRlckJveE1vZGVsU2Nh
bGVPYnNlcnZlcjo6Ym94TW9kZWxPYmplY3REZXN0cm95ZWQob2JqZWN0KTsKLSAgICAgICAgb2Jq
ZWN0LT5yZXBhaW50KCk7Cit2b2lkIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6b2JqZWN0
RGVzdHJveWVkKFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFtX2xh
c3RQYWludFRpbWVNYXApCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdFBhaW50VGltZU1h
cC0+cmVtb3ZlKG9iamVjdCk7CisgICAgaWYgKCFtX2xhc3RQYWludFRpbWVNYXAtPnNpemUoKSkg
eworICAgICAgICBkZWxldGUgbV9sYXN0UGFpbnRUaW1lTWFwOworICAgICAgICBtX2xhc3RQYWlu
dFRpbWVNYXAgPSAwOworICAgICAgICBtX3RpbWVyLnN0b3AoKTsKICAgICB9Cit9CisgICAgCit2
b2lkIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJG
aXJlZChUaW1lcjxSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI+KikKK3sKKyAgICBpZiAoIW1f
bGFzdFBhaW50VGltZU1hcCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljIEhhc2hNYXA8
UmVuZGVyQm94TW9kZWxPYmplY3QqLCBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSo+KiBnQm94TW9k
ZWxPYmplY3RzOwotfTsKKyAgICBmb3IgKExhc3RQYWludFRpbWVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9sYXN0UGFpbnRUaW1lTWFwLT5iZWdpbigpOyBpdCAhPSBtX2xhc3RQYWludFRpbWVNYXAtPmVu
ZCgpOyArK2l0KQorICAgICAgICBpdC0+Zmlyc3QtPnJlcGFpbnQoKTsKK30KIAotYm9vbCBSZW5k
ZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZFBhaW50QmFja2dyb3VuZEF0TG93UXVhbGl0
eShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3Qs
IEltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgUmVuZGVyQm94TW9kZWxT
Y2FsZU9ic2VydmVyOjpyZXN0YXJ0VGltZXIoKQoreworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7Cit9CisKK2Jvb2wgUmVuZGVyQm94TW9kZWxTY2Fs
ZU9ic2VydmVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3QsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIHsKICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgbm90IGEgYml0bWFwIGltYWdl
LCB0aGVuIG5vbmUgb2YgdGhpcyBpcyByZWxldmFudCBhbmQgd2UganVzdCBwYWludCBhdCBoaWdo
CiAgICAgLy8gcXVhbGl0eS4KLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFn
ZSgpKQorICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5pc0JpdG1hcEltYWdlKCkgfHwgY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBN
YWtlIHN1cmUgdG8gdXNlIHRoZSB1bnpvb21lZCBpbWFnZSBzaXplLCBzaW5jZSBpZiBhIGZ1bGwg
cGFnZSB6b29tIGlzIGluIGVmZmVjdCwgdGhlIGltYWdlCkBAIC0xMjYsNjAgKzExOCw0MyBAQCBi
b29sIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkCiAgICAgSW50U2l6ZSBpbWFn
ZVNpemUoaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CiAKICAgICAvLyBMb29rIG91
cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlLgotICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRh
KiBkYXRhID0gMDsKLSAgICBpZiAoZ0JveE1vZGVsT2JqZWN0cykKLSAgICAgICAgZGF0YSA9IGdC
b3hNb2RlbE9iamVjdHMtPmdldChvYmplY3QpOworICAgIGRvdWJsZSB0aW1lID0gSGFzaFRyYWl0
czxkb3VibGU+OjplbXB0eVZhbHVlKCk7CisgICAgaWYgKG1fbGFzdFBhaW50VGltZU1hcCkKKyAg
ICAgICAgdGltZSA9IG1fbGFzdFBhaW50VGltZU1hcC0+Z2V0KG9iamVjdCk7CiAKICAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGN1cnJlbnRUcmFuc2Zvcm0gPSBjb250ZXh0LT5nZXRDVE0oKTsK
ICAgICBib29sIGNvbnRleHRJc1NjYWxlZCA9ICFjdXJyZW50VHJhbnNmb3JtLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uT3JGbGlwcGVkKCk7CiAgICAgaWYgKCFjb250ZXh0SXNTY2FsZWQgJiYgaW1h
Z2VTaXplID09IHNpemUpIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gc2NhbGUgaW4gZWZmZWN0
LiAgSWYgd2UgaGFkIGEgc2NhbGUgaW4gZWZmZWN0IGJlZm9yZSwgd2UgY2FuIGp1c3QgZGVsZXRl
IHRoaXMgZGF0YS4KLSAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAgIGdCb3hNb2RlbE9i
amVjdHMtPnJlbW92ZShvYmplY3QpOwotICAgICAgICAgICAgZGVsZXRlIGRhdGE7Ci0gICAgICAg
IH0KKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gc2NhbGUgaW4gZWZmZWN0LiBJZiB3ZSBoYWQgYSBz
Y2FsZSBpbiBlZmZlY3QgYmVmb3JlLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhpcyBvYmplY3QgZnJv
bSB0aGUgbGlzdC4KKyAgICAgICAgaWYgKHRpbWUgIT0gSGFzaFRyYWl0czxkb3VibGU+OjplbXB0
eVZhbHVlKCkpCisgICAgICAgICAgICBtX2xhc3RQYWludFRpbWVNYXAtPnJlbW92ZShvYmplY3Qp
OworCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBUaGVyZSBpcyBubyBu
ZWVkIHRvIGhhc2ggc2NhbGVkIGltYWdlcyB0aGF0IGFsd2F5cyB1c2UgbG93IHF1YWxpdHkgbW9k
ZSB3aGVuIHRoZSBwYWdlIGRlbWFuZHMgaXQuICBUaGlzIGlzIHRoZSBpQ2hhdCBjYXNlLgorICAg
IC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gaGFzaCBzY2FsZWQgaW1hZ2VzIHRoYXQgYWx3YXlzIHVz
ZSBsb3cgcXVhbGl0eSBtb2RlIHdoZW4gdGhlIHBhZ2UgZGVtYW5kcyBpdC4gVGhpcyBpcyB0aGUg
aUNoYXQgY2FzZS4KICAgICBpZiAob2JqZWN0LT5kb2N1bWVudCgpLT5wYWdlKCktPmluTG93UXVh
bGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGUoKSkgewogICAgICAgICBkb3VibGUgdG90YWxQaXhl
bHMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT53aWR0aCgpKSAqIHN0YXRpY19jYXN0PGRv
dWJsZT4oaW1hZ2UtPmhlaWdodCgpKTsKICAgICAgICAgaWYgKHRvdGFsUGl4ZWxzID4gY0ludGVy
cG9sYXRpb25DdXRvZmYpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0KLSAgICAv
LyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgd2Ugd2lsbCBwYWludCB0aGUgZmlyc3Qgc2NhbGUg
YXQgaGlnaCBxdWFsaXR5IGFuZCByZWNvcmQgdGhlIHBhaW50IHRpbWUgaW4gY2FzZSBhIHNlY29u
ZCBzY2FsZSBoYXBwZW5zCi0gICAgLy8gdmVyeSBzb29uLgotICAgIGlmICghZGF0YSkgewotICAg
ICAgICBkYXRhID0gbmV3IFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKG9iamVjdCwgc2l6ZSwgY3Vy
cmVudFRyYW5zZm9ybSwgY3VycmVudFRpbWUoKSwgZmFsc2UpOwotICAgICAgICBpZiAoIWdCb3hN
b2RlbE9iamVjdHMpCi0gICAgICAgICAgICBnQm94TW9kZWxPYmplY3RzID0gbmV3IEhhc2hNYXA8
UmVuZGVyQm94TW9kZWxPYmplY3QqLCBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSo+OwotICAgICAg
ICBnQm94TW9kZWxPYmplY3RzLT5zZXQob2JqZWN0LCBkYXRhKTsKKyAgICBkb3VibGUgbmV3VGlt
ZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgaWYgKG5ld1RpbWUgLSB0aW1lID49IGNMb3dRdWFsaXR5
VGltZVRocmVzaG9sZCkgeworICAgICAgICAvLyBJZiBpdCBoYXMgYmVlbiBhdCBsZWFzdCBjTG93
UXVhbGl0eVRpbWVUaHJlc2hvbGQgc2Vjb25kcyBzaW5jZSB0aGUKKyAgICAgICAgLy8gbGFzdCB0
aW1lIGEgcmVzaXplIHdhcyByZXF1ZXN0ZWQsIGRyYXcgYXQgaGlnaCBxdWFsaXR5IGFuZCBkb24n
dCBzZXQKKyAgICAgICAgLy8gdGhlIHRpbWVyLgorICAgICAgICBvYmplY3REZXN0cm95ZWQob2Jq
ZWN0KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHIgPSBkYXRhLT50cmFuc2Zvcm0oKTsKLSAgICBib29sIHNjYWxlVW5jaGFuZ2Vk
ID0gdHIuYSgpID09IGN1cnJlbnRUcmFuc2Zvcm0uYSgpICYmIHRyLmIoKSA9PSBjdXJyZW50VHJh
bnNmb3JtLmIoKSAmJiB0ci5jKCkgPT0gY3VycmVudFRyYW5zZm9ybS5jKCkgJiYgdHIuZCgpID09
IGN1cnJlbnRUcmFuc2Zvcm0uZCgpOwotICAgIC8vIFdlIGFyZSBzY2FsZWQsIGJ1dCB3ZSBwYWlu
dGVkIGFscmVhZHkgYXQgdGhpcyBzaXplLCBzbyBqdXN0IGtlZXAgdXNpbmcgd2hhdGV2ZXIgbW9k
ZSB3ZSBsYXN0IHBhaW50ZWQgd2l0aC4KLSAgICBpZiAoKCFjb250ZXh0SXNTY2FsZWQgfHwgc2Nh
bGVVbmNoYW5nZWQpICYmIGRhdGEtPnNpemUoKSA9PSBzaXplKQotICAgICAgICByZXR1cm4gZGF0
YS0+dXNlTG93UXVhbGl0eVNjYWxlKCk7Ci0KLSAgICAvLyBXZSBoYXZlIGRhdGEgYW5kIG91ciBz
aXplIGp1c3QgY2hhbmdlZC4gIElmIHRoaXMgY2hhbmdlIGhhcHBlbmVkIHF1aWNrbHksIGdvIGlu
dG8gbG93IHF1YWxpdHkgbW9kZSBhbmQgdGhlbiBzZXQgYSByZXBhaW50Ci0gICAgLy8gdGltZXIg
dG8gcGFpbnQgaW4gaGlnaCBxdWFsaXR5IG1vZGUuICBPdGhlcndpc2UgaXQgaXMgb2sgdG8ganVz
dCBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4KLSAgICBkb3VibGUgbmV3VGltZSA9IGN1cnJl
bnRUaW1lKCk7Ci0gICAgZGF0YS0+c2V0VXNlTG93UXVhbGl0eVNjYWxlKG5ld1RpbWUgLSBkYXRh
LT5sYXN0UGFpbnRUaW1lKCkgPCBjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQpOwotICAgIGRhdGEt
PnNldExhc3RQYWludFRpbWUobmV3VGltZSk7Ci0gICAgZGF0YS0+c2V0VHJhbnNmb3JtKGN1cnJl
bnRUcmFuc2Zvcm0pOwotICAgIGRhdGEtPnNldFNpemUoc2l6ZSk7Ci0gICAgcmV0dXJuIGRhdGEt
PnVzZUxvd1F1YWxpdHlTY2FsZSgpOworICAgIC8vIERyYXcgYXQgbG93IHF1YWxpdHkgZmlyc3Qg
YW5kIHNldCBhIHRpbWVyIGZvciBoaWdoIHF1YWxpdHkuCisgICAgaWYgKCFtX2xhc3RQYWludFRp
bWVNYXApCisgICAgICAgIG1fbGFzdFBhaW50VGltZU1hcCA9IG5ldyBMYXN0UGFpbnRUaW1lTWFw
OworICAgIG1fbGFzdFBhaW50VGltZU1hcC0+c2V0KG9iamVjdCwgbmV3VGltZSk7CisgICAgcmVz
dGFydFRpbWVyKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhhc2hNYXA8UmVuZGVyQm94TW9k
ZWxPYmplY3QqLCBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSo+KiBSZW5kZXJCb3hNb2RlbFNjYWxl
T2JzZXJ2ZXI6OmdCb3hNb2RlbE9iamVjdHMgPSAwOwotCi12b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlckJveE1vZGVsT2Jq
ZWN0PiopCi17Ci0gICAgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpoaWdoUXVhbGl0eVJl
cGFpbnRUaW1lckZpcmVkKHRoaXMpOwotfQorUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyKiBS
ZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNfaW5zdGFuY2UgPSAwOwogCiB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKQogewpA
QCAtMjAzLDYgKzE3OCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rp
b25TCiAgICAgICAgIGNiLT5zZXRTZWxlY3Rpb25TdGF0ZShzKTsKIH0KIAorYm9vbCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJu
IFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6Z2V0SW5zdGFuY2UoKS0+c2hvdWxkUGFpbnRB
dExvd1F1YWxpdHkoY29udGV4dCwgdGhpcywgaW1hZ2UsIHNpemUpOworfQogCiBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6UmVuZGVyQm94TW9kZWxPYmplY3QoTm9kZSogbm9kZSkKICAgICA6IFJlbmRl
ck9iamVjdChub2RlKQpAQCAtMjE1LDcgKzE5NCw3IEBAIFJlbmRlckJveE1vZGVsT2JqZWN0Ojp+
UmVuZGVyQm94TW9kZWxPYmoKICAgICAvLyBPdXIgbGF5ZXIgc2hvdWxkIGhhdmUgYmVlbiBkZXN0
cm95ZWQgYW5kIGNsZWFyZWQgYnkgbm93CiAgICAgQVNTRVJUKCFoYXNMYXllcigpKTsKICAgICBB
U1NFUlQoIW1fbGF5ZXIpOwotICAgIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6Ym94TW9k
ZWxPYmplY3REZXN0cm95ZWQodGhpcyk7CisgICAgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVy
OjpnZXRJbnN0YW5jZSgpLT5vYmplY3REZXN0cm95ZWQodGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmRlc3Ryb3lMYXllcigpCkBAIC00NjQsNyArNDQzLDYgQEAgaW50IFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nUmlnaHQoYgogICAgIHJldHVybiBwYWRkaW5nLmNh
bGNNaW5WYWx1ZSh3KTsKIH0KIAotCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZp
bGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYg
YywgY29uc3QgRmlsbExheWVyKiBiZ0xheWVyLCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBo
LCBJbmxpbmVGbG93Qm94KiBib3gsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBSZW5kZXJPYmplY3Qq
IGJhY2tncm91bmRPYmplY3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFp
bnRJbmZvLmNvbnRleHQ7CkBAIC02MzEsNyArNjA5LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3AgPSBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gYmdMYXllci0+Y29tcG9zaXRlKCkg
OiBvcDsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2xpZW50Rm9yQmFja2dyb3VuZEltYWdl
ID0gYmFja2dyb3VuZE9iamVjdCA/IGJhY2tncm91bmRPYmplY3QgOiB0aGlzOwogICAgICAgICAg
ICAgSW1hZ2UqIGltYWdlID0gYmctPmltYWdlKGNsaWVudEZvckJhY2tncm91bmRJbWFnZSwgdGls
ZVNpemUpOwotICAgICAgICAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IFJlbmRlckJv
eE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRMb3dRdWFsaXR5KGNv
bnRleHQsIHRoaXMsIGltYWdlLCB0aWxlU2l6ZSk7CisgICAgICAgICAgICBib29sIHVzZUxvd1F1
YWxpdHlTY2FsaW5nID0gc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoY29udGV4dCwgaW1hZ2UsIHRp
bGVTaXplKTsKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBzdHls
ZSgpLT5jb2xvclNwYWNlKCksIGRlc3RSZWN0LCBwaGFzZSwgdGlsZVNpemUsIGNvbXBvc2l0ZU9w
LCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDYxMDMzKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDQsNiArMTA1LDkg
QEAgcHVibGljOgogICAgIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxS
ZW5kZXJCb3hNb2RlbE9iamVjdD4qKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25T
dGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsKKworICAgIGJvb2wgc2hvdWxkUGFpbnRBdExvd1F1YWxp
dHkoR3JhcGhpY3NDb250ZXh0KiwgSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRTaXplJiBzaXplKTsK
KwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnko
Y29uc3QgRmlsbExheWVyKiwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwgSW50UmVjdCYg
ZGVzdFJlY3QsIEludFBvaW50JiBwaGFzZSwgSW50U2l6ZSYgdGlsZVNpemUpOwogCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA2MTAzMykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDcgQEAKICAq
ICAgICAgICAgICAoQykgMjAwNiBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5j
b20pCiAgKiAgICAgICAgICAgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFp
bC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTUyLDEzMyArNTMsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBkb3VibGUgY0ludGVycG9sYXRpb25DdXRvZmYgPSA4
MDAuICogODAwLjsKLXN0YXRpYyBjb25zdCBkb3VibGUgY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xk
ID0gMC4wNTA7IC8vIDUwIG1zCi0KLWNsYXNzIFJlbmRlckltYWdlU2NhbGVEYXRhIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJJbWFnZVNjYWxlRGF0YShSZW5kZXJJ
bWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUsIGRvdWJsZSB0aW1lLCBib29sIGxvd1F1
YWxpdHlTY2FsZSkKLSAgICAgICAgOiBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBtX3RpbWUodGlt
ZSkKLSAgICAgICAgLCBtX2xvd1F1YWxpdHlTY2FsZShsb3dRdWFsaXR5U2NhbGUpCi0gICAgICAg
ICwgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcihpbWFnZSwgJlJlbmRlckltYWdlOjpoaWdoUXVh
bGl0eVJlcGFpbnRUaW1lckZpcmVkKQotICAgIHsKLSAgICB9Ci0KLSAgICB+UmVuZGVySW1hZ2VT
Y2FsZURhdGEoKQotICAgIHsKLSAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdG9w
KCk7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KLSAgICBkb3VibGUgdGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZTsgfQot
ICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dRdWFsaXR5
U2NhbGU7IH0KLSAgICBUaW1lcjxSZW5kZXJJbWFnZT4mIGhpcWhRdWFsaXR5UmVwYWludFRpbWVy
KCkgeyByZXR1cm4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsgfQotCi0gICAgdm9pZCBzZXRT
aXplKGNvbnN0IEludFNpemUmIHMpIHsgbV9zaXplID0gczsgfQotICAgIHZvaWQgc2V0VGltZShk
b3VibGUgdCkgeyBtX3RpbWUgPSB0OyB9Ci0gICAgdm9pZCBzZXRVc2VMb3dRdWFsaXR5U2NhbGUo
Ym9vbCBiKQotICAgIHsKLSAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdG9wKCk7
Ci0gICAgICAgIG1fbG93UXVhbGl0eVNjYWxlID0gYjsKLSAgICAgICAgaWYgKGIpCi0gICAgICAg
ICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0YXJ0T25lU2hvdChjTG93UXVhbGl0eVRp
bWVUaHJlc2hvbGQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgSW50U2l6ZSBtX3NpemU7
Ci0gICAgZG91YmxlIG1fdGltZTsKLSAgICBib29sIG1fbG93UXVhbGl0eVNjYWxlOwotICAgIFRp
bWVyPFJlbmRlckltYWdlPiBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyOwotfTsKLQotY2xhc3Mg
UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBzaG91
bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KFJlbmRlckltYWdlKiwgY29uc3QgSW50U2l6ZSYpOwot
Ci0gICAgc3RhdGljIHZvaWQgaW1hZ2VEZXN0cm95ZWQoUmVuZGVySW1hZ2UqIGltYWdlKQotICAg
IHsKLSAgICAgICAgaWYgKGdJbWFnZXMpIHsKLSAgICAgICAgICAgIFJlbmRlckltYWdlU2NhbGVE
YXRhKiBkYXRhID0gZ0ltYWdlcy0+dGFrZShpbWFnZSk7Ci0gICAgICAgICAgICBkZWxldGUgZGF0
YTsKLSAgICAgICAgICAgIGlmIChnSW1hZ2VzLT5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBnSW1hZ2VzOwotICAgICAgICAgICAgICAgIGdJbWFnZXMgPSAwOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGhpZ2hRdWFs
aXR5UmVwYWludFRpbWVyRmlyZWQoUmVuZGVySW1hZ2UqIGltYWdlKQotICAgIHsKLSAgICAgICAg
UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjppbWFnZURlc3Ryb3llZChpbWFnZSk7Ci0gICAgICAg
IGltYWdlLT5yZXBhaW50KCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBIYXNoTWFwPFJlbmRl
ckltYWdlKiwgUmVuZGVySW1hZ2VTY2FsZURhdGEqPiogZ0ltYWdlczsKLX07Ci0KLWJvb2wgUmVu
ZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KFJlbmRl
ckltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICAvLyBJZiB0aGUgaW1h
Z2UgaXMgbm90IGEgYml0bWFwIGltYWdlLCB0aGVuIG5vbmUgb2YgdGhpcyBpcyByZWxldmFudCBh
bmQgd2UganVzdCBwYWludCBhdCBoaWdoCi0gICAgLy8gcXVhbGl0eS4KLSAgICBpZiAoIWltYWdl
LT5pbWFnZSgpIHx8ICFpbWFnZS0+aW1hZ2UoKS0+aXNCaXRtYXBJbWFnZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdG8gdXNlIHRoZSB1bnpvb21lZCBpbWFn
ZSBzaXplLCBzaW5jZSBpZiBhIGZ1bGwgcGFnZSB6b29tIGlzIGluIGVmZmVjdCwgdGhlIGltYWdl
Ci0gICAgLy8gaXMgYWN0dWFsbHkgYmVpbmcgc2NhbGVkLgotICAgIEludFNpemUgaW1hZ2VTaXpl
KGltYWdlLT5pbWFnZSgpLT53aWR0aCgpLCBpbWFnZS0+aW1hZ2UoKS0+aGVpZ2h0KCkpOwotCi0g
ICAgLy8gTG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZS4KLSAgICBSZW5kZXJJbWFn
ZVNjYWxlRGF0YSogZGF0YSA9IDA7Ci0gICAgaWYgKGdJbWFnZXMpCi0gICAgICAgIGRhdGEgPSBn
SW1hZ2VzLT5nZXQoaW1hZ2UpOwotCi0gICAgaWYgKGltYWdlU2l6ZSA9PSBzaXplKSB7Ci0gICAg
ICAgIC8vIFRoZXJlIGlzIG5vIHNjYWxlIGluIGVmZmVjdC4gIElmIHdlIGhhZCBhIHNjYWxlIGlu
IGVmZmVjdCBiZWZvcmUsIHdlIGNhbiBqdXN0IGRlbGV0ZSB0aGlzIGRhdGEuCi0gICAgICAgIGlm
IChkYXRhKSB7Ci0gICAgICAgICAgICBnSW1hZ2VzLT5yZW1vdmUoaW1hZ2UpOwotICAgICAgICAg
ICAgZGVsZXRlIGRhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gaGFzaCBzY2FsZWQgaW1hZ2VzIHRoYXQgYWx3
YXlzIHVzZSBsb3cgcXVhbGl0eSBtb2RlIHdoZW4gdGhlIHBhZ2UgZGVtYW5kcyBpdC4gIFRoaXMg
aXMgdGhlIGlDaGF0IGNhc2UuCi0gICAgaWYgKGltYWdlLT5kb2N1bWVudCgpLT5wYWdlKCktPmlu
TG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGUoKSkgewotICAgICAgICBkb3VibGUgdG90
YWxQaXhlbHMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT5pbWFnZSgpLT53aWR0aCgpKSAq
IHN0YXRpY19jYXN0PGRvdWJsZT4oaW1hZ2UtPmltYWdlKCktPmhlaWdodCgpKTsKLSAgICAgICAg
aWYgKHRvdGFsUGl4ZWxzID4gY0ludGVycG9sYXRpb25DdXRvZmYpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgd2Ugd2ls
bCBwYWludCB0aGUgZmlyc3Qgc2NhbGUgYXQgaGlnaCBxdWFsaXR5IGFuZCByZWNvcmQgdGhlIHBh
aW50IHRpbWUgaW4gY2FzZSBhIHNlY29uZCBzY2FsZSBoYXBwZW5zCi0gICAgLy8gdmVyeSBzb29u
LgotICAgIGlmICghZGF0YSkgewotICAgICAgICBkYXRhID0gbmV3IFJlbmRlckltYWdlU2NhbGVE
YXRhKGltYWdlLCBzaXplLCBjdXJyZW50VGltZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZ0lt
YWdlcykKLSAgICAgICAgICAgIGdJbWFnZXMgPSBuZXcgSGFzaE1hcDxSZW5kZXJJbWFnZSosIFJl
bmRlckltYWdlU2NhbGVEYXRhKj47Ci0gICAgICAgIGdJbWFnZXMtPnNldChpbWFnZSwgZGF0YSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgc2NhbGVkLCBi
dXQgd2UgcGFpbnRlZCBhbHJlYWR5IGF0IHRoaXMgc2l6ZSwgc28ganVzdCBrZWVwIHVzaW5nIHdo
YXRldmVyIG1vZGUgd2UgbGFzdCBwYWludGVkIHdpdGguCi0gICAgaWYgKGRhdGEtPnNpemUoKSA9
PSBzaXplKQotICAgICAgICByZXR1cm4gZGF0YS0+dXNlTG93UXVhbGl0eVNjYWxlKCk7Ci0KLSAg
ICAvLyBXZSBoYXZlIGRhdGEgYW5kIG91ciBzaXplIGp1c3QgY2hhbmdlZC4gIElmIHRoaXMgY2hh
bmdlIGhhcHBlbmVkIHF1aWNrbHksIGdvIGludG8gbG93IHF1YWxpdHkgbW9kZSBhbmQgdGhlbiBz
ZXQgYSByZXBhaW50Ci0gICAgLy8gdGltZXIgdG8gcGFpbnQgaW4gaGlnaCBxdWFsaXR5IG1vZGUu
ICBPdGhlcndpc2UgaXQgaXMgb2sgdG8ganVzdCBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4K
LSAgICBkb3VibGUgbmV3VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgZGF0YS0+c2V0VXNlTG93
UXVhbGl0eVNjYWxlKG5ld1RpbWUgLSBkYXRhLT50aW1lKCkgPCBjTG93UXVhbGl0eVRpbWVUaHJl
c2hvbGQpOwotICAgIGRhdGEtPnNldFRpbWUobmV3VGltZSk7Ci0gICAgZGF0YS0+c2V0U2l6ZShz
aXplKTsKLSAgICByZXR1cm4gZGF0YS0+dXNlTG93UXVhbGl0eVNjYWxlKCk7Ci19Ci0KLUhhc2hN
YXA8UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFnZVNjYWxlRGF0YSo+KiBSZW5kZXJJbWFnZVNjYWxl
T2JzZXJ2ZXI6OmdJbWFnZXMgPSAwOwotCi12b2lkIFJlbmRlckltYWdlOjpoaWdoUXVhbGl0eVJl
cGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlckltYWdlPiopCi17Ci0gICAgUmVuZGVySW1hZ2VT
Y2FsZU9ic2VydmVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKHRoaXMpOwotfQotCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UoTm9k
ZSogbm9kZSkKQEAgLTE5NCw3ICs2OCw2IEBAIFJlbmRlckltYWdlOjp+UmVuZGVySW1hZ2UoKQog
ewogICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAgICBtX2NhY2hlZEltYWdlLT5yZW1vdmVD
bGllbnQodGhpcyk7Ci0gICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjppbWFnZURlc3Ryb3ll
ZCh0aGlzKTsKIH0KIAogdm9pZCBSZW5kZXJJbWFnZTo6c2V0Q2FjaGVkSW1hZ2UoQ2FjaGVkSW1h
Z2UqIG5ld0ltYWdlKQpAQCAtNDg3LDcgKzM2MCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50
SW50b1JlY3QoR3JhcGhpY3MKIAogICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWx0ID0gKG5v
ZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoaW1nVGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MSW1h
Z2VFbGVtZW50Kj4obm9kZSgpKSA6IDA7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29t
cG9zaXRlU291cmNlT3ZlcjsKLSAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gUmVuZGVy
SW1hZ2VTY2FsZU9ic2VydmVyOjpzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KHRoaXMsIHJl
Y3Quc2l6ZSgpKTsKKyAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gc2hvdWxkUGFpbnRB
dExvd1F1YWxpdHkoY29udGV4dCwgdGhpcy0+aW1hZ2UoKSwgcmVjdC5zaXplKCkpOwogICAgIGNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpLCBzdHls
ZSgpLT5jb2xvclNwYWNlKCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1c2VMb3dRdWFsaXR5
U2NhbGluZyk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58711</attachid>
            <date>2010-06-14 15:25:37 -0700</date>
            <delta_ts>2010-06-14 15:56:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100614182535.patch</filename>
            <type>text/plain</type>
            <size>21206</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDYtMTQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBzbG93IG11bHRpcGxlIGFuaW1hdGVkIHJlc2l6ZSBpc3N1ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjMzCisKKyAgICAg
ICAgVGhlIHRpbWVyLWJhc2VkIHJlc2l6ZSBxdWFsaXR5IGFwcHJvYWNoIGltcGxlbWVudGVkIGlu
CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzM0MjEwIGlzIGEgZ29v
ZCBpZGVhLCBidXQgZG9lc24ndAorICAgICAgICBzY2FsZSB0byBtdWx0aXBsZSBpbWFnZXMgd2l0
aCBhbmltYXRlZCByZXNpemVzLiAgVGhpcyBmaXggdW5pZmllcyBhbGwKKyAgICAgICAgb3V0c3Rh
bmRpbmcgcmVzaXplIHRpbWVycyBpbnRvIGEgc2luZ2xlIHRpbWVyLCBhbmQgcmVtb3ZlcyB0aGUg
InVzZQorICAgICAgICBsYXN0IHF1YWxpdHkiIGNoZWNrICh3aGljaCBkb2Vzbid0IHdvcmsgd2hl
biBpbWFnZXMgYXJlIG92ZXJsYXBwaW5nKS4gCisgICAgICAgIEl0IGFsc28gcmVmYWN0b3JzIHRo
ZSBjb3B5IG9mIHRoaXMgY29kZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81Mzk0OS4KKworICAg
ICAgICBUaGlzIGltcHJvdmVzIFNhZmFyaSBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBJ
RTkgcGxhdGZvcm0gZGVtb3Mgb24gbXkgQzJEIE1hY1BybyAoMTAuNSk6CisgICAgICAgIGh0dHA6
Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9QZXJmb3JtYW5jZS8wMUZseWluZ0ltYWdlcy9E
ZWZhdWx0Lmh0bWwgKDQtPjYwZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvMTBGbGlja3JFeHBsb3Jlci9EZWZhdWx0Lmh0bWwgKDMtPjE2
ZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90ZXN0ZHJpdmUvUGVyZm9ybWFu
Y2UvMTFCcm93c2VyRmxpcC9EZWZhdWx0Lmh0bWwgKDktPjYwZnBzKQorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
UXVhbGl0eUNvbnRyb2xsZXI6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICBVbmlm
eSBhbGwgdGltZXJzIGludG8gYSBzaW5nbGUgdGltZXIsIHJlbmFtZSBSZW5kZXJCb3hNb2RlbFNj
YWxlT2JzZXJ2ZXIKKyAgICAgICAgdG8gSW1hZ2VRdWFsaXR5Q29udHJvbGxlciwgYW5kIHJlbW92
ZSB0aGUgcmVzaXplIHF1YWxpdHkgInN0aWNrbmVzcyIsCisgICAgICAgIHNpbmNlIGl0IGRvZXNu
J3Qgd29yayB3aXRoIG11bHRpcGxlIG91dHN0YW5kaW5nIHJlc2l6ZXMuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpvYmplY3REZXN0cm95ZWQpOgorICAgICAgICBn
SW1hZ2VzIGlzIG5vdyBzX2xhc3RQYWludFRpbWVNYXAuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVF1YWxpdHlDb250cm9sbGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKToKKyAgICAg
ICAgRnVuY3Rpb24gbWFkZSBub24tc3RhdGljOyByZXBhaW50IGFsbCBwZW5kaW5nIHJlc2l6ZXMg
KG5vdCBqdXN0IG9uZSkuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVy
OjpyZXN0YXJ0VGltZXIpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbiB0byByZXN0YXJ0IHRpbWVy
IGF0IDJ4IHRocmVzaG9sZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUXVhbGl0eUNvbnRyb2xs
ZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgVXNlIHNfbGFzdFBhaW50VGlt
ZU1hcCwgbm90IGdJbWFnZXMuICBJbXBsZW1lbnQgbmV3IHRpbWVyIGFsZ29yaXRobS4gCisgICAg
ICAgIFJlbW92ZSByZXNpemUgInN0aWNraW5lc3MiLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgSW1wbGVt
ZW50IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5LCB3aGljaCBwdWxscyBvdXQgInRoaXMiIGFuZCBw
YXNzZXMKKyAgICAgICAgdGhlIGNhbGwgdG8gdGhlIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6flJlbmRlckJveE1vZGVsT2Jq
ZWN0KToKKyAgICAgICAgUmVtb3ZlIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICBFeHBvc2Ugc2hvdWxkUGFpbnRBdExvd1F1YWxp
dHkgYXMgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp+UmVuZGVySW1hZ2UpOgorICAg
ICAgICBObyBuZWVkIHRvIGNhbGwgb2JqZWN0RGVzdHJveWVkKCkgaGVyZSBhbnltb3JlLCBzaW5j
ZSB0aGUKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QgZGVzdHJ1Y3RvciB3aWxsIGRvIHRo
aXMgZm9yIHVzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3Qp
OgorICAgICAgICBSaXAgb3V0IFJlbmRlckltYWdlU2NhbGVPYnNlcnZlciwgYW5kIGNhbGwKKyAg
ICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KCkgaW5z
dGVhZC4KKwogMjAxMC0wNi0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNjExNDgpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQsNiArNCw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
IChrZGVAY2FyZXdvbGYuY29tKQogICogICAgICAgICAgIChDKSAyMDA1LCAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC00OCw3NyArNDksNTAgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6c19sYXllcldhc1NlbAogc3RhdGljIGNvbnN0IGRvdWJsZSBjSW50ZXJwb2xhdGlvbkN1dG9m
ZiA9IDgwMC4gKiA4MDAuOwogc3RhdGljIGNvbnN0IGRvdWJsZSBjTG93UXVhbGl0eVRpbWVUaHJl
c2hvbGQgPSAwLjUwMDsgLy8gNTAwIG1zCiAKLWNsYXNzIFJlbmRlckJveE1vZGVsU2NhbGVEYXRh
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3R5cGVkZWYgSGFzaE1hcDxSZW5kZXJCb3hNb2RlbE9i
amVjdCosIGRvdWJsZT4gTGFzdFBhaW50VGltZU1hcDsKKworY2xhc3MgSW1hZ2VRdWFsaXR5Q29u
dHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyQm94TW9k
ZWxTY2FsZURhdGEoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGRvdWJsZSB0aW1lLCBib29s
IGxvd1F1YWxpdHlTY2FsZSkKLSAgICAgICAgOiBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBtX3Ry
YW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgICAgICwgbV9sYXN0UGFpbnRUaW1lKHRpbWUpCi0gICAg
ICAgICwgbV9sb3dRdWFsaXR5U2NhbGUobG93UXVhbGl0eVNjYWxlKQotICAgICAgICAsIG1faGln
aFF1YWxpdHlSZXBhaW50VGltZXIob2JqZWN0LCAmUmVuZGVyQm94TW9kZWxPYmplY3Q6OmhpZ2hR
dWFsaXR5UmVwYWludFRpbWVyRmlyZWQpCi0gICAgewotICAgIH0KLQotICAgIH5SZW5kZXJCb3hN
b2RlbFNjYWxlRGF0YSgpCi0gICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVy
LnN0b3AoKTsKLSAgICB9Ci0KLSAgICBUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4mIGhpcWhR
dWFsaXR5UmVwYWludFRpbWVyKCkgeyByZXR1cm4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsg
fQotCi0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
ICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzKSB7IG1fc2l6ZSA9IHM7IH0KLSAgICBk
b3VibGUgbGFzdFBhaW50VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBhaW50VGltZTsgfQot
ICAgIHZvaWQgc2V0TGFzdFBhaW50VGltZShkb3VibGUgdCkgeyBtX2xhc3RQYWludFRpbWUgPSB0
OyB9Ci0gICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvd1F1
YWxpdHlTY2FsZTsgfQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQot
ICAgIHZvaWQgc2V0VXNlTG93UXVhbGl0eVNjYWxlKGJvb2wgYikKLSAgICB7Ci0gICAgICAgIG1f
aGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3RvcCgpOwotICAgICAgICBtX2xvd1F1YWxpdHlTY2Fs
ZSA9IGI7Ci0gICAgICAgIGlmIChiKQotICAgICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRU
aW1lci5zdGFydE9uZVNob3QoY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAgICB9CisgICAg
Ym9vbCBzaG91bGRQYWludEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJCb3hN
b2RlbE9iamVjdCosIEltYWdlKiwgY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgb2JqZWN0RGVz
dHJveWVkKFJlbmRlckJveE1vZGVsT2JqZWN0Kik7CiAKIHByaXZhdGU6Ci0gICAgSW50U2l6ZSBt
X3NpemU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwotICAgIGRvdWJsZSBtX2xh
c3RQYWludFRpbWU7Ci0gICAgYm9vbCBtX2xvd1F1YWxpdHlTY2FsZTsKLSAgICBUaW1lcjxSZW5k
ZXJCb3hNb2RlbE9iamVjdD4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsKLX07CisgICAgSW1h
Z2VRdWFsaXR5Q29udHJvbGxlcigpOworICAgIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGltZXJG
aXJlZChUaW1lcjxJbWFnZVF1YWxpdHlDb250cm9sbGVyPiopOworICAgIHZvaWQgcmVzdGFydFRp
bWVyKCk7CiAKLWNsYXNzIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGJvb2wgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRMb3dRdWFsaXR5KEdyYXBoaWNz
Q29udGV4dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiwgSW1hZ2UqLCBjb25zdCBJbnRTaXplJik7
CisgICAgTGFzdFBhaW50VGltZU1hcCBtX2xhc3RQYWludFRpbWVNYXA7CisgICAgVGltZXI8SW1h
Z2VRdWFsaXR5Q29udHJvbGxlcj4gbV90aW1lcjsKK307CiAKLSAgICBzdGF0aWMgdm9pZCBib3hN
b2RlbE9iamVjdERlc3Ryb3llZChSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0KQotICAgIHsK
LSAgICAgICAgaWYgKGdCb3hNb2RlbE9iamVjdHMpIHsKLSAgICAgICAgICAgIFJlbmRlckJveE1v
ZGVsU2NhbGVEYXRhKiBkYXRhID0gZ0JveE1vZGVsT2JqZWN0cy0+dGFrZShvYmplY3QpOwotICAg
ICAgICAgICAgZGVsZXRlIGRhdGE7Ci0gICAgICAgICAgICBpZiAoIWdCb3hNb2RlbE9iamVjdHMt
PnNpemUoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBnQm94TW9kZWxPYmplY3RzOwotICAg
ICAgICAgICAgICAgIGdCb3hNb2RlbE9iamVjdHMgPSAwOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQorSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6SW1hZ2VRdWFsaXR5Q29udHJvbGxl
cigpCisgICAgOiBtX3RpbWVyKHRoaXMsICZJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpoaWdoUXVh
bGl0eVJlcGFpbnRUaW1lckZpcmVkKQoreworfQogCi0gICAgc3RhdGljIHZvaWQgaGlnaFF1YWxp
dHlSZXBhaW50VGltZXJGaXJlZChSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0KQotICAgIHsK
LSAgICAgICAgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpib3hNb2RlbE9iamVjdERlc3Ry
b3llZChvYmplY3QpOwotICAgICAgICBvYmplY3QtPnJlcGFpbnQoKTsKLSAgICB9Cit2b2lkIElt
YWdlUXVhbGl0eUNvbnRyb2xsZXI6Om9iamVjdERlc3Ryb3llZChSZW5kZXJCb3hNb2RlbE9iamVj
dCogb2JqZWN0KQoreworICAgIG1fbGFzdFBhaW50VGltZU1hcC5yZW1vdmUob2JqZWN0KTsKKyAg
ICBpZiAobV9sYXN0UGFpbnRUaW1lTWFwLmlzRW1wdHkoKSkKKyAgICAgICAgbV90aW1lci5zdG9w
KCk7Cit9CisgICAgCit2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVw
YWludFRpbWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5Q29udHJvbGxlcj4qKQoreworICAgIGZv
ciAoTGFzdFBhaW50VGltZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2xhc3RQYWludFRpbWVNYXAuYmVn
aW4oKTsgaXQgIT0gbV9sYXN0UGFpbnRUaW1lTWFwLmVuZCgpOyArK2l0KQorICAgICAgICBpdC0+
Zmlyc3QtPnJlcGFpbnQoKTsKK30KIAotICAgIHN0YXRpYyBIYXNoTWFwPFJlbmRlckJveE1vZGVs
T2JqZWN0KiwgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEqPiogZ0JveE1vZGVsT2JqZWN0czsKLX07
Cit2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnJlc3RhcnRUaW1lcigpCit7CisgICAgbV90
aW1lci5zdGFydE9uZVNob3QoY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkICogMi4wKTsKK30KIAot
Ym9vbCBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZFBhaW50QmFja2dyb3VuZEF0
TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBvYmplY3QsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK2Jvb2wgSW1hZ2VR
dWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0LCBJbWFnZSogaW1hZ2UsIGNv
bnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgLy8gSWYgdGhlIGltYWdlIGlzIG5vdCBhIGJpdG1h
cCBpbWFnZSwgdGhlbiBub25lIG9mIHRoaXMgaXMgcmVsZXZhbnQgYW5kIHdlIGp1c3QgcGFpbnQg
YXQgaGlnaAogICAgIC8vIHF1YWxpdHkuCi0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0
bWFwSW1hZ2UoKSkKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpIHx8
IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gTWFrZSBzdXJlIHRvIHVzZSB0aGUgdW56b29tZWQgaW1hZ2Ugc2l6ZSwgc2luY2UgaWYg
YSBmdWxsIHBhZ2Ugem9vbSBpcyBpbiBlZmZlY3QsIHRoZSBpbWFnZQpAQCAtMTI2LDU5ICsxMDAs
NDUgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZAogICAgIEludFNp
emUgaW1hZ2VTaXplKGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwogCiAgICAgLy8g
TG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZS4KLSAgICBSZW5kZXJCb3hNb2RlbFNj
YWxlRGF0YSogZGF0YSA9IDA7Ci0gICAgaWYgKGdCb3hNb2RlbE9iamVjdHMpCi0gICAgICAgIGRh
dGEgPSBnQm94TW9kZWxPYmplY3RzLT5nZXQob2JqZWN0KTsKKyAgICBMYXN0UGFpbnRUaW1lTWFw
OjppdGVyYXRvciBpID0gbV9sYXN0UGFpbnRUaW1lTWFwLmZpbmQob2JqZWN0KTsKIAogICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY3VycmVudFRyYW5zZm9ybSA9IGNvbnRleHQtPmdldENUTSgp
OwogICAgIGJvb2wgY29udGV4dElzU2NhbGVkID0gIWN1cnJlbnRUcmFuc2Zvcm0uaXNJZGVudGl0
eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKTsKICAgICBpZiAoIWNvbnRleHRJc1NjYWxlZCAmJiBp
bWFnZVNpemUgPT0gc2l6ZSkgewotICAgICAgICAvLyBUaGVyZSBpcyBubyBzY2FsZSBpbiBlZmZl
Y3QuICBJZiB3ZSBoYWQgYSBzY2FsZSBpbiBlZmZlY3QgYmVmb3JlLCB3ZSBjYW4ganVzdCBkZWxl
dGUgdGhpcyBkYXRhLgotICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgZ0JveE1vZGVs
T2JqZWN0cy0+cmVtb3ZlKG9iamVjdCk7Ci0gICAgICAgICAgICBkZWxldGUgZGF0YTsKLSAgICAg
ICAgfQorICAgICAgICAvLyBUaGVyZSBpcyBubyBzY2FsZSBpbiBlZmZlY3QuIElmIHdlIGhhZCBh
IHNjYWxlIGluIGVmZmVjdCBiZWZvcmUsIHdlIGNhbiBqdXN0IHJlbW92ZSB0aGlzIG9iamVjdCBm
cm9tIHRoZSBsaXN0LgorICAgICAgICBpZiAoaSAhPSBtX2xhc3RQYWludFRpbWVNYXAuZW5kKCkp
CisgICAgICAgICAgICBtX2xhc3RQYWludFRpbWVNYXAucmVtb3ZlKG9iamVjdCk7CisKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gaGFz
aCBzY2FsZWQgaW1hZ2VzIHRoYXQgYWx3YXlzIHVzZSBsb3cgcXVhbGl0eSBtb2RlIHdoZW4gdGhl
IHBhZ2UgZGVtYW5kcyBpdC4gIFRoaXMgaXMgdGhlIGlDaGF0IGNhc2UuCisgICAgLy8gVGhlcmUg
aXMgbm8gbmVlZCB0byBoYXNoIHNjYWxlZCBpbWFnZXMgdGhhdCBhbHdheXMgdXNlIGxvdyBxdWFs
aXR5IG1vZGUgd2hlbiB0aGUgcGFnZSBkZW1hbmRzIGl0LiBUaGlzIGlzIHRoZSBpQ2hhdCBjYXNl
LgogICAgIGlmIChvYmplY3QtPmRvY3VtZW50KCktPnBhZ2UoKS0+aW5Mb3dRdWFsaXR5SW1hZ2VJ
bnRlcnBvbGF0aW9uTW9kZSgpKSB7CiAgICAgICAgIGRvdWJsZSB0b3RhbFBpeGVscyA9IHN0YXRp
Y19jYXN0PGRvdWJsZT4oaW1hZ2UtPndpZHRoKCkpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFn
ZS0+aGVpZ2h0KCkpOwogICAgICAgICBpZiAodG90YWxQaXhlbHMgPiBjSW50ZXJwb2xhdGlvbkN1
dG9mZikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQotICAgIC8vIElmIHRoZXJl
IGlzIG5vIGRhdGEgeWV0LCB3ZSB3aWxsIHBhaW50IHRoZSBmaXJzdCBzY2FsZSBhdCBoaWdoIHF1
YWxpdHkgYW5kIHJlY29yZCB0aGUgcGFpbnQgdGltZSBpbiBjYXNlIGEgc2Vjb25kIHNjYWxlIGhh
cHBlbnMKLSAgICAvLyB2ZXJ5IHNvb24uCi0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGRhdGEg
PSBuZXcgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEob2JqZWN0LCBzaXplLCBjdXJyZW50VHJhbnNm
b3JtLCBjdXJyZW50VGltZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZ0JveE1vZGVsT2JqZWN0
cykKLSAgICAgICAgICAgIGdCb3hNb2RlbE9iamVjdHMgPSBuZXcgSGFzaE1hcDxSZW5kZXJCb3hN
b2RlbE9iamVjdCosIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKj47Ci0gICAgICAgIGdCb3hNb2Rl
bE9iamVjdHMtPnNldChvYmplY3QsIGRhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ciA9IGRhdGEtPnRyYW5zZm9ybSgpOwot
ICAgIGJvb2wgc2NhbGVVbmNoYW5nZWQgPSB0ci5hKCkgPT0gY3VycmVudFRyYW5zZm9ybS5hKCkg
JiYgdHIuYigpID09IGN1cnJlbnRUcmFuc2Zvcm0uYigpICYmIHRyLmMoKSA9PSBjdXJyZW50VHJh
bnNmb3JtLmMoKSAmJiB0ci5kKCkgPT0gY3VycmVudFRyYW5zZm9ybS5kKCk7Ci0gICAgLy8gV2Ug
YXJlIHNjYWxlZCwgYnV0IHdlIHBhaW50ZWQgYWxyZWFkeSBhdCB0aGlzIHNpemUsIHNvIGp1c3Qg
a2VlcCB1c2luZyB3aGF0ZXZlciBtb2RlIHdlIGxhc3QgcGFpbnRlZCB3aXRoLgotICAgIGlmICgo
IWNvbnRleHRJc1NjYWxlZCB8fCBzY2FsZVVuY2hhbmdlZCkgJiYgZGF0YS0+c2l6ZSgpID09IHNp
emUpCi0gICAgICAgIHJldHVybiBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKLQotICAgIC8v
IFdlIGhhdmUgZGF0YSBhbmQgb3VyIHNpemUganVzdCBjaGFuZ2VkLiAgSWYgdGhpcyBjaGFuZ2Ug
aGFwcGVuZWQgcXVpY2tseSwgZ28gaW50byBsb3cgcXVhbGl0eSBtb2RlIGFuZCB0aGVuIHNldCBh
IHJlcGFpbnQKLSAgICAvLyB0aW1lciB0byBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4gIE90
aGVyd2lzZSBpdCBpcyBvayB0byBqdXN0IHBhaW50IGluIGhpZ2ggcXVhbGl0eSBtb2RlLgogICAg
IGRvdWJsZSBuZXdUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBkYXRhLT5zZXRVc2VMb3dRdWFs
aXR5U2NhbGUobmV3VGltZSAtIGRhdGEtPmxhc3RQYWludFRpbWUoKSA8IGNMb3dRdWFsaXR5VGlt
ZVRocmVzaG9sZCk7Ci0gICAgZGF0YS0+c2V0TGFzdFBhaW50VGltZShuZXdUaW1lKTsKLSAgICBk
YXRhLT5zZXRUcmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0gICAgZGF0YS0+c2V0U2l6ZShz
aXplKTsKLSAgICByZXR1cm4gZGF0YS0+dXNlTG93UXVhbGl0eVNjYWxlKCk7CisgICAgaWYgKGkg
IT0gbV9sYXN0UGFpbnRUaW1lTWFwLmVuZCgpKSB7CisgICAgICAgIGRvdWJsZSB0aW1lID0gaS0+
c2Vjb25kOworICAgICAgICBpZiAobmV3VGltZSAtIHRpbWUgPj0gY0xvd1F1YWxpdHlUaW1lVGhy
ZXNob2xkKSB7CisgICAgICAgICAgICAvLyBJZiBpdCBoYXMgYmVlbiBhdCBsZWFzdCBjTG93UXVh
bGl0eVRpbWVUaHJlc2hvbGQgc2Vjb25kcyBzaW5jZSB0aGUKKyAgICAgICAgICAgIC8vIGxhc3Qg
dGltZSBhIHJlc2l6ZSB3YXMgcmVxdWVzdGVkLCBkcmF3IGF0IGhpZ2ggcXVhbGl0eSBhbmQgZG9u
J3Qgc2V0CisgICAgICAgICAgICAvLyB0aGUgdGltZXIuCisgICAgICAgICAgICBvYmplY3REZXN0
cm95ZWQob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvLyBEcmF3IGF0IGxvdyBxdWFsaXR5IGZpcnN0IGFuZCBzZXQgYSB0aW1lciBmb3Ig
aGlnaCBxdWFsaXR5LgorICAgIG1fbGFzdFBhaW50VGltZU1hcC5zZXQob2JqZWN0LCBuZXdUaW1l
KTsKKyAgICByZXN0YXJ0VGltZXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSGFzaE1hcDxS
ZW5kZXJCb3hNb2RlbE9iamVjdCosIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKj4qIFJlbmRlckJv
eE1vZGVsU2NhbGVPYnNlcnZlcjo6Z0JveE1vZGVsT2JqZWN0cyA9IDA7Ci0KLXZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+KikKK3N0YXRpYyBJbWFnZVF1YWxpdHlDb250cm9sbGVyKiBpbWFnZVF1
YWxpdHlDb250cm9sbGVyKCkKIHsKLSAgICBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6Omhp
Z2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQodGhpcyk7CisgICAgc3RhdGljIEltYWdlUXVhbGl0
eUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBuZXcgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjsKKyAg
ICByZXR1cm4gY29udHJvbGxlcjsKIH0KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0
U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgcykKQEAgLTIwMyw2ICsxNjMsMTAgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uUwogICAgICAgICBjYi0+c2V0U2Vs
ZWN0aW9uU3RhdGUocyk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNob3VsZFBh
aW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSW1hZ2UqIGltYWdlLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBpbWFnZVF1YWxpdHlDb250cm9sbGVy
KCktPnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIHRoaXMsIGltYWdlLCBzaXplKTsK
K30KIAogUmVuZGVyQm94TW9kZWxPYmplY3Q6OlJlbmRlckJveE1vZGVsT2JqZWN0KE5vZGUqIG5v
ZGUpCiAgICAgOiBSZW5kZXJPYmplY3Qobm9kZSkKQEAgLTIxNSw3ICsxNzksNyBAQCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6flJlbmRlckJveE1vZGVsT2JqCiAgICAgLy8gT3VyIGxheWVyIHNob3Vs
ZCBoYXZlIGJlZW4gZGVzdHJveWVkIGFuZCBjbGVhcmVkIGJ5IG5vdwogICAgIEFTU0VSVCghaGFz
TGF5ZXIoKSk7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsKLSAgICBSZW5kZXJCb3hNb2RlbFNjYWxl
T2JzZXJ2ZXI6OmJveE1vZGVsT2JqZWN0RGVzdHJveWVkKHRoaXMpOworICAgIGltYWdlUXVhbGl0
eUNvbnRyb2xsZXIoKS0+b2JqZWN0RGVzdHJveWVkKHRoaXMpOwogfQogCiB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpkZXN0cm95TGF5ZXIoKQpAQCAtNDY0LDcgKzQyOCw2IEBAIGludCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFkZGluZ1JpZ2h0KGIKICAgICByZXR1cm4gcGFkZGluZy5jYWxj
TWluVmFsdWUodyk7CiB9CiAKLQogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxs
TGF5ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGMs
IGNvbnN0IEZpbGxMYXllciogYmdMYXllciwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwg
SW5saW5lRmxvd0JveCogYm94LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgUmVuZGVyT2JqZWN0KiBi
YWNrZ3JvdW5kT2JqZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50
SW5mby5jb250ZXh0OwpAQCAtNjMxLDcgKzU5NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50RmlsbExheWUKICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wID0gb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IGJnTGF5ZXItPmNvbXBvc2l0ZSgpIDog
b3A7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudEZvckJhY2tncm91bmRJbWFnZSA9
IGJhY2tncm91bmRPYmplY3QgPyBiYWNrZ3JvdW5kT2JqZWN0IDogdGhpczsKICAgICAgICAgICAg
IEltYWdlKiBpbWFnZSA9IGJnLT5pbWFnZShjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2UsIHRpbGVT
aXplKTsKLSAgICAgICAgICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBSZW5kZXJCb3hN
b2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZFBhaW50QmFja2dyb3VuZEF0TG93UXVhbGl0eShjb250
ZXh0LCB0aGlzLCBpbWFnZSwgdGlsZVNpemUpOworICAgICAgICAgICAgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCB0aWxl
U2l6ZSk7CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgc3R5bGUo
KS0+Y29sb3JTcGFjZSgpLCBkZXN0UmVjdCwgcGhhc2UsIHRpbGVTaXplLCBjb21wb3NpdGVPcCwg
dXNlTG93UXVhbGl0eVNjYWxpbmcpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA2MTE0OCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA3LDYgKzEwOCw4IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2b2lkIGNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdl
b21ldHJ5KGNvbnN0IEZpbGxMYXllciosIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsIElu
dFJlY3QmIGRlc3RSZWN0LCBJbnRQb2ludCYgcGhhc2UsIEludFNpemUmIHRpbGVTaXplKTsKIAor
ICAgIGJvb2wgc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiwgSW1hZ2Uq
LCBjb25zdCBJbnRTaXplJik7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzQm94TW9k
ZWxPYmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHAJKHJldmlzaW9uIDYxMTQ4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsNyBAQAogICogICAgICAgICAgIChD
KSAyMDA2IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqICAgICAg
ICAgICAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsMTMz
ICs1Myw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGNvbnN0IGRvdWJsZSBjSW50ZXJwb2xhdGlvbkN1dG9mZiA9IDgwMC4gKiA4MDAuOwot
c3RhdGljIGNvbnN0IGRvdWJsZSBjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQgPSAwLjA1MDsgLy8g
NTAgbXMKLQotY2xhc3MgUmVuZGVySW1hZ2VTY2FsZURhdGEgOiBwdWJsaWMgTm9uY29weWFibGUg
ewotcHVibGljOgotICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKFJlbmRlckltYWdlKiBpbWFnZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgZG91YmxlIHRpbWUsIGJvb2wgbG93UXVhbGl0eVNjYWxlKQot
ICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgICAgICAsIG1fdGltZSh0aW1lKQotICAgICAgICAs
IG1fbG93UXVhbGl0eVNjYWxlKGxvd1F1YWxpdHlTY2FsZSkKLSAgICAgICAgLCBtX2hpZ2hRdWFs
aXR5UmVwYWludFRpbWVyKGltYWdlLCAmUmVuZGVySW1hZ2U6OmhpZ2hRdWFsaXR5UmVwYWludFRp
bWVyRmlyZWQpCi0gICAgewotICAgIH0KLQotICAgIH5SZW5kZXJJbWFnZVNjYWxlRGF0YSgpCi0g
ICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0b3AoKTsKLSAgICB9Ci0g
ICAgCi0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
ICAgIGRvdWJsZSB0aW1lKCkgY29uc3QgeyByZXR1cm4gbV90aW1lOyB9Ci0gICAgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvd1F1YWxpdHlTY2FsZTsgfQotICAg
IFRpbWVyPFJlbmRlckltYWdlPiYgaGlxaFF1YWxpdHlSZXBhaW50VGltZXIoKSB7IHJldHVybiBt
X2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyOyB9Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50
U2l6ZSYgcykgeyBtX3NpemUgPSBzOyB9Ci0gICAgdm9pZCBzZXRUaW1lKGRvdWJsZSB0KSB7IG1f
dGltZSA9IHQ7IH0KLSAgICB2b2lkIHNldFVzZUxvd1F1YWxpdHlTY2FsZShib29sIGIpCi0gICAg
ewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0b3AoKTsKLSAgICAgICAgbV9s
b3dRdWFsaXR5U2NhbGUgPSBiOwotICAgICAgICBpZiAoYikKLSAgICAgICAgICAgIG1faGlnaFF1
YWxpdHlSZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7
Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBkb3VibGUg
bV90aW1lOwotICAgIGJvb2wgbV9sb3dRdWFsaXR5U2NhbGU7Ci0gICAgVGltZXI8UmVuZGVySW1h
Z2U+IG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXI7Ci19OwotCi1jbGFzcyBSZW5kZXJJbWFnZVNj
YWxlT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBib29sIHNob3VsZEltYWdlUGFpbnRB
dExvd1F1YWxpdHkoUmVuZGVySW1hZ2UqLCBjb25zdCBJbnRTaXplJik7Ci0KLSAgICBzdGF0aWMg
dm9pZCBpbWFnZURlc3Ryb3llZChSZW5kZXJJbWFnZSogaW1hZ2UpCi0gICAgewotICAgICAgICBp
ZiAoZ0ltYWdlcykgewotICAgICAgICAgICAgUmVuZGVySW1hZ2VTY2FsZURhdGEqIGRhdGEgPSBn
SW1hZ2VzLT50YWtlKGltYWdlKTsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICAg
ICAgaWYgKGdJbWFnZXMtPnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGdJ
bWFnZXM7Ci0gICAgICAgICAgICAgICAgZ0ltYWdlcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGlt
ZXJGaXJlZChSZW5kZXJJbWFnZSogaW1hZ2UpCi0gICAgewotICAgICAgICBSZW5kZXJJbWFnZVNj
YWxlT2JzZXJ2ZXI6OmltYWdlRGVzdHJveWVkKGltYWdlKTsKLSAgICAgICAgaW1hZ2UtPnJlcGFp
bnQoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEhhc2hNYXA8UmVuZGVySW1hZ2UqLCBSZW5k
ZXJJbWFnZVNjYWxlRGF0YSo+KiBnSW1hZ2VzOwotfTsKLQotYm9vbCBSZW5kZXJJbWFnZVNjYWxl
T2JzZXJ2ZXI6OnNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkoUmVuZGVySW1hZ2UqIGltYWdl
LCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIC8vIElmIHRoZSBpbWFnZSBpcyBub3QgYSBi
aXRtYXAgaW1hZ2UsIHRoZW4gbm9uZSBvZiB0aGlzIGlzIHJlbGV2YW50IGFuZCB3ZSBqdXN0IHBh
aW50IGF0IGhpZ2gKLSAgICAvLyBxdWFsaXR5LgotICAgIGlmICghaW1hZ2UtPmltYWdlKCkgfHwg
IWltYWdlLT5pbWFnZSgpLT5pc0JpdG1hcEltYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIE1ha2Ugc3VyZSB0byB1c2UgdGhlIHVuem9vbWVkIGltYWdlIHNpemUsIHNpbmNl
IGlmIGEgZnVsbCBwYWdlIHpvb20gaXMgaW4gZWZmZWN0LCB0aGUgaW1hZ2UKLSAgICAvLyBpcyBh
Y3R1YWxseSBiZWluZyBzY2FsZWQuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoaW1hZ2UtPmltYWdl
KCktPndpZHRoKCksIGltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKSk7Ci0KLSAgICAvLyBMb29rIG91
cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlLgotICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKiBk
YXRhID0gMDsKLSAgICBpZiAoZ0ltYWdlcykKLSAgICAgICAgZGF0YSA9IGdJbWFnZXMtPmdldChp
bWFnZSk7Ci0KLSAgICBpZiAoaW1hZ2VTaXplID09IHNpemUpIHsKLSAgICAgICAgLy8gVGhlcmUg
aXMgbm8gc2NhbGUgaW4gZWZmZWN0LiAgSWYgd2UgaGFkIGEgc2NhbGUgaW4gZWZmZWN0IGJlZm9y
ZSwgd2UgY2FuIGp1c3QgZGVsZXRlIHRoaXMgZGF0YS4KLSAgICAgICAgaWYgKGRhdGEpIHsKLSAg
ICAgICAgICAgIGdJbWFnZXMtPnJlbW92ZShpbWFnZSk7Ci0gICAgICAgICAgICBkZWxldGUgZGF0
YTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhl
cmUgaXMgbm8gbmVlZCB0byBoYXNoIHNjYWxlZCBpbWFnZXMgdGhhdCBhbHdheXMgdXNlIGxvdyBx
dWFsaXR5IG1vZGUgd2hlbiB0aGUgcGFnZSBkZW1hbmRzIGl0LiAgVGhpcyBpcyB0aGUgaUNoYXQg
Y2FzZS4KLSAgICBpZiAoaW1hZ2UtPmRvY3VtZW50KCktPnBhZ2UoKS0+aW5Mb3dRdWFsaXR5SW1h
Z2VJbnRlcnBvbGF0aW9uTW9kZSgpKSB7Ci0gICAgICAgIGRvdWJsZSB0b3RhbFBpeGVscyA9IHN0
YXRpY19jYXN0PGRvdWJsZT4oaW1hZ2UtPmltYWdlKCktPndpZHRoKCkpICogc3RhdGljX2Nhc3Q8
ZG91YmxlPihpbWFnZS0+aW1hZ2UoKS0+aGVpZ2h0KCkpOwotICAgICAgICBpZiAodG90YWxQaXhl
bHMgPiBjSW50ZXJwb2xhdGlvbkN1dG9mZikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCB3ZSB3aWxsIHBhaW50IHRoZSBm
aXJzdCBzY2FsZSBhdCBoaWdoIHF1YWxpdHkgYW5kIHJlY29yZCB0aGUgcGFpbnQgdGltZSBpbiBj
YXNlIGEgc2Vjb25kIHNjYWxlIGhhcHBlbnMKLSAgICAvLyB2ZXJ5IHNvb24uCi0gICAgaWYgKCFk
YXRhKSB7Ci0gICAgICAgIGRhdGEgPSBuZXcgUmVuZGVySW1hZ2VTY2FsZURhdGEoaW1hZ2UsIHNp
emUsIGN1cnJlbnRUaW1lKCksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFnSW1hZ2VzKQotICAgICAg
ICAgICAgZ0ltYWdlcyA9IG5ldyBIYXNoTWFwPFJlbmRlckltYWdlKiwgUmVuZGVySW1hZ2VTY2Fs
ZURhdGEqPjsKLSAgICAgICAgZ0ltYWdlcy0+c2V0KGltYWdlLCBkYXRhKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBzY2FsZWQsIGJ1dCB3ZSBwYWludGVk
IGFscmVhZHkgYXQgdGhpcyBzaXplLCBzbyBqdXN0IGtlZXAgdXNpbmcgd2hhdGV2ZXIgbW9kZSB3
ZSBsYXN0IHBhaW50ZWQgd2l0aC4KLSAgICBpZiAoZGF0YS0+c2l6ZSgpID09IHNpemUpCi0gICAg
ICAgIHJldHVybiBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKLQotICAgIC8vIFdlIGhhdmUg
ZGF0YSBhbmQgb3VyIHNpemUganVzdCBjaGFuZ2VkLiAgSWYgdGhpcyBjaGFuZ2UgaGFwcGVuZWQg
cXVpY2tseSwgZ28gaW50byBsb3cgcXVhbGl0eSBtb2RlIGFuZCB0aGVuIHNldCBhIHJlcGFpbnQK
LSAgICAvLyB0aW1lciB0byBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4gIE90aGVyd2lzZSBp
dCBpcyBvayB0byBqdXN0IHBhaW50IGluIGhpZ2ggcXVhbGl0eSBtb2RlLgotICAgIGRvdWJsZSBu
ZXdUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBkYXRhLT5zZXRVc2VMb3dRdWFsaXR5U2NhbGUo
bmV3VGltZSAtIGRhdGEtPnRpbWUoKSA8IGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7Ci0gICAg
ZGF0YS0+c2V0VGltZShuZXdUaW1lKTsKLSAgICBkYXRhLT5zZXRTaXplKHNpemUpOwotICAgIHJl
dHVybiBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKLX0KLQotSGFzaE1hcDxSZW5kZXJJbWFn
ZSosIFJlbmRlckltYWdlU2NhbGVEYXRhKj4qIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6Z0lt
YWdlcyA9IDA7Ci0KLXZvaWQgUmVuZGVySW1hZ2U6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmly
ZWQoVGltZXI8UmVuZGVySW1hZ2U+KikKLXsKLSAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6
OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQodGhpcyk7Ci19Ci0KIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIFJlbmRlckltYWdlOjpSZW5kZXJJbWFnZShOb2RlKiBub2RlKQpAQCAt
MTk0LDcgKzY4LDYgQEAgUmVuZGVySW1hZ2U6On5SZW5kZXJJbWFnZSgpCiB7CiAgICAgaWYgKG1f
Y2FjaGVkSW1hZ2UpCiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsK
LSAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmltYWdlRGVzdHJveWVkKHRoaXMpOwogfQog
CiB2b2lkIFJlbmRlckltYWdlOjpzZXRDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSogbmV3SW1hZ2Up
CkBAIC00ODcsNyArMzYwLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFw
aGljcwogCiAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbHQgPSAobm9kZSgpICYmIG5vZGUo
KS0+aGFzVGFnTmFtZShpbWdUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihu
b2RlKCkpIDogMDsKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGlt
YWdlRWx0ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3VyY2VP
dmVyOwotICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBSZW5kZXJJbWFnZVNjYWxlT2Jz
ZXJ2ZXI6OnNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkodGhpcywgcmVjdC5zaXplKCkpOwor
ICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0eShj
b250ZXh0LCB0aGlzLT5pbWFnZSgpLCByZWN0LnNpemUoKSk7CiAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKGltYWdlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSksIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58718</attachid>
            <date>2010-06-14 15:56:41 -0700</date>
            <delta_ts>2010-06-17 08:17:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100614185639.patch</filename>
            <type>text/plain</type>
            <size>21206</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDYtMTQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBzbG93IG11bHRpcGxlIGFuaW1hdGVkIHJlc2l6ZSBpc3N1ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjMzCisKKyAgICAg
ICAgVGhlIHRpbWVyLWJhc2VkIHJlc2l6ZSBxdWFsaXR5IGFwcHJvYWNoIGltcGxlbWVudGVkIGlu
CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzM0MjEwIGlzIGEgZ29v
ZCBpZGVhLCBidXQgZG9lc24ndAorICAgICAgICBzY2FsZSB0byBtdWx0aXBsZSBpbWFnZXMgd2l0
aCBhbmltYXRlZCByZXNpemVzLiAgVGhpcyBmaXggdW5pZmllcyBhbGwKKyAgICAgICAgb3V0c3Rh
bmRpbmcgcmVzaXplIHRpbWVycyBpbnRvIGEgc2luZ2xlIHRpbWVyLCBhbmQgcmVtb3ZlcyB0aGUg
InVzZQorICAgICAgICBsYXN0IHF1YWxpdHkiIGNoZWNrICh3aGljaCBkb2Vzbid0IHdvcmsgd2hl
biBpbWFnZXMgYXJlIG92ZXJsYXBwaW5nKS4gCisgICAgICAgIEl0IGFsc28gcmVmYWN0b3JzIHRo
ZSBjb3B5IG9mIHRoaXMgY29kZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81Mzk0OS4KKworICAg
ICAgICBUaGlzIGltcHJvdmVzIFNhZmFyaSBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBJ
RTkgcGxhdGZvcm0gZGVtb3Mgb24gbXkgQzJEIE1hY1BybyAoMTAuNSk6CisgICAgICAgIGh0dHA6
Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9QZXJmb3JtYW5jZS8wMUZseWluZ0ltYWdlcy9E
ZWZhdWx0Lmh0bWwgKDQtPjYwZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvMTBGbGlja3JFeHBsb3Jlci9EZWZhdWx0Lmh0bWwgKDMtPjE2
ZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90ZXN0ZHJpdmUvUGVyZm9ybWFu
Y2UvMTFCcm93c2VyRmxpcC9EZWZhdWx0Lmh0bWwgKDktPjYwZnBzKQorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
UXVhbGl0eUNvbnRyb2xsZXI6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICBVbmlm
eSBhbGwgdGltZXJzIGludG8gYSBzaW5nbGUgdGltZXIsIHJlbmFtZSBSZW5kZXJCb3hNb2RlbFNj
YWxlT2JzZXJ2ZXIKKyAgICAgICAgdG8gSW1hZ2VRdWFsaXR5Q29udHJvbGxlciwgYW5kIHJlbW92
ZSB0aGUgcmVzaXplIHF1YWxpdHkgInN0aWNrbmVzcyIsCisgICAgICAgIHNpbmNlIGl0IGRvZXNu
J3Qgd29yayB3aXRoIG11bHRpcGxlIG91dHN0YW5kaW5nIHJlc2l6ZXMuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpvYmplY3REZXN0cm95ZWQpOgorICAgICAgICBn
SW1hZ2VzIGlzIG5vdyBzX2xhc3RQYWludFRpbWVNYXAuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVF1YWxpdHlDb250cm9sbGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKToKKyAgICAg
ICAgRnVuY3Rpb24gbWFkZSBub24tc3RhdGljOyByZXBhaW50IGFsbCBwZW5kaW5nIHJlc2l6ZXMg
KG5vdCBqdXN0IG9uZSkuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVy
OjpyZXN0YXJ0VGltZXIpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbiB0byByZXN0YXJ0IHRpbWVy
IGF0IDJ4IHRocmVzaG9sZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUXVhbGl0eUNvbnRyb2xs
ZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgVXNlIHNfbGFzdFBhaW50VGlt
ZU1hcCwgbm90IGdJbWFnZXMuICBJbXBsZW1lbnQgbmV3IHRpbWVyIGFsZ29yaXRobS4gCisgICAg
ICAgIFJlbW92ZSByZXNpemUgInN0aWNraW5lc3MiLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgSW1wbGVt
ZW50IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5LCB3aGljaCBwdWxscyBvdXQgInRoaXMiIGFuZCBw
YXNzZXMKKyAgICAgICAgdGhlIGNhbGwgdG8gdGhlIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6flJlbmRlckJveE1vZGVsT2Jq
ZWN0KToKKyAgICAgICAgUmVtb3ZlIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICBFeHBvc2Ugc2hvdWxkUGFpbnRBdExvd1F1YWxp
dHkgYXMgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp+UmVuZGVySW1hZ2UpOgorICAg
ICAgICBObyBuZWVkIHRvIGNhbGwgb2JqZWN0RGVzdHJveWVkKCkgaGVyZSBhbnltb3JlLCBzaW5j
ZSB0aGUKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QgZGVzdHJ1Y3RvciB3aWxsIGRvIHRo
aXMgZm9yIHVzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3Qp
OgorICAgICAgICBSaXAgb3V0IFJlbmRlckltYWdlU2NhbGVPYnNlcnZlciwgYW5kIGNhbGwKKyAg
ICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KCkgaW5z
dGVhZC4KKwogMjAxMC0wNi0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNjExNDgpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQsNiArNCw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
IChrZGVAY2FyZXdvbGYuY29tKQogICogICAgICAgICAgIChDKSAyMDA1LCAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC00OCw3NyArNDksNTAgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6c19sYXllcldhc1NlbAogc3RhdGljIGNvbnN0IGRvdWJsZSBjSW50ZXJwb2xhdGlvbkN1dG9m
ZiA9IDgwMC4gKiA4MDAuOwogc3RhdGljIGNvbnN0IGRvdWJsZSBjTG93UXVhbGl0eVRpbWVUaHJl
c2hvbGQgPSAwLjUwMDsgLy8gNTAwIG1zCiAKLWNsYXNzIFJlbmRlckJveE1vZGVsU2NhbGVEYXRh
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3R5cGVkZWYgSGFzaE1hcDxSZW5kZXJCb3hNb2RlbE9i
amVjdCosIGRvdWJsZT4gTGFzdFBhaW50VGltZU1hcDsKKworY2xhc3MgSW1hZ2VRdWFsaXR5Q29u
dHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyQm94TW9k
ZWxTY2FsZURhdGEoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGRvdWJsZSB0aW1lLCBib29s
IGxvd1F1YWxpdHlTY2FsZSkKLSAgICAgICAgOiBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBtX3Ry
YW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgICAgICwgbV9sYXN0UGFpbnRUaW1lKHRpbWUpCi0gICAg
ICAgICwgbV9sb3dRdWFsaXR5U2NhbGUobG93UXVhbGl0eVNjYWxlKQotICAgICAgICAsIG1faGln
aFF1YWxpdHlSZXBhaW50VGltZXIob2JqZWN0LCAmUmVuZGVyQm94TW9kZWxPYmplY3Q6OmhpZ2hR
dWFsaXR5UmVwYWludFRpbWVyRmlyZWQpCi0gICAgewotICAgIH0KLQotICAgIH5SZW5kZXJCb3hN
b2RlbFNjYWxlRGF0YSgpCi0gICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVy
LnN0b3AoKTsKLSAgICB9Ci0KLSAgICBUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4mIGhpcWhR
dWFsaXR5UmVwYWludFRpbWVyKCkgeyByZXR1cm4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lcjsg
fQotCi0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
ICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzKSB7IG1fc2l6ZSA9IHM7IH0KLSAgICBk
b3VibGUgbGFzdFBhaW50VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBhaW50VGltZTsgfQot
ICAgIHZvaWQgc2V0TGFzdFBhaW50VGltZShkb3VibGUgdCkgeyBtX2xhc3RQYWludFRpbWUgPSB0
OyB9Ci0gICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvd1F1
YWxpdHlTY2FsZTsgfQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQot
ICAgIHZvaWQgc2V0VXNlTG93UXVhbGl0eVNjYWxlKGJvb2wgYikKLSAgICB7Ci0gICAgICAgIG1f
aGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3RvcCgpOwotICAgICAgICBtX2xvd1F1YWxpdHlTY2Fs
ZSA9IGI7Ci0gICAgICAgIGlmIChiKQotICAgICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRU
aW1lci5zdGFydE9uZVNob3QoY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAgICB9CisgICAg
SW1hZ2VRdWFsaXR5Q29udHJvbGxlcigpOworICAgIGJvb2wgc2hvdWxkUGFpbnRBdExvd1F1YWxp
dHkoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqLCBJbWFnZSosIGNvbnN0
IEludFNpemUmKTsKKyAgICB2b2lkIG9iamVjdERlc3Ryb3llZChSZW5kZXJCb3hNb2RlbE9iamVj
dCopOwogCiBwcml2YXRlOgotICAgIEludFNpemUgbV9zaXplOwotICAgIEFmZmluZVRyYW5zZm9y
bSBtX3RyYW5zZm9ybTsKLSAgICBkb3VibGUgbV9sYXN0UGFpbnRUaW1lOwotICAgIGJvb2wgbV9s
b3dRdWFsaXR5U2NhbGU7Ci0gICAgVGltZXI8UmVuZGVyQm94TW9kZWxPYmplY3Q+IG1faGlnaFF1
YWxpdHlSZXBhaW50VGltZXI7Ci19OworICAgIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGltZXJG
aXJlZChUaW1lcjxJbWFnZVF1YWxpdHlDb250cm9sbGVyPiopOworICAgIHZvaWQgcmVzdGFydFRp
bWVyKCk7CiAKLWNsYXNzIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGJvb2wgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRMb3dRdWFsaXR5KEdyYXBoaWNz
Q29udGV4dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiwgSW1hZ2UqLCBjb25zdCBJbnRTaXplJik7
CisgICAgTGFzdFBhaW50VGltZU1hcCBtX2xhc3RQYWludFRpbWVNYXA7CisgICAgVGltZXI8SW1h
Z2VRdWFsaXR5Q29udHJvbGxlcj4gbV90aW1lcjsKK307CiAKLSAgICBzdGF0aWMgdm9pZCBib3hN
b2RlbE9iamVjdERlc3Ryb3llZChSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0KQotICAgIHsK
LSAgICAgICAgaWYgKGdCb3hNb2RlbE9iamVjdHMpIHsKLSAgICAgICAgICAgIFJlbmRlckJveE1v
ZGVsU2NhbGVEYXRhKiBkYXRhID0gZ0JveE1vZGVsT2JqZWN0cy0+dGFrZShvYmplY3QpOwotICAg
ICAgICAgICAgZGVsZXRlIGRhdGE7Ci0gICAgICAgICAgICBpZiAoIWdCb3hNb2RlbE9iamVjdHMt
PnNpemUoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBnQm94TW9kZWxPYmplY3RzOwotICAg
ICAgICAgICAgICAgIGdCb3hNb2RlbE9iamVjdHMgPSAwOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQorSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6SW1hZ2VRdWFsaXR5Q29udHJvbGxl
cigpCisgICAgOiBtX3RpbWVyKHRoaXMsICZJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpoaWdoUXVh
bGl0eVJlcGFpbnRUaW1lckZpcmVkKQoreworfQogCi0gICAgc3RhdGljIHZvaWQgaGlnaFF1YWxp
dHlSZXBhaW50VGltZXJGaXJlZChSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0KQotICAgIHsK
LSAgICAgICAgUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpib3hNb2RlbE9iamVjdERlc3Ry
b3llZChvYmplY3QpOwotICAgICAgICBvYmplY3QtPnJlcGFpbnQoKTsKLSAgICB9Cit2b2lkIElt
YWdlUXVhbGl0eUNvbnRyb2xsZXI6Om9iamVjdERlc3Ryb3llZChSZW5kZXJCb3hNb2RlbE9iamVj
dCogb2JqZWN0KQoreworICAgIG1fbGFzdFBhaW50VGltZU1hcC5yZW1vdmUob2JqZWN0KTsKKyAg
ICBpZiAobV9sYXN0UGFpbnRUaW1lTWFwLmlzRW1wdHkoKSkKKyAgICAgICAgbV90aW1lci5zdG9w
KCk7Cit9CisgICAgCit2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVw
YWludFRpbWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5Q29udHJvbGxlcj4qKQoreworICAgIGZv
ciAoTGFzdFBhaW50VGltZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2xhc3RQYWludFRpbWVNYXAuYmVn
aW4oKTsgaXQgIT0gbV9sYXN0UGFpbnRUaW1lTWFwLmVuZCgpOyArK2l0KQorICAgICAgICBpdC0+
Zmlyc3QtPnJlcGFpbnQoKTsKK30KIAotICAgIHN0YXRpYyBIYXNoTWFwPFJlbmRlckJveE1vZGVs
T2JqZWN0KiwgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEqPiogZ0JveE1vZGVsT2JqZWN0czsKLX07
Cit2b2lkIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnJlc3RhcnRUaW1lcigpCit7CisgICAgbV90
aW1lci5zdGFydE9uZVNob3QoY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkICogMi4wKTsKK30KIAot
Ym9vbCBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZFBhaW50QmFja2dyb3VuZEF0
TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBvYmplY3QsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK2Jvb2wgSW1hZ2VR
dWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0LCBJbWFnZSogaW1hZ2UsIGNv
bnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgLy8gSWYgdGhlIGltYWdlIGlzIG5vdCBhIGJpdG1h
cCBpbWFnZSwgdGhlbiBub25lIG9mIHRoaXMgaXMgcmVsZXZhbnQgYW5kIHdlIGp1c3QgcGFpbnQg
YXQgaGlnaAogICAgIC8vIHF1YWxpdHkuCi0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0
bWFwSW1hZ2UoKSkKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpIHx8
IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gTWFrZSBzdXJlIHRvIHVzZSB0aGUgdW56b29tZWQgaW1hZ2Ugc2l6ZSwgc2luY2UgaWYg
YSBmdWxsIHBhZ2Ugem9vbSBpcyBpbiBlZmZlY3QsIHRoZSBpbWFnZQpAQCAtMTI2LDU5ICsxMDAs
NDUgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZAogICAgIEludFNp
emUgaW1hZ2VTaXplKGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwogCiAgICAgLy8g
TG9vayBvdXJzZWx2ZXMgdXAgaW4gdGhlIGhhc2h0YWJsZS4KLSAgICBSZW5kZXJCb3hNb2RlbFNj
YWxlRGF0YSogZGF0YSA9IDA7Ci0gICAgaWYgKGdCb3hNb2RlbE9iamVjdHMpCi0gICAgICAgIGRh
dGEgPSBnQm94TW9kZWxPYmplY3RzLT5nZXQob2JqZWN0KTsKKyAgICBMYXN0UGFpbnRUaW1lTWFw
OjppdGVyYXRvciBpID0gbV9sYXN0UGFpbnRUaW1lTWFwLmZpbmQob2JqZWN0KTsKIAogICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY3VycmVudFRyYW5zZm9ybSA9IGNvbnRleHQtPmdldENUTSgp
OwogICAgIGJvb2wgY29udGV4dElzU2NhbGVkID0gIWN1cnJlbnRUcmFuc2Zvcm0uaXNJZGVudGl0
eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKTsKICAgICBpZiAoIWNvbnRleHRJc1NjYWxlZCAmJiBp
bWFnZVNpemUgPT0gc2l6ZSkgewotICAgICAgICAvLyBUaGVyZSBpcyBubyBzY2FsZSBpbiBlZmZl
Y3QuICBJZiB3ZSBoYWQgYSBzY2FsZSBpbiBlZmZlY3QgYmVmb3JlLCB3ZSBjYW4ganVzdCBkZWxl
dGUgdGhpcyBkYXRhLgotICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgZ0JveE1vZGVs
T2JqZWN0cy0+cmVtb3ZlKG9iamVjdCk7Ci0gICAgICAgICAgICBkZWxldGUgZGF0YTsKLSAgICAg
ICAgfQorICAgICAgICAvLyBUaGVyZSBpcyBubyBzY2FsZSBpbiBlZmZlY3QuIElmIHdlIGhhZCBh
IHNjYWxlIGluIGVmZmVjdCBiZWZvcmUsIHdlIGNhbiBqdXN0IHJlbW92ZSB0aGlzIG9iamVjdCBm
cm9tIHRoZSBsaXN0LgorICAgICAgICBpZiAoaSAhPSBtX2xhc3RQYWludFRpbWVNYXAuZW5kKCkp
CisgICAgICAgICAgICBtX2xhc3RQYWludFRpbWVNYXAucmVtb3ZlKG9iamVjdCk7CisKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gaGFz
aCBzY2FsZWQgaW1hZ2VzIHRoYXQgYWx3YXlzIHVzZSBsb3cgcXVhbGl0eSBtb2RlIHdoZW4gdGhl
IHBhZ2UgZGVtYW5kcyBpdC4gIFRoaXMgaXMgdGhlIGlDaGF0IGNhc2UuCisgICAgLy8gVGhlcmUg
aXMgbm8gbmVlZCB0byBoYXNoIHNjYWxlZCBpbWFnZXMgdGhhdCBhbHdheXMgdXNlIGxvdyBxdWFs
aXR5IG1vZGUgd2hlbiB0aGUgcGFnZSBkZW1hbmRzIGl0LiBUaGlzIGlzIHRoZSBpQ2hhdCBjYXNl
LgogICAgIGlmIChvYmplY3QtPmRvY3VtZW50KCktPnBhZ2UoKS0+aW5Mb3dRdWFsaXR5SW1hZ2VJ
bnRlcnBvbGF0aW9uTW9kZSgpKSB7CiAgICAgICAgIGRvdWJsZSB0b3RhbFBpeGVscyA9IHN0YXRp
Y19jYXN0PGRvdWJsZT4oaW1hZ2UtPndpZHRoKCkpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFn
ZS0+aGVpZ2h0KCkpOwogICAgICAgICBpZiAodG90YWxQaXhlbHMgPiBjSW50ZXJwb2xhdGlvbkN1
dG9mZikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQotICAgIC8vIElmIHRoZXJl
IGlzIG5vIGRhdGEgeWV0LCB3ZSB3aWxsIHBhaW50IHRoZSBmaXJzdCBzY2FsZSBhdCBoaWdoIHF1
YWxpdHkgYW5kIHJlY29yZCB0aGUgcGFpbnQgdGltZSBpbiBjYXNlIGEgc2Vjb25kIHNjYWxlIGhh
cHBlbnMKLSAgICAvLyB2ZXJ5IHNvb24uCi0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGRhdGEg
PSBuZXcgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEob2JqZWN0LCBzaXplLCBjdXJyZW50VHJhbnNm
b3JtLCBjdXJyZW50VGltZSgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZ0JveE1vZGVsT2JqZWN0
cykKLSAgICAgICAgICAgIGdCb3hNb2RlbE9iamVjdHMgPSBuZXcgSGFzaE1hcDxSZW5kZXJCb3hN
b2RlbE9iamVjdCosIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKj47Ci0gICAgICAgIGdCb3hNb2Rl
bE9iamVjdHMtPnNldChvYmplY3QsIGRhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ciA9IGRhdGEtPnRyYW5zZm9ybSgpOwot
ICAgIGJvb2wgc2NhbGVVbmNoYW5nZWQgPSB0ci5hKCkgPT0gY3VycmVudFRyYW5zZm9ybS5hKCkg
JiYgdHIuYigpID09IGN1cnJlbnRUcmFuc2Zvcm0uYigpICYmIHRyLmMoKSA9PSBjdXJyZW50VHJh
bnNmb3JtLmMoKSAmJiB0ci5kKCkgPT0gY3VycmVudFRyYW5zZm9ybS5kKCk7Ci0gICAgLy8gV2Ug
YXJlIHNjYWxlZCwgYnV0IHdlIHBhaW50ZWQgYWxyZWFkeSBhdCB0aGlzIHNpemUsIHNvIGp1c3Qg
a2VlcCB1c2luZyB3aGF0ZXZlciBtb2RlIHdlIGxhc3QgcGFpbnRlZCB3aXRoLgotICAgIGlmICgo
IWNvbnRleHRJc1NjYWxlZCB8fCBzY2FsZVVuY2hhbmdlZCkgJiYgZGF0YS0+c2l6ZSgpID09IHNp
emUpCi0gICAgICAgIHJldHVybiBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKLQotICAgIC8v
IFdlIGhhdmUgZGF0YSBhbmQgb3VyIHNpemUganVzdCBjaGFuZ2VkLiAgSWYgdGhpcyBjaGFuZ2Ug
aGFwcGVuZWQgcXVpY2tseSwgZ28gaW50byBsb3cgcXVhbGl0eSBtb2RlIGFuZCB0aGVuIHNldCBh
IHJlcGFpbnQKLSAgICAvLyB0aW1lciB0byBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4gIE90
aGVyd2lzZSBpdCBpcyBvayB0byBqdXN0IHBhaW50IGluIGhpZ2ggcXVhbGl0eSBtb2RlLgogICAg
IGRvdWJsZSBuZXdUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBkYXRhLT5zZXRVc2VMb3dRdWFs
aXR5U2NhbGUobmV3VGltZSAtIGRhdGEtPmxhc3RQYWludFRpbWUoKSA8IGNMb3dRdWFsaXR5VGlt
ZVRocmVzaG9sZCk7Ci0gICAgZGF0YS0+c2V0TGFzdFBhaW50VGltZShuZXdUaW1lKTsKLSAgICBk
YXRhLT5zZXRUcmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0gICAgZGF0YS0+c2V0U2l6ZShz
aXplKTsKLSAgICByZXR1cm4gZGF0YS0+dXNlTG93UXVhbGl0eVNjYWxlKCk7CisgICAgaWYgKGkg
IT0gbV9sYXN0UGFpbnRUaW1lTWFwLmVuZCgpKSB7CisgICAgICAgIGRvdWJsZSB0aW1lID0gaS0+
c2Vjb25kOworICAgICAgICBpZiAobmV3VGltZSAtIHRpbWUgPj0gY0xvd1F1YWxpdHlUaW1lVGhy
ZXNob2xkKSB7CisgICAgICAgICAgICAvLyBJZiBpdCBoYXMgYmVlbiBhdCBsZWFzdCBjTG93UXVh
bGl0eVRpbWVUaHJlc2hvbGQgc2Vjb25kcyBzaW5jZSB0aGUKKyAgICAgICAgICAgIC8vIGxhc3Qg
dGltZSBhIHJlc2l6ZSB3YXMgcmVxdWVzdGVkLCBkcmF3IGF0IGhpZ2ggcXVhbGl0eSBhbmQgZG9u
J3Qgc2V0CisgICAgICAgICAgICAvLyB0aGUgdGltZXIuCisgICAgICAgICAgICBvYmplY3REZXN0
cm95ZWQob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvLyBEcmF3IGF0IGxvdyBxdWFsaXR5IGZpcnN0IGFuZCBzZXQgYSB0aW1lciBmb3Ig
aGlnaCBxdWFsaXR5LgorICAgIG1fbGFzdFBhaW50VGltZU1hcC5zZXQob2JqZWN0LCBuZXdUaW1l
KTsKKyAgICByZXN0YXJ0VGltZXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSGFzaE1hcDxS
ZW5kZXJCb3hNb2RlbE9iamVjdCosIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKj4qIFJlbmRlckJv
eE1vZGVsU2NhbGVPYnNlcnZlcjo6Z0JveE1vZGVsT2JqZWN0cyA9IDA7Ci0KLXZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+KikKK3N0YXRpYyBJbWFnZVF1YWxpdHlDb250cm9sbGVyKiBpbWFnZVF1
YWxpdHlDb250cm9sbGVyKCkKIHsKLSAgICBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXI6Omhp
Z2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQodGhpcyk7CisgICAgc3RhdGljIEltYWdlUXVhbGl0
eUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBuZXcgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjsKKyAg
ICByZXR1cm4gY29udHJvbGxlcjsKIH0KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0
U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgcykKQEAgLTIwMyw2ICsxNjMsMTAgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uUwogICAgICAgICBjYi0+c2V0U2Vs
ZWN0aW9uU3RhdGUocyk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNob3VsZFBh
aW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSW1hZ2UqIGltYWdlLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBpbWFnZVF1YWxpdHlDb250cm9sbGVy
KCktPnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIHRoaXMsIGltYWdlLCBzaXplKTsK
K30KIAogUmVuZGVyQm94TW9kZWxPYmplY3Q6OlJlbmRlckJveE1vZGVsT2JqZWN0KE5vZGUqIG5v
ZGUpCiAgICAgOiBSZW5kZXJPYmplY3Qobm9kZSkKQEAgLTIxNSw3ICsxNzksNyBAQCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6flJlbmRlckJveE1vZGVsT2JqCiAgICAgLy8gT3VyIGxheWVyIHNob3Vs
ZCBoYXZlIGJlZW4gZGVzdHJveWVkIGFuZCBjbGVhcmVkIGJ5IG5vdwogICAgIEFTU0VSVCghaGFz
TGF5ZXIoKSk7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsKLSAgICBSZW5kZXJCb3hNb2RlbFNjYWxl
T2JzZXJ2ZXI6OmJveE1vZGVsT2JqZWN0RGVzdHJveWVkKHRoaXMpOworICAgIGltYWdlUXVhbGl0
eUNvbnRyb2xsZXIoKS0+b2JqZWN0RGVzdHJveWVkKHRoaXMpOwogfQogCiB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpkZXN0cm95TGF5ZXIoKQpAQCAtNDY0LDcgKzQyOCw2IEBAIGludCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFkZGluZ1JpZ2h0KGIKICAgICByZXR1cm4gcGFkZGluZy5jYWxj
TWluVmFsdWUodyk7CiB9CiAKLQogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxs
TGF5ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGMs
IGNvbnN0IEZpbGxMYXllciogYmdMYXllciwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwg
SW5saW5lRmxvd0JveCogYm94LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgUmVuZGVyT2JqZWN0KiBi
YWNrZ3JvdW5kT2JqZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50
SW5mby5jb250ZXh0OwpAQCAtNjMxLDcgKzU5NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50RmlsbExheWUKICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wID0gb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IGJnTGF5ZXItPmNvbXBvc2l0ZSgpIDog
b3A7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudEZvckJhY2tncm91bmRJbWFnZSA9
IGJhY2tncm91bmRPYmplY3QgPyBiYWNrZ3JvdW5kT2JqZWN0IDogdGhpczsKICAgICAgICAgICAg
IEltYWdlKiBpbWFnZSA9IGJnLT5pbWFnZShjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2UsIHRpbGVT
aXplKTsKLSAgICAgICAgICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBSZW5kZXJCb3hN
b2RlbFNjYWxlT2JzZXJ2ZXI6OnNob3VsZFBhaW50QmFja2dyb3VuZEF0TG93UXVhbGl0eShjb250
ZXh0LCB0aGlzLCBpbWFnZSwgdGlsZVNpemUpOworICAgICAgICAgICAgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCB0aWxl
U2l6ZSk7CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgc3R5bGUo
KS0+Y29sb3JTcGFjZSgpLCBkZXN0UmVjdCwgcGhhc2UsIHRpbGVTaXplLCBjb21wb3NpdGVPcCwg
dXNlTG93UXVhbGl0eVNjYWxpbmcpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA2MTE0OCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA3LDYgKzEwOCw4IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2b2lkIGNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdl
b21ldHJ5KGNvbnN0IEZpbGxMYXllciosIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsIElu
dFJlY3QmIGRlc3RSZWN0LCBJbnRQb2ludCYgcGhhc2UsIEludFNpemUmIHRpbGVTaXplKTsKIAor
ICAgIGJvb2wgc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiwgSW1hZ2Uq
LCBjb25zdCBJbnRTaXplJik7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzQm94TW9k
ZWxPYmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHAJKHJldmlzaW9uIDYxMTQ4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsNyBAQAogICogICAgICAgICAgIChD
KSAyMDA2IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqICAgICAg
ICAgICAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsMTMz
ICs1Myw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGNvbnN0IGRvdWJsZSBjSW50ZXJwb2xhdGlvbkN1dG9mZiA9IDgwMC4gKiA4MDAuOwot
c3RhdGljIGNvbnN0IGRvdWJsZSBjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQgPSAwLjA1MDsgLy8g
NTAgbXMKLQotY2xhc3MgUmVuZGVySW1hZ2VTY2FsZURhdGEgOiBwdWJsaWMgTm9uY29weWFibGUg
ewotcHVibGljOgotICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKFJlbmRlckltYWdlKiBpbWFnZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgZG91YmxlIHRpbWUsIGJvb2wgbG93UXVhbGl0eVNjYWxlKQot
ICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgICAgICAsIG1fdGltZSh0aW1lKQotICAgICAgICAs
IG1fbG93UXVhbGl0eVNjYWxlKGxvd1F1YWxpdHlTY2FsZSkKLSAgICAgICAgLCBtX2hpZ2hRdWFs
aXR5UmVwYWludFRpbWVyKGltYWdlLCAmUmVuZGVySW1hZ2U6OmhpZ2hRdWFsaXR5UmVwYWludFRp
bWVyRmlyZWQpCi0gICAgewotICAgIH0KLQotICAgIH5SZW5kZXJJbWFnZVNjYWxlRGF0YSgpCi0g
ICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0b3AoKTsKLSAgICB9Ci0g
ICAgCi0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
ICAgIGRvdWJsZSB0aW1lKCkgY29uc3QgeyByZXR1cm4gbV90aW1lOyB9Ci0gICAgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvd1F1YWxpdHlTY2FsZTsgfQotICAg
IFRpbWVyPFJlbmRlckltYWdlPiYgaGlxaFF1YWxpdHlSZXBhaW50VGltZXIoKSB7IHJldHVybiBt
X2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyOyB9Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50
U2l6ZSYgcykgeyBtX3NpemUgPSBzOyB9Ci0gICAgdm9pZCBzZXRUaW1lKGRvdWJsZSB0KSB7IG1f
dGltZSA9IHQ7IH0KLSAgICB2b2lkIHNldFVzZUxvd1F1YWxpdHlTY2FsZShib29sIGIpCi0gICAg
ewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyLnN0b3AoKTsKLSAgICAgICAgbV9s
b3dRdWFsaXR5U2NhbGUgPSBiOwotICAgICAgICBpZiAoYikKLSAgICAgICAgICAgIG1faGlnaFF1
YWxpdHlSZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7
Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBkb3VibGUg
bV90aW1lOwotICAgIGJvb2wgbV9sb3dRdWFsaXR5U2NhbGU7Ci0gICAgVGltZXI8UmVuZGVySW1h
Z2U+IG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXI7Ci19OwotCi1jbGFzcyBSZW5kZXJJbWFnZVNj
YWxlT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBib29sIHNob3VsZEltYWdlUGFpbnRB
dExvd1F1YWxpdHkoUmVuZGVySW1hZ2UqLCBjb25zdCBJbnRTaXplJik7Ci0KLSAgICBzdGF0aWMg
dm9pZCBpbWFnZURlc3Ryb3llZChSZW5kZXJJbWFnZSogaW1hZ2UpCi0gICAgewotICAgICAgICBp
ZiAoZ0ltYWdlcykgewotICAgICAgICAgICAgUmVuZGVySW1hZ2VTY2FsZURhdGEqIGRhdGEgPSBn
SW1hZ2VzLT50YWtlKGltYWdlKTsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICAg
ICAgaWYgKGdJbWFnZXMtPnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGdJ
bWFnZXM7Ci0gICAgICAgICAgICAgICAgZ0ltYWdlcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgaGlnaFF1YWxpdHlSZXBhaW50VGlt
ZXJGaXJlZChSZW5kZXJJbWFnZSogaW1hZ2UpCi0gICAgewotICAgICAgICBSZW5kZXJJbWFnZVNj
YWxlT2JzZXJ2ZXI6OmltYWdlRGVzdHJveWVkKGltYWdlKTsKLSAgICAgICAgaW1hZ2UtPnJlcGFp
bnQoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEhhc2hNYXA8UmVuZGVySW1hZ2UqLCBSZW5k
ZXJJbWFnZVNjYWxlRGF0YSo+KiBnSW1hZ2VzOwotfTsKLQotYm9vbCBSZW5kZXJJbWFnZVNjYWxl
T2JzZXJ2ZXI6OnNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkoUmVuZGVySW1hZ2UqIGltYWdl
LCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIC8vIElmIHRoZSBpbWFnZSBpcyBub3QgYSBi
aXRtYXAgaW1hZ2UsIHRoZW4gbm9uZSBvZiB0aGlzIGlzIHJlbGV2YW50IGFuZCB3ZSBqdXN0IHBh
aW50IGF0IGhpZ2gKLSAgICAvLyBxdWFsaXR5LgotICAgIGlmICghaW1hZ2UtPmltYWdlKCkgfHwg
IWltYWdlLT5pbWFnZSgpLT5pc0JpdG1hcEltYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIE1ha2Ugc3VyZSB0byB1c2UgdGhlIHVuem9vbWVkIGltYWdlIHNpemUsIHNpbmNl
IGlmIGEgZnVsbCBwYWdlIHpvb20gaXMgaW4gZWZmZWN0LCB0aGUgaW1hZ2UKLSAgICAvLyBpcyBh
Y3R1YWxseSBiZWluZyBzY2FsZWQuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoaW1hZ2UtPmltYWdl
KCktPndpZHRoKCksIGltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKSk7Ci0KLSAgICAvLyBMb29rIG91
cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlLgotICAgIFJlbmRlckltYWdlU2NhbGVEYXRhKiBk
YXRhID0gMDsKLSAgICBpZiAoZ0ltYWdlcykKLSAgICAgICAgZGF0YSA9IGdJbWFnZXMtPmdldChp
bWFnZSk7Ci0KLSAgICBpZiAoaW1hZ2VTaXplID09IHNpemUpIHsKLSAgICAgICAgLy8gVGhlcmUg
aXMgbm8gc2NhbGUgaW4gZWZmZWN0LiAgSWYgd2UgaGFkIGEgc2NhbGUgaW4gZWZmZWN0IGJlZm9y
ZSwgd2UgY2FuIGp1c3QgZGVsZXRlIHRoaXMgZGF0YS4KLSAgICAgICAgaWYgKGRhdGEpIHsKLSAg
ICAgICAgICAgIGdJbWFnZXMtPnJlbW92ZShpbWFnZSk7Ci0gICAgICAgICAgICBkZWxldGUgZGF0
YTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhl
cmUgaXMgbm8gbmVlZCB0byBoYXNoIHNjYWxlZCBpbWFnZXMgdGhhdCBhbHdheXMgdXNlIGxvdyBx
dWFsaXR5IG1vZGUgd2hlbiB0aGUgcGFnZSBkZW1hbmRzIGl0LiAgVGhpcyBpcyB0aGUgaUNoYXQg
Y2FzZS4KLSAgICBpZiAoaW1hZ2UtPmRvY3VtZW50KCktPnBhZ2UoKS0+aW5Mb3dRdWFsaXR5SW1h
Z2VJbnRlcnBvbGF0aW9uTW9kZSgpKSB7Ci0gICAgICAgIGRvdWJsZSB0b3RhbFBpeGVscyA9IHN0
YXRpY19jYXN0PGRvdWJsZT4oaW1hZ2UtPmltYWdlKCktPndpZHRoKCkpICogc3RhdGljX2Nhc3Q8
ZG91YmxlPihpbWFnZS0+aW1hZ2UoKS0+aGVpZ2h0KCkpOwotICAgICAgICBpZiAodG90YWxQaXhl
bHMgPiBjSW50ZXJwb2xhdGlvbkN1dG9mZikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCB3ZSB3aWxsIHBhaW50IHRoZSBm
aXJzdCBzY2FsZSBhdCBoaWdoIHF1YWxpdHkgYW5kIHJlY29yZCB0aGUgcGFpbnQgdGltZSBpbiBj
YXNlIGEgc2Vjb25kIHNjYWxlIGhhcHBlbnMKLSAgICAvLyB2ZXJ5IHNvb24uCi0gICAgaWYgKCFk
YXRhKSB7Ci0gICAgICAgIGRhdGEgPSBuZXcgUmVuZGVySW1hZ2VTY2FsZURhdGEoaW1hZ2UsIHNp
emUsIGN1cnJlbnRUaW1lKCksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFnSW1hZ2VzKQotICAgICAg
ICAgICAgZ0ltYWdlcyA9IG5ldyBIYXNoTWFwPFJlbmRlckltYWdlKiwgUmVuZGVySW1hZ2VTY2Fs
ZURhdGEqPjsKLSAgICAgICAgZ0ltYWdlcy0+c2V0KGltYWdlLCBkYXRhKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBzY2FsZWQsIGJ1dCB3ZSBwYWludGVk
IGFscmVhZHkgYXQgdGhpcyBzaXplLCBzbyBqdXN0IGtlZXAgdXNpbmcgd2hhdGV2ZXIgbW9kZSB3
ZSBsYXN0IHBhaW50ZWQgd2l0aC4KLSAgICBpZiAoZGF0YS0+c2l6ZSgpID09IHNpemUpCi0gICAg
ICAgIHJldHVybiBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKLQotICAgIC8vIFdlIGhhdmUg
ZGF0YSBhbmQgb3VyIHNpemUganVzdCBjaGFuZ2VkLiAgSWYgdGhpcyBjaGFuZ2UgaGFwcGVuZWQg
cXVpY2tseSwgZ28gaW50byBsb3cgcXVhbGl0eSBtb2RlIGFuZCB0aGVuIHNldCBhIHJlcGFpbnQK
LSAgICAvLyB0aW1lciB0byBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4gIE90aGVyd2lzZSBp
dCBpcyBvayB0byBqdXN0IHBhaW50IGluIGhpZ2ggcXVhbGl0eSBtb2RlLgotICAgIGRvdWJsZSBu
ZXdUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBkYXRhLT5zZXRVc2VMb3dRdWFsaXR5U2NhbGUo
bmV3VGltZSAtIGRhdGEtPnRpbWUoKSA8IGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7Ci0gICAg
ZGF0YS0+c2V0VGltZShuZXdUaW1lKTsKLSAgICBkYXRhLT5zZXRTaXplKHNpemUpOwotICAgIHJl
dHVybiBkYXRhLT51c2VMb3dRdWFsaXR5U2NhbGUoKTsKLX0KLQotSGFzaE1hcDxSZW5kZXJJbWFn
ZSosIFJlbmRlckltYWdlU2NhbGVEYXRhKj4qIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6Z0lt
YWdlcyA9IDA7Ci0KLXZvaWQgUmVuZGVySW1hZ2U6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmly
ZWQoVGltZXI8UmVuZGVySW1hZ2U+KikKLXsKLSAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6
OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQodGhpcyk7Ci19Ci0KIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIFJlbmRlckltYWdlOjpSZW5kZXJJbWFnZShOb2RlKiBub2RlKQpAQCAt
MTk0LDcgKzY4LDYgQEAgUmVuZGVySW1hZ2U6On5SZW5kZXJJbWFnZSgpCiB7CiAgICAgaWYgKG1f
Y2FjaGVkSW1hZ2UpCiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsK
LSAgICBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmltYWdlRGVzdHJveWVkKHRoaXMpOwogfQog
CiB2b2lkIFJlbmRlckltYWdlOjpzZXRDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSogbmV3SW1hZ2Up
CkBAIC00ODcsNyArMzYwLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFw
aGljcwogCiAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbHQgPSAobm9kZSgpICYmIG5vZGUo
KS0+aGFzVGFnTmFtZShpbWdUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihu
b2RlKCkpIDogMDsKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGlt
YWdlRWx0ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3VyY2VP
dmVyOwotICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBSZW5kZXJJbWFnZVNjYWxlT2Jz
ZXJ2ZXI6OnNob3VsZEltYWdlUGFpbnRBdExvd1F1YWxpdHkodGhpcywgcmVjdC5zaXplKCkpOwor
ICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0eShj
b250ZXh0LCB0aGlzLT5pbWFnZSgpLCByZWN0LnNpemUoKSk7CiAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKGltYWdlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSksIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58996</attachid>
            <date>2010-06-17 08:17:33 -0700</date>
            <delta_ts>2010-06-17 11:25:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100617111731.patch</filename>
            <type>text/plain</type>
            <size>21193</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTMyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDYtMTQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBzbG93IG11bHRpcGxlIGFuaW1hdGVkIHJlc2l6ZSBpc3N1ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjMzCisKKyAgICAg
ICAgVGhlIHRpbWVyLWJhc2VkIHJlc2l6ZSBxdWFsaXR5IGFwcHJvYWNoIGltcGxlbWVudGVkIGlu
CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzM0MjEwIGlzIGEgZ29v
ZCBpZGVhLCBidXQgZG9lc24ndAorICAgICAgICBzY2FsZSB0byBtdWx0aXBsZSBpbWFnZXMgd2l0
aCBhbmltYXRlZCByZXNpemVzLiAgVGhpcyBmaXggdW5pZmllcyBhbGwKKyAgICAgICAgb3V0c3Rh
bmRpbmcgcmVzaXplIHRpbWVycyBpbnRvIGEgc2luZ2xlIHRpbWVyLCBhbmQgcmVtb3ZlcyB0aGUg
InVzZQorICAgICAgICBsYXN0IHF1YWxpdHkiIGNoZWNrICh3aGljaCBkb2Vzbid0IHdvcmsgd2hl
biBpbWFnZXMgYXJlIG92ZXJsYXBwaW5nKS4gCisgICAgICAgIEl0IGFsc28gcmVmYWN0b3JzIHRo
ZSBjb3B5IG9mIHRoaXMgY29kZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81Mzk0OS4KKworICAg
ICAgICBUaGlzIGltcHJvdmVzIFNhZmFyaSBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBJ
RTkgcGxhdGZvcm0gZGVtb3Mgb24gbXkgQzJEIE1hY1BybyAoMTAuNSk6CisgICAgICAgIGh0dHA6
Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9QZXJmb3JtYW5jZS8wMUZseWluZ0ltYWdlcy9E
ZWZhdWx0Lmh0bWwgKDQtPjYwZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvMTBGbGlja3JFeHBsb3Jlci9EZWZhdWx0Lmh0bWwgKDMtPjE2
ZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90ZXN0ZHJpdmUvUGVyZm9ybWFu
Y2UvMTFCcm93c2VyRmxpcC9EZWZhdWx0Lmh0bWwgKDktPjYwZnBzKQorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
UXVhbGl0eUNvbnRyb2xsZXI6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICBVbmlm
eSBhbGwgdGltZXJzIGludG8gYSBzaW5nbGUgdGltZXIsIHJlbmFtZSBSZW5kZXJCb3hNb2RlbFNj
YWxlT2JzZXJ2ZXIKKyAgICAgICAgdG8gSW1hZ2VRdWFsaXR5Q29udHJvbGxlciwgYW5kIHJlbW92
ZSB0aGUgcmVzaXplIHF1YWxpdHkgInN0aWNrbmVzcyIsCisgICAgICAgIHNpbmNlIGl0IGRvZXNu
J3Qgd29yayB3aXRoIG11bHRpcGxlIG91dHN0YW5kaW5nIHJlc2l6ZXMuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpvYmplY3REZXN0cm95ZWQpOgorICAgICAgICBn
SW1hZ2VzIGlzIG5vdyBzX2xhc3RQYWludFRpbWVNYXAuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVF1YWxpdHlDb250cm9sbGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKToKKyAgICAg
ICAgRnVuY3Rpb24gbWFkZSBub24tc3RhdGljOyByZXBhaW50IGFsbCBwZW5kaW5nIHJlc2l6ZXMg
KG5vdCBqdXN0IG9uZSkuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVy
OjpyZXN0YXJ0VGltZXIpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbiB0byByZXN0YXJ0IHRpbWVy
IGF0IDJ4IHRocmVzaG9sZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUXVhbGl0eUNvbnRyb2xs
ZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgVXNlIHNfbGFzdFBhaW50VGlt
ZU1hcCwgbm90IGdJbWFnZXMuICBJbXBsZW1lbnQgbmV3IHRpbWVyIGFsZ29yaXRobS4gCisgICAg
ICAgIFJlbW92ZSByZXNpemUgInN0aWNraW5lc3MiLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgSW1wbGVt
ZW50IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5LCB3aGljaCBwdWxscyBvdXQgInRoaXMiIGFuZCBw
YXNzZXMKKyAgICAgICAgdGhlIGNhbGwgdG8gdGhlIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6flJlbmRlckJveE1vZGVsT2Jq
ZWN0KToKKyAgICAgICAgUmVtb3ZlIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICBFeHBvc2Ugc2hvdWxkUGFpbnRBdExvd1F1YWxp
dHkgYXMgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp+UmVuZGVySW1hZ2UpOgorICAg
ICAgICBObyBuZWVkIHRvIGNhbGwgb2JqZWN0RGVzdHJveWVkKCkgaGVyZSBhbnltb3JlLCBzaW5j
ZSB0aGUKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QgZGVzdHJ1Y3RvciB3aWxsIGRvIHRo
aXMgZm9yIHVzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3Qp
OgorICAgICAgICBSaXAgb3V0IFJlbmRlckltYWdlU2NhbGVPYnNlcnZlciwgYW5kIGNhbGwKKyAg
ICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KCkgaW5z
dGVhZC4KKwogMjAxMC0wNi0xNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDYxMzI0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQs
NyBAQAogICogICAgICAgICAgIChDKSAyMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNh
cmV3b2xmLmNvbSkKICAqICAgICAgICAgICAoQykgMjAwNSwgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNDgsNzcgKzQ5LDUwIEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNfbGF5
ZXJXYXNTZWwKIHN0YXRpYyBjb25zdCBkb3VibGUgY0ludGVycG9sYXRpb25DdXRvZmYgPSA4MDAu
ICogODAwLjsKIHN0YXRpYyBjb25zdCBkb3VibGUgY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkID0g
MC41MDA7IC8vIDUwMCBtcwogCi1jbGFzcyBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7Cit0eXBlZGVmIEhhc2hNYXA8UmVuZGVyQm94TW9kZWxPYmplY3QqLCBk
b3VibGU+IExhc3RQYWludFRpbWVNYXA7CisKK2NsYXNzIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIg
OiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIFJlbmRlckJveE1vZGVsU2NhbGVE
YXRhKFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBkb3VibGUgdGltZSwgYm9vbCBsb3dRdWFs
aXR5U2NhbGUpCi0gICAgICAgIDogbV9zaXplKHNpemUpCi0gICAgICAgICwgbV90cmFuc2Zvcm0o
dHJhbnNmb3JtKQotICAgICAgICAsIG1fbGFzdFBhaW50VGltZSh0aW1lKQotICAgICAgICAsIG1f
bG93UXVhbGl0eVNjYWxlKGxvd1F1YWxpdHlTY2FsZSkKLSAgICAgICAgLCBtX2hpZ2hRdWFsaXR5
UmVwYWludFRpbWVyKG9iamVjdCwgJlJlbmRlckJveE1vZGVsT2JqZWN0OjpoaWdoUXVhbGl0eVJl
cGFpbnRUaW1lckZpcmVkKQotICAgIHsKLSAgICB9Ci0KLSAgICB+UmVuZGVyQm94TW9kZWxTY2Fs
ZURhdGEoKQotICAgIHsKLSAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdG9wKCk7
Ci0gICAgfQotCi0gICAgVGltZXI8UmVuZGVyQm94TW9kZWxPYmplY3Q+JiBoaXFoUXVhbGl0eVJl
cGFpbnRUaW1lcigpIHsgcmV0dXJuIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXI7IH0KLQotICAg
IGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICB2b2lk
IHNldFNpemUoY29uc3QgSW50U2l6ZSYgcykgeyBtX3NpemUgPSBzOyB9Ci0gICAgZG91YmxlIGxh
c3RQYWludFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQYWludFRpbWU7IH0KLSAgICB2b2lk
IHNldExhc3RQYWludFRpbWUoZG91YmxlIHQpIHsgbV9sYXN0UGFpbnRUaW1lID0gdDsgfQotICAg
IGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dRdWFsaXR5U2Nh
bGU7IH0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2b2lk
IHNldFVzZUxvd1F1YWxpdHlTY2FsZShib29sIGIpCi0gICAgewotICAgICAgICBtX2hpZ2hRdWFs
aXR5UmVwYWludFRpbWVyLnN0b3AoKTsKLSAgICAgICAgbV9sb3dRdWFsaXR5U2NhbGUgPSBiOwot
ICAgICAgICBpZiAoYikKLSAgICAgICAgICAgIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3Rh
cnRPbmVTaG90KGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCk7Ci0gICAgfQorICAgIEltYWdlUXVh
bGl0eUNvbnRyb2xsZXIoKTsKKyAgICBib29sIHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBo
aWNzQ29udGV4dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiwgSW1hZ2UqLCBjb25zdCBJbnRTaXpl
Jik7CisgICAgdm9pZCBvYmplY3REZXN0cm95ZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqKTsKIAog
cHJpdmF0ZToKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFu
c2Zvcm07Ci0gICAgZG91YmxlIG1fbGFzdFBhaW50VGltZTsKLSAgICBib29sIG1fbG93UXVhbGl0
eVNjYWxlOwotICAgIFRpbWVyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBtX2hpZ2hRdWFsaXR5UmVw
YWludFRpbWVyOwotfTsKKyAgICB2b2lkIGhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGlt
ZXI8SW1hZ2VRdWFsaXR5Q29udHJvbGxlcj4qKTsKKyAgICB2b2lkIHJlc3RhcnRUaW1lcigpOwog
Ci1jbGFzcyBSZW5kZXJCb3hNb2RlbFNjYWxlT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRp
YyBib29sIHNob3VsZFBhaW50QmFja2dyb3VuZEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQq
LCBSZW5kZXJCb3hNb2RlbE9iamVjdCosIEltYWdlKiwgY29uc3QgSW50U2l6ZSYpOworICAgIExh
c3RQYWludFRpbWVNYXAgbV9sYXN0UGFpbnRUaW1lTWFwOworICAgIFRpbWVyPEltYWdlUXVhbGl0
eUNvbnRyb2xsZXI+IG1fdGltZXI7Cit9OwogCi0gICAgc3RhdGljIHZvaWQgYm94TW9kZWxPYmpl
Y3REZXN0cm95ZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAg
IGlmIChnQm94TW9kZWxPYmplY3RzKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3hNb2RlbFNjYWxl
RGF0YSogZGF0YSA9IGdCb3hNb2RlbE9iamVjdHMtPnRha2Uob2JqZWN0KTsKLSAgICAgICAgICAg
IGRlbGV0ZSBkYXRhOwotICAgICAgICAgICAgaWYgKCFnQm94TW9kZWxPYmplY3RzLT5zaXplKCkp
IHsKLSAgICAgICAgICAgICAgICBkZWxldGUgZ0JveE1vZGVsT2JqZWN0czsKLSAgICAgICAgICAg
ICAgICBnQm94TW9kZWxPYmplY3RzID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KK0ltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXIoKQorICAg
IDogbV90aW1lcih0aGlzLCAmSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6aGlnaFF1YWxpdHlSZXBh
aW50VGltZXJGaXJlZCkKK3sKK30KIAotICAgIHN0YXRpYyB2b2lkIGhpZ2hRdWFsaXR5UmVwYWlu
dFRpbWVyRmlyZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAg
IFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6Ym94TW9kZWxPYmplY3REZXN0cm95ZWQob2Jq
ZWN0KTsKLSAgICAgICAgb2JqZWN0LT5yZXBhaW50KCk7Ci0gICAgfQordm9pZCBJbWFnZVF1YWxp
dHlDb250cm9sbGVyOjpvYmplY3REZXN0cm95ZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBtX2xhc3RQYWludFRpbWVNYXAucmVtb3ZlKG9iamVjdCk7CisgICAgaWYgKG1f
bGFzdFBhaW50VGltZU1hcC5pc0VtcHR5KCkpCisgICAgICAgIG1fdGltZXIuc3RvcCgpOworfQor
ICAgIAordm9pZCBJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1l
ckZpcmVkKFRpbWVyPEltYWdlUXVhbGl0eUNvbnRyb2xsZXI+KikKK3sKKyAgICBmb3IgKExhc3RQ
YWludFRpbWVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXN0UGFpbnRUaW1lTWFwLmJlZ2luKCk7IGl0
ICE9IG1fbGFzdFBhaW50VGltZU1hcC5lbmQoKTsgKytpdCkKKyAgICAgICAgaXQtPmZpcnN0LT5y
ZXBhaW50KCk7Cit9CiAKLSAgICBzdGF0aWMgSGFzaE1hcDxSZW5kZXJCb3hNb2RlbE9iamVjdCos
IFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKj4qIGdCb3hNb2RlbE9iamVjdHM7Ci19Owordm9pZCBJ
bWFnZVF1YWxpdHlDb250cm9sbGVyOjpyZXN0YXJ0VGltZXIoKQoreworICAgIG1fdGltZXIuc3Rh
cnRPbmVTaG90KGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCAqIDEuMDUpOworfQogCi1ib29sIFJl
bmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRMb3dRdWFs
aXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVj
dCwgSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRTaXplJiBzaXplKQorYm9vbCBJbWFnZVF1YWxpdHlD
b250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3QsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIHsKICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgbm90IGEgYml0bWFwIGltYWdl
LCB0aGVuIG5vbmUgb2YgdGhpcyBpcyByZWxldmFudCBhbmQgd2UganVzdCBwYWludCBhdCBoaWdo
CiAgICAgLy8gcXVhbGl0eS4KLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFn
ZSgpKQorICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5pc0JpdG1hcEltYWdlKCkgfHwgY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBN
YWtlIHN1cmUgdG8gdXNlIHRoZSB1bnpvb21lZCBpbWFnZSBzaXplLCBzaW5jZSBpZiBhIGZ1bGwg
cGFnZSB6b29tIGlzIGluIGVmZmVjdCwgdGhlIGltYWdlCkBAIC0xMjYsNTkgKzEwMCw0MiBAQCBi
b29sIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkCiAgICAgSW50U2l6ZSBpbWFn
ZVNpemUoaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CiAKICAgICAvLyBMb29rIG91
cnNlbHZlcyB1cCBpbiB0aGUgaGFzaHRhYmxlLgotICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRh
KiBkYXRhID0gMDsKLSAgICBpZiAoZ0JveE1vZGVsT2JqZWN0cykKLSAgICAgICAgZGF0YSA9IGdC
b3hNb2RlbE9iamVjdHMtPmdldChvYmplY3QpOworICAgIExhc3RQYWludFRpbWVNYXA6Oml0ZXJh
dG9yIGkgPSBtX2xhc3RQYWludFRpbWVNYXAuZmluZChvYmplY3QpOwogCiAgICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBjdXJyZW50VHJhbnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAg
Ym9vbCBjb250ZXh0SXNTY2FsZWQgPSAhY3VycmVudFRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFu
c2xhdGlvbk9yRmxpcHBlZCgpOwogICAgIGlmICghY29udGV4dElzU2NhbGVkICYmIGltYWdlU2l6
ZSA9PSBzaXplKSB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vIHNjYWxlIGluIGVmZmVjdC4gIElm
IHdlIGhhZCBhIHNjYWxlIGluIGVmZmVjdCBiZWZvcmUsIHdlIGNhbiBqdXN0IGRlbGV0ZSB0aGlz
IGRhdGEuCi0gICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAgICBnQm94TW9kZWxPYmplY3Rz
LT5yZW1vdmUob2JqZWN0KTsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICB9Cisg
ICAgICAgIC8vIFRoZXJlIGlzIG5vIHNjYWxlIGluIGVmZmVjdC4gSWYgd2UgaGFkIGEgc2NhbGUg
aW4gZWZmZWN0IGJlZm9yZSwgd2UgY2FuIGp1c3QgcmVtb3ZlIHRoaXMgb2JqZWN0IGZyb20gdGhl
IGxpc3QuCisgICAgICAgIGlmIChpICE9IG1fbGFzdFBhaW50VGltZU1hcC5lbmQoKSkKKyAgICAg
ICAgICAgIG1fbGFzdFBhaW50VGltZU1hcC5yZW1vdmUob2JqZWN0KTsKKwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBoYXNoIHNjYWxl
ZCBpbWFnZXMgdGhhdCBhbHdheXMgdXNlIGxvdyBxdWFsaXR5IG1vZGUgd2hlbiB0aGUgcGFnZSBk
ZW1hbmRzIGl0LiAgVGhpcyBpcyB0aGUgaUNoYXQgY2FzZS4KKyAgICAvLyBUaGVyZSBpcyBubyBu
ZWVkIHRvIGhhc2ggc2NhbGVkIGltYWdlcyB0aGF0IGFsd2F5cyB1c2UgbG93IHF1YWxpdHkgbW9k
ZSB3aGVuIHRoZSBwYWdlIGRlbWFuZHMgaXQuIFRoaXMgaXMgdGhlIGlDaGF0IGNhc2UuCiAgICAg
aWYgKG9iamVjdC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5pbkxvd1F1YWxpdHlJbWFnZUludGVycG9s
YXRpb25Nb2RlKCkpIHsKICAgICAgICAgZG91YmxlIHRvdGFsUGl4ZWxzID0gc3RhdGljX2Nhc3Q8
ZG91YmxlPihpbWFnZS0+d2lkdGgoKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT5oZWln
aHQoKSk7CiAgICAgICAgIGlmICh0b3RhbFBpeGVscyA+IGNJbnRlcnBvbGF0aW9uQ3V0b2ZmKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8g
ZGF0YSB5ZXQsIHdlIHdpbGwgcGFpbnQgdGhlIGZpcnN0IHNjYWxlIGF0IGhpZ2ggcXVhbGl0eSBh
bmQgcmVjb3JkIHRoZSBwYWludCB0aW1lIGluIGNhc2UgYSBzZWNvbmQgc2NhbGUgaGFwcGVucwot
ICAgIC8vIHZlcnkgc29vbi4KLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgZGF0YSA9IG5ldyBS
ZW5kZXJCb3hNb2RlbFNjYWxlRGF0YShvYmplY3QsIHNpemUsIGN1cnJlbnRUcmFuc2Zvcm0sIGN1
cnJlbnRUaW1lKCksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFnQm94TW9kZWxPYmplY3RzKQotICAg
ICAgICAgICAgZ0JveE1vZGVsT2JqZWN0cyA9IG5ldyBIYXNoTWFwPFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiwgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEqPjsKLSAgICAgICAgZ0JveE1vZGVsT2JqZWN0
cy0+c2V0KG9iamVjdCwgZGF0YSk7CisgICAgZG91YmxlIG5ld1RpbWUgPSBjdXJyZW50VGltZSgp
OworICAgIGlmIChpICE9IG1fbGFzdFBhaW50VGltZU1hcC5lbmQoKSAmJiBuZXdUaW1lIC0gaS0+
c2Vjb25kID49IGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCAmJiAhbV90aW1lci5pc0FjdGl2ZSgp
KSB7CisgICAgICAgIC8vIElmIGl0IGhhcyBiZWVuIGF0IGxlYXN0IGNMb3dRdWFsaXR5VGltZVRo
cmVzaG9sZCBzZWNvbmRzIHNpbmNlIHRoZSAKKyAgICAgICAgLy8gbGFzdCB0aW1lIGEgcmVzaXpl
IHdhcyByZXF1ZXN0ZWQsIGFuZCB0aGUgdGltZXIgaXMgbm8gbG9uZ2VyIGFjdGl2ZSwgCisgICAg
ICAgIC8vIGRyYXcgYXQgaGlnaCBxdWFsaXR5IGFuZCBkb24ndCBzZXQgdGhlIHRpbWVyLgorICAg
ICAgICBvYmplY3REZXN0cm95ZWQob2JqZWN0KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHIgPSBkYXRhLT50cmFuc2Zvcm0oKTsK
LSAgICBib29sIHNjYWxlVW5jaGFuZ2VkID0gdHIuYSgpID09IGN1cnJlbnRUcmFuc2Zvcm0uYSgp
ICYmIHRyLmIoKSA9PSBjdXJyZW50VHJhbnNmb3JtLmIoKSAmJiB0ci5jKCkgPT0gY3VycmVudFRy
YW5zZm9ybS5jKCkgJiYgdHIuZCgpID09IGN1cnJlbnRUcmFuc2Zvcm0uZCgpOwotICAgIC8vIFdl
IGFyZSBzY2FsZWQsIGJ1dCB3ZSBwYWludGVkIGFscmVhZHkgYXQgdGhpcyBzaXplLCBzbyBqdXN0
IGtlZXAgdXNpbmcgd2hhdGV2ZXIgbW9kZSB3ZSBsYXN0IHBhaW50ZWQgd2l0aC4KLSAgICBpZiAo
KCFjb250ZXh0SXNTY2FsZWQgfHwgc2NhbGVVbmNoYW5nZWQpICYmIGRhdGEtPnNpemUoKSA9PSBz
aXplKQotICAgICAgICByZXR1cm4gZGF0YS0+dXNlTG93UXVhbGl0eVNjYWxlKCk7Ci0KLSAgICAv
LyBXZSBoYXZlIGRhdGEgYW5kIG91ciBzaXplIGp1c3QgY2hhbmdlZC4gIElmIHRoaXMgY2hhbmdl
IGhhcHBlbmVkIHF1aWNrbHksIGdvIGludG8gbG93IHF1YWxpdHkgbW9kZSBhbmQgdGhlbiBzZXQg
YSByZXBhaW50Ci0gICAgLy8gdGltZXIgdG8gcGFpbnQgaW4gaGlnaCBxdWFsaXR5IG1vZGUuICBP
dGhlcndpc2UgaXQgaXMgb2sgdG8ganVzdCBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4KLSAg
ICBkb3VibGUgbmV3VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgZGF0YS0+c2V0VXNlTG93UXVh
bGl0eVNjYWxlKG5ld1RpbWUgLSBkYXRhLT5sYXN0UGFpbnRUaW1lKCkgPCBjTG93UXVhbGl0eVRp
bWVUaHJlc2hvbGQpOwotICAgIGRhdGEtPnNldExhc3RQYWludFRpbWUobmV3VGltZSk7Ci0gICAg
ZGF0YS0+c2V0VHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIGRhdGEtPnNldFNpemUo
c2l6ZSk7Ci0gICAgcmV0dXJuIGRhdGEtPnVzZUxvd1F1YWxpdHlTY2FsZSgpOworICAgIC8vIERy
YXcgYXQgbG93IHF1YWxpdHkgZmlyc3QgYW5kIHNldCBhIHRpbWVyIGZvciBoaWdoIHF1YWxpdHku
CisgICAgbV9sYXN0UGFpbnRUaW1lTWFwLnNldChvYmplY3QsIG5ld1RpbWUpOworICAgIHJlc3Rh
cnRUaW1lcigpOworICAgIHJldHVybiB0cnVlOwogfQogCi1IYXNoTWFwPFJlbmRlckJveE1vZGVs
T2JqZWN0KiwgUmVuZGVyQm94TW9kZWxTY2FsZURhdGEqPiogUmVuZGVyQm94TW9kZWxTY2FsZU9i
c2VydmVyOjpnQm94TW9kZWxPYmplY3RzID0gMDsKLQotdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVj
dD4qKQorc3RhdGljIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIqIGltYWdlUXVhbGl0eUNvbnRyb2xs
ZXIoKQogewotICAgIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBh
aW50VGltZXJGaXJlZCh0aGlzKTsKKyAgICBzdGF0aWMgSW1hZ2VRdWFsaXR5Q29udHJvbGxlciog
Y29udHJvbGxlciA9IG5ldyBJbWFnZVF1YWxpdHlDb250cm9sbGVyOworICAgIHJldHVybiBjb250
cm9sbGVyOwogfQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0
ZShTZWxlY3Rpb25TdGF0ZSBzKQpAQCAtMjAzLDYgKzE2MCwxMCBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TCiAgICAgICAgIGNiLT5zZXRTZWxlY3Rpb25TdGF0ZShz
KTsKIH0KIAorYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2hvdWxkUGFpbnRBdExvd1F1YWxp
dHkoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgcmV0dXJuIGltYWdlUXVhbGl0eUNvbnRyb2xsZXIoKS0+c2hvdWxkUGFp
bnRBdExvd1F1YWxpdHkoY29udGV4dCwgdGhpcywgaW1hZ2UsIHNpemUpOworfQogCiBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6UmVuZGVyQm94TW9kZWxPYmplY3QoTm9kZSogbm9kZSkKICAgICA6IFJl
bmRlck9iamVjdChub2RlKQpAQCAtMjE1LDcgKzE3Niw3IEBAIFJlbmRlckJveE1vZGVsT2JqZWN0
Ojp+UmVuZGVyQm94TW9kZWxPYmoKICAgICAvLyBPdXIgbGF5ZXIgc2hvdWxkIGhhdmUgYmVlbiBk
ZXN0cm95ZWQgYW5kIGNsZWFyZWQgYnkgbm93CiAgICAgQVNTRVJUKCFoYXNMYXllcigpKTsKICAg
ICBBU1NFUlQoIW1fbGF5ZXIpOwotICAgIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6Ym94
TW9kZWxPYmplY3REZXN0cm95ZWQodGhpcyk7CisgICAgaW1hZ2VRdWFsaXR5Q29udHJvbGxlcigp
LT5vYmplY3REZXN0cm95ZWQodGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OmRlc3Ryb3lMYXllcigpCkBAIC00NjQsNyArNDI1LDYgQEAgaW50IFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWRkaW5nUmlnaHQoYgogICAgIHJldHVybiBwYWRkaW5nLmNhbGNNaW5WYWx1ZSh3KTsK
IH0KIAotCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVk
KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgYywgY29uc3QgRmlsbExh
eWVyKiBiZ0xheWVyLCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBJbmxpbmVGbG93Qm94
KiBib3gsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmpl
Y3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7
CkBAIC02MzEsNyArNTkxLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxs
TGF5ZQogICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AgPSBvcCA9PSBD
b21wb3NpdGVTb3VyY2VPdmVyID8gYmdMYXllci0+Y29tcG9zaXRlKCkgOiBvcDsKICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogY2xpZW50Rm9yQmFja2dyb3VuZEltYWdlID0gYmFja2dyb3VuZE9i
amVjdCA/IGJhY2tncm91bmRPYmplY3QgOiB0aGlzOwogICAgICAgICAgICAgSW1hZ2UqIGltYWdl
ID0gYmctPmltYWdlKGNsaWVudEZvckJhY2tncm91bmRJbWFnZSwgdGlsZVNpemUpOwotICAgICAg
ICAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IFJlbmRlckJveE1vZGVsU2NhbGVPYnNl
cnZlcjo6c2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRMb3dRdWFsaXR5KGNvbnRleHQsIHRoaXMsIGlt
YWdlLCB0aWxlU2l6ZSk7CisgICAgICAgICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0g
c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoY29udGV4dCwgaW1hZ2UsIHRpbGVTaXplKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCksIGRlc3RSZWN0LCBwaGFzZSwgdGlsZVNpemUsIGNvbXBvc2l0ZU9wLCB1c2VMb3dRdWFsaXR5
U2NhbGluZyk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDYxMzI0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDcsNiArMTA4LDggQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIHZvaWQgY2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkoY29uc3Qg
RmlsbExheWVyKiwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwgSW50UmVjdCYgZGVzdFJl
Y3QsIEludFBvaW50JiBwaGFzZSwgSW50U2l6ZSYgdGlsZVNpemUpOwogCisgICAgYm9vbCBzaG91
bGRQYWludEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqLCBJbWFnZSosIGNvbnN0IEludFNp
emUmKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNCb3hNb2RlbE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAko
cmV2aXNpb24gNjEzMjQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUsNiArNSw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxsYW4g
U2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQogICogICAgICAgICAgIChDKSAyMDA2
IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MiwxMzMgKzUzLDYgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3Qg
ZG91YmxlIGNJbnRlcnBvbGF0aW9uQ3V0b2ZmID0gODAwLiAqIDgwMC47Ci1zdGF0aWMgY29uc3Qg
ZG91YmxlIGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCA9IDAuMDUwOyAvLyA1MCBtcwotCi1jbGFz
cyBSZW5kZXJJbWFnZVNjYWxlRGF0YSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0g
ICAgUmVuZGVySW1hZ2VTY2FsZURhdGEoUmVuZGVySW1hZ2UqIGltYWdlLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBkb3VibGUgdGltZSwgYm9vbCBsb3dRdWFsaXR5U2NhbGUpCi0gICAgICAgIDogbV9z
aXplKHNpemUpCi0gICAgICAgICwgbV90aW1lKHRpbWUpCi0gICAgICAgICwgbV9sb3dRdWFsaXR5
U2NhbGUobG93UXVhbGl0eVNjYWxlKQotICAgICAgICAsIG1faGlnaFF1YWxpdHlSZXBhaW50VGlt
ZXIoaW1hZ2UsICZSZW5kZXJJbWFnZTo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgflJlbmRlckltYWdlU2NhbGVEYXRhKCkKLSAgICB7Ci0gICAgICAg
IG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3RvcCgpOwotICAgIH0KLSAgICAKLSAgICBjb25z
dCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgZG91YmxlIHRp
bWUoKSBjb25zdCB7IHJldHVybiBtX3RpbWU7IH0KLSAgICBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG93UXVhbGl0eVNjYWxlOyB9Ci0gICAgVGltZXI8UmVuZGVy
SW1hZ2U+JiBoaXFoUXVhbGl0eVJlcGFpbnRUaW1lcigpIHsgcmV0dXJuIG1faGlnaFF1YWxpdHlS
ZXBhaW50VGltZXI7IH0KLQotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzKSB7IG1f
c2l6ZSA9IHM7IH0KLSAgICB2b2lkIHNldFRpbWUoZG91YmxlIHQpIHsgbV90aW1lID0gdDsgfQot
ICAgIHZvaWQgc2V0VXNlTG93UXVhbGl0eVNjYWxlKGJvb2wgYikKLSAgICB7Ci0gICAgICAgIG1f
aGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3RvcCgpOwotICAgICAgICBtX2xvd1F1YWxpdHlTY2Fs
ZSA9IGI7Ci0gICAgICAgIGlmIChiKQotICAgICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRU
aW1lci5zdGFydE9uZVNob3QoY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAgICB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIEludFNpemUgbV9zaXplOwotICAgIGRvdWJsZSBtX3RpbWU7Ci0gICAg
Ym9vbCBtX2xvd1F1YWxpdHlTY2FsZTsKLSAgICBUaW1lcjxSZW5kZXJJbWFnZT4gbV9oaWdoUXVh
bGl0eVJlcGFpbnRUaW1lcjsKLX07Ci0KLWNsYXNzIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlciB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkSW1hZ2VQYWludEF0TG93UXVhbGl0eShS
ZW5kZXJJbWFnZSosIGNvbnN0IEludFNpemUmKTsKLQotICAgIHN0YXRpYyB2b2lkIGltYWdlRGVz
dHJveWVkKFJlbmRlckltYWdlKiBpbWFnZSkKLSAgICB7Ci0gICAgICAgIGlmIChnSW1hZ2VzKSB7
Ci0gICAgICAgICAgICBSZW5kZXJJbWFnZVNjYWxlRGF0YSogZGF0YSA9IGdJbWFnZXMtPnRha2Uo
aW1hZ2UpOwotICAgICAgICAgICAgZGVsZXRlIGRhdGE7Ci0gICAgICAgICAgICBpZiAoZ0ltYWdl
cy0+c2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgZ0ltYWdlczsKLSAgICAg
ICAgICAgICAgICBnSW1hZ2VzID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICBzdGF0aWMgdm9pZCBoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFJlbmRl
ckltYWdlKiBpbWFnZSkKLSAgICB7Ci0gICAgICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6
aW1hZ2VEZXN0cm95ZWQoaW1hZ2UpOwotICAgICAgICBpbWFnZS0+cmVwYWludCgpOwotICAgIH0K
LSAgICAKLSAgICBzdGF0aWMgSGFzaE1hcDxSZW5kZXJJbWFnZSosIFJlbmRlckltYWdlU2NhbGVE
YXRhKj4qIGdJbWFnZXM7Ci19OwotCi1ib29sIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6c2hv
dWxkSW1hZ2VQYWludEF0TG93UXVhbGl0eShSZW5kZXJJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNp
emUmIHNpemUpCi17Ci0gICAgLy8gSWYgdGhlIGltYWdlIGlzIG5vdCBhIGJpdG1hcCBpbWFnZSwg
dGhlbiBub25lIG9mIHRoaXMgaXMgcmVsZXZhbnQgYW5kIHdlIGp1c3QgcGFpbnQgYXQgaGlnaAot
ICAgIC8vIHF1YWxpdHkuCi0gICAgaWYgKCFpbWFnZS0+aW1hZ2UoKSB8fCAhaW1hZ2UtPmltYWdl
KCktPmlzQml0bWFwSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTWFr
ZSBzdXJlIHRvIHVzZSB0aGUgdW56b29tZWQgaW1hZ2Ugc2l6ZSwgc2luY2UgaWYgYSBmdWxsIHBh
Z2Ugem9vbSBpcyBpbiBlZmZlY3QsIHRoZSBpbWFnZQotICAgIC8vIGlzIGFjdHVhbGx5IGJlaW5n
IHNjYWxlZC4KLSAgICBJbnRTaXplIGltYWdlU2l6ZShpbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKSwg
aW1hZ2UtPmltYWdlKCktPmhlaWdodCgpKTsKLQotICAgIC8vIExvb2sgb3Vyc2VsdmVzIHVwIGlu
IHRoZSBoYXNodGFibGUuCi0gICAgUmVuZGVySW1hZ2VTY2FsZURhdGEqIGRhdGEgPSAwOwotICAg
IGlmIChnSW1hZ2VzKQotICAgICAgICBkYXRhID0gZ0ltYWdlcy0+Z2V0KGltYWdlKTsKLQotICAg
IGlmIChpbWFnZVNpemUgPT0gc2l6ZSkgewotICAgICAgICAvLyBUaGVyZSBpcyBubyBzY2FsZSBp
biBlZmZlY3QuICBJZiB3ZSBoYWQgYSBzY2FsZSBpbiBlZmZlY3QgYmVmb3JlLCB3ZSBjYW4ganVz
dCBkZWxldGUgdGhpcyBkYXRhLgotICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgZ0lt
YWdlcy0+cmVtb3ZlKGltYWdlKTsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBuZWVk
IHRvIGhhc2ggc2NhbGVkIGltYWdlcyB0aGF0IGFsd2F5cyB1c2UgbG93IHF1YWxpdHkgbW9kZSB3
aGVuIHRoZSBwYWdlIGRlbWFuZHMgaXQuICBUaGlzIGlzIHRoZSBpQ2hhdCBjYXNlLgotICAgIGlm
IChpbWFnZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5pbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRp
b25Nb2RlKCkpIHsKLSAgICAgICAgZG91YmxlIHRvdGFsUGl4ZWxzID0gc3RhdGljX2Nhc3Q8ZG91
YmxlPihpbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdl
LT5pbWFnZSgpLT5oZWlnaHQoKSk7Ci0gICAgICAgIGlmICh0b3RhbFBpeGVscyA+IGNJbnRlcnBv
bGF0aW9uQ3V0b2ZmKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
SWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHdlIHdpbGwgcGFpbnQgdGhlIGZpcnN0IHNjYWxlIGF0
IGhpZ2ggcXVhbGl0eSBhbmQgcmVjb3JkIHRoZSBwYWludCB0aW1lIGluIGNhc2UgYSBzZWNvbmQg
c2NhbGUgaGFwcGVucwotICAgIC8vIHZlcnkgc29vbi4KLSAgICBpZiAoIWRhdGEpIHsKLSAgICAg
ICAgZGF0YSA9IG5ldyBSZW5kZXJJbWFnZVNjYWxlRGF0YShpbWFnZSwgc2l6ZSwgY3VycmVudFRp
bWUoKSwgZmFsc2UpOwotICAgICAgICBpZiAoIWdJbWFnZXMpCi0gICAgICAgICAgICBnSW1hZ2Vz
ID0gbmV3IEhhc2hNYXA8UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFnZVNjYWxlRGF0YSo+OwotICAg
ICAgICBnSW1hZ2VzLT5zZXQoaW1hZ2UsIGRhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8gV2UgYXJlIHNjYWxlZCwgYnV0IHdlIHBhaW50ZWQgYWxyZWFkeSBhdCB0
aGlzIHNpemUsIHNvIGp1c3Qga2VlcCB1c2luZyB3aGF0ZXZlciBtb2RlIHdlIGxhc3QgcGFpbnRl
ZCB3aXRoLgotICAgIGlmIChkYXRhLT5zaXplKCkgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuIGRh
dGEtPnVzZUxvd1F1YWxpdHlTY2FsZSgpOwotCi0gICAgLy8gV2UgaGF2ZSBkYXRhIGFuZCBvdXIg
c2l6ZSBqdXN0IGNoYW5nZWQuICBJZiB0aGlzIGNoYW5nZSBoYXBwZW5lZCBxdWlja2x5LCBnbyBp
bnRvIGxvdyBxdWFsaXR5IG1vZGUgYW5kIHRoZW4gc2V0IGEgcmVwYWludAotICAgIC8vIHRpbWVy
IHRvIHBhaW50IGluIGhpZ2ggcXVhbGl0eSBtb2RlLiAgT3RoZXJ3aXNlIGl0IGlzIG9rIHRvIGp1
c3QgcGFpbnQgaW4gaGlnaCBxdWFsaXR5IG1vZGUuCi0gICAgZG91YmxlIG5ld1RpbWUgPSBjdXJy
ZW50VGltZSgpOwotICAgIGRhdGEtPnNldFVzZUxvd1F1YWxpdHlTY2FsZShuZXdUaW1lIC0gZGF0
YS0+dGltZSgpIDwgY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAgICBkYXRhLT5zZXRUaW1l
KG5ld1RpbWUpOwotICAgIGRhdGEtPnNldFNpemUoc2l6ZSk7Ci0gICAgcmV0dXJuIGRhdGEtPnVz
ZUxvd1F1YWxpdHlTY2FsZSgpOwotfQotCi1IYXNoTWFwPFJlbmRlckltYWdlKiwgUmVuZGVySW1h
Z2VTY2FsZURhdGEqPiogUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpnSW1hZ2VzID0gMDsKLQot
dm9pZCBSZW5kZXJJbWFnZTo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5k
ZXJJbWFnZT4qKQotewotICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlS
ZXBhaW50VGltZXJGaXJlZCh0aGlzKTsKLX0KLQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAogUmVuZGVySW1hZ2U6OlJlbmRlckltYWdlKE5vZGUqIG5vZGUpCkBAIC0xOTQsNyArNjgsNiBA
QCBSZW5kZXJJbWFnZTo6flJlbmRlckltYWdlKCkKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkK
ICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIFJlbmRlcklt
YWdlU2NhbGVPYnNlcnZlcjo6aW1hZ2VEZXN0cm95ZWQodGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVy
SW1hZ2U6OnNldENhY2hlZEltYWdlKENhY2hlZEltYWdlKiBuZXdJbWFnZSkKQEAgLTQ4Nyw3ICsz
NjAsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEludG9SZWN0KEdyYXBoaWNzCiAKICAgICBI
VE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsdCA9IChub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1l
KGltZ1RhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG5vZGUoKSkgOiAwOwog
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yID0gaW1hZ2VFbHQgPyBpbWFn
ZUVsdC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7Ci0gICAgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxk
SW1hZ2VQYWludEF0TG93UXVhbGl0eSh0aGlzLCByZWN0LnNpemUoKSk7CisgICAgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIHRoaXMt
PmltYWdlKCksIHJlY3Quc2l6ZSgpKTsKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UocmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCByZWN0LCBj
b21wb3NpdGVPcGVyYXRvciwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59020</attachid>
            <date>2010-06-17 11:25:08 -0700</date>
            <delta_ts>2010-06-17 12:30:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38233-20100617142506.patch</filename>
            <type>text/plain</type>
            <size>34579</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTMzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTAtMDYtMTcgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IGZvciBzbG93IG11bHRpcGxlIGFuaW1hdGVkIHJlc2l6ZSBpc3N1ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjMzCisKKyAgICAg
ICAgVGhlIHRpbWVyLWJhc2VkIHJlc2l6ZSBxdWFsaXR5IGFwcHJvYWNoIGltcGxlbWVudGVkIGlu
CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzM0MjEwIGlzIGEgZ29v
ZCBpZGVhLCBidXQgZG9lc24ndAorICAgICAgICBzY2FsZSB0byBtdWx0aXBsZSBpbWFnZXMgd2l0
aCBhbmltYXRlZCByZXNpemVzLiAgVGhpcyBmaXggdW5pZmllcyBhbGwKKyAgICAgICAgb3V0c3Rh
bmRpbmcgcmVzaXplIHRpbWVycyBpbnRvIGEgc2luZ2xlIHRpbWVyLCBhbmQgcmVtb3ZlcyB0aGUg
InVzZQorICAgICAgICBsYXN0IHF1YWxpdHkiIGNoZWNrICh3aGljaCBkb2Vzbid0IHdvcmsgd2hl
biBpbWFnZXMgYXJlIG92ZXJsYXBwaW5nKS4gCisgICAgICAgIEl0IGFsc28gcmVmYWN0b3JzIHRo
ZSBjb3B5IG9mIHRoaXMgY29kZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81Mzk0OS4KKworICAg
ICAgICBUaGlzIGltcHJvdmVzIFNhZmFyaSBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBJ
RTkgcGxhdGZvcm0gZGVtb3Mgb24gbXkgQzJEIE1hY1BybyAoMTAuNSk6CisgICAgICAgIGh0dHA6
Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9QZXJmb3JtYW5jZS8wMUZseWluZ0ltYWdlcy9E
ZWZhdWx0Lmh0bWwgKDQtPjYwZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvMTBGbGlja3JFeHBsb3Jlci9EZWZhdWx0Lmh0bWwgKDMtPjE2
ZnBzKQorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90ZXN0ZHJpdmUvUGVyZm9ybWFu
Y2UvMTFCcm93c2VyRmxpcC9EZWZhdWx0Lmh0bWwgKDktPjYwZnBzKQorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
UXVhbGl0eUNvbnRyb2xsZXI6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICBVbmlm
eSBhbGwgdGltZXJzIGludG8gYSBzaW5nbGUgdGltZXIsIHJlbmFtZSBSZW5kZXJCb3hNb2RlbFNj
YWxlT2JzZXJ2ZXIKKyAgICAgICAgdG8gSW1hZ2VRdWFsaXR5Q29udHJvbGxlciwgYW5kIHJlbW92
ZSB0aGUgcmVzaXplIHF1YWxpdHkgInN0aWNrbmVzcyIsCisgICAgICAgIHNpbmNlIGl0IGRvZXNu
J3Qgd29yayB3aXRoIG11bHRpcGxlIG91dHN0YW5kaW5nIHJlc2l6ZXMuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpvYmplY3REZXN0cm95ZWQpOgorICAgICAgICBn
SW1hZ2VzIGdsb2JhbCBpcyBub3cgbV9sYXN0UGFpbnRUaW1lTWFwIG1lbWJlci4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OmhpZ2hRdWFsaXR5UmVwYWludFRpbWVy
RmlyZWQpOgorICAgICAgICBGdW5jdGlvbiBtYWRlIG5vbi1zdGF0aWM7IHJlcGFpbnQgYWxsIHBl
bmRpbmcgcmVzaXplcyAobm90IGp1c3Qgb25lKS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlUXVh
bGl0eUNvbnRyb2xsZXI6OnJlc3RhcnRUaW1lcik6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHRv
IHJlc3RhcnQgdGltZXIgYXQgMS4wNXggdGhyZXNob2xkLgorICAgICAgICAoV2ViQ29yZTo6aW1h
Z2VRdWFsaXR5Q29udHJvbGxlcik6CisgICAgICAgIFN0YXRpYyBmdW5jdGlvbiB0byByZXR1cm4g
c2luZ2xldG9uLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hv
dWxkUGFpbnRBdExvd1F1YWxpdHkpOgorICAgICAgICBVc2UgbV9sYXN0UGFpbnRUaW1lTWFwLCBu
b3QgZ0ltYWdlcyBnbG9iYWwuICBJbXBsZW1lbnQgbmV3IHRpbWVyCisgICAgICAgIGFsZ29yaXRo
bS4gIFJlbW92ZSByZXNpemUgInN0aWNraW5lc3MiLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KToKKyAgICAgICAgSW1wbGVt
ZW50IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5LCB3aGljaCBwdWxscyBvdXQgInRoaXMiIGFuZCBw
YXNzZXMKKyAgICAgICAgdGhlIGNhbGwgdG8gdGhlIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6flJlbmRlckJveE1vZGVsT2Jq
ZWN0KToKKyAgICAgICAgQ2FsbCBJbWFnZVF1YWxpdHlDb250cm9sbGVyIHNpbmdsZXRvbidzIG9i
amVjdERlc3Ryb3llZCgpIGluc3RlYWQgb2YKKyAgICAgICAgb2xkIHN0YXRpYyBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4
dGVuZGVkKToKKyAgICAgICAgTW9kaWZ5IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KCkgY2FsbCB0
byBtYXRjaCBuZXcgY2xhc3MgbmFtZSBhbmQKKyAgICAgICAgZnVuY3Rpb24gc2lnbmF0dXJlLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICBFeHBv
c2Ugc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkgYXMgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklt
YWdlOjp+UmVuZGVySW1hZ2UpOgorICAgICAgICBObyBuZWVkIHRvIGNhbGwgb2JqZWN0RGVzdHJv
eWVkKCkgaGVyZSBhbnltb3JlLCBzaW5jZSB0aGUKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QgZGVzdHJ1Y3RvciB3aWxsIGRvIHRoaXMgZm9yIHVzLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICBSaXAgb3V0IFJlbmRlckltYWdlU2Nh
bGVPYnNlcnZlciwgYW5kIGNhbGwKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNob3Vs
ZFBhaW50QXRMb3dRdWFsaXR5KCkgaW5zdGVhZC4KKwogMjAxMC0wNi0xNyAgU2h1IENoYW5nICA8
Y2hhbmcuc2h1QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAJKHJldmlzaW9uIDYxMzM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogICAgICAg
ICAgIChDKSAyMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAq
ICAgICAgICAgICAoQykgMjAwNSwgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWls
LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDgsNzcg
KzQ5LDUwIEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNfbGF5ZXJXYXNTZWwKIHN0YXRp
YyBjb25zdCBkb3VibGUgY0ludGVycG9sYXRpb25DdXRvZmYgPSA4MDAuICogODAwLjsKIHN0YXRp
YyBjb25zdCBkb3VibGUgY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkID0gMC41MDA7IC8vIDUwMCBt
cwogCi1jbGFzcyBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
Cit0eXBlZGVmIEhhc2hNYXA8UmVuZGVyQm94TW9kZWxPYmplY3QqLCBkb3VibGU+IExhc3RQYWlu
dFRpbWVNYXA7CisKK2NsYXNzIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIgOiBwdWJsaWMgTm9uY29w
eWFibGUgewogcHVibGljOgotICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBvYmplY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtLCBkb3VibGUgdGltZSwgYm9vbCBsb3dRdWFsaXR5U2NhbGUpCi0gICAg
ICAgIDogbV9zaXplKHNpemUpCi0gICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotICAg
ICAgICAsIG1fbGFzdFBhaW50VGltZSh0aW1lKQotICAgICAgICAsIG1fbG93UXVhbGl0eVNjYWxl
KGxvd1F1YWxpdHlTY2FsZSkKLSAgICAgICAgLCBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyKG9i
amVjdCwgJlJlbmRlckJveE1vZGVsT2JqZWN0OjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVk
KQotICAgIHsKLSAgICB9Ci0KLSAgICB+UmVuZGVyQm94TW9kZWxTY2FsZURhdGEoKQotICAgIHsK
LSAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdG9wKCk7Ci0gICAgfQotCi0gICAg
VGltZXI8UmVuZGVyQm94TW9kZWxPYmplY3Q+JiBoaXFoUXVhbGl0eVJlcGFpbnRUaW1lcigpIHsg
cmV0dXJuIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXI7IH0KLQotICAgIGNvbnN0IEludFNpemUm
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICB2b2lkIHNldFNpemUoY29uc3Qg
SW50U2l6ZSYgcykgeyBtX3NpemUgPSBzOyB9Ci0gICAgZG91YmxlIGxhc3RQYWludFRpbWUoKSBj
b25zdCB7IHJldHVybiBtX2xhc3RQYWludFRpbWU7IH0KLSAgICB2b2lkIHNldExhc3RQYWludFRp
bWUoZG91YmxlIHQpIHsgbV9sYXN0UGFpbnRUaW1lID0gdDsgfQotICAgIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dRdWFsaXR5U2NhbGU7IH0KLSAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2b2lkIHNldFVzZUxvd1F1YWxp
dHlTY2FsZShib29sIGIpCi0gICAgewotICAgICAgICBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVy
LnN0b3AoKTsKLSAgICAgICAgbV9sb3dRdWFsaXR5U2NhbGUgPSBiOwotICAgICAgICBpZiAoYikK
LSAgICAgICAgICAgIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIuc3RhcnRPbmVTaG90KGNMb3dR
dWFsaXR5VGltZVRocmVzaG9sZCk7Ci0gICAgfQorICAgIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIo
KTsKKyAgICBib29sIHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCosIFJl
bmRlckJveE1vZGVsT2JqZWN0KiwgSW1hZ2UqLCBjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBv
YmplY3REZXN0cm95ZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqKTsKIAogcHJpdmF0ZToKLSAgICBJ
bnRTaXplIG1fc2l6ZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci0gICAgZG91
YmxlIG1fbGFzdFBhaW50VGltZTsKLSAgICBib29sIG1fbG93UXVhbGl0eVNjYWxlOwotICAgIFRp
bWVyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBtX2hpZ2hRdWFsaXR5UmVwYWludFRpbWVyOwotfTsK
KyAgICB2b2lkIGhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8SW1hZ2VRdWFsaXR5
Q29udHJvbGxlcj4qKTsKKyAgICB2b2lkIHJlc3RhcnRUaW1lcigpOwogCi1jbGFzcyBSZW5kZXJC
b3hNb2RlbFNjYWxlT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBib29sIHNob3VsZFBh
aW50QmFja2dyb3VuZEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCosIEltYWdlKiwgY29uc3QgSW50U2l6ZSYpOworICAgIExhc3RQYWludFRpbWVNYXAg
bV9sYXN0UGFpbnRUaW1lTWFwOworICAgIFRpbWVyPEltYWdlUXVhbGl0eUNvbnRyb2xsZXI+IG1f
dGltZXI7Cit9OwogCi0gICAgc3RhdGljIHZvaWQgYm94TW9kZWxPYmplY3REZXN0cm95ZWQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChnQm94TW9kZWxP
YmplY3RzKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3hNb2RlbFNjYWxlRGF0YSogZGF0YSA9IGdC
b3hNb2RlbE9iamVjdHMtPnRha2Uob2JqZWN0KTsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwot
ICAgICAgICAgICAgaWYgKCFnQm94TW9kZWxPYmplY3RzLT5zaXplKCkpIHsKLSAgICAgICAgICAg
ICAgICBkZWxldGUgZ0JveE1vZGVsT2JqZWN0czsKLSAgICAgICAgICAgICAgICBnQm94TW9kZWxP
YmplY3RzID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KK0ltYWdlUXVhbGl0
eUNvbnRyb2xsZXI6OkltYWdlUXVhbGl0eUNvbnRyb2xsZXIoKQorICAgIDogbV90aW1lcih0aGlz
LCAmSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCkK
K3sKK30KIAotICAgIHN0YXRpYyB2b2lkIGhpZ2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIFJlbmRlckJveE1vZGVs
U2NhbGVPYnNlcnZlcjo6Ym94TW9kZWxPYmplY3REZXN0cm95ZWQob2JqZWN0KTsKLSAgICAgICAg
b2JqZWN0LT5yZXBhaW50KCk7Ci0gICAgfQordm9pZCBJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpv
YmplY3REZXN0cm95ZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCkKK3sKKyAgICBtX2xh
c3RQYWludFRpbWVNYXAucmVtb3ZlKG9iamVjdCk7CisgICAgaWYgKG1fbGFzdFBhaW50VGltZU1h
cC5pc0VtcHR5KCkpCisgICAgICAgIG1fdGltZXIuc3RvcCgpOworfQorICAgIAordm9pZCBJbWFn
ZVF1YWxpdHlDb250cm9sbGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPElt
YWdlUXVhbGl0eUNvbnRyb2xsZXI+KikKK3sKKyAgICBmb3IgKExhc3RQYWludFRpbWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9sYXN0UGFpbnRUaW1lTWFwLmJlZ2luKCk7IGl0ICE9IG1fbGFzdFBhaW50
VGltZU1hcC5lbmQoKTsgKytpdCkKKyAgICAgICAgaXQtPmZpcnN0LT5yZXBhaW50KCk7Cit9CiAK
LSAgICBzdGF0aWMgSGFzaE1hcDxSZW5kZXJCb3hNb2RlbE9iamVjdCosIFJlbmRlckJveE1vZGVs
U2NhbGVEYXRhKj4qIGdCb3hNb2RlbE9iamVjdHM7Ci19Owordm9pZCBJbWFnZVF1YWxpdHlDb250
cm9sbGVyOjpyZXN0YXJ0VGltZXIoKQoreworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGNMb3dR
dWFsaXR5VGltZVRocmVzaG9sZCAqIDEuMDUpOworfQogCi1ib29sIFJlbmRlckJveE1vZGVsU2Nh
bGVPYnNlcnZlcjo6c2hvdWxkUGFpbnRCYWNrZ3JvdW5kQXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9iamVjdCwgSW1hZ2UqIGltYWdl
LCBjb25zdCBJbnRTaXplJiBzaXplKQorYm9vbCBJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpzaG91
bGRQYWludEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBvYmplY3QsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsK
ICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgbm90IGEgYml0bWFwIGltYWdlLCB0aGVuIG5vbmUgb2Yg
dGhpcyBpcyByZWxldmFudCBhbmQgd2UganVzdCBwYWludCBhdCBoaWdoCiAgICAgLy8gcXVhbGl0
eS4KLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQorICAgIGlmICgh
aW1hZ2UgfHwgIWltYWdlLT5pc0JpdG1hcEltYWdlKCkgfHwgY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUgdG8gdXNl
IHRoZSB1bnpvb21lZCBpbWFnZSBzaXplLCBzaW5jZSBpZiBhIGZ1bGwgcGFnZSB6b29tIGlzIGlu
IGVmZmVjdCwgdGhlIGltYWdlCkBAIC0xMjYsNTkgKzEwMCw0MiBAQCBib29sIFJlbmRlckJveE1v
ZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkCiAgICAgSW50U2l6ZSBpbWFnZVNpemUoaW1hZ2UtPndp
ZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CiAKICAgICAvLyBMb29rIG91cnNlbHZlcyB1cCBpbiB0
aGUgaGFzaHRhYmxlLgotICAgIFJlbmRlckJveE1vZGVsU2NhbGVEYXRhKiBkYXRhID0gMDsKLSAg
ICBpZiAoZ0JveE1vZGVsT2JqZWN0cykKLSAgICAgICAgZGF0YSA9IGdCb3hNb2RlbE9iamVjdHMt
PmdldChvYmplY3QpOworICAgIExhc3RQYWludFRpbWVNYXA6Oml0ZXJhdG9yIGkgPSBtX2xhc3RQ
YWludFRpbWVNYXAuZmluZChvYmplY3QpOwogCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBj
dXJyZW50VHJhbnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgYm9vbCBjb250ZXh0SXNT
Y2FsZWQgPSAhY3VycmVudFRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBl
ZCgpOwogICAgIGlmICghY29udGV4dElzU2NhbGVkICYmIGltYWdlU2l6ZSA9PSBzaXplKSB7Ci0g
ICAgICAgIC8vIFRoZXJlIGlzIG5vIHNjYWxlIGluIGVmZmVjdC4gIElmIHdlIGhhZCBhIHNjYWxl
IGluIGVmZmVjdCBiZWZvcmUsIHdlIGNhbiBqdXN0IGRlbGV0ZSB0aGlzIGRhdGEuCi0gICAgICAg
IGlmIChkYXRhKSB7Ci0gICAgICAgICAgICBnQm94TW9kZWxPYmplY3RzLT5yZW1vdmUob2JqZWN0
KTsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICB9CisgICAgICAgIC8vIFRoZXJl
IGlzIG5vIHNjYWxlIGluIGVmZmVjdC4gSWYgd2UgaGFkIGEgc2NhbGUgaW4gZWZmZWN0IGJlZm9y
ZSwgd2UgY2FuIGp1c3QgcmVtb3ZlIHRoaXMgb2JqZWN0IGZyb20gdGhlIGxpc3QuCisgICAgICAg
IGlmIChpICE9IG1fbGFzdFBhaW50VGltZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIG1fbGFzdFBh
aW50VGltZU1hcC5yZW1vdmUob2JqZWN0KTsKKwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBoYXNoIHNjYWxlZCBpbWFnZXMgdGhhdCBh
bHdheXMgdXNlIGxvdyBxdWFsaXR5IG1vZGUgd2hlbiB0aGUgcGFnZSBkZW1hbmRzIGl0LiAgVGhp
cyBpcyB0aGUgaUNoYXQgY2FzZS4KKyAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggc2Nh
bGVkIGltYWdlcyB0aGF0IGFsd2F5cyB1c2UgbG93IHF1YWxpdHkgbW9kZSB3aGVuIHRoZSBwYWdl
IGRlbWFuZHMgaXQuIFRoaXMgaXMgdGhlIGlDaGF0IGNhc2UuCiAgICAgaWYgKG9iamVjdC0+ZG9j
dW1lbnQoKS0+cGFnZSgpLT5pbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRpb25Nb2RlKCkpIHsK
ICAgICAgICAgZG91YmxlIHRvdGFsUGl4ZWxzID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFnZS0+
d2lkdGgoKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT5oZWlnaHQoKSk7CiAgICAgICAg
IGlmICh0b3RhbFBpeGVscyA+IGNJbnRlcnBvbGF0aW9uQ3V0b2ZmKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHdlIHdp
bGwgcGFpbnQgdGhlIGZpcnN0IHNjYWxlIGF0IGhpZ2ggcXVhbGl0eSBhbmQgcmVjb3JkIHRoZSBw
YWludCB0aW1lIGluIGNhc2UgYSBzZWNvbmQgc2NhbGUgaGFwcGVucwotICAgIC8vIHZlcnkgc29v
bi4KLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgZGF0YSA9IG5ldyBSZW5kZXJCb3hNb2RlbFNj
YWxlRGF0YShvYmplY3QsIHNpemUsIGN1cnJlbnRUcmFuc2Zvcm0sIGN1cnJlbnRUaW1lKCksIGZh
bHNlKTsKLSAgICAgICAgaWYgKCFnQm94TW9kZWxPYmplY3RzKQotICAgICAgICAgICAgZ0JveE1v
ZGVsT2JqZWN0cyA9IG5ldyBIYXNoTWFwPFJlbmRlckJveE1vZGVsT2JqZWN0KiwgUmVuZGVyQm94
TW9kZWxTY2FsZURhdGEqPjsKLSAgICAgICAgZ0JveE1vZGVsT2JqZWN0cy0+c2V0KG9iamVjdCwg
ZGF0YSk7CisgICAgZG91YmxlIG5ld1RpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGlmIChpICE9
IG1fbGFzdFBhaW50VGltZU1hcC5lbmQoKSAmJiBuZXdUaW1lIC0gaS0+c2Vjb25kID49IGNMb3dR
dWFsaXR5VGltZVRocmVzaG9sZCAmJiAhbV90aW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIC8v
IElmIGl0IGhhcyBiZWVuIGF0IGxlYXN0IGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCBzZWNvbmRz
IHNpbmNlIHRoZSAKKyAgICAgICAgLy8gbGFzdCB0aW1lIGEgcmVzaXplIHdhcyByZXF1ZXN0ZWQs
IGFuZCB0aGUgdGltZXIgaXMgbm8gbG9uZ2VyIGFjdGl2ZSwgCisgICAgICAgIC8vIGRyYXcgYXQg
aGlnaCBxdWFsaXR5IGFuZCBkb24ndCBzZXQgdGhlIHRpbWVyLgorICAgICAgICBvYmplY3REZXN0
cm95ZWQob2JqZWN0KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHIgPSBkYXRhLT50cmFuc2Zvcm0oKTsKLSAgICBib29sIHNjYWxl
VW5jaGFuZ2VkID0gdHIuYSgpID09IGN1cnJlbnRUcmFuc2Zvcm0uYSgpICYmIHRyLmIoKSA9PSBj
dXJyZW50VHJhbnNmb3JtLmIoKSAmJiB0ci5jKCkgPT0gY3VycmVudFRyYW5zZm9ybS5jKCkgJiYg
dHIuZCgpID09IGN1cnJlbnRUcmFuc2Zvcm0uZCgpOwotICAgIC8vIFdlIGFyZSBzY2FsZWQsIGJ1
dCB3ZSBwYWludGVkIGFscmVhZHkgYXQgdGhpcyBzaXplLCBzbyBqdXN0IGtlZXAgdXNpbmcgd2hh
dGV2ZXIgbW9kZSB3ZSBsYXN0IHBhaW50ZWQgd2l0aC4KLSAgICBpZiAoKCFjb250ZXh0SXNTY2Fs
ZWQgfHwgc2NhbGVVbmNoYW5nZWQpICYmIGRhdGEtPnNpemUoKSA9PSBzaXplKQotICAgICAgICBy
ZXR1cm4gZGF0YS0+dXNlTG93UXVhbGl0eVNjYWxlKCk7Ci0KLSAgICAvLyBXZSBoYXZlIGRhdGEg
YW5kIG91ciBzaXplIGp1c3QgY2hhbmdlZC4gIElmIHRoaXMgY2hhbmdlIGhhcHBlbmVkIHF1aWNr
bHksIGdvIGludG8gbG93IHF1YWxpdHkgbW9kZSBhbmQgdGhlbiBzZXQgYSByZXBhaW50Ci0gICAg
Ly8gdGltZXIgdG8gcGFpbnQgaW4gaGlnaCBxdWFsaXR5IG1vZGUuICBPdGhlcndpc2UgaXQgaXMg
b2sgdG8ganVzdCBwYWludCBpbiBoaWdoIHF1YWxpdHkgbW9kZS4KLSAgICBkb3VibGUgbmV3VGlt
ZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgZGF0YS0+c2V0VXNlTG93UXVhbGl0eVNjYWxlKG5ld1Rp
bWUgLSBkYXRhLT5sYXN0UGFpbnRUaW1lKCkgPCBjTG93UXVhbGl0eVRpbWVUaHJlc2hvbGQpOwot
ICAgIGRhdGEtPnNldExhc3RQYWludFRpbWUobmV3VGltZSk7Ci0gICAgZGF0YS0+c2V0VHJhbnNm
b3JtKGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIGRhdGEtPnNldFNpemUoc2l6ZSk7Ci0gICAgcmV0
dXJuIGRhdGEtPnVzZUxvd1F1YWxpdHlTY2FsZSgpOworICAgIC8vIERyYXcgYXQgbG93IHF1YWxp
dHkgZmlyc3QgYW5kIHNldCBhIHRpbWVyIGZvciBoaWdoIHF1YWxpdHkuCisgICAgbV9sYXN0UGFp
bnRUaW1lTWFwLnNldChvYmplY3QsIG5ld1RpbWUpOworICAgIHJlc3RhcnRUaW1lcigpOworICAg
IHJldHVybiB0cnVlOwogfQogCi1IYXNoTWFwPFJlbmRlckJveE1vZGVsT2JqZWN0KiwgUmVuZGVy
Qm94TW9kZWxTY2FsZURhdGEqPiogUmVuZGVyQm94TW9kZWxTY2FsZU9ic2VydmVyOjpnQm94TW9k
ZWxPYmplY3RzID0gMDsKLQotdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6aGlnaFF1YWxpdHlS
ZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4qKQorc3RhdGljIElt
YWdlUXVhbGl0eUNvbnRyb2xsZXIqIGltYWdlUXVhbGl0eUNvbnRyb2xsZXIoKQogewotICAgIFJl
bmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCh0
aGlzKTsKKyAgICBzdGF0aWMgSW1hZ2VRdWFsaXR5Q29udHJvbGxlciogY29udHJvbGxlciA9IG5l
dyBJbWFnZVF1YWxpdHlDb250cm9sbGVyOworICAgIHJldHVybiBjb250cm9sbGVyOwogfQogCiB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0
ZSBzKQpAQCAtMjAzLDYgKzE2MCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRT
ZWxlY3Rpb25TCiAgICAgICAgIGNiLT5zZXRTZWxlY3Rpb25TdGF0ZShzKTsKIH0KIAorYm9vbCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
cmV0dXJuIGltYWdlUXVhbGl0eUNvbnRyb2xsZXIoKS0+c2hvdWxkUGFpbnRBdExvd1F1YWxpdHko
Y29udGV4dCwgdGhpcywgaW1hZ2UsIHNpemUpOworfQogCiBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
UmVuZGVyQm94TW9kZWxPYmplY3QoTm9kZSogbm9kZSkKICAgICA6IFJlbmRlck9iamVjdChub2Rl
KQpAQCAtMjE1LDcgKzE3Niw3IEBAIFJlbmRlckJveE1vZGVsT2JqZWN0Ojp+UmVuZGVyQm94TW9k
ZWxPYmoKICAgICAvLyBPdXIgbGF5ZXIgc2hvdWxkIGhhdmUgYmVlbiBkZXN0cm95ZWQgYW5kIGNs
ZWFyZWQgYnkgbm93CiAgICAgQVNTRVJUKCFoYXNMYXllcigpKTsKICAgICBBU1NFUlQoIW1fbGF5
ZXIpOwotICAgIFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6Ym94TW9kZWxPYmplY3REZXN0
cm95ZWQodGhpcyk7CisgICAgaW1hZ2VRdWFsaXR5Q29udHJvbGxlcigpLT5vYmplY3REZXN0cm95
ZWQodGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRlc3Ryb3lMYXllcigp
CkBAIC00NjQsNyArNDI1LDYgQEAgaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nUmln
aHQoYgogICAgIHJldHVybiBwYWRkaW5nLmNhbGNNaW5WYWx1ZSh3KTsKIH0KIAotCiB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgYywgY29uc3QgRmlsbExheWVyKiBiZ0xheWVyLCBp
bnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBJbmxpbmVGbG93Qm94KiBib3gsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpCiB7CiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CkBAIC02MzEsNyArNTkx
LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AgPSBvcCA9PSBDb21wb3NpdGVTb3VyY2VP
dmVyID8gYmdMYXllci0+Y29tcG9zaXRlKCkgOiBvcDsKICAgICAgICAgICAgIFJlbmRlck9iamVj
dCogY2xpZW50Rm9yQmFja2dyb3VuZEltYWdlID0gYmFja2dyb3VuZE9iamVjdCA/IGJhY2tncm91
bmRPYmplY3QgOiB0aGlzOwogICAgICAgICAgICAgSW1hZ2UqIGltYWdlID0gYmctPmltYWdlKGNs
aWVudEZvckJhY2tncm91bmRJbWFnZSwgdGlsZVNpemUpOwotICAgICAgICAgICAgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGluZyA9IFJlbmRlckJveE1vZGVsU2NhbGVPYnNlcnZlcjo6c2hvdWxkUGFp
bnRCYWNrZ3JvdW5kQXRMb3dRdWFsaXR5KGNvbnRleHQsIHRoaXMsIGltYWdlLCB0aWxlU2l6ZSk7
CisgICAgICAgICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gc2hvdWxkUGFpbnRBdExv
d1F1YWxpdHkoY29udGV4dCwgaW1hZ2UsIHRpbGVTaXplKTsKICAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdUaWxlZEltYWdlKGltYWdlLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIGRlc3RSZWN0LCBw
aGFzZSwgdGlsZVNpemUsIGNvbXBvc2l0ZU9wLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgJKHJldmlzaW9uIDYxMzM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0xMDcsNiArMTA4LDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZv
aWQgY2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkoY29uc3QgRmlsbExheWVyKiwgaW50
IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwgSW50UmVjdCYgZGVzdFJlY3QsIEludFBvaW50JiBw
aGFzZSwgSW50U2l6ZSYgdGlsZVNpemUpOwogCisgICAgYm9vbCBzaG91bGRQYWludEF0TG93UXVh
bGl0eShHcmFwaGljc0NvbnRleHQqLCBJbWFnZSosIGNvbnN0IEludFNpemUmKTsKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNCb3hNb2RlbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gNjEzMzgp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUsNiArNSw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
IChrZGVAY2FyZXdvbGYuY29tKQogICogICAgICAgICAgIChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
KHNhbS53ZWluaWdAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MiwxMzMgKzUzLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZG91YmxlIGNJbnRlcnBv
bGF0aW9uQ3V0b2ZmID0gODAwLiAqIDgwMC47Ci1zdGF0aWMgY29uc3QgZG91YmxlIGNMb3dRdWFs
aXR5VGltZVRocmVzaG9sZCA9IDAuMDUwOyAvLyA1MCBtcwotCi1jbGFzcyBSZW5kZXJJbWFnZVNj
YWxlRGF0YSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVySW1hZ2VT
Y2FsZURhdGEoUmVuZGVySW1hZ2UqIGltYWdlLCBjb25zdCBJbnRTaXplJiBzaXplLCBkb3VibGUg
dGltZSwgYm9vbCBsb3dRdWFsaXR5U2NhbGUpCi0gICAgICAgIDogbV9zaXplKHNpemUpCi0gICAg
ICAgICwgbV90aW1lKHRpbWUpCi0gICAgICAgICwgbV9sb3dRdWFsaXR5U2NhbGUobG93UXVhbGl0
eVNjYWxlKQotICAgICAgICAsIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXIoaW1hZ2UsICZSZW5k
ZXJJbWFnZTo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgflJlbmRlckltYWdlU2NhbGVEYXRhKCkKLSAgICB7Ci0gICAgICAgIG1faGlnaFF1YWxpdHlS
ZXBhaW50VGltZXIuc3RvcCgpOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBJbnRTaXplJiBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgZG91YmxlIHRpbWUoKSBjb25zdCB7IHJl
dHVybiBtX3RpbWU7IH0KLSAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG93UXVhbGl0eVNjYWxlOyB9Ci0gICAgVGltZXI8UmVuZGVySW1hZ2U+JiBoaXFoUXVh
bGl0eVJlcGFpbnRUaW1lcigpIHsgcmV0dXJuIG1faGlnaFF1YWxpdHlSZXBhaW50VGltZXI7IH0K
LQotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzKSB7IG1fc2l6ZSA9IHM7IH0KLSAg
ICB2b2lkIHNldFRpbWUoZG91YmxlIHQpIHsgbV90aW1lID0gdDsgfQotICAgIHZvaWQgc2V0VXNl
TG93UXVhbGl0eVNjYWxlKGJvb2wgYikKLSAgICB7Ci0gICAgICAgIG1faGlnaFF1YWxpdHlSZXBh
aW50VGltZXIuc3RvcCgpOwotICAgICAgICBtX2xvd1F1YWxpdHlTY2FsZSA9IGI7Ci0gICAgICAg
IGlmIChiKQotICAgICAgICAgICAgbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1lci5zdGFydE9uZVNo
b3QoY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAg
IEludFNpemUgbV9zaXplOwotICAgIGRvdWJsZSBtX3RpbWU7Ci0gICAgYm9vbCBtX2xvd1F1YWxp
dHlTY2FsZTsKLSAgICBUaW1lcjxSZW5kZXJJbWFnZT4gbV9oaWdoUXVhbGl0eVJlcGFpbnRUaW1l
cjsKLX07Ci0KLWNsYXNzIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIGJvb2wgc2hvdWxkSW1hZ2VQYWludEF0TG93UXVhbGl0eShSZW5kZXJJbWFnZSosIGNv
bnN0IEludFNpemUmKTsKLQotICAgIHN0YXRpYyB2b2lkIGltYWdlRGVzdHJveWVkKFJlbmRlcklt
YWdlKiBpbWFnZSkKLSAgICB7Ci0gICAgICAgIGlmIChnSW1hZ2VzKSB7Ci0gICAgICAgICAgICBS
ZW5kZXJJbWFnZVNjYWxlRGF0YSogZGF0YSA9IGdJbWFnZXMtPnRha2UoaW1hZ2UpOwotICAgICAg
ICAgICAgZGVsZXRlIGRhdGE7Ci0gICAgICAgICAgICBpZiAoZ0ltYWdlcy0+c2l6ZSgpID09IDAp
IHsKLSAgICAgICAgICAgICAgICBkZWxldGUgZ0ltYWdlczsKLSAgICAgICAgICAgICAgICBnSW1h
Z2VzID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGF0
aWMgdm9pZCBoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFJlbmRlckltYWdlKiBpbWFnZSkK
LSAgICB7Ci0gICAgICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aW1hZ2VEZXN0cm95ZWQo
aW1hZ2UpOwotICAgICAgICBpbWFnZS0+cmVwYWludCgpOwotICAgIH0KLSAgICAKLSAgICBzdGF0
aWMgSGFzaE1hcDxSZW5kZXJJbWFnZSosIFJlbmRlckltYWdlU2NhbGVEYXRhKj4qIGdJbWFnZXM7
Ci19OwotCi1ib29sIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxkSW1hZ2VQYWludEF0
TG93UXVhbGl0eShSZW5kZXJJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0g
ICAgLy8gSWYgdGhlIGltYWdlIGlzIG5vdCBhIGJpdG1hcCBpbWFnZSwgdGhlbiBub25lIG9mIHRo
aXMgaXMgcmVsZXZhbnQgYW5kIHdlIGp1c3QgcGFpbnQgYXQgaGlnaAotICAgIC8vIHF1YWxpdHku
Ci0gICAgaWYgKCFpbWFnZS0+aW1hZ2UoKSB8fCAhaW1hZ2UtPmltYWdlKCktPmlzQml0bWFwSW1h
Z2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTWFrZSBzdXJlIHRvIHVzZSB0
aGUgdW56b29tZWQgaW1hZ2Ugc2l6ZSwgc2luY2UgaWYgYSBmdWxsIHBhZ2Ugem9vbSBpcyBpbiBl
ZmZlY3QsIHRoZSBpbWFnZQotICAgIC8vIGlzIGFjdHVhbGx5IGJlaW5nIHNjYWxlZC4KLSAgICBJ
bnRTaXplIGltYWdlU2l6ZShpbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKSwgaW1hZ2UtPmltYWdlKCkt
PmhlaWdodCgpKTsKLQotICAgIC8vIExvb2sgb3Vyc2VsdmVzIHVwIGluIHRoZSBoYXNodGFibGUu
Ci0gICAgUmVuZGVySW1hZ2VTY2FsZURhdGEqIGRhdGEgPSAwOwotICAgIGlmIChnSW1hZ2VzKQot
ICAgICAgICBkYXRhID0gZ0ltYWdlcy0+Z2V0KGltYWdlKTsKLQotICAgIGlmIChpbWFnZVNpemUg
PT0gc2l6ZSkgewotICAgICAgICAvLyBUaGVyZSBpcyBubyBzY2FsZSBpbiBlZmZlY3QuICBJZiB3
ZSBoYWQgYSBzY2FsZSBpbiBlZmZlY3QgYmVmb3JlLCB3ZSBjYW4ganVzdCBkZWxldGUgdGhpcyBk
YXRhLgotICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgZ0ltYWdlcy0+cmVtb3ZlKGlt
YWdlKTsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIGhhc2ggc2NhbGVk
IGltYWdlcyB0aGF0IGFsd2F5cyB1c2UgbG93IHF1YWxpdHkgbW9kZSB3aGVuIHRoZSBwYWdlIGRl
bWFuZHMgaXQuICBUaGlzIGlzIHRoZSBpQ2hhdCBjYXNlLgotICAgIGlmIChpbWFnZS0+ZG9jdW1l
bnQoKS0+cGFnZSgpLT5pbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRpb25Nb2RlKCkpIHsKLSAg
ICAgICAgZG91YmxlIHRvdGFsUGl4ZWxzID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihpbWFnZS0+aW1h
Z2UoKS0+d2lkdGgoKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KGltYWdlLT5pbWFnZSgpLT5oZWln
aHQoKSk7Ci0gICAgICAgIGlmICh0b3RhbFBpeGVscyA+IGNJbnRlcnBvbGF0aW9uQ3V0b2ZmKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8g
ZGF0YSB5ZXQsIHdlIHdpbGwgcGFpbnQgdGhlIGZpcnN0IHNjYWxlIGF0IGhpZ2ggcXVhbGl0eSBh
bmQgcmVjb3JkIHRoZSBwYWludCB0aW1lIGluIGNhc2UgYSBzZWNvbmQgc2NhbGUgaGFwcGVucwot
ICAgIC8vIHZlcnkgc29vbi4KLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgZGF0YSA9IG5ldyBS
ZW5kZXJJbWFnZVNjYWxlRGF0YShpbWFnZSwgc2l6ZSwgY3VycmVudFRpbWUoKSwgZmFsc2UpOwot
ICAgICAgICBpZiAoIWdJbWFnZXMpCi0gICAgICAgICAgICBnSW1hZ2VzID0gbmV3IEhhc2hNYXA8
UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFnZVNjYWxlRGF0YSo+OwotICAgICAgICBnSW1hZ2VzLT5z
ZXQoaW1hZ2UsIGRhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8g
V2UgYXJlIHNjYWxlZCwgYnV0IHdlIHBhaW50ZWQgYWxyZWFkeSBhdCB0aGlzIHNpemUsIHNvIGp1
c3Qga2VlcCB1c2luZyB3aGF0ZXZlciBtb2RlIHdlIGxhc3QgcGFpbnRlZCB3aXRoLgotICAgIGlm
IChkYXRhLT5zaXplKCkgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuIGRhdGEtPnVzZUxvd1F1YWxp
dHlTY2FsZSgpOwotCi0gICAgLy8gV2UgaGF2ZSBkYXRhIGFuZCBvdXIgc2l6ZSBqdXN0IGNoYW5n
ZWQuICBJZiB0aGlzIGNoYW5nZSBoYXBwZW5lZCBxdWlja2x5LCBnbyBpbnRvIGxvdyBxdWFsaXR5
IG1vZGUgYW5kIHRoZW4gc2V0IGEgcmVwYWludAotICAgIC8vIHRpbWVyIHRvIHBhaW50IGluIGhp
Z2ggcXVhbGl0eSBtb2RlLiAgT3RoZXJ3aXNlIGl0IGlzIG9rIHRvIGp1c3QgcGFpbnQgaW4gaGln
aCBxdWFsaXR5IG1vZGUuCi0gICAgZG91YmxlIG5ld1RpbWUgPSBjdXJyZW50VGltZSgpOwotICAg
IGRhdGEtPnNldFVzZUxvd1F1YWxpdHlTY2FsZShuZXdUaW1lIC0gZGF0YS0+dGltZSgpIDwgY0xv
d1F1YWxpdHlUaW1lVGhyZXNob2xkKTsKLSAgICBkYXRhLT5zZXRUaW1lKG5ld1RpbWUpOwotICAg
IGRhdGEtPnNldFNpemUoc2l6ZSk7Ci0gICAgcmV0dXJuIGRhdGEtPnVzZUxvd1F1YWxpdHlTY2Fs
ZSgpOwotfQotCi1IYXNoTWFwPFJlbmRlckltYWdlKiwgUmVuZGVySW1hZ2VTY2FsZURhdGEqPiog
UmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpnSW1hZ2VzID0gMDsKLQotdm9pZCBSZW5kZXJJbWFn
ZTo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJJbWFnZT4qKQotewot
ICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJl
ZCh0aGlzKTsKLX0KLQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUmVuZGVySW1hZ2U6
OlJlbmRlckltYWdlKE5vZGUqIG5vZGUpCkBAIC0xOTQsNyArNjgsNiBAQCBSZW5kZXJJbWFnZTo6
flJlbmRlckltYWdlKCkKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgbV9jYWNo
ZWRJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZl
cjo6aW1hZ2VEZXN0cm95ZWQodGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVySW1hZ2U6OnNldENhY2hl
ZEltYWdlKENhY2hlZEltYWdlKiBuZXdJbWFnZSkKQEAgLTQ4Nyw3ICszNjAsNyBAQCB2b2lkIFJl
bmRlckltYWdlOjpwYWludEludG9SZWN0KEdyYXBoaWNzCiAKICAgICBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZUVsdCA9IChub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKGltZ1RhZykpID8gc3Rh
dGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG5vZGUoKSkgOiAwOwogICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRl
T3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7Ci0gICAgYm9vbCB1c2VMb3dRdWFsaXR5
U2NhbGluZyA9IFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxkSW1hZ2VQYWludEF0TG93
UXVhbGl0eSh0aGlzLCByZWN0LnNpemUoKSk7CisgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGlu
ZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIHRoaXMtPmltYWdlKCksIHJlY3Qu
c2l6ZSgpKTsKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UocmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCByZWN0LCBjb21wb3NpdGVPcGVyYXRv
ciwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MTMzOCkK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDEwLTA2LTE3ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlbXBvcmFy
aWx5IG1vZGlmeSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgdG8gYWRkIHRlc3RzIGJyb2tlbiBieQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgyMzMKKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAx
MC0wNi0xNyAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA2MTMzOCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjkxNywzICsyOTE3LDE2NyBAQCBCVUc0NjY3NCBNQUMgOiBmYXN0L3Rva2Vu
aXplci9zY3JpcHRfZXh0CiAKIC8vIG5lZWRzIG5ldyBiYXNlbGluZSwgdHJhbnNmZXJyaW5nIG92
ZXIgZnJvbSBkb3duc3RyZWFtLgogQlVHNDY2NzQgOiBmYXN0L2pzL21pc3NpbmctdGl0bGUtZW5k
LXRhZy1qcy5odG1sID0gRkFJTAorCisvLyBUaGUgZm9sbG93aW5nIG5lZWQgdG8gYmUgcmViYXNl
bGluZWQgZHVlIHRvIGNoYW5nZSBvZiByZXNpemUgYWxnb3JpdGhtIGluCisvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgyMzMKKworQlVHX1NFTk9SQkxBTkNPIFdJ
TiBMSU5VWCA6IGNzczIuMS90MDkwNTAxLWM0MTQtZmx0LTAzLWItZy5odG1sID0gSU1BR0UKK0JV
R19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiBjc3MyLjEvdDA5MDUwMS1jNTUyNS1mbHQtbC0wMC1i
LWcuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDogY3NzMi4xL3QwOTA1
MDEtYzU1MjUtZmx0LXItMDAtYi1nLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBM
SU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTAxLmh0bWwgPSBJTUFH
RQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNr
Z3JvdW5kU2l6ZTAyLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZh
c3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTA0Lmh0bWwgPSBJTUFHRQorQlVHX1NF
Tk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6
ZTA1Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dy
b3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTA2Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNP
IFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTA3Lmh0bWwg
PSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6
ZS9iYWNrZ3JvdW5kU2l6ZTA4Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5V
WCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTA5Lmh0bWwgPSBJTUFHRQor
QlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3Jv
dW5kU2l6ZTEwLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3Qv
YmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTExLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9S
QkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTEy
Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3Vu
ZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTEzLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJ
TiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTE0Lmh0bWwgPSBJ
TUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9i
YWNrZ3JvdW5kU2l6ZTE1Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6
IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTE2Lmh0bWwgPSBJTUFHRQorQlVH
X1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5k
U2l6ZTE3Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFj
a2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTE4Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxB
TkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTE5Lmh0
bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMv
c2l6ZS9iYWNrZ3JvdW5kU2l6ZTIwLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBM
SU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTIxLmh0bWwgPSBJTUFH
RQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNr
Z3JvdW5kU2l6ZTIyLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZh
c3QvYmxvY2svcG9zaXRpb25pbmcvcmVwbGFjZWQtaW5zaWRlLWZpeGVkLXRvcC1ib3R0b20uaHRt
bCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDogZmFzdC9jc3MvdmFsdWUtbGlz
dC1vdXQtb2YtYm91bmRzLWNyYXNoLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBM
SU5VWCA6IGZhc3QvZXZlbnRzL3BvaW50ZXItZXZlbnRzLTIuaHRtbCA9IElNQUdFCitCVUdfU0VO
T1JCTEFOQ08gV0lOIExJTlVYIDogZmFzdC9mb3Jtcy9pbnB1dC10eXBlLWNoYW5nZS5odG1sID0g
SU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiBmYXN0L3JlcGxhY2VkL2Fic29sdXRl
LWltYWdlLXNpemluZy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiBm
YXN0L3JlcGxhY2VkL2ltYWdlLXNpemluZy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBX
SU4gTElOVVggOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1ZzEwMTY3NC5odG1sID0gSU1BR0UKK0JV
R19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1ZzExMDI2Lmh0
bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL2J1
Z3MvYnVnMTE4OC5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJs
ZXMvbW96aWxsYS9idWdzL2J1ZzEyOTYuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lO
IExJTlVYIDogdGFibGVzL21vemlsbGEvYnVncy9idWcxNDMwLmh0bWwgPSBJTUFHRQorQlVHX1NF
Tk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnMTQ5MjkuaHRtbCA9
IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDogdGFibGVzL21vemlsbGEvYnVncy9i
dWcxNTU0NC5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJsZXMv
bW96aWxsYS9idWdzL2J1ZzI5ODEtMi5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4g
TElOVVggOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1ZzQwOTMuaHRtbCA9IElNQUdFCitCVUdfU0VO
T1JCTEFOQ08gV0lOIExJTlVYIDogdGFibGVzL21vemlsbGEvYnVncy9idWc0Mjg0Lmh0bWwgPSBJ
TUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVn
NDQyNy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJsZXMvbW96
aWxsYS9idWdzL2J1ZzU2NTYzLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5V
WCA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnNjI1Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxB
TkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnNjQwNC5odG1sID0gSU1BR0UK
K0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1Zzk3Mzgz
Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxh
L2NvcmUvYmxvb21iZXJnLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6
IHRhYmxlcy9tb3ppbGxhL2NvcmUvY29sX3dpZHRoc19hdXRvX2F1dG9GaXguaHRtbCA9IElNQUdF
CitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDogdGFibGVzL21vemlsbGEvY29yZS9taXNjLmh0
bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL21h
cnZpbi90Ym9keV92YWxpZ25fYmFzZWxpbmUuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08g
V0lOIExJTlVYIDogdGFibGVzL21vemlsbGEvbWFydmluL3Rib2R5X3ZhbGlnbl9ib3R0b20uaHRt
bCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDogdGFibGVzL21vemlsbGEvbWFy
dmluL3Rib2R5X3ZhbGlnbl9taWRkbGUuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lO
IExJTlVYIDogdGFibGVzL21vemlsbGEvbWFydmluL3Rib2R5X3ZhbGlnbl90b3AuaHRtbCA9IElN
QUdFCitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDogdGFibGVzL21vemlsbGEvbWFydmluL3Rk
X3ZhbGlnbl9iYXNlbGluZS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVgg
OiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGRfdmFsaWduX2JvdHRvbS5odG1sID0gSU1BR0UKK0JV
R19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGRfdmFsaWdu
X21pZGRsZS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJsZXMv
bW96aWxsYS9tYXJ2aW4vdGRfdmFsaWduX3RvcC5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5D
TyBXSU4gTElOVVggOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGZvb3RfdmFsaWduX2Jhc2VsaW5l
Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxh
L21hcnZpbi90Zm9vdF92YWxpZ25fYm90dG9tLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNP
IFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL21hcnZpbi90Zm9vdF92YWxpZ25fbWlkZGxlLmh0
bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL21h
cnZpbi90Zm9vdF92YWxpZ25fdG9wLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBM
SU5VWCA6IHRhYmxlcy9tb3ppbGxhL21hcnZpbi90aF92YWxpZ25fYmFzZWxpbmUuaHRtbCA9IElN
QUdFCitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDogdGFibGVzL21vemlsbGEvbWFydmluL3Ro
X3ZhbGlnbl9ib3R0b20uaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDog
dGFibGVzL21vemlsbGEvbWFydmluL3RoX3ZhbGlnbl9taWRkbGUuaHRtbCA9IElNQUdFCitCVUdf
U0VOT1JCTEFOQ08gV0lOIExJTlVYIDogdGFibGVzL21vemlsbGEvbWFydmluL3RoX3ZhbGlnbl90
b3AuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lOIExJTlVYIDogdGFibGVzL21vemls
bGEvbWFydmluL3RoZWFkX3ZhbGlnbl9iYXNlbGluZS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJM
QU5DTyBXSU4gTElOVVggOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGhlYWRfdmFsaWduX2JvdHRv
bS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJsZXMvbW96aWxs
YS9tYXJ2aW4vdGhlYWRfdmFsaWduX21pZGRsZS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5D
TyBXSU4gTElOVVggOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGhlYWRfdmFsaWduX3RvcC5odG1s
ID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiB0YWJsZXMvbW96aWxsYS9tYXJ2
aW4vdHJfdmFsaWduX2Jhc2VsaW5lLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBM
SU5VWCA6IHRhYmxlcy9tb3ppbGxhL21hcnZpbi90cl92YWxpZ25fYm90dG9tLmh0bWwgPSBJTUFH
RQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL21hcnZpbi90cl92
YWxpZ25fbWlkZGxlLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRh
Ymxlcy9tb3ppbGxhL21hcnZpbi90cl92YWxpZ25fdG9wLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9S
QkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhL290aGVyL2NlbGxfd2lkdGhzLmh0bWwg
PSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhX2V4cGVj
dGVkX2ZhaWx1cmVzL2J1Z3MvOTc2MTkuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gV0lO
IExJTlVYIDogdGFibGVzL21vemlsbGFfZXhwZWN0ZWRfZmFpbHVyZXMvYnVncy9idWc2OTMzLmh0
bWwgPSBJTUFHRQorCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogY3NzMi4xL3QwODA0LWM1NTEwLXBh
ZG4tMDAtYi1hZy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBjc3MyLjEvdDA5
MDUtYzQxNC1mbHQtMDEtZC1nLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IGNz
czIuMS90MDkwNTAxLWM0MTQtZmx0LTAyLWQtZy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5D
TyBNQUMgOiBjc3MyLjEvdDA5MDUwMS1jNDE0LWZsdC0wMy1iLWcuaHRtbCA9IElNQUdFCitCVUdf
U0VOT1JCTEFOQ08gTUFDIDogY3NzMi4xL3QwOTA1MDEtYzQxNC1mbHQtbG4tMDEtZC1nLmh0bWwg
PSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IGNzczIuMS90MDkwNTAxLWM1NTI1LWZsdC1s
LTAwLWItZy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBjc3MyLjEvdDA5MDUw
MS1jNTUyNS1mbHQtci0wMC1iLWcuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDog
Y3NzMi4xL3QxMDAzMDQtYzQzLXJwbC1iYngtMDAtZC1nLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9S
QkxBTkNPIE1BQyA6IGNzczIuMS90MTAwMzA0LWM0My1ycGwtYmJ4LTAxLWQtZy5odG1sID0gSU1B
R0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBjc3MyLjEvdDEwMDQtYzU1MjQtd2lkdGgtMDAtYi1n
Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IGNzczIuMS90MTAwODAxLWM1NDQt
dmFsZ24tMDItZC1hZ2kuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogY3NzMi4x
L3QxMDA4MDEtYzU0NC12YWxnbi0wMy1kLWFnaS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5D
TyBNQUMgOiBjc3MyLjEvdDEwMDgwMS1jNTQ0LXZhbGduLTA0LWQtYWdpLmh0bWwgPSBJTUFHRQor
QlVHX1NFTk9SQkxBTkNPIE1BQyA6IGZhc3QvYmFja2dyb3VuZHMvcmVwZWF0L21hc2stbmVnYXRp
dmUtb2Zmc2V0LXJlcGVhdC5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0
L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUwMS5odG1sID0gSU1BR0UKK0JVR19TRU5P
UkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUwNS5odG1s
ID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFj
a2dyb3VuZFNpemUwNi5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2Jh
Y2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUwNy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJM
QU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUwOC5odG1sID0g
SU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dy
b3VuZFNpemUwOS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tn
cm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUxMC5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5D
TyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUxMS5odG1sID0gSU1B
R0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3Vu
ZFNpemUxMi5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91
bmRzL3NpemUvYmFja2dyb3VuZFNpemUxNi5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBN
QUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUxNy5odG1sID0gSU1BR0UK
K0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNp
emUxOC5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRz
L3NpemUvYmFja2dyb3VuZFNpemUxOS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMg
OiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUyMC5odG1sID0gSU1BR0UKK0JV
R19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUvYmFja2dyb3VuZFNpemUy
MS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3Np
emUvYmFja2dyb3VuZFNpemUyMi5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBm
YXN0L2JhY2tncm91bmRzL3NpemUvemVyby5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBN
QUMgOiBmYXN0L2Jsb2NrL3Bvc2l0aW9uaW5nL3JlcGxhY2VkLWluc2lkZS1maXhlZC10b3AtYm90
dG9tLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IGZhc3QvY2FudmFzL2NhbnZh
cy1hcy1pbWFnZS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L2Nzcy92
YWx1ZS1saXN0LW91dC1vZi1ib3VuZHMtY3Jhc2guaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFO
Q08gTUFDIDogZmFzdC9mb3Jtcy9pbnB1dC10eXBlLWNoYW5nZS5odG1sID0gSU1BR0UKK0JVR19T
RU5PUkJMQU5DTyBNQUMgOiBmYXN0L3JlcGxhY2VkLzAwMS5odG1sID0gSU1BR0UKK0JVR19TRU5P
UkJMQU5DTyBNQUMgOiBmYXN0L3JlcGxhY2VkLzAwMi5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJM
QU5DTyBNQUMgOiBmYXN0L3JlcGxhY2VkLzAwMy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5D
TyBNQUMgOiBmYXN0L3JlcGxhY2VkL2Fic29sdXRlLWltYWdlLXNpemluZy5odG1sID0gSU1BR0UK
K0JVR19TRU5PUkJMQU5DTyBNQUMgOiBmYXN0L3JlcGxhY2VkL2ltYWdlLXNpemluZy5odG1sID0g
SU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1ZzExMDI2
Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL2J1Z3Mv
YnVnMTE4OC5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxs
YS9idWdzL2J1ZzEyOTYuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogdGFibGVz
L21vemlsbGEvYnVncy9idWcxNDMwLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6
IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnMTQ5MjkuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFO
Q08gTUFDIDogdGFibGVzL21vemlsbGEvYnVncy9idWcxNTU0NC5odG1sID0gSU1BR0UKK0JVR19T
RU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1ZzIzMjM1Lmh0bWwgPSBJTUFH
RQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnMjk4MS0yLmh0
bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVn
NDA5My5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9i
dWdzL2J1ZzQyODQuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogdGFibGVzL21v
emlsbGEvYnVncy9idWc0NDI3Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRh
Ymxlcy9tb3ppbGxhL2J1Z3MvYnVnNDUyMy5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBN
QUMgOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1ZzU2NTYzLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9S
QkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnNjQwNC5odG1sID0gSU1BR0UKK0JV
R19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1Zzg2NzA4Lmh0bWwgPSBJ
TUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnOTczODMu
aHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogdGFibGVzL21vemlsbGEvY29yZS9j
b2xfd2lkdGhzX2F1dG9fYXV0b0ZpeC5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMg
OiB0YWJsZXMvbW96aWxsYS9jb3JlL21pc2MuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08g
TUFDIDogdGFibGVzL21vemlsbGEvbWFydmluL3Rib2R5X3ZhbGlnbl9iYXNlbGluZS5odG1sID0g
SU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGJvZHlf
dmFsaWduX2JvdHRvbS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMv
bW96aWxsYS9tYXJ2aW4vdGJvZHlfdmFsaWduX21pZGRsZS5odG1sID0gSU1BR0UKK0JVR19TRU5P
UkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGJvZHlfdmFsaWduX3RvcC5odG1s
ID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGRf
dmFsaWduX2Jhc2VsaW5lLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxl
cy9tb3ppbGxhL21hcnZpbi90ZF92YWxpZ25fYm90dG9tLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9S
QkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL21hcnZpbi90ZF92YWxpZ25fbWlkZGxlLmh0bWwg
PSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL21hcnZpbi90ZF92
YWxpZ25fdG9wLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxlcy9tb3pp
bGxhL21hcnZpbi90Zm9vdF92YWxpZ25fYmFzZWxpbmUuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JC
TEFOQ08gTUFDIDogdGFibGVzL21vemlsbGEvbWFydmluL3Rmb290X3ZhbGlnbl9ib3R0b20uaHRt
bCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogdGFibGVzL21vemlsbGEvbWFydmluL3Rm
b290X3ZhbGlnbl9taWRkbGUuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogdGFi
bGVzL21vemlsbGEvbWFydmluL3Rmb290X3ZhbGlnbl90b3AuaHRtbCA9IElNQUdFCitCVUdfU0VO
T1JCTEFOQ08gTUFDIDogdGFibGVzL21vemlsbGEvbWFydmluL3RoX3ZhbGlnbl9iYXNlbGluZS5o
dG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4v
dGhfdmFsaWduX2JvdHRvbS5odG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJs
ZXMvbW96aWxsYS9tYXJ2aW4vdGhfdmFsaWduX21pZGRsZS5odG1sID0gSU1BR0UKK0JVR19TRU5P
UkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGhfdmFsaWduX3RvcC5odG1sID0g
SU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYS9tYXJ2aW4vdGhlYWRf
dmFsaWduX2Jhc2VsaW5lLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxl
cy9tb3ppbGxhL21hcnZpbi90aGVhZF92YWxpZ25fYm90dG9tLmh0bWwgPSBJTUFHRQorQlVHX1NF
Tk9SQkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL21hcnZpbi90aGVhZF92YWxpZ25fbWlkZGxl
Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRhYmxlcy9tb3ppbGxhL21hcnZp
bi90aGVhZF92YWxpZ25fdG9wLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIE1BQyA6IHRh
Ymxlcy9tb3ppbGxhL21hcnZpbi90cl92YWxpZ25fYmFzZWxpbmUuaHRtbCA9IElNQUdFCitCVUdf
U0VOT1JCTEFOQ08gTUFDIDogdGFibGVzL21vemlsbGEvbWFydmluL3RyX3ZhbGlnbl9ib3R0b20u
aHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogdGFibGVzL21vemlsbGEvbWFydmlu
L3RyX3ZhbGlnbl9taWRkbGUuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JCTEFOQ08gTUFDIDogdGFi
bGVzL21vemlsbGEvbWFydmluL3RyX3ZhbGlnbl90b3AuaHRtbCA9IElNQUdFCitCVUdfU0VOT1JC
TEFOQ08gTUFDIDogdGFibGVzL21vemlsbGFfZXhwZWN0ZWRfZmFpbHVyZXMvYnVncy85NzYxOS5o
dG1sID0gSU1BR0UKK0JVR19TRU5PUkJMQU5DTyBNQUMgOiB0YWJsZXMvbW96aWxsYV9leHBlY3Rl
ZF9mYWlsdXJlcy9idWdzL2J1ZzY5MzMuaHRtbCA9IElNQUdFCg==
</data>
<flag name="review"
          id="45609"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>