<?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>157857</bug_id>
          
          <creation_ts>2016-05-18 12:41:32 -0700</creation_ts>
          <short_desc>[iOS] PDFDocumentImage should not create a cached image larger than 4M pixels</short_desc>
          <delta_ts>2016-06-13 18:08:32 -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=158715</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>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>jonlee</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1194377</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-18 12:41:32 -0700</bug_when>
    <thetext>This has been causing a memory jetsam on iOS devices when opening a large single page PDF file and zooming. When zooming on this PDF, PDFDocumentImage::draw() tries to update its cached image first. The purpose of this caching is to make redrawing the same part of the PDF document faster. The problem is the image we cache for a single tile has to be scaled with the current zooming factor. At the maximum zooming level, the image size is a little bit larger than (4000x4000) pixels. This requires 4000x4000x4=64MB.

This is a huge memory to be allocated for a single tile especially on low-memory machine or devices. Luckily PDFDocumentImage::draw() can fallback peacefully if the cached image can&apos;t be created for any reason. All it does is transformContextForPainting() and then  drawPDFPage() which will draw exactly the same thing the cached image would have drawn if it was created. 

The fix it to prevent creating the cached image for the PDFDocumentImage if its size is more than 4B pixels. The only drawback for this fix is the render will be a little bit slower when zooming on a PDFDocumentImage. But with lower zooming factors, the caching will still happen and the rendering/scrolling perf will not be affected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194383</commentid>
    <comment_count>1</comment_count>
      <attachid>279273</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-18 12:42:49 -0700</bug_when>
    <thetext>Created attachment 279273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194384</commentid>
    <comment_count>2</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-18 12:43:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/25876032&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194439</commentid>
    <comment_count>3</comment_count>
      <attachid>279294</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-18 15:07:38 -0700</bug_when>
    <thetext>Created attachment 279294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194450</commentid>
    <comment_count>4</comment_count>
      <attachid>279294</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-05-18 15:20:59 -0700</bug_when>
    <thetext>Comment on attachment 279294
Patch

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

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:152
&gt; +    if (!shouldCreateCachedImage(context, dstRect))

If you already have a cached image and then change scale, we should throw the old one away here, otherwise we&apos;ll keep reusing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194485</commentid>
    <comment_count>5</comment_count>
      <attachid>279294</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-05-18 16:05:01 -0700</bug_when>
    <thetext>Comment on attachment 279294
Patch

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

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:123
&gt; +    AffineTransform transform = context.getCTM(GraphicsContext::DefinitelyIncludeDeviceScale);
&gt; +    FloatSize scaledSize(dstRect.width() * transform.xScale(), dstRect.height() * transform.yScale());

It&apos;s not clear that this copies logic that createCompatibleBuffer has. Maybe share the code?

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:124
&gt; +    return scaledSize.area() &lt; FloatSize(2000, 2000).area();

I don&apos;t think we have enough confidence that this is the right threshold, without regressing the bug that added the cache (bug 121207 and its associated radar).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195052</commentid>
    <comment_count>6</comment_count>
      <attachid>279456</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-19 17:27:08 -0700</bug_when>
    <thetext>Created attachment 279456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195064</commentid>
    <comment_count>7</comment_count>
      <attachid>279294</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-19 18:01:26 -0700</bug_when>
    <thetext>Comment on attachment 279294
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:123
&gt;&gt; +    FloatSize scaledSize(dstRect.width() * transform.xScale(), dstRect.height() * transform.yScale());
&gt; 
&gt; It&apos;s not clear that this copies logic that createCompatibleBuffer has. Maybe share the code?

Done. createCompatibleBuffer() was moved from GraphicsContext to ImageBuffer. A new function called ImageBuffer::canCreateCompatibleBuffer() is added to check the size limit. A shared function called ImageBuffer::compatibleBufferSize() is added to the size scaling and is used by ImageBuffer::createCompatibleBuffer() and ImageBuffer::canCreateCompatibleBuffer().

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:124
&gt;&gt; +    return scaledSize.area() &lt; FloatSize(2000, 2000).area();
&gt; 
&gt; I don&apos;t think we have enough confidence that this is the right threshold, without regressing the bug that added the cache (bug 121207 and its associated radar).

I made the (2048x2048) limit be used for iOS or non-accelated drawing. Otherwise, we use the IOSurface::maximumSize() as the limit for the cached image.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:152
&gt;&gt; +    if (!shouldCreateCachedImage(context, dstRect))
&gt; 
&gt; If you already have a cached image and then change scale, we should throw the old one away here, otherwise we&apos;ll keep reusing it.

Done. m_cachedImageBuffer is now set to nullptr before returning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195864</commentid>
    <comment_count>8</comment_count>
      <attachid>279456</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-24 09:11:15 -0700</bug_when>
    <thetext>Comment on attachment 279456
Patch

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

Looks OK. I have quite a few doubts and questions, though.

&gt; Source/WebCore/ChangeLog:9
&gt; +        the 4M pixels limit, do not create it. PDFDocumentImage::draw() fallbacks

Should be &quot;falls back&quot; rather than &quot;fallbacks&quot;.

&gt; Source/WebCore/ChangeLog:14
&gt; +        through the cached image. This means the whole PDF will be drawn multiple
&gt; +        times; one time for each tile. I think this is okay for zooming in a
&gt; +        large PDFDocumentImage.

Are you sure this is OK. Couldn’t this be terribly slow with a complex PDF?

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2451
&gt; +        std::unique_ptr&lt;ImageBuffer&gt; maskImage = ImageBuffer::createCompatibleBuffer(maskRect.size(), *c);

Would be nice to use auto instead of writing out std::unique_ptr.

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:605
&gt; +        std::unique_ptr&lt;ImageBuffer&gt; buffer = ImageBuffer::createCompatibleBuffer(expandedIntSize(tileRect.size()), ctxt);

Would be nice to use auto instead of writing out std::unique_ptr.

&gt; Source/WebCore/platform/graphics/FloatSize.h:92
&gt; +    FloatSize scaledBy(const FloatSize&amp; other) const
&gt; +    {
&gt; +        return FloatSize(m_width * other.m_width, m_height * other.m_height);
&gt; +    }

Maybe this should just be operator* instead of a named function?

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:1036
&gt; +    return FloatSize(transform.xScale(), transform.yScale());

Seems unfortunate for this to convert double to float every time. I am vexed by the way we mix double and float.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:485
&gt; +    FloatSize getCTMScale() const;

WebKit coding style prohibits the word &quot;get&quot; for functions like this one. I’m not super happy with the term “CTM” here. I know it’s a term of art for some graphics experts, but not for me.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:171
&gt; +    return expandedIntSize(size.scaledBy(context.getCTMScale()));

Seems inefficient to do this by converting to int and then back to float. Also will corrupt values that are outside the range of int.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:178
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; buffer = ImageBuffer::createCompatibleBuffer(scaledSize, 1, ColorSpaceSRGB, context, hasAlpha);

Would be nicer to use auto here instead of writing out the type explicitly.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:183
&gt; +    buffer-&gt;context().scale(FloatSize(scaledSize.width() / size.width(), scaledSize.height() / size.height()));

Are we sure we won’t have any division by zero? Could use { } syntax instead of naming the type FloatSize here.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:198
&gt; +}
&gt; +    
&gt; +
&gt; +bool ImageBuffer::isCompatibleWithContext(const GraphicsContext&amp; context) const

Extra unwanted blank line here.

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:83
&gt; +    // Create an image buffer compatible with the context, with suitable resolution
&gt; +    // for drawing into the buffer and then into this context.

Should be all on one line.

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:87
&gt; +    static bool canCreateCompatibleBuffer(const FloatSize&amp;, const GraphicsContext&amp;, const FloatSize&amp; maxSize);

Seems peculiar to pass a maximum size when it’s actually a maximum area.

&gt; Source/WebCore/platform/graphics/NamedImageGeneratedImage.cpp:67
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; imageBuffer = ImageBuffer::createCompatibleBuffer(size(), context, true);

Would be nice to use auto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197294</commentid>
    <comment_count>9</comment_count>
      <attachid>280014</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-27 18:26:17 -0700</bug_when>
    <thetext>Created attachment 280014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197297</commentid>
    <comment_count>10</comment_count>
      <attachid>279456</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-27 18:40:24 -0700</bug_when>
    <thetext>Comment on attachment 279456
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        the 4M pixels limit, do not create it. PDFDocumentImage::draw() fallbacks
&gt; 
&gt; Should be &quot;falls back&quot; rather than &quot;fallbacks&quot;.

Fixed.

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        large PDFDocumentImage.
&gt; 
&gt; Are you sure this is OK. Couldn’t this be terribly slow with a complex PDF?

The cachedImage size limitation will be applied only on iOS and only when the systemPhysicalMemory &lt;= 1GB.

&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:2451
&gt;&gt; +        std::unique_ptr&lt;ImageBuffer&gt; maskImage = ImageBuffer::createCompatibleBuffer(maskRect.size(), *c);
&gt; 
&gt; Would be nice to use auto instead of writing out std::unique_ptr.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:605
&gt;&gt; +        std::unique_ptr&lt;ImageBuffer&gt; buffer = ImageBuffer::createCompatibleBuffer(expandedIntSize(tileRect.size()), ctxt);
&gt; 
&gt; Would be nice to use auto instead of writing out std::unique_ptr.

Fixed

&gt;&gt; Source/WebCore/platform/graphics/FloatSize.h:92
&gt;&gt; +    }
&gt; 
&gt; Maybe this should just be operator* instead of a named function?

Operator* is added instead of a named function.

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext.h:485
&gt;&gt; +    FloatSize getCTMScale() const;
&gt; 
&gt; WebKit coding style prohibits the word &quot;get&quot; for functions like this one. I’m not super happy with the term “CTM” here. I know it’s a term of art for some graphics experts, but not for me.

The function name was changed to be scaleFactor().

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:171
&gt;&gt; +    return expandedIntSize(size.scaledBy(context.getCTMScale()));
&gt; 
&gt; Seems inefficient to do this by converting to int and then back to float. Also will corrupt values that are outside the range of int.

ceilf() is used instead of expandedIntSize().

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:178
&gt;&gt; +    std::unique_ptr&lt;ImageBuffer&gt; buffer = ImageBuffer::createCompatibleBuffer(scaledSize, 1, ColorSpaceSRGB, context, hasAlpha);
&gt; 
&gt; Would be nicer to use auto here instead of writing out the type explicitly.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:183
&gt;&gt; +    buffer-&gt;context().scale(FloatSize(scaledSize.width() / size.width(), scaledSize.height() / size.height()));
&gt; 
&gt; Are we sure we won’t have any division by zero? Could use { } syntax instead of naming the type FloatSize here.

Checking size.isEmpty() is added at the beginning of this function. Also I do not think we need to do this calculation because scaledSize / size is equal to context.scaleFactor() unless ceilf() in compatibleBufferSize() adds extra pixels. But do we need to scale by the ratio of the expanded scaledSize to size? I do not think so. isCompatibleWithContext() checks whether the scaleFactor of the drawing context is equal to the scaleFactor of ImageBuffer context to reuse the same cachedImage. If they are different because of this pixel expansion, we are going to recreate the cache every time the PDFDocumentImage is drawn. So the buffer-&gt;context should be scaled by context.scaleFactor().

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:198
&gt;&gt; +bool ImageBuffer::isCompatibleWithContext(const GraphicsContext&amp; context) const
&gt; 
&gt; Extra unwanted blank line here.

Removed.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:83
&gt;&gt; +    // for drawing into the buffer and then into this context.
&gt; 
&gt; Should be all on one line.

Done.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:87
&gt;&gt; +    static bool canCreateCompatibleBuffer(const FloatSize&amp;, const GraphicsContext&amp;, const FloatSize&amp; maxSize);
&gt; 
&gt; Seems peculiar to pass a maximum size when it’s actually a maximum area.

This function is removed. Instead the caller calls ImageBuffer::compatibleBufferSize() and compare its area() with the maxArea.

&gt;&gt; Source/WebCore/platform/graphics/NamedImageGeneratedImage.cpp:67
&gt;&gt; +    std::unique_ptr&lt;ImageBuffer&gt; imageBuffer = ImageBuffer::createCompatibleBuffer(size(), context, true);
&gt; 
&gt; Would be nice to use auto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198359</commentid>
    <comment_count>11</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-01 17:42:18 -0700</bug_when>
    <thetext>Can someone in the CC list do a final review for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198424</commentid>
    <comment_count>12</comment_count>
      <attachid>280014</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-06-01 20:54:28 -0700</bug_when>
    <thetext>Comment on attachment 280014
Patch

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

I’m going to say review- because we should not add a new physical memory function since we already have one.

&gt; Source/WebCore/platform/cocoa/SystemInfo.h:28
&gt; +WEBCORE_EXPORT unsigned long long systemPhysicalMemory();

Please do not add this. Instead use the ramSize() function from &lt;wtf/RAMSize.h&gt;.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:193
&gt; +    return { ceilf(scaledSize.width()), ceilf(scaledSize.height()) };

Should be using std::ceil rather than ceilf. But why aren’t we using expandedIntSize here? Further, I also don’t understand exactly why rounding to an integer is the correct thing to do, and why it is done here instead of in the createCompatibleBuffer function.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:198
&gt; +    return context.scaleFactor() == this-&gt;context().scaleFactor();

Given that these are computed with floating point math, is it safe to actually check == here? Could we get false negatives?

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:147
&gt; +    // On iOS, if the physical memory is less than 1GB, do not allocate more than 16MB for the PDF cachedImage.

I don’t understand this rule; why no limit at all when the physical memory is greater than 1 GB?

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:148
&gt; +    const float memoryThreshold = 1 &lt;&lt; 30;

Why float for this? systemPhysicalMemory returns unsigned long long; I don’t understand the rationale for involving floating point. I would write this:

    const unsigned memoryThreshold = 1024 * MB;

Or you could even add GB to StdLibExtras.h alongside MB.

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:149
&gt; +    const float maxArea = 1 &lt;&lt; 22;

There is nothing in the expression 1 &lt;&lt; 22 that says 16 MB to me. The comment doesn’t make it clear why this is the correct value for this constant. I assume this involves a factor of 4 because of the &quot;4 bytes per pixel&quot; assumption. If I wanted to make it possible to see the 16 MB I’d write something more like this:

    const float maxArea = 16 * MB / 4; // 16 MB maximum size, divided by a rough cost of 4 bytes per pixel of area.

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:175
&gt; +    GraphicsContext&amp; bufferContext = m_cachedImageBuffer-&gt;context();

I’d use auto&amp; here.

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:186
&gt; +    m_cachedBytes = internalSize.width() * internalSize.height() * 4;

What guarantees this calculation doesn’t overflow a 32-bit integer? While m_cachedBytes is a size_t, the calculation will be done as an int, since all three things we are multiplying are int. The safeCast below doesn’t do us any good because the overflow could happen here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198723</commentid>
    <comment_count>13</comment_count>
      <attachid>280375</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-02 15:54:10 -0700</bug_when>
    <thetext>Created attachment 280375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198730</commentid>
    <comment_count>14</comment_count>
      <attachid>280014</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-02 16:06:27 -0700</bug_when>
    <thetext>Comment on attachment 280014
Patch

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

&gt;&gt; Source/WebCore/platform/cocoa/SystemInfo.h:28
&gt;&gt; +WEBCORE_EXPORT unsigned long long systemPhysicalMemory();
&gt; 
&gt; Please do not add this. Instead use the ramSize() function from &lt;wtf/RAMSize.h&gt;.

Done. I was not aware of ramSize() existence.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:193
&gt;&gt; +    return { ceilf(scaledSize.width()), ceilf(scaledSize.height()) };
&gt; 
&gt; Should be using std::ceil rather than ceilf. But why aren’t we using expandedIntSize here? Further, I also don’t understand exactly why rounding to an integer is the correct thing to do, and why it is done here instead of in the createCompatibleBuffer function.

