<?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>175890</bug_id>
          
          <creation_ts>2017-08-23 10:40:23 -0700</creation_ts>
          <short_desc>Image data should be coalesced if it comes in small chunks before updating the ImageSource</short_desc>
          <delta_ts>2017-10-09 17:07:53 -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>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=178020</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1341609</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-23 10:40:23 -0700</bug_when>
    <thetext>1. Open https://www.nasa.gov/sites/default/files/thumbnails/image/pia21778.png

Results: On fast machine and fast network, the page finishes loading after seven seconds. On a slow network, the page can finish loading after five minutes.

NOTE: The size of this image is 45MB. When loading it, the server sends it in a small chunks, each chunk is less than 1MB. The networking process receives all the data within normal duration. For example on a fast network, the whole image data is received in less than a second. The problem is having to repeat the following steps with each chunk of data:

-- The new data chunk is added to a SharedBuffer.
-- CachedImage sets its BitmapImage with the new data which asks the SharedBuffer to create a CFData. Creating a CFData requires all the segments of the SharedBuffer to be combined in one single buffer.
-- BitmapImage sets the new data to its ImageSource which passes it to its ImageDecoder.
-- CachedImage notifies its clients that new data chunk has arrived. The image renderer, which is one of the CachedImage&apos;s clients, will repaint itself. This will cause the image to be drawn which will request the ImageDecoder to decode the image frame.

It turns out running theses steps is extremely expensive if they have to be repeated many times because a large image receives its data in small chunks. The solution can be coalescing the number of updates based on time, i.e. updating the ImageSource only after certain period of time. This period of time increases as long as the images has not finished loading.

This strategy has been working for iOS; see ImageSource::dataChanged(). We need to enable this strategy for all platforms. In the current iOS solution, ImageSource coalesces how many times it updates the ImageDecoder with the new data. But CachedImage still causes the image renderer to repaint itself even though the Image itself does not change. We need to fix this for all platforms including iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341635</commentid>
    <comment_count>1</comment_count>
      <attachid>318886</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-23 10:52:14 -0700</bug_when>
    <thetext>Created attachment 318886
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341638</commentid>
    <comment_count>2</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-23 10:53:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/33963003&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341864</commentid>
    <comment_count>3</comment_count>
      <attachid>318886</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-08-23 16:32:01 -0700</bug_when>
    <thetext>Comment on attachment 318886
Patch

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

&gt; Source/WebCore/loader/cache/CachedImage.cpp:450
&gt; +    ASSERT(m_coalesceDataCount &lt; coalesceDataSeconds.get().size());

This assert seems super unnecessary especially now that it&apos;s a Vector instead of a C array.

&gt; Source/WebCore/loader/cache/CachedImage.cpp:455
&gt; +    m_coalesceDataCount = std::min&lt;unsigned&gt;(m_coalesceDataCount + 1, coalesceDataSeconds.get().size() - 1);

Isn&apos;t this just a silly way of writing:

if (m_coalesceDataCount &lt; coalesceDataSeconds.get().size() - 1)
    m_coalesceDataCount++;

Also, is that the best name? Since we cap it based on the number of items in the durations array, it&apos;s more of an index into that array than a count of times we coalesced.

&gt; Source/WebCore/loader/cache/CachedImage.cpp:468
&gt; +    if (shouldCoalesceDataBuffer())
&gt; +        return;

I&apos;m confused. How does this not result in the data getting dropped on the floor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342135</commentid>
    <comment_count>4</comment_count>
      <attachid>319013</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-24 12:48:23 -0700</bug_when>
    <thetext>Created attachment 319013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342161</commentid>
    <comment_count>5</comment_count>
      <attachid>318886</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-24 14:24:53 -0700</bug_when>
    <thetext>Comment on attachment 318886
Patch

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

&gt;&gt; Source/WebCore/loader/cache/CachedImage.cpp:450
&gt;&gt; +    ASSERT(m_coalesceDataCount &lt; coalesceDataSeconds.get().size());
&gt; 
&gt; This assert seems super unnecessary especially now that it&apos;s a Vector instead of a C array.

I am not sure if I agree with that. What is the difference between accessing a Vector and a C array with an out-of-bound index? I wanted to ensure that the index does not change outside the scope of this function such that it is larger than the last index in the Vector. But anyway I removed it.

&gt;&gt; Source/WebCore/loader/cache/CachedImage.cpp:455
&gt;&gt; +    m_coalesceDataCount = std::min&lt;unsigned&gt;(m_coalesceDataCount + 1, coalesceDataSeconds.get().size() - 1);
&gt; 
&gt; Isn&apos;t this just a silly way of writing:
&gt; 
&gt; if (m_coalesceDataCount &lt; coalesceDataSeconds.get().size() - 1)
&gt;     m_coalesceDataCount++;
&gt; 
&gt; Also, is that the best name? Since we cap it based on the number of items in the durations array, it&apos;s more of an index into that array than a count of times we coalesced.

The std::min() is replaced by the if-statemnt as suggested. The Vector&apos;s name is changed to coalesceDataDurations and the index&apos;s name is changed to m_currentCoalesceDataDuration.

&gt;&gt; Source/WebCore/loader/cache/CachedImage.cpp:468
&gt;&gt; +        return;
&gt; 
&gt; I&apos;m confused. How does this not result in the data getting dropped on the floor?

It does not because the CachedRawResource passes its SharedBuffer to the CachedImage which just makes makeRef() of it. The CachedRawResource keeps accumulating all the incoming data in the same SharedBuffer. It is guaranteed that the SharedBuffer will be set in the ImageSource at least once in CachedImage::finishLoading().

My purpose of this change was to ensure the data is consistent between the CachedImage and the ImageSource. I thought as long as the ImageSource is not updated with the new data, it is better not to update the CachedImage with the new data. But after realizing that the SharedBuffer of the CachedRawResource is already referenced by the CachedImage, I think it is better to keep the old behavior which can be done by moving the check  if (shouldCoalesceDataBuffer()) to addIncrementalDataBuffer().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344529</commentid>
    <comment_count>6</comment_count>
      <attachid>319013</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-09-01 12:38:26 -0700</bug_when>
    <thetext>Comment on attachment 319013
Patch

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

&gt; Source/WebCore/loader/cache/CachedImage.cpp:449
&gt; +    static const auto coalesceDataDurations = makeNeverDestroyed(Vector&lt;double&gt; { 0, 1, 3, 6, 15 });

Vector&lt;Seconds&gt;.

makeNeverDestroyed is overkill, but I guess you might need it if static Seconds[] doesn&apos;t work.

&gt; Source/WebCore/loader/cache/CachedImage.cpp:456
&gt; +    m_coalesceDataTime = time;

A function called shouldCoalesceDataBuffer() should not change state, I think. m_coalesceDataTime should be changed when you actually do the coalescing.

&gt; Source/WebCore/loader/cache/CachedImage.h:163
&gt; +    size_t m_currentCoalesceDataDuration { 0 };

This isn&apos;t a duration, right? So the name is misleading. It&apos;s an index into some array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345085</commentid>
    <comment_count>7</comment_count>
      <attachid>319013</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 17:09:09 -0700</bug_when>
    <thetext>Comment on attachment 319013
Patch

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

&gt;&gt; Source/WebCore/loader/cache/CachedImage.cpp:449
&gt;&gt; +    static const auto coalesceDataDurations = makeNeverDestroyed(Vector&lt;double&gt; { 0, 1, 3, 6, 15 });
&gt; 
&gt; Vector&lt;Seconds&gt;.
&gt; 
&gt; makeNeverDestroyed is overkill, but I guess you might need it if static Seconds[] doesn&apos;t work.

It’s not overkill because this is a Vector and it won’t compile otherwise. If this was an array, and it should be an array instead of a vector, then we would not need makeNeverDestroyed.

    static const double coalesceDataDurations[] = { 0, 1, 3, 6, 15 };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345667</commentid>
    <comment_count>8</comment_count>
      <attachid>319942</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-09-05 15:24:34 -0700</bug_when>
    <thetext>Created attachment 319942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354649</commentid>
    <comment_count>9</comment_count>
      <attachid>319942</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-29 12:40:36 -0700</bug_when>
    <thetext>Comment on attachment 319942
Patch

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

&gt; Source/WebCore/loader/cache/CachedImage.cpp:450
&gt; +    static const double dataBufferAddingIntervals[] = { 0, 1, 3, 6, 15 };

I think this one should be more clear that it&apos;s about backoff. Maybe incrementalLoadingBackoffIntervals?

Maybe propagate that naming through all of the function/member/variable names? Right now it&apos;s kind of mysterious.

e.g.


bool CachedImage::shouldDeferIncrementalLoad() const
{
    static const double incrementalLoadingBackoffIntervals[] = { 0, 1, 3, 6, 15 };
    unsigned interval = std::min&lt;unsigned&gt;(m_incrementalLoadCount, 4);

    // The first time through, the chunk time will be 0 and the image will get an update.
    return (MonotonicTime::now() - m_lastIncrementalLoadingUpdateTime).seconds() &lt; incrementalLoadingBackoffIntervals[interval];
}

void CachedImage::didIncrementalLoad()
{
    m_lastIncrementalLoadingUpdateTime = MonotonicTime::now();
    ASSERT(m_incrementalLoadCount &lt; std::numeric_limits&lt;unsigned&gt;::max());
    ++m_incrementalLoadCount;
}


I&apos;m not totally sold on the names tho. Maybe someone else has an idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354819</commentid>
    <comment_count>10</comment_count>
      <attachid>322264</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-09-29 19:06:08 -0700</bug_when>
    <thetext>Created attachment 322264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355492</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-02 14:21:45 -0700</bug_when>
    <thetext>Would it be useful to have that kind of behavior for other types of resources? Or other related behavior like processing only when receiving the last byte?
Instead of doing it in the WebProcess, could NetworkProcess be told to adapt its pace of sending data chunks on a per load basis?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355567</commentid>
    <comment_count>12</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-10-02 15:26:00 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #11)
&gt; Would it be useful to have that kind of behavior for other types of
&gt; resources?

There is no problem in receiving the resource&apos;s bytes in small chunks. The problem with the image is updating the decoder with small chunks of data. This is costly because the ImageDecoder has to re-decode the new data. Also repainting and drawing the RenderImage every time an image data is received is expensive. 

Or other related behavior like processing only when receiving the
&gt; last byte?

No, we can&apos;t do that. We would like to show partial images instead of showing nothing till the whole image data is received.

&gt; Instead of doing it in the WebProcess, could NetworkProcess be told to adapt
&gt; its pace of sending data chunks on a per load basis?

I don&apos;t know if this solution is feasible or not. But I think dealing with this issue has to be done based on the resource types. Each resource can decide whether it needs to process any incoming data immediately or it can coalesce the number of processing the incoming data. So this decision has to be in WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355732</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-03 01:23:13 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #12)
&gt; (In reply to youenn fablet from comment #11)
&gt; &gt; Would it be useful to have that kind of behavior for other types of
&gt; &gt; resources?
&gt; 
&gt; There is no problem in receiving the resource&apos;s bytes in small chunks. The
&gt; problem with the image is updating the decoder with small chunks of data.
&gt; This is costly because the ImageDecoder has to re-decode the new data. Also
&gt; repainting and drawing the RenderImage every time an image data is received
&gt; is expensive. 

The current patch seems to fix the issue for CachedImage.
If a similar optimization can be envisioned for other types of resources, it may be better to do it at a lower layer, the CachedResource layer being responsible to decide which sending they expect.

&gt; 
&gt; Or other related behavior like processing only when receiving the
&gt; &gt; last byte?
&gt; 
&gt; No, we can&apos;t do that. We would like to show partial images instead of
&gt; showing nothing till the whole image data is received.

Sure for images, my question is more for other types of resources.

&gt; &gt; Instead of doing it in the WebProcess, could NetworkProcess be told to adapt
&gt; &gt; its pace of sending data chunks on a per load basis?
&gt; 
&gt; I don&apos;t know if this solution is feasible or not. But I think dealing with
&gt; this issue has to be done based on the resource types. Each resource can
&gt; decide whether it needs to process any incoming data immediately or it can
&gt; coalesce the number of processing the incoming data. So this decision has to
&gt; be in WebProcess.

If this issue is spanning several types of resources, it might be simpler to have CachedResource pass a parameter expressing what it is expecting.

For instance, ResourceLoader already does buffering according its dataBufferingPolicy option. Maybe extending this option would be a good way to see whether that approach would work for your use case.

If so, I would then suggest to move the buffering to NetworkProcess by passing an additional parameter to NetworkConnectionToWebProcess::ScheduleResourceLoad.
That would reduce the number of IPC calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356176</commentid>
    <comment_count>14</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-10-03 17:44:02 -0700</bug_when>
    <thetext>After looking at the code of NetworkConnectionToWebProcess, I realized that the network process implements a linear back-off buffering for the image resource. WebLoaderStrategy::scheduleLoad() sets the member maximumBufferingTime of the NetworkResourceLoadParameters to 500_ms if the resource type is CachedResource::ImageResource. NetworkConnectionToWebProcess creates a timer with 500_ms and when it fires it sends the received data to the WebProcess.

This patch implements an exponential back-off buffering. The timer interval keeps increasing till it reaches the last interval and then it uses this interval till loading the image finishes.

I agree having two buffering mechanisms the image resource is bad. I could change NetworkResourceLoadParameters::maximumBufferingTime to be a Vector&lt;Seconds&gt;. And I could change the NetworkResourceLoader to create its timers with the intervals from the Vector&lt;Seconds&gt; one after the other till the last one.

But we will have two problems:

1. This solution does not work for WK1. A similar buffering mechanism is needed for WK1 at least for iOS since the exponential buffering was implemented for iOS. We may have two solutions for this:
	a) WebCoreResourceHandleAsDelegate.didReceiveData() needs to implements the same buffering that NetworkResourceLoader implements.
	b) Keep the same buffering mechanism in ImageSource::dataChanged() but enable it for for WK1. And this is really ugly because we will have the buffering for the image in two different levels for WK1 and WK2.

2. This solution is mainly needed for ImageDocument for WK2. The bug is not noticeable when the image is included in an &lt;img&gt; element. For example open these images in Safari and notice how bad the performance is:

http://www.914world.com/bbs2/uploads_offsite/s6.postimg.org-1623-1505909118.1.gif
https://www.nasa.gov/sites/default/files/thumbnails/image/pia21778.png

Now open the same images as sub-resources, i.e. create HTML files with the following &lt;img&gt; element:

&lt;img src = &quot;http://www.914world.com/bbs2/uploads_offsite/s6.postimg.org-1623-1505909118.1.gif&quot;&gt;
and
&lt;img src = &quot;https://www.nasa.gov/sites/default/files/thumbnails/image/pia21778.png&quot;&gt;

The reason for the difference is &quot;static Seconds maximumBufferingTimes(CachedResource*)&quot; returns 500_ms for the CachedResource::ImageResource but it returns 0_s for CachedResource::MainResource. When the image is the main resource no buffering is made which is the case of the ImageDocument. But when the image is a sub-resource, updating the web process with the image data happens only every 500_ms. And this buffering is enough at least for non iOS platforms.

I do not think we can know for sure that the main resource is an image before starting loading it and parsing it. In fact, we create the ImageDocument and the ImageDocumentParse after receiving the first chunk of data.

So the buffering is is not implemented for WK1 and ImageDocument. And both are currently not handled by the NetworkProcess. And I think implementing the single image buffering in the network side for Wk1 and ImageDocument is expensive.

Having said that, I think having a single image buffering for all platforms is not in the scope of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356179</commentid>
    <comment_count>15</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-03 17:50:57 -0700</bug_when>
    <thetext>It is late for me so I may have other feedback tomorrow.

Regarding WK1, I agree that the NetworkProcess idea is not fully portable to WK1.
At this point, not optimizing WK1 might be ok if we think this is the right solution for WK2.

I would check how this idea would fly with the various way images can be loaded (main document, sub resources) and whether doing it in NetworkProcess will or not solve potential problems for other resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356195</commentid>
    <comment_count>16</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-10-03 18:20:11 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #15)
&gt; It is late for me so I may have other feedback tomorrow.
&gt; 
&gt; Regarding WK1, I agree that the NetworkProcess idea is not fully portable to
&gt; WK1.
&gt; At this point, not optimizing WK1 might be ok if we think this is the right
&gt; solution for WK2.

I disagree because the image buffering is currently implemented for WK1 on iOS in the function ImageSource::dataChanged() and we should not remove it unless we have a better way of doing it.

&gt; 
&gt; I would check how this idea would fly with the various way images can be
&gt; loaded (main document, sub resources) and whether doing it in NetworkProcess
&gt; will or not solve potential problems for other resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357690</commentid>
    <comment_count>17</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-10-06 11:51:22 -0700</bug_when>
    <thetext>I filed https://bugs.webkit.org/show_bug.cgi?id=178020 to address youenn&apos;s comments in a separate patch.

The attached patch improves the performance on WK1 for all images and on WK2 for the ImageDocument by enabling the existing backing off mechanism on all platforms. And I think we are not making anything worse. So this patch is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358265</commentid>
    <comment_count>18</comment_count>
      <attachid>322264</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-10-09 10:04:42 -0700</bug_when>
    <thetext>Comment on attachment 322264
Patch

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

&gt; Source/WebCore/loader/cache/CachedImage.cpp:411
&gt; +void CachedImage::doUpdateBuffer(SharedBuffer&amp; data)

This name is awkward. Maybe updateBufferInternal?

&gt; Source/WebCore/loader/cache/CachedImage.cpp:421
&gt; +    if (shouldDeferUpdateImageData())
&gt; +        return;
&gt; +    
&gt;      // Have the image update its data from its internal buffer.
&gt;      // It will not do anything now, but will delay decoding until

The early return after shouldDeferUpdateImageData() and then the comment which says &quot;It will not do anything now&quot; are confusing. If updateImageData don&apos;t do anything, why did we early return?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358426</commentid>
    <comment_count>19</comment_count>
      <attachid>323217</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-10-09 14:26:35 -0700</bug_when>
    <thetext>Created attachment 323217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358521</commentid>
    <comment_count>20</comment_count>
      <attachid>323217</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-09 17:07:51 -0700</bug_when>
    <thetext>Comment on attachment 323217
Patch

Clearing flags on attachment: 323217

Committed r223091: &lt;http://trac.webkit.org/changeset/223091&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358522</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-09 17:07:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318886</attachid>
            <date>2017-08-23 10:52:14 -0700</date>
            <delta_ts>2017-08-24 12:48:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175890-20170823105213.patch</filename>
            <type>text/plain</type>
            <size>6730</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTA4LTIzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1hZ2UgZGF0
YSBzaG91bGQgYmUgY29hbGVzY2VkIGlmIGl0IGNvbWVzIGluIHNtYWxsIGNodW5rcyBiZWZvcmUg
dXBkYXRpbmcgdGhlIEltYWdlU291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzU4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFbmFibGUgY29hbGVzY2luZyB0aGUgdXBkYXRlcywgYW4gSW1hZ2Ug
bWFrZXMgd2hlbiByZWNlaXZpbmcgaXRzIGRhdGEgaW4KKyAgICAgICAgc21hbGwgY2h1bmtzLCBm
b3IgYWxsIHBsYXRmb3Jtcy4gTWFrZSBzdXJlIHRoZSBjbGllbnRzIG9mIHRoZSBDYWNoZWRJbWFn
ZQorICAgICAgICB3aWxsIG5vdCBiZSBub3RpZmllZCB1bmxlc3MgYW4gdXBkYXRlIGluIHRoZSBJ
bWFnZVNvdXJjZSBoYXBwZW5zLiBFbnN1cmUKKyAgICAgICAgdGhlIGRhdGEgd2hpY2ggaXMga2Vw
dCBieSBDYWNoZWRJbWFnZSBhbmQgSW1hZ2VTb3VyY2UgaXMgdGhlIHNhbWUuCisKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
SW1hZ2U6OmNsZWFySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNob3Vs
ZENvYWxlc2NlRGF0YUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6YWRk
RGF0YUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6YWRkRGF0YSk6Cisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorCiAyMDE3LTA4LTIzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIEVuc3VyZSBtZWRpYSBjb250cm9scyBob3N0IGV4aXN0cyBiZWZvcmUgdXNpbmcgaXQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAkocmV2
aXNpb24gMjIxMDM0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDYgKzQwNSw4IEBAIGlubGluZSB2b2lkIENhY2hl
ZEltYWdlOjpjbGVhckltYWdlKCkKICAgICB9CiAKICAgICBtX2ltYWdlID0gbnVsbHB0cjsKKyAg
ICBtX2NvYWxlc2NlRGF0YVRpbWUgPSB7IH07CisgICAgbV9jb2FsZXNjZURhdGFDb3VudCA9IDA7
CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRC
dWZmZXImIGRhdGEpCkBAIC00MzksNiArNDQxLDIxIEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmFkZElu
Y3JlbWVudGFsRGF0YUJ1ZmYKICAgICBzZXRFbmNvZGVkU2l6ZShtX2ltYWdlLT5kYXRhKCkgPyBt
X2ltYWdlLT5kYXRhKCktPnNpemUoKSA6IDApOwogfQogCitib29sIENhY2hlZEltYWdlOjpzaG91
bGRDb2FsZXNjZURhdGFCdWZmZXIoKQoreworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvYWxlc2Nl
RGF0YVNlY29uZHMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPGRvdWJsZT4geyAwLCAxLCAz
LCA2LCAxNSB9KTsKKworICAgIC8vIFRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRoZSBjaHVuayB0
aW1lIHdpbGwgYmUgMCBhbmQgdGhlIGltYWdlIHdpbGwgZ2V0IGFuIHVwZGF0ZS4KKyAgICBNb25v
dG9uaWNUaW1lIHRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBBU1NFUlQobV9jb2Fs
ZXNjZURhdGFDb3VudCA8IGNvYWxlc2NlRGF0YVNlY29uZHMuZ2V0KCkuc2l6ZSgpKTsKKyAgICBp
ZiAoKHRpbWUgLSBtX2NvYWxlc2NlRGF0YVRpbWUpLnNlY29uZHMoKSA8IGNvYWxlc2NlRGF0YVNl
Y29uZHMuZ2V0KClbbV9jb2FsZXNjZURhdGFDb3VudF0pCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgbV9jb2FsZXNjZURhdGFUaW1lID0gdGltZTsKKyAgICBtX2NvYWxlc2NlRGF0YUNvdW50
ID0gc3RkOjptaW48dW5zaWduZWQ+KG1fY29hbGVzY2VEYXRhQ291bnQgKyAxLCBjb2FsZXNjZURh
dGFTZWNvbmRzLmdldCgpLnNpemUoKSAtIDEpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogRW5j
b2RlZERhdGFTdGF0dXMgQ2FjaGVkSW1hZ2U6OnNldEltYWdlRGF0YUJ1ZmZlcihTaGFyZWRCdWZm
ZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAgIHJldHVybiBtX2ltYWdlID8g
bV9pbWFnZS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpIDogRW5jb2RlZERhdGFTdGF0
dXM6OkVycm9yOwpAQCAtNDQ3LDYgKzQ2NCw4IEBAIEVuY29kZWREYXRhU3RhdHVzIENhY2hlZElt
YWdlOjpzZXRJbWFnZUQKIHZvaWQgQ2FjaGVkSW1hZ2U6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnVm
ZmVyJiBkYXRhKQogewogICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gQnVmZmVy
RGF0YSk7CisgICAgaWYgKHNob3VsZENvYWxlc2NlRGF0YUJ1ZmZlcigpKQorICAgICAgICByZXR1
cm47CiAgICAgYWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKGRhdGEpOwogICAgIENhY2hlZFJlc291
cmNlOjphZGREYXRhQnVmZmVyKGRhdGEpOwogfQpAQCAtNDU0LDYgKzQ3Myw4IEBAIHZvaWQgQ2Fj
aGVkSW1hZ2U6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnUKIHZvaWQgQ2FjaGVkSW1hZ2U6OmFkZERh
dGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVChkYXRh
QnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKTsKKyAgICBpZiAoc2hvdWxkQ29h
bGVzY2VEYXRhQnVmZmVyKCkpCisgICAgICAgIHJldHVybjsKICAgICBhZGRJbmNyZW1lbnRhbERh
dGFCdWZmZXIoU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKSk7CiAgICAgQ2FjaGVk
UmVzb3VyY2U6OmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiAyMjEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDYgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCkgb3ZlcnJpZGU7CiAKKyAgICBib29s
IHNob3VsZENvYWxlc2NlRGF0YUJ1ZmZlcigpOwogICAgIEVuY29kZWREYXRhU3RhdHVzIHNldElt
YWdlRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAg
dm9pZCBhZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBlcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzKSBvdmVycmlkZTsKQEAgLTE1
OCw2ICsxNTksOSBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPENhY2hlZEltYWdlT2JzZXJ2ZXI+
IG1faW1hZ2VPYnNlcnZlcjsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgTW9ub3Rv
bmljVGltZSBtX2NvYWxlc2NlRGF0YVRpbWU7CisgICAgdW5zaWduZWQgbV9jb2FsZXNjZURhdGFD
b3VudCB7IDAgfTsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdJbWFnZUNhY2hlPiBtX3N2Z0lt
YWdlQ2FjaGU7CiAgICAgYm9vbCBtX2lzTWFudWFsbHlDYWNoZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9zaG91bGRQYWludEJyb2tlbkltYWdlIHsgdHJ1ZSB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjIx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMzQgKzExMywxMyBAQCB2b2lkIEltYWdlU291cmNlOjpy
ZXNldERhdGEoU2hhcmVkQnVmZmVyCiAKIEVuY29kZWREYXRhU3RhdHVzIEltYWdlU291cmNlOjpk
YXRhQ2hhbmdlZChTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewot
I2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRp
bmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9hZGluZyBhbmQgbWFrZSB0aGlzCi0g
ICAgLy8gY29kZSBjb25kaXRpb25hbCBvbiBpdC4gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoZSBQTEFU
Rk9STShJT1MpLWd1YXJkLgotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgY2h1bmtMb2FkSW50ZXJ2
YWxzW10gPSB7MCwgMSwgMywgNiwgMTV9OwotICAgIGRvdWJsZSBpbnRlcnZhbCA9IGNodW5rTG9h
ZEludGVydmFsc1tzdGQ6Om1pbihtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQsIHN0YXRpY19j
YXN0PHVpbnQxNl90Pig0KSldOwotCi0gICAgYm9vbCBuZWVkc1VwZGF0ZSA9IGZhbHNlOwotCi0g
ICAgLy8gVGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhlIGNodW5rIHRpbWUgd2lsbCBiZSAwIGFu
ZCB0aGUgaW1hZ2Ugd2lsbCBnZXQgYW4gdXBkYXRlLgotICAgIGlmIChjdXJyZW50VGltZSgpIC0g
bV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgPiBpbnRlcnZhbCkgewotICAgICAgICBuZWVkc1Vw
ZGF0ZSA9IHRydWU7Ci0gICAgICAgIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lID0gY3VycmVu
dFRpbWUoKTsKLSAgICAgICAgQVNTRVJUKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpOwotICAgICAgICArK21fcHJvZ3Jl
c3NpdmVMb2FkQ2h1bmtDb3VudDsKLSAgICB9Ci0KLSAgICBpZiAobmVlZHNVcGRhdGUgfHwgYWxs
RGF0YVJlY2VpdmVkKQotICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0j
ZWxzZQogICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNlbmRpZgotCiAgICAg
bV9mcmFtZUNhY2hlLT5jbGVhck1ldGFkYXRhKCk7CisKICAgICBFbmNvZGVkRGF0YVN0YXR1cyBz
dGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygpOwotICAgIGlmIChzdGF0dXMgPCBFbmNvZGVkRGF0
YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICBpZiAo
c3RhdHVzID49IEVuY29kZWREYXRhU3RhdHVzOjpTaXplQXZhaWxhYmxlKQorICAgICAgICBtX2Zy
YW1lQ2FjaGUtPmdyb3dGcmFtZXMoKTsKIAotICAgIG1fZnJhbWVDYWNoZS0+Z3Jvd0ZyYW1lcygp
OwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkocmV2aXNpb24gMjIxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIxLDEyICsxMjEsNiBAQCBwcml2YXRlOgogCiAgICAgc3RkOjpvcHRpb25hbDxTdWJzYW1w
bGluZ0xldmVsPiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsOwogCi0jaWYgUExBVEZPUk0oSU9T
KQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlz
YWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHNvIHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZP
Uk0oSU9TKS1ndWFyZC4KLSAgICBkb3VibGUgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgeyAw
IH07Ci0gICAgdWludDE2X3QgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50IHsgMCB9OwotI2Vu
ZGlmCi0KICAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uIHsgQWxwaGFPcHRpb246OlByZW11
bHRpcGxpZWQgfTsKICAgICBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBtX2dhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uIHsgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQgfTsK
IH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319013</attachid>
            <date>2017-08-24 12:48:23 -0700</date>
            <delta_ts>2017-09-05 15:24:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175890-20170824124823.patch</filename>
            <type>text/plain</type>
            <size>6308</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTE1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTA4LTI0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1hZ2UgZGF0