Done. compatibleBufferSize() returns the scaled size without expansion. And createCompatibleBuffer() expandedIntSize(scaledSize) when creating the ImageBuffer.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:198
&gt;&gt; +    return context.scaleFactor() == this-&gt;context().scaleFactor();
&gt; 
&gt; Given that these are computed with floating point math, is it safe to actually check == here? Could we get false negatives?

Done. areEssentiallyEqual() is used instead of operator==().

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:147
&gt;&gt; +    // On iOS, if the physical memory is less than 1GB, do not allocate more than 16MB for the PDF cachedImage.
&gt; 
&gt; I don’t understand this rule; why no limit at all when the physical memory is greater than 1 GB?

Because I do not know the right heuristic to be applied it here. I am fixing a bug which happens only on low end devices. If there is a rule which covers all cases, I will be happy to change the code accordingly.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:148
&gt;&gt; +    const float memoryThreshold = 1 &lt;&lt; 30;
&gt; 
&gt; Why float for this? systemPhysicalMemory returns unsigned long long; I don’t understand the rationale for involving floating point. I would write this:
&gt; 
&gt;     const unsigned memoryThreshold = 1024 * MB;
&gt; 
&gt; Or you could even add GB to StdLibExtras.h alongside MB.

Done. A constant value for GB is added to StdLibExtras.h.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:149
&gt;&gt; +    const float maxArea = 1 &lt;&lt; 22;
&gt; 
&gt; There is nothing in the expression 1 &lt;&lt; 22 that says 16 MB to me. The comment doesn’t make it clear why this is the correct value for this constant. I assume this involves a factor of 4 because of the &quot;4 bytes per pixel&quot; assumption. If I wanted to make it possible to see the 16 MB I’d write something more like this:
&gt; 
&gt;     const float maxArea = 16 * MB / 4; // 16 MB maximum size, divided by a rough cost of 4 bytes per pixel of area.

Done. The initialization of the maxArea is rewritten and a comment is added as well.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:175
&gt;&gt; +    GraphicsContext&amp; bufferContext = m_cachedImageBuffer-&gt;context();
&gt; 
&gt; I’d use auto&amp; here.

Done.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:186
&gt;&gt; +    m_cachedBytes = internalSize.width() * internalSize.height() * 4;
&gt; 
&gt; What guarantees this calculation doesn’t overflow a 32-bit integer? While m_cachedBytes is a size_t, the calculation will be done as an int, since all three things we are multiplying are int. The safeCast below doesn’t do us any good because the overflow could happen here.

Done. internalSize.width() was casted to size_t to force size_t multiplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198765</commentid>
    <comment_count>15</comment_count>
      <attachid>280375</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-02 17:38:38 -0700</bug_when>
    <thetext>Comment on attachment 280375
Patch

Clearing flags on attachment: 280375

Committed r201629: &lt;http://trac.webkit.org/changeset/201629&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198766</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-02 17:38:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279273</attachid>
            <date>2016-05-18 12:42:49 -0700</date>
            <delta_ts>2016-05-18 15:07:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157857-20160518124348.patch</filename>
            <type>text/plain</type>
            <size>3512</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAwZTlhNGY0ZjY0NTJh
OWExOWMyOTNhMzdmZGQyNjhiYzI2YTU4Yy4uZTYyZjg1YjE4NTcxZTI0M2ZiMDQ5MDRhYjNiYWYz
MjJlMmJjZTBlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA1LTE4ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgUERGRG9j
dW1lbnRJbWFnZSBzaG91bGQgbm90IGNyZWF0ZSBhIGNhY2hlZCBpbWFnZSBsYXJnZXIgdGhhbiA0
TUIgcGl4ZWxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJZiB0aGUgc2NhbGVkIHNpemUgb2YgdGhlIFBERkRvY3VtZW50SW1hZ2UgY2FjaGVkIGltYWdl
IGV4Y2VlZHMgdGhlIDRNQgorICAgICAgICBwaXhlbHMgbGltaXQsIGRvIG5vdCBjcmVhdGUgaXQu
IFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoKSB3aWxsIGZhbGxiYWNrCisgICAgICAgIHBlYWNlZnVs
bHkgaWYgdGhlIGNhY2hlZCBpbWFnZSBjYW4ndCBiZSBjcmVhdGVkIGZvciBhbnkgcmVhc29uLiBU
aGUgUERGCisgICAgICAgIHdpbGwgYmUgZHJhd24gZGlyZWN0bHksIG5vdCB0aHJvdWdoIHRoZSBj
YWNoZWQgaW1hZ2UsIHNvIGl0IHdvbid0IGJlCisgICAgICAgIGNhY2hlZCB3aGljaCBpcyBva2F5
IHdpdGggYSBsYXJnZSB6b29taW5nIGZhY3Rvci4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OmFy
ZWEpOiBBIGhlbHBlciBmdW5jdGlvbiBzaW1pbGFyIHRvIEludFNpemU6OmFyZWEoKS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNob3VsZENyZWF0ZUNhY2hlZEltYWdlKTogUHJldmVudHMgdGhlIGNhY2hlZCBp
bWFnZSBjcmVhdGlvbiBpZiBpdHMgc2l6ZSBpcyBsYXJnZXIgdGhhbiA0TUIgcGl4ZWxzLgorICAg
ICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRl
ZCk6IENoZWNrIGZpcnN0IHdoZXRoZXIgdGhlIGNhY2hlZCBpbWFnZSBjYW4gYmUgY3JlYXRlZCBv
ciBub3QuCisKIDIwMTYtMDUtMTYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBjb250YWluaW5nQmxvY2tGb3IqUG9zaXRpb24gZnVuY3Rpb25zIHNob3VsZCB0YWtl
IHRoZSByZW5kZXJlciBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCmluZGV4IDUyMTNjOWFhY2UzNTZhNWZmMWU4MzU2
YTRlNWEyM2IyYzQxMTNjNDIuLjc2ODkzZTczNDhiMjgzMzM0NGM1YmQ4NGNmZTIyMzZiMjNlNzU3
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCkBA
IC0xMDMsNiArMTAzLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dpZHRo
ICogbV93aWR0aCArIG1faGVpZ2h0ICogbV9oZWlnaHQ7CiAgICAgfQorICAgIAorICAgIGZsb2F0
IGFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBtX2hlaWdodDsK
KyAgICB9CiAKICAgICBGbG9hdFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAogICAgIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5jcHAKaW5kZXggZWY3NmI4NjNkN2E4ZmM5YzQzMDYyNTY1ZjRiM2UzMjdkYWE3MzYy
NC4uNTIwZWRjZjMzYWM0MzMwZDA3MWU1MTA0ODllOTM0NDNlMDVlNDQxMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5jcHAKQEAgLTExNiw2ICsxMTYsMTMgQEAgYm9vbCBQREZEb2N1bWVudEltYWdlOjpjYWNoZVBh
cmFtZXRlcnNNYXRjaChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2EKIAogICAg
IHJldHVybiB0cnVlOwogfQorICAgIAorc3RhdGljIGJvb2wgc2hvdWxkQ3JlYXRlQ2FjaGVkSW1h
Z2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCit7
CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgRmxvYXRTaXplIHNj
YWxlZFNpemUoZHN0UmVjdC53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpLCBkc3RSZWN0Lmhl
aWdodCgpICogdHJhbnNmb3JtLnlTY2FsZSgpKTsKKyAgICByZXR1cm4gc2NhbGVkU2l6ZS5hcmVh
KCkgPCBGbG9hdFNpemUoMjAwMCwgMjAwMCkuYXJlYSgpOworfQogCiBzdGF0aWMgdm9pZCB0cmFu
c2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKIHsKQEAgLTE0Miw2
ICsxNDksOSBAQCBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogCiB2b2lkIFBERkRvY3VtZW50SW1h
Z2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKIHsKKyAg
ICBpZiAoIXNob3VsZENyZWF0ZUNhY2hlZEltYWdlKGNvbnRleHQsIGRzdFJlY3QpKQorICAgICAg
ICByZXR1cm47CisgICAgCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIE9uIGlPUywgc29tZSBj
bGllbnRzIHVzZSBsb3ctcXVhbGl0eSBpbWFnZSBpbnRlcnBvbGF0aW9uIGFsd2F5cywgd2hpY2gg
dGhyb3dzIG9mZiB0aGlzIG9wdGltaXphdGlvbiwKICAgICAvLyBhcyB3ZSBuZXZlciBnZXQgdGhl
IHN1YnNlcXVlbnQgaGlnaC1xdWFsaXR5IHBhaW50LiBTaW5jZSBsaXZlIHJlc2l6ZSBpcyByYXJl
IG9uIGlPUywgZGlzYWJsZSB0aGUgb3B0aW1pemF0aW9uLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279294</attachid>
            <date>2016-05-18 15:07:38 -0700</date>
            <delta_ts>2016-05-19 17:27:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157857-20160518150837.patch</filename>
            <type>text/plain</type>
            <size>3505</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAwZTlhNGY0ZjY0NTJh
OWExOWMyOTNhMzdmZGQyNjhiYzI2YTU4Yy4uMTAxZjBmYzFlYmQ4ODc3YzQyZTRjNDZiZjZkNjQ2
NzdlNTQ2YTg4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA1LTE4ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgUERGRG9j
dW1lbnRJbWFnZSBzaG91bGQgbm90IGNyZWF0ZSBhIGNhY2hlZCBpbWFnZSBsYXJnZXIgdGhhbiA0
TSBwaXhlbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1Nzg1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IElmIHRoZSBzY2FsZWQgc2l6ZSBvZiB0aGUgUERGRG9jdW1lbnRJbWFnZSBjYWNoZWQgaW1hZ2Ug
ZXhjZWVkcyB0aGUgNE0KKyAgICAgICAgcGl4ZWxzIGxpbWl0LCBkbyBub3QgY3JlYXRlIGl0LiBQ
REZEb2N1bWVudEltYWdlOjpkcmF3KCkgd2lsbCBmYWxsYmFjaworICAgICAgICBwZWFjZWZ1bGx5
IGlmIHRoZSBjYWNoZWQgaW1hZ2UgY291bGRuJ3QgYmUgY3JlYXRlZCBmb3IgYW55IHJlYXNvbi4g
VGhlIFBERgorICAgICAgICB3aWxsIGJlIGRyYXduIGRpcmVjdGx5LCBub3QgdGhyb3VnaCB0aGUg
Y2FjaGVkIGltYWdlLCBzbyBpdCB3b24ndCBiZQorICAgICAgICBjYWNoZWQgd2hpY2ggaXMgb2th
eSBmb3IgYSBsYXJnZSB6b29taW5nIGZhY3Rvci4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OmFy
ZWEpOiBBIGhlbHBlciBmdW5jdGlvbiBzaW1pbGFyIHRvIEludFNpemU6OmFyZWEoKS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNob3VsZENyZWF0ZUNhY2hlZEltYWdlKTogUHJldmVudHMgdGhlIGNhY2hlZCBp
bWFnZSBjcmVhdGlvbiBpZiBpdHMgc2l6ZSBpcyBsYXJnZXIgdGhhbiA0TSBwaXhlbHMuCisgICAg
ICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVk
KTogQ2hlY2sgd2hldGhlciB0aGUgY2FjaGVkIGltYWdlIGNhbiBiZSBjcmVhdGVkIG9yIG5vdC4K
KwogMjAxNi0wNS0xNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IGNvbnRhaW5pbmdCbG9ja0ZvcipQb3NpdGlvbiBmdW5jdGlvbnMgc2hvdWxkIHRha2UgdGhlIHJl
bmRlcmVyIGluc3RlYWQgb2YgdGhlIHBhcmVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRTaXplLmgKaW5kZXggNTIxM2M5YWFjZTM1NmE1ZmYxZTgzNTZhNGU1YTIz
YjJjNDExM2M0Mi4uNzY4OTNlNzM0OGIyODMzMzQ0YzViZDg0Y2ZlMjIzNmIyM2U3NTdmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKQEAgLTEwMyw2
ICsxMDMsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBtX3dp
ZHRoICsgbV9oZWlnaHQgKiBtX2hlaWdodDsKICAgICB9CisgICAgCisgICAgZmxvYXQgYXJlYSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1faGVpZ2h0OworICAgIH0K
IAogICAgIEZsb2F0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcAppbmRleCBlZjc2Yjg2M2Q3YThmYzljNDMwNjI1NjVmNGIzZTMyN2RhYTczNjI0Li41MjBl
ZGNmMzNhYzQzMzBkMDcxZTUxMDQ4OWU5MzQ0M2UwNWU0NDEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApA
QCAtMTE2LDYgKzExNiwxMyBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVy
c01hdGNoKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYQogCiAgICAgcmV0dXJu
IHRydWU7CiB9CisgICAgCitzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVDYWNoZWRJbWFnZShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3sKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6
ZShkc3RSZWN0LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCksIGRzdFJlY3QuaGVpZ2h0KCkg
KiB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIHJldHVybiBzY2FsZWRTaXplLmFyZWEoKSA8IEZs
b2F0U2l6ZSgyMDAwLCAyMDAwKS5hcmVhKCk7Cit9CiAKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUNv
bnRleHRGb3JQYWludGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQogewpAQCAtMTQyLDYgKzE0OSw5
IEBAIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjCiAKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBk
YXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQogeworICAgIGlmICgh
c2hvdWxkQ3JlYXRlQ2FjaGVkSW1hZ2UoY29udGV4dCwgZHN0UmVjdCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gT24gaU9TLCBzb21lIGNsaWVudHMg
dXNlIGxvdy1xdWFsaXR5IGltYWdlIGludGVycG9sYXRpb24gYWx3YXlzLCB3aGljaCB0aHJvd3Mg
b2ZmIHRoaXMgb3B0aW1pemF0aW9uLAogICAgIC8vIGFzIHdlIG5ldmVyIGdldCB0aGUgc3Vic2Vx
dWVudCBoaWdoLXF1YWxpdHkgcGFpbnQuIFNpbmNlIGxpdmUgcmVzaXplIGlzIHJhcmUgb24gaU9T
LCBkaXNhYmxlIHRoZSBvcHRpbWl6YXRpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279456</attachid>
            <date>2016-05-19 17:27:08 -0700</date>
            <delta_ts>2016-05-27 18:26:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157857-20160519172808.patch</filename>
            <type>text/plain</type>
            <size>20359</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAwZTlhNGY0ZjY0NTJh