YSBzaG91bGQgYmUgY29hbGVzY2VkIGlmIGl0IGNvbWVzIGluIHNtYWxsIGNodW5rcyBiZWZvcmUg
dXBkYXRpbmcgdGhlIEltYWdlU291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzU4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb2FsZXNjZSB0aGUgdXBkYXRlcywgd2hpY2ggYW4gSW1hZ2UgbWFr
ZXMgd2hlbiByZWNlaXZpbmcgZW5jb2RlZCBkYXRhIGluCisgICAgICAgIHNtYWxsIGNodW5rcywg
Zm9yIGFsbCBwbGF0Zm9ybXMuIEVuc3VyZSB0aGUgY2xpZW50cyBvZiB0aGUgQ2FjaGVkSW1hZ2UK
KyAgICAgICAgd29uJ3QgYmUgbm90aWZpZWQgdW5sZXNzIGFuIHVwZGF0ZSBpbiB0aGUgSW1hZ2VT
b3VyY2UgaGFwcGVucy4KKworICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2xlYXJJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6YWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZEltYWdlOjpzaG91bGRDb2FsZXNjZURhdGFCdWZmZXIpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpkYXRh
Q2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKwog
MjAxNy0wOC0yNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEZpeCAtV2Nhc3QtcXVhbCBhbmQgLVd1bnVzZWQtbGFtYmRhLWNhcHR1cmUgd2FybmluZ3MgaW4g
V2ViQ29yZSB3aXRoIG5ldyBjbGFuZyBjb21waWxlcgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAyMjEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MDUsNiArNDA1LDggQEAgaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFySW1hZ2UoKQogICAg
IH0KIAogICAgIG1faW1hZ2UgPSBudWxscHRyOworICAgIG1fY29hbGVzY2VEYXRhVGltZSA9IHsg
fTsKKyAgICBtX2N1cnJlbnRDb2FsZXNjZURhdGFEdXJhdGlvbiA9IDA7CiB9CiAKIHZvaWQgQ2Fj
aGVkSW1hZ2U6OmFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImIGRhdGEpCkBA
IC00MTMsNiArNDE1LDkgQEAgdm9pZCBDYWNoZWRJbWFnZTo6YWRkSW5jcmVtZW50YWxEYXRhQnVm
ZgogCiAgICAgY3JlYXRlSW1hZ2UoKTsKIAorICAgIGlmIChzaG91bGRDb2FsZXNjZURhdGFCdWZm
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gSGF2ZSB0aGUgaW1hZ2UgdXBkYXRlIGl0
cyBkYXRhIGZyb20gaXRzIGludGVybmFsIGJ1ZmZlci4KICAgICAvLyBJdCB3aWxsIG5vdCBkbyBh
bnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5IGRlY29kaW5nIHVudGlsCiAgICAgLy8gcXVlcmll
ZCBmb3IgaW5mbyAobGlrZSBzaXplIG9yIHNwZWNpZmljIGltYWdlIGZyYW1lcykuCkBAIC00Mzks
NiArNDQ0LDIxIEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmFkZEluY3JlbWVudGFsRGF0YUJ1ZmYKICAg
ICBzZXRFbmNvZGVkU2l6ZShtX2ltYWdlLT5kYXRhKCkgPyBtX2ltYWdlLT5kYXRhKCktPnNpemUo
KSA6IDApOwogfQogCitib29sIENhY2hlZEltYWdlOjpzaG91bGRDb2FsZXNjZURhdGFCdWZmZXIo
KQoreworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvYWxlc2NlRGF0YUR1cmF0aW9ucyA9IG1ha2VO
ZXZlckRlc3Ryb3llZChWZWN0b3I8ZG91YmxlPiB7IDAsIDEsIDMsIDYsIDE1IH0pOworCisgICAg
Ly8gVGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhlIGNodW5rIHRpbWUgd2lsbCBiZSAwIGFuZCB0
aGUgaW1hZ2Ugd2lsbCBnZXQgYW4gdXBkYXRlLgorICAgIE1vbm90b25pY1RpbWUgdGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOworICAgIGlmICgodGltZSAtIG1fY29hbGVzY2VEYXRhVGltZSku
c2Vjb25kcygpIDwgY29hbGVzY2VEYXRhRHVyYXRpb25zLmdldCgpW21fY3VycmVudENvYWxlc2Nl
RGF0YUR1cmF0aW9uXSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2NvYWxlc2NlRGF0
YVRpbWUgPSB0aW1lOworICAgIGlmIChtX2N1cnJlbnRDb2FsZXNjZURhdGFEdXJhdGlvbiA8IGNv
YWxlc2NlRGF0YUR1cmF0aW9ucy5nZXQoKS5zaXplKCkgLSAxKQorICAgICAgICArK21fY3VycmVu
dENvYWxlc2NlRGF0YUR1cmF0aW9uOworICAgIHJldHVybiBmYWxzZTsKK30KKwogRW5jb2RlZERh
dGFTdGF0dXMgQ2FjaGVkSW1hZ2U6OnNldEltYWdlRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAgIHJldHVybiBtX2ltYWdlID8gbV9pbWFn
ZS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpIDogRW5jb2RlZERhdGFTdGF0dXM6OkVy
cm9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHJl
dmlzaW9uIDIyMTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFsbENsaWVudHNSZW1vdmVkKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95RGVjb2RlZERh
dGEoKSBvdmVycmlkZTsKIAorICAgIGJvb2wgc2hvdWxkQ29hbGVzY2VEYXRhQnVmZmVyKCk7CiAg
ICAgRW5jb2RlZERhdGFTdGF0dXMgc2V0SW1hZ2VEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciosIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKSBvdmVycmlkZTsKICAgICB2b2lkIGVycm9yKENhY2hlZFJlc291cmNl
OjpTdGF0dXMpIG92ZXJyaWRlOwpAQCAtMTU4LDYgKzE1OSw5IEBAIHByaXZhdGU6CiAKICAgICBS
ZWZQdHI8Q2FjaGVkSW1hZ2VPYnNlcnZlcj4gbV9pbWFnZU9ic2VydmVyOwogICAgIFJlZlB0cjxJ
bWFnZT4gbV9pbWFnZTsKKyAgICBNb25vdG9uaWNUaW1lIG1fY29hbGVzY2VEYXRhVGltZTsKKyAg
ICBzaXplX3QgbV9jdXJyZW50Q29hbGVzY2VEYXRhRHVyYXRpb24geyAwIH07CisKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U1ZHSW1hZ2VDYWNoZT4gbV9zdmdJbWFnZUNhY2hlOwogICAgIGJvb2wgbV9p
c01hbnVhbGx5Q2FjaGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkUGFpbnRCcm9rZW5J
bWFnZSB7IHRydWUgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIyMTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDM0ICsxMTMsMTMgQEAgdm9pZCBJbWFnZVNvdXJjZTo6cmVzZXREYXRhKFNoYXJlZEJ1ZmZlcgog
CiBFbmNvZGVkRGF0YVN0YXR1cyBJbWFnZVNvdXJjZTo6ZGF0YUNoYW5nZWQoU2hhcmVkQnVmZmVy
KiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSNpZiBQTEFURk9STShJT1MpCi0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHBy
b2dyZXNzaXZlIGxvYWRpbmcgYW5kIG1ha2UgdGhpcwotICAgIC8vIGNvZGUgY29uZGl0aW9uYWwg
b24gaXQuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KLSAgICBz
dGF0aWMgY29uc3QgZG91YmxlIGNodW5rTG9hZEludGVydmFsc1tdID0gezAsIDEsIDMsIDYsIDE1
fTsKLSAgICBkb3VibGUgaW50ZXJ2YWwgPSBjaHVua0xvYWRJbnRlcnZhbHNbc3RkOjptaW4obV9w
cm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50LCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oNCkpXTsKLQot
ICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKLQotICAgIC8vIFRoZSBmaXJzdCB0aW1lIHRo
cm91Z2gsIHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBhbmQgdGhlIGltYWdlIHdpbGwgZ2V0IGFu
IHVwZGF0ZS4KLSAgICBpZiAoY3VycmVudFRpbWUoKSAtIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtU
aW1lID4gaW50ZXJ2YWwpIHsKLSAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOwotICAgICAgICBt
X3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgICAgIEFTU0VS
VChtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MTZfdD46Om1heCgpKTsKLSAgICAgICAgKyttX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQ7Ci0g
ICAgfQotCi0gICAgaWYgKG5lZWRzVXBkYXRlIHx8IGFsbERhdGFSZWNlaXZlZCkKLSAgICAgICAg
c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2Vsc2UKICAgICBzZXREYXRhKGRhdGEs
IGFsbERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYKLQogICAgIG1fZnJhbWVDYWNoZS0+Y2xlYXJNZXRh
ZGF0YSgpOworCiAgICAgRW5jb2RlZERhdGFTdGF0dXMgc3RhdHVzID0gZW5jb2RlZERhdGFTdGF0
dXMoKTsKLSAgICBpZiAoc3RhdHVzIDwgRW5jb2RlZERhdGFTdGF0dXM6OlNpemVBdmFpbGFibGUp
Ci0gICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgaWYgKHN0YXR1cyA+PSBFbmNvZGVkRGF0YVN0
YXR1czo6U2l6ZUF2YWlsYWJsZSkKKyAgICAgICAgbV9mcmFtZUNhY2hlLT5ncm93RnJhbWVzKCk7
CiAKLSAgICBtX2ZyYW1lQ2FjaGUtPmdyb3dGcmFtZXMoKTsKICAgICByZXR1cm4gc3RhdHVzOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgJKHJldmlzaW9uIDIyMTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMiArMTIxLDYgQEAgcHJp
dmF0ZToKIAogICAgIHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4gbV9tYXhpbXVtU3Vi
c2FtcGxpbmdMZXZlbDsKIAotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9hZGlu
ZyBzbyB0aGF0IHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCi0gICAgZG91
YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lIHsgMCB9OwotICAgIHVpbnQxNl90IG1fcHJv
Z3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCB7IDAgfTsKLSNlbmRpZgotCiAgICAgQWxwaGFPcHRpb24g
bV9hbHBoYU9wdGlvbiB7IEFscGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkIH07CiAgICAgR2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiB7IEdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkIH07CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319942</attachid>
            <date>2017-09-05 15:24:34 -0700</date>
            <delta_ts>2017-09-29 19:06:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175890-20170905152433.patch</filename>
            <type>text/plain</type>
            <size>6418</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA5LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1hZ2UgZGF0