OWExOWMyOTNhMzdmZGQyNjhiYzI2YTU4Yy4uZmU0YWMwZWMzZWFjMDViMjg2NWY2MTJhZTlmOTA1
NTk0MWEwZWZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTA1LTE5ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgW2lPU10g
UERGRG9jdW1lbnRJbWFnZSBzaG91bGQgbm90IGNyZWF0ZSBhIGNhY2hlZCBpbWFnZSBsYXJnZXIg
dGhhbiA0TSBwaXhlbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Nzg1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZvciBpT1MsIGlmIHRoZSBzY2FsZWQgc2l6ZSBvZiB0aGUgUERGRG9jdW1lbnRJbWFn
ZSBjYWNoZWQgaW1hZ2UgZXhjZWVkcworICAgICAgICB0aGUgNE0gcGl4ZWxzIGxpbWl0LCBkbyBu
b3QgY3JlYXRlIGl0LiBQREZEb2N1bWVudEltYWdlOjpkcmF3KCkgZmFsbGJhY2tzCisgICAgICAg
IHBlYWNlZnVsbHkgaWYgdGhlIGNhY2hlZCBpbWFnZSBjb3VsZG4ndCBiZSBjcmVhdGVkIGZvciBh
bnkgcmVhc29uLiBUaGUKKyAgICAgICAgUERGIHdpbGwgYmUgZHJhd24gZGlyZWN0bHkgdG8gdGhl
IEdyYXBoaWNzQ29udGV4dCB3aXRob3V0IGhhdmluZyB0byBnbworICAgICAgICB0aHJvdWdoIHRo
ZSBjYWNoZWQgaW1hZ2UuIFRoaXMgbWVhbnMgdGhlIHdob2xlIFBERiB3aWxsIGJlIGRyYXduIG11
bHRpcGxlCisgICAgICAgIHRpbWVzOyBvbmUgdGltZSBmb3IgZWFjaCB0aWxlLiBJIHRoaW5rIHRo
aXMgaXMgb2theSBmb3Igem9vbWluZyBpbiBhCisgICAgICAgIGxhcmdlIFBERkRvY3VtZW50SW1h
Z2UuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dElu
dGVybmFsKTogQ2FsbCB0aGUgc3RhdGljIGZ1bmN0aW9uCisgICAgICAgIEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKCkgd2l0aG91dCBoYXZpbmcgdG8gZ28gdGhyb3VnaCB0aGUg
R3JhcGhpY3NDb250ZXh0LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd1BhdHRl
cm4pOiBEaXR0by4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OnNjYWxlZEJ5KTogU2NhbGUgdGhl
IEZsb2F0U2l6ZSBieSBhbm90aGVyIEZsb2F0U2l6ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OmFyZWEpOiBBIGhlbHBlciBmdW5jdGlvbiBzaW1p
bGFyIHRvIEludFNpemU6OmFyZWEoKS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdl
OjpkcmF3UGF0dGVybik6IENhbGwgSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIo
KS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNU2NhbGUpOiBS
ZXR1cm4gdGhlIHNjYWxpbmcgcGFydCBvZiB0aGUgY3VycmVudCBDVE0uCisgICAgICAgIChXZWJD
b3JlOjpzY2FsZXNNYXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojppc0NvbXBhdGlibGVXaXRoQnVmZmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgSSB0aGluayBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSB0aGVzZSBmdW5jdGlvbiBiZSBwYXJ0
IG9mIHRoZSBJbWFnZUJ1ZmZlciBpdHNlbGYuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhdGlibGVCdWZmZXJTaXpl
KTogUmV0dXJucyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNhY2hlZCBpbWFnZSB0byBiZSBjcmVh
dGVkLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKTogTWFrZSBjcmVhdGVDb21wYXRpYmxlQnVmZmVyCisgICAgICAgIGEgc3Rh
dGljIGZ1bmN0aW9uIG9mIHRoZSBJbWFnZUJ1ZmZlci4gVGhlcmUgaXMgbm8gbmVlZCB0byBnbyB0
aHJvdWdoIHRoZQorICAgICAgICBHcmFwaGljc0NvbnRleHQganVzdCB0byBnZXQgdGhlIEdyYXBo
aWNzQ29udGV4dCBDVE0gc2NhbGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmNhbkNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOiBHaXZlbiBhIG1heFNpemUsIGl0IGFu
c3dlcnMgd2hldGhlciBhCisgICAgICAgIGNhY2hlZCBpbWFnZSBzaG91bGQgYmUgY3JlYXRlZCBv
ciBub3QuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmlzQ29tcGF0
aWJsZVdpdGhDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXdQ
YXR0ZXJuKTogQ2FsbCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcigpLgorICAg
ICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
SWZOZWVkZWQpOiBGb3IgaU9TIG9yIG5vbiBhY2NlbGVyYXRlZCAKKyAgICAgICAgZHJhd2luZywg
dGhlIGxpbWl0IHdpbGwgYmUgNE0gcGl4ZWxzLiBPdGhlcndpc2UgdGhlIGxpbWl0IHdpbGwgYmUg
d2hhdGV2ZXIKKyAgICAgICAgSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpIHJldHVybnMuCisgICAg
ICAgIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRl
ZCk6IENhbGwgSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoKS4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6IERpdHRvLgorCiAyMDE2
LTA1LTE2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgY29udGFp
bmluZ0Jsb2NrRm9yKlBvc2l0aW9uIGZ1bmN0aW9ucyBzaG91bGQgdGFrZSB0aGUgcmVuZGVyZXIg
aW5zdGVhZCBvZiB0aGUgcGFyZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggZjJhZTBhMWYzMmRjNTQ3
Zjg0NGFjM2Q1NmFlODA4MTI4YjEzZGFmZS4uNTljMmViMjNlNmJiMDY0NzNlMTczZWY4ZGY2ODM5
OTg5Y2MxNTk3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0yNDQ4LDcgKzI0NDgsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHRl
eHQsIGZsb2F0IHgsIGZsbwogICAgICAgICAgICAgZm9udFByb3h5LmRyYXdCaWRpVGV4dCgqYywg
dGV4dFJ1biwgbG9jYXRpb24gKyBvZmZzZXQsIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9u
dE5vdFJlYWR5KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gbWFza0ltYWdlID0gYy0+Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5zaXpl
KCkpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKG1hc2tSZWN0LnNpemUoKSwgKmMpOwog
ICAgICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IDcxNTI2
YzMwMTljOGJiN2QxMzFkNTA4ZmUxM2NkNmY3N2QzOTYwYjMuLjMwNGExM2NmNmQxYjJiYWQzZDIy
ZjllNTlhODI3NDJjOWMyNDcxNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lkIEJpdG1hcElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFtX2NhY2hlZEltYWdl
KSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gY3R4dC5j
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZSh0aWxlUmVjdC5zaXplKCkpKTsK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUodGlsZVJlY3Quc2l6ZSgp
KSwgY3R4dCk7CiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCmluZGV4IDUyMTNj
OWFhY2UzNTZhNWZmMWU4MzU2YTRlNWEyM2IyYzQxMTNjNDIuLjE2NmMxNWJlODhjZTQ4NTFlNzA3
YjllMzQyOGI0M2E1ODRmYzQwNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0U2l6ZS5oCkBAIC04NSw2ICs4NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fd2lk
dGggKj0gc2NhbGVYOwogICAgICAgICBtX2hlaWdodCAqPSBzY2FsZVk7CiAgICAgfQorICAgIAor
ICAgIEZsb2F0U2l6ZSBzY2FsZWRCeShjb25zdCBGbG9hdFNpemUmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShtX3dpZHRoICogb3RoZXIubV93aWR0aCwgbV9o
ZWlnaHQgKiBvdGhlci5tX2hlaWdodCk7CisgICAgfQogCiAgICAgRmxvYXRTaXplIGV4cGFuZGVk
VG8oY29uc3QgRmxvYXRTaXplJiBvdGhlcikgY29uc3QKICAgICB7CkBAIC0xMDMsNiArMTA4LDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dpZHRoICogbV93aWR0aCArIG1f
aGVpZ2h0ICogbV9oZWlnaHQ7CiAgICAgfQorICAgIAorICAgIGZsb2F0IGFyZWEoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBtX2hlaWdodDsKKyAgICB9CiAKICAgICBG
bG9hdFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKaW5kZXggMzcyNjkxYTli
MmI3NWZlOTMxZDUxZmZjZGEwYjFhNDM5MDE5NGRjMS4uYWQzM2M1NWEzNzg5NjJiYzA1NzRhYTAy
ZDA3YTExYWJhMzAwNTZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKQEAgLTc0LDggKzc0LDggQEAgdm9pZCBHcmFkaWVudElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHMKIAogICAgIHVuc2lnbmVkIGdlbmVyYXRvckhhc2ggPSBtX2dyYWRpZW50LT5oYXNo
KCk7CiAKLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIgfHwgbV9jYWNoZWRHZW5lcmF0b3JI
YXNoICE9IGdlbmVyYXRvckhhc2ggfHwgbV9jYWNoZWRBZGp1c3RlZFNpemUgIT0gYWRqdXN0ZWRT
aXplIHx8ICFkZXN0Q29udGV4dC5pc0NvbXBhdGlibGVXaXRoQnVmZmVyKCptX2NhY2hlZEltYWdl
QnVmZmVyKSkgewotICAgICAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0gZGVzdENvbnRleHQuY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihhZGp1c3RlZFNpemUsIG1fZ3JhZGllbnQtPmhhc0FscGhhKCkp
OworICAgIGlmICghbV9jYWNoZWRJbWFnZUJ1ZmZlciB8fCBtX2NhY2hlZEdlbmVyYXRvckhhc2gg
IT0gZ2VuZXJhdG9ySGFzaCB8fCBtX2NhY2hlZEFkanVzdGVkU2l6ZSAhPSBhZGp1c3RlZFNpemUg
fHwgIW1fY2FjaGVkSW1hZ2VCdWZmZXItPmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGRlc3RDb250
ZXh0KSkgeworICAgICAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBkZXN0Q29udGV4dCwgbV9ncmFkaWVudC0+
aGFzQWxwaGEoKSk7CiAgICAgICAgIGlmICghbV9jYWNoZWRJbWFnZUJ1ZmZlcikKICAgICAgICAg
ICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggYjkwODVjMzM3OTgzMWU5ZjlkODM1NzdkNmUwNjEx
YmEzMTE5ZDhjMi4uOTVmY2JjMDZkOTExNWY5YjhiYTQ5NTdlYjVmZTJlZTI5MWQwMzc4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCkBAIC0xMDEyLDM2ICsxMDEyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVz
dExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIKICAg
ICB9CiB9CiAKLXN0YXRpYyBib29sIHNjYWxlc01hdGNoKEFmZmluZVRyYW5zZm9ybSBhLCBBZmZp
bmVUcmFuc2Zvcm0gYikKLXsKLSAgICByZXR1cm4gYS54U2NhbGUoKSA9PSBiLnhTY2FsZSgpICYm
IGEueVNjYWxlKCkgPT0gYi55U2NhbGUoKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBib29sIGhhc0FscGhhKSBjb25zdAotewotICAgIC8vIE1ha2UgdGhlIGJ1ZmZl
ciBsYXJnZXIgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBu
ZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4g
QWxzbyBzZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUKLSAgICAvLyBn
cmFwaGljcyBjb250ZXh0LgotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENU
TShEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBGbG9hdFNpemUgc2NhbGVkU2l6
ZShzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc2l6ZS53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgp
KSksIHN0YXRpY19jYXN0PGludD4oY2VpbChzaXplLmhlaWdodCgpICogdHJhbnNmb3JtLnlTY2Fs
ZSgpKSkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNl
U1JHQiwgKnRoaXMsIGhhc0FscGhhKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoc2NhbGVk
U2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpIC8gc2l6ZS5o
ZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHQ6OmlzQ29tcGF0aWJsZVdpdGhCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlcikgY29uc3QKLXsK
LSAgICBHcmFwaGljc0NvbnRleHQmIGJ1ZmZlckNvbnRleHQgPSBidWZmZXIuY29udGV4dCgpOwot
Ci0gICAgcmV0dXJuIHNjYWxlc01hdGNoKGdldENUTSgpLCBidWZmZXJDb250ZXh0LmdldENUTSgp
KSAmJiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID09IGJ1ZmZlckNvbnRleHQuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKTsKLX0KLQogI2lmICFVU0UoQ0cpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQogewpAQCAtMTA1OSw2ICsxMDI5LDEy
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKQogCiAgICAgcGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGRl
dmljZVNjYWxlRmFjdG9yKTsKIH0KKyAgICAKK0Zsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6Omdl
dENUTVNjYWxlKCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAg
cmV0dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7
Cit9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCmluZGV4IGI5NTgyNzcwMjMyODE5M2YyYjVhOTQxOGEzNGRmNWZjNzAx
YzNiYTMuLmRjYmViNzY4YTg4ZGM1YjZhOTZkMzg4NDAzYjFjZDg0NDEyZjcwYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBA
IC00NzcsMTUgKzQ3NywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXQzRFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldDNE
VHJhbnNmb3JtKCkgY29uc3Q7CiAjZW5kaWYKLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVy
IGNvbXBhdGlibGUgd2l0aCB0aGlzIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbgot
ICAgIC8vIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29u
dGV4dC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiwgYm9vbCBoYXNBbHBoYSA9IHRydWUpIGNvbnN0OwotICAg
IGJvb2wgaXNDb21wYXRpYmxlV2l0aEJ1ZmZlcihJbWFnZUJ1ZmZlciYpIGNvbnN0OwogCiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBj
b250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgogICAgIC8vIGFjdGluZyBhcyBh
IGJhc2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwogICAgIHZvaWQgcGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKKyAgICBGbG9hdFNpemUgZ2V0Q1RN
U2NhbGUoKSBjb25zdDsKIAogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250
ZXh0KGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0
ZUJpdG1hcCk7IC8vIFRoZSBwYXNzZWQgaW4gcmVjdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGJpdG1h
cCBmb3IgY29tcG9zaXRpbmcgaW5zaWRlIHRyYW5zcGFyZW5jeSBsYXllcnMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMmFjZTcz
YzI4YWQwMmViNDE0ZjgyOGVjZTI4NjliMzZlMTU1M2FlNS4uZmI0MDhjNWYzZjYyMDY5OWVhZDIw
MGMxMjY5ZTRjM2RjMzQwMjcxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMTY0LDkgKzE2NCw0MCBAQCBib29sIEltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QmLCBHQzNEZW51bSwg
UGxhdGZvcm0zRAogfQogI2VuZGlmCiAKK3N0YXRpYyBGbG9hdFNpemUgY29tcGF0aWJsZUJ1ZmZl
clNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0
cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1
dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXpl
KHNpemUuc2NhbGVkQnkoY29udGV4dC5nZXRDVE1TY2FsZSgpKSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wg
aGFzQWxwaGEpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSBjb21wYXRpYmxlQnVmZmVy
U2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
YnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwg
MSwgQ29sb3JTcGFjZVNSR0IsIGNvbnRleHQsIGhhc0FscGhhKTsKKyAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5n
IHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBidWZmZXItPmNvbnRl
eHQoKS5zY2FsZShGbG9hdFNpemUoc2NhbGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBz
Y2FsZWRTaXplLmhlaWdodCgpIC8gc2l6ZS5oZWlnaHQoKSkpOworICAgIHJldHVybiBidWZmZXI7
Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBib29sKQogewogICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2Rl
KCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9CiAKK2Jvb2wgSW1hZ2VCdWZmZXI6
OmNhbkNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgbWF4U2l6ZSkKK3sKKyAg
ICByZXR1cm4gY29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCkuYXJlYSgpIDwgbWF4
U2l6ZS5hcmVhKCk7Cit9CisgICAgCisKK2Jvb2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdp
dGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29udGV4dC5nZXRDVE1TY2FsZSgpID09IHRoaXMtPmNvbnRleHQoKS5nZXRDVE1TY2Fs
ZSgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAppbmRleCA1N2JhNjM1MjBmZGViM2JhMjFlMjcwYjc2OWZkZDI5MDRjY2E3YzYxLi45
YmY1ZWMzM2JhMDRjNmM0OGZkNDhhNDllZTVjYjllNWE3MTgwNTRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTc5LDggKzc5LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKICAgICB9CiAKKyAgICAvLyBDcmVhdGUg
YW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJs
ZSByZXNvbHV0aW9uCisgICAgLy8gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVu
IGludG8gdGhpcyBjb250ZXh0LgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiwgYm9vbCBoYXNBbHBoYSA9IHRydWUpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmLCBib29sIGhhc0FscGhhKTsKIAorICAgIHN0YXRpYyBib29sIGNhbkNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRTaXplJiBtYXhTaXplKTsKKworICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aENvbnRleHQo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisKICAgICBXRUJDT1JFX0VYUE9SVCB+SW1h
Z2VCdWZmZXIoKTsKIAogICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFja2lu
ZyBzdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggYTBmNjQzNGU4OWE4ODhjYjY5
NzAyNmM1NmM4OGM4ZTc3MzY2ZTAyMS4uOTZkYjdlM2E1NWI5NDBjOTE4MTU4NjBjNjQxZDEzODU5
NjhjYzJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHZv
aWQgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkCiB2b2lkIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKIHsKICNpZiBVU0UoTkVXX1RIRU1FKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSgpLCB0
cnVlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSgpLCBjb250ZXh0LCB0cnVlKTsK
ICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAK
aW5kZXggZWY3NmI4NjNkN2E4ZmM5YzQzMDYyNTY1ZjRiM2UzMjdkYWE3MzYyNC4uNDI2MGQ2Njhl
YTMxNzQxZWYwYjk3ZTMwOTExZDU4ZDY4NDhmNmIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTQ5
LDYgKzQ5LDEwIEBACiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgogI2VuZGlmCiAKKyNpZiBV
U0UoSU9TVVJGQUNFKQorI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUERGRG9jdW1lbnRJbWFnZTo6UERGRG9jdW1lbnRJbWFnZShJbWFnZU9i
c2VydmVyKiBvYnNlcnZlcikKQEAgLTE0Miw2ICsxNDYsMTcgQEAgc3RhdGljIHZvaWQgdHJhbnNm
b3JtQ29udGV4dEZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRSZWMKIAogdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVk
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QpCiB7CisjaWYgUExBVEZPUk0oSU9TKSB8fCAhVVNFKElPU1VS
RkFDRSkKKyAgICBGbG9hdFNpemUgbWF4U2l6ZSA9IEZsb2F0U2l6ZSgyMDQ4LCAyMDQ4KTsKKyNl
bHNlCisgICAgRmxvYXRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7Cisj
ZW5kaWYKKyAgICAKKyAgICBpZiAoIUltYWdlQnVmZmVyOjpjYW5DcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKGRzdFJlY3Quc2l6ZSgpLCBjb250ZXh0LCBtYXhTaXplKSkgeworICAgICAgICBtX2NhY2hl
ZEltYWdlQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICNp
ZiBQTEFURk9STShJT1MpCiAgICAgLy8gT24gaU9TLCBzb21lIGNsaWVudHMgdXNlIGxvdy1xdWFs
aXR5IGltYWdlIGludGVycG9sYXRpb24gYWx3YXlzLCB3aGljaCB0aHJvd3Mgb2ZmIHRoaXMgb3B0
aW1pemF0aW9uLAogICAgIC8vIGFzIHdlIG5ldmVyIGdldCB0aGUgc3Vic2VxdWVudCBoaWdoLXF1
YWxpdHkgcGFpbnQuIFNpbmNlIGxpdmUgcmVzaXplIGlzIHJhcmUgb24gaU9TLCBkaXNhYmxlIHRo
ZSBvcHRpbWl6YXRpb24uCkBAIC0xNTYsMjYgKzE3MSwyNyBAQCB2b2lkIFBERkRvY3VtZW50SW1h
Z2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdAogICAgIGJvb2wgcmVwYWludElmTmVjZXNzYXJ5ID0gaW50ZXJwb2xhdGlvblF1YWxpdHkg
IT0gSW50ZXJwb2xhdGlvbk5vbmUgJiYgaW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gSW50ZXJwb2xh
dGlvbkxvdzsKICNlbmRpZgogCi0gICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyIHx8ICghY2Fj
aGVQYXJhbWV0ZXJzTWF0Y2goY29udGV4dCwgZHN0UmVjdCwgc3JjUmVjdCkgJiYgcmVwYWludElm
TmVjZXNzYXJ5KSkgewotICAgICAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0gY29udGV4dC5jcmVh
dGVDb21wYXRpYmxlQnVmZmVyKEZsb2F0UmVjdChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKS5z
aXplKCkpOwotICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCYgYnVmZmVyQ29udGV4dCA9IG1fY2FjaGVk
SW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICBpZiAobV9jYWNoZWRJbWFnZUJ1ZmZlciAmJiAo
IXJlcGFpbnRJZk5lY2Vzc2FyeSB8fCBjYWNoZVBhcmFtZXRlcnNNYXRjaChjb250ZXh0LCBkc3RS
ZWN0LCBzcmNSZWN0KSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NhY2hlZEltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoRmxvYXRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QoZHN0UmVjdCkpLnNpemUoKSwgY29udGV4dCk7CisgICAgaWYgKCFtX2Nh
Y2hlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NDb250ZXh0JiBi
dWZmZXJDb250ZXh0ID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogCi0gICAgICAg
IHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RSZWN0LCBzcmNS
ZWN0KTsKLSAgICAgICAgZHJhd1BERlBhZ2UoYnVmZmVyQ29udGV4dCk7CisgICAgdHJhbnNmb3Jt
Q29udGV4dEZvclBhaW50aW5nKGJ1ZmZlckNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QpOworICAg
IGRyYXdQREZQYWdlKGJ1ZmZlckNvbnRleHQpOwogCi0gICAgICAgIG1fY2FjaGVkVHJhbnNmb3Jt
ID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmlj
ZVNjYWxlKTsKLSAgICAgICAgbV9jYWNoZWREZXN0aW5hdGlvblNpemUgPSBkc3RSZWN0LnNpemUo
KTsKLSAgICAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKKyAgICBtX2NhY2hlZFRy
YW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1
ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9jYWNoZWREZXN0aW5hdGlvblNpemUgPSBkc3RSZWN0LnNp
emUoKTsKKyAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogCi0gICAgICAgIEludFNp
emUgaW50ZXJuYWxTaXplID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0g
ICAgICAgIHNpemVfdCBvbGRDYWNoZWRCeXRlcyA9IG1fY2FjaGVkQnl0ZXM7Ci0gICAgICAgIG1f
Y2FjaGVkQnl0ZXMgPSBpbnRlcm5hbFNpemUud2lkdGgoKSAqIGludGVybmFsU2l6ZS5oZWlnaHQo
KSAqIDQ7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5p
bnRlcm5hbFNpemUoKTsKKyAgICBzaXplX3Qgb2xkQ2FjaGVkQnl0ZXMgPSBtX2NhY2hlZEJ5dGVz
OworICAgIG1fY2FjaGVkQnl0ZXMgPSBpbnRlcm5hbFNpemUud2lkdGgoKSAqIGludGVybmFsU2l6
ZS5oZWlnaHQoKSAqIDQ7CiAKLSAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAg
ICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIHNhZmVDYXN0PGlu
dD4obV9jYWNoZWRCeXRlcykgLSBzYWZlQ2FzdDxpbnQ+KG9sZENhY2hlZEJ5dGVzKSk7Ci0gICAg
fQorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVj
b2RlZFNpemVDaGFuZ2VkKHRoaXMsIHNhZmVDYXN0PGludD4obV9jYWNoZWRCeXRlcykgLSBzYWZl
Q2FzdDxpbnQ+KG9sZENhY2hlZEJ5dGVzKSk7CiB9CiAKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA5NzBhYTI3NGRmMTZkMTUyYzg0
NGRlMGQwYWE3MDMxZDFhNjRlZGUyLi5hODg4YThlZjAxODMwZGY3OTE4ZTA2NTYzNWFiMzc0MjVh
ZmY3NTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKQEAgLTc1NSw3ICs3NTUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjbwog
ICAgICAgICBtYXNrUmVjdC5pbnRlcnNlY3Qoc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3Qp
KTsKIAogICAgICAgICAvLyBOb3cgY3JlYXRlIHRoZSBtYXNrLgotICAgICAgICBtYXNrSW1hZ2Ug
PSBjb250ZXh0LmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIobWFza1JlY3Quc2l6ZSgpKTsKKyAgICAg
ICAgbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIobWFza1Jl
Y3Quc2l6ZSgpLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIHBhaW50TWFza0ZvclRleHRGaWxsQm94KG1hc2tJbWFnZS5nZXQo
KSwgbWFza1JlY3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggM2MxZGZi
NWUwOWJhOTg3NDU4NzExY2E4NDI2NTAwOTk4NjUzNDk0My4uOTc2ZGY1YWFlM2JiYjUyZDIyYTY1
OWI2OGE4YmQyNjdmODQ1YjM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNTEsNyArMzUxLDcgQEAgYm9vbCBT
VkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnUKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBidWZmZXIgYW5kIHBhaW50
IHRoZSBmb3JlZ3JvdW5kIGludG8gaXQuCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgewotICAgICAg
ICBpZiAoKGltYWdlQnVmZmVyID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5jcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpLCB0cnVlKSkpIHsK
KyAgICAgICAgaWYgKChpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpLCBtX3BhaW50SW5mby0+
Y29udGV4dCgpLCB0cnVlKSkpIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgYnVmZmVy
ZWRSZW5kZXJpbmdDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAgICAgICAgICAg
IGJ1ZmZlcmVkUmVuZGVyaW5nQ29udGV4dC50cmFuc2xhdGUoLWJvdW5kaW5nQm94LngoKSwgLWJv
dW5kaW5nQm94LnkoKSk7CiAgICAgICAgICAgICBQYWludEluZm8gYnVmZmVyZWRJbmZvKCptX3Bh
aW50SW5mbyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280014</attachid>
            <date>2016-05-27 18:26:17 -0700</date>
            <delta_ts>2016-06-02 16:07:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157857-20160527182729.patch</filename>
            <type>text/plain</type>
            <size>38500</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTQ3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDE2LTA1LTI3ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gUERG
RG9jdW1lbnRJbWFnZSBzaG91bGQgbm90IGNyZWF0ZSBhIGNhY2hlZCBpbWFnZSBsYXJnZXIgdGhh
biA0TSBwaXhlbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1Nzg1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE9uIGlPUywgaWYgdGhlIHNjYWxlZCBzaXplIG9mIHRoZSBQREZEb2N1bWVudEltYWdlIGNh
Y2hlZCBpbWFnZSB3aWxsIGV4Y2VlZAorICAgICAgICB0aGUgNE0gcGl4ZWxzIGxpbWl0IGFuZCB0
aGUgc3lzdGVtIHBoeXNpY2FsIG1lbW9yeSBpcyAxR0Igb3IgbGVzcywgZG8gbm90CisgICAgICAg
IGNyZWF0ZSBpdC4gUERGRG9jdW1lbnRJbWFnZTo6ZHJhdygpIGZhbGxzIGJhY2sgcGVhY2VmdWxs
eSBpZiB0aGUgY2FjaGVkIGltYWdlCisgICAgICAgIGNvdWxkbid0IGJlIGNyZWF0ZWQgZm9yIGFu
eSByZWFzb24uIFRoZSBQREYgd2lsbCBiZSBkcmF3biBkaXJlY3RseSB0byB0aGUKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0IHdpdGhvdXQgaGF2aW5nIHRvIGdvIHRocm91Z2ggdGhlIGNhY2hlZCBp
bWFnZS4gVGhpcyBtZWFucworICAgICAgICB0aGUgd2hvbGUgUERGIHdpbGwgYmUgZHJhd24gbXVs
dGlwbGUgdGltZXM7IG9uZSB0aW1lIGZvciBlYWNoIHRpbGUuIEkgdGhpbmsKKyAgICAgICAgdGhp
cyBpcyBva2F5IGZvciB6b29taW5nIGEgbGFyZ2UgUERGRG9jdW1lbnRJbWFnZSBvbiBhIGxvdyBl
bmQgZGV2aWNlLgorICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IFJlbmFtZSBTeXN0ZW1WZXJzaW9uLmggYW5kIC5jcHAgdG8KKyAgICAgICAgU3lz
dGVtSW5mby5oIGFuZCAuY3BwIGJlY2F1c2UgYSBuZXcgZnVuY3Rpb24gbmFtZWQgc3lzdGVtUGh5
c2ljYWxNZW1vcnkoKQorICAgICAgICBpcyBhZGRlZCB0byBpdC4KKyAgICAgICAgCisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6IENhbGwg
dGhlIHN0YXRpYyBmdW5jdGlvbgorICAgICAgICBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcigpIHdpdGhvdXQgaGF2aW5nIHRvIGdvIHRocm91Z2ggdGhlIEdyYXBoaWNzQ29udGV4
dC4KKyAgICAgICAgCisgICAgICAgICogcGFnZS9jb2NvYS9Vc2VyQWdlbnQubW06CisgICAgICAg
ICogcGFnZS9pb3MvVXNlckFnZW50SU9TLm1tOgorICAgICAgICAqIHBhZ2UvbWFjL1VzZXJBZ2Vu
dE1hYy5tbToKKyAgICAgICAgSW1wb3J0ICJTeXN0ZW1JbmZvLmgiIGluc3RlYWQgb2YgIlN5c3Rl
bVZlcnNpb24uaCIuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1N5c3RlbUlu
Zm8uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU3lzdGVtVmVy
c2lvbi5oLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1N5c3RlbUluZm8ubW06IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1N5c3RlbVZlcnNpb24ubW0uCisgICAg
ICAgIChXZWJDb3JlOjpzeXN0ZW1QaHlzaWNhbE1lbW9yeSk6IFJldHVybnMgdGhlIHBoeXNpY2Fs
IG1lbW9yeSBvbiB0aGUgY29tcHV0ZXIgaW4gYnl0ZXMuCisgICAgICAgIAorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1N5c3RlbVZlcnNpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9jb2NvYS9TeXN0ZW1WZXJzaW9uLm1tOiBSZW1vdmVkLgorICAgICAgICAKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICBDYWxsIHRoZSBzdGF0aWMgZnVuY3Rpb24g
SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoKSB3aXRob3V0CisgICAgICAgIGhh
dmluZyB0byBnbyB0aHJvdWdoIHRoZSBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6
YXJlYSk6IEEgaGVscGVyIGZ1bmN0aW9uIHNpbWlsYXIgdG8gSW50U2l6ZTo6YXJlYSgpLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3IqKTogU2NhbGUgYSBGbG9hdFNpemUgYnkgYW5vdGhlciBG
bG9hdFNpemUgYW5kIHJldHVybiB0aGUgcmVzdWx0LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRp
ZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKTogQ2FsbCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcigpLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZh
Y3Rvcik6IFJldHVybiB0aGUgc2NhbGluZyBwYXJ0IG9mIHRoZSBjdXJyZW50IENUTS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNjYWxlc01hdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ29tcGF0aWJsZVdpdGhCdWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBoYXZlIHRoZXNlIGZ1bmN0aW9u
IGJlIHBhcnQgb2YgdGhlIEltYWdlQnVmZmVyIGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcik6IE1ha2UgY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcgor
ICAgICAgICBhIHN0YXRpYyBmdW5jdGlvbiBvZiB0aGUgSW1hZ2VCdWZmZXIuIFRoZXJlIGlzIG5v
IG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGp1c3QgdG8g
Z2V0IHRoZSBHcmFwaGljc0NvbnRleHQgc2NhbGVGYWN0b3IuCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKTogU2NhbGUgdGhlIHNp
emUgb2YgdGhlIGNhY2hlZEltYWdlCisgICAgICAgIGJ5IHRoZSBzY2FsZUZhY3RvciBvZiB0aGUg
Y29udGV4dC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aXNDb21w
YXRpYmxlV2l0aENvbnRleHQpOiBSZXR1cm5zIHRydWUgaWYgdGhlIGRyYXdpbmcKKyAgICAgICAg
Y29udGV4dCBhbmQgdGhlIEltYWdlQnVmZmVyIGNvbnRleHQgaGF2ZSB0aGUgc2FtZSBzY2FsZUZh
Y3Rvci4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aDoKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVy
YXRlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFn
ZTo6ZHJhd1BhdHRlcm4pOiBDYWxsIEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KCkuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2Fj
aGVkSW1hZ2VJZk5lZWRlZCk6IE9uIGlPUywgaWYgdGhlCisgICAgICAgIHBoeXNpY2FsIG1lbW9y
eSBpcyBsZXNzIHRoYW4gMUdCLCBkbyBub3QgYWxsb2NhdGUgbW9yZSB0aGFuIDE2TUIgZm9yIHRo
ZQorICAgICAgICBQREYgY2FjaGVkSW1hZ2UuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6IENhbGwgSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyRm9yZWdyb3VuZCk6IERpdHRvLgorCiAyMDE2LTA1LTI2ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIENyYXNoIGluIFRyZWVTY29wZTo6Zm9jdXNlZEVs
ZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIwMTQ3MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM1MSw4ICsyMzUx
LDggQEAKIAkJNUNGQzQzNTAxOTI0MDlFMzAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZD
NDM0RTE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCAqLzsgfTsK
IAkJNUQyMUE4MDIxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RDIxQTgwMDEzRUNFNURGMDBC
QjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCAqLzsgfTsKIAkJNUQyMUE4MDMxM0VDRTVERjAwQkI3
MDY0IC8qIFdlYlZUVFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUQyMUE4MDExM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5oICov
OyB9OwotCQk1RDU5NzVCMzE5NjM1RjExMDBEMDA4NzggLyogU3lzdGVtVmVyc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1OTc1QjExOTYzNUYx
MTAwRDAwODc4IC8qIFN5c3RlbVZlcnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQk1RDU5NzVCNDE5NjM1RjExMDBEMDA4NzggLyogU3lzdGVt
VmVyc2lvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVENTk3NUIyMTk2MzVGMTEwMEQwMDg3OCAvKiBTeXN0ZW1WZXJzaW9uLm1tICovOyB9OworCQk1
RDU5NzVCMzE5NjM1RjExMDBEMDA4NzggLyogU3lzdGVtSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1OTc1QjExOTYzNUYxMTAwRDAwODc4IC8q
IFN5c3RlbUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1RDU5NzVCNDE5NjM1RjExMDBEMDA4NzggLyogU3lzdGVtSW5mby5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVENTk3NUIyMTk2MzVGMTEw
MEQwMDg3OCAvKiBTeXN0ZW1JbmZvLm1tICovOyB9OwogCQk1RDU5NzVCNzE5NjM2MzdCMDBEMDA4
NzggLyogVXNlckFnZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUQ1OTc1QjYxOTYzNjM3QjAwRDAwODc4IC8qIFVzZXJBZ2VudC5tbSAqLzsgfTsK
IAkJNUQ4NzRGMTMwRDE2MUQzMjAwNzk2QzNCIC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTIy
N0REMEFGNTg5QUQwMEQ0ODMyNCAvKiBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAgKi87
IH07CiAJCTVEOEM0REJGMTQyODIyMkMwMDI2Q0U3MiAvKiBEaXNwbGF5U2xlZXBEaXNhYmxlckNv
Y29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVE
OEM0REJEMTQyODIyMkMwMDI2Q0U3MiAvKiBEaXNwbGF5U2xlZXBEaXNhYmxlckNvY29hLmNwcCAq
LzsgfTsKQEAgLTk5NTQsOCArOTk1NCw4IEBACiAJCTVDRkM0MzRGMTkyNDA2QTkwMEEwRDNCNSAv
KiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUG9pbnRlckxvY2tDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVEMjFBODAwMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVlRUUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUQyMUE4MDExM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWVFRQYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUQ1OTc1QjExOTYzNUYxMTAwRDAwODc4IC8qIFN5
c3RlbVZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVmVy
c2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1RDU5NzVCMjE5NjM1RjExMDBE
MDA4NzggLyogU3lzdGVtVmVyc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFN5c3RlbVZlcnNpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVENTk3NUIxMTk2MzVGMTEwMEQwMDg3OCAvKiBTeXN0ZW1JbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUQ1OTc1QjIxOTYzNUYxMTAwRDAwODc4IC8qIFN5c3RlbUluZm8ubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeXN0ZW1JbmZvLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RDU5NzVCNjE5NjM2MzdCMDBEMDA4NzggLyogVXNlckFnZW50
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVXNlckFnZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDhDNERCRDE0MjgyMjJDMDAyNkNFNzIg
LyogRGlzcGxheVNsZWVwRGlzYWJsZXJDb2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaXNwbGF5U2xlZXBEaXNhYmxlckNvY29hLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUQ4QzREQkUxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVl
cERpc2FibGVyQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxh
eVNsZWVwRGlzYWJsZXJDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAw
NDgsOCArMjAwNDgsOCBAQAogCQkJCUY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZS5tbSAqLywKIAkJCQkwRTcwNThGMzFCQzVDQ0Q3MDA0NUE1MDcgLyog
U2VhcmNoUG9wdXBNZW51Q29jb2EuaCAqLywKIAkJCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcg
LyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0gKi8sCi0JCQkJNUQ1OTc1QjExOTYzNUYxMTAwRDAw
ODc4IC8qIFN5c3RlbVZlcnNpb24uaCAqLywKLQkJCQk1RDU5NzVCMjE5NjM1RjExMDBEMDA4Nzgg
LyogU3lzdGVtVmVyc2lvbi5tbSAqLywKKwkJCQk1RDU5NzVCMTE5NjM1RjExMDBEMDA4NzggLyog
U3lzdGVtSW5mby5oICovLAorCQkJCTVENTk3NUIyMTk2MzVGMTEwMEQwMDg3OCAvKiBTeXN0ZW1J
bmZvLm1tICovLAogCQkJCTdDQzU2NEI5MThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1i
ZXJEZXRlY3RvckNvY29hLmNwcCAqLywKIAkJCQkzMTBENzE5NDFCMzM1QzlEMDA5QzdCNzMgLyog
VGhlbWVDb2NvYS5oICovLAogCQkJCTMxMEQ3MTkzMUIzMzVDOUQwMDlDN0I3MyAvKiBUaGVtZUNv
Y29hLm1tICovLApAQCAtMjgzMDksNyArMjgzMDksNyBAQAogCQkJCTBGMDNDMDc0MTg4NDY5NUUw
MEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQTA3RkJFMThF
MEExNkEwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREEwN0ZDMjE4RTBBMjJCMDA0Njk5RkEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNUQ1OTc1QjMxOTYzNUYxMTAwRDAwODc4IC8qIFN5c3RlbVZlcnNp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTVENTk3NUIzMTk2MzVGMTEwMEQwMDg3OCAvKiBTeXN0
ZW1JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA1MTBBMTU0RjA5MDAwQTQyMzQgLyog
VGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2M0VCNjIzMUI4Nzg5RTAwMDk2RUQ1
MSAvKiBUYWdDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RENjEyNTFGMTJE
MDAzRUYyNjkgLyogVGVsZXBob25lSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTMxODM0
LDcgKzMxODM0LDcgQEAKIAkJCQlFNDUzOTBBRTBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVt
b3J5SU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTA3RkJEMThFMEExNkEwMDQ2OTlGQSAv
KiBTeXN0ZW1TbGVlcExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTA3RkMxMThF
MEEyMkIwMDQ2OTlGQSAvKiBTeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNUQ1OTc1QjQxOTYzNUYxMTAwRDAwODc4IC8qIFN5c3RlbVZlcnNpb24ubW0gaW4gU291
cmNlcyAqLywKKwkJCQk1RDU5NzVCNDE5NjM1RjExMDBEMDA4NzggLyogU3lzdGVtSW5mby5tbSBp
biBTb3VyY2VzICovLAogCQkJCTQ2M0VCNjIyMUI4Nzg5RTAwMDk2RUQ1MSAvKiBUYWdDb2xsZWN0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQ1MTI1MUYxMkQwMDNFRjI2OSAvKiBU
ZWxlcGhvbmVJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDNTY0QkExOEJBQzcy
MDAwMUI5NjUyIC8qIFRlbGVwaG9uZU51bWJlckRldGVjdG9yQ29jb2EuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDIwMTQ3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0NDgsNyArMjQ0OCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3VGV4dEkKICAgICAgICAgICAgIGZvbnRQcm94eS5kcmF3QmlkaVRleHQoKmMsIHRleHRSdW4s
IGxvY2F0aW9uICsgb2Zmc2V0LCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFk
eSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1h
c2tJbWFnZSA9IGMtPmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIobWFza1JlY3Quc2l6ZSgpKTsKKyAg
ICAgICAgYXV0byBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihtYXNrUmVjdC5zaXplKCksICpjKTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAg
ICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50Lm1t
CShyZXZpc2lvbiAyMDE0NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2Vu
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgi
CiAjaW1wb3J0ICJVc2VyQWdlbnQuaCIKIAotI2ltcG9ydCAiU3lzdGVtVmVyc2lvbi5oIgorI2lt
cG9ydCAiU3lzdGVtSW5mby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL1VzZXJBZ2VudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9Vc2VyQWdlbnRJT1MubW0JKHJldmlzaW9uIDIwMTQ3MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvaW9zL1VzZXJBZ2VudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogI2ltcG9ydCAiRGV2aWNlLmgiCiAjaW1wb3J0ICJNb2JpbGVHZXN0YWx0
U1BJLmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgotI2ltcG9ydCAiU3lzdGVtVmVyc2lvbi5o
IgorI2ltcG9ydCAiU3lzdGVtSW5mby5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQg
IldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1VzZXJBZ2VudE1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9Vc2VyQWdlbnRNYWMubW0JKHJldmlzaW9uIDIwMTQ3
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1VzZXJBZ2VudE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJVc2Vy
QWdlbnQuaCIKIAotI2ltcG9ydCAiU3lzdGVtVmVyc2lvbi5oIgorI2ltcG9ydCAiU3lzdGVtSW5m
by5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1N5c3RlbUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9TeXN0ZW1JbmZvLmgJKHJldmlzaW9uIDIwMTM5NSkJKGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvU3lzdGVtVmVyc2lvbi5oOjIwMTM5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1N5c3RlbUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV0VCQ09SRV9F
WFBPUlQgTlNTdHJpbmcgKnN5c3RlbU1hcmtldGluZ1ZlcnNpb24oKTsKKworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU3lzdGVtSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1N5c3RlbUluZm8uaAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU3lzdGVtSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw1ICsyNSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdFQkNPUkVfRVhQ
T1JUIE5TU3RyaW5nICpzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCk7CitXRUJDT1JFX0VYUE9SVCB1
bnNpZ25lZCBsb25nIGxvbmcgc3lzdGVtUGh5c2ljYWxNZW1vcnkoKTsKIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU3lzdGVtSW5mby5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TeXN0ZW1JbmZvLm1tCShyZXZpc2lvbiAyMDEz
OTUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1N5c3RlbVZlcnNpb24ubW06
MjAxMzk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU3lzdGVtSW5mby5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTeXN0ZW1WZXJzaW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIE5TU3RyaW5nICpjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkKK3sK
KyAgICAvLyBDYW4ndCB1c2UgLVtOU1Byb2Nlc3NJbmZvIG9wZXJhdGluZ1N5c3RlbVZlcnNpb25T
dHJpbmddIGJlY2F1c2UgaXQgaGFzIHRvbyBtdWNoIHN0dWZmIHdlIGRvbid0IHdhbnQuCisgICAg
TlNTdHJpbmcgKnN5c3RlbUxpYnJhcnlQYXRoID0gW05TU2VhcmNoUGF0aEZvckRpcmVjdG9yaWVz
SW5Eb21haW5zKE5TTGlicmFyeURpcmVjdG9yeSwgTlNTeXN0ZW1Eb21haW5NYXNrLCBZRVMpIG9i
amVjdEF0SW5kZXg6MF07CisjaWYgUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKKyAgICBpZiAoY2hh
ciAqc2ltdWxhdG9yUm9vdCA9IGdldGVudigiU0lNVUxBVE9SX1JPT1QiKSkKKyAgICAgICAgc3lz
dGVtTGlicmFyeVBhdGggPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzLyVAIiwgc2lt
dWxhdG9yUm9vdCwgc3lzdGVtTGlicmFyeVBhdGhdOworI2VuZGlmCisgICAgTlNTdHJpbmcgKnN5
c3RlbVZlcnNpb25QbGlzdFBhdGggPSBbc3lzdGVtTGlicmFyeVBhdGggc3RyaW5nQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OkAiQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QiXTsKKyAg
ICBOU0RpY3Rpb25hcnkgKnN5c3RlbVZlcnNpb25JbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aENvbnRlbnRzT2ZGaWxlOnN5c3RlbVZlcnNpb25QbGlzdFBhdGhdOworICAgIHJldHVy
biBbW3N5c3RlbVZlcnNpb25JbmZvIG9iamVjdEZvcktleTpAIlByb2R1Y3RWZXJzaW9uIl0gY29w
eV07Cit9CisKK05TU3RyaW5nICpzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkKK3sKKyAgICBzdGF0
aWMgTlNTdHJpbmcgKnZlcnNpb24gPSBjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCk7Cisg
ICAgcmV0dXJuIHZlcnNpb247Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1N5c3RlbUluZm8ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvU3lzdGVtSW5mby5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvU3lzdGVtSW5mby5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTeXN0ZW1WZXJzaW9u
LmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ1LDUgKzQ1LDEwIEBAIE5TU3RyaW5nICpzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkKICAgICBz
dGF0aWMgTlNTdHJpbmcgKnZlcnNpb24gPSBjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCk7
CiAgICAgcmV0dXJuIHZlcnNpb247CiB9CisgICAgCit1bnNpZ25lZCBsb25nIGxvbmcgc3lzdGVt
UGh5c2ljYWxNZW1vcnkoKQoreworICAgIHJldHVybiBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0lu
Zm9dIHBoeXNpY2FsTWVtb3J5XTsKK30KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvU3lzdGVtVmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1N5c3RlbVZlcnNpb24uaAkocmV2aXNpb24gMjAxNDczKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU3lzdGVtVmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XRUJD
T1JFX0VYUE9SVCBOU1N0cmluZyAqc3lzdGVtTWFya2V0aW5nVmVyc2lvbigpOwotCi19CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TeXN0ZW1WZXJzaW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1N5c3RlbVZlcnNpb24ubW0JKHJl
dmlzaW9uIDIwMTQ3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1N5c3RlbVZl
cnNpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3lzdGVtVmVyc2lvbi5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBOU1N0cmluZyAqY3JlYXRlU3lzdGVtTWFya2V0aW5nVmVy
c2lvbigpCi17Ci0gICAgLy8gQ2FuJ3QgdXNlIC1bTlNQcm9jZXNzSW5mbyBvcGVyYXRpbmdTeXN0
ZW1WZXJzaW9uU3RyaW5nXSBiZWNhdXNlIGl0IGhhcyB0b28gbXVjaCBzdHVmZiB3ZSBkb24ndCB3
YW50LgotICAgIE5TU3RyaW5nICpzeXN0ZW1MaWJyYXJ5UGF0aCA9IFtOU1NlYXJjaFBhdGhGb3JE
aXJlY3Rvcmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9tYWluTWFz
aywgWUVTKSBvYmplY3RBdEluZGV4OjBdOwotI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCi0g
ICAgaWYgKGNoYXIgKnNpbXVsYXRvclJvb3QgPSBnZXRlbnYoIlNJTVVMQVRPUl9ST09UIikpCi0g
ICAgICAgIHN5c3RlbUxpYnJhcnlQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
cy8lQCIsIHNpbXVsYXRvclJvb3QsIHN5c3RlbUxpYnJhcnlQYXRoXTsKLSNlbmRpZgotICAgIE5T
U3RyaW5nICpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoID0gW3N5c3RlbUxpYnJhcnlQYXRoIHN0cmlu
Z0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBs
aXN0Il07Ci0gICAgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uSW5mbyA9IFtOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhDb250ZW50c09mRmlsZTpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoXTsK
LSAgICByZXR1cm4gW1tzeXN0ZW1WZXJzaW9uSW5mbyBvYmplY3RGb3JLZXk6QCJQcm9kdWN0VmVy
c2lvbiJdIGNvcHldOwotfQotCi1OU1N0cmluZyAqc3lzdGVtTWFya2V0aW5nVmVyc2lvbigpCi17
Ci0gICAgc3RhdGljIE5TU3RyaW5nICp2ZXJzaW9uID0gY3JlYXRlU3lzdGVtTWFya2V0aW5nVmVy
c2lvbigpOwotICAgIHJldHVybiB2ZXJzaW9uOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDE0
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwNiw3ICs2MDYsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
ID0gY3R4dC5jcmVhdGVDb21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZSh0aWxlUmVjdC5z
aXplKCkpKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUodGlsZVJlY3Quc2l6ZSgpKSwgY3R4dCk7CiAgICAg
ICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gMjAxNDczKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMyw2ICsxMDMsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fd2lkdGggKiBtX3dpZHRoICsgbV9oZWlnaHQgKiBtX2hlaWdodDsKICAgICB9CisgICAgCisg
ICAgZmxvYXQgYXJlYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1f
aGVpZ2h0OworICAgIH0KIAogICAgIEZsb2F0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAg
ICAgewpAQCAtMTYzLDYgKzE2OCwxMSBAQCBpbmxpbmUgRmxvYXRTaXplIG9wZXJhdG9yKihmbG9h
dCBhLCBjb25zCiAgICAgcmV0dXJuIEZsb2F0U2l6ZShhICogYi53aWR0aCgpLCBhICogYi5oZWln
aHQoKSk7CiB9CiAKK2lubGluZSBGbG9hdFNpemUgb3BlcmF0b3IqKGNvbnN0IEZsb2F0U2l6ZSYg
YSwgY29uc3QgRmxvYXRTaXplJiBiKQoreworICAgIHJldHVybiBGbG9hdFNpemUoYS53aWR0aCgp
ICogYi53aWR0aCgpLCBhLmhlaWdodCgpICogYi5oZWlnaHQoKSk7Cit9CisKIGlubGluZSBGbG9h
dFNpemUgb3BlcmF0b3IvKGNvbnN0IEZsb2F0U2l6ZSYgYSwgZmxvYXQgYikKIHsKICAgICByZXR1
cm4gRmxvYXRTaXplKGEud2lkdGgoKSAvIGIsIGEuaGVpZ2h0KCkgLyBiKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCShy
ZXZpc2lvbiAyMDE0NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCArNzQsOCBAQCB2b2lkIEdyYWRp
ZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzCiAKICAgICB1bnNpZ25lZCBnZW5lcmF0b3JI
YXNoID0gbV9ncmFkaWVudC0+aGFzaCgpOwogCi0gICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVy
IHx8IG1fY2FjaGVkR2VuZXJhdG9ySGFzaCAhPSBnZW5lcmF0b3JIYXNoIHx8IG1fY2FjaGVkQWRq
dXN0ZWRTaXplICE9IGFkanVzdGVkU2l6ZSB8fCAhZGVzdENvbnRleHQuaXNDb21wYXRpYmxlV2l0
aEJ1ZmZlcigqbV9jYWNoZWRJbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgbV9jYWNoZWRJbWFnZUJ1
ZmZlciA9IGRlc3RDb250ZXh0LmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBt
X2dyYWRpZW50LT5oYXNBbHBoYSgpKTsKKyAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIgfHwg
bV9jYWNoZWRHZW5lcmF0b3JIYXNoICE9IGdlbmVyYXRvckhhc2ggfHwgbV9jYWNoZWRBZGp1c3Rl
ZFNpemUgIT0gYWRqdXN0ZWRTaXplIHx8ICFtX2NhY2hlZEltYWdlQnVmZmVyLT5pc0NvbXBhdGli
bGVXaXRoQ29udGV4dChkZXN0Q29udGV4dCkpIHsKKyAgICAgICAgbV9jYWNoZWRJbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGFkanVzdGVkU2l6ZSwgZGVz
dENvbnRleHQsIG1fZ3JhZGllbnQtPmhhc0FscGhhKCkpOwogICAgICAgICBpZiAoIW1fY2FjaGVk
SW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNp
b24gMjAxNDczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwzNiArMTAxMiw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEIKICAgICB9CiB9CiAKLXN0YXRpYyBib29s
IHNjYWxlc01hdGNoKEFmZmluZVRyYW5zZm9ybSBhLCBBZmZpbmVUcmFuc2Zvcm0gYikKLXsKLSAg
ICByZXR1cm4gYS54U2NhbGUoKSA9PSBiLnhTY2FsZSgpICYmIGEueVNjYWxlKCkgPT0gYi55U2Nh
bGUoKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBib29sIGhhc0Fs
cGhhKSBjb25zdAotewotICAgIC8vIE1ha2UgdGhlIGJ1ZmZlciBsYXJnZXIgaWYgdGhlIGNvbnRl
eHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8g
cmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4gQWxzbyBzZXQgdXAgYSBjb3JyZXNw
b25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUKLSAgICAvLyBncmFwaGljcyBjb250ZXh0LgotCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShEZWZpbml0ZWx5SW5jbHVkZURl
dmljZVNjYWxlKTsKLSAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGNl
aWwoc2l6ZS53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpKSksIHN0YXRpY19jYXN0PGludD4o
Y2VpbChzaXplLmhlaWdodCgpICogdHJhbnNmb3JtLnlTY2FsZSgpKSkpOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNlU1JHQiwgKnRoaXMsIGhhc0FscGhh
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZm
ZXItPmNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoc2NhbGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53
aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpIC8gc2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgcmV0
dXJuIGJ1ZmZlcjsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQ29tcGF0aWJsZVdpdGhC
dWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlcikgY29uc3QKLXsKLSAgICBHcmFwaGljc0NvbnRleHQm
IGJ1ZmZlckNvbnRleHQgPSBidWZmZXIuY29udGV4dCgpOwotCi0gICAgcmV0dXJuIHNjYWxlc01h
dGNoKGdldENUTSgpLCBidWZmZXJDb250ZXh0LmdldENUTSgpKSAmJiBpc0FjY2VsZXJhdGVkQ29u
dGV4dCgpID09IGJ1ZmZlckNvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKTsKLX0KLQogI2lm
ICFVU0UoQ0cpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0KQogewpAQCAtMTA1OSw2ICsxMDI5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseURldmljZVNjYWxlRmEKIAogICAgIHBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CiB9CisgICAgCitGbG9hdFNpemUgR3JhcGhpY3NDb250
ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
OworICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNj
YWxlKCkpOworfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDIwMTQ3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NzYsMTUgKzQ3NiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXQzRFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGdldDNEVHJhbnNmb3JtKCkgY29uc3Q7CiAjZW5kaWYKLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2Ug
YnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1
dGlvbgotICAgIC8vIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRo
aXMgY29udGV4dC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgYm9vbCBoYXNBbHBoYSA9IHRydWUpIGNvbnN0
OwotICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aEJ1ZmZlcihJbWFnZUJ1ZmZlciYpIGNvbnN0Owog
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRv
IHRoZSBjb250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgogICAgIC8vIGFjdGlu
ZyBhcyBhIGJhc2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwogICAgIHZv
aWQgcGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKKyAgICBGbG9hdFNpemUg
c2NhbGVGYWN0b3IoKSBjb25zdDsKIAogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRv
d3NDb250ZXh0KGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1h
eUNyZWF0ZUJpdG1hcCk7IC8vIFRoZSBwYXNzZWQgaW4gcmVjdCBpcyB1c2VkIHRvIGNyZWF0ZSBh
IGJpdG1hcCBmb3IgY29tcG9zaXRpbmcgaW5zaWRlIHRyYW5zcGFyZW5jeSBsYXllcnMuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CShyZXZpc2lvbiAyMDE0NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw5ICsxNjQsMzggQEAgYm9vbCBJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKAogfQogI2VuZGlmCiAKK3N0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJv
b2wgaGFzQWxwaGEpCit7CisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNl
U1JHQiwgY29udGV4dCwgaGFzQWxwaGEpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9y
IG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKGNv
bnRleHQuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKwogc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wpCiB7CiAgICAg
cmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlKTsKIH0KIAorRmxvYXRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKK3sKKyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4
dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyBy
ZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIEZsb2F0U2l6ZSBzY2FsZWRT
aXplID0gc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKTsKKyAgICByZXR1cm4geyBjZWlsZihz
Y2FsZWRTaXplLndpZHRoKCkpLCBjZWlsZihzY2FsZWRTaXplLmhlaWdodCgpKSB9OworfQorCiti
b29sIEltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRleHQuc2NhbGVGYWN0b3Io
KSA9PSB0aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3IoKTsKK30KKwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAy
MDE0NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBidWZmZXI7CiAgICAgfQogCisgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2lu
ZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmLCBib29sIGhhc0FscGhhID0gdHJ1
ZSk7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYsIGJvb2wgaGFzQWxwaGEpOwogCisgICAgc3Rh
dGljIEZsb2F0U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBPUlQgfkltYWdl
QnVmZmVyKCk7CiAKICAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcg
c3RvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcAkocmV2aXNpb24gMjAxNDczKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZElt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIE5hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFwCiB2b2lkIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKICNpZiBVU0UoTkVXX1RIRU1FKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSgp
LCB0cnVlKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoc2l6ZSgpLCBjb250ZXh0LCB0cnVlKTsKICAgICBpZiAoIWltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyMDE0
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZE
b2N1bWVudC5oPgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Db250
ZXh0Rm9yUGFpbnRpbmcoCiB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
SWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKIHsKICNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gT24gaU9TLCBpZiB0aGUgcGh5c2ljYWwgbWVtb3J5IGlzIGxlc3MgdGhhbiAxR0IsIGRvIG5v
dCBhbGxvY2F0ZSBtb3JlIHRoYW4gMTZNQiBmb3IgdGhlIFBERiBjYWNoZWRJbWFnZS4KKyAgICBj
b25zdCBmbG9hdCBtZW1vcnlUaHJlc2hvbGQgPSAxIDw8IDMwOworICAgIGNvbnN0IGZsb2F0IG1h
eEFyZWEgPSAxIDw8IDIyOworICAgIAorICAgIGlmIChzeXN0ZW1QaHlzaWNhbE1lbW9yeSgpIDw9
IG1lbW9yeVRocmVzaG9sZCAmJiBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoZHN0
UmVjdC5zaXplKCksIGNvbnRleHQpLmFyZWEoKSA+PSBtYXhBcmVhKSB7CisgICAgICAgIG1fY2Fj
aGVkSW1hZ2VCdWZmZXIgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Ly8gT24gaU9TLCBzb21lIGNsaWVudHMgdXNlIGxvdy1xdWFsaXR5IGltYWdlIGludGVycG9sYXRp
b24gYWx3YXlzLCB3aGljaCB0aHJvd3Mgb2ZmIHRoaXMgb3B0aW1pemF0aW9uLAogICAgIC8vIGFz
IHdlIG5ldmVyIGdldCB0aGUgc3Vic2VxdWVudCBoaWdoLXF1YWxpdHkgcGFpbnQuIFNpbmNlIGxp
dmUgcmVzaXplIGlzIHJhcmUgb24gaU9TLCBkaXNhYmxlIHRoZSBvcHRpbWl6YXRpb24uCiAgICAg
Ly8gRklYTUUgKDEzNjU5Myk6IEl0J3MgYWxzbyBwb3NzaWJsZSB0byBkbyB0aGUgd3JvbmcgdGhp
bmcgaGVyZSBpZiBDU1Mgc3BlY2lmaWVzIGxvdy1xdWFsaXR5IGludGVycG9sYXRpb24gdmlhIHRo
ZSAiaW1hZ2UtcmVuZGVyaW5nIgpAQCAtMTU2LDI2ICsxNjYsMjcgQEAgdm9pZCBQREZEb2N1bWVu
dEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZQogICAgIGJvb2wgcmVwYWludElmTmVjZXNzYXJ5ID0g
aW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gSW50ZXJwb2xhdGlvbk5vbmUgJiYgaW50ZXJwb2xhdGlv
blF1YWxpdHkgIT0gSW50ZXJwb2xhdGlvbkxvdzsKICNlbmRpZgogCi0gICAgaWYgKCFtX2NhY2hl
ZEltYWdlQnVmZmVyIHx8ICghY2FjaGVQYXJhbWV0ZXJzTWF0Y2goY29udGV4dCwgZHN0UmVjdCwg
c3JjUmVjdCkgJiYgcmVwYWludElmTmVjZXNzYXJ5KSkgewotICAgICAgICBtX2NhY2hlZEltYWdl
QnVmZmVyID0gY29udGV4dC5jcmVhdGVDb21wYXRpYmxlQnVmZmVyKEZsb2F0UmVjdChlbmNsb3Np
bmdJbnRSZWN0KGRzdFJlY3QpKS5zaXplKCkpOwotICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2VC
dWZmZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCYgYnVm
ZmVyQ29udGV4dCA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKLQotICAgICAgICB0
cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVjdCwgc3JjUmVj
dCk7Ci0gICAgICAgIGRyYXdQREZQYWdlKGJ1ZmZlckNvbnRleHQpOwotCi0gICAgICAgIG1fY2Fj
aGVkVHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICAgICAgbV9jYWNoZWREZXN0aW5hdGlvblNpemUgPSBk
c3RSZWN0LnNpemUoKTsKLSAgICAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKLQot
ICAgICAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmludGVy
bmFsU2l6ZSgpOwotICAgICAgICBzaXplX3Qgb2xkQ2FjaGVkQnl0ZXMgPSBtX2NhY2hlZEJ5dGVz
OwotICAgICAgICBtX2NhY2hlZEJ5dGVzID0gaW50ZXJuYWxTaXplLndpZHRoKCkgKiBpbnRlcm5h
bFNpemUuaGVpZ2h0KCkgKiA0OworICAgIGlmIChtX2NhY2hlZEltYWdlQnVmZmVyICYmICghcmVw
YWludElmTmVjZXNzYXJ5IHx8IGNhY2hlUGFyYW1ldGVyc01hdGNoKGNvbnRleHQsIGRzdFJlY3Qs
IHNyY1JlY3QpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY2FjaGVkSW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihGbG9hdFJlY3QoZW5jbG9z
aW5nSW50UmVjdChkc3RSZWN0KSkuc2l6ZSgpLCBjb250ZXh0KTsKKyAgICBpZiAoIW1fY2FjaGVk
SW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQmIGJ1ZmZl
ckNvbnRleHQgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAKLSAgICAgICAgaWYg
KGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNp
emVDaGFuZ2VkKHRoaXMsIHNhZmVDYXN0PGludD4obV9jYWNoZWRCeXRlcykgLSBzYWZlQ2FzdDxp
bnQ+KG9sZENhY2hlZEJ5dGVzKSk7Ci0gICAgfQorICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWlu
dGluZyhidWZmZXJDb250ZXh0LCBkc3RSZWN0LCBzcmNSZWN0KTsKKyAgICBkcmF3UERGUGFnZShi
dWZmZXJDb250ZXh0KTsKKworICAgIG1fY2FjaGVkVHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBtX2Nh
Y2hlZERlc3RpbmF0aW9uU2l6ZSA9IGRzdFJlY3Quc2l6ZSgpOworICAgIG1fY2FjaGVkU291cmNl
UmVjdCA9IHNyY1JlY3Q7CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IG1fY2FjaGVkSW1h
Z2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgIHNpemVfdCBvbGRDYWNoZWRCeXRlcyA9IG1f
Y2FjaGVkQnl0ZXM7CisgICAgbV9jYWNoZWRCeXRlcyA9IGludGVybmFsU2l6ZS53aWR0aCgpICog
aW50ZXJuYWxTaXplLmhlaWdodCgpICogNDsKKworICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisg
ICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIHNhZmVDYXN0
PGludD4obV9jYWNoZWRCeXRlcykgLSBzYWZlQ2FzdDxpbnQ+KG9sZENhY2hlZEJ5dGVzKSk7CiB9
CiAKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAJKHJldmlzaW9uIDIwMTQ3MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1Niw3ICs3NTYsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAgICAgIG1hc2tS
ZWN0LmludGVyc2VjdChzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogCiAgICAgICAg
IC8vIE5vdyBjcmVhdGUgdGhlIG1hc2suCi0gICAgICAgIG1hc2tJbWFnZSA9IGNvbnRleHQuY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5zaXplKCkpOworICAgICAgICBtYXNrSW1hZ2Ug
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5zaXplKCksIGNv
bnRleHQpOwogICAgICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgcGFpbnRNYXNrRm9yVGV4dEZpbGxCb3gobWFza0ltYWdlLmdldCgpLCBtYXNrUmVjdCwg
Ym94LCBzY3JvbGxlZFBhaW50UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDIwMTQ3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1MSw3ICszNTEsNyBAQCBib29sIFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckZvcmVncm91CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgYnVmZmVyIGFuZCBwYWlu
dCB0aGUgZm9yZWdyb3VuZCBpbnRvIGl0LgogICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKLSAgICAg
ICAgaWYgKChpbWFnZUJ1ZmZlciA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKSwgdHJ1ZSkpKSB7
CisgICAgICAgIGlmICgoaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKSwgbV9wYWludEluZm8t
PmNvbnRleHQoKSwgdHJ1ZSkpKSB7CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQmIGJ1ZmZl
cmVkUmVuZGVyaW5nQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAgICAgICAg
ICBidWZmZXJlZFJlbmRlcmluZ0NvbnRleHQudHJhbnNsYXRlKC1ib3VuZGluZ0JveC54KCksIC1i
b3VuZGluZ0JveC55KCkpOwogICAgICAgICAgICAgUGFpbnRJbmZvIGJ1ZmZlcmVkSW5mbygqbV9w
YWludEluZm8pOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxNDc2KQorKysgU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDUt
MjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAg
ICBbaU9TXSBQREZEb2N1bWVudEltYWdlIHNob3VsZCBub3QgY3JlYXRlIGEgY2FjaGVkIGltYWdl
IGxhcmdlciB0aGFuIDRNIHBpeGVscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU3ODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lPUy5tbToKKyAgICAgICAg
KiBTaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbToKKyAgICAgICAgSW1wb3J0ICJTeXN0ZW1J
bmZvLmgiIGluc3RlYWQgb2YgIlN5c3RlbVZlcnNpb24uaCIuCisKIDIwMTYtMDUtMjcgIEplcmVt
eSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgogCiAgICAgICAgIERlY3JlYXNlIGZsaWNrZXIg
d2hlbiBjaGFuZ2luZyB2aWRlbyBwcmVzZW50YXRpb24gbW9kZS4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9TLm1tCShyZXZpc2lvbiAyMDE0NzMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgi
CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRp
bmdQb2ludEVudmlyb25tZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1N5c3RlbVZlcnNpb24uaD4K
KyNpbXBvcnQgPFdlYkNvcmUvU3lzdGVtSW5mby5oPgogI2ltcG9ydCA8bWFjaC9tYWNoLmg+CiAj
aW1wb3J0IDxtYWNoL3Rhc2suaD4KICNpbXBvcnQgPHB3ZC5oPgpJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDIwMTQ3MykKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIK
ICNpbXBvcnQgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVT
eXN0ZW0uaD4KLSNpbXBvcnQgPFdlYkNvcmUvU3lzdGVtVmVyc2lvbi5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9TeXN0ZW1JbmZvLmg+CiAjaW1wb3J0IDxtYWNoL21hY2guaD4KICNpbXBvcnQgPG1hY2gv
dGFzay5oPgogI2ltcG9ydCA8cHdkLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280375</attachid>
            <date>2016-06-02 15:54:10 -0700</date>
            <delta_ts>2016-06-02 17:38:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157857-20160602155529.patch</filename>
            <type>text/plain</type>
            <size>21565</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU5NmU5NzU4YTgyODY3OWI2MTgyYWM4