YSBzaG91bGQgYmUgY29hbGVzY2VkIGlmIGl0IGNvbWVzIGluIHNtYWxsIGNodW5rcyBiZWZvcmUg
dXBkYXRpbmcgdGhlIEltYWdlU291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzU4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb2FsZXNjZSB0aGUgdXBkYXRlcywgd2hpY2ggYW4gSW1hZ2UgbWFr
ZXMgd2hlbiByZWNlaXZpbmcgZW5jb2RlZCBkYXRhIGluCisgICAgICAgIHNtYWxsIGNodW5rcywg
Zm9yIGFsbCBwbGF0Zm9ybXMuIEVuc3VyZSB0aGUgY2xpZW50cyBvZiB0aGUgQ2FjaGVkSW1hZ2UK
KyAgICAgICAgd29uJ3QgYmUgbm90aWZpZWQgdW5sZXNzIGFuIHVwZGF0ZSBpbiB0aGUgSW1hZ2VT
b3VyY2UgaGFwcGVucy4KKworICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2xlYXJJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6YWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZEltYWdlOjpzaG91bGRBZGREYXRhQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjphZHZhbmNlQWRkRGF0YUJ1ZmZlclRpbWUpOgorICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpk
YXRhQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoK
KwogMjAxNy0wOS0wNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgog
CiAgICAgICAgIFVwZGF0ZSBmb250IHNlbGVjdGlvbiBhbGdvcml0aG0gdG8gbWF0Y2ggbGF0ZXN0
IENTUyBzcGVjCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5jcHAJKHJldmlzaW9uIDIyMTYzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw2ICs0MDQsOCBAQCBpbmxpbmUg
dm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXJJbWFnZSgpCiAgICAgfQogCiAgICAgbV9pbWFnZSA9IG51
bGxwdHI7CisgICAgbV9sYXN0QWRkRGF0YUJ1ZmZlclRpbWUgPSB7IH07CisgICAgbV9hZGREYXRh
QnVmZmVyQ291bnQgPSAwOwogfQogCiB2b2lkIENhY2hlZEltYWdlOjphZGRJbmNyZW1lbnRhbERh
dGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQpAQCAtNDEyLDYgKzQxNCwxMSBAQCB2b2lkIENh
Y2hlZEltYWdlOjphZGRJbmNyZW1lbnRhbERhdGFCdWZmCiAKICAgICBjcmVhdGVJbWFnZSgpOwog
CisgICAgaWYgKCFzaG91bGRBZGREYXRhQnVmZmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGFkdmFuY2VBZGREYXRhQnVmZmVyVGltZSgpOworCiAgICAgLy8gSGF2ZSB0aGUgaW1hZ2UgdXBk
YXRlIGl0cyBkYXRhIGZyb20gaXRzIGludGVybmFsIGJ1ZmZlci4KICAgICAvLyBJdCB3aWxsIG5v
dCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5IGRlY29kaW5nIHVudGlsCiAgICAgLy8g
cXVlcmllZCBmb3IgaW5mbyAobGlrZSBzaXplIG9yIHNwZWNpZmljIGltYWdlIGZyYW1lcykuCkBA
IC00MzgsNiArNDQ1LDIyIEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmFkZEluY3JlbWVudGFsRGF0YUJ1
ZmYKICAgICBzZXRFbmNvZGVkU2l6ZShtX2ltYWdlLT5kYXRhKCkgPyBtX2ltYWdlLT5kYXRhKCkt
PnNpemUoKSA6IDApOwogfQogCitib29sIENhY2hlZEltYWdlOjpzaG91bGRBZGREYXRhQnVmZmVy
KCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRhdGFCdWZmZXJBZGRpbmdJbnRl
cnZhbHNbXSA9IHsgMCwgMSwgMywgNiwgMTUgfTsKKyAgICB1bnNpZ25lZCBpbnRlcnZhbCA9IHN0
ZDo6bWluPHVuc2lnbmVkPihtX2FkZERhdGFCdWZmZXJDb3VudCwgNCk7CisKKyAgICAvLyBUaGUg
Zmlyc3QgdGltZSB0aHJvdWdoLCB0aGUgY2h1bmsgdGltZSB3aWxsIGJlIDAgYW5kIHRoZSBpbWFn
ZSB3aWxsIGdldCBhbiB1cGRhdGUuCisgICAgcmV0dXJuIChNb25vdG9uaWNUaW1lOjpub3coKSAt
IG1fbGFzdEFkZERhdGFCdWZmZXJUaW1lKS5zZWNvbmRzKCkgPj0gZGF0YUJ1ZmZlckFkZGluZ0lu
dGVydmFsc1tpbnRlcnZhbF07Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmFkdmFuY2VBZGREYXRh
QnVmZmVyVGltZSgpCit7CisgICAgbV9sYXN0QWRkRGF0YUJ1ZmZlclRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKKyAgICBBU1NFUlQobV9hZGREYXRhQnVmZmVyQ291bnQgPCBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgICsrbV9hZGREYXRhQnVmZmVyQ291bnQ7
Cit9CisKIEVuY29kZWREYXRhU3RhdHVzIENhY2hlZEltYWdlOjpzZXRJbWFnZURhdGFCdWZmZXIo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKICAgICByZXR1cm4g
bV9pbWFnZSA/IG1faW1hZ2UtPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKSA6IEVuY29k
ZWREYXRhU3RhdHVzOjpFcnJvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5oCShyZXZpc2lvbiAyMjE2MzApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZGVzdHJveURlY29kZWREYXRhKCkgb3ZlcnJpZGU7CiAKKyAgICBib29sIHNob3VsZEFkZERhdGFC
dWZmZXIoKSBjb25zdDsKKyAgICB2b2lkIGFkdmFuY2VBZGREYXRhQnVmZmVyVGltZSgpOwogICAg
IEVuY29kZWREYXRhU3RhdHVzIHNldEltYWdlRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXIqLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CiAgICAgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlcnJvcihDYWNoZWRSZXNvdXJjZTo6
U3RhdHVzKSBvdmVycmlkZTsKQEAgLTE2Myw2ICsxNjUsOSBAQCBwcml2YXRlOgogCiAgICAgUmVm
UHRyPENhY2hlZEltYWdlT2JzZXJ2ZXI+IG1faW1hZ2VPYnNlcnZlcjsKICAgICBSZWZQdHI8SW1h
Z2U+IG1faW1hZ2U7CisgICAgTW9ub3RvbmljVGltZSBtX2xhc3RBZGREYXRhQnVmZmVyVGltZTsK
KyAgICB1bnNpZ25lZCBtX2FkZERhdGFCdWZmZXJDb3VudCB7IDAgfTsKKwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxTVkdJbWFnZUNhY2hlPiBtX3N2Z0ltYWdlQ2FjaGU7CiAgICAgYm9vbCBtX2lzTWFu
dWFsbHlDYWNoZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRQYWludEJyb2tlbkltYWdl
IHsgdHJ1ZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjIxNjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMzQg
KzExMywxMyBAQCB2b2lkIEltYWdlU291cmNlOjpyZXNldERhdGEoU2hhcmVkQnVmZmVyCiAKIEVu
Y29kZWREYXRhU3RhdHVzIEltYWdlU291cmNlOjpkYXRhQ2hhbmdlZChTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jl
c3NpdmUgbG9hZGluZyBhbmQgbWFrZSB0aGlzCi0gICAgLy8gY29kZSBjb25kaXRpb25hbCBvbiBp
dC4gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgY2h1bmtMb2FkSW50ZXJ2YWxzW10gPSB7MCwgMSwgMywgNiwgMTV9Owot
ICAgIGRvdWJsZSBpbnRlcnZhbCA9IGNodW5rTG9hZEludGVydmFsc1tzdGQ6Om1pbihtX3Byb2dy
ZXNzaXZlTG9hZENodW5rQ291bnQsIHN0YXRpY19jYXN0PHVpbnQxNl90Pig0KSldOwotCi0gICAg
Ym9vbCBuZWVkc1VwZGF0ZSA9IGZhbHNlOwotCi0gICAgLy8gVGhlIGZpcnN0IHRpbWUgdGhyb3Vn
aCwgdGhlIGNodW5rIHRpbWUgd2lsbCBiZSAwIGFuZCB0aGUgaW1hZ2Ugd2lsbCBnZXQgYW4gdXBk
YXRlLgotICAgIGlmIChjdXJyZW50VGltZSgpIC0gbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUg
PiBpbnRlcnZhbCkgewotICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgICAgIG1fcHJv
Z3Jlc3NpdmVMb2FkQ2h1bmtUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICAgICAgQVNTRVJUKG1f
cHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90
Pjo6bWF4KCkpOwotICAgICAgICArK21fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudDsKLSAgICB9
Ci0KLSAgICBpZiAobmVlZHNVcGRhdGUgfHwgYWxsRGF0YVJlY2VpdmVkKQotICAgICAgICBzZXRE
YXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0jZWxzZQogICAgIHNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKLSNlbmRpZgotCiAgICAgbV9mcmFtZUNhY2hlLT5jbGVhck1ldGFkYXRh
KCk7CisKICAgICBFbmNvZGVkRGF0YVN0YXR1cyBzdGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygp
OwotICAgIGlmIChzdGF0dXMgPCBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSkKLSAg
ICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICBpZiAoc3RhdHVzID49IEVuY29kZWREYXRhU3RhdHVz
OjpTaXplQXZhaWxhYmxlKQorICAgICAgICBtX2ZyYW1lQ2FjaGUtPmdyb3dGcmFtZXMoKTsKIAot
ICAgIG1fZnJhbWVDYWNoZS0+Z3Jvd0ZyYW1lcygpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAkocmV2aXNpb24gMjIxNjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEyICsxMjEsNiBAQCBwcml2YXRl
OgogCiAgICAgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiBtX21heGltdW1TdWJzYW1w
bGluZ0xldmVsOwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHNv
IHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KLSAgICBkb3VibGUg
bV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgeyAwIH07Ci0gICAgdWludDE2X3QgbV9wcm9ncmVz
c2l2ZUxvYWRDaHVua0NvdW50IHsgMCB9OwotI2VuZGlmCi0KICAgICBBbHBoYU9wdGlvbiBtX2Fs
cGhhT3B0aW9uIHsgQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQgfTsKICAgICBHYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIHsgR2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQgfTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322264</attachid>
            <date>2017-09-29 19:06:08 -0700</date>
            <delta_ts>2017-10-09 14:26:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175890-20170929190607.patch</filename>
            <type>text/plain</type>
            <size>20106</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzc1NGFiMDEwMjhhNjI0
MzlkNzkxNDU2MTI5NzY5MjA0MjczMWNiNC4uMjNlMmM5ODI1MzhmN2RlODMxNDZmNThjZTk5NjBk
ZGFlNDRjNzRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDE3LTA5LTI5ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1hZ2Ug
ZGF0YSBzaG91bGQgYmUgY29hbGVzY2VkIGlmIGl0IGNvbWVzIGluIHNtYWxsIGNodW5rcyBiZWZv
cmUgdXBkYXRpbmcgdGhlIEltYWdlU291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDb2FsZXNjZSB0aGUgdXBkYXRlcywgd2hpY2ggYW4gSW1hZ2Ug
bWFrZXMgd2hlbiByZWNlaXZpbmcgZW5jb2RlZCBkYXRhIGluCisgICAgICAgIHNtYWxsIGNodW5r
cywgZm9yIGFsbCBwbGF0Zm9ybXMuIEVuc3VyZSB0aGUgY2xpZW50cyBvZiB0aGUgQ2FjaGVkSW1h
Z2UKKyAgICAgICAgd29uJ3QgYmUgbm90aWZpZWQgdW5sZXNzIGFuIHVwZGF0ZSBpbiB0aGUgSW1h
Z2VTb3VyY2UgaGFwcGVucy4KKworICAgICAgICBJIG5lZWQgdG8gY2hhbmdlIHNvbWUgZnVuY3Rp
b25zJyBuYW1lcyB0byBiZXR0ZXIgaW1wbGVtZW50IHRoaXMgcGF0Y2guIAorICAgICAgICBUaGUg
bmFtZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiBjb25mdXNpbmc6CisgICAgICAgICAg
ICBDYWNoZWRJbWFnZTo6YWRkRGF0YShTaGFyZWRCdWZmZXImKQorICAgICAgICAgICAgQ2FjaGVk
SW1hZ2U6OmFkZERhdGFCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQpCisgICAgICAg
ICAgICBDYWNoZWRJbWFnZTo6YWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYp
CisKKyAgICAgICAgVGhlIGltYWdlIGRhdGEgaXMgbm90IGJ1ZmZlcmVkIGluY3JlbWVudGFsbHkg
aW50byB0aGUgQ2FjaGVkSW1hZ2UuIFdoZW4KKyAgICAgICAgbmV3IGRhdGEgaXMgcmVjZWl2ZWQs
IFN1YnJlc291cmNlTG9hZGVyIGNhbGxzIENhY2hlZEltYWdlIHRvICJ1cGRhdGUiIGl0cworICAg
ICAgICBtX2RhdGEgd2l0aCBlaXRoZXIgYSBTaGFyZWRCdWZmZXIgb3IgYSBkYXRhIHBvaW50ZXIu
IEluIGVpdGhlciBjYXNlIHRoZQorICAgICAgICBTaGFyZWRCdWZmZXIgb3IgdGhlIHBvaW50ZXIg
Y29udGFpbnMgYWxsIHRoZSBsb2FkZWQgZGF0YS4gU3VicmVzb3VyY2VMb2FkZXIKKyAgICAgICAg
Y2FsbHMgQ2FjaGVkSW1hZ2UgdG8gdXBkYXRlIGl0cyBtX2RhdGEsIHRvIGVuc3VyZSBpdHMgbV9p
bWFnZSBpcyBjcmVhdGVkIAorICAgICAgICBhbmQgdG8gbm90aWZ5IGl0cyBjbGllbnRzIHdpdGgg
dGhlIG5ldyBkYXRhLgorCisgICAgICAgIFRoZSB2ZXJiICJhZGQiIGluIHRoZSBmdW5jdGlvbnMn
IG5hbWUgaXMgbWlzbGVhZGluZy4gSSBhbSBzdWdnZXN0aW5nIHRoZQorICAgICAgICBmb2xsb3dp
bmcgbmFtZXMgaW5zdGVhZDoKKyAgICAgICAgICAgIENhY2hlZEltYWdlOjp1cGRhdGVCdWZmZXIo
U2hhcmVkQnVmZmVyJikKKyAgICAgICAgICAgIENhY2hlZEltYWdlOjp1cGRhdGVEYXRhKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCkKKyAgICAgICAgICAgIENhY2hlZEltYWdlOjpkb1VwZGF0ZUJ1ZmZl
cihTaGFyZWRCdWZmZXImKQorCisgICAgICAgIFRoZSBmaXJzdCB0d28gYXJlIHRoZSB2aXJ0dWFs
IG9uZXMuIFRoZXkgYXJlIGNhbGxlZCBmb3JtIFN1YnJlc291cmNlTG9hZGVyLgorICAgICAgICBU
aGUgdGhpcmQgb25lIGlzIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiB0byB1cGRhdGUgdGhl
IG1fZGF0YSBtZW1iZXIuCisgICAgICAgIFRoZSBzYW1lIG5hbWVzIHdpbGwgYmUgdXNlZCBpbiB0
aGUgZm9sbG93aW5nIGNsYXNzZXM6CisgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSB3aGljaCBp
cyB0aGUgYmFzZSBjbGFzcyBvZiBDYWNoZWRJbWFnZQorICAgICAgICAgICAgQ2FjaGVkUmF3UmVz
b3VyY2Ugd2hpY2ggaXMgZGVyaXZlZCBmcm9tIENhY2hlZFJlc291cmNlCisgICAgICAgICAgICBD
YWNoZWRUZXh0VHJhY2sgd2hpY2ggaXMgZGVyaXZlZCBmcm9tIENhY2hlZFJlc291cmNlCisKKyAg
ICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
b2N1bWVudDo6dXBkYXRlRHVyaW5nUGFyc2luZyk6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlRGF0YU9yQnVmZmVyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmNsZWFySW1hZ2UpOiBSZXNldCB0
aGUgdXBkYXRlIGJhY2sgb2ZmIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFn
ZTo6ZG9VcGRhdGVCdWZmZXIpOiBEb24ndCB1cGRhdGUgQ2FjaGVkSW1hZ2Ugd2l0aAorICAgICAg
ICB0aGUgbmV3IGRhdGEgaWYgaXQgY29tZXMgaW4gc21hbGwgY2h1bmtzIHdpdGggZmFzdCByYXRl
LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNob3VsZERlZmVyVXBkYXRlSW1hZ2VE
YXRhIGNvbnN0KTogVGhpcyBjb2RlIGlzIG1vdmVkIAorICAgICAgICBmcm9tIEltYWdlU291cmNl
OjpkYXRhQ2hhbmdlZCgpLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmRpZFVwZGF0
ZUltYWdlRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnVwZGF0
ZUltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6dXBkYXRlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjp1cGRhdGVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZEltYWdlOjpmaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZEltYWdlOjphZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNldEltYWdlRGF0YUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6YWRkRGF0YUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6YWRkRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNl
Ojp1cGRhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OnVw
ZGF0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmFkZERhdGFC
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmFk
ZERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJj
ZS5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dXBkYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlOjp1cGRhdGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjphZGREYXRhQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZFJlc291cmNlOjphZGREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFRleHRUcmFjazo6ZG9VcGRhdGVCdWZmZXIp
OiBSZW5hbWUgdXBkYXRlRGF0YSgpIHRvIGRvVXBkYXRlQnVmZmVyKCkuCisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRUZXh0VHJhY2s6OnVwZGF0ZUJ1ZmZlcik6IFJlbmFtZSBhZGREYXRhQnVmZmVy
KCkgdG8gdXBkYXRlQnVmZmVyKCkuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRUZXh0VHJhY2s6
OmZpbmlzaExvYWRpbmcpOiBDYWxsIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBkb1VwZGF0ZUJ1ZmZl
cigpLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkVGV4dFRyYWNrOjp1cGRhdGVEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFRleHRUcmFjazo6YWRkRGF0YUJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpkYXRhQ2hhbmdlZCk6IE1vdmUgdGhlIHVwZGF0ZSBiYWNrIG9mZiBj
b2RlIHRvIENhY2hlZEltYWdlOjp1cGRhdGVEYXRhKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDoKKwogMjAxNy0wOS0yOCAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9s
bXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IFBMQVRGT1JNIGlmZGVmcyB3aXRo
aW4gRWRpdG9yIGFyb3VuZCB3cml0aW5nIHNlbGVjdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
RG9jdW1lbnQuY3BwCmluZGV4IDVlNjI4OWQ5ZGY2OGY4OTcyNzMzYWFjZDhlZDk5NDMyNTRhMzcx
MDIuLjA5OWY1NjFiY2QwZjlkZTg5ZjU1MjliMzg1NWViNTAzNWU2ZTI0YTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcApAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgSW1hZ2VE
b2N1bWVudDo6dXBkYXRlRHVyaW5nUGFyc2luZygpCiAgICAgICAgIGNyZWF0ZURvY3VtZW50U3Ry
dWN0dXJlKCk7CiAKICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gbG9hZGVy
KCktPm1haW5SZXNvdXJjZURhdGEoKSkKLSAgICAgICAgbV9pbWFnZUVsZW1lbnQtPmNhY2hlZElt
YWdlKCktPmFkZERhdGFCdWZmZXIoKmJ1ZmZlcik7CisgICAgICAgIG1faW1hZ2VFbGVtZW50LT5j
YWNoZWRJbWFnZSgpLT51cGRhdGVCdWZmZXIoKmJ1ZmZlcik7CiAKICAgICBpbWFnZVVwZGF0ZWQo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4
IDg4NzIyOTk1OGQ2YzEyYTcwYjhjN2Y1NDAyYzE0YTI3M2UyMjc5NjkuLmJjNDg4OWZjMjg1MDhl
YmRhOTE4Yzk3MmQzMDQ2ODE2ODVjYzEwNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmNwcApAQCAtNDAzLDkgKzQwMyw5IEBAIHZvaWQgU3VicmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVEYXRhT3JCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCwgUmVmCiAKICAgICBpZiAoIW1fbG9hZGluZ011bHRpcGFydENvbnRlbnQpIHsKICAgICAgICAg
aWYgKGF1dG8qIHJlc291cmNlRGF0YSA9IHRoaXMtPnJlc291cmNlRGF0YSgpKQotICAgICAgICAg
ICAgbV9yZXNvdXJjZS0+YWRkRGF0YUJ1ZmZlcigqcmVzb3VyY2VEYXRhKTsKKyAgICAgICAgICAg
IG1fcmVzb3VyY2UtPnVwZGF0ZUJ1ZmZlcigqcmVzb3VyY2VEYXRhKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9yZXNvdXJjZS0+YWRkRGF0YShidWZmZXIgPyBidWZmZXItPmRhdGEoKSA6
IGRhdGEsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgpIDogbGVuZ3RoKTsKKyAgICAgICAgICAgIG1f
cmVzb3VyY2UtPnVwZGF0ZURhdGEoYnVmZmVyID8gYnVmZmVyLT5kYXRhKCkgOiBkYXRhLCBidWZm
ZXIgPyBidWZmZXItPnNpemUoKSA6IGxlbmd0aCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAppbmRleCBhMmU3YjEzNmRjOTI2ZTQwZDA2
NGQ3OGZjOWYyOWZmZWJkMTZlZWYzLi5kZWM2NjQ4NDRiOTM2MDY2N2JlNTAyZjM2ZjE3ZjFkZjc4
MzI2Yzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAK
QEAgLTQwNCwxOCArNDA0LDIzIEBAIGlubGluZSB2b2lkIENhY2hlZEltYWdlOjpjbGVhckltYWdl
KCkKICAgICB9CiAKICAgICBtX2ltYWdlID0gbnVsbHB0cjsKKyAgICBtX2xhc3RVcGRhdGVJbWFn
ZURhdGFUaW1lID0geyB9OworICAgIG1fdXBkYXRlSW1hZ2VEYXRhQ291bnQgPSAwOwogfQogCi12
b2lkIENhY2hlZEltYWdlOjphZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBk
YXRhKQordm9pZCBDYWNoZWRJbWFnZTo6ZG9VcGRhdGVCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRh
KQogewogICAgIG1fZGF0YSA9ICZkYXRhOwotCiAgICAgY3JlYXRlSW1hZ2UoKTsKKyAgICBzZXRF
bmNvZGVkU2l6ZShtX2ltYWdlLT5kYXRhKCkgPyBtX2ltYWdlLT5kYXRhKCktPnNpemUoKSA6IDAp
OwogCisgICAgaWYgKHNob3VsZERlZmVyVXBkYXRlSW1hZ2VEYXRhKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKICAgICAvLyBIYXZlIHRoZSBpbWFnZSB1cGRhdGUgaXRzIGRhdGEgZnJvbSBpdHMg
aW50ZXJuYWwgYnVmZmVyLgogICAgIC8vIEl0IHdpbGwgbm90IGRvIGFueXRoaW5nIG5vdywgYnV0
IHdpbGwgZGVsYXkgZGVjb2RpbmcgdW50aWwKICAgICAvLyBxdWVyaWVkIGZvciBpbmZvIChsaWtl
IHNpemUgb3Igc3BlY2lmaWMgaW1hZ2UgZnJhbWVzKS4KLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBl
bmNvZGVkRGF0YVN0YXR1cyA9IHNldEltYWdlRGF0YUJ1ZmZlcigmZGF0YSwgZmFsc2UpOworICAg
IEVuY29kZWREYXRhU3RhdHVzIGVuY29kZWREYXRhU3RhdHVzID0gdXBkYXRlSW1hZ2VEYXRhKCZk
YXRhLCBmYWxzZSk7CiAgICAgaWYgKGVuY29kZWREYXRhU3RhdHVzID4gRW5jb2RlZERhdGFTdGF0
dXM6OkVycm9yICYmIGVuY29kZWREYXRhU3RhdHVzIDwgRW5jb2RlZERhdGFTdGF0dXM6OlNpemVB
dmFpbGFibGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDM0LDI3ICs0MzksNDUgQEAgdm9pZCBD
YWNoZWRJbWFnZTo6YWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkK
ICAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIG9ubHkgcmVkcmF3IHRoZSBkZWNvZGVkIGJhbmQg
b2YgdGhlIGltYWdlLCBidXQgd2l0aCB0aGUgY3VycmVudCBkZXNpZ24KICAgICAvLyAoZGVjb2Rp
bmcgZGVsYXllZCB1bnRpbCBwYWludGluZykgdGhhdCBzZWVtcyBoYXJkLgogICAgIG5vdGlmeU9i
c2VydmVycygpOworfQogCi0gICAgc2V0RW5jb2RlZFNpemUobV9pbWFnZS0+ZGF0YSgpID8gbV9p
bWFnZS0+ZGF0YSgpLT5zaXplKCkgOiAwKTsKK2Jvb2wgQ2FjaGVkSW1hZ2U6OnNob3VsZERlZmVy
VXBkYXRlSW1hZ2VEYXRhKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIHVwZGF0
ZUltYWdlRGF0YUJhY2tvZmZJbnRlcnZhbHNbXSA9IHsgMCwgMSwgMywgNiwgMTUgfTsKKyAgICB1
bnNpZ25lZCBpbnRlcnZhbCA9IHN0ZDo6bWluPHVuc2lnbmVkPihtX3VwZGF0ZUltYWdlRGF0YUNv
dW50LCA0KTsKKworICAgIC8vIFRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRoZSBjaHVuayB0aW1l
IHdpbGwgYmUgMCBhbmQgdGhlIGltYWdlIHdpbGwgZ2V0IGFuIHVwZGF0ZS4KKyAgICByZXR1cm4g
KE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9sYXN0VXBkYXRlSW1hZ2VEYXRhVGltZSkuc2Vjb25k
cygpIDwgdXBkYXRlSW1hZ2VEYXRhQmFja29mZkludGVydmFsc1tpbnRlcnZhbF07Cit9CisKK3Zv
aWQgQ2FjaGVkSW1hZ2U6OmRpZFVwZGF0ZUltYWdlRGF0YSgpCit7CisgICAgbV9sYXN0VXBkYXRl
SW1hZ2VEYXRhVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIEFTU0VSVChtX3VwZGF0
ZUltYWdlRGF0YUNvdW50IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsK
KyAgICArK21fdXBkYXRlSW1hZ2VEYXRhQ291bnQ7CiB9CiAKLUVuY29kZWREYXRhU3RhdHVzIENh
Y2hlZEltYWdlOjpzZXRJbWFnZURhdGFCdWZmZXIoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKK0VuY29kZWREYXRhU3RhdHVzIENhY2hlZEltYWdlOjp1cGRhdGVJbWFn
ZURhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBy
ZXR1cm4gbV9pbWFnZSA/IG1faW1hZ2UtPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKSA6
IEVuY29kZWREYXRhU3RhdHVzOjpFcnJvcjsKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJl
dHVybiBFbmNvZGVkRGF0YVN0YXR1czo6RXJyb3I7CisgICAgRW5jb2RlZERhdGFTdGF0dXMgcmVz
dWx0ID0gbV9pbWFnZS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIGRpZFVw
ZGF0ZUltYWdlRGF0YSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ2FjaGVkSW1h
Z2U6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQordm9pZCBDYWNoZWRJbWFnZTo6
dXBkYXRlQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkKIHsKICAgICBBU1NFUlQoZGF0YUJ1ZmZl
cmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOwotICAgIGFkZEluY3JlbWVudGFsRGF0YUJ1ZmZl
cihkYXRhKTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihkYXRhKTsKKyAgICBk
b1VwZGF0ZUJ1ZmZlcihkYXRhKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlQnVmZmVyKGRh
dGEpOwogfQogCi12b2lkIENhY2hlZEltYWdlOjphZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCkKK3ZvaWQgQ2FjaGVkSW1hZ2U6OnVwZGF0ZURhdGEoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5
KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKTsKLSAgICBhZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoU2hh
cmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmFk
ZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICBkb1VwZGF0ZUJ1ZmZlcihTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShkYXRhLCBsZW5ndGgpKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlRGF0YShkYXRh
LCBsZW5ndGgpOwogfQogCiB2b2lkIENhY2hlZEltYWdlOjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1
ZmZlciogZGF0YSkKQEAgLTQ2Myw3ICs0ODYsNyBAQCB2b2lkIENhY2hlZEltYWdlOjpmaW5pc2hM
b2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKICAgICBpZiAoIW1faW1hZ2UgJiYgZGF0YSkKICAg
ICAgICAgY3JlYXRlSW1hZ2UoKTsKIAotICAgIEVuY29kZWREYXRhU3RhdHVzIGVuY29kZWREYXRh
U3RhdHVzID0gc2V0SW1hZ2VEYXRhQnVmZmVyKGRhdGEsIHRydWUpOworICAgIEVuY29kZWREYXRh
U3RhdHVzIGVuY29kZWREYXRhU3RhdHVzID0gdXBkYXRlSW1hZ2VEYXRhKGRhdGEsIHRydWUpOwog
CiAgICAgaWYgKGVuY29kZWREYXRhU3RhdHVzID09IEVuY29kZWREYXRhU3RhdHVzOjpFcnJvciB8
fCBtX2ltYWdlLT5pc051bGwoKSkgewogICAgICAgICAvLyBJbWFnZSBkZWNvZGluZyBmYWlsZWQ7
IHRoZSBpbWFnZSBkYXRhIGlzIG1hbGZvcm1lZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZEltYWdlLmgKaW5kZXggMWJhOGUwNjE2M2I2YmY2YTEwNTVjNTQzODNjODlmNmYyNGJk
NThmYy4uMWY0NThiNWIzMzdhMWY2MTYxZWEyNjQzNGE2YzQ5MjNlYWRiZGZlMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZSAmJiBtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCk7IH0KICAgICBib29sIGltYWdlSGFz
UmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlICYmIG1faW1hZ2UtPmhhc1Jl
bGF0aXZlSGVpZ2h0KCk7IH0KIAotICAgIHZvaWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXIm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUJ1ZmZlcihTaGFyZWRCdWZmZXImKSBvdmVycmlk
ZTsKICAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7CiAKICAg
ICBlbnVtIFNpemVUeXBlIHsKQEAgLTEwOSw4ICsxMDksMTAgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFsbENsaWVudHNSZW1vdmVkKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95RGVjb2RlZERh
dGEoKSBvdmVycmlkZTsKIAotICAgIEVuY29kZWREYXRhU3RhdHVzIHNldEltYWdlRGF0YUJ1ZmZl
cihTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgdm9pZCBhZGREYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgb3ZlcnJpZGU7CisgICAgYm9vbCBz
aG91bGREZWZlclVwZGF0ZUltYWdlRGF0YSgpIGNvbnN0OworICAgIHZvaWQgZGlkVXBkYXRlSW1h
Z2VEYXRhKCk7CisgICAgRW5jb2RlZERhdGFTdGF0dXMgdXBkYXRlSW1hZ2VEYXRhKFNoYXJlZEJ1
ZmZlciosIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2b2lkIHVwZGF0ZURhdGEoY29uc3Qg
Y2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSBvdmVycmlkZTsKICAgICB2b2lkIGVycm9yKENh
Y2hlZFJlc291cmNlOjpTdGF0dXMpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZl
ZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7CiAKQEAgLTE0OSw3ICsxNTEsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgaW1hZ2VGcmFtZUF2YWlsYWJsZShjb25zdCBJbWFnZSYsIElt
YWdlQW5pbWF0aW5nU3RhdGUsIGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRyLCBE
ZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkKTsKICAgICB2b2lkIGNoYW5n
ZWRJblJlY3QoY29uc3QgSW1hZ2UmLCBjb25zdCBJbnRSZWN0Kik7CiAKLSAgICB2b2lkIGFkZElu
Y3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKTsKKyAgICB2b2lkIGRvVXBkYXRlQnVm
ZmVyKFNoYXJlZEJ1ZmZlciYpOwogCiAgICAgdm9pZCBkaWRSZXBsYWNlU2hhcmVkQnVmZmVyQ29u
dGVudHMoKSBvdmVycmlkZTsKIApAQCAtMTY2LDYgKzE2OCw5IEBAIHByaXZhdGU6CiAKICAgICBS
ZWZQdHI8Q2FjaGVkSW1hZ2VPYnNlcnZlcj4gbV9pbWFnZU9ic2VydmVyOwogICAgIFJlZlB0cjxJ
bWFnZT4gbV9pbWFnZTsKKyAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFVwZGF0ZUltYWdlRGF0YVRp
bWU7CisgICAgdW5zaWduZWQgbV91cGRhdGVJbWFnZURhdGFDb3VudCB7IDAgfTsKKwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxTVkdJbWFnZUNhY2hlPiBtX3N2Z0ltYWdlQ2FjaGU7CiAgICAgYm9vbCBt
X2lzTWFudWFsbHlDYWNoZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRQYWludEJyb2tl
bkltYWdlIHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSYXdSZXNvdXJjZS5jcHAKaW5kZXggZDgzNTA5YjNjMTc5Mzc0YjQ0MzljM2IyODQxN2QyNmVi
NjAzNTFjYS4uODkyNTM5ZjRlZWJkNmNjNjJjZjE4ZTcwZmRhNGQ4ODg2YWMwMTQ3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCkBA
IC01Miw3ICs1Miw3IEBAIHN0ZDo6b3B0aW9uYWw8U2hhcmVkQnVmZmVyRGF0YVZpZXc+IENhY2hl
ZFJhd1Jlc291cmNlOjpjYWxjdWxhdGVJbmNyZW1lbnRhbERhdGFDCiAgICAgcmV0dXJuIGRhdGEt
PmdldFNvbWVEYXRhKHByZXZpb3VzRGF0YUxlbmd0aCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmF3UmVz
b3VyY2U6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQordm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6dXBkYXRlQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkKIHsKICAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOwpAQCAtNjksMTQg
KzY5LDE0IEBAIHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnVm
ZmVyJiBkYXRhKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ2FjaGVkUmVzb3VyY2U6
OmFkZERhdGFCdWZmZXIoZGF0YSk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZUJ1ZmZlcihk
YXRhKTsKIH0KIAotdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWRkRGF0YShjb25zdCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjp1cGRhdGVEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBBU1NFUlQoZGF0YUJ1
ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVmZmVyRGF0YSk7CiAgICAgbm90aWZ5Q2xpZW50c0Rh
dGFXYXNSZWNlaXZlZChkYXRhLCBsZW5ndGgpOwotICAgIENhY2hlZFJlc291cmNlOjphZGREYXRh
KGRhdGEsIGxlbmd0aCk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZURhdGEoZGF0YSwgbGVu
Z3RoKTsKIH0KIAogdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhTaGFyZWRC
dWZmZXIqIGRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmF3UmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdS
ZXNvdXJjZS5oCmluZGV4IDE1YThhODY2MDVmZWNmNzAyZmM2NjM4MzcyNzllNGJkYmVjN2Q1ZWIu
LjU0OGZmNjliYjcxN2QyY2EyN2E1Y2IzZTYyZWFiYmU2M2U4ZDExZDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCkBAIC01NSw4ICs1NSw4
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNv
dXJjZUNsaWVudCYpIGZpbmFsOwotICAgIHZvaWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXIm
KSBmaW5hbDsKLSAgICB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKSBmaW5hbDsKKyAgICB2b2lkIHVwZGF0ZUJ1ZmZlcihTaGFyZWRCdWZmZXImKSBmaW5hbDsK
KyAgICB2b2lkIHVwZGF0ZURhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSBm
aW5hbDsKICAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgZmluYWw7CiAKICAg
ICBib29sIHNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAKaW5kZXggNDZhMzE3ZmM1NzA1MDVmNDQ2MjRhNmExZjczMmI0NDI5MTYyNzkx
MS4uZmZhOTcyZjMwMmU0NjAzYmY3YTg4Y2ExZjg4MTdkY2Y0ZTJjNjhlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCkBAIC0zMzEsMTIgKzMz
MSwxMiBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpjaGVja05vdGlmeSgpCiAgICAgICAgIGNsaWVu
dC0+bm90aWZ5RmluaXNoZWQoKnRoaXMpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlOjphZGRE
YXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpCit2b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVCdWZm
ZXIoU2hhcmVkQnVmZmVyJikKIHsKICAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09
IEJ1ZmZlckRhdGEpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlOjphZGREYXRhKGNvbnN0IGNo
YXIqLCB1bnNpZ25lZCkKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZURhdGEoY29uc3QgY2hh
ciosIHVuc2lnbmVkKQogewogICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9O
b3RCdWZmZXJEYXRhKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmgKaW5kZXggZThmMWFjNjAyMWVlYzZiZTBjNTNkYjA5NDEwZmU1Y2U3ZTY3OTc4OC4u
ODkwNDEzZmQwMmYyZTYwMjQwMjcyZmU1MzkwNDFiZTliODYxMGJmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKQEAgLTEwMiw4ICsxMDIsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIHsgfQog
ICAgIHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0K
ICAgICB2aXJ0dWFsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHRleHRSZXNvdXJjZURlY29k
ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkZERhdGFC
dWZmZXIoU2hhcmVkQnVmZmVyJik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZERhdGEoY29uc3QgY2hh
ciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQnVmZmVy
KFNoYXJlZEJ1ZmZlciYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaExvYWRpbmco
U2hhcmVkQnVmZmVyKik7CiAgICAgdmlydHVhbCB2b2lkIGVycm9yKENhY2hlZFJlc291cmNlOjpT
dGF0dXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
VGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJh
Y2suY3BwCmluZGV4IGZkM2QwYjhkN2I0ZWI3ODA0YjIwZDg2OTRhYTczYjJmN2ViYWI1MjYuLjRm
YTcyZTg5ZTZiYzFjZTViZDI4ZmYxMmUzMDY3YzE1MjcxOWM5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwCkBAIC00Miw3ICs0Miw3IEBA
IENhY2hlZFRleHRUcmFjazo6Q2FjaGVkVGV4dFRyYWNrKENhY2hlZFJlc291cmNlUmVxdWVzdCYm
IHJlcXVlc3QsIFBBTDo6U2Vzc2lvbklECiB7CiB9CiAKLXZvaWQgQ2FjaGVkVGV4dFRyYWNrOjp1
cGRhdGVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3ZvaWQgQ2FjaGVkVGV4dFRyYWNrOjpkb1Vw
ZGF0ZUJ1ZmZlcihTaGFyZWRCdWZmZXIqIGRhdGEpCiB7CiAgICAgQVNTRVJUKGRhdGFCdWZmZXJp
bmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtNTMsMTUg
KzUzLDE1IEBAIHZvaWQgQ2FjaGVkVGV4dFRyYWNrOjp1cGRhdGVEYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSkKICAgICAgICAgY2xpZW50LT5kZXByZWNhdGVkRGlkUmVjZWl2ZUNhY2hlZFJlc291cmNl
KCp0aGlzKTsKIH0KIAotdm9pZCBDYWNoZWRUZXh0VHJhY2s6OmFkZERhdGFCdWZmZXIoU2hhcmVk
QnVmZmVyJiBkYXRhKQordm9pZCBDYWNoZWRUZXh0VHJhY2s6OnVwZGF0ZUJ1ZmZlcihTaGFyZWRC
dWZmZXImIGRhdGEpCiB7Ci0gICAgdXBkYXRlRGF0YSgmZGF0YSk7Ci0gICAgQ2FjaGVkUmVzb3Vy
Y2U6OmFkZERhdGFCdWZmZXIoZGF0YSk7CisgICAgZG9VcGRhdGVCdWZmZXIoJmRhdGEpOworICAg
IENhY2hlZFJlc291cmNlOjp1cGRhdGVCdWZmZXIoZGF0YSk7CiB9CiAKIHZvaWQgQ2FjaGVkVGV4
dFRyYWNrOjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICB1cGRhdGVE
YXRhKGRhdGEpOworICAgIGRvVXBkYXRlQnVmZmVyKGRhdGEpOwogICAgIENhY2hlZFJlc291cmNl
OjpmaW5pc2hMb2FkaW5nKGRhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkVGV4dFRyYWNrLmgKaW5kZXggMjFlYmMzZjYzYzQyOTFiMmVmNTU1OTRjMDdlMWRi
YTZmODRmMDQwYS4uY2I2YjU2ZTU0OWFhYjUyNmE4ZDU0NDA1NTA1MzhlZmI2Y2EwNTM0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suaApAQCAtMzcs
MTAgKzM3LDEwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIG1heVRyeVJlcGxhY2VF
bmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGFk
ZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVCdWZm
ZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJl
ZEJ1ZmZlciopIG92ZXJyaWRlOwogCi0gICAgdm9pZCB1cGRhdGVEYXRhKFNoYXJlZEJ1ZmZlciop
OworICAgIHZvaWQgZG9VcGRhdGVCdWZmZXIoU2hhcmVkQnVmZmVyKik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAKaW5kZXggMWJjODlkOTY5MjlmYmQyZmM0M2MxYTU2ODI0MDY4MTZmOWY5
MDNiZi4uMGM5NWU0ODJhZTZjYzUwNDI4NjgxOWZjZmNhNTZiMjA2N2EzMjYwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMTEz
LDM0ICsxMTMsMTMgQEAgdm9pZCBJbWFnZVNvdXJjZTo6cmVzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSkKIAogRW5jb2RlZERhdGFTdGF0dXMgSW1hZ2VTb3VyY2U6OmRhdGFDaGFuZ2VkKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0jaWYgUExBVEZPUk0oSU9T
KQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlz
YWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIGFuZCBtYWtlIHRoaXMKLSAgICAvLyBjb2RlIGNvbmRp
dGlvbmFsIG9uIGl0LiBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQu
Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBjaHVua0xvYWRJbnRlcnZhbHNbXSA9IHswLCAxLCAz
LCA2LCAxNX07Ci0gICAgZG91YmxlIGludGVydmFsID0gY2h1bmtMb2FkSW50ZXJ2YWxzW3N0ZDo6
bWluKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KDQp
KV07Ci0KLSAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7Ci0KLSAgICAvLyBUaGUgZmlyc3Qg
dGltZSB0aHJvdWdoLCB0aGUgY2h1bmsgdGltZSB3aWxsIGJlIDAgYW5kIHRoZSBpbWFnZSB3aWxs
IGdldCBhbiB1cGRhdGUuCi0gICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBtX3Byb2dyZXNzaXZlTG9h
ZENodW5rVGltZSA+IGludGVydmFsKSB7Ci0gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAg
ICAgICAgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgPSBjdXJyZW50VGltZSgpOwotICAgICAg
ICBBU1NFUlQobV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50IDw9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDE2X3Q+OjptYXgoKSk7Ci0gICAgICAgICsrbV9wcm9ncmVzc2l2ZUxvYWRDaHVua0Nv
dW50OwotICAgIH0KLQotICAgIGlmIChuZWVkc1VwZGF0ZSB8fCBhbGxEYXRhUmVjZWl2ZWQpCi0g
ICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNlbHNlCiAgICAgc2V0RGF0
YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2VuZGlmCi0KICAgICBtX2ZyYW1lQ2FjaGUtPmNs
ZWFyTWV0YWRhdGEoKTsKKwogICAgIEVuY29kZWREYXRhU3RhdHVzIHN0YXR1cyA9IGVuY29kZWRE
YXRhU3RhdHVzKCk7Ci0gICAgaWYgKHN0YXR1cyA8IEVuY29kZWREYXRhU3RhdHVzOjpTaXplQXZh
aWxhYmxlKQotICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIGlmIChzdGF0dXMgPj0gRW5jb2Rl
ZERhdGFTdGF0dXM6OlNpemVBdmFpbGFibGUpCisgICAgICAgIG1fZnJhbWVDYWNoZS0+Z3Jvd0Zy
YW1lcygpOwogCi0gICAgbV9mcmFtZUNhY2hlLT5ncm93RnJhbWVzKCk7CiAgICAgcmV0dXJuIHN0
YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgKaW5kZXggYTQ1YTZhZTIzNDUwMTA5MzEyZjVhYWI1M2EyNjIwNWMzYjYyMzlkZi4uMmJi
N2I4NWFlOGY5MGFkN2ZiNWYwYTBkNTE2NjZlMjZkYTk3OWEwYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0xMjEsMTIgKzEyMSw2IEBA
IHByaXZhdGU6CiAKICAgICBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+IG1fbWF4aW11
bVN1YnNhbXBsaW5nTGV2ZWw7CiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IFdl
IHNob3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxv
YWRpbmcgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgotICAg
IGRvdWJsZSBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSB7IDAgfTsKLSAgICB1aW50MTZfdCBt
X3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgeyAwIH07Ci0jZW5kaWYKLQogICAgIEFscGhhT3B0
aW9uIG1fYWxwaGFPcHRpb24geyBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCB9OwogICAgIEdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24geyBH
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCB9OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323217</attachid>
            <date>2017-10-09 14:26:35 -0700</date>
            <delta_ts>2017-10-09 17:07:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175890-20171009142634.patch</filename>
            <type>text/plain</type>
            <size>19813</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDE3LTEwLTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1hZ2UgZGF0