MTZjMTFlYWYxOTgwZTEwYzQuLmFjMjI4ZTcwYTRlNGIwZDQ4ZmIyZjhiZDk0YmFhOGYzODBiOTVm
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTYtMDYtMDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBbaU9TXSBQREZEb2N1bWVudEltYWdl
IHNob3VsZCBub3QgY3JlYXRlIGEgY2FjaGVkIGltYWdlIGxhcmdlciB0aGFuIDRNIHBpeGVscwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiB3dGYvU3RkTGli
RXh0cmFzLmg6IEFkZCBhIGNvbnN0YW50IHZhbHVlIGZvciBHQiAoMl4zMCkuCisKIDIwMTYtMDYt
MDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEdldCByaWQg
b2YgU3RyaW5nQ2FwdHVyZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMTVhMWUwNGUyNjI0ZWRiZjFhZjkwZjFm
NjgzOGRiNDBmNTg5ZWM0Li44NDBmOTM1OWQ4ODY0YjVmZDFlMzI3MzMyMjE2ZGVkNTRlYTUzZGMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTYtMDYtMDIgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBbaU9TXSBQREZEb2N1bWVu
dEltYWdlIHNob3VsZCBub3QgY3JlYXRlIGEgY2FjaGVkIGltYWdlIGxhcmdlciB0aGFuIDRNIHBp
eGVscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3
ODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgT24gaU9T
LCBpZiB0aGUgc2NhbGVkIHNpemUgb2YgdGhlIFBERkRvY3VtZW50SW1hZ2UgY2FjaGVkIGltYWdl
IHdpbGwgZXhjZWVkCisgICAgICAgIHRoZSA0TSBwaXhlbHMgbGltaXQgYW5kIHRoZSBzeXN0ZW0g
cGh5c2ljYWwgbWVtb3J5IGlzIDFHQiBvciBsZXNzLCBkbyBub3QKKyAgICAgICAgY3JlYXRlIGl0
LiBQREZEb2N1bWVudEltYWdlOjpkcmF3KCkgZmFsbHMgYmFjayBwZWFjZWZ1bGx5IGlmIHRoZSBj
YWNoZWQgaW1hZ2UKKyAgICAgICAgY291bGRuJ3QgYmUgY3JlYXRlZCBmb3IgYW55IHJlYXNvbi4g
VGhlIFBERiB3aWxsIGJlIGRyYXduIGRpcmVjdGx5IHRvIHRoZQorICAgICAgICBHcmFwaGljc0Nv
bnRleHQgd2l0aG91dCBoYXZpbmcgdG8gZ28gdGhyb3VnaCB0aGUgY2FjaGVkIGltYWdlLiBUaGlz
IG1lYW5zCisgICAgICAgIHRoZSB3aG9sZSBQREYgd2lsbCBiZSBkcmF3biBtdWx0aXBsZSB0aW1l
czsgb25lIHRpbWUgZm9yIGVhY2ggdGlsZS4gSSB0aGluaworICAgICAgICB0aGlzIGlzIG9rYXkg
Zm9yIHpvb21pbmcgYSBsYXJnZSBQREZEb2N1bWVudEltYWdlIG9uIGEgbG93IGVuZCBkZXZpY2Uu
CisgICAgICAgIAorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdU
ZXh0SW50ZXJuYWwpOiBDYWxsIHRoZSBzdGF0aWMgZnVuY3Rpb24KKyAgICAgICAgSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoKSB3aXRob3V0IGhhdmluZyB0byBnbyB0aHJvdWdo
IHRoZSBHcmFwaGljc0NvbnRleHQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3
UGF0dGVybik6IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6YXJlYSk6IEEgaGVscGVy
IGZ1bmN0aW9uIHNpbWlsYXIgdG8gSW50U2l6ZTo6YXJlYSgpLgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3IqKTogU2NhbGUgYSBGbG9hdFNpemUgYnkgYW5vdGhlciBGbG9hdFNpemUgYW5kIHJl
dHVybiB0aGUgcmVzdWx0LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQ
YXR0ZXJuKTogQ2FsbCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcigpLgorICAg
ICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3Rvcik6OiBSZXR1cm4g
dGhlIHNjYWxpbmcgcGFydCBvZiB0aGUgY3VycmVudCBDVE0uCisgICAgICAgIChXZWJDb3JlOjpz
Y2FsZXNNYXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Ojppc0NvbXBhdGlibGVXaXRoQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgTW92ZSB0aGVz
ZSBpbWFnZSBidWZmZXIgZnVuY3Rpb25zIHRvIEltYWdlQnVmZmVyLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcik6IE1ha2UgY3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcgorICAgICAgICBhIHN0YXRpYyBmdW5jdGlvbiBvZiB0aGUgSW1hZ2VCdWZmZXIu
IFRoZXJlIGlzIG5vIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGp1c3QgdG8gZ2V0IHRoZSBHcmFwaGljc0NvbnRleHQgc2NhbGVGYWN0b3IuCisgICAgICAg
IAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKTog
IFNjYWxlIHRoZSBzaXplIG9mIHRoZSBjYWNoZWRJbWFnZQorICAgICAgICBieSB0aGUgc2NhbGVG
YWN0b3Igb2YgdGhlIGNvbnRleHQuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KTogUmV0dXJucyB0cnVlIGlmIHRoZSBkcmF3
aW5nCisgICAgICAgIGNvbnRleHQgYW5kIHRoZSBJbWFnZUJ1ZmZlciBjb250ZXh0IGhhdmUgdGhl
IHNhbWUgc2NhbGVGYWN0b3IuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmg6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05h
bWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEltYWdl
R2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKTogQ2FsbCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcigpLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1h
Z2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOiBPbiBpT1MsIGlmIHRoZQorICAgICAgICBw
aHlzaWNhbCBtZW1vcnkgaXMgbGVzcyB0aGFuIDFHQiwgZG8gbm90IGFsbG9jYXRlIG1vcmUgdGhh
biAxNk1CIGZvciB0aGUKKyAgICAgICAgUERGIGNhY2hlZEltYWdlLgorICAgICAgICAKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOiBDYWxsIElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKCkuCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRl
cmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOiBEaXR0by4KKwogMjAxNi0wNi0wMiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIFVzZSBt
b3JlIHJlZmVyZW5jZXMgaW4gUmVzb3VyY2VMb2FkZXIgcmVsYXRlZCBjb2RlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4
dHJhcy5oCmluZGV4IDc3MjViMWEyYzc1ZWJlODcwY2JmYWU4Y2E5NzQ0MjJmMGU0YTRlMzAuLjQ0
NTdiYTI1ODcxYTRkYzYxYWY0MWJlN2JiNTZkZDJkNWYyZjliN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJh
cy5oCkBAIC0xMjEsNiArMTIxLDcgQEAgZW51bSBDaGVja01vdmVQYXJhbWV0ZXJUYWcgeyBDaGVj
a01vdmVQYXJhbWV0ZXIgfTsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBLQiA9IDEwMjQ7CiBzdGF0
aWMgY29uc3Qgc2l6ZV90IE1CID0gMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3Qgc2l6ZV90IEdC
ID0gMTAyNCAqIDEwMjQgKiAxMDI0OwogCiBpbmxpbmUgYm9vbCBpc1BvaW50ZXJBbGlnbmVkKHZv
aWQqIHApCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA5MDZjOGU2NWU1NTBhOGU4NzQ3MjE0NGE3ZjZh
MmRjOWRiODM3MmVlLi5iNTJjNDU2ZjAwNGZmMDBhYTY0NDZiZjM0Yjc4NTI0Y2ViNDNiOGUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAKQEAgLTI0NDgsNyArMjQ0OCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwg
ZmxvCiAgICAgICAgICAgICBmb250UHJveHkuZHJhd0JpZGlUZXh0KCpjLCB0ZXh0UnVuLCBsb2Nh
dGlvbiArIG9mZnNldCwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtYXNrSW1h
Z2UgPSBjLT5jcmVhdGVDb21wYXRpYmxlQnVmZmVyKG1hc2tSZWN0LnNpemUoKSk7CisgICAgICAg
IGF1dG8gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIobWFz
a1JlY3Quc2l6ZSgpLCAqYyk7CiAgICAgICAgIGlmICghbWFza0ltYWdlKQogICAgICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKaW5kZXggNjdjZTYyY2UyMzE2ZGNiM2I3MGRjMDIzZmJlYzQxMWExZjNiYzczZS4u
MDY3NmNlMDcyNTA3NmJiOTVjY2QyNmM1YzFhNTI4ZDE2M2E0NjUyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjA2LDcgKzYw
Niw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoIW1fY2FjaGVkSW1hZ2UpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIgPSBjdHh0LmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoZXhwYW5kZWRJbnRTaXpl
KHRpbGVSZWN0LnNpemUoKSkpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZSh0aWxlUmVjdC5zaXplKCkpLCBj
dHh0KTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKaW5kZXggNTIxM2M5YWFj
ZTM1NmE1ZmYxZTgzNTZhNGU1YTIzYjJjNDExM2M0Mi4uYjUxMjY0NDgxYjI4ZGQ5NDAzMGI0MWRm
OGQ3ODhiNWE0NGQ2ODViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRTaXplLmgKQEAgLTEwMyw2ICsxMDMsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fd2lkdGggKiBtX3dpZHRoICsgbV9oZWlnaHQgKiBtX2hlaWdodDsKICAgICB9Cisg
ICAgCisgICAgZmxvYXQgYXJlYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0
aCAqIG1faGVpZ2h0OworICAgIH0KIAogICAgIEZsb2F0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNv
bnN0CiAgICAgewpAQCAtMTYzLDYgKzE2OCwxMSBAQCBpbmxpbmUgRmxvYXRTaXplIG9wZXJhdG9y
KihmbG9hdCBhLCBjb25zdCBGbG9hdFNpemUmIGIpCiAgICAgcmV0dXJuIEZsb2F0U2l6ZShhICog
Yi53aWR0aCgpLCBhICogYi5oZWlnaHQoKSk7CiB9CiAKK2lubGluZSBGbG9hdFNpemUgb3BlcmF0
b3IqKGNvbnN0IEZsb2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQoreworICAgIHJldHVy
biBGbG9hdFNpemUoYS53aWR0aCgpICogYi53aWR0aCgpLCBhLmhlaWdodCgpICogYi5oZWlnaHQo
KSk7Cit9CisKIGlubGluZSBGbG9hdFNpemUgb3BlcmF0b3IvKGNvbnN0IEZsb2F0U2l6ZSYgYSwg
ZmxvYXQgYikKIHsKICAgICByZXR1cm4gRmxvYXRTaXplKGEud2lkdGgoKSAvIGIsIGEuaGVpZ2h0
KCkgLyBiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnRJbWFnZS5jcHAKaW5kZXggMzcyNjkxYTliMmI3NWZlOTMxZDUxZmZjZGEwYjFhNDM5MDE5NGRj
MS4uYWQzM2M1NWEzNzg5NjJiYzA1NzRhYTAyZDA3YTExYWJhMzAwNTZhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKQEAgLTc0
LDggKzc0LDggQEAgdm9pZCBHcmFkaWVudEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHMKIAogICAgIHVuc2lnbmVkIGdlbmVy
YXRvckhhc2ggPSBtX2dyYWRpZW50LT5oYXNoKCk7CiAKLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2VC
dWZmZXIgfHwgbV9jYWNoZWRHZW5lcmF0b3JIYXNoICE9IGdlbmVyYXRvckhhc2ggfHwgbV9jYWNo
ZWRBZGp1c3RlZFNpemUgIT0gYWRqdXN0ZWRTaXplIHx8ICFkZXN0Q29udGV4dC5pc0NvbXBhdGli
bGVXaXRoQnVmZmVyKCptX2NhY2hlZEltYWdlQnVmZmVyKSkgewotICAgICAgICBtX2NhY2hlZElt
YWdlQnVmZmVyID0gZGVzdENvbnRleHQuY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihhZGp1c3RlZFNp
emUsIG1fZ3JhZGllbnQtPmhhc0FscGhhKCkpOworICAgIGlmICghbV9jYWNoZWRJbWFnZUJ1ZmZl
ciB8fCBtX2NhY2hlZEdlbmVyYXRvckhhc2ggIT0gZ2VuZXJhdG9ySGFzaCB8fCBtX2NhY2hlZEFk
anVzdGVkU2l6ZSAhPSBhZGp1c3RlZFNpemUgfHwgIW1fY2FjaGVkSW1hZ2VCdWZmZXItPmlzQ29t
cGF0aWJsZVdpdGhDb250ZXh0KGRlc3RDb250ZXh0KSkgeworICAgICAgICBtX2NhY2hlZEltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXpl
LCBkZXN0Q29udGV4dCwgbV9ncmFkaWVudC0+aGFzQWxwaGEoKSk7CiAgICAgICAgIGlmICghbV9j
YWNoZWRJbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggYjkw
ODVjMzM3OTgzMWU5ZjlkODM1NzdkNmUwNjExYmEzMTE5ZDhjMi4uYWYxOTEyMjcwMzRlYWMxNjBi
ZTNmYjJhMDZmNmQ0ZGUzYmZmMjdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0xMDEyLDM2ICsxMDEyLDYgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBv
aW50JiBwMSwgRmxvYXRQb2ludCYgcDIKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIHNjYWxlc01h
dGNoKEFmZmluZVRyYW5zZm9ybSBhLCBBZmZpbmVUcmFuc2Zvcm0gYikKLXsKLSAgICByZXR1cm4g
YS54U2NhbGUoKSA9PSBiLnhTY2FsZSgpICYmIGEueVNjYWxlKCkgPT0gYi55U2NhbGUoKTsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBib29sIGhhc0FscGhhKSBjb25z
dAotewotICAgIC8vIE1ha2UgdGhlIGJ1ZmZlciBsYXJnZXIgaWYgdGhlIGNvbnRleHQncyB0cmFu
c2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlv
biB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4gQWxzbyBzZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNj
YWxlIGZhY3RvciBvbiB0aGUKLSAgICAvLyBncmFwaGljcyBjb250ZXh0LgotCi0gICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKLSAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc2l6ZS53
aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpKSksIHN0YXRpY19jYXN0PGludD4oY2VpbChzaXpl
LmhlaWdodCgpICogdHJhbnNmb3JtLnlTY2FsZSgpKSkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNlU1JHQiwgKnRoaXMsIGhhc0FscGhhKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZmZXItPmNvbnRl
eHQoKS5zY2FsZShGbG9hdFNpemUoc2NhbGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBz
Y2FsZWRTaXplLmhlaWdodCgpIC8gc2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQ29tcGF0aWJsZVdpdGhCdWZmZXIoSW1h
Z2VCdWZmZXImIGJ1ZmZlcikgY29uc3QKLXsKLSAgICBHcmFwaGljc0NvbnRleHQmIGJ1ZmZlckNv
bnRleHQgPSBidWZmZXIuY29udGV4dCgpOwotCi0gICAgcmV0dXJuIHNjYWxlc01hdGNoKGdldENU
TSgpLCBidWZmZXJDb250ZXh0LmdldENUTSgpKSAmJiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID09
IGJ1ZmZlckNvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKTsKLX0KLQogI2lmICFVU0UoQ0cp
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KQogewpAQCAtMTA1OSw2ICsxMDI5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogCiAgICAgcGxhdGZv
cm1BcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KKyAgICAKK0Zs
b2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgcmV0dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNj
YWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Cit9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDA2YWE4ZThk
YjY4YTU3MzY2Mzk5NmQwNTkzMDg0YmRjZGUxNmY2MGUuLmQwMDM1M2U3MjRiZDc0MjJjNWQzZTFl
YjBjNmFkMTU0ZDM1N2FmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC00NzYsMTUgKzQ3NiwxMiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXQzRFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldDNEVHJhbnNmb3JtKCkgY29uc3Q7CiAjZW5kaWYKLSAg
ICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNvbnRleHQs
IHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbgotICAgIC8vIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1
ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgYm9vbCBo
YXNBbHBoYSA9IHRydWUpIGNvbnN0OwotICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aEJ1ZmZlcihJ
bWFnZUJ1ZmZlciYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBk
ZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2Fw
YWJsZSBvZgogICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQ
SSBlbnZpcm9ubWVudC4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpOwogICAgIHZvaWQgcGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKIAogI2lmIE9TKFdJTkRP
V1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBv
cnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCk7IC8vIFRoZSBwYXNzZWQgaW4gcmVj
dCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGJpdG1hcCBmb3IgY29tcG9zaXRpbmcgaW5zaWRlIHRyYW5z
cGFyZW5jeSBsYXllcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKaW5kZXggMmFjZTczYzI4YWQwMmViNDE0ZjgyOGVjZTI4NjliMzZlMTU1
M2FlNS4uYzM4ZDQ4MTEyYzU1ZTZjZWVhMzQxOTRiZDU2M2U4YzcxZmZlNmZjZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMTY0
LDkgKzE2NCwzNyBAQCBib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QmLCBHQzNEZW51bSwgUGxhdGZvcm0zRAogfQogI2VuZGlmCiAKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGJvb2wgaGFzQWxwaGEpCit7CisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNv
bXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBidWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUoc2NhbGVk
U2l6ZSksIDEsIENvbG9yU3BhY2VTUkdCLCBjb250ZXh0LCBoYXNBbHBoYSk7CisgICAgaWYgKCFi
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVz
cG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgYnVmZmVy
LT5jb250ZXh0KCkuc2NhbGUoY29udGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gYnVm
ZmVyOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgYm9vbCkKIHsKICAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5n
TW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQogCitGbG9hdFNpemUgSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZl
ciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVl
ZCBhIGhpZ2hlcgorICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCisg
ICAgcmV0dXJuIHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCk7Cit9CisKK2Jvb2wgSW1hZ2VC
dWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChjb250ZXh0LnNj
YWxlRmFjdG9yKCksIHRoaXMtPmNvbnRleHQoKS5zY2FsZUZhY3RvcigpKTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggNTdi
YTYzNTIwZmRlYjNiYTIxZTI3MGI3NjlmZGQyOTA0Y2NhN2M2MS4uNmRmNzk5NDkyZTIxMGUyZDBk
MTdjMDRjMzk1ZTVhNzgwZGM1MjZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC03OSw4ICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBidWZmZXI7CiAgICAgfQogCisgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBj
b21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3Ig
ZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmLCBib29sIGhhc0FscGhh
ID0gdHJ1ZSk7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYsIGJvb2wgaGFzQWxwaGEpOwogCisg
ICAgc3RhdGljIEZsb2F0U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBPUlQg
fkltYWdlQnVmZmVyKCk7CiAKICAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJh
Y2tpbmcgc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IGJkNzk4YzA5NTNmNWRh
NzliMmM0ODUxMzM0ODcyYWIwNjM1NzJlYmEuLjY4MTA5NzRmNGUwZDkwN2EzOTUwZjAxZjJkMmNl
OGIyMzM2YmIzNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtNjQsNyArNjQsNyBA
QCB2b2lkIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZAogdm9pZCBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCiB7CiAjaWYgVVNFKE5FV19USEVNRSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyID0gY29udGV4dC5jcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUo
KSwgdHJ1ZSk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKHNpemUoKSwgY29udGV4dCwgdHJ1ZSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IGVmNzZiODYzZDdhOGZj
OWM0MzA2MjU2NWY0YjNlMzI3ZGFhNzM2MjQuLjMwNjIyZmIyZDIxNmI3YmY5MGEzMGY1MTc0M2Y5
ZTYwNWI5MmU0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0Myw5IEBACiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BE
RkRvY3VtZW50Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
UkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiSW1hZ2VTb3Vy
Y2VDRy5oIgpAQCAtMTQzLDYgKzE0NSwxNSBAQCBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Db250ZXh0
Rm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogdm9p
ZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIE9uIGlPUywgaWYgdGhlIHBo
eXNpY2FsIG1lbW9yeSBpcyBsZXNzIHRoYW4gMUdCLCBkbyBub3QgYWxsb2NhdGUgbW9yZSB0aGFu
IDE2TUIgZm9yIHRoZSBQREYgY2FjaGVkSW1hZ2UuCisgICAgY29uc3Qgc2l6ZV90IG1lbW9yeVRo
cmVzaG9sZCA9IFdURjo6R0I7CisgICAgY29uc3Qgc2l6ZV90IG1heEFyZWEgPSAxNiAqIFdURjo6
TUIgLyA0OyAvLyAxNiBNQiBtYXhpbXVtIHNpemUsIGRpdmlkZWQgYnkgYSByb3VnaCBjb3N0IG9m
IDQgYnl0ZXMgcGVyIHBpeGVsIG9mIGFyZWEuCisgICAgCisgICAgaWYgKHJhbVNpemUoKSA8PSBt
ZW1vcnlUaHJlc2hvbGQgJiYgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGRzdFJl
Y3Quc2l6ZSgpLCBjb250ZXh0KS5hcmVhKCkgPj0gbWF4QXJlYSkgeworICAgICAgICBtX2NhY2hl
ZEltYWdlQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8v
IE9uIGlPUywgc29tZSBjbGllbnRzIHVzZSBsb3ctcXVhbGl0eSBpbWFnZSBpbnRlcnBvbGF0aW9u
IGFsd2F5cywgd2hpY2ggdGhyb3dzIG9mZiB0aGlzIG9wdGltaXphdGlvbiwKICAgICAvLyBhcyB3
ZSBuZXZlciBnZXQgdGhlIHN1YnNlcXVlbnQgaGlnaC1xdWFsaXR5IHBhaW50LiBTaW5jZSBsaXZl
IHJlc2l6ZSBpcyByYXJlIG9uIGlPUywgZGlzYWJsZSB0aGUgb3B0aW1pemF0aW9uLgogICAgIC8v
IEZJWE1FICgxMzY1OTMpOiBJdCdzIGFsc28gcG9zc2libGUgdG8gZG8gdGhlIHdyb25nIHRoaW5n
IGhlcmUgaWYgQ1NTIHNwZWNpZmllcyBsb3ctcXVhbGl0eSBpbnRlcnBvbGF0aW9uIHZpYSB0aGUg
ImltYWdlLXJlbmRlcmluZyIKQEAgLTE1NiwyNiArMTY3LDI3IEBAIHZvaWQgUERGRG9jdW1lbnRJ
bWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0CiAgICAgYm9vbCByZXBhaW50SWZOZWNlc3NhcnkgPSBpbnRlcnBvbGF0aW9uUXVhbGl0
eSAhPSBJbnRlcnBvbGF0aW9uTm9uZSAmJiBpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBJbnRlcnBv
bGF0aW9uTG93OwogI2VuZGlmCiAKLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIgfHwgKCFj
YWNoZVBhcmFtZXRlcnNNYXRjaChjb250ZXh0LCBkc3RSZWN0LCBzcmNSZWN0KSAmJiByZXBhaW50
SWZOZWNlc3NhcnkpKSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBjb250ZXh0LmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QoZHN0UmVjdCkp
LnNpemUoKSk7Ci0gICAgICAgIGlmICghbV9jYWNoZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBidWZmZXJDb250ZXh0ID0gbV9jYWNo
ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIGlmIChtX2NhY2hlZEltYWdlQnVmZmVyICYm
ICghcmVwYWludElmTmVjZXNzYXJ5IHx8IGNhY2hlUGFyYW1ldGVyc01hdGNoKGNvbnRleHQsIGRz
dFJlY3QsIHNyY1JlY3QpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY2FjaGVkSW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihGbG9hdFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSkuc2l6ZSgpLCBjb250ZXh0KTsKKyAgICBpZiAoIW1f
Y2FjaGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBidWZmZXJDb250
ZXh0ID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogCi0gICAgICAgIHRyYW5zZm9y
bUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RSZWN0LCBzcmNSZWN0KTsKLSAg
ICAgICAgZHJhd1BERlBhZ2UoYnVmZmVyQ29udGV4dCk7CisgICAgdHJhbnNmb3JtQ29udGV4dEZv
clBhaW50aW5nKGJ1ZmZlckNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QpOworICAgIGRyYXdQREZQ
YWdlKGJ1ZmZlckNvbnRleHQpOwogCi0gICAgICAgIG1fY2FjaGVkVHJhbnNmb3JtID0gY29udGV4
dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsK
LSAgICAgICAgbV9jYWNoZWREZXN0aW5hdGlvblNpemUgPSBkc3RSZWN0LnNpemUoKTsKLSAgICAg
ICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKKyAgICBtX2NhY2hlZFRyYW5zZm9ybSA9
IGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VT
Y2FsZSk7CisgICAgbV9jYWNoZWREZXN0aW5hdGlvblNpemUgPSBkc3RSZWN0LnNpemUoKTsKKyAg
ICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogCi0gICAgICAgIEludFNpemUgaW50ZXJu
YWxTaXplID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgICAgIHNp
emVfdCBvbGRDYWNoZWRCeXRlcyA9IG1fY2FjaGVkQnl0ZXM7Ci0gICAgICAgIG1fY2FjaGVkQnl0
ZXMgPSBpbnRlcm5hbFNpemUud2lkdGgoKSAqIGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIDQ7Cisg
ICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKTsKKyAgICBzaXplX3Qgb2xkQ2FjaGVkQnl0ZXMgPSBtX2NhY2hlZEJ5dGVzOworICAgIG1f
Y2FjaGVkQnl0ZXMgPSBzYWZlQ2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSAqIGlu
dGVybmFsU2l6ZS5oZWlnaHQoKSAqIDQ7CiAKLSAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkK
LSAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIHNh
ZmVDYXN0PGludD4obV9jYWNoZWRCeXRlcykgLSBzYWZlQ2FzdDxpbnQ+KG9sZENhY2hlZEJ5dGVz
KSk7Ci0gICAgfQorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2
ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIHNhZmVDYXN0PGludD4obV9jYWNoZWRCeXRl
cykgLSBzYWZlQ2FzdDxpbnQ+KG9sZENhY2hlZEJ5dGVzKSk7CiB9CiAKIHZvaWQgUERGRG9jdW1l
bnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA5OGFhMzYxZmY4
MzAyNjhhYmUwZTY4NjgzZWMzZTIzNTNkOWUxZDA5Li44MjY0OWNlZjFmZGU5Y2Y4NGU2YWY5Njkw
MDhlMGFiZjNmOTE5MThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTc1Niw3ICs3NTYsNyBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjbwogICAgICAgICBtYXNrUmVjdC5pbnRlcnNlY3Qoc25hcHBlZEludFJlY3QocGFpbnRJ
bmZvLnJlY3QpKTsKIAogICAgICAgICAvLyBOb3cgY3JlYXRlIHRoZSBtYXNrLgotICAgICAgICBt
YXNrSW1hZ2UgPSBjb250ZXh0LmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIobWFza1JlY3Quc2l6ZSgp
KTsKKyAgICAgICAgbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIobWFza1JlY3Quc2l6ZSgpLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHBhaW50TWFza0ZvclRleHRGaWxsQm94KG1hc2tJ
bWFnZS5nZXQoKSwgbWFza1JlY3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3QpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5k
ZXggM2MxZGZiNWUwOWJhOTg3NDU4NzExY2E4NDI2NTAwOTk4NjUzNDk0My4uOTc2ZGY1YWFlM2Ji
YjUyZDIyYTY1OWI2OGE4YmQyNjdmODQ1YjM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNTEsNyArMzUxLDcg
QEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnUKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBidWZmZXIg
YW5kIHBhaW50IHRoZSBmb3JlZ3JvdW5kIGludG8gaXQuCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikg
ewotICAgICAgICBpZiAoKGltYWdlQnVmZmVyID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5jcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpLCB0
cnVlKSkpIHsKKyAgICAgICAgaWYgKChpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpLCBtX3Bh
aW50SW5mby0+Y29udGV4dCgpLCB0cnVlKSkpIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dCYgYnVmZmVyZWRSZW5kZXJpbmdDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAg
ICAgICAgICAgIGJ1ZmZlcmVkUmVuZGVyaW5nQ29udGV4dC50cmFuc2xhdGUoLWJvdW5kaW5nQm94
LngoKSwgLWJvdW5kaW5nQm94LnkoKSk7CiAgICAgICAgICAgICBQYWludEluZm8gYnVmZmVyZWRJ
bmZvKCptX3BhaW50SW5mbyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>