YSBzaG91bGQgYmUgY29hbGVzY2VkIGlmIGl0IGNvbWVzIGluIHNtYWxsIGNodW5rcyBiZWZvcmUg
dXBkYXRpbmcgdGhlIEltYWdlU291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzU4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFz
ZXIuCisKKyAgICAgICAgQ29hbGVzY2UgdGhlIHVwZGF0ZXMsIHdoaWNoIGFuIEltYWdlIG1ha2Vz
IHdoZW4gcmVjZWl2aW5nIGVuY29kZWQgZGF0YSBpbgorICAgICAgICBzbWFsbCBjaHVua3MsIGZv
ciBhbGwgcGxhdGZvcm1zLiBFbnN1cmUgdGhlIGNsaWVudHMgb2YgdGhlIENhY2hlZEltYWdlCisg
ICAgICAgIHdvbid0IGJlIG5vdGlmaWVkIHVubGVzcyBhbiB1cGRhdGUgaW4gdGhlIEltYWdlU291
cmNlIGhhcHBlbnMuCisKKyAgICAgICAgSSBuZWVkIHRvIGNoYW5nZSBzb21lIGZ1bmN0aW9ucycg
bmFtZXMgdG8gYmV0dGVyIGltcGxlbWVudCB0aGlzIHBhdGNoLiAKKyAgICAgICAgVGhlIG5hbWVz
IG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gY29uZnVzaW5nOgorICAgICAgICAgICAgQ2Fj
aGVkSW1hZ2U6OmFkZERhdGEoU2hhcmVkQnVmZmVyJikKKyAgICAgICAgICAgIENhY2hlZEltYWdl
OjphZGREYXRhQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkKQorICAgICAgICAgICAg
Q2FjaGVkSW1hZ2U6OmFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKQorCisg
ICAgICAgIFRoZSBpbWFnZSBkYXRhIGlzIG5vdCBidWZmZXJlZCBpbmNyZW1lbnRhbGx5IGludG8g
dGhlIENhY2hlZEltYWdlLiBXaGVuCisgICAgICAgIG5ldyBkYXRhIGlzIHJlY2VpdmVkLCBTdWJy
ZXNvdXJjZUxvYWRlciBjYWxscyBDYWNoZWRJbWFnZSB0byAidXBkYXRlIiBpdHMKKyAgICAgICAg
bV9kYXRhIHdpdGggZWl0aGVyIGEgU2hhcmVkQnVmZmVyIG9yIGEgZGF0YSBwb2ludGVyLiBJbiBl
aXRoZXIgY2FzZSB0aGUKKyAgICAgICAgU2hhcmVkQnVmZmVyIG9yIHRoZSBwb2ludGVyIGNvbnRh
aW5zIGFsbCB0aGUgbG9hZGVkIGRhdGEuIFN1YnJlc291cmNlTG9hZGVyCisgICAgICAgIGNhbGxz
IENhY2hlZEltYWdlIHRvIHVwZGF0ZSBpdHMgbV9kYXRhLCB0byBlbnN1cmUgaXRzIG1faW1hZ2Ug
aXMgY3JlYXRlZCAKKyAgICAgICAgYW5kIHRvIG5vdGlmeSBpdHMgY2xpZW50cyB3aXRoIHRoZSBu
ZXcgZGF0YS4KKworICAgICAgICBUaGUgdmVyYiAiYWRkIiBpbiB0aGUgZnVuY3Rpb25zJyBuYW1l
IGlzIG1pc2xlYWRpbmcuIEkgYW0gc3VnZ2VzdGluZyB0aGUKKyAgICAgICAgZm9sbG93aW5nIG5h
bWVzIGluc3RlYWQ6CisgICAgICAgICAgICBDYWNoZWRJbWFnZTo6dXBkYXRlQnVmZmVyKFNoYXJl
ZEJ1ZmZlciYpCisgICAgICAgICAgICBDYWNoZWRJbWFnZTo6dXBkYXRlRGF0YShjb25zdCBjaGFy
KiwgdW5zaWduZWQpCisgICAgICAgICAgICBDYWNoZWRJbWFnZTo6ZG9VcGRhdGVCdWZmZXIoU2hh
cmVkQnVmZmVyJikKKworICAgICAgICBUaGUgZmlyc3QgdHdvIGFyZSB0aGUgdmlydHVhbCBvbmVz
LiBUaGV5IGFyZSBjYWxsZWQgZm9ybSBTdWJyZXNvdXJjZUxvYWRlci4KKyAgICAgICAgVGhlIHRo
aXJkIG9uZSBpcyB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gdG8gdXBkYXRlIHRoZSBtX2Rh
dGEgbWVtYmVyLgorICAgICAgICBUaGUgc2FtZSBuYW1lcyB3aWxsIGJlIHVzZWQgaW4gdGhlIGZv
bGxvd2luZyBjbGFzc2VzOgorICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2Ugd2hpY2ggaXMgdGhl
IGJhc2UgY2xhc3Mgb2YgQ2FjaGVkSW1hZ2UKKyAgICAgICAgICAgIENhY2hlZFJhd1Jlc291cmNl
IHdoaWNoIGlzIGRlcml2ZWQgZnJvbSBDYWNoZWRSZXNvdXJjZQorICAgICAgICAgICAgQ2FjaGVk
VGV4dFRyYWNrIHdoaWNoIGlzIGRlcml2ZWQgZnJvbSBDYWNoZWRSZXNvdXJjZQorCisgICAgICAg
ICogaHRtbC9JbWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1l
bnQ6OnVwZGF0ZUR1cmluZ1BhcnNpbmcpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZURhdGFPckJ1ZmZlcik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjbGVhckltYWdlKTogUmVzZXQgdGhlIHVw
ZGF0ZSBiYWNrIG9mZiBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmRv
VXBkYXRlQnVmZmVyKTogRG9uJ3QgdXBkYXRlIENhY2hlZEltYWdlIHdpdGgKKyAgICAgICAgdGhl
IG5ldyBkYXRhIGlmIGl0IGNvbWVzIGluIHNtYWxsIGNodW5rcyB3aXRoIGZhc3QgcmF0ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpzaG91bGREZWZlclVwZGF0ZUltYWdlRGF0YSBj
b25zdCk6IFRoaXMgY29kZSBpcyBtb3ZlZCAKKyAgICAgICAgZnJvbSBJbWFnZVNvdXJjZTo6ZGF0
YUNoYW5nZWQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpkaWRVcGRhdGVJbWFn
ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjp1cGRhdGVJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnVwZGF0ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6dXBkYXRlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRJbWFnZTo6ZmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRJbWFnZTo6YWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZEltYWdlOjpzZXRJbWFnZURhdGFCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmFkZERhdGFCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmFkZERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRS
YXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6dXBk
YXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjp1cGRhdGVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjphZGREYXRhQnVmZmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjphZGREYXRh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2U6OnVwZGF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZTo6dXBkYXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZTo6YWRkRGF0YUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZTo6YWRkRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRUZXh0VHJhY2s6OmRvVXBkYXRlQnVmZmVyKTogUmVu
YW1lIHVwZGF0ZURhdGEoKSB0byBkb1VwZGF0ZUJ1ZmZlcigpLgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkVGV4dFRyYWNrOjp1cGRhdGVCdWZmZXIpOiBSZW5hbWUgYWRkRGF0YUJ1ZmZlcigpIHRv
IHVwZGF0ZUJ1ZmZlcigpLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkVGV4dFRyYWNrOjpmaW5p
c2hMb2FkaW5nKTogQ2FsbCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gZG9VcGRhdGVCdWZmZXIoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFRleHRUcmFjazo6dXBkYXRlRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRUZXh0VHJhY2s6OmFkZERhdGFCdWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6ZGF0YUNoYW5nZWQpOiBNb3ZlIHRoZSB1cGRhdGUgYmFjayBvZmYgY29kZSB0
byBDYWNoZWRJbWFnZTo6dXBkYXRlRGF0YSgpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmg6CisKIDIwMTctMTAtMDkgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXZWJHTF0gVGhpcmQgSU9TdXJmYWNlIGJ1ZmZlciBtaWdodCBiZSBh
bGxvY2F0ZWQgd2l0aCB0aGUgd3Jvbmcgc2l6ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMjMwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBJ
bWFnZURvY3VtZW50Ojp1cGRhdGVEdXJpbmdQYXJzaW5nKAogICAgICAgICBjcmVhdGVEb2N1bWVu
dFN0cnVjdHVyZSgpOwogCiAgICAgaWYgKFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGxv
YWRlcigpLT5tYWluUmVzb3VyY2VEYXRhKCkpCi0gICAgICAgIG1faW1hZ2VFbGVtZW50LT5jYWNo
ZWRJbWFnZSgpLT5hZGREYXRhQnVmZmVyKCpidWZmZXIpOworICAgICAgICBtX2ltYWdlRWxlbWVu
dC0+Y2FjaGVkSW1hZ2UoKS0+dXBkYXRlQnVmZmVyKCpidWZmZXIpOwogCiAgICAgaW1hZ2VVcGRh
dGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDIyMzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNv
dXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw5ICs0MDMsOSBAQCB2b2lkIFN1
YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YU9yCiAKICAgICBpZiAoIW1fbG9hZGluZ011
bHRpcGFydENvbnRlbnQpIHsKICAgICAgICAgaWYgKGF1dG8qIHJlc291cmNlRGF0YSA9IHRoaXMt
PnJlc291cmNlRGF0YSgpKQotICAgICAgICAgICAgbV9yZXNvdXJjZS0+YWRkRGF0YUJ1ZmZlcigq
cmVzb3VyY2VEYXRhKTsKKyAgICAgICAgICAgIG1fcmVzb3VyY2UtPnVwZGF0ZUJ1ZmZlcigqcmVz
b3VyY2VEYXRhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9yZXNvdXJjZS0+YWRkRGF0
YShidWZmZXIgPyBidWZmZXItPmRhdGEoKSA6IGRhdGEsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgp
IDogbGVuZ3RoKTsKKyAgICAgICAgICAgIG1fcmVzb3VyY2UtPnVwZGF0ZURhdGEoYnVmZmVyID8g
YnVmZmVyLT5kYXRhKCkgOiBkYXRhLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IGxlbmd0aCk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHAJKHJldmlzaW9uIDIyMzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCwxOCArNDA0LDI1IEBAIGlu
bGluZSB2b2lkIENhY2hlZEltYWdlOjpjbGVhckltYWdlKCkKICAgICB9CiAKICAgICBtX2ltYWdl
ID0gbnVsbHB0cjsKKyAgICBtX2xhc3RVcGRhdGVJbWFnZURhdGFUaW1lID0geyB9OworICAgIG1f
dXBkYXRlSW1hZ2VEYXRhQ291bnQgPSAwOwogfQogCi12b2lkIENhY2hlZEltYWdlOjphZGRJbmNy
ZW1lbnRhbERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQordm9pZCBDYWNoZWRJbWFnZTo6
dXBkYXRlQnVmZmVySW50ZXJuYWwoU2hhcmVkQnVmZmVyJiBkYXRhKQogewogICAgIG1fZGF0YSA9
ICZkYXRhOwotCiAgICAgY3JlYXRlSW1hZ2UoKTsKKyAgICBzZXRFbmNvZGVkU2l6ZShtX2ltYWdl
LT5kYXRhKCkgPyBtX2ltYWdlLT5kYXRhKCktPnNpemUoKSA6IDApOwogCi0gICAgLy8gSGF2ZSB0
aGUgaW1hZ2UgdXBkYXRlIGl0cyBkYXRhIGZyb20gaXRzIGludGVybmFsIGJ1ZmZlci4KLSAgICAv
LyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5IGRlY29kaW5nIHVu
dGlsCi0gICAgLy8gcXVlcmllZCBmb3IgaW5mbyAobGlrZSBzaXplIG9yIHNwZWNpZmljIGltYWdl
IGZyYW1lcykuCi0gICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMgPSBzZXRJ
bWFnZURhdGFCdWZmZXIoJmRhdGEsIGZhbHNlKTsKKyAgICAvLyBEb24ndCB1cGRhdGUgdGhlIGlt
YWdlIHdpdGggdGhlIG5ldyBidWZmZXIgdmVyeSBvZnRlbi4gQ2hhbmdpbmcgdGhlIGRlY29kZXIK
KyAgICAvLyBpbnRlcm5hbCBkYXRhIGFuZCByZXBhaW50aW5nIHRoZSBvYnNlcnZlcnMgc29tZXRp
bWVzIGFyZSB2ZXJ5IGV4cGVuc2l2ZSBvcGVyYXRpb25zLgorICAgIGlmIChzaG91bGREZWZlclVw
ZGF0ZUltYWdlRGF0YSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSGF2ZSB0aGUg
aW1hZ2UgdXBkYXRlIGl0cyBkYXRhIGZyb20gaXRzIGludGVybmFsIGJ1ZmZlci4gRGVjb2Rpbmcg
dGhlIGltYWdlIGRhdGEKKyAgICAvLyB3aWxsIGJlIGRlbGF5ZWQgdW50aWwgaW5mbyAobGlrZSBz
aXplIG9yIHNwZWNpZmljIGltYWdlIGZyYW1lcykgYXJlIHF1ZXJpZWQgd2hpY2gKKyAgICAvLyB1
c3VhbGx5IGhhcHBlbnMgd2hlbiB0aGUgb2JzZXJ2ZXJzIGFyZSByZXBhaW50ZWQuCisgICAgRW5j
b2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMgPSB1cGRhdGVJbWFnZURhdGEoJmRhdGEs
IGZhbHNlKTsKICAgICBpZiAoZW5jb2RlZERhdGFTdGF0dXMgPiBFbmNvZGVkRGF0YVN0YXR1czo6
RXJyb3IgJiYgZW5jb2RlZERhdGFTdGF0dXMgPCBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWls
YWJsZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MzAsMzEgKzQzNyw0NiBAQCB2b2lkIENhY2hl
ZEltYWdlOjphZGRJbmNyZW1lbnRhbERhdGFCdWZmCiAgICAgfQogCiAgICAgLy8gVGVsbCBvdXIg
b2JzZXJ2ZXJzIHRvIHRyeSB0byBkcmF3LgotICAgIC8vIEVhY2ggY2h1bmsgZnJvbSB0aGUgbmV0
d29yayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJlcGFpbnQsIHdoaWNoIHdpbGwgZm9yY2UgdGhhdCBj
aHVuayB0byBkZWNvZGUuCi0gICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBvbmx5IHJlZHJhdyB0
aGUgZGVjb2RlZCBiYW5kIG9mIHRoZSBpbWFnZSwgYnV0IHdpdGggdGhlIGN1cnJlbnQgZGVzaWdu
Ci0gICAgLy8gKGRlY29kaW5nIGRlbGF5ZWQgdW50aWwgcGFpbnRpbmcpIHRoYXQgc2VlbXMgaGFy
ZC4KICAgICBub3RpZnlPYnNlcnZlcnMoKTsKK30KIAotICAgIHNldEVuY29kZWRTaXplKG1faW1h
Z2UtPmRhdGEoKSA/IG1faW1hZ2UtPmRhdGEoKS0+c2l6ZSgpIDogMCk7Citib29sIENhY2hlZElt
YWdlOjpzaG91bGREZWZlclVwZGF0ZUltYWdlRGF0YSgpIGNvbnN0Cit7CisgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSB1cGRhdGVJbWFnZURhdGFCYWNrb2ZmSW50ZXJ2YWxzW10gPSB7IDAsIDEsIDMs
IDYsIDE1IH07CisgICAgdW5zaWduZWQgaW50ZXJ2YWwgPSBzdGQ6Om1pbjx1bnNpZ25lZD4obV91
cGRhdGVJbWFnZURhdGFDb3VudCwgNCk7CisKKyAgICAvLyBUaGUgZmlyc3QgdGltZSB0aHJvdWdo
LCB0aGUgY2h1bmsgdGltZSB3aWxsIGJlIDAgYW5kIHRoZSBpbWFnZSB3aWxsIGdldCBhbiB1cGRh
dGUuCisgICAgcmV0dXJuIChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fbGFzdFVwZGF0ZUltYWdl
RGF0YVRpbWUpLnNlY29uZHMoKSA8IHVwZGF0ZUltYWdlRGF0YUJhY2tvZmZJbnRlcnZhbHNbaW50
ZXJ2YWxdOworfQorCit2b2lkIENhY2hlZEltYWdlOjpkaWRVcGRhdGVJbWFnZURhdGEoKQorewor
ICAgIG1fbGFzdFVwZGF0ZUltYWdlRGF0YVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICBBU1NFUlQobV91cGRhdGVJbWFnZURhdGFDb3VudCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSk7CisgICAgKyttX3VwZGF0ZUltYWdlRGF0YUNvdW50OwogfQogCi1FbmNv
ZGVkRGF0YVN0YXR1cyBDYWNoZWRJbWFnZTo6c2V0SW1hZ2VEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZl
ciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCitFbmNvZGVkRGF0YVN0YXR1cyBDYWNoZWRJ
bWFnZTo6dXBkYXRlSW1hZ2VEYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpCiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdlLT5zZXREYXRhKGRhdGEsIGFs
bERhdGFSZWNlaXZlZCkgOiBFbmNvZGVkRGF0YVN0YXR1czo6RXJyb3I7CisgICAgaWYgKCFtX2lt
YWdlKQorICAgICAgICByZXR1cm4gRW5jb2RlZERhdGFTdGF0dXM6OkVycm9yOworICAgIEVuY29k
ZWREYXRhU3RhdHVzIHJlc3VsdCA9IG1faW1hZ2UtPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKKyAgICBkaWRVcGRhdGVJbWFnZURhdGEoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIENhY2hlZEltYWdlOjphZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkKK3Zv
aWQgQ2FjaGVkSW1hZ2U6OnVwZGF0ZUJ1ZmZlcihTaGFyZWRCdWZmZXImIGRhdGEpCiB7CiAgICAg
QVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKLSAgICBhZGRJbmNy
ZW1lbnRhbERhdGFCdWZmZXIoZGF0YSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmFkZERhdGFCdWZm
ZXIoZGF0YSk7CisgICAgdXBkYXRlQnVmZmVySW50ZXJuYWwoZGF0YSk7CisgICAgQ2FjaGVkUmVz
b3VyY2U6OnVwZGF0ZUJ1ZmZlcihkYXRhKTsKIH0KIAotdm9pZCBDYWNoZWRJbWFnZTo6YWRkRGF0
YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIENhY2hlZEltYWdlOjp1
cGRhdGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBBU1NF
UlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVmZmVyRGF0YSk7Ci0gICAgYWRkSW5j
cmVtZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIGxlbmd0aCkpOwot
ICAgIENhY2hlZFJlc291cmNlOjphZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgdXBkYXRlQnVm
ZmVySW50ZXJuYWwoU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKSk7CisgICAgQ2Fj
aGVkUmVzb3VyY2U6OnVwZGF0ZURhdGEoZGF0YSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBDYWNoZWRJ
bWFnZTo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCkBAIC00NjMsNyArNDg1LDcg
QEAgdm9pZCBDYWNoZWRJbWFnZTo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdQogICAgIGlmICghbV9p
bWFnZSAmJiBkYXRhKQogICAgICAgICBjcmVhdGVJbWFnZSgpOwogCi0gICAgRW5jb2RlZERhdGFT
dGF0dXMgZW5jb2RlZERhdGFTdGF0dXMgPSBzZXRJbWFnZURhdGFCdWZmZXIoZGF0YSwgdHJ1ZSk7
CisgICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMgPSB1cGRhdGVJbWFnZURh
dGEoZGF0YSwgdHJ1ZSk7CiAKICAgICBpZiAoZW5jb2RlZERhdGFTdGF0dXMgPT0gRW5jb2RlZERh
dGFTdGF0dXM6OkVycm9yIHx8IG1faW1hZ2UtPmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIEltYWdl
IGRlY29kaW5nIGZhaWxlZDsgdGhlIGltYWdlIGRhdGEgaXMgbWFsZm9ybWVkLgpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHJldmlzaW9uIDIyMzA2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGltYWdlSGFzUmVsYXRpdmVX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgJiYgbV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0
aCgpOyB9CiAgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9pbWFnZSAmJiBtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpOyB9CiAKLSAgICB2b2lkIGFk
ZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVCdWZm
ZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJl
ZEJ1ZmZlciopIG92ZXJyaWRlOwogCiAgICAgZW51bSBTaXplVHlwZSB7CkBAIC0xMDksOCArMTA5
LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCkgb3ZlcnJpZGU7CiAKLSAgICBFbmNvZGVkRGF0
YVN0YXR1cyBzZXRJbWFnZURhdGFCdWZmZXIoU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOwotICAgIHZvaWQgYWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpIG92ZXJyaWRlOworICAgIGJvb2wgc2hvdWxkRGVmZXJVcGRhdGVJbWFnZURhdGEoKSBjb25z
dDsKKyAgICB2b2lkIGRpZFVwZGF0ZUltYWdlRGF0YSgpOworICAgIEVuY29kZWREYXRhU3RhdHVz
IHVwZGF0ZUltYWdlRGF0YShTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Cisg
ICAgdm9pZCB1cGRhdGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBlcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzKSBvdmVycmlkZTsK
ICAgICB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92ZXJy
aWRlOwogCkBAIC0xNDksNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGltYWdlRnJhbWVB
dmFpbGFibGUoY29uc3QgSW1hZ2UmLCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0
KiBjaGFuZ2VSZWN0ID0gbnVsbHB0ciwgRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGluZ1N0YXR1czo6
SW52YWxpZCk7CiAgICAgdm9pZCBjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdlJiwgY29uc3QgSW50
UmVjdCopOwogCi0gICAgdm9pZCBhZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoU2hhcmVkQnVmZmVy
Jik7CisgICAgdm9pZCB1cGRhdGVCdWZmZXJJbnRlcm5hbChTaGFyZWRCdWZmZXImKTsKIAogICAg
IHZvaWQgZGlkUmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKCkgb3ZlcnJpZGU7CiAKQEAgLTE2
Niw2ICsxNjgsOSBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPENhY2hlZEltYWdlT2JzZXJ2ZXI+
IG1faW1hZ2VPYnNlcnZlcjsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgTW9ub3Rv
bmljVGltZSBtX2xhc3RVcGRhdGVJbWFnZURhdGFUaW1lOworICAgIHVuc2lnbmVkIG1fdXBkYXRl
SW1hZ2VEYXRhQ291bnQgeyAwIH07CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHSW1hZ2VDYWNo
ZT4gbV9zdmdJbWFnZUNhY2hlOwogICAgIGJvb2wgbV9pc01hbnVhbGx5Q2FjaGVkIHsgZmFsc2Ug
fTsKICAgICBib29sIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSB7IHRydWUgfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAko
cmV2aXNpb24gMjIzMDY1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJh
d1Jlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGQ6Om9wdGlv
bmFsPFNoYXJlZEJ1ZmZlckRhdGFWaWV3PiBDYWNoCiAgICAgcmV0dXJuIGRhdGEtPmdldFNvbWVE
YXRhKHByZXZpb3VzRGF0YUxlbmd0aCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmFk
ZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6
dXBkYXRlQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkKIHsKICAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBBU1NFUlQo
ZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOwpAQCAtNjksMTQgKzY5LDE0IEBA
IHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmFkZERhdGFCdWZmZXIoU2gKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIENhY2hlZFJlc291cmNlOjphZGREYXRhQnVmZmVyKGRhdGEpOworICAg
IENhY2hlZFJlc291cmNlOjp1cGRhdGVCdWZmZXIoZGF0YSk7CiB9CiAKLXZvaWQgQ2FjaGVkUmF3
UmVzb3VyY2U6OmFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQordm9p
ZCBDYWNoZWRSYXdSZXNvdXJjZTo6dXBkYXRlRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBEb05vdEJ1
ZmZlckRhdGEpOwogICAgIG5vdGlmeUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQoZGF0YSwgbGVuZ3Ro
KTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIENhY2hl
ZFJlc291cmNlOjp1cGRhdGVEYXRhKGRhdGEsIGxlbmd0aCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmF3
UmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9u
IDIyMzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCYpIGZpbmFsOwotICAg
IHZvaWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKSBmaW5hbDsKLSAgICB2b2lkIGFkZERh
dGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSBmaW5hbDsKKyAgICB2b2lkIHVw
ZGF0ZUJ1ZmZlcihTaGFyZWRCdWZmZXImKSBmaW5hbDsKKyAgICB2b2lkIHVwZGF0ZURhdGEoY29u
c3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSBmaW5hbDsKICAgICB2b2lkIGZpbmlzaExv
YWRpbmcoU2hhcmVkQnVmZmVyKikgZmluYWw7CiAKICAgICBib29sIHNob3VsZElnbm9yZUhUVFBT
dGF0dXNDb2RlRXJyb3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZp
c2lvbiAyMjMwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsMTIgKzM0MiwxMiBAQCB2b2lkIENhY2hlZFJl
c291cmNlOjpjaGVja05vdGlmeSgpCiAgICAgICAgIGNsaWVudC0+bm90aWZ5RmluaXNoZWQoKnRo
aXMpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlOjphZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZl
ciYpCit2b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVCdWZmZXIoU2hhcmVkQnVmZmVyJikKIHsK
ICAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOwogfQogCi12
b2lkIENhY2hlZFJlc291cmNlOjphZGREYXRhKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2U6OnVwZGF0ZURhdGEoY29uc3QgY2hhciosIHVuc2lnbmVkKQogewogICAg
IEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZp
c2lvbiAyMjMwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDggKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgeyB9CiAgICAgdmlydHVhbCBTdHJp
bmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgY29u
c3QgVGV4dFJlc291cmNlRGVjb2RlciogdGV4dFJlc291cmNlRGVjb2RlcigpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZm
ZXImKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCdWZmZXIoU2hhcmVkQnVmZmVyJik7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwCShy
ZXZpc2lvbiAyMjMwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkVGV4
dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBDYWNoZWRUZXh0VHJh
Y2s6OkNhY2hlZFRleHRUcmFjayhDYWNoZWRSCiB7CiB9CiAKLXZvaWQgQ2FjaGVkVGV4dFRyYWNr
Ojp1cGRhdGVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3ZvaWQgQ2FjaGVkVGV4dFRyYWNrOjpk
b1VwZGF0ZUJ1ZmZlcihTaGFyZWRCdWZmZXIqIGRhdGEpCiB7CiAgICAgQVNTRVJUKGRhdGFCdWZm
ZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtNTMs
MTUgKzUzLDE1IEBAIHZvaWQgQ2FjaGVkVGV4dFRyYWNrOjp1cGRhdGVEYXRhKFNoYXJlZEIKICAg
ICAgICAgY2xpZW50LT5kZXByZWNhdGVkRGlkUmVjZWl2ZUNhY2hlZFJlc291cmNlKCp0aGlzKTsK
IH0KIAotdm9pZCBDYWNoZWRUZXh0VHJhY2s6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBk
YXRhKQordm9pZCBDYWNoZWRUZXh0VHJhY2s6OnVwZGF0ZUJ1ZmZlcihTaGFyZWRCdWZmZXImIGRh
dGEpCiB7Ci0gICAgdXBkYXRlRGF0YSgmZGF0YSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmFkZERh
dGFCdWZmZXIoZGF0YSk7CisgICAgZG9VcGRhdGVCdWZmZXIoJmRhdGEpOworICAgIENhY2hlZFJl
c291cmNlOjp1cGRhdGVCdWZmZXIoZGF0YSk7CiB9CiAKIHZvaWQgQ2FjaGVkVGV4dFRyYWNrOjpm
aW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICB1cGRhdGVEYXRhKGRhdGEp
OworICAgIGRvVXBkYXRlQnVmZmVyKGRhdGEpOwogICAgIENhY2hlZFJlc291cmNlOjpmaW5pc2hM
b2FkaW5nKGRhdGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFRleHRUcmFjay5oCShyZXZpc2lvbiAyMjMwNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICsz
NywxMCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2Rl
ZERhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBhZGREYXRh
QnVmZmVyKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlQnVmZmVyKFNo
YXJlZEJ1ZmZlciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZm
ZXIqKSBvdmVycmlkZTsKIAotICAgIHZvaWQgdXBkYXRlRGF0YShTaGFyZWRCdWZmZXIqKTsKKyAg
ICB2b2lkIGRvVXBkYXRlQnVmZmVyKFNoYXJlZEJ1ZmZlciopOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjIzMDY1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMzQg
KzExMywxMyBAQCB2b2lkIEltYWdlU291cmNlOjpyZXNldERhdGEoU2hhcmVkQnVmZmVyCiAKIEVu
Y29kZWREYXRhU3RhdHVzIEltYWdlU291cmNlOjpkYXRhQ2hhbmdlZChTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jl
c3NpdmUgbG9hZGluZyBhbmQgbWFrZSB0aGlzCi0gICAgLy8gY29kZSBjb25kaXRpb25hbCBvbiBp
dC4gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgY2h1bmtMb2FkSW50ZXJ2YWxzW10gPSB7MCwgMSwgMywgNiwgMTV9Owot
ICAgIGRvdWJsZSBpbnRlcnZhbCA9IGNodW5rTG9hZEludGVydmFsc1tzdGQ6Om1pbihtX3Byb2dy
ZXNzaXZlTG9hZENodW5rQ291bnQsIHN0YXRpY19jYXN0PHVpbnQxNl90Pig0KSldOwotCi0gICAg
Ym9vbCBuZWVkc1VwZGF0ZSA9IGZhbHNlOwotCi0gICAgLy8gVGhlIGZpcnN0IHRpbWUgdGhyb3Vn
aCwgdGhlIGNodW5rIHRpbWUgd2lsbCBiZSAwIGFuZCB0aGUgaW1hZ2Ugd2lsbCBnZXQgYW4gdXBk
YXRlLgotICAgIGlmIChjdXJyZW50VGltZSgpIC0gbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUg
PiBpbnRlcnZhbCkgewotICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgICAgIG1fcHJv
Z3Jlc3NpdmVMb2FkQ2h1bmtUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICAgICAgQVNTRVJUKG1f
cHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90
Pjo6bWF4KCkpOwotICAgICAgICArK21fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudDsKLSAgICB9
Ci0KLSAgICBpZiAobmVlZHNVcGRhdGUgfHwgYWxsRGF0YVJlY2VpdmVkKQotICAgICAgICBzZXRE
YXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0jZWxzZQogICAgIHNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKLSNlbmRpZgotCiAgICAgbV9mcmFtZUNhY2hlLT5jbGVhck1ldGFkYXRh
KCk7CisKICAgICBFbmNvZGVkRGF0YVN0YXR1cyBzdGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygp
OwotICAgIGlmIChzdGF0dXMgPCBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSkKLSAg
ICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICBpZiAoc3RhdHVzID49IEVuY29kZWREYXRhU3RhdHVz
OjpTaXplQXZhaWxhYmxlKQorICAgICAgICBtX2ZyYW1lQ2FjaGUtPmdyb3dGcmFtZXMoKTsKIAot
ICAgIG1fZnJhbWVDYWNoZS0+Z3Jvd0ZyYW1lcygpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAkocmV2aXNpb24gMjIzMDY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEyICsxMjEsNiBAQCBwcml2YXRl
OgogCiAgICAgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiBtX21heGltdW1TdWJzYW1w
bGluZ0xldmVsOwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHNv
IHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KLSAgICBkb3VibGUg
bV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgeyAwIH07Ci0gICAgdWludDE2X3QgbV9wcm9ncmVz
c2l2ZUxvYWRDaHVua0NvdW50IHsgMCB9OwotI2VuZGlmCi0KICAgICBBbHBoYU9wdGlvbiBtX2Fs
cGhhT3B0aW9uIHsgQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQgfTsKICAgICBHYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIHsgR2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQgfTsKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>