<?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>103914</bug_id>
          
          <creation_ts>2012-12-03 11:45:51 -0800</creation_ts>
          <short_desc>Add support for tracking hit test rectangles to enable fast event rejection in the compositor</short_desc>
          <delta_ts>2012-12-17 13:43:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://code.google.com/p/chromium/issues/detail?id=135818</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>105048</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>andersca</cc>
    
    <cc>anilsson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d-r</cc>
    
    <cc>efidler</cc>
    
    <cc>eric</cc>
    
    <cc>fmalita</cc>
    
    <cc>jamesr</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mifenton</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ojan</cc>
    
    <cc>pdr</cc>
    
    <cc>philn</cc>
    
    <cc>schenney</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>781725</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-03 11:45:51 -0800</bug_when>
    <thetext>When the WebKit thread is in heavy use, it can be faster to perform a first-pass hit test in the compositor before handing the event to WebKit. This change adds support for tracking the rects associated with an event target with an event handler, and begins doing so for Touch Events on Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781749</commentid>
    <comment_count>1</comment_count>
      <attachid>177303</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-03 12:08:13 -0800</bug_when>
    <thetext>Created attachment 177303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781760</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-03 12:22:55 -0800</bug_when>
    <thetext>Do we know how iOS survives w/o this? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781776</commentid>
    <comment_count>3</comment_count>
      <attachid>177303</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-03 12:38:21 -0800</bug_when>
    <thetext>Comment on attachment 177303
Patch

Attachment 177303 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15104615</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781785</commentid>
    <comment_count>4</comment_count>
      <attachid>177303</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-03 12:47:38 -0800</bug_when>
    <thetext>Comment on attachment 177303
Patch

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

&gt; Source/WebCore/rendering/RenderInline.cpp:1437
&gt; +    Vector&lt;IntRect&gt; result;

here and elsewhere - can you use a Region for this? It would accumulate overlapping / enclosed rects in a slightly nicer way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781794</commentid>
    <comment_count>5</comment_count>
      <attachid>177303</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-03 12:59:45 -0800</bug_when>
    <thetext>Comment on attachment 177303
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:6931
&gt; +void RenderBlock::addLayerHitTestRects(LayerHitTestRects&amp; layerRects, const RenderLayer* currentCompositedLayer, const LayoutPoint&amp; layerOffset) const

I don&apos;t understand why you&apos;re accumulating these rects relative to some RenderLayer. Shouldn&apos;t they all just be root-relative?

Also the layerOffset stuff won&apos;t work with software-rendered transforms.

&gt; Source/WebCore/rendering/RenderBlock.cpp:6960
&gt; +    if (width() &amp;&amp; height())
&gt; +        result.append(pixelSnappedIntRect(adjustedLayerOffset, size()));
&gt; +
&gt; +    if (hasHorizontalLayoutOverflow() || hasVerticalLayoutOverflow()) {
&gt; +        for (RootInlineBox* curr = firstRootBox(); curr; curr = curr-&gt;nextRootBox()) {
&gt; +            LayoutUnit top = max&lt;LayoutUnit&gt;(curr-&gt;lineTop(), curr-&gt;top());
&gt; +            LayoutUnit bottom = min&lt;LayoutUnit&gt;(curr-&gt;lineBottom(), curr-&gt;top() + curr-&gt;height());
&gt; +            LayoutRect rect(adjustedLayerOffset.x() + curr-&gt;x(), adjustedLayerOffset.y() + top, curr-&gt;width(), bottom - top);
&gt; +            if (!rect.isEmpty())
&gt; +                result.append(pixelSnappedIntRect(rect));
&gt; +        }
&gt; +    }
&gt; +
&gt; +    for (RenderObject* curr = firstChild(); curr; curr = curr-&gt;nextSibling()) {
&gt; +        if (!curr-&gt;isText() &amp;&amp; !curr-&gt;isListMarker() &amp;&amp; curr-&gt;isBox()) {
&gt; +            RenderBox* box = toRenderBox(curr);
&gt; +            box-&gt;addLayerHitTestRects(layerRects, currentCompositedLayer,  adjustedLayerOffset + box-&gt;locationOffset());
&gt; +        }
&gt; +    }

Rather than have all this code here, can we make a generic RenderObject method for computing the hit-test region for an arbitrary element?

&gt; Source/WebCore/rendering/RenderObject.cpp:629
&gt; +        // Don&apos;t apply transforms as we should never pass through one.
&gt; +        mapLocalToContainer((*enclosingCompositedLayer)-&gt;renderer(), transformState, ApplyContainerFlip | SnapOffsetForTransforms);

Sure you will; 2D transforms don&apos;t always make compositing layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781816</commentid>
    <comment_count>6</comment_count>
      <attachid>177303</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-03 13:23:43 -0800</bug_when>
    <thetext>Comment on attachment 177303
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:6931
&gt;&gt; +void RenderBlock::addLayerHitTestRects(LayerHitTestRects&amp; layerRects, const RenderLayer* currentCompositedLayer, const LayoutPoint&amp; layerOffset) const
&gt; 
&gt; I don&apos;t understand why you&apos;re accumulating these rects relative to some RenderLayer. Shouldn&apos;t they all just be root-relative?
&gt; 
&gt; Also the layerOffset stuff won&apos;t work with software-rendered transforms.

Accumulating them relative to their enclosing composited layer allows us to hit test those layers in the compositor properly when 3d transforms are involved, ie as opposed to taking an enclosing bounding box in the root&apos;s space.

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:6960
&gt;&gt; +    }
&gt; 
&gt; Rather than have all this code here, can we make a generic RenderObject method for computing the hit-test region for an arbitrary element?

With the differing implementations for boxes, blocks, and inlines, it seems uglier to me to probe for types, but it&apos;s certainly do-able.

&gt;&gt; Source/WebCore/rendering/RenderInline.cpp:1437
&gt;&gt; +    Vector&lt;IntRect&gt; result;
&gt; 
&gt; here and elsewhere - can you use a Region for this? It would accumulate overlapping / enclosed rects in a slightly nicer way

Sure.

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:629
&gt;&gt; +        mapLocalToContainer((*enclosingCompositedLayer)-&gt;renderer(), transformState, ApplyContainerFlip | SnapOffsetForTransforms);
&gt; 
&gt; Sure you will; 2D transforms don&apos;t always make compositing layers.

Good catch, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781817</commentid>
    <comment_count>7</comment_count>
      <attachid>177303</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-03 13:27:01 -0800</bug_when>
    <thetext>Comment on attachment 177303
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderInline.cpp:1437
&gt;&gt;&gt; +    Vector&lt;IntRect&gt; result;
&gt;&gt; 
&gt;&gt; here and elsewhere - can you use a Region for this? It would accumulate overlapping / enclosed rects in a slightly nicer way
&gt; 
&gt; Sure.

Very very slowly. :)  Unioning N rects is N^2 with Region. :(  See bug 98800</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781822</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-03 13:33:02 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 177303 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177303&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:6931
&gt; &gt;&gt; +void RenderBlock::addLayerHitTestRects(LayerHitTestRects&amp; layerRects, const RenderLayer* currentCompositedLayer, const LayoutPoint&amp; layerOffset) const
&gt; &gt; 
&gt; &gt; I don&apos;t understand why you&apos;re accumulating these rects relative to some RenderLayer. Shouldn&apos;t they all just be root-relative?
&gt; &gt; 
&gt; &gt; Also the layerOffset stuff won&apos;t work with software-rendered transforms.
&gt; 
&gt; Accumulating them relative to their enclosing composited layer allows us to hit test those layers in the compositor properly when 3d transforms are involved, ie as opposed to taking an enclosing bounding box in the root&apos;s space.

I see. That does seem rather platform-specific, though. You could track root-relative quads.

On iOS, we track them all root-relative (as bounding boxes). It would be nice to be able to share code here.

&gt; &gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:6960
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; Rather than have all this code here, can we make a generic RenderObject method for computing the hit-test region for an arbitrary element?
&gt; 
&gt; With the differing implementations for boxes, blocks, and inlines, it seems uglier to me to probe for types, but it&apos;s certainly do-able.

Use virtual methods? It would be akin to absoluteQuads().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781825</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-03 13:33:56 -0800</bug_when>
    <thetext>Also, do you track rects per-frame, or just on the root including all subframes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781870</commentid>
    <comment_count>10</comment_count>
      <attachid>177303</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-03 14:09:15 -0800</bug_when>
    <thetext>Comment on attachment 177303
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:6931
&gt;&gt;&gt;&gt; +void RenderBlock::addLayerHitTestRects(LayerHitTestRects&amp; layerRects, const RenderLayer* currentCompositedLayer, const LayoutPoint&amp; layerOffset) const
&gt;&gt;&gt; 
&gt;&gt;&gt; I don&apos;t understand why you&apos;re accumulating these rects relative to some RenderLayer. Shouldn&apos;t they all just be root-relative?
&gt;&gt;&gt; 
&gt;&gt;&gt; Also the layerOffset stuff won&apos;t work with software-rendered transforms.
&gt;&gt; 
&gt;&gt; Accumulating them relative to their enclosing composited layer allows us to hit test those layers in the compositor properly when 3d transforms are involved, ie as opposed to taking an enclosing bounding box in the root&apos;s space.
&gt; 
&gt; I see. That does seem rather platform-specific, though. You could track root-relative quads.
&gt; 
&gt; On iOS, we track them all root-relative (as bounding boxes). It would be nice to be able to share code here.

Root-relative boxes or quads would be possible, it just requires a lot more layer walking.

I&apos;d agree it&apos;d be nice to share code. Is the code used to generate these bounding boxes on iOS available to share? Obviously, the standard bounding box code doesn&apos;t actually mirror hit testing, but if there&apos;s something that does this already I&apos;d love to re-use it.

&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:6960
&gt;&gt;&gt;&gt; +    }
&gt;&gt;&gt; 
&gt;&gt;&gt; Rather than have all this code here, can we make a generic RenderObject method for computing the hit-test region for an arbitrary element?
&gt;&gt; 
&gt;&gt; With the differing implementations for boxes, blocks, and inlines, it seems uglier to me to probe for types, but it&apos;s certainly do-able.
&gt; 
&gt; Use virtual methods? It would be akin to absoluteQuads().

If our goal is to generate all the absolute bounding boxes or quads, we can simplify the virtual implementations.

&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderInline.cpp:1437
&gt;&gt;&gt;&gt; +    Vector&lt;IntRect&gt; result;
&gt;&gt;&gt; 
&gt;&gt;&gt; here and elsewhere - can you use a Region for this? It would accumulate overlapping / enclosed rects in a slightly nicer way
&gt;&gt; 
&gt;&gt; Sure.
&gt; 
&gt; Very very slowly. :)  Unioning N rects is N^2 with Region. :(  See bug 98800

I originally implemented it with Regions, but after looking at the accumulation code there I changed my path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782030</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-03 16:43:02 -0800</bug_when>
    <thetext>Doing everything viewport-relative would meet our short-term needs, but doing hit testing on child layers is better long term (since it&apos;s more precise) and something I would expect the ScrollingTree logic to be able to handle eventually even on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782056</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-03 17:12:01 -0800</bug_when>
    <thetext>The scrolling tree isn&apos;t about layers; it&apos;s about &quot;islands of scrollability&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782069</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-03 17:28:38 -0800</bug_when>
    <thetext>OK(In reply to comment #12)
&gt; The scrolling tree isn&apos;t about layers; it&apos;s about &quot;islands of scrollability&quot;.

OK, well I think the points still stands - you&apos;d want to be able to hit test on each &quot;island&quot; separately since they will move around relative to each other.  I don&apos;t really know what the point of trying to abstract here is since the only useful islands of scrollability are ones you can move (i.e. layers)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782091</commentid>
    <comment_count>14</comment_count>
      <attachid>177386</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-03 18:10:34 -0800</bug_when>
    <thetext>Created attachment 177386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782096</commentid>
    <comment_count>15</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-03 18:14:09 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=177386) [details]
&gt; Patch

This patch switches to using repaint containers, but it doesn&apos;t drastically re-architect the method for accumulating the rects. I found trying to do the tree walk in a separate non-virtual function to be quite ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782100</commentid>
    <comment_count>16</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-03 18:16:22 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 177303 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177303&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:1437
&gt; &gt; +    Vector&lt;IntRect&gt; result;
&gt; 
&gt; here and elsewhere - can you use a Region for this? It would accumulate overlapping / enclosed rects in a slightly nicer way

If this gets traction, I&apos;ll file another bug to track switching to Regions when performance allows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782108</commentid>
    <comment_count>17</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-03 18:24:25 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 177303 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177303&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderInline.cpp:1437
&gt; &gt; &gt; +    Vector&lt;IntRect&gt; result;
&gt; &gt; 
&gt; &gt; here and elsewhere - can you use a Region for this? It would accumulate overlapping / enclosed rects in a slightly nicer way
&gt; 
&gt; If this gets traction, I&apos;ll file another bug to track switching to Regions when performance allows.

(For the record, the bug tracking the N^2 issue is https://bugs.webkit.org/show_bug.cgi?id=100814)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782120</commentid>
    <comment_count>18</comment_count>
      <attachid>177386</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-03 18:40:18 -0800</bug_when>
    <thetext>Comment on attachment 177386
Patch

Attachment 177386 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15101793</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782681</commentid>
    <comment_count>19</comment_count>
      <attachid>177507</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-04 10:33:58 -0800</bug_when>
    <thetext>Created attachment 177507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782740</commentid>
    <comment_count>20</comment_count>
      <attachid>177507</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-04 11:22:59 -0800</bug_when>
    <thetext>Comment on attachment 177507
Patch

Attachment 177507 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15154039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782967</commentid>
    <comment_count>21</comment_count>
      <attachid>177569</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-04 14:44:20 -0800</bug_when>
    <thetext>Created attachment 177569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783060</commentid>
    <comment_count>22</comment_count>
      <attachid>177569</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-04 16:00:46 -0800</bug_when>
    <thetext>Comment on attachment 177569
Patch

Attachment 177569 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15152139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783145</commentid>
    <comment_count>23</comment_count>
      <attachid>177615</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-04 17:22:24 -0800</bug_when>
    <thetext>Created attachment 177615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783865</commentid>
    <comment_count>24</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-05 09:51:48 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=177615) [details]
&gt; Patch

smfr: see if this addresses your concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784106</commentid>
    <comment_count>25</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-05 14:15:15 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; Created an attachment (id=177615) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; smfr: see if this addresses your concerns.

Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785354</commentid>
    <comment_count>26</comment_count>
      <attachid>177615</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-06 15:50:09 -0800</bug_when>
    <thetext>Comment on attachment 177615
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785371</commentid>
    <comment_count>27</comment_count>
      <attachid>177615</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-06 15:59:17 -0800</bug_when>
    <thetext>Comment on attachment 177615
Patch

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

&gt; Source/WebCore/rendering/RenderBox.cpp:483
&gt; +void RenderBox::addRepaintContainerHitTestRects(RepaintContainerHitTestRects&amp; repaintContainerRects, const RenderLayerModelObject* currentRepaintContainer, const LayoutPoint&amp; repaintOffset) const

What does &quot;current&quot; add to repaintContainer?

&gt; Source/WebCore/rendering/RenderBox.cpp:485
&gt; +    LayoutPoint adjustedRepaintOffset = repaintOffset;

It&apos;s odd that this is called a repaintOffset when it has nothing to do with (re)painting. It should just be offsetFromContainer.

&gt; Source/WebCore/rendering/RenderBox.cpp:493
&gt; +    if (width() &amp;&amp; height()) {
&gt; +        IntRect result(pixelSnappedIntRect(adjustedRepaintOffset, size()));

I&apos;d prefer this to be a call to something like borderBoxRect(). Just using size() doesn&apos;t indicate that you&apos;ve thought about which rect makes sense for hit testing.

&gt; Source/WebCore/rendering/RenderObject.cpp:622
&gt; +    // Self-painting layers subtract the renderer&apos;s location. Otherwise, we need to map our location to container space.

self-painting layer means something different in RL speak.

&gt; Source/WebCore/rendering/RenderObject.cpp:629
&gt; +        TransformState transformState(TransformState::ApplyTransformDirection, FloatPoint());
&gt; +        mapLocalToContainer(repaintContainer, transformState, ApplyContainerFlip | UseTransforms | SnapOffsetForTransforms);
&gt; +        transformState.flatten();
&gt; +        offset = LayoutPoint(transformState.lastPlanarPoint());

See comment below.

&gt; Source/WebCore/rendering/RenderObject.h:965
&gt; +    void repaintContainerAndOffset(const RenderLayerModelObject*&amp;, LayoutPoint&amp;) const;

r- for this method. This encourages incorrect usage, where this is a software-rendered transform between you and your repaint container. Just offsetting a rect by that offset will do the wrong thing there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785488</commentid>
    <comment_count>28</comment_count>
      <attachid>177615</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-06 17:55:27 -0800</bug_when>
    <thetext>Comment on attachment 177615
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBox.cpp:483
&gt;&gt; +void RenderBox::addRepaintContainerHitTestRects(RepaintContainerHitTestRects&amp; repaintContainerRects, const RenderLayerModelObject* currentRepaintContainer, const LayoutPoint&amp; repaintOffset) const
&gt; 
&gt; What does &quot;current&quot; add to repaintContainer?

The idea is that it can be updated within the method itself, so what&apos;s passed in is not necessarily the repaint container.

&gt;&gt; Source/WebCore/rendering/RenderBox.cpp:485
&gt;&gt; +    LayoutPoint adjustedRepaintOffset = repaintOffset;
&gt; 
&gt; It&apos;s odd that this is called a repaintOffset when it has nothing to do with (re)painting. It should just be offsetFromContainer.

No problem.

&gt;&gt; Source/WebCore/rendering/RenderBox.cpp:493
&gt;&gt; +        IntRect result(pixelSnappedIntRect(adjustedRepaintOffset, size()));
&gt; 
&gt; I&apos;d prefer this to be a call to something like borderBoxRect(). Just using size() doesn&apos;t indicate that you&apos;ve thought about which rect makes sense for hit testing.

Sure.

&gt;&gt; Source/WebCore/rendering/RenderObject.h:965
&gt;&gt; +    void repaintContainerAndOffset(const RenderLayerModelObject*&amp;, LayoutPoint&amp;) const;
&gt; 
&gt; r- for this method. This encourages incorrect usage, where this is a software-rendered transform between you and your repaint container. Just offsetting a rect by that offset will do the wrong thing there.

Any recommendations for the name then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786058</commentid>
    <comment_count>29</comment_count>
      <attachid>178256</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-07 12:35:14 -0800</bug_when>
    <thetext>Created attachment 178256
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786104</commentid>
    <comment_count>30</comment_count>
      <attachid>178256</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-07 13:35:52 -0800</bug_when>
    <thetext>Comment on attachment 178256
Patch

Attachment 178256 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15175807</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786125</commentid>
    <comment_count>31</comment_count>
      <attachid>178256</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-07 14:01:58 -0800</bug_when>
    <thetext>Comment on attachment 178256
Patch

Attachment 178256 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15182656

New failing tests:
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786132</commentid>
    <comment_count>32</comment_count>
      <attachid>178272</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-07 14:09:00 -0800</bug_when>
    <thetext>Created attachment 178272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786150</commentid>
    <comment_count>33</comment_count>
      <attachid>178272</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-07 14:19:17 -0800</bug_when>
    <thetext>Comment on attachment 178272
Patch

Attachment 178272 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15186524</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786157</commentid>
    <comment_count>34</comment_count>
      <attachid>178272</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-07 14:23:40 -0800</bug_when>
    <thetext>Comment on attachment 178272
Patch

Attachment 178272 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15181648</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786177</commentid>
    <comment_count>35</comment_count>
      <attachid>178272</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-07 14:40:36 -0800</bug_when>
    <thetext>Comment on attachment 178272
Patch

Attachment 178272 did not pass win-ews (win):
Output: http://queues.webkit.org/results/15212265</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786178</commentid>
    <comment_count>36</comment_count>
      <attachid>178281</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-07 14:41:05 -0800</bug_when>
    <thetext>Created attachment 178281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786476</commentid>
    <comment_count>37</comment_count>
      <attachid>178281</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-08 03:46:09 -0800</bug_when>
    <thetext>Comment on attachment 178281
Patch

Attachment 178281 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15219101</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787442</commentid>
    <comment_count>38</comment_count>
      <attachid>178580</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-10 10:02:14 -0800</bug_when>
    <thetext>Created attachment 178580
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788659</commentid>
    <comment_count>39</comment_count>
      <attachid>178845</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-11 12:16:04 -0800</bug_when>
    <thetext>Created attachment 178845
Simplified solution

It&apos;s important to our schedule to get some flavor of this in soon, so in the interest of moving forward, this is a more simple solution that uses clippedOverflowRectForRepaint, mirroring my understanding of what iOS does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788752</commentid>
    <comment_count>40</comment_count>
      <attachid>178845</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-11 13:50:10 -0800</bug_when>
    <thetext>Comment on attachment 178845
Simplified solution

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

&gt; Source/WebCore/ChangeLog:50
&gt; +        (WebCore):

Please remove all the redundant lines like this one. Per-function comments are useful to explain particular changes that are not covered in the summary.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:192
&gt; +    rects.append(enclosingIntRect(renderer-&gt;clippedOverflowRectForRepaint(0)));
&gt; +    if (renderer-&gt;isRenderBlock()) {
&gt; +        const RenderBlock* block = toRenderBlock(renderer);
&gt; +        for (RenderObject* child = block-&gt;firstChild(); child; child = child-&gt;nextSibling())
&gt; +            accumulateRendererTouchEventTargetRects(rects, child);

This is a tree walk which is O(N^2) on tree depth (since clippedOverflowRectForRepaint(0) walks up the root for each renderer). Making a version of clippedOverflowRectForRepaint() which takes a RenderGeometryMap would alleviate that.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:204
&gt; +        if (iter-&gt;key == document) {

I&apos;d prefer iter-&gt;key be pulled out into a local variable that makes it clear what its type is.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.h:156
&gt; +    void computeAbsoluteTouchEventTargetRects(const Document*, Vector&lt;IntRect&gt;&amp;);

Doesn&apos;t this need to be inside a #if ENABLE(TOUCH_EVENT_TRACKING)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788765</commentid>
    <comment_count>41</comment_count>
      <attachid>178845</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-11 13:56:49 -0800</bug_when>
    <thetext>Comment on attachment 178845
Simplified solution

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

&gt;&gt; Source/WebCore/ChangeLog:50
&gt;&gt; +        (WebCore):
&gt; 
&gt; Please remove all the redundant lines like this one. Per-function comments are useful to explain particular changes that are not covered in the summary.

Okay.

&gt;&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:192
&gt;&gt; +            accumulateRendererTouchEventTargetRects(rects, child);
&gt; 
&gt; This is a tree walk which is O(N^2) on tree depth (since clippedOverflowRectForRepaint(0) walks up the root for each renderer). Making a version of clippedOverflowRectForRepaint() which takes a RenderGeometryMap would alleviate that.

Agreed. I&apos;m happy to revisit this in a future patch.

&gt;&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:204
&gt;&gt; +        if (iter-&gt;key == document) {
&gt; 
&gt; I&apos;d prefer iter-&gt;key be pulled out into a local variable that makes it clear what its type is.

Good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788792</commentid>
    <comment_count>42</comment_count>
      <attachid>178874</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-11 14:19:25 -0800</bug_when>
    <thetext>Created attachment 178874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789674</commentid>
    <comment_count>43</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-12 10:26:33 -0800</bug_when>
    <thetext>smfr, can I get you to take another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789987</commentid>
    <comment_count>44</comment_count>
      <attachid>178874</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 15:36:27 -0800</bug_when>
    <thetext>Comment on attachment 178874
Patch

Thank you for your help Simon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789988</commentid>
    <comment_count>45</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-12 15:37:05 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 178874 [details])
&gt; Thank you for your help Simon.

+1! I&apos;ll file a tracking bug for the n^2 issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789989</commentid>
    <comment_count>46</comment_count>
      <attachid>178874</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-12 15:39:20 -0800</bug_when>
    <thetext>Comment on attachment 178874
Patch

Rejecting attachment 178874 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
atching file Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects-expected.txt
patching file LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects.html

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Simon Fras...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/15304166</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789992</commentid>
    <comment_count>47</comment_count>
      <attachid>178874</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-12 15:42:56 -0800</bug_when>
    <thetext>Comment on attachment 178874
Patch

I&apos;m not sure what broke there. Giving it a kick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789996</commentid>
    <comment_count>48</comment_count>
      <attachid>178874</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-12 15:45:06 -0800</bug_when>
    <thetext>Comment on attachment 178874
Patch

Rejecting attachment 178874 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
atching file Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects-expected.txt
patching file LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects.html

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Simon Fras...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/15272948</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790028</commentid>
    <comment_count>49</comment_count>
      <attachid>179143</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-12 16:15:54 -0800</bug_when>
    <thetext>Created attachment 179143
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790035</commentid>
    <comment_count>50</comment_count>
      <attachid>179143</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-12 16:19:09 -0800</bug_when>
    <thetext>Comment on attachment 179143
Patch for landing

Missing the tests...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790037</commentid>
    <comment_count>51</comment_count>
      <attachid>179146</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-12 16:20:19 -0800</bug_when>
    <thetext>Created attachment 179146
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790041</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-12 16:24:01 -0800</bug_when>
    <thetext>Attachment 179146 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebCore/page/scrolling/ScrollingCoordinator.h:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790065</commentid>
    <comment_count>53</comment_count>
      <attachid>179150</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-12 16:45:53 -0800</bug_when>
    <thetext>Created attachment 179150
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790114</commentid>
    <comment_count>54</comment_count>
      <attachid>179150</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-12 17:36:05 -0800</bug_when>
    <thetext>Comment on attachment 179150
Patch for landing

Rejecting attachment 179150 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

/mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/15312043</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791994</commentid>
    <comment_count>55</comment_count>
      <attachid>179565</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-14 17:30:36 -0800</bug_when>
    <thetext>Created attachment 179565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792052</commentid>
    <comment_count>56</comment_count>
      <attachid>179565</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-14 22:39:39 -0800</bug_when>
    <thetext>Comment on attachment 179565
Patch

Attachment 179565 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15317906

New failing tests:
http/tests/inspector/appcache/appcache-manifest-with-non-existing-file.html
http/tests/inspector/network/har-content.html
http/tests/inspector/network/network-disable-cache-xhrs.html
http/tests/inspector/extensions-headers.html
http/tests/inspector-enabled/injected-script-discard.html
http/tests/inspector/console-cross-origin-iframe-logging.html
accessibility/contenteditable-table-check-causes-crash.html
http/tests/inspector/filesystem/delete-entry.html
http/tests/inspector/extensions-useragent.html
http/tests/inspector-enabled/dynamic-scripts.html
http/tests/inspector/indexeddb/resources-panel.html
compositing/visibility/hidden-iframe.html
http/tests/inspector/network/network-cachedresources-with-same-urls.html
http/tests/inspector/console-cd-completions.html
accessibility/notification-listeners.html
http/tests/inspector/compiler-script-mapping.html
http/tests/cache/cancel-during-failure-crash.html
http/tests/inspector/filesystem/request-directory-content.html
http/tests/inspector/indexeddb/database-names.html
http/tests/inspector/web-socket-frame-error.html
accessibility/duplicate-child-nodes.html
http/tests/inspector/network/cached-resource-destroyed-moved-to-storage.html
http/tests/inspector/console-xhr-logging-async.html
http/tests/inspector/network/network-empty-xhr.html
http/tests/inspector/network/network-cyrillic-xhr.html
http/tests/inspector/resource-har-headers.html
http/tests/inspector/network-preflight-options.html
http/tests/inspector/inspect-iframe-from-different-domain.html
http/tests/inspector/filesystem/request-filesystem-root.html
http/tests/inspector-enabled/database-open.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792249</commentid>
    <comment_count>57</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-15 16:32:24 -0800</bug_when>
    <thetext>Crashes seem related - here&apos;s one from the unit tests:

[ RUN      ] WebPageSerializerTest.MultipleFrames
Received signal 11
	base::debug::StackTrace::StackTrace() [0x1b993ee]
	base::debug::(anonymous namespace)::StackDumpSignalHandler() [0x1b994f5]
	&lt;unknown&gt; [0x7f8e29ac2af0]
	WebCore::Document::didRemoveEventTargetNode() [0x88efe4]
	WebCore::DOMWindow::~DOMWindow() [0x12158dc]
	WebCore::Document::~Document() [0x89e553]
	WebCore::HTMLDocument::~HTMLDocument() [0xcdeb9d]
	WebCore::Node::~Node() [0x8d8adb]
	WebCore::HTMLSpanElement::~HTMLSpanElement() [0x1fe57d7]
	v8::internal::GlobalHandles::PostGarbageCollectionProcessing() [0xa1457b]
	v8::internal::Heap::PerformGarbageCollection() [0xa335d3]
	v8::internal::Heap::CollectGarbage() [0xa33e28]
	v8::internal::Map::UpdateCodeCache() [0xb0b6c3]
	v8::internal::StubCache::ComputeKeyedLoadOrStoreElement() [0xbacb66]
	v8::internal::KeyedIC::ComputeStub() [0xa79369]
	v8::internal::KeyedStoreIC::Store() [0xa799cd]
	v8::internal::KeyedStoreIC_Miss() [0xa79eda]
	&lt;unknown&gt; [0x3bc14b206362]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792286</commentid>
    <comment_count>58</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-15 19:18:21 -0800</bug_when>
    <thetext>Definitely crashing - not every time, but here&apos;s one example stack from fast/events/touch/

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0xbbadbf17
0x031588e7 in WTF::IdentityHashTranslator&lt;WTF::PtrHash&lt;WebCore::Node*&gt; &gt;::equal&lt;WebCore::Node*&gt; (a=@0xbbadbf17, b=@0xbfff90f8) at HashTable.h:300
300	        template&lt;typename T&gt; static bool equal(const T&amp; a, const T&amp; b) { return HashFunctions::equal(a, b); }

#0  0x031588e7 in WTF::IdentityHashTranslator&lt;WTF::PtrHash&lt;WebCore::Node*&gt; &gt;::equal&lt;WebCore::Node*&gt; (a=@0xbbadbf17, b=@0xbfff90f8) at HashTable.h:300
#1  0x0237537e in WTF::HashTable&lt;WebCore::Node*, WTF::KeyValuePair&lt;WebCore::Node*, unsigned int&gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WebCore::Node*, unsigned int&gt; &gt;, WTF::PtrHash&lt;WebCore::Node*&gt;, WTF::HashMapValueTraits&lt;WTF::HashTraits&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;unsigned int&gt; &gt;, WTF::HashTraits&lt;WebCore::Node*&gt; &gt;::lookup&lt;WTF::IdentityHashTranslator&lt;WTF::PtrHash&lt;WebCore::Node*&gt; &gt;, WebCore::Node*&gt; (this=0xe236760, key=@0xbfff90f8) at HashTable.h:628
#2  0x023751ec in WTF::HashTable&lt;WebCore::Node*, WTF::KeyValuePair&lt;WebCore::Node*, unsigned int&gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WebCore::Node*, unsigned int&gt; &gt;, WTF::PtrHash&lt;WebCore::Node*&gt;, WTF::HashMapValueTraits&lt;WTF::HashTraits&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;unsigned int&gt; &gt;, WTF::HashTraits&lt;WebCore::Node*&gt; &gt;::find&lt;WTF::IdentityHashTranslator&lt;WTF::PtrHash&lt;WebCore::Node*&gt; &gt;, WebCore::Node*&gt; (this=0xe236760, key=@0xbfff90f8) at HashTable.h:971
#3  0x02375151 in WTF::HashTable&lt;WebCore::Node*, WTF::KeyValuePair&lt;WebCore::Node*, unsigned int&gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WebCore::Node*, unsigned int&gt; &gt;, WTF::PtrHash&lt;WebCore::Node*&gt;, WTF::HashMapValueTraits&lt;WTF::HashTraits&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;unsigned int&gt; &gt;, WTF::HashTraits&lt;WebCore::Node*&gt; &gt;::find (this=0xe236760, key=@0xbfff90f8) at HashTable.h:401
#4  0x02374b17 in WTF::HashMap&lt;WebCore::Node*, unsigned int, WTF::PtrHash&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;unsigned int&gt; &gt;::find (this=0xe236760, key=@0xbfff90f8) at HashMap.h:291
#5  0x03048411 in WTF::HashCountedSet&lt;WebCore::Node*, WTF::PtrHash&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;WebCore::Node*&gt; &gt;::find (this=0xe236760, value=@0xbfff90f8) at HashCountedSet.h:132
#6  0x0302a263 in WTF::HashCountedSet&lt;WebCore::Node*, WTF::PtrHash&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;WebCore::Node*&gt; &gt;::removeAll (this=0xe236760, value=@0xbfff90f8) at HashCountedSet.h:188
#7  0x0301afb7 in WebCore::Document::didRemoveEventTargetNode (this=0xd91d000, handler=0xd91d000) at ../../third_party/WebKit/Source/WebCore/dom/Document.cpp:5657
#8  0x02d4e73f in WebCore::DOMWindow::~DOMWindow (this=0xe23ff20) at ../../third_party/WebKit/Source/WebCore/page/DOMWindow.cpp:447
#9  0x02d4de3b in WebCore::DOMWindow::~DOMWindow (this=0xe23ff20) at ../../third_party/WebKit/Source/WebCore/page/DOMWindow.cpp:409
#10 0x02d4ddde in WebCore::DOMWindow::~DOMWindow (this=0xe23ff20) at ../../third_party/WebKit/Source/WebCore/page/DOMWindow.cpp:409
#11 0x0316bcce in WTF::RefCounted&lt;WebCore::DOMWindow&gt;::deref (this=0xe23ff24) at RefCounted.h:202
#12 0x0316bc4d in WTF::derefIfNotNull&lt;WebCore::DOMWindow&gt; (ptr=0xe23ff20) at PassRefPtr.h:53
#13 0x030ec55d in WTF::RefPtr&lt;WebCore::DOMWindow&gt;::~RefPtr (this=0xd91d16c) at RefPtr.h:56
#14 0x030ec50b in WTF::RefPtr&lt;WebCore::DOMWindow&gt;::~RefPtr (this=0xd91d16c) at RefPtr.h:56
#15 0x02fff5f2 in WebCore::Document::~Document (this=0xd91d000) at ../../third_party/WebKit/Source/WebCore/dom/Document.cpp:672
#16 0x015bf046 in WebCore::HTMLDocument::~HTMLDocument (this=0xd91d000) at ../../third_party/WebKit/Source/WebCore/html/HTMLDocument.cpp:91
#17 0x015bee6b in WebCore::HTMLDocument::~HTMLDocument (this=0xd91d000) at ../../third_party/WebKit/Source/WebCore/html/HTMLDocument.cpp:90
#18 0x015bee0e in WebCore::HTMLDocument::~HTMLDocument (this=0xd91d000) at ../../third_party/WebKit/Source/WebCore/html/HTMLDocument.cpp:90
#19 0x03144cc5 in WebCore::Document::guardDeref (this=0xd91d000) at Document.h:248
#20 0x031368bc in WebCore::Node::~Node (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/dom/Node.cpp:436
#21 0x02fd6484 in WebCore::ContainerNode::~ContainerNode (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/dom/ContainerNode.cpp:126
#22 0x030b2b18 in WebCore::Element::~Element (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/dom/Element.cpp:205
#23 0x031ebab2 in WebCore::StyledElement::~StyledElement (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/dom/StyledElement.cpp:142
#24 0x0165e84b in WebCore::HTMLElement::~HTMLElement (this=0xe236a00) at HTMLElement.h:45
#25 0x015a384b in WebCore::HTMLBodyElement::~HTMLBodyElement (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/html/HTMLBodyElement.cpp:62
#26 0x015a37fb in WebCore::HTMLBodyElement::~HTMLBodyElement (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/html/HTMLBodyElement.cpp:61
#27 0x015a379e in WebCore::HTMLBodyElement::~HTMLBodyElement (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/html/HTMLBodyElement.cpp:61
#28 0x03143358 in WebCore::Node::removedLastRef (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/dom/Node.cpp:2602
#29 0x0112d188 in WebCore::TreeShared&lt;WebCore::Node, WebCore::ContainerNode&gt;::deref (this=0xe236a08) at TreeShared.h:81
#30 0x03138cd1 in WebCore::Node::derefEventTarget (this=0xe236a00) at ../../third_party/WebKit/Source/WebCore/dom/Node.cpp:852
#31 0x03116a71 in WebCore::EventTarget::deref (this=0xe236a00) at EventTarget.h:106
#32 0x03116a18 in WTF::derefIfNotNull&lt;WebCore::EventTarget&gt; (ptr=0xe236a00) at PassRefPtr.h:53
#33 0x031169ad in WTF::RefPtr&lt;WebCore::EventTarget&gt;::~RefPtr (this=0xe21f1ac) at RefPtr.h:56
#34 0x0311572b in WTF::RefPtr&lt;WebCore::EventTarget&gt;::~RefPtr (this=0xe21f1ac) at RefPtr.h:56
#35 0x02d92576 in WebCore::Touch::~Touch (this=0xe21f190) at Touch.h:41
#36 0x02d924ab in WebCore::Touch::~Touch (this=0xe21f190) at Touch.h:41
#37 0x02d92449 in WTF::RefCounted&lt;WebCore::Touch&gt;::deref (this=0xe21f190) at RefCounted.h:202
#38 0x039cd31b in WebCore::V8Touch::derefObject (object=0xe21f190) at V8Touch.cpp:223
#39 0x023d0f38 in WebCore::WrapperTypeInfo::derefObject (this=0x643fa84, object=0xe21f190) at WrapperTypeInfo.h:90
#40 0x023d0817 in WebCore::DOMWrapperMap&lt;void&gt;::defaultWeakCallback (value={&lt;v8::Handle&lt;v8::Value&gt;&gt; = {val_ = 0xd9039f0}, &lt;No data fields&gt;}, context=0xe37b234) at DOMWrapperMap.h:103
#41 0x04a07e51 in v8::internal::GlobalHandles::Node::PostGarbageCollectionProcessing (this=0xd9039f0, isolate=0xf08a200, global_handles=0xe06c700) at ../../v8/src/global-handles.cc:244
#42 0x04a05622 in v8::internal::GlobalHandles::PostGarbageCollectionProcessing (this=0xe06c700, collector=v8::internal::MARK_COMPACTOR, tracer=0xbfff99e8) at ../../v8/src/global-handles.cc:634
#43 0x04a1f79f in v8::internal::Heap::PerformGarbageCollection (this=0xf08a208, collector=v8::internal::MARK_COMPACTOR, tracer=0xbfff99e8) at ../../v8/src/heap.cc:968
#44 0x04a1eec9 in v8::internal::Heap::CollectGarbage (this=0xf08a208, space=v8::internal::NEW_SPACE, collector=v8::internal::MARK_COMPACTOR, gc_reason=0x57ba825 &quot;Runtime::PerformGC&quot;, collector_reason=0x5794fd5 &quot;promotion limit reached&quot;) at ../../v8/src/heap.cc:651
#45 0x04c03e6b in v8::internal::Heap::CollectGarbage (this=0xf08a208, space=v8::internal::NEW_SPACE, gc_reason=0x57ba825 &quot;Runtime::PerformGC&quot;) at heap-inl.h:436
#46 0x04d5ca81 in v8::internal::Runtime::PerformGC (result=0xbad0003) at ../../v8/src/runtime.cc:13501
#47 0x2250a45f in ?? ()
#48 0x225379f9 in ?? ()
#49 0x225377e4 in ?? ()
#50 0x2253751b in ?? ()
#51 0x22520afb in ?? ()
#52 0x2251db95 in ?? ()
#53 0x22527005 in ?? ()
#54 0x22526d11 in ?? ()
#55 0x22527841 in ?? ()
#56 0x2252729d in ?? ()
#57 0x22526d11 in ?? ()
#58 0x2250e7e1 in ?? ()
#59 0x225223b2 in ?? ()
#60 0x225134ea in ?? ()
#61 0x049b31bc in v8::internal::Invoke (is_construct=false, function={location_ = 0xd0b1474}, receiver={location_ = 0xd0b147c}, argc=1, args=0xbfff9fd0, has_pending_exception=0xbfffa07f) at ../../v8/src/execution.cc:118
#62 0x049b2ae9 in v8::internal::Execution::Call (callable={location_ = 0xd0b1474}, receiver={location_ = 0xd0b1478}, argc=1, argv=0xbfff9fd0, pending_exception=0xbfffa07f, convert_receiver=false) at ../../v8/src/execution.cc:179
#63 0x049b6003 in v8::internal::Execution::InstantiateFunction (data={location_ = 0xd0b2db0}, exc=0xbfffa07f) at ../../v8/src/execution.cc:719
#64 0x048b5347 in v8::FunctionTemplate::GetFunction (this=0xd0b2db0) at ../../v8/src/api.cc:4796
#65 0x0248da62 in WebCore::V8PerContextData::constructorForTypeSlowCase (this=0xe24c3f0, type=0x643e22c) at ../../third_party/WebKit/Source/WebCore/bindings/v8/V8PerContextData.cpp:120
#66 0x035dedcc in WebCore::V8PerContextData::constructorForType (this=0xe24c3f0, type=0x643e22c) at V8PerContextData.h:88
#67 0x0248d6b2 in WebCore::V8PerContextData::createWrapperFromCacheSlowCase (this=0xe24c3f0, type=0x643e22c) at ../../third_party/WebKit/Source/WebCore/bindings/v8/V8PerContextData.cpp:102
#68 0x0246d081 in WebCore::V8PerContextData::createWrapperFromCache (this=0xe24c3f0, type=0x643e22c) at V8PerContextData.h:80
#69 0x0246c4b1 in WebCore::V8DOMWrapper::createWrapper (creationContext={val_ = 0xbfffbd54}, type=0x643e22c, impl=0xe210520) at ../../third_party/WebKit/Source/WebCore/bindings/v8/V8DOMWrapper.cpp:112
#70 0x0379762b in WebCore::V8HTMLParagraphElement::createWrapper (impl=@0xbfffa5f8, creationContext={val_ = 0xbfffbd54}, isolate=0xf08a200) at V8HTMLParagraphElement.cpp:119
#71 0x03a8bbc6 in WebCore::wrap (impl=0xe210520, creationContext={val_ = 0xbfffbd54}, isolate=0xf08a200) at V8HTMLParagraphElement.h:60
#72 0x03a8514b in WebCore::createHTMLParagraphElementWrapper (element=0xe210520, creationContext={val_ = 0xbfffbd54}, isolate=0xf08a200) at gen/webkit/V8HTMLElementWrapperFactory.cpp:583
#73 0x03a83536 in WebCore::createV8HTMLWrapper (element=0xe210520, creationContext={val_ = 0xbfffbd54}, isolate=0xf08a200) at gen/webkit/V8HTMLElementWrapperFactory.cpp:901
#74 0x024eb8a4 in WebCore::wrap (impl=0xe210520, creationContext={val_ = 0xbfffbd54}, isolate=0xf08a200) at ../../third_party/WebKit/Source/WebCore/bindings/v8/custom/V8HTMLElementCustom.cpp:46
#75 0x024d52c4 in WebCore::wrap (impl=0xe210520, creationContext={val_ = 0xbfffbd54}, isolate=0xf08a200) at ../../third_party/WebKit/Source/WebCore/bindings/v8/custom/V8ElementCustom.cpp:48
#76 0x038eae92 in WebCore::toV8Fast&lt;v8::Arguments, WebCore::Document&gt; (impl=0xe210520, container=@0xbfffbd38, wrappable=0xd906c00) at V8Element.h:78
#77 0x03889394 in WebCore::DocumentV8Internal::getElementByIdCallback (args=@0xbfffbd38) at V8Document.cpp:1439
#78 0x04933986 in v8::internal::HandleApiCallHelper&lt;false&gt; (args={&lt;v8::internal::Arguments&gt; = {&lt;v8::internal::Embedded&gt; = {&lt;No data fields&gt;}, length_ = 3, arguments_ = 0xbfffbe94}, &lt;No data fields&gt;}, isolate=0xf08a200) at ../../v8/src/builtins.cc:1372
#79 0x0493342a in v8::internal::Builtin_Impl_HandleApiCall (args={&lt;v8::internal::Arguments&gt; = {&lt;v8::internal::Embedded&gt; = {&lt;No data fields&gt;}, length_ = 3, arguments_ = 0xbfffbe94}, &lt;No data fields&gt;}, isolate=0xf08a200) at ../../v8/src/builtins.cc:1390
#80 0x049284cc in v8::internal::Builtin_HandleApiCall (args={&lt;v8::internal::Arguments&gt; = {&lt;v8::internal::Embedded&gt; = {&lt;No data fields&gt;}, length_ = 3, arguments_ = 0xbfffbe94}, &lt;No data fields&gt;}, isolate=0xf08a200) at ../../v8/src/builtins.cc:1389
#81 0x2250a3f6 in ?? ()
#82 0x22539e35 in ?? ()
#83 0x22539ca6 in ?? ()
#84 0x2250e7e1 in ?? ()
#85 0x45c71ebf in ?? ()
#86 0x45c71c57 in ?? ()
#87 0x225223b9 in ?? ()
#88 0x225134ea in ?? ()
#89 0x049b31bc in v8::internal::Invoke (is_construct=false, function={location_ = 0xd0b144c}, receiver={location_ = 0xd0b145c}, argc=1, args=0xbfffc408, has_pending_exception=0xbfffc1bb) at ../../v8/src/execution.cc:118
#90 0x049b2ae9 in v8::internal::Execution::Call (callable={location_ = 0xd0b144c}, receiver={location_ = 0xd0b145c}, argc=1, argv=0xbfffc408, pending_exception=0xbfffc1bb, convert_receiver=false) at ../../v8/src/execution.cc:179
#91 0x048afcf9 in v8::Function::Call (this=0xd0b144c, recv={val_ = 0xd0b145c}, argc=1, argv=0xbfffc408) at ../../v8/src/api.cc:3785
#92 0x024055d1 in WebCore::ScriptController::callFunctionWithInstrumentation (context=0xd906c54, function={val_ = 0xd0b144c}, receiver={val_ = 0xd0b145c}, argc=1, args=0xbfffc408) at ../../third_party/WebKit/Source/WebCore/bindings/v8/ScriptController.cpp:233
#93 0x02405272 in WebCore::ScriptController::callFunction (this=0xf09887c, function={val_ = 0xd0b144c}, receiver={val_ = 0xd0b145c}, argc=1, args=0xbfffc408) at ../../third_party/WebKit/Source/WebCore/bindings/v8/ScriptController.cpp:186
#94 0x02479334 in WebCore::V8LazyEventListener::callListenerFunction (this=0xe20f110, context=0xd906c54, jsEvent={val_ = 0xd0b1434}, event=0xe2210b0) at ../../third_party/WebKit/Source/WebCore/bindings/v8/V8LazyEventListener.cpp:103
#95 0x0245e050 in WebCore::V8AbstractEventListener::invokeEventHandler (this=0xe20f110, context=0xd906c54, event=0xe2210b0, jsEvent={val_ = 0xd0b1434}) at ../../third_party/WebKit/Source/WebCore/bindings/v8/V8AbstractEventListener.cpp:142
#96 0x0245dcd7 in WebCore::V8AbstractEventListener::handleEvent (this=0xe20f110, context=0xd906c54, event=0xe2210b0) at ../../third_party/WebKit/Source/WebCore/bindings/v8/V8AbstractEventListener.cpp:102
#97 0x030f669e in WebCore::EventTarget::fireEventListeners (this=0xe2160f0, event=0xe2210b0, d=0xe216190, entry=@0xe232450) at ../../third_party/WebKit/Source/WebCore/dom/EventTarget.cpp:210
#98 0x030f640d in WebCore::EventTarget::fireEventListeners (this=0xe2160f0, event=0xe2210b0) at ../../third_party/WebKit/Source/WebCore/dom/EventTarget.cpp:175
#99 0x02d4cb0f in WebCore::DOMWindow::dispatchEvent (this=0xe2160f0, prpEvent=@0xbfffc9b0, prpTarget=@0xbfffc9a8) at ../../third_party/WebKit/Source/WebCore/page/DOMWindow.cpp:1675
#100 0x02d557a7 in WebCore::DOMWindow::dispatchLoadEvent (this=0xe2160f0) at ../../third_party/WebKit/Source/WebCore/page/DOMWindow.cpp:1649
#101 0x0300b23b in WebCore::Document::dispatchWindowLoadEvent (this=0xd906c00) at ../../third_party/WebKit/Source/WebCore/dom/Document.cpp:3658
#102 0x03008233 in WebCore::Document::implicitClose (this=0xd906c00) at ../../third_party/WebKit/Source/WebCore/dom/Document.cpp:2422
#103 0x02c274c2 in WebCore::FrameLoader::checkCallImplicitClose (this=0xf098460) at ../../third_party/WebKit/Source/WebCore/loader/FrameLoader.cpp:833
#104 0x02c2703e in WebCore::FrameLoader::checkCompleted (this=0xf098460) at ../../third_party/WebKit/Source/WebCore/loader/FrameLoader.cpp:776
#105 0x02c2727b in WebCore::FrameLoader::loadDone (this=0xf098460) at ../../third_party/WebKit/Source/WebCore/loader/FrameLoader.cpp:722
#106 0x02ce162c in WebCore::CachedResourceLoader::loadDone (this=0xe21bd80, resource=0xd8eee00) at ../../third_party/WebKit/Source/WebCore/loader/cache/CachedResourceLoader.cpp:721
#107 0x02c8c565 in WebCore::SubresourceLoader::releaseResources (this=0xd8fa200) at ../../third_party/WebKit/Source/WebCore/loader/SubresourceLoader.cpp:318
#108 0x02c838f3 in WebCore::ResourceLoader::didFinishLoading (this=0xd8fa200, finishTime=0) at ../../third_party/WebKit/Source/WebCore/loader/ResourceLoader.cpp:317
#109 0x02c8bffc in WebCore::SubresourceLoader::didFinishLoading (this=0xd8fa200, finishTime=0) at ../../third_party/WebKit/Source/WebCore/loader/SubresourceLoader.cpp:277
#110 0x02c8435f in WebCore::ResourceLoader::didFinishLoading (this=0xd8fa200, finishTime=0) at ../../third_party/WebKit/Source/WebCore/loader/ResourceLoader.cpp:456
#111 0x0209331a in WebCore::ResourceHandleInternal::didFinishLoading (this=0xe229fc0, finishTime=0) at ../../third_party/WebKit/Source/WebCore/platform/network/chromium/ResourceHandle.cpp:156
#112 0x0196ce2e in webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest (this=0xe220a90, error_code=0, was_ignored_by_handler=false, security_info=@0xc489d1c, completion_time=@0xc489d20) at ../../webkit/glue/weburlloader_impl.cc:673
#113 0x02f8f02d in (anonymous namespace)::RequestProxy::NotifyCompletedRequest (this=0xe221310, error_code=0, security_info=@0xc489d1c, complete_time=@0xc489d20) at ../../webkit/tools/test_shell/simple_resource_loader_bridge.cc:404
#114 0x02f8f847 in base::internal::RunnableAdapter&lt;void ((anonymous namespace)::RequestProxy::*)(int, std::string const&amp;, base::TimeTicks const&amp;)&gt;::Run (this=0xbfffd080, object=0xe221310, a1=@0xc489d18, a2=@0xc489d1c, a3=@0xc489d20) at bind_internal.h:311
#115 0x02f8f746 in base::internal::InvokeHelper&lt;false, void, base::internal::RunnableAdapter&lt;void ((anonymous namespace)::RequestProxy::*)(int, std::string const&amp;, base::TimeTicks const&amp;)&gt;, void ()((anonymous namespace)::RequestProxy* const&amp;, int const&amp;, std::string const&amp;, base::TimeTicks const&amp;)&gt;::MakeItSo (runnable={method_ = {ptr = 49868720, ptr = 0}}, a1=@0xc489d14, a2=@0xc489d18, a3=@0xc489d1c, a4=@0xc489d20) at bind_internal.h:960
#116 0x02f8f685 in base::internal::Invoker&lt;4, base::internal::BindState&lt;base::internal::RunnableAdapter&lt;void ((anonymous namespace)::RequestProxy::*)(int, std::string const&amp;, base::TimeTicks const&amp;)&gt;, void ()((anonymous namespace)::RequestProxy*, int, std::string const&amp;, base::TimeTicks const&amp;), void ()((anonymous namespace)::RequestProxy*, int, std::string, base::TimeTicks)&gt;, void ()((anonymous namespace)::RequestProxy*, int, std::string const&amp;, base::TimeTicks const&amp;)&gt;::Run (base=0xc489d00) at bind_internal.h:1572
#117 0x012b261b in base::Callback&lt;void ()()&gt;::Run (this=0xbfffd354) at callback.h:396
#118 0x012afb5b in MessageLoop::RunTask (this=0xe06a620, pending_task=@0xbfffd340) at ../../base/message_loop.cc:473
#119 0x012b0022 in MessageLoop::DeferOrRunPendingTask (this=0xe06a620, pending_task=@0xbfffd340) at ../../base/message_loop.cc:485
#120 0x012b0222 in MessageLoop::DoWork (this=0xe06a620) at ../../base/message_loop.cc:668
#121 0x01218dcb in base::MessagePumpCFRunLoopBase::RunWork (this=0xe069c90) at ../../base/message_pump_mac.mm:250
#122 0x01218582 in base::MessagePumpCFRunLoopBase::RunWorkSource (info=0xe069c90) at ../../base/message_pump_mac.mm:228
#123 0x982cc66f in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ ()
#124 0x982cc099 in __CFRunLoopDoSources0 ()
#125 0x982f1e46 in __CFRunLoopRun ()
#126 0x982f163a in CFRunLoopRunSpecific ()
#127 0x982f14ab in CFRunLoopRunInMode ()
#128 0x9a39115a in RunCurrentEventLoopInMode ()
#129 0x9a390ec9 in ReceiveNextEventCommon ()
#130 0x9a390d44 in BlockUntilNextEventMatchingListInMode ()
#131 0x96c4da3a in _DPSNextEvent ()
#132 0x96c4d26c in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] ()
#133 0x96c436cc in -[NSApplication run] ()
#134 0x01219cfe in base::MessagePumpNSApplication::DoRun (this=0xe069c90, delegate=0xe06a620) at ../../base/message_pump_mac.mm:574
#135 0x01218b38 in base::MessagePumpCFRunLoopBase::Run (this=0xe069c90, delegate=0xe06a620) at ../../base/message_pump_mac.mm:169
#136 0x012af3a2 in MessageLoop::RunInternal (this=0xe06a620) at ../../base/message_loop.cc:430
#137 0x012af25b in MessageLoop::RunHandler (this=0xe06a620) at ../../base/message_loop.cc:403
#138 0x0130c6c8 in base::RunLoop::Run (this=0xbfffecf8) at ../../base/run_loop.cc:45
#139 0x012ae656 in MessageLoop::Run (this=0xe06a620) at ../../base/message_loop.cc:310
#140 0x046ad407 in webkit_support::RunMessageLoop () at ../../webkit/support/webkit_support.cc:553
#141 0x00062f39 in TestShell::waitTestFinished (this=0xbffff798) at ../../third_party/WebKit/Tools/DumpRenderTree/chromium/TestShellMac.mm:122
#142 0x00050949 in TestShell::runFileTest (this=0xbffff798, params=@0xbffff9f0, shouldDumpPixels=false) at ../../third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.cpp:294
#143 0x0000700f in runTest (shell=@0xbffff798, params=@0xbffff9f0, inputLine=@0xbfffef88, forceDumpPixels=false) at ../../third_party/WebKit/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp:115
#144 0x00006b07 in main (argc=2, argv=0xbffffa90) at ../../third_party/WebKit/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp:268</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792287</commentid>
    <comment_count>59</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-15 19:20:47 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; Definitely crashing - not every time, but here&apos;s one example stack from fast/events/touch/

Thanks for the bt. I&apos;m taking a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792443</commentid>
    <comment_count>60</comment_count>
      <attachid>179682</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-16 19:08:10 -0800</bug_when>
    <thetext>Created attachment 179682
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792499</commentid>
    <comment_count>61</comment_count>
      <attachid>179682</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-16 23:28:54 -0800</bug_when>
    <thetext>Comment on attachment 179682
Patch

If I&apos;m following the diffs correctly, this moved some cleanup logic from ~DOMWindow() to ~Document() since in ~DOMWindow() it ran as Document&apos;s members were being destroyed and the touch set was destroyed before ~DOMWindow() ran - is that correct?

Why do we add a document to its parent&apos;s touch set at all when handlers are registered inside it?  It looks like accumulateDocumentEventTargetRects() will recursively check child documents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792542</commentid>
    <comment_count>62</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-17 01:13:43 -0800</bug_when>
    <thetext>(In reply to comment #61)
&gt; (From update of attachment 179682 [details])
&gt; If I&apos;m following the diffs correctly, this moved some cleanup logic from ~DOMWindow() to ~Document() since in ~DOMWindow() it ran as Document&apos;s members were being destroyed and the touch set was destroyed before ~DOMWindow() ran - is that correct?

That is correct.

&gt; 
&gt; Why do we add a document to its parent&apos;s touch set at all when handlers are registered inside it?  It looks like accumulateDocumentEventTargetRects() will recursively check child documents.

We add the child Document to the parent Document&apos;s list so the main frame&apos;s Document can ultimately track the list, as that Document is tied to the Page and ScrollingCoordinator, which generates the rects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792771</commentid>
    <comment_count>63</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-17 09:11:04 -0800</bug_when>
    <thetext>(In reply to comment #62)
&gt; (In reply to comment #61)
&gt; &gt; Why do we add a document to its parent&apos;s touch set at all when handlers are registered inside it?  It looks like accumulateDocumentEventTargetRects() will recursively check child documents.
&gt; 
&gt; We add the child Document to the parent Document&apos;s list so the main frame&apos;s Document can ultimately track the list, as that Document is tied to the Page and ScrollingCoordinator, which generates the rects.

We only check child documents that are in the parent&apos;s TouchEventTarget set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792956</commentid>
    <comment_count>64</comment_count>
      <attachid>179682</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-17 13:16:15 -0800</bug_when>
    <thetext>Comment on attachment 179682
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792960</commentid>
    <comment_count>65</comment_count>
      <attachid>179682</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-12-17 13:17:51 -0800</bug_when>
    <thetext>Comment on attachment 179682
Patch

Thanks for taking a look!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792998</commentid>
    <comment_count>66</comment_count>
      <attachid>179682</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-17 13:43:33 -0800</bug_when>
    <thetext>Comment on attachment 179682
Patch

Clearing flags on attachment: 179682

Committed r137939: &lt;http://trac.webkit.org/changeset/137939&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792999</commentid>
    <comment_count>67</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-17 13:43:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177303</attachid>
            <date>2012-12-03 12:08:13 -0800</date>
            <delta_ts>2012-12-03 18:10:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121203120539.patch</filename>
            <type>text/plain</type>
            <size>48442</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjQyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxMi0xMi0wMyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuIFRoZSBuZXcgZnVuY3Rpb24gYWRkTGF5ZXJIaXRUZXN0UmVjdHMgZ2VuZXJhdGVzIHRo
ZQorICAgICAgICBoaXQgdGVzdCByZWN0YW5nbGVzIGZvciBhIGdpdmVuIG5vZGUgaW4gdGhlaXIg
ZW5jbG9zaW5nIHNlbGYtcGFpbnRpbmcgbGF5ZXIgY29vcmRpbmF0ZXMgZm9yIHNwZWVkeQorICAg
ICAgICB1cGxvYWRpbmcgdG8gdGhlIGNvbXBvc2l0b3IuCisKKyAgICAgICAgVGVzdDogcGxhdGZv
cm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMu
aHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQWRkVG91
Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZFJlbW92ZVRv
dWNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpoYXNUb3VjaEV2ZW50SGFuZGxlcnMpOgorICAgICAgICAoRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRvdWNoRXZlbnRUYXJnZXRzKToKKyAg
ICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaWRNb3ZlVG9O
ZXdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjp0cnlBZGRFdmVudExpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRyeVJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGhpc3Rv
cnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWVCYXNlOjpy
ZXN0b3JlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSk6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphZGRFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXREb2N1bWVudCk6CisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFjY3VtdWxhdGVUb3VjaEV2ZW50VGFy
Z2V0UmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1
dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChTY3JvbGxpbmdD
b29yZGluYXRvcik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0
VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50
VGFyZ2V0UmVjdHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkTGF5ZXJIaXRUZXN0UmVjdHMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoUmVuZGVyQmxv
Y2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjphZGRMYXllckhpdFRlc3RSZWN0cyk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChSZW5kZXJCb3gpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjphZGRMYXllckhpdFRlc3RSZWN0cyk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChSZW5kZXJJbmxp
bmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0OjplbmNsb3NpbmdDb21wb3NpdGVkTGF5ZXJBbmRPZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZExh
eWVySGl0VGVzdFJlY3RzKToKKyAgICAgICAgKFJlbmRlck9iamVjdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6YWRk
TGF5ZXJIaXRUZXN0UmVjdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKFJlbmRlclZpZXcpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkTGF5ZXJIaXRUZXN0UmVj
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAg
ICAgICAgKFJlbmRlclNWR01vZGVsT2JqZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291
bnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRv
dWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
aDoKKyAgICAgICAgKEludGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRs
OgorCiAyMDEyLTEyLTAzICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgSW52YWxpZGF0ZSBTVkcgd2lkdGggb24gd2lkdGggYXR0cmlidXRlIGNoYW5nZXMuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw5ICs0OTQsNiBAQCBE
b2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAgICAgLCBtX3dyaXRlUmVj
dXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwgbV93cml0ZVJlY3Vyc2lvbkRlcHRoKDApCiAg
ICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50KDApCi0jZW5kaWYKICAgICAsIG1fcGVu
ZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5nVGFza3NUaW1lckZpcmVkKQog
ICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fdmlzdWFs
VXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTU1NjEsMzAgKzU1NTgsNTAgQEAgdm9pZCBEb2N1bWVu
dDo6ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZQogICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291bnRD
aGFuZ2VkKHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxl
cigpCit2b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKiBoYW5kbGVy
KQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgKyttX3RvdWNoRXZlbnRIYW5kbGVy
Q291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCA+IDEpCisgICAgaWYgKCFt
X3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQorICAgICAgICBtX3RvdWNoRXZlbnRUYXJnZXRzID0g
YWRvcHRQdHIobmV3IFRvdWNoRXZlbnRUYXJnZXRTZXQpOworICAgIG1fdG91Y2hFdmVudFRhcmdl
dHMtPmFkZChoYW5kbGVyKTsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3Vt
ZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlz
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKQot
ICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsK
KyAgICB9CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpIHsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0No
YW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNp
emUoKSA9PSAxKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91
Y2hFdmVudHModHJ1ZSk7CisgICAgfQogI2VuZGlmCiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRpZFJl
bW92ZVRvdWNoRXZlbnRIYW5kbGVyKCkKK3ZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVRvdWNoRXZl
bnRIYW5kbGVyKE5vZGUqIGhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAg
ICBBU1NFUlQobV90b3VjaEV2ZW50SGFuZGxlckNvdW50KTsKLSAgICAtLW1fdG91Y2hFdmVudEhh
bmRsZXJDb3VudDsKLSAgICBpZiAobV90b3VjaEV2ZW50SGFuZGxlckNvdW50KQorICAgIGlmICgh
bV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCht
X3RvdWNoRXZlbnRUYXJnZXRzLT5jb250YWlucyhoYW5kbGVyKSk7CisgICAgbV90b3VjaEV2ZW50
VGFyZ2V0cy0+cmVtb3ZlKGhhbmRsZXIpOworICAgIGlmIChEb2N1bWVudCogcGFyZW50ID0gcGFy
ZW50RG9jdW1lbnQoKSkgeworICAgICAgICBwYXJlbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5k
bGVyKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgUGFnZSogcGFnZSA9IHRo
aXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKHRo
aXMpOworI2VuZGlmCisgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIGZvciAoY29uc3QgRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAg
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+dG91Y2hFdmVu
dEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUt
PmRvY3VtZW50KCktPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyhm
YWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTM2NDA4KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYs
OCBAQCBlbnVtIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB7CiB9OwogY29uc3QgaW50IG51bU5v
ZGVMaXN0SW52YWxpZGF0aW9uVHlwZXMgPSBJbnZhbGlkYXRlT25BbnlBdHRyQ2hhbmdlICsgMTsK
IAordHlwZWRlZiBIYXNoQ291bnRlZFNldDxOb2RlKj4gVG91Y2hFdmVudFRhcmdldFNldDsKKwog
Y2xhc3MgRG9jdW1lbnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSwgcHVibGljIFRyZWVTY29wZSwg
cHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCkBA
IC0xMTEzLDEzICsxMTE1LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlbW92ZVdoZWVsRXZl
bnRIYW5kbGVyKCk7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHVuc2lnbmVkIHRv
dWNoRXZlbnRIYW5kbGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRIYW5kbGVy
Q291bnQ7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJu
IChtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKSA/IG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUo
KSA6IGZhbHNlOyB9CiAjZWxzZQotICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQo
KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGRpZEFkZFRvdWNoRXZl
bnRIYW5kbGVyKCk7Ci0gICAgdm9pZCBkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAg
IHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoTm9kZSopOworICAgIHZvaWQgZGlkUmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIoTm9kZSopOworCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAg
ICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNvbnN0IHsg
cmV0dXJuIG1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCk7IH0KKyNlbHNlCisgICAgY29uc3QgVG91
Y2hFdmVudFRhcmdldFNldCogdG91Y2hFdmVudFRhcmdldHMoKSBjb25zdCB7IHJldHVybiAwOyB9
CisjZW5kaWYKIAogICAgIGJvb2wgdmlzdWFsVXBkYXRlc0FsbG93ZWQoKSBjb25zdCB7IHJldHVy
biBtX3Zpc3VhbFVwZGF0ZXNBbGxvd2VkOyB9CiAKQEAgLTE0ODcsNyArMTQ5NSw3IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdW5zaWduZWQgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50OwogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdW5zaWduZWQgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50
OworICAgIE93blB0cjxUb3VjaEV2ZW50VGFyZ2V0U2V0PiBtX3RvdWNoRXZlbnRUYXJnZXRzOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMjgsOCArMjIyOCw4IEBAIHZvaWQgTm9kZTo6ZGlkTW92
ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdWNo
RXZlbnROYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVj
dG9yJiBsaXN0ZW5lcnMgPSBnZXRFdmVudExpc3RlbmVycyh0b3VjaEV2ZW50TmFtZXNbaV0pOwog
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxpc3RlbmVycy5zaXplKCk7ICsraikgewot
ICAgICAgICAgICAgb2xkRG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7Ci0g
ICAgICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAg
ICAgICAgb2xkRG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOworICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTIyNTgsNyArMjI1OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0
cnlBZGRFdmVudExpc3RlbmVyKE4KICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZl
bnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRU
eXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0
YXJnZXROb2RlKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyODAsNyArMjI4MCw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0cnlSZW1vdmVFdmVudExpc3RlbmUKICAgICAgICAgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAg
ZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYg
KGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBk
b2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0YXJnZXROb2RlKTsKICAgICB9CiAKICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3Bw
CShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgQ2FjaGVkRnJhbWVC
YXNlOjpyZXN0b3JlKCkKICAgICBtX2RvY3VtZW50LT5lbnF1ZXVlUG9wc3RhdGVFdmVudChoaXN0
b3J5SXRlbSAmJiBoaXN0b3J5SXRlbS0+c3RhdGVPYmplY3QoKSA/IGhpc3RvcnlJdGVtLT5zdGF0
ZU9iamVjdCgpIDogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CiAgICAgCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAobV9kb2N1bWVudC0+dG91Y2hFdmVudEhh
bmRsZXJDb3VudCgpKQorICAgIGlmIChtX2RvY3VtZW50LT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMo
KSkKICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRU
b3VjaEV2ZW50cyh0cnVlKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMsNyBA
QCBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiAgICAgICAgIGRvY3VtZW50
KCktPmZvcm1Db250cm9sbGVyKCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24o
dGhpcyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9oYXNUb3VjaEV2ZW50
SGFuZGxlcikKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIo
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7
CiAjZW5kaWYKIH0KIApAQCAtNDg5LDkgKzQ4OSw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
dXBkYXRlVHlwZSgpCiAgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlciA9IG1faW5wdXRUeXBl
LT5oYXNUb3VjaEV2ZW50SGFuZGxlcigpOwogICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxlciAh
PSBtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKSB7CiAgICAgICBpZiAoaGFzVG91Y2hFdmVudEhhbmRs
ZXIpCi0gICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAg
ICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgZWxz
ZQotICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAg
ICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAg
IG1faGFzVG91Y2hFdmVudEhhbmRsZXIgPSBoYXNUb3VjaEV2ZW50SGFuZGxlcjsKICAgICB9CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDEzNjQwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU4NCw3ICsxNTg0LDcgQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
QQogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQp
CiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAg
ICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAg
ICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKGRvY3VtZW50KTsKICAgICAgICAg
ZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQpCiAgICAgICAg
ICAgICBkaWRBZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcih0aGlzKTsKICAgICB9CkBAIC0xNjE1LDcg
KzE2MTUsNyBAQCBib29sIERPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zCiAgICAg
ICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAg
ICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBl
bHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAg
ICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoZG9jdW1lbnQpOwogICAgIH0K
IAogICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTM2NDA4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODU5
LDcgKzM4NTksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zCiAg
ICAgICAgICAgICBEb2N1bWVudCogZG9jID0gbm9kZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAg
IGlmICghZG9jKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFk
b2MtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAgICAgICAgIGlmICghZG9jLT5oYXNU
b3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICAgICAgbV9vcmlnaW5hdGluZ1RvdWNoUG9pbnRUYXJnZXRzLnNldCh0b3VjaFBvaW50VGFyZ2V0
S2V5LCBub2RlKTsKQEAgLTM4NzksNyArMzg3OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5k
bGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHRvdWNoVGFyZ2V0LT50
b05vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKCFkb2MtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAg
ICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGRvYy0+ZnJhbWUoKTsKICAgICAgICAg
aWYgKCF0YXJnZXRGcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxMzY0
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA4LDcgKzMwOCw3IEBAIHZvaWQgRnJhbWU6OnNldERvY3VtZW50KFBhc3NSZWZQdHI8RG9jdW0K
ICAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+bWFpbkZyYW1lKCkgPT0gdGhpcykgewogICAgICAg
ICBub3RpZnlDaHJvbWVDbGllbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCgpOwogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+dG91Y2hF
dmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmhhc1RvdWNo
RXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgbV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkt
Pm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsKICNlbmRpZgogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJ
KHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCkBAIC0xODEsNiArMTgyLDQ1IEBAIFJlZ2lvbiBTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29tcHV0ZU5vbkYKICAgICByZXR1cm4gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CiB9CiAK
KyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCitzdGF0aWMgdm9pZCBhY2N1bXVsYXRl
VG91Y2hFdmVudFRhcmdldFJlY3RzKExheWVySGl0VGVzdFJlY3RzJiBsYXllclJlY3RzLCBjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBpZiAo
IWRvY3VtZW50LT50b3VjaEV2ZW50VGFyZ2V0cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0YXJnZXRzID0gZG9jdW1lbnQtPnRvdWNoRXZlbnRU
YXJnZXRzKCk7CisgICAgZm9yIChUb3VjaEV2ZW50VGFyZ2V0U2V0Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gdGFyZ2V0cy0+YmVnaW4oKTsgaXRlciAhPSB0YXJnZXRzLT5lbmQoKTsgKytpdGVyKSB7
CisgICAgICAgIGlmIChpdGVyLT5rZXkgPT0gZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChS
ZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKKyAgICAgICAgICAgICAg
ICB2aWV3LT5hZGRMYXllckhpdFRlc3RSZWN0cyhsYXllclJlY3RzKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpdGVyLT5rZXktPmlzRG9jdW1lbnROb2Rl
KCkgJiYgaXRlci0+a2V5ICE9IGRvY3VtZW50KSB7CisgICAgICAgICAgICBhY2N1bXVsYXRlVG91
Y2hFdmVudFRhcmdldFJlY3RzKGxheWVyUmVjdHMsIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaXRl
ci0+a2V5KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXRlci0+a2V5LT5yZW5kZXJlcigpKQorICAgICAg
ICAgICAgcmVuZGVyZXItPmFkZExheWVySGl0VGVzdFJlY3RzKGxheWVyUmVjdHMpOworICAgIH0K
K30KKyNlbmRpZgorCitMYXllckhpdFRlc3RSZWN0cyBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29t
cHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7Cisg
ICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBMYXllckhpdFRlc3RSZWN0cyBsYXllclJlY3RzOwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBpZiAoIWRvY3VtZW50LT52aWV3
KCkpCisgICAgICAgIHJldHVybiBsYXllclJlY3RzOworCisgICAgYWNjdW11bGF0ZVRvdWNoRXZl
bnRUYXJnZXRSZWN0cyhsYXllclJlY3RzLCBkb2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1cm4g
bGF5ZXJSZWN0czsKK30KKwogdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVD
dXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWduZWQgd2hlZWxFdmVu
dEhhbmRsZXJDb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTAsNiArNTEsNyBAQCB0eXBl
ZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAogZW51bSBTY3JvbGxpbmdOb2RlVHlwZSB7
IFNjcm9sbGluZ05vZGUsIEZpeGVkTm9kZSB9OwogCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZy
YW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsKQEAgLTE0OSw3ICsx
NTEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5
ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBo
aWNzTGF5ZXIqLCBib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJJc0ZpeGVkVG9D
b250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1lbnQqKSB7IH0KIAor
ICAgIExheWVySGl0VGVzdFJlY3RzIGNvbXB1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3Qg
RG9jdW1lbnQqKTsKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRv
cihQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVt
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDcgKzExNCwyMyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06
OmZyYW1lCiAgICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBv
dmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0
aGUKICAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhl
IG1haW4gZnJhbWUuCiAgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0
ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkp
OworICAgIExheWVySGl0VGVzdFJlY3RzIHRvdWNoRXZlbnRUYXJnZXRSZWN0cyA9IGNvbXB1dGVU
b3VjaEV2ZW50VGFyZ2V0UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAg
ICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOwor
ICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRS
ZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIC8vIFdhaXQgdW50
aWwgYWZ0ZXIgbGF5b3V0IHRvIHVwZGF0ZS4KKyAgICBpZiAobV9wYWdlLT5tYWluRnJhbWUoKS0+
dmlldygpLT5uZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSB3b24n
dCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25l
LCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KKyAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxM
YXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsKKyAgICBpZiAo
bV9wcml2YXRlLT5zY3JvbGxMYXllcigpKSB7CisgICAgICAgIExheWVySGl0VGVzdFJlY3RzIHRv
dWNoRXZlbnRUYXJnZXRSZWN0cyA9IGNvbXB1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1l
bnQpOworICAgICAgICBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdldFJl
Y3RzKTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJh
bWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtMjA5LDYg
KzIyNSwxNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vCiAgICAg
fQogfQogCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyhjb25zdCBMYXllckhpdFRlc3RSZWN0cyYgbGF5ZXJSZWN0cykKK3sKKyAgICBm
b3IgKExheWVySGl0VGVzdFJlY3RzOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbGF5ZXJSZWN0cy5i
ZWdpbigpOyBpdGVyICE9IGxheWVyUmVjdHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBXZWJW
ZWN0b3I8V2ViUmVjdD4gd2ViUmVjdHMoaXRlci0+dmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IHdlYlJlY3RzW2ldID0gaXRlci0+dmFsdWVbaV07CisKKyAgICAgICAgaXRlci0+a2V5LT5iYWNr
aW5nKCktPmdyYXBoaWNzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5zZXRUb3VjaEV2ZW50SGFu
ZGxlclJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVu
dEhhbmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRT
Y3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNl
bHZlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJl
dmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVt
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIg
KzY4LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBz
Y3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxl
QXJlYSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2
ZXIgdG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAg
IHZpcnR1YWwgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNvbnN0IERvY3Vt
ZW50KikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdo
ZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVh
bCB2b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFp
blRocmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFw
aGljc0xheWVyKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBS
ZWdpb24mKTsKKyAgICB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBMYXllckhp
dFRlc3RSZWN0cyYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25l
ZCk7CiAgICAgUGFzc093blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhckxheWVyPiBjcmVhdGVTY3Jv
bGxiYXJMYXllcihTY3JvbGxiYXIqLCBXZWJLaXQ6OldlYkxheWVyKiBzY3JvbGxMYXllciwgR3Jh
cGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVWaWV3Kik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTM2NDA4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNiArNjUsOSBAQAogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKICNpbmNs
dWRlICJFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCIKICNlbmRpZgorI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjZW5kaWYKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02OTI1LDYgKzY5Mjgs
NDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBp
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9v
cmVkTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9mZnNldCArIGlubGluZUVsZW1lbnRDb250aW51YXRp
b24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBsb2NhdGlvbigpKSk7CiB9CiAK
K3ZvaWQgUmVuZGVyQmxvY2s6OmFkZExheWVySGl0VGVzdFJlY3RzKExheWVySGl0VGVzdFJlY3Rz
JiBsYXllclJlY3RzLCBjb25zdCBSZW5kZXJMYXllciogY3VycmVudENvbXBvc2l0ZWRMYXllciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGxheWVyT2Zmc2V0KSBjb25zdAoreworICAgIExheW91dFBvaW50
IGFkanVzdGVkTGF5ZXJPZmZzZXQgPSBsYXllck9mZnNldDsKKyAgICBpZiAoIWN1cnJlbnRDb21w
b3NpdGVkTGF5ZXIgfHwgaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgZW5jbG9zaW5n
Q29tcG9zaXRlZExheWVyQW5kT2Zmc2V0KCZjdXJyZW50Q29tcG9zaXRlZExheWVyLCBhZGp1c3Rl
ZExheWVyT2Zmc2V0KTsKKworICAgIGlmICghY3VycmVudENvbXBvc2l0ZWRMYXllcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVmVjdG9yPEludFJlY3Q+IHJlc3VsdDsKKworICAgIGlmICh3aWR0
aCgpICYmIGhlaWdodCgpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHBpeGVsU25hcHBlZEludFJl
Y3QoYWRqdXN0ZWRMYXllck9mZnNldCwgc2l6ZSgpKSk7CisKKyAgICBpZiAoaGFzSG9yaXpvbnRh
bExheW91dE92ZXJmbG93KCkgfHwgaGFzVmVydGljYWxMYXlvdXRPdmVyZmxvdygpKSB7CisgICAg
ICAgIGZvciAoUm9vdElubGluZUJveCogY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgeworICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBt
YXg8TGF5b3V0VW5pdD4oY3Vyci0+bGluZVRvcCgpLCBjdXJyLT50b3AoKSk7CisgICAgICAgICAg
ICBMYXlvdXRVbml0IGJvdHRvbSA9IG1pbjxMYXlvdXRVbml0PihjdXJyLT5saW5lQm90dG9tKCks
IGN1cnItPnRvcCgpICsgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBy
ZWN0KGFkanVzdGVkTGF5ZXJPZmZzZXQueCgpICsgY3Vyci0+eCgpLCBhZGp1c3RlZExheWVyT2Zm
c2V0LnkoKSArIHRvcCwgY3Vyci0+d2lkdGgoKSwgYm90dG9tIC0gdG9wKTsKKyAgICAgICAgICAg
IGlmICghcmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwaXhl
bFNuYXBwZWRJbnRSZWN0KHJlY3QpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpICYmICFjdXJyLT5pc0xpc3RN
YXJrZXIoKSAmJiBjdXJyLT5pc0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9
IHRvUmVuZGVyQm94KGN1cnIpOworICAgICAgICAgICAgYm94LT5hZGRMYXllckhpdFRlc3RSZWN0
cyhsYXllclJlY3RzLCBjdXJyZW50Q29tcG9zaXRlZExheWVyLCAgYWRqdXN0ZWRMYXllck9mZnNl
dCArIGJveC0+bG9jYXRpb25PZmZzZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IXJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgTGF5ZXJIaXRUZXN0UmVjdHM6Oml0ZXJhdG9y
IGl0ZXIgPSBsYXllclJlY3RzLmZpbmQoY3VycmVudENvbXBvc2l0ZWRMYXllcik7CisgICAgICAg
IGlmIChpdGVyID09IGxheWVyUmVjdHMuZW5kKCkpCisgICAgICAgICAgICBpdGVyID0gbGF5ZXJS
ZWN0cy5hZGQoY3VycmVudENvbXBvc2l0ZWRMYXllciwgcmVzdWx0KS5pdGVyYXRvcjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7CisgICAgfQor
fQorCiBSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5
cGVBcyhjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3QKIHsKICAgICBpZiAoaXNBbm9u
eW1vdXNDb2x1bW5zQmxvY2soKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUwNiw4IEBAIHByb3RlY3RlZDoK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBj
b25zdCBMYXlvdXRQb2ludCYpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZExheWVySGl0VGVzdFJl
Y3RzKExheWVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXIqID0gMCwgY29uc3QgTGF5
b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJREU7CisKICNpZiBFTkFCTEUo
U1ZHKQogICAgIC8vIE9ubHkgdXNlZCBieSBSZW5kZXJTVkdUZXh0LCB3aGljaCBleHBsaWNpdGVs
eSBvdmVycmlkZXMgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKCksIGRvIE5PVCB1c2UgZm9yIGFu
eXRoaW5nIGVsc2UuCiAgICAgdm9pZCBmb3JjZUxheW91dElubGluZUNoaWxkcmVuKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxMzY0MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgwLDYgKzQ4MCwyOSBAQCB2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yCiAgICAgICAgIHJlY3RzLmFwcGVuZChwaXhlbFNuYXBwZWRJbnRSZWN0KGFkZGl0aW9uYWxP
ZmZzZXQsIHNpemUoKSkpOwogfQogCit2b2lkIFJlbmRlckJveDo6YWRkTGF5ZXJIaXRUZXN0UmVj
dHMoTGF5ZXJIaXRUZXN0UmVjdHMmIGxheWVyUmVjdHMsIGNvbnN0IFJlbmRlckxheWVyKiBjdXJy
ZW50Q29tcG9zaXRlZExheWVyLCBjb25zdCBMYXlvdXRQb2ludCYgbGF5ZXJPZmZzZXQpIGNvbnN0
Cit7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMYXllck9mZnNldCA9IGxheWVyT2Zmc2V0Owor
ICAgIGlmICghY3VycmVudENvbXBvc2l0ZWRMYXllciB8fCBoYXNTZWxmUGFpbnRpbmdMYXllcigp
KQorICAgICAgICBlbmNsb3NpbmdDb21wb3NpdGVkTGF5ZXJBbmRPZmZzZXQoJmN1cnJlbnRDb21w
b3NpdGVkTGF5ZXIsIGFkanVzdGVkTGF5ZXJPZmZzZXQpOworCisgICAgaWYgKCFjdXJyZW50Q29t
cG9zaXRlZExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2lkdGgoKSAmJiBoZWln
aHQoKSkgeworICAgICAgICBJbnRSZWN0IHJlc3VsdChwaXhlbFNuYXBwZWRJbnRSZWN0KGFkanVz
dGVkTGF5ZXJPZmZzZXQsIHNpemUoKSkpOworCisgICAgICAgIExheWVySGl0VGVzdFJlY3RzOjpp
dGVyYXRvciBpdGVyID0gbGF5ZXJSZWN0cy5maW5kKGN1cnJlbnRDb21wb3NpdGVkTGF5ZXIpOwor
ICAgICAgICBpZiAoaXRlciA9PSBsYXllclJlY3RzLmVuZCgpKSB7CisgICAgICAgICAgICBWZWN0
b3I8SW50UmVjdD4gcmVzdWx0VmVjdG9yOworICAgICAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVu
ZChyZXN1bHQpOworICAgICAgICAgICAgbGF5ZXJSZWN0cy5hZGQoY3VycmVudENvbXBvc2l0ZWRM
YXllciwgcmVzdWx0VmVjdG9yKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdGVyLT52
YWx1ZS5hcHBlbmQocmVzdWx0KTsKKyAgICB9Cit9CisKKwogTGF5b3V0UmVjdCBSZW5kZXJCb3g6
OnJlZmxlY3Rpb25Cb3goKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVzdWx0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTM2NDA4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcs
NiArMTU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRz
Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWlu
ZXIqLywgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRMYXllckhpdFRlc3RSZWN0cyhMYXllckhp
dFRlc3RSZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyKiA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9
IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBj
YXV0aW9uISBObyB0eXBlIGNoZWNraW5nIGlzIGRvbmUhCiAgICAgUmVuZGVyQm94KiBwcmV2aW91
c1NpYmxpbmdCb3goKSBjb25zdDsKICAgICBSZW5kZXJCb3gqIG5leHRTaWJsaW5nQm94KCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2
aXNpb24gMTM2NDA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjUsNiArMTQyNSw0NCBAQCB2b2lkIFJlbmRlcklubGlu
ZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjCiAgICAgfQogfQogCit2b2lkIFJlbmRlcklubGluZTo6
YWRkTGF5ZXJIaXRUZXN0UmVjdHMoTGF5ZXJIaXRUZXN0UmVjdHMmIGxheWVyUmVjdHMsIGNvbnN0
IFJlbmRlckxheWVyKiBjdXJyZW50Q29tcG9zaXRlZExheWVyLCBjb25zdCBMYXlvdXRQb2ludCYg
bGF5ZXJPZmZzZXQpIGNvbnN0Cit7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMYXllck9mZnNl
dCA9IGxheWVyT2Zmc2V0OworICAgIGlmICghY3VycmVudENvbXBvc2l0ZWRMYXllciB8fCBoYXNT
ZWxmUGFpbnRpbmdMYXllcigpKQorICAgICAgICBlbmNsb3NpbmdDb21wb3NpdGVkTGF5ZXJBbmRP
ZmZzZXQoJmN1cnJlbnRDb21wb3NpdGVkTGF5ZXIsIGFkanVzdGVkTGF5ZXJPZmZzZXQpOworCisg
ICAgaWYgKCFjdXJyZW50Q29tcG9zaXRlZExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBW
ZWN0b3I8SW50UmVjdD4gcmVzdWx0OworICAgIEFic29sdXRlUmVjdHNHZW5lcmF0b3JDb250ZXh0
IGNvbnRleHQocmVzdWx0LCBhZGp1c3RlZExheWVyT2Zmc2V0KTsKKyAgICBnZW5lcmF0ZUxpbmVC
b3hSZWN0cyhjb250ZXh0KTsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RD
aGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAo
IWN1cnItPmlzVGV4dCgpICYmICFjdXJyLT5pc0xpc3RNYXJrZXIoKSkgeworICAgICAgICAgICAg
TGF5b3V0UG9pbnQgcG9zKGFkanVzdGVkTGF5ZXJPZmZzZXQpOworICAgICAgICAgICAgaWYgKGN1
cnItPmlzQm94KCkpCisgICAgICAgICAgICAgICAgcG9zLm1vdmUodG9SZW5kZXJCb3goY3Vycikt
PmxvY2F0aW9uT2Zmc2V0KCkpOworICAgICAgICAgICAgY3Vyci0+YWRkTGF5ZXJIaXRUZXN0UmVj
dHMobGF5ZXJSZWN0cywgY3VycmVudENvbXBvc2l0ZWRMYXllciwgcG9zKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChjb250aW51YXRpb24oKSkgeworICAgICAgICBpZiAoY29udGludWF0
aW9uKCktPmlzSW5saW5lKCkpCisgICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRkTGF5ZXJI
aXRUZXN0UmVjdHMobGF5ZXJSZWN0cywgY3VycmVudENvbXBvc2l0ZWRMYXllciwgdG9Qb2ludChh
ZGp1c3RlZExheWVyT2Zmc2V0ICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT5s
b2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZExheWVySGl0VGVzdFJlY3RzKGxheWVy
UmVjdHMsIGN1cnJlbnRDb21wb3NpdGVkTGF5ZXIsIHRvUG9pbnQoYWRqdXN0ZWRMYXllck9mZnNl
dCArIHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigpKS0+bG9jYXRpb24oKSAtIGNvbnRhaW5pbmdC
bG9jaygpLT5sb2NhdGlvbigpKSk7CisgICAgfQorCisgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgp
KSB7CisgICAgICAgIExheWVySGl0VGVzdFJlY3RzOjppdGVyYXRvciBpdGVyID0gbGF5ZXJSZWN0
cy5maW5kKGN1cnJlbnRDb21wb3NpdGVkTGF5ZXIpOworICAgICAgICBpZiAoaXRlciA9PSBsYXll
clJlY3RzLmVuZCgpKQorICAgICAgICAgICAgbGF5ZXJSZWN0cy5hZGQoY3VycmVudENvbXBvc2l0
ZWRMYXllciwgcmVzdWx0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlci0+dmFsdWUu
YXBwZW5kKHJlc3VsdCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRs
aW5lKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYg
KzgwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZvaWQgcGFpbnRPdXRsaW5l
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50Jik7CiAKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkTGF5ZXJIaXRUZXN0UmVjdHMoTGF5ZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJM
YXllciogPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVS
UklERTsKKwogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51YXRpb247CiAg
ICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlvbjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDEzNjQw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MTMsNiArNjEzLDI1IEBAIFJlbmRlck5hbWVkRmxvd1RocmVhZCogUmVuZGVy
T2JqZWN0OjpyZW4KICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC0+aXNSZW5kZXJOYW1lZEZs
b3dUaHJlYWQoKSA/IHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG9iamVjdCkgOiAwOwogfQogCit2
b2lkIFJlbmRlck9iamVjdDo6ZW5jbG9zaW5nQ29tcG9zaXRlZExheWVyQW5kT2Zmc2V0KGNvbnN0
IFJlbmRlckxheWVyKiogZW5jbG9zaW5nQ29tcG9zaXRlZExheWVyLCBMYXlvdXRQb2ludCYgb2Zm
c2V0KSBjb25zdAoreworICAgIC8vIERldGVybWluZSB0aGUgbmV3IGNvbXBvc2l0aW5nIGxheWVy
IGFuZCB0aGUgb2Zmc2V0IGZyb20gaXQuCisgICAgKmVuY2xvc2luZ0NvbXBvc2l0ZWRMYXllciA9
IGVuY2xvc2luZ0xheWVyKCktPmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXJGb3JSZXBhaW50KCk7
CisgICAgaWYgKCEqZW5jbG9zaW5nQ29tcG9zaXRlZExheWVyKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBTZWxmLXBhaW50aW5nIGxheWVycyBzdWJ0cmFjdCB0aGUgcmVuZGVyZXIncyBsb2Nh
dGlvbi4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIG1hcCBvdXIgbG9jYXRpb24gdG8gbGF5ZXIgc3Bh
Y2UuCisgICAgaWYgKCgqZW5jbG9zaW5nQ29tcG9zaXRlZExheWVyKS0+cmVuZGVyZXIoKSA9PSB0
aGlzKQorICAgICAgICBvZmZzZXQgPSBMYXlvdXRQb2ludCgpOworICAgIGVsc2UgeworICAgICAg
ICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFu
c2Zvcm1EaXJlY3Rpb24sIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIC8vIERvbid0IGFwcGx5IHRy
YW5zZm9ybXMgYXMgd2Ugc2hvdWxkIG5ldmVyIHBhc3MgdGhyb3VnaCBvbmUuCisgICAgICAgIG1h
cExvY2FsVG9Db250YWluZXIoKCplbmNsb3NpbmdDb21wb3NpdGVkTGF5ZXIpLT5yZW5kZXJlcigp
LCB0cmFuc2Zvcm1TdGF0ZSwgQXBwbHlDb250YWluZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5z
Zm9ybXMpOworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5mbGF0dGVuKCk7CisgICAgICAgIG9mZnNl
dCA9IExheW91dFBvaW50KHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJQb2ludCgpKTsKKyAgICB9
Cit9CisKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZUJsb2NrKCkgY29uc3QK
IHsKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHN0cnVjdCBBbm5v
dGF0ZWRSZWdpb25WYWx1ZSB7CiAjZW5kaWYKIAogdHlwZWRlZiBXVEY6Okhhc2hTZXQ8Y29uc3Qg
UmVuZGVyT2JqZWN0Kj4gUmVuZGVyT2JqZWN0QW5jZXN0b3JMaW5lYm94RGlydHlTZXQ7Ci0KK3R5
cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgVmVjdG9yPEludFJlY3Q+ID4g
TGF5ZXJIaXRUZXN0UmVjdHM7CiAjaWZuZGVmIE5ERUJVRwogY29uc3QgaW50IHNob3dUcmVlQ2hh
cmFjdGVyT2Zmc2V0ID0gMzk7CiAjZW5kaWYKQEAgLTk0NSw2ICs5NDUsOCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYs
IGNvbnN0IExheW91dFBvaW50JikgeyB9OwogCisgICAgdmlydHVhbCB2b2lkIGFkZExheWVySGl0
VGVzdFJlY3RzKExheWVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXIqID0gMCwgY29u
c3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgeyB9OworCiAgICAgTGF5b3V0
UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KDApOwpAQCAtOTU4LDYgKzk2MCw4IEBAIHB1YmxpYzoK
IHByb3RlY3RlZDoKICAgICBpbmxpbmUgYm9vbCBsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRy
ZWUoKSBjb25zdDsKIAorICAgIHZvaWQgZW5jbG9zaW5nQ29tcG9zaXRlZExheWVyQW5kT2Zmc2V0
KGNvbnN0IFJlbmRlckxheWVyKiosIExheW91dFBvaW50JikgY29uc3Q7CisKICAgICAvLyBPdmVy
cmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xhc3MgYXQgdGhlIGVuZAogICAgIHZpcnR1YWwg
dm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSog
bmV3U3R5bGUpOwogICAgIC8vIE92ZXJyaWRlcyBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcyBh
dCB0aGUgc3RhcnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJ
KHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2MiwyNSBAQCB2b2lkIFJlbmRlclZpZXc6
Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50CiAgICAgfQogfQogCit2b2lkIFJlbmRlclZpZXc6OmFk
ZExheWVySGl0VGVzdFJlY3RzKExheWVySGl0VGVzdFJlY3RzJiBsYXllclJlY3RzLCBjb25zdCBS
ZW5kZXJMYXllciogY3VycmVudENvbXBvc2l0ZWRMYXllciwgY29uc3QgTGF5b3V0UG9pbnQmIGxh
eWVyT2Zmc2V0KSBjb25zdAoreworICAgIGN1cnJlbnRDb21wb3NpdGVkTGF5ZXIgPSBlbmNsb3Np
bmdMYXllcigpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyRm9yUmVwYWludCgpOworICAgIGlm
ICghY3VycmVudENvbXBvc2l0ZWRMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVj
dCBkb2N1bWVudFJlY3QgPSB1bnNjYWxlZERvY3VtZW50UmVjdCgpOworICAgIGlmIChkb2N1bWVu
dFJlY3Qud2lkdGgoKSAmJiBkb2N1bWVudFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgVmVjdG9y
PEludFJlY3Q+IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFJlY3QpOwor
CisgICAgICAgIExheWVySGl0VGVzdFJlY3RzOjppdGVyYXRvciBpdGVyID0gbGF5ZXJSZWN0cy5m
aW5kKGN1cnJlbnRDb21wb3NpdGVkTGF5ZXIpOworICAgICAgICBpZiAoaXRlciA9PSBsYXllclJl
Y3RzLmVuZCgpKQorICAgICAgICAgICAgbGF5ZXJSZWN0cy5hZGQoY3VycmVudENvbXBvc2l0ZWRM
YXllciwgcmVzdWx0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlci0+dmFsdWUgPSBy
ZXN1bHQ7CisgICAgfQorfQorCiBib29sIFJlbmRlclZpZXc6OnJlcXVpcmVzQ29sdW1ucyhpbnQg
ZGVzaXJlZENvbHVtbkNvdW50KSBjb25zdAogewogICAgIGlmIChtX2ZyYW1lVmlldykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gMTM2NDA4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlv
bnMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVSUklERTsKIAorICAgIHZpcnR1
YWwgdm9pZCBhZGRMYXllckhpdFRlc3RSZWN0cyhMYXllckhpdFRlc3RSZWN0cyYsIGNvbnN0IFJl
bmRlckxheWVyKiA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0
IE9WRVJSSURFOworCiAgICAgZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFpbnROZXdY
T1JPbGQsIFJlcGFpbnROZXdNaW51c09sZCwgUmVwYWludE5vdGhpbmcgfTsKICAgICB2b2lkIHNl
dFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVj
dCogZW5kLCBpbnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JP
bGQpOwogICAgIHZvaWQgZ2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIs
IGludCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQmIGVuZE9m
ZnNldCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMTM2NDA4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1Jvb3QuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0Nh
Y2hlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgpAQCAtOTEsNiArOTIsMTIgQEAg
dm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcwogICAgIHF1YWRzLmFwcGVu
ZChsb2NhbFRvQWJzb2x1dGVRdWFkKHN0cm9rZUJvdW5kaW5nQm94KCksIDAgLyogbW9kZSAqLywg
d2FzRml4ZWQpKTsKIH0KIAordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkTGF5ZXJIaXRU
ZXN0UmVjdHMoTGF5ZXJIaXRUZXN0UmVjdHMmIGxheWVyUmVjdHMsIGNvbnN0IFJlbmRlckxheWVy
KiBjdXJyZW50Q29tcG9zaXRlZExheWVyLCBjb25zdCBMYXlvdXRQb2ludCYgbGF5ZXJPZmZzZXQp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGNhbGN1bGF0ZSB0aGUgbWluaW1hbCByZWN0LgorICAg
IHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QodGhpcyktPmFkZExh
eWVySGl0VGVzdFJlY3RzKGxheWVyUmVjdHMsIGN1cnJlbnRDb21wb3NpdGVkTGF5ZXIsIGxheWVy
T2Zmc2V0KTsKK30KKwogdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6d2lsbEJlRGVzdHJveWVk
KCkKIHsKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKHRoaXMpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaAkocmV2aXNpb24gMTM2NDA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4m
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQp
IGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIGFkZExheWVySGl0VGVzdFJlY3RzKExheWVySGl0
VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXIqID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0g
TGF5b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9j
YWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE1hcENvb3JkaW5hdGVzRmxhZ3MgPSBBcHBseUNvbnRhaW5l
ckZsaXAgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3JtcywgYm9vbCogd2FzRml4ZWQgPSAwKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdCogcHVzaE1hcHBpbmdU
b0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0
LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBz
dHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5
bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTM2
NDA4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2lu
Y2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3Ry
eS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VsZWN0
UnVsZUZlYXR1cmVTZXQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMTE5Niw4ICsxMTk3LDQxIEBAIHVuc2lnbmVkIEludGVy
bmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3UKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGRvY3VtZW50LT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCk7CisgICAgY29uc3Qg
VG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hIYW5kbGVycyA9IGRvY3VtZW50LT50b3VjaEV2ZW50
VGFyZ2V0cygpOworICAgIGlmICghdG91Y2hIYW5kbGVycykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgZm9yIChUb3VjaEV2ZW50VGFyZ2V0U2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gdG91Y2hIYW5kbGVycy0+YmVnaW4oKTsgaXRlciAhPSB0b3Vj
aEhhbmRsZXJzLT5lbmQoKTsgKytpdGVyKQorICAgICAgICBjb3VudCArPSBpdGVyLT52YWx1ZTsK
KyAgICByZXR1cm4gY291bnQ7Cit9CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcp
CitQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBJbnRlcm5hbHM6OnRvdWNoRXZlbnRUYXJnZXRD
bGllbnRSZWN0cyhEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52aWV3KCkgfHwgIWRvY3VtZW50LT5wYWdlKCkp
IHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBpZiAoIWRvY3VtZW50LT5wYWdlKCktPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKCk7CisKKyAgICBkb2N1bWVu
dC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisKKyAgICBWZWN0b3I8
SW50UmVjdD4gcmVjdHM7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisKKyAgICBMYXll
ckhpdFRlc3RSZWN0cyBsYXllclJlY3RzID0gZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKS0+Y29tcHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhkb2N1bWVudCk7CisKKyAg
ICBmb3IgKExheWVySGl0VGVzdFJlY3RzOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbGF5ZXJSZWN0
cy5iZWdpbigpOyBpdGVyICE9IGxheWVyUmVjdHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgcXVhZHMuYXBwZW5kKGl0ZXItPmtleS0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFF1YWQoaXRlci0+dmFsdWVbaV0pLCBVc2VUcmFuc2Zvcm1zIHwgQXBwbHlDb250YWlu
ZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Q2xpZW50UmVjdExpc3Q6OmNyZWF0ZShxdWFkcyk7CiB9CisjZW5kaWYKIAogUGFzc1JlZlB0cjxO
b2RlTGlzdD4gSW50ZXJuYWxzOjpub2Rlc0Zyb21SZWN0KERvY3VtZW50KiBkb2N1bWVudCwgaW50
IHgsIGludCB5LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsCiAg
ICAgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcsIGJvb2wgaWdu
b3JlQ2xpcHBpbmcsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTM2NDA4
KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcxLDYgKzE3MSw5IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5k
bGVyQ291bnQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdW5zaWduZWQgdG91Y2hF
dmVudEhhbmRsZXJDb3VudChEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gdG91
Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2Vu
ZGlmCiAKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBub2Rlc0Zyb21SZWN0KERvY3VtZW50Kiwg
aW50IHgsIGludCB5LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcs
CiAgICAgICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBi
b29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkocmV2aXNp
b24gMTM2NDA4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDkgQEAKIAogICAgIHVuc2lnbmVkIGxvbmcgd2hlZWxF
dmVudEhhbmRsZXJDb3VudChpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRp
b24pOwogICAgIHVuc2lnbmVkIGxvbmcgdG91Y2hFdmVudEhhbmRsZXJDb3VudChpbiBEb2N1bWVu
dCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOworI2lmIGRlZmluZWQoRU5BQkxFX1RP
VUNIX0VWRU5UX1RSQUNLSU5HKSAmJiBFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkcKKyAgICBD
bGllbnRSZWN0TGlzdCB0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoaW4gRG9jdW1lbnQgZG9j
dW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogCiAgICAgTm9kZUxpc3Qgbm9k
ZXNGcm9tUmVjdChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gbG9uZyB4LCBpbiBsb25nIHksCiAg
ICAgICAgIGluIHVuc2lnbmVkIGxvbmcgdG9wUGFkZGluZywgaW4gdW5zaWduZWQgbG9uZyByaWdo
dFBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgYm90dG9tUGFkZGluZywgaW4gdW5zaWduZWQgbG9u
ZyBsZWZ0UGFkZGluZywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MzY0MjQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEyLTAzICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3Qg
cmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rpb24gaW4gdGhlIGNvbXBvc2l0
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzkx
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJs
aW5nIHRvdWNoIGV2ZW50IHRhcmdldCByZWdpb24gdHJhY2tpbmcuCisKKyAgICAgICAgKiBmZWF0
dXJlcy5neXBpOgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRvdWNoRXZlbnRU
eXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBsdWdp
bkNvbnRhaW5lckltcGwpOgorCiAyMDEyLTEyLTAzICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IHJlbW92ZSBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OnRyYW5zYWN0aW9uKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
ZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1
cmVzLmd5cGkJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVh
dHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBACiAgICAgICAnRU5B
QkxFX1RPVUNIX0FESlVTVE1FTlQ9MScsCiAgICAgICAnRU5BQkxFX1RPVUNIX0VWRU5UUz08KGVu
YWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTwo
ZW5hYmxlX3RvdWNoX2ljb25fbG9hZGluZyknLAorICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVOVF9U
UkFDS0lORz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hfU0xJ
REVSPTEnLAogICAgICAgJ0VOQUJMRV9WOF9TQ1JJUFRfREVCVUdfU0VSVkVSPTEnLAogICAgICAg
J0VOQUJMRV9WSURFTz0xJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBs
dWdpbkNvbnRhaW5lckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTI3LDkgKzUyNyw5IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6cmVxdWVzdFRvdWMKICAgICAgICAgcmV0dXJuOwogICAgIG1fdG91Y2hFdmVudFJlcXVlc3RU
eXBlID0gcmVxdWVzdFR5cGU7CiAgICAgaWYgKG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRv
dWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogICAgIGVsc2UKLSAgICAgICAg
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAg
ICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1f
ZWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c2V0V2FudHNXaGVl
bEV2ZW50cyhib29sIHdhbnRzV2hlZWxFdmVudHMpCkBAIC02ODIsNyArNjgyLDcgQEAgV2ViUGx1
Z2luQ29udGFpbmVySW1wbDo6fldlYlBsdWdpbkNvbnRhaQogI2VuZGlmCiAKICAgICBpZiAobV90
b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0gVG91Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAg
ICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOwor
ICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KG1fZWxlbWVudCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGx1Z2luTG9hZE9i
c2VydmVycy5zaXplKCk7ICsraSkKICAgICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzW2ldLT5j
bGVhclBsdWdpbkNvbnRhaW5lcigpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2NDI0KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTIt
MTItMDMgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0
IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50
cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3It
dG91Y2gtaGl0LXJlY3RzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEyLTAzICBQaGlsaXAgUm9nZXJz
ICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAgICAgSW52YWxpZGF0ZSBTVkcgd2lkdGggb24gd2lk
dGggYXR0cmlidXRlIGNoYW5nZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50
cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9j
b21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjMgQEAKK1RoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2
ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJl
ZS4gVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMg
b2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuCisKK25vcm1hbEZsb3dbMF06ICg4LCA3MiwgNzg0
LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMF06ICg4LCAxMDIsIDc4NCwgMTApCithYnNv
bHV0ZUNoaWxkQ29udGFpbmVyWzFdOiAoMTE4LCAzMDAsIDE0MCwgMTApCityZWxhdGl2ZUNoaWxk
Q29udGFpbmVyWzBdOiAoOCwgMTUyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclsx
XTogKDgsIDE1MiwgMjYwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzBdOiAoOCwgMjAyLCAx
MDAsIDgwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMV06ICg4LCAyMDIsIDExMCwgMTApCitvdmVy
aGFuZ2luZ0NvbnRhaW5lclsyXTogKDgsIDIwMiwgNzg0LCAxMCkKK292ZXJoYW5naW5nQ29udGFp
bmVyWzNdOiAoOCwgMjEyLCA1MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls0XTogKDgsIDIy
MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzVdOiAoOCwgMjMyLCA1MCwgMTApCitv
dmVyaGFuZ2luZ0NvbnRhaW5lcls2XTogKDgsIDI0MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29u
dGFpbmVyWzddOiAoOCwgMjUyLCA1MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls4XTogKDgs
IDI2MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzldOiAoOCwgMjcyLCA1MCwgMTAp
Cit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzBdOiAoNjIsIDQwMSwgNjYxLCAzMikKK3RyYW5z
Zm9ybWVkQ2hpbGRDb250YWluZXJbMV06ICg4LCA0MTIsIDc2OSwgMTApCitjb250aW51YXRpb25b
MF06ICgxMDgsIDQ2MiwgMTAwLCAxMCkKK2NvbnRpbnVhdGlvblsxXTogKDgsIDQ3MiwgNzY5LCAx
MCkKK2NvbnRpbnVhdGlvblsyXTogKDgsIDQ3MiwgNzY5LCAxMCkKKwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1o
aXQtcmVjdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91
Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyN0cmFu
c2Zvcm1lZENoaWxkIHsKKwktd2Via2l0LXRyYW5zZm9ybTogcm90YXRlM2QoMC4yLCAxLCAwLCAz
NWdyYWQpOworfQorI2Fic29sdXRlQ2hpbGQgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl0b3A6
IDMwMHB4OworfQorI3JlbGF0aXZlQ2hpbGQgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwl0b3A6
IDIwMHB4OworfQorI292ZXJoYW5naW5nQ29udGFpbmVyIHsKKwloZWlnaHQ6IDEwcHg7Cit9Cisj
b3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIHsKKwl3aWR0aDogMTAwcHg7CisJZmxvYXQ6IGxlZnQ7
Cit9CisjdGVzdHMgeworCWZvbnQ6IDEwcHggQWhlbTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0IHRl
c3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVuIGlu
IER1bXBSZW5kZXJUcmVlLgorVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhlIGhp
dCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuPC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InRlc3RzIj4KKwk8ZGl2IGlkPSJub3JtYWxGbG93
Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4+c3VtPC9zcGFuPi4KKwk8L2Rpdj4KKwk8ZGl2IGlk
PSJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9ImFi
c29sdXRlQ2hpbGQiPkFic29sdXRlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9InJl
bGF0aXZlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0icmVsYXRp
dmVDaGlsZCI+UmVsYXRpdmUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0ib3Zlcmhh
bmdpbmdDb250YWluZXIiPgorCQk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0Zsb2F0aW5nQ2hpbGQiPk92
ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJo
YW5naW5nIGZsb2F0PC9kaXY+CisJPC9kaXY+CisJPGRpdiBpZD0idHJhbnNmb3JtZWRDaGlsZENv
bnRhaW5lciI+CisJCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGQiPlRyYW5zZm9ybWVkPC9kaXY+
CisJPC9kaXY+CisJPGRpdj4KKwkJPGIgaWQ9ImNvbnRpbnVhdGlvbiI+VGhpcyBiIHRhZworCQk8
ZGl2PmNhdXNlcyBhPC9kaXY+CisJCWNvbnRpbnVhdGlvbjwvYj4KKwk8L2Rpdj4KKzwvZGl2Pgor
PHNjcmlwdD4KK2lmICghd2luZG93LnRlc3RSdW5uZXIpCisJcmV0dXJuOworCit3aW5kb3cudGVz
dFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxpc3RlbmVyKCkgeyB9CisKK2Z1bmN0
aW9uIGxvZyhtc2cpIHsKKwl2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4p
OworICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9uIHNv
cnRSZWN0cyhhLCBiKSB7CisJcmV0dXJuIGEudG9wIC0gYi50b3A7Cit9CisKK2Z1bmN0aW9uIGxv
Z1JlY3RzKGlkKSB7CisJZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKwll
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2UpOwor
CXJlY3RzID0gd2luZG93LmludGVybmFscy50b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoZG9j
dW1lbnQpOworCXZhciBzb3J0ZWRSZWN0cyA9IG5ldyBBcnJheSgpOworCWZvciAodmFyIGkgPSAw
OyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCXNvcnRlZFJlY3RzW2ldID0gcmVjdHNbaV07CisJ
c29ydGVkUmVjdHMuc29ydChzb3J0UmVjdHMpOworCWZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMu
bGVuZ3RoOyArK2kpCisJCWxvZyhpZCArICJbIiArIGkgKyAiXTogKCIgKyBzb3J0ZWRSZWN0c1tp
XS5sZWZ0ICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLnRvcCArICIsICIgKyBzb3J0ZWRSZWN0c1tp
XS53aWR0aCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS5oZWlnaHQgKyAiKSIpOworCWVsZW1lbnQu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7Cit9CisK
K2xvZ1JlY3RzKCJub3JtYWxGbG93Iik7Citsb2dSZWN0cygiYWJzb2x1dGVDaGlsZENvbnRhaW5l
ciIpOworbG9nUmVjdHMoInJlbGF0aXZlQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJvdmVy
aGFuZ2luZ0NvbnRhaW5lciIpOworbG9nUmVjdHMoInRyYW5zZm9ybWVkQ2hpbGRDb250YWluZXIi
KTsKK2xvZ1JlY3RzKCJjb250aW51YXRpb24iKTsKKwordmFyIHRlc3RDb250YWluZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHMiKTsKK3Rlc3RDb250YWluZXIucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177386</attachid>
            <date>2012-12-03 18:10:34 -0800</date>
            <delta_ts>2012-12-04 10:33:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121203180800.patch</filename>
            <type>text/plain</type>
            <size>49525</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjQyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxMi0xMi0wMyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuIFRoZSBuZXcgZnVuY3Rpb24gYWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cwor
ICAgICAgICBnZW5lcmF0ZXMgdGhlIGhpdCB0ZXN0IHJlY3RhbmdsZXMgZm9yIGEgZ2l2ZW4gbm9k
ZSBpbiB0aGVpciByZXBhaW50IGNvbnRhaW5lciBjb29yZGluYXRlcyBmb3Igc3BlZWR5CisgICAg
ICAgIHVwbG9hZGluZyB0byB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBUZXN0OiBwbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5o
dG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6Omhhc1RvdWNoRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudFRhcmdldHMpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpZE1vdmVUb05l
d0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZUJhc2U6OnJl
c3RvcmUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZVRvdWNoRXZlbnRUYXJn
ZXRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0
ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRU
b3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5oOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAg
KFJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaDoKKyAgICAgICAgKFJlbmRlcklubGluZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6CisgICAgICAg
IChSZW5kZXJPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
aDoKKyAgICAgICAgKFJlbmRlclZpZXcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAg
ICAoUmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hF
dmVudFRhcmdldENsaWVudFJlY3RzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgor
ICAgICAgICAoSW50ZXJuYWxzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisK
IDIwMTItMTItMDMgIFBoaWxpcCBSb2dlcnMgIDxwZHJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBJ
bnZhbGlkYXRlIFNWRyB3aWR0aCBvbiB3aWR0aCBhdHRyaWJ1dGUgY2hhbmdlcy4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTM2NDA4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDkgKzQ5NCw2IEBAIERvY3Vt
ZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEsKICAgICAsIG1fd3JpdGVSZWN1cnNp
b25Jc1Rvb0RlZXAoZmFsc2UpCiAgICAgLCBtX3dyaXRlUmVjdXJzaW9uRGVwdGgoMCkKICAgICAs
IG1fd2hlZWxFdmVudEhhbmRsZXJDb3VudCgwKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0g
ICAgLCBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNlbmRpZgogICAgICwgbV9wZW5kaW5n
VGFza3NUaW1lcih0aGlzLCAmRG9jdW1lbnQ6OnBlbmRpbmdUYXNrc1RpbWVyRmlyZWQpCiAgICAg
LCBtX3NjaGVkdWxlZFRhc2tzQXJlU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV92aXN1YWxVcGRh
dGVzQWxsb3dlZCh0cnVlKQpAQCAtNTU2MSwzMyArNTU1OCw1NyBAQCB2b2lkIERvY3VtZW50Ojpk
aWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlCiAgICAgd2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5n
ZWQodGhpcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCkK
K3ZvaWQgRG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqIGhhbmRsZXIpCiB7
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICArK21fdG91Y2hFdmVudEhhbmRsZXJDb3Vu
dDsKLSAgICBpZiAobV90b3VjaEV2ZW50SGFuZGxlckNvdW50ID4gMSkKKyAgICBpZiAoIW1fdG91
Y2hFdmVudFRhcmdldHMuZ2V0KCkpCisgICAgICAgIG1fdG91Y2hFdmVudFRhcmdldHMgPSBhZG9w
dFB0cihuZXcgVG91Y2hFdmVudFRhcmdldFNldCk7CisgICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+
YWRkKGhhbmRsZXIpOworICAgIGlmIChEb2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1lbnQo
KSkgeworICAgICAgICBwYXJlbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpCi0gICAgICAg
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOworICAgIH0K
KyAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkgeworI2lmIEVOQUJMRShUT1VDSF9F
VkVOVF9UUkFDS0lORykKKyAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCh0
aGlzKTsKKyNlbmRpZgorICAgICAgICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpID09
IDEpCisgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50
cyh0cnVlKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKICNlbmRp
ZgogfQogCi12b2lkIERvY3VtZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpCit2b2lk
IERvY3VtZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihOb2RlKiBoYW5kbGVyKQogewog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgQVNTRVJUKG1fdG91Y2hFdmVudEhhbmRsZXJD
b3VudCk7Ci0gICAgLS1tX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hF
dmVudEhhbmRsZXJDb3VudCkKKyAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpCiAg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV90b3VjaEV2ZW50VGFyZ2V0cy0+Y29udGFpbnMo
aGFuZGxlcikpOworICAgIG1fdG91Y2hFdmVudFRhcmdldHMtPnJlbW92ZShoYW5kbGVyKTsKKyAg
ICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpIHsKKyAgICAgICAgcGFy
ZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQog
ICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIGlm
IChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0VG91
Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCh0aGlzKTsKKyNlbmRpZgorICAgIGlmIChtX3RvdWNo
RXZlbnRUYXJnZXRzLT5zaXplKCkpCisgICAgICAgIHJldHVybjsKICAgICBmb3IgKGNvbnN0IEZy
YW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYg
ZnJhbWUtPmRvY3VtZW50KCktPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAgICAgaWYg
KGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5oYXNUb3VjaEV2ZW50SGFu
ZGxlcnMoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGFnZS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHMoZmFsc2UpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oaGFuZGxlcik7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlz
aW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDYsNiArMjA2LDggQEAgZW51bSBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgewog
fTsKIGNvbnN0IGludCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzID0gSW52YWxpZGF0ZU9u
QW55QXR0ckNoYW5nZSArIDE7CiAKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Tm9kZSo+IFRvdWNo
RXZlbnRUYXJnZXRTZXQ7CisKIGNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRhaW5lck5vZGUs
IHB1YmxpYyBUcmVlU2NvcGUsIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSwg
Y29uc3QgS1VSTCYgdXJsKQpAQCAtMTExMywxMyArMTExNSwxOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKLSAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV90b3VjaEV2ZW50SGFuZGxlckNvdW50OyB9CisgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxl
cnMoKSBjb25zdCB7IHJldHVybiAobV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkgPyBtX3RvdWNo
RXZlbnRUYXJnZXRzLT5zaXplKCkgOiBmYWxzZTsgfQogI2Vsc2UKLSAgICB1bnNpZ25lZCB0b3Vj
aEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGJvb2wgaGFzVG91
Y2hFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAg
dm9pZCBkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOwotICAgIHZvaWQgZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKTsKKyAgICB2b2lkIGRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsK
KyAgICB2b2lkIGRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKworI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hFdmVu
dFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpOyB9Cisj
ZWxzZQorICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorI2VuZGlmCiAKICAgICBib29sIHZpc3VhbFVwZGF0ZXNBbGxv
d2VkKCkgY29uc3QgeyByZXR1cm4gbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsgfQogCkBAIC0xNDg3
LDcgKzE0OTUsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHVuc2lnbmVkIG1fd2hlZWxFdmVudEhh
bmRsZXJDb3VudDsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHVuc2lnbmVkIG1fdG91
Y2hFdmVudEhhbmRsZXJDb3VudDsKKyAgICBPd25QdHI8VG91Y2hFdmVudFRhcmdldFNldD4gbV90
b3VjaEV2ZW50VGFyZ2V0czsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTM2NDA4KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjI4LDggKzIyMjgsOCBA
QCB2b2lkIE5vZGU6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0b3VjaEV2ZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29u
c3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gZ2V0RXZlbnRMaXN0ZW5lcnModG91
Y2hFdmVudE5hbWVzW2ldKTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBsaXN0ZW5l
cnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3Vj
aEV2ZW50SGFuZGxlcigpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVu
dEhhbmRsZXIoKTsKKyAgICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcih0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRI
YW5kbGVyKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjU4LDcgKzIyNTgsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgdHJ5QWRkRXZlbnRMaXN0ZW5lcihOCiAgICAgICAgIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3Vt
ZW50LT5kaWRBZGRXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5h
bWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQt
PmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIodGFyZ2V0Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7
CkBAIC0yMjgwLDcgKzIyODAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5UmVtb3ZlRXZlbnRM
aXN0ZW5lCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxF
dmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigp
OwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5
cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7
CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGFyZ2V0
Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZEZyYW1lLmNwcAkocmV2aXNpb24gMTM2NDA4KQorKysgU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBA
QCB2b2lkIENhY2hlZEZyYW1lQmFzZTo6cmVzdG9yZSgpCiAgICAgbV9kb2N1bWVudC0+ZW5xdWV1
ZVBvcHN0YXRlRXZlbnQoaGlzdG9yeUl0ZW0gJiYgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkg
PyBoaXN0b3J5SXRlbS0+c3RhdGVPYmplY3QoKSA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVs
bFZhbHVlKCkpOwogICAgIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fZG9j
dW1lbnQtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+aGFz
VG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21l
KCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzY0MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjMsNyArMTYzLDcgQEAgSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQo
KQogICAgICAgICBkb2N1bWVudCgpLT5mb3JtQ29udHJvbGxlcigpLT5jaGVja2VkUmFkaW9CdXR0
b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAg
aWYgKG1faGFzVG91Y2hFdmVudEhhbmRsZXIpCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKHRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTQ4OSw5ICs0ODksOSBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhh
bmRsZXIgPSBtX2lucHV0VHlwZS0+aGFzVG91Y2hFdmVudEhhbmRsZXIoKTsKICAgICBpZiAoaGFz
VG91Y2hFdmVudEhhbmRsZXIgIT0gbV9oYXNUb3VjaEV2ZW50SGFuZGxlcikgewogICAgICAgaWYg
KGhhc1RvdWNoRXZlbnRIYW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2
ZW50SGFuZGxlcigpOworICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxl
cih0aGlzKTsKICAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIodGhpcyk7CiAgICAgICBtX2hhc1RvdWNoRXZlbnRIYW5kbGVyID0gaGFzVG91Y2hFdmVu
dEhhbmRsZXI7CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3Bw
CShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1ODQsNyArMTU4NCw3IEBAIGJvb2wgRE9NV2luZG93OjphZGRF
dmVudExpc3RlbmVyKGNvbnN0IEEKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZl
bnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRU
eXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihk
b2N1bWVudCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc3Rv
cmFnZUV2ZW50KQogICAgICAgICAgICAgZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIodGhpcyk7
CiAgICAgfQpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoY29ucwogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhh
bmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUo
ZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KGRvY3VtZW50KTsKICAgICB9CiAKICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51
bmxvYWRFdmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlz
aW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzg1OSw3ICszODU5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZVRvdWNoRXZlbnQoY29ucwogICAgICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IG5vZGUtPmRvY3Vt
ZW50KCk7CiAgICAgICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGlmICghZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAg
ICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgICAgIG1fb3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0cy5z
ZXQodG91Y2hQb2ludFRhcmdldEtleSwgbm9kZSk7CkBAIC0zODc5LDcgKzM4NzksNyBAQCBib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zCiAgICAgICAgIERvY3VtZW50KiBk
b2MgPSB0b3VjaFRhcmdldC0+dG9Ob2RlKCktPmRvY3VtZW50KCk7CiAgICAgICAgIGlmICghZG9j
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghZG9jLT50b3VjaEV2ZW50SGFu
ZGxlckNvdW50KCkpCisgICAgICAgIGlmICghZG9jLT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBkb2Mt
PmZyYW1lKCk7CiAgICAgICAgIGlmICghdGFyZ2V0RnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAkocmV2aXNpb24gMTM2NDA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEZyYW1lOjpzZXREb2N1bWVu
dChQYXNzUmVmUHRyPERvY3VtCiAgICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPm1haW5GcmFtZSgp
ID09IHRoaXMpIHsKICAgICAgICAgbm90aWZ5Q2hyb21lQ2xpZW50V2hlZWxFdmVudEhhbmRsZXJD
b3VudENoYW5nZWQoKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICAgICBpZiAobV9k
b2MgJiYgbV9kb2MtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAgICAgaWYgKG1fZG9j
ICYmIG1fZG9jLT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAgICAgICAgIG1fcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CiAjZW5kaWYKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMTgxLDYgKzE4Miw0NSBAQCBSZWdpb24g
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVOb25GCiAgICAgcmV0dXJuIG5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uOwogfQogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorc3Rh
dGljIHZvaWQgYWNjdW11bGF0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhSZXBhaW50Q29udGFpbmVy
SGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVyUmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgIGlmICghZG9jdW1lbnQtPnRvdWNo
RXZlbnRUYXJnZXRzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRU
YXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBm
b3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5i
ZWdpbigpOyBpdGVyICE9IHRhcmdldHMtPmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0
ZXItPmtleSA9PSBkb2N1bWVudCkgeworICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcg
PSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgICAgICAgICAgICAgIHZpZXctPmFkZFJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHMocmVwYWludENvbnRhaW5lclJlY3RzKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpdGVyLT5rZXktPmlzRG9jdW1l
bnROb2RlKCkgJiYgaXRlci0+a2V5ICE9IGRvY3VtZW50KSB7CisgICAgICAgICAgICBhY2N1bXVs
YXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlcGFpbnRDb250YWluZXJSZWN0cywgc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihpdGVyLT5rZXkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdGVyLT5rZXktPnJl
bmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJlci0+YWRkUmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0cyhyZXBhaW50Q29udGFpbmVyUmVjdHMpOworICAgIH0KK30KKyNlbmRpZgorCitSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlVG91
Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NF
UlQoZG9jdW1lbnQpOworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgcmVwYWludENv
bnRhaW5lclJlY3RzOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBpZiAo
IWRvY3VtZW50LT52aWV3KCkpCisgICAgICAgIHJldHVybiByZXBhaW50Q29udGFpbmVyUmVjdHM7
CisKKyAgICBhY2N1bXVsYXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlcGFpbnRDb250YWluZXJS
ZWN0cywgZG9jdW1lbnQpOworI2VuZGlmCisgICAgcmV0dXJuIHJlcGFpbnRDb250YWluZXJSZWN0
czsKK30KKwogdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hl
ZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJD
b3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0
UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTAsNiArNTEsNyBAQCB0eXBlZGVmIHVpbnQ2
NF90IFNjcm9sbGluZ05vZGVJRDsKIAogZW51bSBTY3JvbGxpbmdOb2RlVHlwZSB7IFNjcm9sbGlu
Z05vZGUsIEZpeGVkTm9kZSB9OwogCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwogY2xh
c3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsKQEAgLTE0OSw3ICsxNTEsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFu
Z2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIq
LCBib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRvdWNo
RXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1lbnQqKSB7IH0KIAorICAgIFJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHMgY29tcHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25z
dCBEb2N1bWVudCopOwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKFBhZ2UqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21p
dW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsNyArMTE0LDIzIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1
bTo6ZnJhbWUKICAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFtZXMs
IG92ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlm
IHRoZQogICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5vdCB0
aGUgbWFpbiBmcmFtZS4KICAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBjb21w
dXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9pbnQo
KSk7CisgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyB0b3VjaEV2ZW50VGFyZ2V0UmVj
dHMgPSBjb21wdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKG1fcGFnZS0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCkpOwogICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uKTsKKyAgICBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdl
dFJlY3RzKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3Vj
aEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAg
ICAvLyBXYWl0IHVudGlsIGFmdGVyIGxheW91dCB0byB1cGRhdGUuCisgICAgaWYgKG1fcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJl
Zm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xs
TGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygp
KSk7CisgICAgaWYgKG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICBSZXBhaW50
Q29udGFpbmVySGl0VGVzdFJlY3RzIHRvdWNoRXZlbnRUYXJnZXRSZWN0cyA9IGNvbXB1dGVUb3Vj
aEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1lbnQpOworICAgICAgICBzZXRUb3VjaEV2ZW50VGFyZ2V0
UmVjdHModG91Y2hFdmVudFRhcmdldFJlY3RzKTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmll
dyogZnJhbWVWaWV3KQpAQCAtMjA5LDYgKzIyNSwyMCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OnNldE5vCiAgICAgfQogfQogCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBhaW50Q29udGFpbmVy
SGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVyUmVjdHMpCit7CisgICAgZm9yIChSZXBhaW50
Q29udGFpbmVySGl0VGVzdFJlY3RzOjpjb25zdF9pdGVyYXRvciBpdGVyID0gcmVwYWludENvbnRh
aW5lclJlY3RzLmJlZ2luKCk7IGl0ZXIgIT0gcmVwYWludENvbnRhaW5lclJlY3RzLmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgV2ViVmVjdG9yPFdlYlJlY3Q+IHdlYlJlY3RzKGl0ZXItPnZhbHVl
LnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICB3ZWJSZWN0c1tpXSA9IGl0ZXItPnZhbHVlW2ldOworCisg
ICAgICAgIEFTU0VSVChpdGVyLT5rZXktPmxheWVyKCkpOworICAgICAgICBXZWJMYXllciogd2Vi
TGF5ZXIgPSBpdGVyLT5rZXktPmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCk7CisgICAgICAgIEFTU0VSVCh3ZWJMYXllcik7CisgICAgICAgIHdlYkxh
eWVyLT5zZXRUb3VjaEV2ZW50SGFuZGxlclJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291
bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBu
ZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBz
byBncmFiIHRoZSByb290IG91cnNlbHZlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmgJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29y
a2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUg
Y2FsbGVkIHdoZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xs
IGFyZWEgY2hhbmdlcy4KICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXll
ckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNo
b3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJl
bW92ZWQsIG9yIG1vdmVkLgorICAgIHZpcnR1YWwgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVj
dHNDaGFuZ2VkKGNvbnN0IERvY3VtZW50KikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJh
bWVWaWV3Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9z
aXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCiAgICAgdm9p
ZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyAgICB2b2lkIHNldFRvdWNoRXZlbnRUYXJn
ZXRSZWN0cyhjb25zdCBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJik7CiAgICAgdm9pZCBz
ZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKTsKICAgICBQYXNzT3duUHRyPFdlYktp
dDo6V2ViU2Nyb2xsYmFyTGF5ZXI+IGNyZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciosIFdl
YktpdDo6V2ViTGF5ZXIqIHNjcm9sbExheWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFw
aGljc0xheWVyLCBGcmFtZVZpZXcqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBACiAj
aWYgRU5BQkxFKENTU19FWENMVVNJT05TKQogI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby5oIgogI2VuZGlmCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyNpbmNsdWRlICJSZW5k
ZXJMYXllckJhY2tpbmcuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcg
bmFtZXNwYWNlIFdURjsKQEAgLTY5MjUsNiArNjkyOCw0NiBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0CiAgICAgICAgIGlubGluZUVsZW1lbnRDb250aW51YXRpb24o
KS0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZsb29yZWRMYXlvdXRQb2ludChhZGRpdGlvbmFs
T2Zmc2V0ICsgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+
bG9jYXRpb24oKSAtIGxvY2F0aW9uKCkpKTsKIH0KIAordm9pZCBSZW5kZXJCbG9jazo6YWRkUmVw
YWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiBy
ZXBhaW50Q29udGFpbmVyUmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJl
bnRSZXBhaW50Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgcmVwYWludE9mZnNldCkgY29u
c3QKK3sKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFJlcGFpbnRPZmZzZXQgPSByZXBhaW50T2Zm
c2V0OworICAgIGlmICghY3VycmVudFJlcGFpbnRDb250YWluZXIgfHwgaGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSkKKyAgICAgICAgcmVwYWludENvbnRhaW5lckFuZE9mZnNldChjdXJyZW50UmVwYWlu
dENvbnRhaW5lciwgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0KTsKKworICAgIGlmICghY3VycmVudFJl
cGFpbnRDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxJbnRSZWN0PiBy
ZXN1bHQ7CisKKyAgICBpZiAod2lkdGgoKSAmJiBoZWlnaHQoKSkKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChwaXhlbFNuYXBwZWRJbnRSZWN0KGFkanVzdGVkUmVwYWludE9mZnNldCwgc2l6ZSgpKSk7
CisKKyAgICBpZiAoaGFzSG9yaXpvbnRhbExheW91dE92ZXJmbG93KCkgfHwgaGFzVmVydGljYWxM
YXlvdXRPdmVyZmxvdygpKSB7CisgICAgICAgIGZvciAoUm9vdElubGluZUJveCogY3VyciA9IGZp
cnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgeworICAgICAg
ICAgICAgTGF5b3V0VW5pdCB0b3AgPSBtYXg8TGF5b3V0VW5pdD4oY3Vyci0+bGluZVRvcCgpLCBj
dXJyLT50b3AoKSk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IG1pbjxMYXlvdXRV
bml0PihjdXJyLT5saW5lQm90dG9tKCksIGN1cnItPnRvcCgpICsgY3Vyci0+aGVpZ2h0KCkpOwor
ICAgICAgICAgICAgTGF5b3V0UmVjdCByZWN0KGFkanVzdGVkUmVwYWludE9mZnNldC54KCkgKyBj
dXJyLT54KCksIGFkanVzdGVkUmVwYWludE9mZnNldC55KCkgKyB0b3AsIGN1cnItPndpZHRoKCks
IGJvdHRvbSAtIHRvcCk7CisgICAgICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQo
KTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjdXJy
LT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkgJiYgY3Vyci0+aXNCb3goKSkgewor
ICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChjdXJyKTsKKyAgICAgICAg
ICAgIGJveC0+YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhyZXBhaW50Q29udGFpbmVy
UmVjdHMsIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCAgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0ICsg
Ym94LT5sb2NhdGlvbk9mZnNldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghcmVz
dWx0LmlzRW1wdHkoKSkgeworICAgICAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzOjpp
dGVyYXRvciBpdGVyID0gcmVwYWludENvbnRhaW5lclJlY3RzLmZpbmQoY3VycmVudFJlcGFpbnRD
b250YWluZXIpOworICAgICAgICBpZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVyUmVjdHMuZW5k
KCkpCisgICAgICAgICAgICBpdGVyID0gcmVwYWludENvbnRhaW5lclJlY3RzLmFkZChjdXJyZW50
UmVwYWludENvbnRhaW5lciwgcmVzdWx0KS5pdGVyYXRvcjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7CisgICAgfQorfQorCiBSZW5kZXJCb3gq
IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5k
ZXJPYmplY3QqIHBhcmVudCkgY29uc3QKIHsKICAgICBpZiAoaXNBbm9ueW1vdXNDb2x1bW5zQmxv
Y2soKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lv
biAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNTA2LDYgKzUwNiw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwg
dm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2lu
dCYpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMo
UmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5
b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJREU7CisKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE9u
bHkgdXNlZCBieSBSZW5kZXJTVkdUZXh0LCB3aGljaCBleHBsaWNpdGVseSBvdmVycmlkZXMgUmVu
ZGVyQmxvY2s6OmxheW91dEJsb2NrKCksIGRvIE5PVCB1c2UgZm9yIGFueXRoaW5nIGVsc2UuCiAg
ICAgdm9pZCBmb3JjZUxheW91dElubGluZUNoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDYgKzQ4MCwy
OSBAQCB2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yCiAgICAgICAgIHJl
Y3RzLmFwcGVuZChwaXhlbFNuYXBwZWRJbnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkp
OwogfQogCit2b2lkIFJlbmRlckJveDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhS
ZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVyUmVjdHMsIGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgcmVwYWludE9mZnNldCkgY29uc3QKK3sKKyAgICBMYXlvdXRQb2ludCBhZGp1
c3RlZFJlcGFpbnRPZmZzZXQgPSByZXBhaW50T2Zmc2V0OworICAgIGlmICghY3VycmVudFJlcGFp
bnRDb250YWluZXIgfHwgaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgcmVwYWludENv
bnRhaW5lckFuZE9mZnNldChjdXJyZW50UmVwYWludENvbnRhaW5lciwgYWRqdXN0ZWRSZXBhaW50
T2Zmc2V0KTsKKworICAgIGlmICghY3VycmVudFJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICh3aWR0aCgpICYmIGhlaWdodCgpKSB7CisgICAgICAgIEludFJlY3Qg
cmVzdWx0KHBpeGVsU25hcHBlZEludFJlY3QoYWRqdXN0ZWRSZXBhaW50T2Zmc2V0LCBzaXplKCkp
KTsKKworICAgICAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzOjppdGVyYXRvciBpdGVy
ID0gcmVwYWludENvbnRhaW5lclJlY3RzLmZpbmQoY3VycmVudFJlcGFpbnRDb250YWluZXIpOwor
ICAgICAgICBpZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVyUmVjdHMuZW5kKCkpIHsKKyAgICAg
ICAgICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHRWZWN0b3I7CisgICAgICAgICAgICByZXN1bHRW
ZWN0b3IuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXBhaW50Q29udGFpbmVyUmVjdHMu
YWRkKGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCByZXN1bHRWZWN0b3IpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLmFwcGVuZChyZXN1bHQpOworICAgIH0KK30KKwor
CiBMYXlvdXRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGlvbkJveCgpIGNvbnN0CiB7CiAgICAgTGF5
b3V0UmVjdCByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShy
ZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBM
YXlvdXRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCopIGNv
bnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZFJl
cGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYs
IGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyID0g
MCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJREU7CisK
ICAgICAvLyBVc2UgdGhpcyB3aXRoIGNhdXRpb24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEK
ICAgICBSZW5kZXJCb3gqIHByZXZpb3VzU2libGluZ0JveCgpIGNvbnN0OwogICAgIFJlbmRlckJv
eCogbmV4dFNpYmxpbmdCb3goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyNSw2ICsxNDI1
LDQ0IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWMKICAgICB9CiB9
CiAKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJl
cGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJSZWN0cywgY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiByZXBhaW50T2Zmc2V0KSBjb25zdAoreworICAgIExheW91dFBvaW50IGFkanVz
dGVkUmVwYWludE9mZnNldCA9IHJlcGFpbnRPZmZzZXQ7CisgICAgaWYgKCFjdXJyZW50UmVwYWlu
dENvbnRhaW5lciB8fCBoYXNTZWxmUGFpbnRpbmdMYXllcigpKQorICAgICAgICByZXBhaW50Q29u
dGFpbmVyQW5kT2Zmc2V0KGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCBhZGp1c3RlZFJlcGFpbnRP
ZmZzZXQpOworCisgICAgaWYgKCFjdXJyZW50UmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgVmVjdG9yPEludFJlY3Q+IHJlc3VsdDsKKyAgICBBYnNvbHV0ZVJlY3RzR2Vu
ZXJhdG9yQ29udGV4dCBjb250ZXh0KHJlc3VsdCwgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0KTsKKyAg
ICBnZW5lcmF0ZUxpbmVCb3hSZWN0cyhjb250ZXh0KTsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkg
eworICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpICYmICFjdXJyLT5pc0xpc3RNYXJrZXIoKSkg
eworICAgICAgICAgICAgTGF5b3V0UG9pbnQgcG9zKGFkanVzdGVkUmVwYWludE9mZnNldCk7Cisg
ICAgICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkKKyAgICAgICAgICAgICAgICBwb3MubW92ZSh0
b1JlbmRlckJveChjdXJyKS0+bG9jYXRpb25PZmZzZXQoKSk7CisgICAgICAgICAgICBjdXJyLT5h
ZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKHJlcGFpbnRDb250YWluZXJSZWN0cywgY3Vy
cmVudFJlcGFpbnRDb250YWluZXIsIHBvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
Y29udGludWF0aW9uKCkpIHsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbigpLT5pc0lubGluZSgp
KQorICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMocmVwYWludENvbnRhaW5lclJlY3RzLCBjdXJyZW50UmVwYWludENvbnRhaW5lciwgdG9Q
b2ludChhZGp1c3RlZFJlcGFpbnRPZmZzZXQgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Js
b2NrKCktPmxvY2F0aW9uKCkgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRkUmVwYWludENvbnRhaW5l
ckhpdFRlc3RSZWN0cyhyZXBhaW50Q29udGFpbmVyUmVjdHMsIGN1cnJlbnRSZXBhaW50Q29udGFp
bmVyLCB0b1BvaW50KGFkanVzdGVkUmVwYWludE9mZnNldCArIHRvUmVuZGVyQm94KGNvbnRpbnVh
dGlvbigpKS0+bG9jYXRpb24oKSAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpKSk7Cisg
ICAgfQorCisgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHM6Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVyUmVjdHMu
ZmluZChjdXJyZW50UmVwYWludENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFp
bnRDb250YWluZXJSZWN0cy5lbmQoKSkKKyAgICAgICAgICAgIHJlcGFpbnRDb250YWluZXJSZWN0
cy5hZGQoY3VycmVudFJlcGFpbnRDb250YWluZXIsIHJlc3VsdCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGl0ZXItPnZhbHVlLmFwcGVuZChyZXN1bHQpOworICAgIH0KK30KKwogdm9pZCBS
ZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmICghaGFzT3V0bGlu
ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNp
b24gMTM2NDA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
ICAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2lu
dCYpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMo
UmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5
b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJREU7CisKICAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y29udGludWF0aW9uOwogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRD
b250aW51YXRpb247CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMywyMyBAQCBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQqIFJlbmRlck9iamVjdDo6cmVuCiAgICAgcmV0dXJuIG9iamVjdCAmJiBv
YmplY3QtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkgPyB0b1JlbmRlck5hbWVkRmxvd1RocmVh
ZChvYmplY3QpIDogMDsKIH0KIAordm9pZCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRDb250YWluZXJB
bmRPZmZzZXQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdComIHJlcGFpbnRDb250YWluZXIs
IExheW91dFBvaW50JiBvZmZzZXQpIGNvbnN0Cit7CisgICAgcmVwYWludENvbnRhaW5lciA9IGNv
bnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICBpZiAoIXJlcGFpbnRDb250YWluZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFNlbGYtcGFpbnRpbmcgbGF5ZXJzIHN1YnRyYWN0IHRoZSByZW5k
ZXJlcidzIGxvY2F0aW9uLiBPdGhlcndpc2UsIHdlIG5lZWQgdG8gbWFwIG91ciBsb2NhdGlvbiB0
byBjb250YWluZXIgc3BhY2UuCisgICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykKKyAg
ICAgICAgb2Zmc2V0ID0gTGF5b3V0UG9pbnQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgVHJhbnNm
b3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGly
ZWN0aW9uLCBGbG9hdFBvaW50KCkpOworICAgICAgICBtYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFp
bnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBBcHBseUNvbnRhaW5lckZsaXAgfCBVc2VUcmFu
c2Zvcm1zIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpOworICAgICAgICB0cmFuc2Zvcm1TdGF0
ZS5mbGF0dGVuKCk7CisgICAgICAgIG9mZnNldCA9IExheW91dFBvaW50KHRyYW5zZm9ybVN0YXRl
Lmxhc3RQbGFuYXJQb2ludCgpKTsKKyAgICB9Cit9CisKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmpl
Y3Q6OmZpcnN0TGluZUJsb2NrKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ4LDcgKzE0OCw3IEBAIHN0cnVjdCBBbm5vdGF0ZWRSZWdpb25WYWx1ZSB7CiAjZW5kaWYKIAog
dHlwZWRlZiBXVEY6Okhhc2hTZXQ8Y29uc3QgUmVuZGVyT2JqZWN0Kj4gUmVuZGVyT2JqZWN0QW5j
ZXN0b3JMaW5lYm94RGlydHlTZXQ7Ci0KK3R5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqLCBWZWN0b3I8SW50UmVjdD4gPiBSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzOwogI2lmbmRlZiBOREVCVUcKIGNvbnN0IGludCBzaG93VHJlZUNoYXJhY3Rlck9m
ZnNldCA9IDM5OwogI2VuZGlmCkBAIC05NDUsNiArOTQ1LDggQEAgcHVibGljOgogICAgIAogICAg
IHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBM
YXlvdXRQb2ludCYpIHsgfTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRSZXBhaW50Q29udGFpbmVy
SGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0IExheW91
dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IHsgfTsKKwogICAgIExheW91dFJlY3QgYWJz
b2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBvdXRsaW5l
Qm91bmRzRm9yUmVwYWludCgwKTsKQEAgLTk1OCw2ICs5NjAsOCBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAgICAgaW5saW5lIGJvb2wgbGF5ZXJDcmVhdGlvbkFsbG93ZWRGb3JTdWJ0cmVlKCkgY29u
c3Q7CiAKKyAgICB2b2lkIHJlcGFpbnRDb250YWluZXJBbmRPZmZzZXQoY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdComLCBMYXlvdXRQb2ludCYpIGNvbnN0OworCiAgICAgLy8gT3ZlcnJpZGVz
IHNob3VsZCBjYWxsIHRoZSBzdXBlcmNsYXNzIGF0IHRoZSBlbmQKICAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0
eWxlKTsKICAgICAvLyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xhc3MgYXQgdGhl
IHN0YXJ0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZp
c2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2Miw2ICsyNjIsMjUgQEAgdm9pZCBSZW5kZXJWaWV3OjptYXBB
YnNvbHV0ZVRvTG9jYWxQb2ludAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJWaWV3OjphZGRSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJl
cGFpbnRDb250YWluZXJSZWN0cywgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVu
dFJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiByZXBhaW50T2Zmc2V0KSBjb25z
dAoreworICAgIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyID0gY29udGFpbmVyRm9yUmVwYWludCgp
OworICAgIGlmICghY3VycmVudFJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEludFJlY3QgZG9jdW1lbnRSZWN0ID0gdW5zY2FsZWREb2N1bWVudFJlY3QoKTsKKyAgICBp
ZiAoZG9jdW1lbnRSZWN0LndpZHRoKCkgJiYgZG9jdW1lbnRSZWN0LmhlaWdodCgpKSB7CisgICAg
ICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1l
bnRSZWN0KTsKKworICAgICAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzOjppdGVyYXRv
ciBpdGVyID0gcmVwYWludENvbnRhaW5lclJlY3RzLmZpbmQoY3VycmVudFJlcGFpbnRDb250YWlu
ZXIpOworICAgICAgICBpZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVyUmVjdHMuZW5kKCkpCisg
ICAgICAgICAgICByZXBhaW50Q29udGFpbmVyUmVjdHMuYWRkKGN1cnJlbnRSZXBhaW50Q29udGFp
bmVyLCByZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IHJl
c3VsdDsKKyAgICB9Cit9CisKIGJvb2wgUmVuZGVyVmlldzo6cmVxdWlyZXNDb2x1bW5zKGludCBk
ZXNpcmVkQ29sdW1uQ291bnQpIGNvbnN0CiB7CiAgICAgaWYgKG1fZnJhbWVWaWV3KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiAxMzY0MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9u
cyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIE9WRVJSSURFOwogCisgICAgdmlydHVh
bCB2b2lkIGFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMoUmVwYWludENvbnRhaW5lckhp
dFRlc3RSZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50
Q29udGFpbmVyID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3Qg
T1ZFUlJJREU7CisKICAgICBlbnVtIFNlbGVjdGlvblJlcGFpbnRNb2RlIHsgUmVwYWludE5ld1hP
Uk9sZCwgUmVwYWludE5ld01pbnVzT2xkLCBSZXBhaW50Tm90aGluZyB9OwogICAgIHZvaWQgc2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0
KiBlbmQsIGludCBlbmRQb3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlID0gUmVwYWludE5ld1hPUk9s
ZCk7CiAgICAgdm9pZCBnZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiYgc3RhcnRSZW5kZXJlciwg
aW50JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIGludCYgZW5kT2Zm
c2V0KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
Um9vdC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2Fj
aGUuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCkBAIC05MSw2ICs5MiwxMiBAQCB2
b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzCiAgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3goKSwgMCAvKiBtb2RlICovLCB3
YXNGaXhlZCkpOwogfQogCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphZGRSZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRD
b250YWluZXJSZWN0cywgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFp
bnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiByZXBhaW50T2Zmc2V0KSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBjYWxjdWxhdGUgdGhlIG1pbmltYWwgcmVjdC4KKyAgICByZXR1cm4gU1ZH
UmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KHRoaXMpLT5hZGRSZXBhaW50Q29udGFp
bmVySGl0VGVzdFJlY3RzKHJlcGFpbnRDb250YWluZXJSZWN0cywgY3VycmVudFJlcGFpbnRDb250
YWluZXIsIHJlcGFpbnRPZmZzZXQpOworfQorCiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp3
aWxsQmVEZXN0cm95ZWQoKQogewogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95
ZWQodGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01v
ZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBi
b29sKiB3YXNGaXhlZCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUmVwYWludENvbnRh
aW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBM
YXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIHZpcnR1
YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgTWFwQ29vcmRpbmF0ZXNGbGFncyA9
IEFwcGx5Q29udGFpbmVyRmxpcCB8IFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zLCBib29sKiB3YXNG
aXhlZCA9IDApIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0
KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFu
Y2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3QgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CShyZXZpc2lvbiAxMzY0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUcmVl
QXNUZXh0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNjaGVtZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNp
bmNsdWRlICJTZWxlY3RSdWxlRmVhdHVyZVNldC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0xMTk2LDggKzExOTcsNDEgQEAg
dW5zaWduZWQgSW50ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNvdQogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQo
KTsKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEhhbmRsZXJzID0gZG9jdW1l
bnQtPnRvdWNoRXZlbnRUYXJnZXRzKCk7CisgICAgaWYgKCF0b3VjaEhhbmRsZXJzKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3IgKFRvdWNoRXZl
bnRUYXJnZXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b3VjaEhhbmRsZXJzLT5iZWdpbigp
OyBpdGVyICE9IHRvdWNoSGFuZGxlcnMtPmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGNvdW50ICs9
IGl0ZXItPnZhbHVlOworICAgIHJldHVybiBjb3VudDsKK30KKworI2lmIEVOQUJMRShUT1VDSF9F
VkVOVF9UUkFDS0lORykKK1Bhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEludGVybmFsczo6dG91
Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSB8fCAhZG9j
dW1lbnQtPnBhZ2UoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0OjpjcmVhdGUoKTsK
KworICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KworICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFk
czsKKworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgcmVwYWludENvbnRhaW5lclJl
Y3RzID0gZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKS0+Y29tcHV0ZVRv
dWNoRXZlbnRUYXJnZXRSZWN0cyhkb2N1bWVudCk7CisKKyAgICBmb3IgKFJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVyUmVj
dHMuYmVnaW4oKTsgaXRlciAhPSByZXBhaW50Q29udGFpbmVyUmVjdHMuZW5kKCk7ICsraXRlcikg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGl0ZXItPmtleS0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFF1YWQoaXRlci0+dmFsdWVbaV0pLCBVc2VUcmFuc2Zvcm1zIHwgQXBwbHlDb250YWlu
ZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Q2xpZW50UmVjdExpc3Q6OmNyZWF0ZShxdWFkcyk7CiB9CisjZW5kaWYKIAogUGFzc1JlZlB0cjxO
b2RlTGlzdD4gSW50ZXJuYWxzOjpub2Rlc0Zyb21SZWN0KERvY3VtZW50KiBkb2N1bWVudCwgaW50
IHgsIGludCB5LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsCiAg
ICAgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcsIGJvb2wgaWdu
b3JlQ2xpcHBpbmcsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTM2NDA4
KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcxLDYgKzE3MSw5IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5k
bGVyQ291bnQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdW5zaWduZWQgdG91Y2hF
dmVudEhhbmRsZXJDb3VudChEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gdG91
Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2Vu
ZGlmCiAKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBub2Rlc0Zyb21SZWN0KERvY3VtZW50Kiwg
aW50IHgsIGludCB5LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcs
CiAgICAgICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBi
b29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkocmV2aXNp
b24gMTM2NDA4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDkgQEAKIAogICAgIHVuc2lnbmVkIGxvbmcgd2hlZWxF
dmVudEhhbmRsZXJDb3VudChpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRp
b24pOwogICAgIHVuc2lnbmVkIGxvbmcgdG91Y2hFdmVudEhhbmRsZXJDb3VudChpbiBEb2N1bWVu
dCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOworI2lmIGRlZmluZWQoRU5BQkxFX1RP
VUNIX0VWRU5UX1RSQUNLSU5HKSAmJiBFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkcKKyAgICBD
bGllbnRSZWN0TGlzdCB0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoaW4gRG9jdW1lbnQgZG9j
dW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogCiAgICAgTm9kZUxpc3Qgbm9k
ZXNGcm9tUmVjdChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gbG9uZyB4LCBpbiBsb25nIHksCiAg
ICAgICAgIGluIHVuc2lnbmVkIGxvbmcgdG9wUGFkZGluZywgaW4gdW5zaWduZWQgbG9uZyByaWdo
dFBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgYm90dG9tUGFkZGluZywgaW4gdW5zaWduZWQgbG9u
ZyBsZWZ0UGFkZGluZywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MzY0MjQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEyLTAzICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3Qg
cmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rpb24gaW4gdGhlIGNvbXBvc2l0
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzkx
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJs
aW5nIHRvdWNoIGV2ZW50IHRhcmdldCByZWdpb24gdHJhY2tpbmcuCisKKyAgICAgICAgKiBmZWF0
dXJlcy5neXBpOgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRvdWNoRXZlbnRU
eXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBsdWdp
bkNvbnRhaW5lckltcGwpOgorCiAyMDEyLTEyLTAzICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IHJlbW92ZSBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OnRyYW5zYWN0aW9uKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
ZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1
cmVzLmd5cGkJKHJldmlzaW9uIDEzNjQwOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVh
dHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBACiAgICAgICAnRU5B
QkxFX1RPVUNIX0FESlVTVE1FTlQ9MScsCiAgICAgICAnRU5BQkxFX1RPVUNIX0VWRU5UUz08KGVu
YWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTwo
ZW5hYmxlX3RvdWNoX2ljb25fbG9hZGluZyknLAorICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVOVF9U
UkFDS0lORz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hfU0xJ
REVSPTEnLAogICAgICAgJ0VOQUJMRV9WOF9TQ1JJUFRfREVCVUdfU0VSVkVSPTEnLAogICAgICAg
J0VOQUJMRV9WSURFTz0xJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBs
dWdpbkNvbnRhaW5lckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiAxMzY0MDgpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTI3LDkgKzUyNyw5IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6cmVxdWVzdFRvdWMKICAgICAgICAgcmV0dXJuOwogICAgIG1fdG91Y2hFdmVudFJlcXVlc3RU
eXBlID0gcmVxdWVzdFR5cGU7CiAgICAgaWYgKG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRv
dWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogICAgIGVsc2UKLSAgICAgICAg
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAg
ICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1f
ZWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c2V0V2FudHNXaGVl
bEV2ZW50cyhib29sIHdhbnRzV2hlZWxFdmVudHMpCkBAIC02ODIsNyArNjgyLDcgQEAgV2ViUGx1
Z2luQ29udGFpbmVySW1wbDo6fldlYlBsdWdpbkNvbnRhaQogI2VuZGlmCiAKICAgICBpZiAobV90
b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0gVG91Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAg
ICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOwor
ICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KG1fZWxlbWVudCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGx1Z2luTG9hZE9i
c2VydmVycy5zaXplKCk7ICsraSkKICAgICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzW2ldLT5j
bGVhclBsdWdpbkNvbnRhaW5lcigpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2NDI0KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTIt
MTItMDMgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0
IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50
cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3It
dG91Y2gtaGl0LXJlY3RzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEyLTAzICBQaGlsaXAgUm9nZXJz
ICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAgICAgSW52YWxpZGF0ZSBTVkcgd2lkdGggb24gd2lk
dGggYXR0cmlidXRlIGNoYW5nZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50
cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9j
b21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjMgQEAKK1RoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2
ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJl
ZS4gVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMg
b2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuCisKK25vcm1hbEZsb3dbMF06ICg4LCA3MiwgNzg0
LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMF06ICg4LCAxMDIsIDc4NCwgMTApCithYnNv
bHV0ZUNoaWxkQ29udGFpbmVyWzFdOiAoMTE4LCAzMDAsIDE0MCwgMTApCityZWxhdGl2ZUNoaWxk
Q29udGFpbmVyWzBdOiAoOCwgMTUyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclsx
XTogKDgsIDE1MiwgMjYwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzBdOiAoOCwgMjAyLCAx
MDAsIDgwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMV06ICg4LCAyMDIsIDExMCwgMTApCitvdmVy
aGFuZ2luZ0NvbnRhaW5lclsyXTogKDgsIDIwMiwgNzg0LCAxMCkKK292ZXJoYW5naW5nQ29udGFp
bmVyWzNdOiAoOCwgMjEyLCA1MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls0XTogKDgsIDIy
MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzVdOiAoOCwgMjMyLCA1MCwgMTApCitv
dmVyaGFuZ2luZ0NvbnRhaW5lcls2XTogKDgsIDI0MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29u
dGFpbmVyWzddOiAoOCwgMjUyLCA1MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls4XTogKDgs
IDI2MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzldOiAoOCwgMjcyLCA1MCwgMTAp
Cit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzBdOiAoNjIsIDQwMSwgNjYxLCAzMikKK3RyYW5z
Zm9ybWVkQ2hpbGRDb250YWluZXJbMV06ICg4LCA0MTIsIDc2OSwgMTApCitjb250aW51YXRpb25b
MF06ICgxMDgsIDQ2MiwgMTAwLCAxMCkKK2NvbnRpbnVhdGlvblsxXTogKDgsIDQ3MiwgNzY5LCAx
MCkKK2NvbnRpbnVhdGlvblsyXTogKDgsIDQ3MiwgNzY5LCAxMCkKKwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1o
aXQtcmVjdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91
Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyN0cmFu
c2Zvcm1lZENoaWxkIHsKKwktd2Via2l0LXRyYW5zZm9ybTogcm90YXRlM2QoMC4yLCAxLCAwLCAz
NWdyYWQpOworfQorI2Fic29sdXRlQ2hpbGQgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl0b3A6
IDMwMHB4OworfQorI3JlbGF0aXZlQ2hpbGQgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwl0b3A6
IDIwMHB4OworfQorI292ZXJoYW5naW5nQ29udGFpbmVyIHsKKwloZWlnaHQ6IDEwcHg7Cit9Cisj
b3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIHsKKwl3aWR0aDogMTAwcHg7CisJZmxvYXQ6IGxlZnQ7
Cit9CisjdGVzdHMgeworCWZvbnQ6IDEwcHggQWhlbTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0IHRl
c3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVuIGlu
IER1bXBSZW5kZXJUcmVlLgorVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhlIGhp
dCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuPC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InRlc3RzIj4KKwk8ZGl2IGlkPSJub3JtYWxGbG93
Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4+c3VtPC9zcGFuPi4KKwk8L2Rpdj4KKwk8ZGl2IGlk
PSJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9ImFi
c29sdXRlQ2hpbGQiPkFic29sdXRlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9InJl
bGF0aXZlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0icmVsYXRp
dmVDaGlsZCI+UmVsYXRpdmUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0ib3Zlcmhh
bmdpbmdDb250YWluZXIiPgorCQk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0Zsb2F0aW5nQ2hpbGQiPk92
ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJo
YW5naW5nIGZsb2F0PC9kaXY+CisJPC9kaXY+CisJPGRpdiBpZD0idHJhbnNmb3JtZWRDaGlsZENv
bnRhaW5lciI+CisJCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGQiPlRyYW5zZm9ybWVkPC9kaXY+
CisJPC9kaXY+CisJPGRpdj4KKwkJPGIgaWQ9ImNvbnRpbnVhdGlvbiI+VGhpcyBiIHRhZworCQk8
ZGl2PmNhdXNlcyBhPC9kaXY+CisJCWNvbnRpbnVhdGlvbjwvYj4KKwk8L2Rpdj4KKzwvZGl2Pgor
PHNjcmlwdD4KK2lmICghd2luZG93LnRlc3RSdW5uZXIpCisJcmV0dXJuOworCit3aW5kb3cudGVz
dFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxpc3RlbmVyKCkgeyB9CisKK2Z1bmN0
aW9uIGxvZyhtc2cpIHsKKwl2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4p
OworICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9uIHNv
cnRSZWN0cyhhLCBiKSB7CisJcmV0dXJuIGEudG9wIC0gYi50b3A7Cit9CisKK2Z1bmN0aW9uIGxv
Z1JlY3RzKGlkKSB7CisJZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKwll
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2UpOwor
CXJlY3RzID0gd2luZG93LmludGVybmFscy50b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoZG9j
dW1lbnQpOworCXZhciBzb3J0ZWRSZWN0cyA9IG5ldyBBcnJheSgpOworCWZvciAodmFyIGkgPSAw
OyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCXNvcnRlZFJlY3RzW2ldID0gcmVjdHNbaV07CisJ
c29ydGVkUmVjdHMuc29ydChzb3J0UmVjdHMpOworCWZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMu
bGVuZ3RoOyArK2kpCisJCWxvZyhpZCArICJbIiArIGkgKyAiXTogKCIgKyBzb3J0ZWRSZWN0c1tp
XS5sZWZ0ICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLnRvcCArICIsICIgKyBzb3J0ZWRSZWN0c1tp
XS53aWR0aCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS5oZWlnaHQgKyAiKSIpOworCWVsZW1lbnQu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7Cit9CisK
K2xvZ1JlY3RzKCJub3JtYWxGbG93Iik7Citsb2dSZWN0cygiYWJzb2x1dGVDaGlsZENvbnRhaW5l
ciIpOworbG9nUmVjdHMoInJlbGF0aXZlQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJvdmVy
aGFuZ2luZ0NvbnRhaW5lciIpOworbG9nUmVjdHMoInRyYW5zZm9ybWVkQ2hpbGRDb250YWluZXIi
KTsKK2xvZ1JlY3RzKCJjb250aW51YXRpb24iKTsKKwordmFyIHRlc3RDb250YWluZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHMiKTsKK3Rlc3RDb250YWluZXIucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177507</attachid>
            <date>2012-12-04 10:33:58 -0800</date>
            <delta_ts>2012-12-04 14:44:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121204103123.patch</filename>
            <type>text/plain</type>
            <size>49508</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjUyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxMi0xMi0wMyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuIFRoZSBuZXcgZnVuY3Rpb24gYWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cwor
ICAgICAgICBnZW5lcmF0ZXMgdGhlIGhpdCB0ZXN0IHJlY3RhbmdsZXMgZm9yIGEgZ2l2ZW4gbm9k
ZSBpbiB0aGVpciByZXBhaW50IGNvbnRhaW5lciBjb29yZGluYXRlcyBmb3Igc3BlZWR5CisgICAg
ICAgIHVwbG9hZGluZyB0byB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBUZXN0OiBwbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5o
dG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6Omhhc1RvdWNoRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudFRhcmdldHMpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpZE1vdmVUb05l
d0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZUJhc2U6OnJl
c3RvcmUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZVRvdWNoRXZlbnRUYXJn
ZXRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0
ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRU
b3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5oOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAg
KFJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaDoKKyAgICAgICAgKFJlbmRlcklubGluZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6CisgICAgICAg
IChSZW5kZXJPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
aDoKKyAgICAgICAgKFJlbmRlclZpZXcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAg
ICAoUmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hF
dmVudFRhcmdldENsaWVudFJlY3RzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgor
ICAgICAgICAoSW50ZXJuYWxzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisK
IDIwMTItMTItMDQgIEtlbiBLYW5pYSAgPGtrYW5pYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
SW5zcGVjdG9yOiBJbnRyb2R1Y2UgSW5wdXQuZGlzcGF0Y2hLZXlFdmVudCBhbmQgRE9NLmZvY3Vz
IGZvciB0eXBpbmcgc2ltdWxhdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gMTM2NTIzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDk0LDkgKzQ5NCw2IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJh
bWUsIGNvbnN0IEsKICAgICAsIG1fd3JpdGVSZWN1cnNpb25Jc1Rvb0RlZXAoZmFsc2UpCiAgICAg
LCBtX3dyaXRlUmVjdXJzaW9uRGVwdGgoMCkKICAgICAsIG1fd2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCgwKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLCBtX3RvdWNoRXZlbnRIYW5kbGVy
Q291bnQoMCkKLSNlbmRpZgogICAgICwgbV9wZW5kaW5nVGFza3NUaW1lcih0aGlzLCAmRG9jdW1l
bnQ6OnBlbmRpbmdUYXNrc1RpbWVyRmlyZWQpCiAgICAgLCBtX3NjaGVkdWxlZFRhc2tzQXJlU3Vz
cGVuZGVkKGZhbHNlKQogICAgICwgbV92aXN1YWxVcGRhdGVzQWxsb3dlZCh0cnVlKQpAQCAtNTU2
MSwzMyArNTU1OCw1NyBAQCB2b2lkIERvY3VtZW50OjpkaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxl
CiAgICAgd2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQodGhpcyk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCkKK3ZvaWQgRG9jdW1lbnQ6OmRpZEFkZFRv
dWNoRXZlbnRIYW5kbGVyKE5vZGUqIGhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKLSAgICArK21fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsKLSAgICBpZiAobV90b3VjaEV2ZW50
SGFuZGxlckNvdW50ID4gMSkKKyAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpCisg
ICAgICAgIG1fdG91Y2hFdmVudFRhcmdldHMgPSBhZG9wdFB0cihuZXcgVG91Y2hFdmVudFRhcmdl
dFNldCk7CisgICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+YWRkKGhhbmRsZXIpOworICAgIGlmIChE
b2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgeworICAgICAgICBwYXJlbnQtPmRp
ZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgICByZXR1cm47Ci0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOworICAgIH0KKyAgICBpZiAoUGFnZSogcGFnZSA9IHRo
aXMtPnBhZ2UoKSkgeworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICAgICAg
aWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCh0aGlzKTsKKyNlbmRpZgorICAgICAgICBp
ZiAobV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpID09IDEpCisgICAgICAgICAgICBwYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsKKyAgICB9CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKICNlbmRpZgogfQogCi12b2lkIERvY3VtZW50Ojpk
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRSZW1vdmVUb3Vj
aEV2ZW50SGFuZGxlcihOb2RlKiBoYW5kbGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgQVNTRVJUKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCk7Ci0gICAgLS1tX3RvdWNoRXZl
bnRIYW5kbGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCkKKyAgICBp
ZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQobV90b3VjaEV2ZW50VGFyZ2V0cy0+Y29udGFpbnMoaGFuZGxlcikpOworICAgIG1fdG91Y2hF
dmVudFRhcmdldHMtPnJlbW92ZShoYW5kbGVyKTsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9
IHBhcmVudERvY3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFBhZ2UqIHBhZ2Ug
PSB0aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
ICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdl
ZCh0aGlzKTsKKyNlbmRpZgorICAgIGlmIChtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKICAgICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewot
ICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPnRvdWNo
RXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZy
YW1lLT5kb2N1bWVudCgpLT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVu
dHMoZmFsc2UpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CiAjZW5kaWYKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEzNjUyMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNiArMjA2LDggQEAg
ZW51bSBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgewogfTsKIGNvbnN0IGludCBudW1Ob2RlTGlz
dEludmFsaWRhdGlvblR5cGVzID0gSW52YWxpZGF0ZU9uQW55QXR0ckNoYW5nZSArIDE7CiAKK3R5
cGVkZWYgSGFzaENvdW50ZWRTZXQ8Tm9kZSo+IFRvdWNoRXZlbnRUYXJnZXRTZXQ7CisKIGNsYXNz
IERvY3VtZW50IDogcHVibGljIENvbnRhaW5lck5vZGUsIHB1YmxpYyBUcmVlU2NvcGUsIHB1Ymxp
YyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQpAQCAtMTEx
MywxMyArMTExNSwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZW1vdmVXaGVlbEV2ZW50SGFu
ZGxlcigpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNpZ25lZCB0b3VjaEV2
ZW50SGFuZGxlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50SGFuZGxlckNvdW50
OyB9CisgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiAobV90
b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkgPyBtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkgOiBm
YWxzZTsgfQogI2Vsc2UKLSAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KCkgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgdm9pZCBkaWRBZGRUb3VjaEV2ZW50SGFu
ZGxlcigpOwotICAgIHZvaWQgZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICB2b2lk
IGRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKyAgICB2b2lkIGRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKE5vZGUqKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgY29u
c3QgVG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hFdmVudFRhcmdldHMoKSBjb25zdCB7IHJldHVy
biBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpOyB9CisjZWxzZQorICAgIGNvbnN0IFRvdWNoRXZl
bnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gMDsgfQorI2Vu
ZGlmCiAKICAgICBib29sIHZpc3VhbFVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV92
aXN1YWxVcGRhdGVzQWxsb3dlZDsgfQogCkBAIC0xNDkxLDcgKzE0OTksNyBAQCBwcml2YXRlOgog
ICAgIAogICAgIHVuc2lnbmVkIG1fd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotICAgIHVuc2lnbmVkIG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsKKyAg
ICBPd25QdHI8VG91Y2hFdmVudFRhcmdldFNldD4gbV90b3VjaEV2ZW50VGFyZ2V0czsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkocmV2aXNpb24gMTM2NTIzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjI4LDggKzIyMjgsOCBAQCB2b2lkIE5vZGU6OmRpZE1vdmVUb05l
d0RvY3VtZW50KERvY3VtZW50CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b3VjaEV2ZW50
TmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgRXZlbnRMaXN0ZW5lclZlY3RvciYg
bGlzdGVuZXJzID0gZ2V0RXZlbnRMaXN0ZW5lcnModG91Y2hFdmVudE5hbWVzW2ldKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBsaXN0ZW5lcnMuc2l6ZSgpOyArK2opIHsKLSAgICAg
ICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOwotICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAg
IG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0yMjU4LDcgKzIyNTgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5QWRk
RXZlbnRMaXN0ZW5lcihOCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1v
dXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRXaGVlbEV2ZW50SGFu
ZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShl
dmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVy
KCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGFyZ2V0
Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjgwLDcgKzIyODAsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lCiAgICAgICAgIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3Vt
ZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVu
dE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1l
bnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+
ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGFyZ2V0Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAkocmV2
aXNpb24gMTM2NTIzKQorKysgU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIENhY2hlZEZyYW1lQmFzZTo6
cmVzdG9yZSgpCiAgICAgbV9kb2N1bWVudC0+ZW5xdWV1ZVBvcHN0YXRlRXZlbnQoaGlzdG9yeUl0
ZW0gJiYgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgPyBoaXN0b3J5SXRlbS0+c3RhdGVPYmpl
Y3QoKSA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwogICAgIAogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fZG9jdW1lbnQtPnRvdWNoRXZlbnRIYW5kbGVy
Q291bnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAg
ICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hF
dmVudHModHJ1ZSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgSFRN
TElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgICAgICBkb2N1bWVudCgpLT5m
b3JtQ29udHJvbGxlcigpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMp
OwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgaWYgKG1faGFzVG91Y2hFdmVudEhhbmRs
ZXIpCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7Cisg
ICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogI2Vu
ZGlmCiB9CiAKQEAgLTQ4OSw5ICs0ODksOSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0
ZVR5cGUoKQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXIgPSBtX2lucHV0VHlwZS0+aGFz
VG91Y2hFdmVudEhhbmRsZXIoKTsKICAgICBpZiAoaGFzVG91Y2hFdmVudEhhbmRsZXIgIT0gbV9o
YXNUb3VjaEV2ZW50SGFuZGxlcikgewogICAgICAgaWYgKGhhc1RvdWNoRXZlbnRIYW5kbGVyKQot
ICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBk
b2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgIGVsc2UKLSAg
ICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAgICAgICBtX2hh
c1RvdWNoRXZlbnRIYW5kbGVyID0gaGFzVG91Y2hFdmVudEhhbmRsZXI7CiAgICAgfQogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAxMzY1MjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODQs
NyArMTU4NCw3IEBAIGJvb2wgRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEEKICAg
ICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQogICAg
ICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVs
c2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAg
ICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihkb2N1bWVudCk7CiAgICAgICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50KQogICAgICAgICAgICAg
ZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIodGhpcyk7CiAgICAgfQpAQCAtMTYxNSw3ICsxNjE1
LDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29ucwogICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBp
ZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAg
IGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9j
dW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKGRvY3VtZW50KTsKICAgICB9CiAKICAg
ICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDEzNjUyMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1OSw3ICsz
ODU5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29ucwogICAgICAg
ICAgICAgRG9jdW1lbnQqIGRvYyA9IG5vZGUtPmRvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAo
IWRvYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghZG9jLT50
b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hF
dmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAg
IG1fb3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0cy5zZXQodG91Y2hQb2ludFRhcmdldEtleSwg
bm9kZSk7CkBAIC0zODc5LDcgKzM4NzksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91
Y2hFdmVudChjb25zCiAgICAgICAgIERvY3VtZW50KiBkb2MgPSB0b3VjaFRhcmdldC0+dG9Ob2Rl
KCktPmRvY3VtZW50KCk7CiAgICAgICAgIGlmICghZG9jKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmICghZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlm
ICghZG9jLT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBkb2MtPmZyYW1lKCk7CiAgICAgICAgIGlmICgh
dGFyZ2V0RnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTM2NTIzKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw3
ICszMDgsNyBAQCB2b2lkIEZyYW1lOjpzZXREb2N1bWVudChQYXNzUmVmUHRyPERvY3VtCiAgICAg
aWYgKG1fcGFnZSAmJiBtX3BhZ2UtPm1haW5GcmFtZSgpID09IHRoaXMpIHsKICAgICAgICAgbm90
aWZ5Q2hyb21lQ2xpZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQoKTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgICAgICBpZiAobV9kb2MgJiYgbV9kb2MtPnRvdWNoRXZlbnRI
YW5kbGVyQ291bnQoKSkKKyAgICAgICAgaWYgKG1fZG9jICYmIG1fZG9jLT5oYXNUb3VjaEV2ZW50
SGFuZGxlcnMoKSkKICAgICAgICAgICAgIG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVk
VG91Y2hFdmVudHModHJ1ZSk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCShyZXZp
c2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgpAQCAtMTgxLDYgKzE4Miw0NSBAQCBSZWdpb24gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNv
bXB1dGVOb25GCiAgICAgcmV0dXJuIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwogfQogCisjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorc3RhdGljIHZvaWQgYWNjdW11bGF0ZVRvdWNo
RXZlbnRUYXJnZXRSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29u
dGFpbmVyUmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9j
dW1lbnQpOworICAgIGlmICghZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1
bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5iZWdpbigpOyBpdGVyICE9IHRhcmdldHMt
PmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPmtleSA9PSBkb2N1bWVudCkgewor
ICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygp
KQorICAgICAgICAgICAgICAgIHZpZXctPmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMo
cmVwYWludENvbnRhaW5lclJlY3RzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpdGVyLT5rZXktPmlzRG9jdW1lbnROb2RlKCkgJiYgaXRlci0+a2V5ICE9
IGRvY3VtZW50KSB7CisgICAgICAgICAgICBhY2N1bXVsYXRlVG91Y2hFdmVudFRhcmdldFJlY3Rz
KHJlcGFpbnRDb250YWluZXJSZWN0cywgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpdGVyLT5rZXkp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBpdGVyLT5rZXktPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBy
ZW5kZXJlci0+YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhyZXBhaW50Q29udGFpbmVy
UmVjdHMpOworICAgIH0KK30KKyNlbmRpZgorCitSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3Rz
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgIFJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHMgcmVwYWludENvbnRhaW5lclJlY3RzOworI2lmIEVOQUJM
RShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBpZiAoIWRvY3VtZW50LT52aWV3KCkpCisgICAg
ICAgIHJldHVybiByZXBhaW50Q29udGFpbmVyUmVjdHM7CisKKyAgICBhY2N1bXVsYXRlVG91Y2hF
dmVudFRhcmdldFJlY3RzKHJlcGFpbnRDb250YWluZXJSZWN0cywgZG9jdW1lbnQpOworI2VuZGlm
CisgICAgcmV0dXJuIHJlcGFpbnRDb250YWluZXJSZWN0czsKK30KKwogdW5zaWduZWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7
CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJ
KHJldmlzaW9uIDEzNjUyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNj
cm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgpAQCAtNTAsNiArNTEsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAog
ZW51bSBTY3JvbGxpbmdOb2RlVHlwZSB7IFNjcm9sbGluZ05vZGUsIEZpeGVkTm9kZSB9OwogCitj
bGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3Jh
cGhpY3NMYXllcjsKQEAgLTE0OSw3ICsxNTEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFw
aGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9v
bCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQo
Y29uc3QgRG9jdW1lbnQqKSB7IH0KIAorICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMg
Y29tcHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBEb2N1bWVudCopOwogcHJvdGVjdGVk
OgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzNjUy
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDIzIEBA
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWUKICAgICAvLyBhbGwgc2Ny
b2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFtZXMsIG92ZXJmbG93IGRpdnMgYW5kIGxpc3Qg
Ym94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlmIHRoZQogICAgIC8vIGZyYW1lIHZpZXcg
d2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5vdCB0aGUgbWFpbiBmcmFtZS4KICAgICBSZWdp
b24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdp
b24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9pbnQoKSk7CisgICAgUmVwYWludENvbnRhaW5l
ckhpdFRlc3RSZWN0cyB0b3VjaEV2ZW50VGFyZ2V0UmVjdHMgPSBjb21wdXRlVG91Y2hFdmVudFRh
cmdldFJlY3RzKG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkpOwogICAgIHNldE5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKTsKKyAgICBzZXRUb3Vj
aEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdldFJlY3RzKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2Vk
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICAvLyBXYWl0IHVudGlsIGFmdGVyIGxh
eW91dCB0byB1cGRhdGUuCisgICAgaWYgKG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+bmVl
ZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJp
bHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0
aGUgcm9vdCBvdXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFt
ZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CisgICAgaWYgKG1fcHJpdmF0ZS0+
c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIHRv
dWNoRXZlbnRUYXJnZXRSZWN0cyA9IGNvbXB1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1l
bnQpOworICAgICAgICBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdldFJl
Y3RzKTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJh
bWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtMjA5LDYg
KzIyNSwyMCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vCiAgICAg
fQogfQogCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyhjb25zdCBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29u
dGFpbmVyUmVjdHMpCit7CisgICAgZm9yIChSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gcmVwYWludENvbnRhaW5lclJlY3RzLmJlZ2luKCk7IGl0ZXIg
IT0gcmVwYWludENvbnRhaW5lclJlY3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgV2ViVmVj
dG9yPFdlYlJlY3Q+IHdlYlJlY3RzKGl0ZXItPnZhbHVlLnNpemUoKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB3
ZWJSZWN0c1tpXSA9IGl0ZXItPnZhbHVlW2ldOworCisgICAgICAgIEFTU0VSVChpdGVyLT5rZXkt
PmxheWVyKCkpOworICAgICAgICBXZWJMYXllciogd2ViTGF5ZXIgPSBpdGVyLT5rZXktPmxheWVy
KCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAg
IEFTU0VSVCh3ZWJMYXllcik7CisgICAgICAgIHdlYkxheWVyLT5zZXRUb3VjaEV2ZW50SGFuZGxl
clJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhh
bmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3Jv
bGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZl
cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlz
aW9uIDEzNjUyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4
LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzY3Jv
bGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJl
YSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAgIHZp
cnR1YWwgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNvbnN0IERvY3VtZW50
KikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVs
RXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB2
b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRo
cmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGlj
c0xheWVyKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdp
b24mKTsKKyAgICB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzJik7CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KHVuc2lnbmVkKTsKICAgICBQYXNzT3duUHRyPFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXI+IGNy
ZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciosIFdlYktpdDo6V2ViTGF5ZXIqIHNjcm9sbExh
eWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZpZXcqKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lv
biAxMzY1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBACiAjaWYgRU5BQkxFKENTU19FWENMVVNJT05T
KQogI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIgogI2VuZGlmCisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNlbmRp
ZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTY5MjUs
NiArNjkyOCw0NiBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0CiAg
ICAgICAgIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMocmVj
dHMsIGZsb29yZWRMYXlvdXRQb2ludChhZGRpdGlvbmFsT2Zmc2V0ICsgaW5saW5lRWxlbWVudENv
bnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSAtIGxvY2F0aW9uKCkp
KTsKIH0KIAordm9pZCBSZW5kZXJCbG9jazo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0
cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVyUmVjdHMsIGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgcmVwYWludE9mZnNldCkgY29uc3QKK3sKKyAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZFJlcGFpbnRPZmZzZXQgPSByZXBhaW50T2Zmc2V0OworICAgIGlmICghY3VycmVudFJl
cGFpbnRDb250YWluZXIgfHwgaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgcmVwYWlu
dENvbnRhaW5lckFuZE9mZnNldChjdXJyZW50UmVwYWludENvbnRhaW5lciwgYWRqdXN0ZWRSZXBh
aW50T2Zmc2V0KTsKKworICAgIGlmICghY3VycmVudFJlcGFpbnRDb250YWluZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7CisKKyAgICBpZiAod2lkdGgo
KSAmJiBoZWlnaHQoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwaXhlbFNuYXBwZWRJbnRSZWN0
KGFkanVzdGVkUmVwYWludE9mZnNldCwgc2l6ZSgpKSk7CisKKyAgICBpZiAoaGFzSG9yaXpvbnRh
bExheW91dE92ZXJmbG93KCkgfHwgaGFzVmVydGljYWxMYXlvdXRPdmVyZmxvdygpKSB7CisgICAg
ICAgIGZvciAoUm9vdElubGluZUJveCogY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgeworICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBt
YXg8TGF5b3V0VW5pdD4oY3Vyci0+bGluZVRvcCgpLCBjdXJyLT50b3AoKSk7CisgICAgICAgICAg
ICBMYXlvdXRVbml0IGJvdHRvbSA9IG1pbjxMYXlvdXRVbml0PihjdXJyLT5saW5lQm90dG9tKCks
IGN1cnItPnRvcCgpICsgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBy
ZWN0KGFkanVzdGVkUmVwYWludE9mZnNldC54KCkgKyBjdXJyLT54KCksIGFkanVzdGVkUmVwYWlu
dE9mZnNldC55KCkgKyB0b3AsIGN1cnItPndpZHRoKCksIGJvdHRvbSAtIHRvcCk7CisgICAgICAg
ICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
cGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAhY3Vyci0+aXNM
aXN0TWFya2VyKCkgJiYgY3Vyci0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBi
b3ggPSB0b1JlbmRlckJveChjdXJyKTsKKyAgICAgICAgICAgIGJveC0+YWRkUmVwYWludENvbnRh
aW5lckhpdFRlc3RSZWN0cyhyZXBhaW50Q29udGFpbmVyUmVjdHMsIGN1cnJlbnRSZXBhaW50Q29u
dGFpbmVyLCAgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0ICsgYm94LT5sb2NhdGlvbk9mZnNldCgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkgeworICAgICAg
ICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzOjppdGVyYXRvciBpdGVyID0gcmVwYWludENv
bnRhaW5lclJlY3RzLmZpbmQoY3VycmVudFJlcGFpbnRDb250YWluZXIpOworICAgICAgICBpZiAo
aXRlciA9PSByZXBhaW50Q29udGFpbmVyUmVjdHMuZW5kKCkpCisgICAgICAgICAgICBpdGVyID0g
cmVwYWludENvbnRhaW5lclJlY3RzLmFkZChjdXJyZW50UmVwYWludENvbnRhaW5lciwgcmVzdWx0
KS5pdGVyYXRvcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5k
KHJlc3VsdCk7CisgICAgfQorfQorCiBSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9u
eW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3QK
IHsKICAgICBpZiAoaXNBbm9ueW1vdXNDb2x1bW5zQmxvY2soKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUw
Niw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCisgICAgdmlydHVhbCB2b2lk
IGFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RS
ZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFp
bmVyID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJ
REU7CisKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE9ubHkgdXNlZCBieSBSZW5kZXJTVkdUZXh0
LCB3aGljaCBleHBsaWNpdGVseSBvdmVycmlkZXMgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKCks
IGRvIE5PVCB1c2UgZm9yIGFueXRoaW5nIGVsc2UuCiAgICAgdm9pZCBmb3JjZUxheW91dElubGlu
ZUNoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShy
ZXZpc2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDYgKzQ4MCwyOSBAQCB2b2lkIFJlbmRlckJveDo6YWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yCiAgICAgICAgIHJlY3RzLmFwcGVuZChwaXhlbFNuYXBwZWRJ
bnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkpOwogfQogCit2b2lkIFJlbmRlckJveDo6
YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzJiByZXBhaW50Q29udGFpbmVyUmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgcmVwYWludE9mZnNl
dCkgY29uc3QKK3sKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFJlcGFpbnRPZmZzZXQgPSByZXBh
aW50T2Zmc2V0OworICAgIGlmICghY3VycmVudFJlcGFpbnRDb250YWluZXIgfHwgaGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSkKKyAgICAgICAgcmVwYWludENvbnRhaW5lckFuZE9mZnNldChjdXJyZW50
UmVwYWludENvbnRhaW5lciwgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0KTsKKworICAgIGlmICghY3Vy
cmVudFJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh3aWR0aCgp
ICYmIGhlaWdodCgpKSB7CisgICAgICAgIEludFJlY3QgcmVzdWx0KHBpeGVsU25hcHBlZEludFJl
Y3QoYWRqdXN0ZWRSZXBhaW50T2Zmc2V0LCBzaXplKCkpKTsKKworICAgICAgICBSZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzOjppdGVyYXRvciBpdGVyID0gcmVwYWludENvbnRhaW5lclJlY3Rz
LmZpbmQoY3VycmVudFJlcGFpbnRDb250YWluZXIpOworICAgICAgICBpZiAoaXRlciA9PSByZXBh
aW50Q29udGFpbmVyUmVjdHMuZW5kKCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBy
ZXN1bHRWZWN0b3I7CisgICAgICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXBhaW50Q29udGFpbmVyUmVjdHMuYWRkKGN1cnJlbnRSZXBhaW50Q29udGFp
bmVyLCByZXN1bHRWZWN0b3IpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnZh
bHVlLmFwcGVuZChyZXN1bHQpOworICAgIH0KK30KKworCiBMYXlvdXRSZWN0IFJlbmRlckJveDo6
cmVmbGVjdGlvbkJveCgpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZXN1bHQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAxMzY1MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2
ICsxNTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IG91dGxpbmVCb3VuZHNG
b3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5l
ciovLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCopIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1
YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQ
b2ludCYpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0g
TGF5b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJREU7CisKICAgICAvLyBVc2UgdGhpcyB3aXRoIGNh
dXRpb24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEKICAgICBSZW5kZXJCb3gqIHByZXZpb3Vz
U2libGluZ0JveCgpIGNvbnN0OwogICAgIFJlbmRlckJveCogbmV4dFNpYmxpbmdCb3goKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZp
c2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQyNSw2ICsxNDI1LDQ0IEBAIHZvaWQgUmVuZGVySW5saW5l
OjphZGRGb2N1c1JpbmdSZWN0cyhWZWMKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVySW5saW5lOjph
ZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMmIHJlcGFpbnRDb250YWluZXJSZWN0cywgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
Y3VycmVudFJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiByZXBhaW50T2Zmc2V0
KSBjb25zdAoreworICAgIExheW91dFBvaW50IGFkanVzdGVkUmVwYWludE9mZnNldCA9IHJlcGFp
bnRPZmZzZXQ7CisgICAgaWYgKCFjdXJyZW50UmVwYWludENvbnRhaW5lciB8fCBoYXNTZWxmUGFp
bnRpbmdMYXllcigpKQorICAgICAgICByZXBhaW50Q29udGFpbmVyQW5kT2Zmc2V0KGN1cnJlbnRS
ZXBhaW50Q29udGFpbmVyLCBhZGp1c3RlZFJlcGFpbnRPZmZzZXQpOworCisgICAgaWYgKCFjdXJy
ZW50UmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPEludFJl
Y3Q+IHJlc3VsdDsKKyAgICBBYnNvbHV0ZVJlY3RzR2VuZXJhdG9yQ29udGV4dCBjb250ZXh0KHJl
c3VsdCwgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0KTsKKyAgICBnZW5lcmF0ZUxpbmVCb3hSZWN0cyhj
b250ZXh0KTsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIWN1cnItPmlz
VGV4dCgpICYmICFjdXJyLT5pc0xpc3RNYXJrZXIoKSkgeworICAgICAgICAgICAgTGF5b3V0UG9p
bnQgcG9zKGFkanVzdGVkUmVwYWludE9mZnNldCk7CisgICAgICAgICAgICBpZiAoY3Vyci0+aXNC
b3goKSkKKyAgICAgICAgICAgICAgICBwb3MubW92ZSh0b1JlbmRlckJveChjdXJyKS0+bG9jYXRp
b25PZmZzZXQoKSk7CisgICAgICAgICAgICBjdXJyLT5hZGRSZXBhaW50Q29udGFpbmVySGl0VGVz
dFJlY3RzKHJlcGFpbnRDb250YWluZXJSZWN0cywgY3VycmVudFJlcGFpbnRDb250YWluZXIsIHBv
cyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29udGludWF0aW9uKCkpIHsKKyAgICAg
ICAgaWYgKGNvbnRpbnVhdGlvbigpLT5pc0lubGluZSgpKQorICAgICAgICAgICAgY29udGludWF0
aW9uKCktPmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMocmVwYWludENvbnRhaW5lclJl
Y3RzLCBjdXJyZW50UmVwYWludENvbnRhaW5lciwgdG9Qb2ludChhZGp1c3RlZFJlcGFpbnRPZmZz
ZXQgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBjb250
YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
b250aW51YXRpb24oKS0+YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhyZXBhaW50Q29u
dGFpbmVyUmVjdHMsIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCB0b1BvaW50KGFkanVzdGVkUmVw
YWludE9mZnNldCArIHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigpKS0+bG9jYXRpb24oKSAtIGNv
bnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpKSk7CisgICAgfQorCisgICAgaWYgKCFyZXN1bHQu
aXNFbXB0eSgpKSB7CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6Oml0ZXJh
dG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVyUmVjdHMuZmluZChjdXJyZW50UmVwYWludENvbnRh
aW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJSZWN0cy5lbmQoKSkK
KyAgICAgICAgICAgIHJlcGFpbnRDb250YWluZXJSZWN0cy5hZGQoY3VycmVudFJlcGFpbnRDb250
YWluZXIsIHJlc3VsdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLmFw
cGVuZChyZXN1bHQpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGlu
ZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0KQogewogICAgIGlmICghaGFzT3V0bGluZSgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMTM2NTIzKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4
MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2b2lkIHBhaW50T3V0bGluZShH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCisgICAgdmlydHVhbCB2b2lk
IGFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RS
ZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFp
bmVyID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJ
REU7CisKICAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGludWF0aW9uOwogICAg
IHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRDb250aW51YXRpb247CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxMzY1MjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEzLDYgKzYxMywyMyBAQCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIFJlbmRlck9i
amVjdDo6cmVuCiAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QtPmlzUmVuZGVyTmFtZWRGbG93
VGhyZWFkKCkgPyB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChvYmplY3QpIDogMDsKIH0KIAordm9p
ZCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRDb250YWluZXJBbmRPZmZzZXQoY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdComIHJlcGFpbnRDb250YWluZXIsIExheW91dFBvaW50JiBvZmZzZXQpIGNv
bnN0Cit7CisgICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAg
ICBpZiAoIXJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNlbGYt
cGFpbnRpbmcgbGF5ZXJzIHN1YnRyYWN0IHRoZSByZW5kZXJlcidzIGxvY2F0aW9uLiBPdGhlcndp
c2UsIHdlIG5lZWQgdG8gbWFwIG91ciBsb2NhdGlvbiB0byBjb250YWluZXIgc3BhY2UuCisgICAg
aWYgKHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykKKyAgICAgICAgb2Zmc2V0ID0gTGF5b3V0UG9p
bnQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUo
VHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCBGbG9hdFBvaW50KCkpOwor
ICAgICAgICBtYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0
YXRlLCBBcHBseUNvbnRhaW5lckZsaXAgfCBVc2VUcmFuc2Zvcm1zIHwgU25hcE9mZnNldEZvclRy
YW5zZm9ybXMpOworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5mbGF0dGVuKCk7CisgICAgICAgIG9m
ZnNldCA9IExheW91dFBvaW50KHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJQb2ludCgpKTsKKyAg
ICB9Cit9CisKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZUJsb2NrKCkgY29u
c3QKIHsKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgJKHJldmlzaW9uIDEzNjUyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHN0cnVjdCBB
bm5vdGF0ZWRSZWdpb25WYWx1ZSB7CiAjZW5kaWYKIAogdHlwZWRlZiBXVEY6Okhhc2hTZXQ8Y29u
c3QgUmVuZGVyT2JqZWN0Kj4gUmVuZGVyT2JqZWN0QW5jZXN0b3JMaW5lYm94RGlydHlTZXQ7Ci0K
K3R5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqLCBWZWN0
b3I8SW50UmVjdD4gPiBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzOwogI2lmbmRlZiBOREVC
VUcKIGNvbnN0IGludCBzaG93VHJlZUNoYXJhY3Rlck9mZnNldCA9IDM5OwogI2VuZGlmCkBAIC05
NDcsNiArOTQ3LDggQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpIHsgfTsKIAorICAg
IHZpcnR1YWwgdm9pZCBhZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiA9IDAsIGNv
bnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IHsgfTsKKwogICAgIExheW91
dFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBvdXRsaW5lQm91bmRzRm9yUmVwYWludCgwKTsKQEAgLTk2MCw2ICs5NjIsOCBAQCBwdWJsaWM6
CiBwcm90ZWN0ZWQ6CiAgICAgaW5saW5lIGJvb2wgbGF5ZXJDcmVhdGlvbkFsbG93ZWRGb3JTdWJ0
cmVlKCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlcGFpbnRDb250YWluZXJBbmRPZmZzZXQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdComLCBMYXlvdXRQb2ludCYpIGNvbnN0OworCiAgICAgLy8g
T3ZlcnJpZGVzIHNob3VsZCBjYWxsIHRoZSBzdXBlcmNsYXNzIGF0IHRoZSBlbmQKICAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG5ld1N0eWxlKTsKICAgICAvLyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xh
c3MgYXQgdGhlIHN0YXJ0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwCShyZXZpc2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw2ICsyNjIsMjUgQEAgdm9pZCBSZW5kZXJW
aWV3OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJWaWV3
OjphZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMmIHJlcGFpbnRDb250YWluZXJSZWN0cywgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogY3VycmVudFJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiByZXBhaW50T2Zm
c2V0KSBjb25zdAoreworICAgIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyID0gY29udGFpbmVyRm9y
UmVwYWludCgpOworICAgIGlmICghY3VycmVudFJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEludFJlY3QgZG9jdW1lbnRSZWN0ID0gdW5zY2FsZWREb2N1bWVudFJlY3Qo
KTsKKyAgICBpZiAoZG9jdW1lbnRSZWN0LndpZHRoKCkgJiYgZG9jdW1lbnRSZWN0LmhlaWdodCgp
KSB7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoZG9jdW1lbnRSZWN0KTsKKworICAgICAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3Rz
OjppdGVyYXRvciBpdGVyID0gcmVwYWludENvbnRhaW5lclJlY3RzLmZpbmQoY3VycmVudFJlcGFp
bnRDb250YWluZXIpOworICAgICAgICBpZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVyUmVjdHMu
ZW5kKCkpCisgICAgICAgICAgICByZXBhaW50Q29udGFpbmVyUmVjdHMuYWRkKGN1cnJlbnRSZXBh
aW50Q29udGFpbmVyLCByZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVyLT52
YWx1ZSA9IHJlc3VsdDsKKyAgICB9Cit9CisKIGJvb2wgUmVuZGVyVmlldzo6cmVxdWlyZXNDb2x1
bW5zKGludCBkZXNpcmVkQ29sdW1uQ291bnQpIGNvbnN0CiB7CiAgICAgaWYgKG1fZnJhbWVWaWV3
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiAxMzY1
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hE
ZWNvcmF0aW9ucyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIE9WRVJSSURFOwogCisg
ICAgdmlydHVhbCB2b2lkIGFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMoUmVwYWludENv
bnRhaW5lckhpdFRlc3RSZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJl
bnRSZXBhaW50Q29udGFpbmVyID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQo
KSkgY29uc3QgT1ZFUlJJREU7CisKICAgICBlbnVtIFNlbGVjdGlvblJlcGFpbnRNb2RlIHsgUmVw
YWludE5ld1hPUk9sZCwgUmVwYWludE5ld01pbnVzT2xkLCBSZXBhaW50Tm90aGluZyB9OwogICAg
IHZvaWQgc2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVu
ZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQb3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlID0gUmVwYWlu
dE5ld1hPUk9sZCk7CiAgICAgdm9pZCBnZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiYgc3RhcnRS
ZW5kZXJlciwgaW50JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIGlu
dCYgZW5kT2Zmc2V0KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMzY1MjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVz
b3VyY2VzQ2FjaGUuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCkBAIC05MSw2ICs5
MiwxMiBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzCiAgICAgcXVh
ZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3goKSwgMCAvKiBt
b2RlICovLCB3YXNGaXhlZCkpOwogfQogCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphZGRS
ZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMm
IHJlcGFpbnRDb250YWluZXJSZWN0cywgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3Vy
cmVudFJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiByZXBhaW50T2Zmc2V0KSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBjYWxjdWxhdGUgdGhlIG1pbmltYWwgcmVjdC4KKyAgICBy
ZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KHRoaXMpLT5hZGRSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzKHJlcGFpbnRDb250YWluZXJSZWN0cywgY3VycmVudFJl
cGFpbnRDb250YWluZXIsIHJlcGFpbnRPZmZzZXQpOworfQorCiB2b2lkIFJlbmRlclNWR01vZGVs
T2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKQogewogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGll
bnREZXN0cm95ZWQodGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAxMzY1MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUmVw
YWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwg
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAw
LCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwog
ICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgTWFwQ29vcmRpbmF0
ZXNGbGFncyA9IEFwcGx5Q29udGFpbmVyRmxpcCB8IFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zLCBi
b29sKiB3YXNGaXhlZCA9IDApIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCShyZXZpc2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCIKICNpbmNsdWRlICJTZWxlY3RSdWxlRmVhdHVyZVNldC5oIgogI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0xMTk2LDggKzEx
OTcsNDEgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNvdQogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPnRvdWNoRXZlbnRIYW5k
bGVyQ291bnQoKTsKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEhhbmRsZXJz
ID0gZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCk7CisgICAgaWYgKCF0b3VjaEhhbmRsZXJz
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3Ig
KFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b3VjaEhhbmRsZXJz
LT5iZWdpbigpOyBpdGVyICE9IHRvdWNoSGFuZGxlcnMtPmVuZCgpOyArK2l0ZXIpCisgICAgICAg
IGNvdW50ICs9IGl0ZXItPnZhbHVlOworICAgIHJldHVybiBjb3VudDsKK30KKworI2lmIEVOQUJM
RShUT1VDSF9FVkVOVF9UUkFDS0lORykKK1Bhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEludGVy
bmFsczo6dG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKERvY3VtZW50KiBkb2N1bWVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXco
KSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghZG9jdW1lbnQtPnBhZ2UoKS0+
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0Ojpj
cmVhdGUoKTsKKworICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKKyAgICBWZWN0b3I8RmxvYXRR
dWFkPiBxdWFkczsKKworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgcmVwYWludENv
bnRhaW5lclJlY3RzID0gZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKS0+
Y29tcHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhkb2N1bWVudCk7CisKKyAgICBmb3IgKFJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29u
dGFpbmVyUmVjdHMuYmVnaW4oKTsgaXRlciAhPSByZXBhaW50Q29udGFpbmVyUmVjdHMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGl0ZXItPmtleS0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFF1YWQoaXRlci0+dmFsdWVbaV0pLCBVc2VUcmFuc2Zvcm1zIHwgQXBw
bHlDb250YWluZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZShxdWFkcyk7CiB9CisjZW5kaWYKIAogUGFz
c1JlZlB0cjxOb2RlTGlzdD4gSW50ZXJuYWxzOjpub2Rlc0Zyb21SZWN0KERvY3VtZW50KiBkb2N1
bWVudCwgaW50IHgsIGludCB5LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBh
ZGRpbmcsCiAgICAgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcs
IGJvb2wgaWdub3JlQ2xpcHBpbmcsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNp
b24gMTM2NTIzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw5IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHdoZWVs
RXZlbnRIYW5kbGVyQ291bnQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdW5zaWdu
ZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudChEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0
TGlzdD4gdG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKERvY3VtZW50KiwgRXhjZXB0aW9uQ29k
ZSYpOworI2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBub2Rlc0Zyb21SZWN0KERv
Y3VtZW50KiwgaW50IHgsIGludCB5LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdo
dFBhZGRpbmcsCiAgICAgICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQ
YWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bAkocmV2aXNpb24gMTM2NTIzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDkgQEAKIAogICAgIHVuc2lnbmVkIGxv
bmcgd2hlZWxFdmVudEhhbmRsZXJDb3VudChpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChE
T01FeGNlcHRpb24pOwogICAgIHVuc2lnbmVkIGxvbmcgdG91Y2hFdmVudEhhbmRsZXJDb3VudChp
biBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOworI2lmIGRlZmluZWQo
RU5BQkxFX1RPVUNIX0VWRU5UX1RSQUNLSU5HKSAmJiBFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJ
TkcKKyAgICBDbGllbnRSZWN0TGlzdCB0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoaW4gRG9j
dW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogCiAgICAgTm9k
ZUxpc3Qgbm9kZXNGcm9tUmVjdChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gbG9uZyB4LCBpbiBs
b25nIHksCiAgICAgICAgIGluIHVuc2lnbmVkIGxvbmcgdG9wUGFkZGluZywgaW4gdW5zaWduZWQg
bG9uZyByaWdodFBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgYm90dG9tUGFkZGluZywgaW4gdW5z
aWduZWQgbG9uZyBsZWZ0UGFkZGluZywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEyLTAzICBMZXZpIFdlaW50cmF1YiAg
PGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdHJhY2tpbmcg
aGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rpb24gaW4gdGhl
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEVuYWJsaW5nIHRvdWNoIGV2ZW50IHRhcmdldCByZWdpb24gdHJhY2tpbmcuCisKKyAgICAg
ICAgKiBmZWF0dXJlcy5neXBpOgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRv
dWNoRXZlbnRUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6
fldlYlBsdWdpbkNvbnRhaW5lckltcGwpOgorCiAyMDEyLTEyLTA0ICBDaGFybGllIFJlaXMgIDxj
cmVpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaWRE
aXNvd25PcGVuZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlz
aW9uIDEzNjUyMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBACiAgICAgICAnRU5BQkxFX1RPVUNIX0FESlVT
VE1FTlQ9MScsCiAgICAgICAnRU5BQkxFX1RPVUNIX0VWRU5UUz08KGVuYWJsZV90b3VjaF9ldmVu
dHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTwoZW5hYmxlX3RvdWNoX2lj
b25fbG9hZGluZyknLAorICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORz08KGVuYWJs
ZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hfU0xJREVSPTEnLAogICAgICAg
J0VOQUJMRV9WOF9TQ1JJUFRfREVCVUdfU0VSVkVSPTEnLAogICAgICAgJ0VOQUJMRV9WSURFTz0x
JywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiAxMzY1MjMpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTI3LDkgKzUyNyw5IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRvdWMK
ICAgICAgICAgcmV0dXJuOwogICAgIG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlID0gcmVxdWVzdFR5
cGU7CiAgICAgaWYgKG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0
VHlwZU5vbmUpCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVu
dEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2
ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiB9CiAK
IHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c2V0V2FudHNXaGVlbEV2ZW50cyhib29sIHdh
bnRzV2hlZWxFdmVudHMpCkBAIC02ODIsNyArNjgyLDcgQEAgV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6fldlYlBsdWdpbkNvbnRhaQogI2VuZGlmCiAKICAgICBpZiAobV90b3VjaEV2ZW50UmVxdWVz
dFR5cGUgIT0gVG91Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAgICAgbV9lbGVtZW50LT5k
b2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGx1Z2luTG9hZE9ic2VydmVycy5zaXplKCk7
ICsraSkKICAgICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzW2ldLT5jbGVhclBsdWdpbkNvbnRh
aW5lcigpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2NTIzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTItMDMgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0
cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlv
biBpbiB0aGUgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3Np
dG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3Rz
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTEyLTA0ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGNocm9taXVtIHJlYmFzZWxpbmUgZm9yIHIxMzY1
MDguCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3Vj
aC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRv
ci10b3VjaC1oaXQtcmVjdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1o
aXQtcmVjdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACitUaGlz
IHRlc3RzIHZlcmlmaWVzIHRoZSBoaXQgdGVzdCByZWdpb25zIGdpdmVuIHRvIHRoZSBjb21wb3Np
dG9yLiBJdCBjYW4gb25seSBiZSBydW4gaW4gRHVtcFJlbmRlclRyZWUuIFRoZSBvdXRwdXR0ZWQg
cmVjdHMgc2hvdWxkIGNvdmVyIHRoZSBoaXQgdGVzdCByZWdpb25zIG9mIGFsbCB0aGUgbGlzdGVk
IGVsZW1lbnRzLgorCitub3JtYWxGbG93WzBdOiAoOCwgNzIsIDc4NCwgMTApCithYnNvbHV0ZUNo
aWxkQ29udGFpbmVyWzBdOiAoOCwgMTAyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5l
clsxXTogKDExOCwgMzAwLCAxNDAsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclswXTogKDgs
IDE1MiwgNzg0LCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMV06ICg4LCAxNTIsIDI2MCwg
MTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclswXTogKDgsIDIwMiwgMTAwLCA4MCkKK292ZXJoYW5n
aW5nQ29udGFpbmVyWzFdOiAoOCwgMjAyLCAxMTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJb
Ml06ICg4LCAyMDIsIDc4NCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclszXTogKDgsIDIxMiwg
NTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbNF06ICg4LCAyMjIsIDExMCwgMTApCitvdmVy
aGFuZ2luZ0NvbnRhaW5lcls1XTogKDgsIDIzMiwgNTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWlu
ZXJbNl06ICg4LCAyNDIsIDExMCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls3XTogKDgsIDI1
MiwgNTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbOF06ICg4LCAyNjIsIDExMCwgMTApCitv
dmVyaGFuZ2luZ0NvbnRhaW5lcls5XTogKDgsIDI3MiwgNTAsIDEwKQordHJhbnNmb3JtZWRDaGls
ZENvbnRhaW5lclswXTogKDYyLCA0MDEsIDY2MSwgMzIpCit0cmFuc2Zvcm1lZENoaWxkQ29udGFp
bmVyWzFdOiAoOCwgNDEyLCA3NjksIDEwKQorY29udGludWF0aW9uWzBdOiAoMTA4LCA0NjIsIDEw
MCwgMTApCitjb250aW51YXRpb25bMV06ICg4LCA0NzIsIDc2OSwgMTApCitjb250aW51YXRpb25b
Ml06ICg4LCA0NzIsIDc2OSwgMTApCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91
Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91
Y2gtaGl0LXJlY3RzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAwIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdHJhbnNmb3JtZWRDaGlsZCB7CisJ
LXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZTNkKDAuMiwgMSwgMCwgMzVncmFkKTsKK30KKyNhYnNv
bHV0ZUNoaWxkIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJdG9wOiAzMDBweDsKK30KKyNyZWxh
dGl2ZUNoaWxkIHsKKwlwb3NpdGlvbjogcmVsYXRpdmU7CisJdG9wOiAyMDBweDsKK30KKyNvdmVy
aGFuZ2luZ0NvbnRhaW5lciB7CisJaGVpZ2h0OiAxMHB4OworfQorI292ZXJoYW5naW5nRmxvYXRp
bmdDaGlsZCB7CisJd2lkdGg6IDEwMHB4OworCWZsb2F0OiBsZWZ0OworfQorI3Rlc3RzIHsKKwlm
b250OiAxMHB4IEFoZW07Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPlRoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2ZW4g
dG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJlZS4K
K1RoZSBvdXRwdXR0ZWQgcmVjdHMgc2hvdWxkIGNvdmVyIHRoZSBoaXQgdGVzdCByZWdpb25zIG9m
IGFsbCB0aGUgbGlzdGVkIGVsZW1lbnRzLjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
Cis8ZGl2IGlkPSJ0ZXN0cyI+CisJPGRpdiBpZD0ibm9ybWFsRmxvdyI+CisJCUxvcmVtIGlwc3Vt
CisJCTxzcGFuPnN1bTwvc3Bhbj4uCisJPC9kaXY+CisJPGRpdiBpZD0iYWJzb2x1dGVDaGlsZENv
bnRhaW5lciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlkPSJhYnNvbHV0ZUNoaWxkIj5BYnNv
bHV0ZSBjaGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJyZWxhdGl2ZUNoaWxkQ29udGFp
bmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9InJlbGF0aXZlQ2hpbGQiPlJlbGF0aXZl
IGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9Im92ZXJoYW5naW5nQ29udGFpbmVyIj4K
KwkJPGRpdiBpZD0ib3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIj5PdmVyaGFuZ2luZyBmbG9hdCBv
dmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdDwvZGl2
PgorCTwvZGl2PgorCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGRDb250YWluZXIiPgorCQk8ZGl2
IGlkPSJ0cmFuc2Zvcm1lZENoaWxkIj5UcmFuc2Zvcm1lZDwvZGl2PgorCTwvZGl2PgorCTxkaXY+
CisJCTxiIGlkPSJjb250aW51YXRpb24iPlRoaXMgYiB0YWcKKwkJPGRpdj5jYXVzZXMgYTwvZGl2
PgorCQljb250aW51YXRpb248L2I+CisJPC9kaXY+Cis8L2Rpdj4KKzxzY3JpcHQ+CitpZiAoIXdp
bmRvdy50ZXN0UnVubmVyKQorCXJldHVybjsKKword2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOworCitmdW5jdGlvbiBsaXN0ZW5lcigpIHsgfQorCitmdW5jdGlvbiBsb2cobXNnKSB7CisJ
dmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisJZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICBzcGFuLmlubmVy
SFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBzb3J0UmVjdHMoYSwgYikgewor
CXJldHVybiBhLnRvcCAtIGIudG9wOworfQorCitmdW5jdGlvbiBsb2dSZWN0cyhpZCkgeworCWVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisJZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNlKTsKKwlyZWN0cyA9IHdpbmRvdy5p
bnRlcm5hbHMudG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKGRvY3VtZW50KTsKKwl2YXIgc29y
dGVkUmVjdHMgPSBuZXcgQXJyYXkoKTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0
aDsgKytpKQorCQlzb3J0ZWRSZWN0c1tpXSA9IHJlY3RzW2ldOworCXNvcnRlZFJlY3RzLnNvcnQo
c29ydFJlY3RzKTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgKytpKQorCQls
b2coaWQgKyAiWyIgKyBpICsgIl06ICgiICsgc29ydGVkUmVjdHNbaV0ubGVmdCArICIsICIgKyBz
b3J0ZWRSZWN0c1tpXS50b3AgKyAiLCAiICsgc29ydGVkUmVjdHNbaV0ud2lkdGggKyAiLCAiICsg
c29ydGVkUmVjdHNbaV0uaGVpZ2h0ICsgIikiKTsKKwllbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2UpOworfQorCitsb2dSZWN0cygibm9ybWFs
RmxvdyIpOworbG9nUmVjdHMoImFic29sdXRlQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJy
ZWxhdGl2ZUNoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygib3ZlcmhhbmdpbmdDb250YWluZXIi
KTsKK2xvZ1JlY3RzKCJ0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygiY29u
dGludWF0aW9uIik7CisKK3ZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRlc3RzIik7Cit0ZXN0Q29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVzdENv
bnRhaW5lcik7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177569</attachid>
            <date>2012-12-04 14:44:20 -0800</date>
            <delta_ts>2012-12-04 17:22:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121204144153.patch</filename>
            <type>text/plain</type>
            <size>49487</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxMi0xMi0wNCAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuIFRoZSBuZXcgZnVuY3Rpb24gYWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cwor
ICAgICAgICBnZW5lcmF0ZXMgdGhlIGhpdCB0ZXN0IHJlY3RhbmdsZXMgZm9yIGEgZ2l2ZW4gbm9k
ZSBpbiB0aGVpciByZXBhaW50IGNvbnRhaW5lciBjb29yZGluYXRlcyBmb3Igc3BlZWR5CisgICAg
ICAgIHVwbG9hZGluZyB0byB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBUZXN0OiBwbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5o
dG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6Omhhc1RvdWNoRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudFRhcmdldHMpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpZE1vdmVUb05l
d0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZUJhc2U6OnJl
c3RvcmUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZVRvdWNoRXZlbnRUYXJn
ZXRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0
ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRU
b3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5oOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAg
KFJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaDoKKyAgICAgICAgKFJlbmRlcklubGluZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6CisgICAgICAg
IChSZW5kZXJPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
aDoKKyAgICAgICAgKFJlbmRlclZpZXcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAg
ICAoUmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hF
dmVudFRhcmdldENsaWVudFJlY3RzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgor
ICAgICAgICAoSW50ZXJuYWxzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisK
IDIwMTItMTItMDQgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtVc2VyIFRpbWluZ10gRml4IGNsYW5nIGJ1aWxkIGJ5IHJlbW92aW5nIG5lZWQgZm9y
IGV4aXQgdGltZSBkZXN0cnVjdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlz
aW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5NCw5ICs0OTQsNiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBLCiAgICAgLCBtX3dyaXRlUmVjdXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwg
bV93cml0ZVJlY3Vyc2lvbkRlcHRoKDApCiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQo
MCkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNv
dW50KDApCi0jZW5kaWYKICAgICAsIG1fcGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50
OjpwZW5kaW5nVGFza3NUaW1lckZpcmVkKQogICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3Bl
bmRlZChmYWxzZSkKICAgICAsIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTU1NjEs
MzMgKzU1NTgsNTcgQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZQog
ICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKHRoaXMpOwogfQogCi12b2lkIERvY3Vt
ZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcihOb2RlKiBoYW5kbGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgKyttX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhh
bmRsZXJDb3VudCA+IDEpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQorICAg
ICAgICBtX3RvdWNoRXZlbnRUYXJnZXRzID0gYWRvcHRQdHIobmV3IFRvdWNoRXZlbnRUYXJnZXRT
ZXQpOworICAgIG1fdG91Y2hFdmVudFRhcmdldHMtPmFkZChoYW5kbGVyKTsKKyAgICBpZiAoRG9j
dW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRB
ZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChQYWdl
KiBwYWdlID0gdGhpcy0+cGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkt
Pm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsKKyAgICB9CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlz
LT5wYWdlKCkpIHsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgICAgIGlm
IChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNl
dFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYg
KG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUoKSA9PSAxKQorICAgICAgICAgICAgcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CisgICAgfQorI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CiAjZW5kaWYKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlk
UmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKQordm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoTm9kZSogaGFuZGxlcikKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQot
ICAgIEFTU0VSVChtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpOwotICAgIC0tbV90b3VjaEV2ZW50
SGFuZGxlckNvdW50OwotICAgIGlmIChtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpCisgICAgaWYg
KCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
KG1fdG91Y2hFdmVudFRhcmdldHMtPmNvbnRhaW5zKGhhbmRsZXIpKTsKKyAgICBtX3RvdWNoRXZl
bnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxlcik7CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBw
YXJlbnREb2N1bWVudCgpKSB7CisgICAgICAgIHBhcmVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBQYWdlKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJM
RShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAg
ICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQo
dGhpcyk7CisjZW5kaWYKKyAgICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpKQorICAg
ICAgICByZXR1cm47CiAgICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT50b3VjaEV2
ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFt
ZS0+ZG9jdW1lbnQoKS0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRz
KGZhbHNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiw4IEBAIGVu
dW0gTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIHsKIH07CiBjb25zdCBpbnQgbnVtTm9kZUxpc3RJ
bnZhbGlkYXRpb25UeXBlcyA9IEludmFsaWRhdGVPbkFueUF0dHJDaGFuZ2UgKyAxOwogCit0eXBl
ZGVmIEhhc2hDb3VudGVkU2V0PE5vZGUqPiBUb3VjaEV2ZW50VGFyZ2V0U2V0OworCiBjbGFzcyBE
b2N1bWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlLCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKQEAgLTExMTMs
MTMgKzExMTUsMTkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRs
ZXIoKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdW5zaWduZWQgdG91Y2hFdmVu
dEhhbmRsZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsg
fQorICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gKG1fdG91
Y2hFdmVudFRhcmdldHMuZ2V0KCkpID8gbV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFs
c2U7IH0KICNlbHNlCi0gICAgdW5zaWduZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRs
ZXIoKTsKLSAgICB2b2lkIGRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgdm9pZCBk
aWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisgICAgdm9pZCBkaWRSZW1vdmVUb3VjaEV2
ZW50SGFuZGxlcihOb2RlKik7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNvbnN0
IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
bV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKTsgfQorI2Vsc2UKKyAgICBjb25zdCBUb3VjaEV2ZW50
VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRp
ZgogCiAgICAgYm9vbCB2aXN1YWxVcGRhdGVzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlz
dWFsVXBkYXRlc0FsbG93ZWQ7IH0KIApAQCAtMTQ5MSw3ICsxNDk5LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB1bnNpZ25lZCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQ7CiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKLSAgICB1bnNpZ25lZCBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7CisgICAg
T3duUHRyPFRvdWNoRXZlbnRUYXJnZXRTZXQ+IG1fdG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyOCw4ICsyMjI4LDggQEAgdm9pZCBOb2RlOjpkaWRNb3ZlVG9OZXdE
b2N1bWVudChEb2N1bWVudAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudE5h
bWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxp
c3RlbmVycyA9IGdldEV2ZW50TGlzdGVuZXJzKHRvdWNoRXZlbnROYW1lc1tpXSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbGlzdGVuZXJzLnNpemUoKTsgKytqKSB7Ci0gICAgICAg
ICAgICBvbGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICAgICAg
ICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBv
bGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgICAg
ICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjI1OCw3ICsyMjU4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeUFkZEV2
ZW50TGlzdGVuZXIoTgogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRs
ZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZl
bnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigp
OworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5v
ZGUpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjI4MCw3ICsyMjgwLDcgQEAgc3Rh
dGljIGlubGluZSBib29sIHRyeVJlbW92ZUV2ZW50TGlzdGVuZQogICAgICAgICBpZiAoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVu
dC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnRO
YW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50
LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRp
ZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHJldmlz
aW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBDYWNoZWRGcmFtZUJhc2U6OnJl
c3RvcmUoKQogICAgIG1fZG9jdW1lbnQtPmVucXVldWVQb3BzdGF0ZUV2ZW50KGhpc3RvcnlJdGVt
ICYmIGhpc3RvcnlJdGVtLT5zdGF0ZU9iamVjdCgpID8gaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0
KCkgOiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKICAgICAKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChtX2RvY3VtZW50LT50b3VjaEV2ZW50SGFuZGxlckNv
dW50KCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAg
ICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZl
bnRzKHRydWUpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIEhUTUxJ
bnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKICAgICAgICAgZG9jdW1lbnQoKS0+Zm9y
bUNvbnRyb2xsZXIoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVy
KQotICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAg
ICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICNlbmRp
ZgogfQogCkBAIC00ODksOSArNDg5LDkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVU
eXBlKCkKICAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVyID0gbV9pbnB1dFR5cGUtPmhhc1Rv
dWNoRXZlbnRIYW5kbGVyKCk7CiAgICAgaWYgKGhhc1RvdWNoRXZlbnRIYW5kbGVyICE9IG1faGFz
VG91Y2hFdmVudEhhbmRsZXIpIHsKICAgICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxlcikKLSAg
ICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgZG9j
dW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAgICAgICBlbHNlCi0gICAg
ICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRv
Y3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgbV9oYXNU
b3VjaEV2ZW50SGFuZGxlciA9IGhhc1RvdWNoRXZlbnRIYW5kbGVyOwogICAgIH0KICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMTM2NTY2KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg0LDcg
KzE1ODQsNyBAQCBib29sIERPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBCiAgICAg
ICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAg
ICAgICAgIGRvY3VtZW50LT5kaWRBZGRXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNl
IGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1
bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoZG9jdW1lbnQpOwogICAgICAgICBlbHNlIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCkKICAgICAgICAgICAgIGRp
ZEFkZFN0b3JhZ2VFdmVudExpc3RlbmVyKHRoaXMpOwogICAgIH0KQEAgLTE2MTUsNyArMTYxNSw3
IEBAIGJvb2wgRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnMKICAgICAgICAgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAg
ZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYg
KGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBk
b2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihkb2N1bWVudCk7CiAgICAgfQogCiAgICAg
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTksNyArMzg1
OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAg
ICAgIERvY3VtZW50KiBkb2MgPSBub2RlLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgaWYgKCFk
b2MpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIWRvYy0+dG91
Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZl
bnRIYW5kbGVycygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBt
X29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5v
ZGUpOwpAQCAtMzg3OSw3ICszODc5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNo
RXZlbnQoY29ucwogICAgICAgICBEb2N1bWVudCogZG9jID0gdG91Y2hUYXJnZXQtPnRvTm9kZSgp
LT5kb2N1bWVudCgpOwogICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAo
IWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gZG9jLT5mcmFtZSgpOwogICAgICAgICBpZiAoIXRh
cmdldEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzNjU2NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyAr
MzA4LDcgQEAgdm9pZCBGcmFtZTo6c2V0RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bQogICAgIGlm
IChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKSA9PSB0aGlzKSB7CiAgICAgICAgIG5vdGlm
eUNocm9tZUNsaWVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKCk7CiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKLSAgICAgICAgaWYgKG1fZG9jICYmIG1fZG9jLT50b3VjaEV2ZW50SGFu
ZGxlckNvdW50KCkpCisgICAgICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+aGFzVG91Y2hFdmVudEhh
bmRsZXJzKCkpCiAgICAgICAgICAgICBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRv
dWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNp
b24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKQEAgLTE4MSw2ICsxODIsNDUgQEAgUmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21w
dXRlTm9uRgogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KIAorI2lmIEVO
QUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVUb3VjaEV2
ZW50VGFyZ2V0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRh
aW5lclJlY3RzLCBjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3Vt
ZW50KTsKKyAgICBpZiAoIWRvY3VtZW50LT50b3VjaEV2ZW50VGFyZ2V0cygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0YXJnZXRzID0gZG9jdW1l
bnQtPnRvdWNoRXZlbnRUYXJnZXRzKCk7CisgICAgZm9yIChUb3VjaEV2ZW50VGFyZ2V0U2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gdGFyZ2V0cy0+YmVnaW4oKTsgaXRlciAhPSB0YXJnZXRzLT5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5rZXkgPT0gZG9jdW1lbnQpIHsKKyAg
ICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkK
KyAgICAgICAgICAgICAgICB2aWV3LT5hZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKHJl
cGFpbnRDb250YWluZXJSZWN0cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXRlci0+a2V5LT5pc0RvY3VtZW50Tm9kZSgpICYmIGl0ZXItPmtleSAhPSBk
b2N1bWVudCkgeworICAgICAgICAgICAgYWNjdW11bGF0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhy
ZXBhaW50Q29udGFpbmVyUmVjdHMsIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaXRlci0+a2V5KSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gaXRlci0+a2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVu
ZGVyZXItPmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMocmVwYWludENvbnRhaW5lclJl
Y3RzKTsKKyAgICB9Cit9CisjZW5kaWYKKworUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBSZXBhaW50
Q29udGFpbmVySGl0VGVzdFJlY3RzIHJlcGFpbnRDb250YWluZXJSZWN0czsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgaWYgKCFkb2N1bWVudC0+dmlldygpKQorICAgICAg
ICByZXR1cm4gcmVwYWludENvbnRhaW5lclJlY3RzOworCisgICAgYWNjdW11bGF0ZVRvdWNoRXZl
bnRUYXJnZXRSZWN0cyhyZXBhaW50Q29udGFpbmVyUmVjdHMsIGRvY3VtZW50KTsKKyNlbmRpZgor
ICAgIHJldHVybiByZXBhaW50Q29udGFpbmVyUmVjdHM7Cit9CisKIHVuc2lnbmVkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogewog
ICAgIHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgPSAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShy
ZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3Jv
bGxUeXBlcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
QEAgLTUwLDYgKzUxLDcgQEAgdHlwZWRlZiB1aW50NjRfdCBTY3JvbGxpbmdOb2RlSUQ7CiAKIGVu
dW0gU2Nyb2xsaW5nTm9kZVR5cGUgeyBTY3JvbGxpbmdOb2RlLCBGaXhlZE5vZGUgfTsKIAorY2xh
c3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBo
aWNzTGF5ZXI7CkBAIC0xNDksNyArMTUxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhp
Y3NMYXllciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklzQ29udGFpbmVyRm9yRml4
ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNv
bnN0IERvY3VtZW50KikgeyB9CiAKKyAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIGNv
bXB1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgRG9jdW1lbnQqKTsKIHByb3RlY3RlZDoK
ICAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2No
cm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzY1NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCwyMyBAQCB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gYWxsIHNjcm9s
bGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJv
eGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKICAgICAvLyBmcmFtZSB2aWV3IHdo
b3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAgUmVnaW9u
IG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
KG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworICAgIFJlcGFpbnRDb250YWluZXJI
aXRUZXN0UmVjdHMgdG91Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVRvdWNoRXZlbnRUYXJn
ZXRSZWN0cyhtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKTsKICAgICBzZXROb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7CisgICAgc2V0VG91Y2hF
dmVudFRhcmdldFJlY3RzKHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgLy8gV2FpdCB1bnRpbCBhZnRlciBsYXlv
dXQgdG8gdXBkYXRlLgorICAgIGlmIChtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPm5lZWRz
TGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHdvbid0IG5lY2Vzc2FyaWx5
IGdldCBhIHNldFNjcm9sbExheWVyKCkgY2FsbCBiZWZvcmUgdGhpcyBvbmUsIHNvIGdyYWIgdGhl
IHJvb3Qgb3Vyc2VsdmVzLgorICAgIHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJhbWVW
aWV3KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpOworICAgIGlmIChtX3ByaXZhdGUtPnNj
cm9sbExheWVyKCkpIHsKKyAgICAgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyB0b3Vj
aEV2ZW50VGFyZ2V0UmVjdHMgPSBjb21wdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50
KTsKKyAgICAgICAgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKHRvdWNoRXZlbnRUYXJnZXRSZWN0
cyk7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1l
Vmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKQEAgLTIwOSw2ICsy
MjUsMjAgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRObwogICAgIH0K
IH0KIAordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50VGFy
Z2V0UmVjdHMoY29uc3QgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRh
aW5lclJlY3RzKQoreworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJSZWN0cy5iZWdpbigpOyBpdGVyICE9
IHJlcGFpbnRDb250YWluZXJSZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFdlYlZlY3Rv
cjxXZWJSZWN0PiB3ZWJSZWN0cyhpdGVyLT52YWx1ZS5zaXplKCkpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICAgICAgd2Vi
UmVjdHNbaV0gPSBpdGVyLT52YWx1ZVtpXTsKKworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5s
YXllcigpKTsKKyAgICAgICAgV2ViTGF5ZXIqIHdlYkxheWVyID0gaXRlci0+a2V5LT5sYXllcigp
LT5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpOworICAgICAgICBB
U1NFUlQod2ViTGF5ZXIpOworICAgICAgICB3ZWJMYXllci0+c2V0VG91Y2hFdmVudEhhbmRsZXJS
ZWdpb24od2ViUmVjdHMpOworICAgIH0KK30KKwogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5k
bGVyQ291bnQpCiB7CiAgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xs
TGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCShyZXZpc2lv
biAxMzY1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCwx
NiBAQCBwdWJsaWM6CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2Nyb2xs
YWJsZSBsYXllciBmb3IgdGhlIGdpdmVuIHNjcm9sbCBhcmVhIGNoYW5nZXMuCiAgICAgdmlydHVh
bCB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEq
LCBHcmFwaGljc0xheWVyKik7CiAKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRv
dWNoIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkLCByZW1vdmVkLCBvciBtb3ZlZC4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZChjb25zdCBEb2N1bWVudCop
IE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZWNvbXB1dGVXaGVlbEV2
ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJl
YWRTY3JvbGxpbmdSZWFzb25zKTsKIAogICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NM
YXllciopOwogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9u
Jik7CisgICAgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgUmVwYWludENvbnRh
aW5lckhpdFRlc3RSZWN0cyYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1
bnNpZ25lZCk7CiAgICAgUGFzc093blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhckxheWVyPiBjcmVh
dGVTY3JvbGxiYXJMYXllcihTY3JvbGxiYXIqLCBXZWJLaXQ6OldlYkxheWVyKiBzY3JvbGxMYXll
ciwgR3JhcGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVWaWV3Kik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24g
MTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOSBAQAogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykK
ICNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCIKICNlbmRpZgorI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjZW5kaWYK
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02OTI1LDYg
KzY5MjgsNDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAg
ICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCBmbG9vcmVkTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9mZnNldCArIGlubGluZUVsZW1lbnRDb250
aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBsb2NhdGlvbigpKSk7
CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMo
UmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRhaW5lclJlY3RzLCBjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIHJlcGFpbnRPZmZzZXQpIGNvbnN0Cit7CisgICAgTGF5b3V0UG9pbnQgYWRq
dXN0ZWRSZXBhaW50T2Zmc2V0ID0gcmVwYWludE9mZnNldDsKKyAgICBpZiAoIWN1cnJlbnRSZXBh
aW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWludGluZ0xheWVyKCkpCisgICAgICAgIHJlcGFpbnRD
b250YWluZXJBbmRPZmZzZXQoY3VycmVudFJlcGFpbnRDb250YWluZXIsIGFkanVzdGVkUmVwYWlu
dE9mZnNldCk7CisKKyAgICBpZiAoIWN1cnJlbnRSZXBhaW50Q29udGFpbmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVzdWx0OworCisgICAgaWYgKHdpZHRoKCkg
JiYgaGVpZ2h0KCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChh
ZGp1c3RlZFJlcGFpbnRPZmZzZXQsIHNpemUoKSkpOworCisgICAgaWYgKGhhc0hvcml6b250YWxM
YXlvdXRPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3coKSkgeworICAgICAg
ICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9
IGN1cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgdG9wID0gbWF4
PExheW91dFVuaXQ+KGN1cnItPmxpbmVUb3AoKSwgY3Vyci0+dG9wKCkpOworICAgICAgICAgICAg
TGF5b3V0VW5pdCBib3R0b20gPSBtaW48TGF5b3V0VW5pdD4oY3Vyci0+bGluZUJvdHRvbSgpLCBj
dXJyLT50b3AoKSArIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcmVj
dChhZGp1c3RlZFJlcGFpbnRPZmZzZXQueCgpICsgY3Vyci0+eCgpLCBhZGp1c3RlZFJlcGFpbnRP
ZmZzZXQueSgpICsgdG9wLCBjdXJyLT53aWR0aCgpLCBib3R0b20gLSB0b3ApOworICAgICAgICAg
ICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBp
eGVsU25hcHBlZEludFJlY3QocmVjdCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0
U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlz
dE1hcmtlcigpICYmIGN1cnItPmlzQm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogYm94
ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBib3gtPmFkZFJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHMocmVwYWludENvbnRhaW5lclJlY3RzLCBjdXJyZW50UmVwYWludENvbnRh
aW5lciwgIGFkanVzdGVkUmVwYWludE9mZnNldCArIGJveC0+bG9jYXRpb25PZmZzZXQoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
UmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6aXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250
YWluZXJSZWN0cy5maW5kKGN1cnJlbnRSZXBhaW50Q29udGFpbmVyKTsKKyAgICAgICAgaWYgKGl0
ZXIgPT0gcmVwYWludENvbnRhaW5lclJlY3RzLmVuZCgpKQorICAgICAgICAgICAgaXRlciA9IHJl
cGFpbnRDb250YWluZXJSZWN0cy5hZGQoY3VycmVudFJlcGFpbnRDb250YWluZXIsIHJlc3VsdCku
aXRlcmF0b3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLmFwcGVuZChy
ZXN1bHQpOworICAgIH0KK30KKwogUmVuZGVyQm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnlt
b3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQpIGNvbnN0CiB7
CiAgICAgaWYgKGlzQW5vbnltb3VzQ29sdW1uc0Jsb2NrKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwNiw2ICs1MDYs
OCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBh
ZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5l
ciA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURF
OworCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBPbmx5IHVzZWQgYnkgUmVuZGVyU1ZHVGV4dCwg
d2hpY2ggZXhwbGljaXRlbHkgb3ZlcnJpZGVzIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jaygpLCBk
byBOT1QgdXNlIGZvciBhbnl0aGluZyBlbHNlLgogICAgIHZvaWQgZm9yY2VMYXlvdXRJbmxpbmVD
aGlsZHJlbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2
aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4MCw2ICs0ODAsMjkgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcgogICAgICAgICByZWN0cy5hcHBlbmQocGl4ZWxTbmFwcGVkSW50
UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAordm9pZCBSZW5kZXJCb3g6OmFk
ZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0
cyYgcmVwYWludENvbnRhaW5lclJlY3RzLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBj
dXJyZW50UmVwYWludENvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIHJlcGFpbnRPZmZzZXQp
IGNvbnN0Cit7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0ID0gcmVwYWlu
dE9mZnNldDsKKyAgICBpZiAoIWN1cnJlbnRSZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWlu
dGluZ0xheWVyKCkpCisgICAgICAgIHJlcGFpbnRDb250YWluZXJBbmRPZmZzZXQoY3VycmVudFJl
cGFpbnRDb250YWluZXIsIGFkanVzdGVkUmVwYWludE9mZnNldCk7CisKKyAgICBpZiAoIWN1cnJl
bnRSZXBhaW50Q29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2lkdGgoKSAm
JiBoZWlnaHQoKSkgeworICAgICAgICBJbnRSZWN0IHJlc3VsdChwaXhlbFNuYXBwZWRJbnRSZWN0
KGFkanVzdGVkUmVwYWludE9mZnNldCwgc2l6ZSgpKSk7CisKKyAgICAgICAgUmVwYWludENvbnRh
aW5lckhpdFRlc3RSZWN0czo6aXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJSZWN0cy5m
aW5kKGN1cnJlbnRSZXBhaW50Q29udGFpbmVyKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVwYWlu
dENvbnRhaW5lclJlY3RzLmVuZCgpKSB7CisgICAgICAgICAgICBWZWN0b3I8SW50UmVjdD4gcmVz
dWx0VmVjdG9yOworICAgICAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChyZXN1bHQpOworICAg
ICAgICAgICAgcmVwYWludENvbnRhaW5lclJlY3RzLmFkZChjdXJyZW50UmVwYWludENvbnRhaW5l
ciwgcmVzdWx0VmVjdG9yKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdGVyLT52YWx1
ZS5hcHBlbmQocmVzdWx0KTsKKyAgICB9Cit9CisKKwogTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJl
ZmxlY3Rpb25Cb3goKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVzdWx0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiAr
MTU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9y
UmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIq
LywgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3Rz
KFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9IExh
eW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0
aW9uISBObyB0eXBlIGNoZWNraW5nIGlzIGRvbmUhCiAgICAgUmVuZGVyQm94KiBwcmV2aW91c1Np
YmxpbmdCb3goKSBjb25zdDsKICAgICBSZW5kZXJCb3gqIG5leHRTaWJsaW5nQm94KCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNp
b24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MjUsNiArMTQyNSw0NCBAQCB2b2lkIFJlbmRlcklubGluZTo6
YWRkRm9jdXNSaW5nUmVjdHMoVmVjCiAgICAgfQogfQogCit2b2lkIFJlbmRlcklubGluZTo6YWRk
UmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3Rz
JiByZXBhaW50Q29udGFpbmVyUmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1
cnJlbnRSZXBhaW50Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgcmVwYWludE9mZnNldCkg
Y29uc3QKK3sKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFJlcGFpbnRPZmZzZXQgPSByZXBhaW50
T2Zmc2V0OworICAgIGlmICghY3VycmVudFJlcGFpbnRDb250YWluZXIgfHwgaGFzU2VsZlBhaW50
aW5nTGF5ZXIoKSkKKyAgICAgICAgcmVwYWludENvbnRhaW5lckFuZE9mZnNldChjdXJyZW50UmVw
YWludENvbnRhaW5lciwgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0KTsKKworICAgIGlmICghY3VycmVu
dFJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxJbnRSZWN0
PiByZXN1bHQ7CisgICAgQWJzb2x1dGVSZWN0c0dlbmVyYXRvckNvbnRleHQgY29udGV4dChyZXN1
bHQsIGFkanVzdGVkUmVwYWludE9mZnNldCk7CisgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoY29u
dGV4dCk7CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjdXJyLT5pc1Rl
eHQoKSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkpIHsKKyAgICAgICAgICAgIExheW91dFBvaW50
IHBvcyhhZGp1c3RlZFJlcGFpbnRPZmZzZXQpOworICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94
KCkpCisgICAgICAgICAgICAgICAgcG9zLm1vdmUodG9SZW5kZXJCb3goY3VyciktPmxvY2F0aW9u
T2Zmc2V0KCkpOworICAgICAgICAgICAgY3Vyci0+YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RS
ZWN0cyhyZXBhaW50Q29udGFpbmVyUmVjdHMsIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCBwb3Mp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7CisgICAgICAg
IGlmIChjb250aW51YXRpb24oKS0+aXNJbmxpbmUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVhdGlv
bigpLT5hZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKHJlcGFpbnRDb250YWluZXJSZWN0
cywgY3VycmVudFJlcGFpbnRDb250YWluZXIsIHRvUG9pbnQoYWRqdXN0ZWRSZXBhaW50T2Zmc2V0
ICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpIC0gY29udGFp
bmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29u
dGludWF0aW9uKCktPmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMocmVwYWludENvbnRh
aW5lclJlY3RzLCBjdXJyZW50UmVwYWludENvbnRhaW5lciwgdG9Qb2ludChhZGp1c3RlZFJlcGFp
bnRPZmZzZXQgKyB0b1JlbmRlckJveChjb250aW51YXRpb24oKSktPmxvY2F0aW9uKCkgLSBjb250
YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSkpOworICAgIH0KKworICAgIGlmICghcmVzdWx0Lmlz
RW1wdHkoKSkgeworICAgICAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzOjppdGVyYXRv
ciBpdGVyID0gcmVwYWludENvbnRhaW5lclJlY3RzLmZpbmQoY3VycmVudFJlcGFpbnRDb250YWlu
ZXIpOworICAgICAgICBpZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVyUmVjdHMuZW5kKCkpCisg
ICAgICAgICAgICByZXBhaW50Q29udGFpbmVyUmVjdHMuYWRkKGN1cnJlbnRSZXBhaW50Q29udGFp
bmVyLCByZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVyLT52YWx1ZS5hcHBl
bmQocmVzdWx0KTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCkKIHsKICAgICBpZiAoIWhhc091dGxpbmUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBwYWludE91dGxpbmUoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBh
ZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5l
ciA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURF
OworCiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnRpbnVhdGlvbjsKICAgICB1
c2luZyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0Q29udGludWF0aW9uOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTM2NTY2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxMyw2ICs2MTMsMjMgQEAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBSZW5kZXJPYmpl
Y3Q6OnJlbgogICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0LT5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpID8gdG9SZW5kZXJOYW1lZEZsb3dUaHJlYWQob2JqZWN0KSA6IDA7CiB9CiAKK3ZvaWQg
UmVuZGVyT2JqZWN0OjpyZXBhaW50Q29udGFpbmVyQW5kT2Zmc2V0KGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqJiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRQb2ludCYgb2Zmc2V0KSBjb25z
dAoreworICAgIHJlcGFpbnRDb250YWluZXIgPSBjb250YWluZXJGb3JSZXBhaW50KCk7CisgICAg
aWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTZWxmLXBh
aW50aW5nIGxheWVycyBzdWJ0cmFjdCB0aGUgcmVuZGVyZXIncyBsb2NhdGlvbi4gT3RoZXJ3aXNl
LCB3ZSBuZWVkIHRvIG1hcCBvdXIgbG9jYXRpb24gdG8gY29udGFpbmVyIHNwYWNlLgorICAgIGlm
IChyZXBhaW50Q29udGFpbmVyID09IHRoaXMpCisgICAgICAgIG9mZnNldCA9IExheW91dFBvaW50
KCk7CisgICAgZWxzZSB7CisgICAgICAgIFRyYW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0YXRlKFRy
YW5zZm9ybVN0YXRlOjpBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwgRmxvYXRQb2ludCgpKTsKKyAg
ICAgICAgbWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0
ZSwgQXBwbHlDb250YWluZXJGbGlwIHwgVXNlVHJhbnNmb3JtcyB8IFNuYXBPZmZzZXRGb3JUcmFu
c2Zvcm1zKTsKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUuZmxhdHRlbigpOworICAgICAgICBvZmZz
ZXQgPSBMYXlvdXRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5sYXN0UGxhbmFyUG9pbnQoKSk7CisgICAg
fQorfQorCiBSZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9jaygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdHJ1Y3QgQW5u
b3RhdGVkUmVnaW9uVmFsdWUgewogI2VuZGlmCiAKIHR5cGVkZWYgV1RGOjpIYXNoU2V0PGNvbnN0
IFJlbmRlck9iamVjdCo+IFJlbmRlck9iamVjdEFuY2VzdG9yTGluZWJveERpcnR5U2V0OwotCit0
eXBlZGVmIFdURjo6SGFzaE1hcDxjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiwgVmVjdG9y
PEludFJlY3Q+ID4gUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czsKICNpZm5kZWYgTkRFQlVH
CiBjb25zdCBpbnQgc2hvd1RyZWVDaGFyYWN0ZXJPZmZzZXQgPSAzOTsKICNlbmRpZgpAQCAtOTQ3
LDYgKzk0Nyw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKSB7IH07CiAKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFp
bmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogPSAwLCBjb25z
dCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCB7IH07CisKICAgICBMYXlvdXRS
ZWN0IGFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoMCk7CkBAIC05NjAsNiArOTYyLDggQEAgcHVibGljOgog
cHJvdGVjdGVkOgogICAgIGlubGluZSBib29sIGxheWVyQ3JlYXRpb25BbGxvd2VkRm9yU3VidHJl
ZSgpIGNvbnN0OwogCisgICAgdm9pZCByZXBhaW50Q29udGFpbmVyQW5kT2Zmc2V0KGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqJiwgTGF5b3V0UG9pbnQmKSBjb25zdDsKKwogICAgIC8vIE92
ZXJyaWRlcyBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcyBhdCB0aGUgZW5kCiAgICAgdmlydHVh
bCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxl
KiBuZXdTdHlsZSk7CiAgICAgLy8gT3ZlcnJpZGVzIHNob3VsZCBjYWxsIHRoZSBzdXBlcmNsYXNz
IGF0IHRoZSBzdGFydApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNiArMjYyLDI1IEBAIHZvaWQgUmVuZGVyVmll
dzo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyVmlldzo6
YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzJiByZXBhaW50Q29udGFpbmVyUmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Cit7Cisg
ICAgY3VycmVudFJlcGFpbnRDb250YWluZXIgPSBjb250YWluZXJGb3JSZXBhaW50KCk7CisgICAg
aWYgKCFjdXJyZW50UmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50
UmVjdCBkb2N1bWVudFJlY3QgPSB1bnNjYWxlZERvY3VtZW50UmVjdCgpOworICAgIGlmIChkb2N1
bWVudFJlY3Qud2lkdGgoKSAmJiBkb2N1bWVudFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgVmVj
dG9yPEludFJlY3Q+IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFJlY3Qp
OworCisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6Oml0ZXJhdG9yIGl0ZXIg
PSByZXBhaW50Q29udGFpbmVyUmVjdHMuZmluZChjdXJyZW50UmVwYWludENvbnRhaW5lcik7Cisg
ICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJSZWN0cy5lbmQoKSkKKyAgICAgICAg
ICAgIHJlcGFpbnRDb250YWluZXJSZWN0cy5hZGQoY3VycmVudFJlcGFpbnRDb250YWluZXIsIHJl
c3VsdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlID0gcmVzdWx0Owor
ICAgIH0KK30KKwogYm9vbCBSZW5kZXJWaWV3OjpyZXF1aXJlc0NvbHVtbnMoaW50IGRlc2lyZWRD
b2x1bW5Db3VudCkgY29uc3QKIHsKICAgICBpZiAobV9mcmFtZVZpZXcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWlu
ZXIgPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklE
RTsKKwogICAgIGVudW0gU2VsZWN0aW9uUmVwYWludE1vZGUgeyBSZXBhaW50TmV3WE9ST2xkLCBS
ZXBhaW50TmV3TWludXNPbGQsIFJlcGFpbnROb3RoaW5nIH07CiAgICAgdm9pZCBzZXRTZWxlY3Rp
b24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwg
aW50IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKICAg
ICB2b2lkIGdldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBpbnQmIHN0
YXJ0T2Zmc2V0LCBSZW5kZXJPYmplY3QqJiBlbmRSZW5kZXJlciwgaW50JiBlbmRPZmZzZXQpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290Lmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgog
I2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKQEAgLTkxLDYgKzkyLDEyIEBAIHZvaWQgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMKICAgICBxdWFkcy5hcHBlbmQobG9jYWxU
b0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpLCAwIC8qIG1vZGUgKi8sIHdhc0ZpeGVk
KSk7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFkZFJlcGFpbnRDb250YWluZXJI
aXRUZXN0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRhaW5l
clJlY3RzLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIHJlcGFpbnRPZmZzZXQpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IGNhbGN1bGF0ZSB0aGUgbWluaW1hbCByZWN0LgorICAgIHJldHVybiBTVkdSZW5kZXJT
dXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QodGhpcyktPmFkZFJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMocmVwYWludENvbnRhaW5lclJlY3RzLCBjdXJyZW50UmVwYWludENvbnRhaW5lciwg
cmVwYWludE9mZnNldCk7Cit9CisKIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OndpbGxCZURl
c3Ryb3llZCgpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudERlc3Ryb3llZCh0aGlz
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiAr
NTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdh
c0ZpeGVkKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0IExheW91dFBv
aW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAgICAgdmlydHVhbCB2b2lk
IG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBNYXBDb29yZGluYXRlc0ZsYWdzID0gQXBwbHlD
b250YWluZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMsIGJvb2wqIHdhc0ZpeGVkID0g
MCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hN
YXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JU
b1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUq
IG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlz
aW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQu
aCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1l
UmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUg
IlNlbGVjdFJ1bGVGZWF0dXJlU2V0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTExOTYsOCArMTE5Nyw0MSBAQCB1bnNpZ25l
ZCBJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIHJldHVybiBkb2N1bWVudC0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpOworICAg
IGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoSGFuZGxlcnMgPSBkb2N1bWVudC0+dG91
Y2hFdmVudFRhcmdldHMoKTsKKyAgICBpZiAoIXRvdWNoSGFuZGxlcnMpCisgICAgICAgIHJldHVy
biAwOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdl
dFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRvdWNoSGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIg
IT0gdG91Y2hIYW5kbGVycy0+ZW5kKCk7ICsraXRlcikKKyAgICAgICAgY291bnQgKz0gaXRlci0+
dmFsdWU7CisgICAgcmV0dXJuIGNvdW50OworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RS
QUNLSU5HKQorUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gSW50ZXJuYWxzOjp0b3VjaEV2ZW50
VGFyZ2V0Q2xpZW50UmVjdHMoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpIHx8ICFkb2N1bWVudC0+
cGFnZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKCFkb2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGlu
YXRvcigpKQorICAgICAgICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZSgpOworCisgICAg
ZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAg
VmVjdG9yPEludFJlY3Q+IHJlY3RzOworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworCisg
ICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyByZXBhaW50Q29udGFpbmVyUmVjdHMgPSBk
b2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpLT5jb21wdXRlVG91Y2hFdmVu
dFRhcmdldFJlY3RzKGRvY3VtZW50KTsKKworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0czo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJSZWN0cy5iZWdp
bigpOyBpdGVyICE9IHJlcGFpbnRDb250YWluZXJSZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBxdWFkcy5hcHBlbmQoaXRlci0+a2V5LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0
UXVhZChpdGVyLT52YWx1ZVtpXSksIFVzZVRyYW5zZm9ybXMgfCBBcHBseUNvbnRhaW5lckZsaXAg
fCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3JtcykpOworICAgIH0KKworICAgIHJldHVybiBDbGllbnRS
ZWN0TGlzdDo6Y3JlYXRlKHF1YWRzKTsKIH0KKyNlbmRpZgogCiBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBJbnRlcm5hbHM6Om5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgeCwgaW50
IHksIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICB1bnNp
Z25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlw
cGluZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiAxMzY1NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEs
NiArMTcxLDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3Vu
dChEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFu
ZGxlckNvdW50KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJMRShUT1VDSF9F
VkVOVF9UUkFDS0lORykKKyAgICBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiB0b3VjaEV2ZW50
VGFyZ2V0Q2xpZW50UmVjdHMoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKIAog
ICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqLCBpbnQgeCwg
aW50IHksIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICAg
ICAgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcsIGJvb2wgaWdu
b3JlQ2xpcHBpbmcsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxMzY1
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEzOCw2ICsxMzgsOSBAQAogCiAgICAgdW5zaWduZWQgbG9uZyB3aGVlbEV2ZW50SGFu
ZGxlckNvdW50KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAg
ICAgdW5zaWduZWQgbG9uZyB0b3VjaEV2ZW50SGFuZGxlckNvdW50KGluIERvY3VtZW50IGRvY3Vt
ZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisjaWYgZGVmaW5lZChFTkFCTEVfVE9VQ0hfRVZF
TlRfVFJBQ0tJTkcpICYmIEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORworICAgIENsaWVudFJl
Y3RMaXN0IHRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhpbiBEb2N1bWVudCBkb2N1bWVudCkg
cmFpc2VzIChET01FeGNlcHRpb24pOworI2VuZGlmCiAKICAgICBOb2RlTGlzdCBub2Rlc0Zyb21S
ZWN0KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBsb25nIHgsIGluIGxvbmcgeSwKICAgICAgICAg
aW4gdW5zaWduZWQgbG9uZyB0b3BQYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIHJpZ2h0UGFkZGlu
ZywgaW4gdW5zaWduZWQgbG9uZyBib3R0b21QYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIGxlZnRQ
YWRkaW5nLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjU2NikK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTItMTItMDQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5n
bGVzIHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxpbmcgdG91
Y2ggZXZlbnQgdGFyZ2V0IHJlZ2lvbiB0cmFja2luZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5
cGk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpyZXF1ZXN0VG91Y2hFdmVudFR5cGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFp
bmVySW1wbCk6CisKIDIwMTItMTItMDQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiAr
MTE0LDcgQEAKICAgICAgICdFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVD0xJywKICAgICAgICdFTkFC
TEVfVE9VQ0hfRVZFTlRTPTwoZW5hYmxlX3RvdWNoX2V2ZW50cyknLAogICAgICAgJ0VOQUJMRV9U
T1VDSF9JQ09OX0xPQURJTkc9PChlbmFibGVfdG91Y2hfaWNvbl9sb2FkaW5nKScsCisgICAgICAn
RU5BQkxFX1RPVUNIX0VWRU5UX1RSQUNLSU5HPTwoZW5hYmxlX3RvdWNoX2V2ZW50cyknLAogICAg
ICAgJ0VOQUJMRV9UT1VDSF9TTElERVI9MScsCiAgICAgICAnRU5BQkxFX1Y4X1NDUklQVF9ERUJV
R19TRVJWRVI9MScsCiAgICAgICAnRU5BQkxFX1ZJREVPPTEnLApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHJl
dmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNv
bnRhaW5lckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsOSArNTI3LDkgQEAgdm9pZCBX
ZWJQbHVnaW5Db250YWluZXJJbXBsOjpyZXF1ZXN0VG91YwogICAgICAgICByZXR1cm47CiAgICAg
bV90b3VjaEV2ZW50UmVxdWVzdFR5cGUgPSByZXF1ZXN0VHlwZTsKICAgICBpZiAobV90b3VjaEV2
ZW50UmVxdWVzdFR5cGUgIT0gVG91Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAgICAgbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7
CiAgICAgZWxzZQotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKCk7CisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIobV9lbGVtZW50KTsKIH0KIAogdm9pZCBXZWJQbHVnaW5Db250YWlu
ZXJJbXBsOjpzZXRXYW50c1doZWVsRXZlbnRzKGJvb2wgd2FudHNXaGVlbEV2ZW50cykKQEAgLTY4
Miw3ICs2ODIsNyBAQCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpCiAj
ZW5kaWYKIAogICAgIGlmIChtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSAhPSBUb3VjaEV2ZW50UmVx
dWVzdFR5cGVOb25lKQotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRv
dWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIobV9lbGVtZW50KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBtX3BsdWdp
bkxvYWRPYnNlcnZlcnNbaV0tPmNsZWFyUGx1Z2luQ29udGFpbmVyKCk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzY1NjYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMyBAQAorMjAxMi0xMi0wNCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJlY3Rh
bmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVu
dHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbDogQWRkZWQuCisKIDIwMTIt
MTItMDQgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQgY2hyb21pdW0gZXhwZWN0YXRpb25zIHVwZGF0ZS4KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJl
Y3RzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0
L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorVGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0
IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVu
IGluIER1bXBSZW5kZXJUcmVlLiBUaGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUg
aGl0IHRlc3QgcmVnaW9ucyBvZiBhbGwgdGhlIGxpc3RlZCBlbGVtZW50cy4KKworbm9ybWFsRmxv
d1swXTogKDgsIDcyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclswXTogKDgsIDEw
MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMV06ICgxMTgsIDMwMCwgMTQwLCAx
MCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMF06ICg4LCAxNTIsIDc4NCwgMTApCityZWxhdGl2
ZUNoaWxkQ29udGFpbmVyWzFdOiAoOCwgMTUyLCAyNjAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWlu
ZXJbMF06ICg4LCAyMDIsIDEwMCwgODApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclsxXTogKDgsIDIw
MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzJdOiAoOCwgMjAyLCA3ODQsIDEwKQor
b3ZlcmhhbmdpbmdDb250YWluZXJbM106ICg4LCAyMTIsIDUwLCAxMCkKK292ZXJoYW5naW5nQ29u
dGFpbmVyWzRdOiAoOCwgMjIyLCAxMTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbNV06ICg4
LCAyMzIsIDUwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzZdOiAoOCwgMjQyLCAxMTAsIDEw
KQorb3ZlcmhhbmdpbmdDb250YWluZXJbN106ICg4LCAyNTIsIDUwLCAxMCkKK292ZXJoYW5naW5n
Q29udGFpbmVyWzhdOiAoOCwgMjYyLCAxMTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbOV06
ICg4LCAyNzIsIDUwLCAxMCkKK3RyYW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMF06ICg2MiwgNDAx
LCA2NjEsIDMyKQordHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lclsxXTogKDgsIDQxMiwgNzY5LCAx
MCkKK2NvbnRpbnVhdGlvblswXTogKDEwOCwgNDYyLCAxMDAsIDEwKQorY29udGludWF0aW9uWzFd
OiAoOCwgNDcyLCA3NjksIDEwKQorY29udGludWF0aW9uWzJdOiAoOCwgNDcyLCA3NjksIDEwKQor
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9j
b21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0
LXJlY3RzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c3R5bGU+CisjdHJhbnNmb3JtZWRDaGlsZCB7CisJLXdlYmtpdC10cmFuc2Zvcm06IHJv
dGF0ZTNkKDAuMiwgMSwgMCwgMzVncmFkKTsKK30KKyNhYnNvbHV0ZUNoaWxkIHsKKwlwb3NpdGlv
bjogYWJzb2x1dGU7CisJdG9wOiAzMDBweDsKK30KKyNyZWxhdGl2ZUNoaWxkIHsKKwlwb3NpdGlv
bjogcmVsYXRpdmU7CisJdG9wOiAyMDBweDsKK30KKyNvdmVyaGFuZ2luZ0NvbnRhaW5lciB7CisJ
aGVpZ2h0OiAxMHB4OworfQorI292ZXJoYW5naW5nRmxvYXRpbmdDaGlsZCB7CisJd2lkdGg6IDEw
MHB4OworCWZsb2F0OiBsZWZ0OworfQorI3Rlc3RzIHsKKwlmb250OiAxMHB4IEFoZW07Cit9Cis8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRoaXMgdGVzdHMg
dmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0
IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJlZS4KK1RoZSBvdXRwdXR0ZWQgcmVjdHMg
c2hvdWxkIGNvdmVyIHRoZSBoaXQgdGVzdCByZWdpb25zIG9mIGFsbCB0aGUgbGlzdGVkIGVsZW1l
bnRzLjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJ0ZXN0cyI+CisJ
PGRpdiBpZD0ibm9ybWFsRmxvdyI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuPnN1bTwvc3Bhbj4u
CisJPC9kaXY+CisJPGRpdiBpZD0iYWJzb2x1dGVDaGlsZENvbnRhaW5lciI+CisJCUxvcmVtIGlw
c3VtCisJCTxzcGFuIGlkPSJhYnNvbHV0ZUNoaWxkIj5BYnNvbHV0ZSBjaGlsZDwvc3Bhbj4KKwk8
L2Rpdj4KKwk8ZGl2IGlkPSJyZWxhdGl2ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0K
KwkJPHNwYW4gaWQ9InJlbGF0aXZlQ2hpbGQiPlJlbGF0aXZlIGNoaWxkPC9zcGFuPgorCTwvZGl2
PgorCTxkaXYgaWQ9Im92ZXJoYW5naW5nQ29udGFpbmVyIj4KKwkJPGRpdiBpZD0ib3Zlcmhhbmdp
bmdGbG9hdGluZ0NoaWxkIj5PdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVy
aGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdDwvZGl2PgorCTwvZGl2PgorCTxkaXYgaWQ9
InRyYW5zZm9ybWVkQ2hpbGRDb250YWluZXIiPgorCQk8ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxk
Ij5UcmFuc2Zvcm1lZDwvZGl2PgorCTwvZGl2PgorCTxkaXY+CisJCTxiIGlkPSJjb250aW51YXRp
b24iPlRoaXMgYiB0YWcKKwkJPGRpdj5jYXVzZXMgYTwvZGl2PgorCQljb250aW51YXRpb248L2I+
CisJPC9kaXY+Cis8L2Rpdj4KKzxzY3JpcHQ+CitpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQorCXJl
dHVybjsKKword2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsaXN0
ZW5lcigpIHsgfQorCitmdW5jdGlvbiBsb2cobXNnKSB7CisJdmFyIHNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUi
KS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4n
OworfQorCitmdW5jdGlvbiBzb3J0UmVjdHMoYSwgYikgeworCXJldHVybiBhLnRvcCAtIGIudG9w
OworfQorCitmdW5jdGlvbiBsb2dSZWN0cyhpZCkgeworCWVsZW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChpZCk7CisJZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywg
bGlzdGVuZXIsIGZhbHNlKTsKKwlyZWN0cyA9IHdpbmRvdy5pbnRlcm5hbHMudG91Y2hFdmVudFRh
cmdldENsaWVudFJlY3RzKGRvY3VtZW50KTsKKwl2YXIgc29ydGVkUmVjdHMgPSBuZXcgQXJyYXko
KTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgKytpKQorCQlzb3J0ZWRSZWN0
c1tpXSA9IHJlY3RzW2ldOworCXNvcnRlZFJlY3RzLnNvcnQoc29ydFJlY3RzKTsKKwlmb3IgKHZh
ciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgKytpKQorCQlsb2coaWQgKyAiWyIgKyBpICsgIl06
ICgiICsgc29ydGVkUmVjdHNbaV0ubGVmdCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS50b3AgKyAi
LCAiICsgc29ydGVkUmVjdHNbaV0ud2lkdGggKyAiLCAiICsgc29ydGVkUmVjdHNbaV0uaGVpZ2h0
ICsgIikiKTsKKwllbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0
ZW5lciwgZmFsc2UpOworfQorCitsb2dSZWN0cygibm9ybWFsRmxvdyIpOworbG9nUmVjdHMoImFi
c29sdXRlQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJyZWxhdGl2ZUNoaWxkQ29udGFpbmVy
Iik7Citsb2dSZWN0cygib3ZlcmhhbmdpbmdDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJ0cmFuc2Zv
cm1lZENoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygiY29udGludWF0aW9uIik7CisKK3ZhciB0
ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RzIik7Cit0ZXN0Q29u
dGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7CisKKzwvc2NyaXB0
PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177615</attachid>
            <date>2012-12-04 17:22:24 -0800</date>
            <delta_ts>2012-12-07 12:35:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121204171949.patch</filename>
            <type>text/plain</type>
            <size>49523</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxMi0xMi0wNCAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuIFRoZSBuZXcgZnVuY3Rpb24gYWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cwor
ICAgICAgICBnZW5lcmF0ZXMgdGhlIGhpdCB0ZXN0IHJlY3RhbmdsZXMgZm9yIGEgZ2l2ZW4gbm9k
ZSBpbiB0aGVpciByZXBhaW50IGNvbnRhaW5lciBjb29yZGluYXRlcyBmb3Igc3BlZWR5CisgICAg
ICAgIHVwbG9hZGluZyB0byB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBUZXN0OiBwbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5o
dG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6Omhhc1RvdWNoRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudFRhcmdldHMpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpZE1vdmVUb05l
d0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZUJhc2U6OnJl
c3RvcmUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZVRvdWNoRXZlbnRUYXJn
ZXRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0
ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRU
b3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5oOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAg
KFJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaDoKKyAgICAgICAgKFJlbmRlcklubGluZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6CisgICAgICAg
IChSZW5kZXJPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
aDoKKyAgICAgICAgKFJlbmRlclZpZXcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAg
ICAoUmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hF
dmVudFRhcmdldENsaWVudFJlY3RzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgor
ICAgICAgICAoSW50ZXJuYWxzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisK
IDIwMTItMTItMDQgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtVc2VyIFRpbWluZ10gRml4IGNsYW5nIGJ1aWxkIGJ5IHJlbW92aW5nIG5lZWQgZm9y
IGV4aXQgdGltZSBkZXN0cnVjdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlz
aW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5NCw5ICs0OTQsNiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBLCiAgICAgLCBtX3dyaXRlUmVjdXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwg
bV93cml0ZVJlY3Vyc2lvbkRlcHRoKDApCiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQo
MCkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNv
dW50KDApCi0jZW5kaWYKICAgICAsIG1fcGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50
OjpwZW5kaW5nVGFza3NUaW1lckZpcmVkKQogICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3Bl
bmRlZChmYWxzZSkKICAgICAsIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTU1NjEs
MzMgKzU1NTgsNTcgQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZQog
ICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKHRoaXMpOwogfQogCi12b2lkIERvY3Vt
ZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcihOb2RlKiBoYW5kbGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgKyttX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhh
bmRsZXJDb3VudCA+IDEpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQorICAg
ICAgICBtX3RvdWNoRXZlbnRUYXJnZXRzID0gYWRvcHRQdHIobmV3IFRvdWNoRXZlbnRUYXJnZXRT
ZXQpOworICAgIG1fdG91Y2hFdmVudFRhcmdldHMtPmFkZChoYW5kbGVyKTsKKyAgICBpZiAoRG9j
dW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRB
ZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChQYWdl
KiBwYWdlID0gdGhpcy0+cGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkt
Pm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsKKyAgICB9CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlz
LT5wYWdlKCkpIHsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgICAgIGlm
IChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNl
dFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYg
KG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUoKSA9PSAxKQorICAgICAgICAgICAgcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CisgICAgfQorI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CiAjZW5kaWYKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlk
UmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKQordm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoTm9kZSogaGFuZGxlcikKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQot
ICAgIEFTU0VSVChtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpOwotICAgIC0tbV90b3VjaEV2ZW50
SGFuZGxlckNvdW50OwotICAgIGlmIChtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpCisgICAgaWYg
KCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
KG1fdG91Y2hFdmVudFRhcmdldHMtPmNvbnRhaW5zKGhhbmRsZXIpKTsKKyAgICBtX3RvdWNoRXZl
bnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxlcik7CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBw
YXJlbnREb2N1bWVudCgpKSB7CisgICAgICAgIHBhcmVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBQYWdlKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJM
RShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAg
ICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQo
dGhpcyk7CisjZW5kaWYKKyAgICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpKQorICAg
ICAgICByZXR1cm47CiAgICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT50b3VjaEV2
ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFt
ZS0+ZG9jdW1lbnQoKS0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRz
KGZhbHNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiw4IEBAIGVu
dW0gTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIHsKIH07CiBjb25zdCBpbnQgbnVtTm9kZUxpc3RJ
bnZhbGlkYXRpb25UeXBlcyA9IEludmFsaWRhdGVPbkFueUF0dHJDaGFuZ2UgKyAxOwogCit0eXBl
ZGVmIEhhc2hDb3VudGVkU2V0PE5vZGUqPiBUb3VjaEV2ZW50VGFyZ2V0U2V0OworCiBjbGFzcyBE
b2N1bWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlLCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKQEAgLTExMTMs
MTMgKzExMTUsMTkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRs
ZXIoKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdW5zaWduZWQgdG91Y2hFdmVu
dEhhbmRsZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsg
fQorICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gKG1fdG91
Y2hFdmVudFRhcmdldHMuZ2V0KCkpID8gbV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFs
c2U7IH0KICNlbHNlCi0gICAgdW5zaWduZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRs
ZXIoKTsKLSAgICB2b2lkIGRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgdm9pZCBk
aWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisgICAgdm9pZCBkaWRSZW1vdmVUb3VjaEV2
ZW50SGFuZGxlcihOb2RlKik7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNvbnN0
IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
bV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKTsgfQorI2Vsc2UKKyAgICBjb25zdCBUb3VjaEV2ZW50
VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRp
ZgogCiAgICAgYm9vbCB2aXN1YWxVcGRhdGVzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlz
dWFsVXBkYXRlc0FsbG93ZWQ7IH0KIApAQCAtMTQ5MSw3ICsxNDk5LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB1bnNpZ25lZCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQ7CiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKLSAgICB1bnNpZ25lZCBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7CisgICAg
T3duUHRyPFRvdWNoRXZlbnRUYXJnZXRTZXQ+IG1fdG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyOCw4ICsyMjI4LDggQEAgdm9pZCBOb2RlOjpkaWRNb3ZlVG9OZXdE
b2N1bWVudChEb2N1bWVudAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudE5h
bWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxp
c3RlbmVycyA9IGdldEV2ZW50TGlzdGVuZXJzKHRvdWNoRXZlbnROYW1lc1tpXSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbGlzdGVuZXJzLnNpemUoKTsgKytqKSB7Ci0gICAgICAg
ICAgICBvbGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICAgICAg
ICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBv
bGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgICAg
ICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjI1OCw3ICsyMjU4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeUFkZEV2
ZW50TGlzdGVuZXIoTgogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRs
ZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZl
bnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigp
OworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5v
ZGUpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjI4MCw3ICsyMjgwLDcgQEAgc3Rh
dGljIGlubGluZSBib29sIHRyeVJlbW92ZUV2ZW50TGlzdGVuZQogICAgICAgICBpZiAoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVu
dC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnRO
YW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50
LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRp
ZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHJldmlz
aW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBDYWNoZWRGcmFtZUJhc2U6OnJl
c3RvcmUoKQogICAgIG1fZG9jdW1lbnQtPmVucXVldWVQb3BzdGF0ZUV2ZW50KGhpc3RvcnlJdGVt
ICYmIGhpc3RvcnlJdGVtLT5zdGF0ZU9iamVjdCgpID8gaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0
KCkgOiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKICAgICAKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChtX2RvY3VtZW50LT50b3VjaEV2ZW50SGFuZGxlckNv
dW50KCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAg
ICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZl
bnRzKHRydWUpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIEhUTUxJ
bnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKICAgICAgICAgZG9jdW1lbnQoKS0+Zm9y
bUNvbnRyb2xsZXIoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVy
KQotICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAg
ICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICNlbmRp
ZgogfQogCkBAIC00ODksOSArNDg5LDkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVU
eXBlKCkKICAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVyID0gbV9pbnB1dFR5cGUtPmhhc1Rv
dWNoRXZlbnRIYW5kbGVyKCk7CiAgICAgaWYgKGhhc1RvdWNoRXZlbnRIYW5kbGVyICE9IG1faGFz
VG91Y2hFdmVudEhhbmRsZXIpIHsKICAgICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxlcikKLSAg
ICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgZG9j
dW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAgICAgICBlbHNlCi0gICAg
ICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRv
Y3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgbV9oYXNU
b3VjaEV2ZW50SGFuZGxlciA9IGhhc1RvdWNoRXZlbnRIYW5kbGVyOwogICAgIH0KICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMTM2NTY2KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg0LDcg
KzE1ODQsNyBAQCBib29sIERPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBCiAgICAg
ICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAg
ICAgICAgIGRvY3VtZW50LT5kaWRBZGRXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNl
IGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1
bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoZG9jdW1lbnQpOwogICAgICAgICBlbHNlIGlm
IChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCkKICAgICAgICAgICAgIGRp
ZEFkZFN0b3JhZ2VFdmVudExpc3RlbmVyKHRoaXMpOwogICAgIH0KQEAgLTE2MTUsNyArMTYxNSw3
IEBAIGJvb2wgRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnMKICAgICAgICAgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAg
ZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYg
KGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBk
b2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihkb2N1bWVudCk7CiAgICAgfQogCiAgICAg
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTksNyArMzg1
OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAg
ICAgIERvY3VtZW50KiBkb2MgPSBub2RlLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgaWYgKCFk
b2MpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIWRvYy0+dG91
Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZl
bnRIYW5kbGVycygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBt
X29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5v
ZGUpOwpAQCAtMzg3OSw3ICszODc5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNo
RXZlbnQoY29ucwogICAgICAgICBEb2N1bWVudCogZG9jID0gdG91Y2hUYXJnZXQtPnRvTm9kZSgp
LT5kb2N1bWVudCgpOwogICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAo
IWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gZG9jLT5mcmFtZSgpOwogICAgICAgICBpZiAoIXRh
cmdldEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzNjU2NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyAr
MzA4LDcgQEAgdm9pZCBGcmFtZTo6c2V0RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bQogICAgIGlm
IChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKSA9PSB0aGlzKSB7CiAgICAgICAgIG5vdGlm
eUNocm9tZUNsaWVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKCk7CiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKLSAgICAgICAgaWYgKG1fZG9jICYmIG1fZG9jLT50b3VjaEV2ZW50SGFu
ZGxlckNvdW50KCkpCisgICAgICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+aGFzVG91Y2hFdmVudEhh
bmRsZXJzKCkpCiAgICAgICAgICAgICBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRv
dWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNp
b24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKQEAgLTE4MSw2ICsxODIsNDcgQEAgUmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21w
dXRlTm9uRgogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KIAorI2lmIEVO
QUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVUb3VjaEV2
ZW50VGFyZ2V0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRh
aW5lclJlY3RzLCBjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3Vt
ZW50KTsKKyAgICBpZiAoIWRvY3VtZW50LT50b3VjaEV2ZW50VGFyZ2V0cygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0YXJnZXRzID0gZG9jdW1l
bnQtPnRvdWNoRXZlbnRUYXJnZXRzKCk7CisgICAgZm9yIChUb3VjaEV2ZW50VGFyZ2V0U2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gdGFyZ2V0cy0+YmVnaW4oKTsgaXRlciAhPSB0YXJnZXRzLT5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5rZXkgPT0gZG9jdW1lbnQpIHsKKyAg
ICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkK
KyAgICAgICAgICAgICAgICB2aWV3LT5hZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKHJl
cGFpbnRDb250YWluZXJSZWN0cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXRlci0+a2V5LT5pc0RvY3VtZW50Tm9kZSgpICYmIGl0ZXItPmtleSAhPSBk
b2N1bWVudCkgeworICAgICAgICAgICAgYWNjdW11bGF0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhy
ZXBhaW50Q29udGFpbmVyUmVjdHMsIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaXRlci0+a2V5KSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gaXRlci0+a2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVu
ZGVyZXItPmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMocmVwYWludENvbnRhaW5lclJl
Y3RzKTsKKyAgICB9Cit9CisjZW5kaWYKKworUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyBy
ZXBhaW50Q29udGFpbmVyUmVjdHM7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQor
ICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgaWYgKCFkb2N1bWVudC0+dmlldygpKQorICAgICAg
ICByZXR1cm4gcmVwYWludENvbnRhaW5lclJlY3RzOworCisgICAgYWNjdW11bGF0ZVRvdWNoRXZl
bnRUYXJnZXRSZWN0cyhyZXBhaW50Q29udGFpbmVyUmVjdHMsIGRvY3VtZW50KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRpZgorICAgIHJldHVybiByZXBhaW50Q29u
dGFpbmVyUmVjdHM7Cit9CisKIHVuc2lnbmVkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRl
Q3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogewogICAgIHVuc2lnbmVkIHdoZWVsRXZl
bnRIYW5kbGVyQ291bnQgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxMzY1NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUwLDYgKzUxLDcgQEAgdHlw
ZWRlZiB1aW50NjRfdCBTY3JvbGxpbmdOb2RlSUQ7CiAKIGVudW0gU2Nyb2xsaW5nTm9kZVR5cGUg
eyBTY3JvbGxpbmdOb2RlLCBGaXhlZE5vZGUgfTsKIAorY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBG
cmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CkBAIC0xNDksNyAr
MTUxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExh
eWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFw
aGljc0xheWVyKiwgYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNGaXhlZFRv
Q29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNvbnN0IERvY3VtZW50KikgeyB9CiAK
KyAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIGNvbXB1dGVUb3VjaEV2ZW50VGFyZ2V0
UmVjdHMoY29uc3QgRG9jdW1lbnQqKTsKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBTY3JvbGxp
bmdDb29yZGluYXRvcihQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCwyMyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMg
c3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRo
aXMgZXZlbiBpZiB0aGUKICAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRl
ZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCks
IEludFBvaW50KCkpOworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgdG91Y2hFdmVu
dFRhcmdldFJlY3RzID0gY29tcHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhtX3BhZ2UtPm1haW5G
cmFtZSgpLT5kb2N1bWVudCgpKTsKICAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbik7CisgICAgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKHRvdWNo
RXZlbnRUYXJnZXRSZWN0cyk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1
bTo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZChjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQpCit7CisgICAgLy8gV2FpdCB1bnRpbCBhZnRlciBsYXlvdXQgdG8gdXBkYXRlLgorICAgIGlm
IChtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFdlIHdvbid0IG5lY2Vzc2FyaWx5IGdldCBhIHNldFNjcm9sbExheWVy
KCkgY2FsbCBiZWZvcmUgdGhpcyBvbmUsIHNvIGdyYWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgorICAg
IHNldFNjcm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKSkpOworICAgIGlmIChtX3ByaXZhdGUtPnNjcm9sbExheWVyKCkpIHsKKyAgICAg
ICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyB0b3VjaEV2ZW50VGFyZ2V0UmVjdHMgPSBj
b21wdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50KTsKKyAgICAgICAgc2V0VG91Y2hF
dmVudFRhcmdldFJlY3RzKHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisgICAgfQogfQogCiB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5n
ZShGcmFtZVZpZXcqIGZyYW1lVmlldykKQEAgLTIwOSw2ICsyMjUsMjAgQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtOjpzZXRObwogICAgIH0KIH0KIAordm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgUmVwYWlu
dENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRhaW5lclJlY3RzKQoreworICAgIGZv
ciAoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJl
cGFpbnRDb250YWluZXJSZWN0cy5iZWdpbigpOyBpdGVyICE9IHJlcGFpbnRDb250YWluZXJSZWN0
cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFdlYlZlY3RvcjxXZWJSZWN0PiB3ZWJSZWN0cyhp
dGVyLT52YWx1ZS5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZXIt
PnZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICAgICAgd2ViUmVjdHNbaV0gPSBpdGVyLT52YWx1
ZVtpXTsKKworICAgICAgICBBU1NFUlQoaXRlci0+a2V5LT5sYXllcigpKTsKKyAgICAgICAgV2Vi
TGF5ZXIqIHdlYkxheWVyID0gaXRlci0+a2V5LT5sYXllcigpLT5iYWNraW5nKCktPmdyYXBoaWNz
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpOworICAgICAgICBBU1NFUlQod2ViTGF5ZXIpOworICAg
ICAgICB3ZWJMYXllci0+c2V0VG91Y2hFdmVudEhhbmRsZXJSZWdpb24od2ViUmVjdHMpOworICAg
IH0KK30KKwogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2ZW50
SGFuZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCiB7CiAgICAgLy8g
V2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0
aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCwxNiBAQCBwdWJsaWM6CiAgICAgLy8g
U2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2Nyb2xsYWJsZSBsYXllciBmb3IgdGhlIGdp
dmVuIHNjcm9sbCBhcmVhIGNoYW5nZXMuCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVBcmVh
U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKik7CiAK
KyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRvdWNoIGhhbmRsZXJzIGFyZSByZWdp
c3RlcmVkLCByZW1vdmVkLCBvciBtb3ZlZC4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG91Y2hFdmVu
dFRhcmdldFJlY3RzQ2hhbmdlZChjb25zdCBEb2N1bWVudCopIE9WRVJSSURFOworCiBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJh
bWVWaWV3KEZyYW1lVmlldyopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3Jv
bGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsK
IAogICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOwogICAgIHZvaWQgc2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJik7CisgICAgdm9pZCBzZXRUb3Vj
aEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYpOwog
ICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7CiAgICAgUGFzc093
blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhckxheWVyPiBjcmVhdGVTY3JvbGxiYXJMYXllcihTY3Jv
bGxiYXIqLCBXZWJLaXQ6OldlYkxheWVyKiBzY3JvbGxMYXllciwgR3JhcGhpY3NMYXllciogc2Ny
b2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVWaWV3Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiAr
NjUsOSBAQAogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKICNpbmNsdWRlICJFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8uaCIKICNlbmRpZgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02OTI1LDYgKzY5MjgsNDYgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBpbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQo
YWRkaXRpb25hbE9mZnNldCArIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmlu
Z0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBsb2NhdGlvbigpKSk7CiB9CiAKK3ZvaWQgUmVuZGVyQmxv
Y2s6OmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0cyYgcmVwYWludENvbnRhaW5lclJlY3RzLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIHJlcGFpbnRP
ZmZzZXQpIGNvbnN0Cit7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0ID0g
cmVwYWludE9mZnNldDsKKyAgICBpZiAoIWN1cnJlbnRSZXBhaW50Q29udGFpbmVyIHx8IGhhc1Nl
bGZQYWludGluZ0xheWVyKCkpCisgICAgICAgIHJlcGFpbnRDb250YWluZXJBbmRPZmZzZXQoY3Vy
cmVudFJlcGFpbnRDb250YWluZXIsIGFkanVzdGVkUmVwYWludE9mZnNldCk7CisKKyAgICBpZiAo
IWN1cnJlbnRSZXBhaW50Q29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
SW50UmVjdD4gcmVzdWx0OworCisgICAgaWYgKHdpZHRoKCkgJiYgaGVpZ2h0KCkpCisgICAgICAg
IHJlc3VsdC5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChhZGp1c3RlZFJlcGFpbnRPZmZzZXQs
IHNpemUoKSkpOworCisgICAgaWYgKGhhc0hvcml6b250YWxMYXlvdXRPdmVyZmxvdygpIHx8IGhh
c1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3coKSkgeworICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gq
IGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkp
IHsKKyAgICAgICAgICAgIExheW91dFVuaXQgdG9wID0gbWF4PExheW91dFVuaXQ+KGN1cnItPmxp
bmVUb3AoKSwgY3Vyci0+dG9wKCkpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBt
aW48TGF5b3V0VW5pdD4oY3Vyci0+bGluZUJvdHRvbSgpLCBjdXJyLT50b3AoKSArIGN1cnItPmhl
aWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcmVjdChhZGp1c3RlZFJlcGFpbnRPZmZz
ZXQueCgpICsgY3Vyci0+eCgpLCBhZGp1c3RlZFJlcGFpbnRPZmZzZXQueSgpICsgdG9wLCBjdXJy
LT53aWR0aCgpLCBib3R0b20gLSB0b3ApOworICAgICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBpeGVsU25hcHBlZEludFJlY3QocmVj
dCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBm
aXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAg
IGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpICYmIGN1cnItPmlz
Qm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vycik7
CisgICAgICAgICAgICBib3gtPmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMocmVwYWlu
dENvbnRhaW5lclJlY3RzLCBjdXJyZW50UmVwYWludENvbnRhaW5lciwgIGFkanVzdGVkUmVwYWlu
dE9mZnNldCArIGJveC0+bG9jYXRpb25PZmZzZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0czo6aXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJSZWN0cy5maW5kKGN1cnJl
bnRSZXBhaW50Q29udGFpbmVyKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVwYWludENvbnRhaW5l
clJlY3RzLmVuZCgpKQorICAgICAgICAgICAgaXRlciA9IHJlcGFpbnRDb250YWluZXJSZWN0cy5h
ZGQoY3VycmVudFJlcGFpbnRDb250YWluZXIsIHJlc3VsdCkuaXRlcmF0b3I7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLmFwcGVuZChyZXN1bHQpOworICAgIH0KK30KKwog
UmVuZGVyQm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMo
Y29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQpIGNvbnN0CiB7CiAgICAgaWYgKGlzQW5vbnltb3Vz
Q29sdW1uc0Jsb2NrKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwNiw2ICs1MDYsOCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3Qg
TGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0IExheW91dFBv
aW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAjaWYgRU5BQkxFKFNWRykK
ICAgICAvLyBPbmx5IHVzZWQgYnkgUmVuZGVyU1ZHVGV4dCwgd2hpY2ggZXhwbGljaXRlbHkgb3Zl
cnJpZGVzIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jaygpLCBkbyBOT1QgdXNlIGZvciBhbnl0aGlu
ZyBlbHNlLgogICAgIHZvaWQgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTM2NTY2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
MCw2ICs0ODAsMjkgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rvcgog
ICAgICAgICByZWN0cy5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChhZGRpdGlvbmFsT2Zmc2V0
LCBzaXplKCkpKTsKIH0KIAordm9pZCBSZW5kZXJCb3g6OmFkZFJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRhaW5lclJl
Y3RzLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIHJlcGFpbnRPZmZzZXQpIGNvbnN0Cit7CisgICAgTGF5b3V0
UG9pbnQgYWRqdXN0ZWRSZXBhaW50T2Zmc2V0ID0gcmVwYWludE9mZnNldDsKKyAgICBpZiAoIWN1
cnJlbnRSZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWludGluZ0xheWVyKCkpCisgICAgICAg
IHJlcGFpbnRDb250YWluZXJBbmRPZmZzZXQoY3VycmVudFJlcGFpbnRDb250YWluZXIsIGFkanVz
dGVkUmVwYWludE9mZnNldCk7CisKKyAgICBpZiAoIWN1cnJlbnRSZXBhaW50Q29udGFpbmVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2lkdGgoKSAmJiBoZWlnaHQoKSkgeworICAgICAg
ICBJbnRSZWN0IHJlc3VsdChwaXhlbFNuYXBwZWRJbnRSZWN0KGFkanVzdGVkUmVwYWludE9mZnNl
dCwgc2l6ZSgpKSk7CisKKyAgICAgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6aXRl
cmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJSZWN0cy5maW5kKGN1cnJlbnRSZXBhaW50Q29u
dGFpbmVyKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVwYWludENvbnRhaW5lclJlY3RzLmVuZCgp
KSB7CisgICAgICAgICAgICBWZWN0b3I8SW50UmVjdD4gcmVzdWx0VmVjdG9yOworICAgICAgICAg
ICAgcmVzdWx0VmVjdG9yLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVwYWludENvbnRh
aW5lclJlY3RzLmFkZChjdXJyZW50UmVwYWludENvbnRhaW5lciwgcmVzdWx0VmVjdG9yKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdGVyLT52YWx1ZS5hcHBlbmQocmVzdWx0KTsKKyAg
ICB9Cit9CisKKwogTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3Rpb25Cb3goKSBjb25zdAog
ewogICAgIExheW91dFJlY3QgcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywgY29uc3QgUmVuZGVyR2VvbWV0
cnlNYXAqKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwg
dm9pZCBhZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENv
bnRhaW5lciA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9W
RVJSSURFOworCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9uISBObyB0eXBlIGNoZWNraW5n
IGlzIGRvbmUhCiAgICAgUmVuZGVyQm94KiBwcmV2aW91c1NpYmxpbmdCb3goKSBjb25zdDsKICAg
ICBSZW5kZXJCb3gqIG5leHRTaWJsaW5nQm94KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MjUsNiArMTQyNSw0NCBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
CiAgICAgfQogfQogCit2b2lkIFJlbmRlcklubGluZTo6YWRkUmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVyUmVj
dHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgcmVwYWludE9mZnNldCkgY29uc3QKK3sKKyAgICBMYXlvdXRQ
b2ludCBhZGp1c3RlZFJlcGFpbnRPZmZzZXQgPSByZXBhaW50T2Zmc2V0OworICAgIGlmICghY3Vy
cmVudFJlcGFpbnRDb250YWluZXIgfHwgaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAg
cmVwYWludENvbnRhaW5lckFuZE9mZnNldChjdXJyZW50UmVwYWludENvbnRhaW5lciwgYWRqdXN0
ZWRSZXBhaW50T2Zmc2V0KTsKKworICAgIGlmICghY3VycmVudFJlcGFpbnRDb250YWluZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7CisgICAgQWJzb2x1
dGVSZWN0c0dlbmVyYXRvckNvbnRleHQgY29udGV4dChyZXN1bHQsIGFkanVzdGVkUmVwYWludE9m
ZnNldCk7CisgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoY29udGV4dCk7CisKKyAgICBmb3IgKFJl
bmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRT
aWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0
TWFya2VyKCkpIHsKKyAgICAgICAgICAgIExheW91dFBvaW50IHBvcyhhZGp1c3RlZFJlcGFpbnRP
ZmZzZXQpOworICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94KCkpCisgICAgICAgICAgICAgICAg
cG9zLm1vdmUodG9SZW5kZXJCb3goY3VyciktPmxvY2F0aW9uT2Zmc2V0KCkpOworICAgICAgICAg
ICAgY3Vyci0+YWRkUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyhyZXBhaW50Q29udGFpbmVy
UmVjdHMsIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCBwb3MpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7CisgICAgICAgIGlmIChjb250aW51YXRpb24oKS0+
aXNJbmxpbmUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRSZXBhaW50Q29udGFp
bmVySGl0VGVzdFJlY3RzKHJlcGFpbnRDb250YWluZXJSZWN0cywgY3VycmVudFJlcGFpbnRDb250
YWluZXIsIHRvUG9pbnQoYWRqdXN0ZWRSZXBhaW50T2Zmc2V0ICsgY29udGludWF0aW9uKCktPmNv
bnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9u
KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZFJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHMocmVwYWludENvbnRhaW5lclJlY3RzLCBjdXJyZW50UmVw
YWludENvbnRhaW5lciwgdG9Qb2ludChhZGp1c3RlZFJlcGFpbnRPZmZzZXQgKyB0b1JlbmRlckJv
eChjb250aW51YXRpb24oKSktPmxvY2F0aW9uKCkgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRp
b24oKSkpOworICAgIH0KKworICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkgeworICAgICAgICBS
ZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzOjppdGVyYXRvciBpdGVyID0gcmVwYWludENvbnRh
aW5lclJlY3RzLmZpbmQoY3VycmVudFJlcGFpbnRDb250YWluZXIpOworICAgICAgICBpZiAoaXRl
ciA9PSByZXBhaW50Q29udGFpbmVyUmVjdHMuZW5kKCkpCisgICAgICAgICAgICByZXBhaW50Q29u
dGFpbmVyUmVjdHMuYWRkKGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCByZXN1bHQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBpdGVyLT52YWx1ZS5hcHBlbmQocmVzdWx0KTsKKyAgICB9Cit9
CisKIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAo
IWhhc091dGxpbmUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmgJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91
dFBvaW50Jik7CiAgICAgdm9pZCBwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
TGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRSZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0IExheW91dFBv
aW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAgICAgdXNpbmcgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNvbnRpbnVhdGlvbjsKICAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6c2V0Q29udGludWF0aW9uOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsMjMg
QEAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OnJlbgogICAgIHJldHVybiBv
YmplY3QgJiYgb2JqZWN0LT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpID8gdG9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQob2JqZWN0KSA6IDA7CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50
Q29udGFpbmVyQW5kT2Zmc2V0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqJiByZXBhaW50
Q29udGFpbmVyLCBMYXlvdXRQb2ludCYgb2Zmc2V0KSBjb25zdAoreworICAgIHJlcGFpbnRDb250
YWluZXIgPSBjb250YWluZXJGb3JSZXBhaW50KCk7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVy
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTZWxmLXBhaW50aW5nIGxheWVycyBzdWJ0cmFj
dCB0aGUgcmVuZGVyZXIncyBsb2NhdGlvbi4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIG1hcCBvdXIg
bG9jYXRpb24gdG8gY29udGFpbmVyIHNwYWNlLgorICAgIGlmIChyZXBhaW50Q29udGFpbmVyID09
IHRoaXMpCisgICAgICAgIG9mZnNldCA9IExheW91dFBvaW50KCk7CisgICAgZWxzZSB7CisgICAg
ICAgIFRyYW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0YXRlOjpBcHBseVRy
YW5zZm9ybURpcmVjdGlvbiwgRmxvYXRQb2ludCgpKTsKKyAgICAgICAgbWFwTG9jYWxUb0NvbnRh
aW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgQXBwbHlDb250YWluZXJGbGlw
IHwgVXNlVHJhbnNmb3JtcyB8IFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zKTsKKyAgICAgICAgdHJh
bnNmb3JtU3RhdGUuZmxhdHRlbigpOworICAgICAgICBvZmZzZXQgPSBMYXlvdXRQb2ludCh0cmFu
c2Zvcm1TdGF0ZS5sYXN0UGxhbmFyUG9pbnQoKSk7CisgICAgfQorfQorCiBSZW5kZXJCbG9jayog
UmVuZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxMzY1
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdHJ1Y3QgQW5ub3RhdGVkUmVnaW9uVmFsdWUgewog
I2VuZGlmCiAKIHR5cGVkZWYgV1RGOjpIYXNoU2V0PGNvbnN0IFJlbmRlck9iamVjdCo+IFJlbmRl
ck9iamVjdEFuY2VzdG9yTGluZWJveERpcnR5U2V0OwotCit0eXBlZGVmIFdURjo6SGFzaE1hcDxj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiwgVmVjdG9yPEludFJlY3Q+ID4gUmVwYWludENv
bnRhaW5lckhpdFRlc3RSZWN0czsKICNpZm5kZWYgTkRFQlVHCiBjb25zdCBpbnQgc2hvd1RyZWVD
aGFyYWN0ZXJPZmZzZXQgPSAzOTsKICNlbmRpZgpAQCAtOTQ3LDYgKzk0Nyw4IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmKSB7IH07CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUmVwYWlu
dENvbnRhaW5lckhpdFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlv
dXRQb2ludCgpKSBjb25zdCB7IH07CisKICAgICBMYXlvdXRSZWN0IGFic29sdXRlT3V0bGluZUJv
dW5kcygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gb3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQoMCk7CkBAIC05NjAsNiArOTYyLDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGlubGlu
ZSBib29sIGxheWVyQ3JlYXRpb25BbGxvd2VkRm9yU3VidHJlZSgpIGNvbnN0OwogCisgICAgdm9p
ZCByZXBhaW50Q29udGFpbmVyQW5kT2Zmc2V0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
JiwgTGF5b3V0UG9pbnQmKSBjb25zdDsKKwogICAgIC8vIE92ZXJyaWRlcyBzaG91bGQgY2FsbCB0
aGUgc3VwZXJjbGFzcyBhdCB0aGUgZW5kCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5n
ZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAgICAgLy8g
T3ZlcnJpZGVzIHNob3VsZCBjYWxsIHRoZSBzdXBlcmNsYXNzIGF0IHRoZSBzdGFydApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gMTM2NTY2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjIsNiArMjYyLDI1IEBAIHZvaWQgUmVuZGVyVmlldzo6bWFwQWJzb2x1dGVUb0xvY2Fs
UG9pbnQKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyVmlldzo6YWRkUmVwYWludENvbnRhaW5lckhp
dFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVy
UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Cit7CisgICAgY3VycmVudFJlcGFpbnRDb250
YWluZXIgPSBjb250YWluZXJGb3JSZXBhaW50KCk7CisgICAgaWYgKCFjdXJyZW50UmVwYWludENv
bnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBkb2N1bWVudFJlY3QgPSB1
bnNjYWxlZERvY3VtZW50UmVjdCgpOworICAgIGlmIChkb2N1bWVudFJlY3Qud2lkdGgoKSAmJiBk
b2N1bWVudFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFJlY3QpOworCisgICAgICAgIFJlcGFpbnRD
b250YWluZXJIaXRUZXN0UmVjdHM6Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVyUmVj
dHMuZmluZChjdXJyZW50UmVwYWludENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJl
cGFpbnRDb250YWluZXJSZWN0cy5lbmQoKSkKKyAgICAgICAgICAgIHJlcGFpbnRDb250YWluZXJS
ZWN0cy5hZGQoY3VycmVudFJlcGFpbnRDb250YWluZXIsIHJlc3VsdCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGl0ZXItPnZhbHVlID0gcmVzdWx0OworICAgIH0KK30KKwogYm9vbCBSZW5k
ZXJWaWV3OjpyZXF1aXJlc0NvbHVtbnMoaW50IGRlc2lyZWRDb2x1bW5Db3VudCkgY29uc3QKIHsK
ICAgICBpZiAobV9mcmFtZVZpZXcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50JikgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUmVwYWludENvbnRhaW5lckhp
dFRlc3RSZWN0cyhSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBMYXlvdXRQ
b2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIGVudW0gU2VsZWN0
aW9uUmVwYWludE1vZGUgeyBSZXBhaW50TmV3WE9ST2xkLCBSZXBhaW50TmV3TWludXNPbGQsIFJl
cGFpbnROb3RoaW5nIH07CiAgICAgdm9pZCBzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFy
dCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVuZFBvcywgU2VsZWN0aW9u
UmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKICAgICB2b2lkIGdldFNlbGVjdGlvbihS
ZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBpbnQmIHN0YXJ0T2Zmc2V0LCBSZW5kZXJPYmpl
Y3QqJiBlbmRSZW5kZXJlciwgaW50JiBlbmRPZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAKICNp
bmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVs
ZW1lbnQuaCIKQEAgLTkxLDYgKzkyLDEyIEBAIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFi
c29sdXRlUXVhZHMKICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VC
b3VuZGluZ0JveCgpLCAwIC8qIG1vZGUgKi8sIHdhc0ZpeGVkKSk7CiB9CiAKK3ZvaWQgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMoUmVwYWludENv
bnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRhaW5lclJlY3RzLCBjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIHJlcGFpbnRPZmZzZXQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGNhbGN1bGF0ZSB0aGUg
bWluaW1hbCByZWN0LgorICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RP
YmplY3QodGhpcyktPmFkZFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMocmVwYWludENvbnRh
aW5lclJlY3RzLCBjdXJyZW50UmVwYWludENvbnRhaW5lciwgcmVwYWludE9mZnNldCk7Cit9CisK
IHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgU1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudERlc3Ryb3llZCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJldmlz
aW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1
dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdDsKIAorICAg
IHZpcnR1YWwgdm9pZCBhZGRSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50
UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkp
IGNvbnN0IE9WRVJSSURFOworCiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJhbnNmb3Jt
U3RhdGUmLCBNYXBDb29yZGluYXRlc0ZsYWdzID0gQXBwbHlDb250YWluZXJGbGlwIHwgU25hcE9m
ZnNldEZvclRyYW5zZm9ybXMsIGJvb2wqIHdhc0ZpeGVkID0gMCkgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0
cnlNYXAmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiAr
NzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlbGVjdFJ1bGVGZWF0dXJlU2V0
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKQEAgLTExOTYsOCArMTE5Nyw0MSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6OnRvdWNoRXZl
bnRIYW5kbGVyQ291CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBkb2N1
bWVudC0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpOworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJn
ZXRTZXQqIHRvdWNoSGFuZGxlcnMgPSBkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAg
ICBpZiAoIXRvdWNoSGFuZGxlcnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQg
Y291bnQgPSAwOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdldFNldDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHRvdWNoSGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIgIT0gdG91Y2hIYW5kbGVycy0+ZW5k
KCk7ICsraXRlcikKKyAgICAgICAgY291bnQgKz0gaXRlci0+dmFsdWU7CisgICAgcmV0dXJuIGNv
dW50OworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorUGFzc1JlZlB0cjxD
bGllbnRSZWN0TGlzdD4gSW50ZXJuYWxzOjp0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoRG9j
dW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+dmlldygpIHx8ICFkb2N1bWVudC0+cGFnZSgpKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYg
KCFkb2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICByZXR1
cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZSgpOworCisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgVmVjdG9yPEludFJlY3Q+IHJlY3Rz
OworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworCisgICAgUmVwYWludENvbnRhaW5lckhp
dFRlc3RSZWN0cyByZXBhaW50Q29udGFpbmVyUmVjdHMgPSBkb2N1bWVudC0+cGFnZSgpLT5zY3Jv
bGxpbmdDb29yZGluYXRvcigpLT5jb21wdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50
KTsKKworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJSZWN0cy5iZWdpbigpOyBpdGVyICE9IHJlcGFpbnRD
b250YWluZXJSZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBxdWFkcy5hcHBlbmQo
aXRlci0+a2V5LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChpdGVyLT52YWx1ZVtpXSks
IFVzZVRyYW5zZm9ybXMgfCBBcHBseUNvbnRhaW5lckZsaXAgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNm
b3JtcykpOworICAgIH0KKworICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKHF1YWRz
KTsKIH0KKyNlbmRpZgogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBJbnRlcm5hbHM6Om5vZGVzRnJv
bVJlY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRvcFBhZGRp
bmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1
bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCBhbGxvd1NoYWRv
d0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5oCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDkgQEAgcHVibGljOgog
CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudChEb2N1bWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KERvY3VtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBQ
YXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiB0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoRG9j
dW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8Tm9kZUxp
c3Q+IG5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRvcFBh
ZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICAgICAgdW5zaWduZWQgYm90dG9tUGFk
ZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIGJvb2wgYWxs
b3dTaGFkb3dDb250ZW50LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxMzY1NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsOSBA
QAogCiAgICAgdW5zaWduZWQgbG9uZyB3aGVlbEV2ZW50SGFuZGxlckNvdW50KGluIERvY3VtZW50
IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgdW5zaWduZWQgbG9uZyB0b3Vj
aEV2ZW50SGFuZGxlckNvdW50KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2Vw
dGlvbik7CisjaWYgZGVmaW5lZChFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpICYmIEVOQUJM
RV9UT1VDSF9FVkVOVF9UUkFDS0lORworICAgIENsaWVudFJlY3RMaXN0IHRvdWNoRXZlbnRUYXJn
ZXRDbGllbnRSZWN0cyhpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24p
OworI2VuZGlmCiAKICAgICBOb2RlTGlzdCBub2Rlc0Zyb21SZWN0KGluIERvY3VtZW50IGRvY3Vt
ZW50LCBpbiBsb25nIHgsIGluIGxvbmcgeSwKICAgICAgICAgaW4gdW5zaWduZWQgbG9uZyB0b3BQ
YWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIHJpZ2h0UGFkZGluZywgaW4gdW5zaWduZWQgbG9uZyBi
b3R0b21QYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIGxlZnRQYWRkaW5nLApJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjU2NikKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTIt
MDQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBz
dXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0IGV2
ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxpbmcgdG91Y2ggZXZlbnQgdGFyZ2V0IHJlZ2lv
biB0cmFja2luZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogc3JjL1dl
YlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250
YWluZXJJbXBsOjpyZXF1ZXN0VG91Y2hFdmVudFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6CisKIDIwMTItMTIt
MDQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9m
ZWF0dXJlcy5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVy
ZXMuZ3lwaQkocmV2aXNpb24gMTM2NTY2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0
dXJlcy5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAKICAgICAgICdFTkFC
TEVfVE9VQ0hfQURKVVNUTUVOVD0xJywKICAgICAgICdFTkFCTEVfVE9VQ0hfRVZFTlRTPTwoZW5h
YmxlX3RvdWNoX2V2ZW50cyknLAogICAgICAgJ0VOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9PChl
bmFibGVfdG91Y2hfaWNvbl9sb2FkaW5nKScsCisgICAgICAnRU5BQkxFX1RPVUNIX0VWRU5UX1RS
QUNLSU5HPTwoZW5hYmxlX3RvdWNoX2V2ZW50cyknLAogICAgICAgJ0VOQUJMRV9UT1VDSF9TTElE
RVI9MScsCiAgICAgICAnRU5BQkxFX1Y4X1NDUklQVF9ERUJVR19TRVJWRVI9MScsCiAgICAgICAn
RU5BQkxFX1ZJREVPPTEnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1
Z2luQ29udGFpbmVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHJldmlzaW9uIDEzNjU2NikKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MjcsOSArNTI3LDkgQEAgdm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBs
OjpyZXF1ZXN0VG91YwogICAgICAgICByZXR1cm47CiAgICAgbV90b3VjaEV2ZW50UmVxdWVzdFR5
cGUgPSByZXF1ZXN0VHlwZTsKICAgICBpZiAobV90b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0gVG91
Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5k
aWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiAgICAgZWxzZQotICAgICAgICBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAg
ICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIobV9l
bGVtZW50KTsKIH0KIAogdm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpzZXRXYW50c1doZWVs
RXZlbnRzKGJvb2wgd2FudHNXaGVlbEV2ZW50cykKQEAgLTY4Miw3ICs2ODIsNyBAQCBXZWJQbHVn
aW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpCiAjZW5kaWYKIAogICAgIGlmIChtX3Rv
dWNoRXZlbnRSZXF1ZXN0VHlwZSAhPSBUb3VjaEV2ZW50UmVxdWVzdFR5cGVOb25lKQotICAgICAg
ICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7Cisg
ICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIo
bV9lbGVtZW50KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wbHVnaW5Mb2FkT2Jz
ZXJ2ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBtX3BsdWdpbkxvYWRPYnNlcnZlcnNbaV0tPmNs
ZWFyUGx1Z2luQ29udGFpbmVyKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzY1NjYpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0x
Mi0wNCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3Qg
ZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRz
L3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10
b3VjaC1oaXQtcmVjdHMuaHRtbDogQWRkZWQuCisKIDIwMTItMTItMDQgIEVtaWwgQSBFa2x1bmQg
IDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgY2hyb21pdW0gZXhwZWN0
YXRpb25zIHVwZGF0ZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qv
ZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3Vj
aC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3Np
dG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMyBAQAorVGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0IHRlc3QgcmVnaW9ucyBnaXZlbiB0
byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVuIGluIER1bXBSZW5kZXJUcmVlLiBU
aGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRlc3QgcmVnaW9ucyBvZiBh
bGwgdGhlIGxpc3RlZCBlbGVtZW50cy4KKworbm9ybWFsRmxvd1swXTogKDgsIDcyLCA3ODQsIDEw
KQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclswXTogKDgsIDEwMiwgNzg0LCAxMCkKK2Fic29sdXRl
Q2hpbGRDb250YWluZXJbMV06ICgxMTgsIDMwMCwgMTQwLCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250
YWluZXJbMF06ICg4LCAxNTIsIDc4NCwgMTApCityZWxhdGl2ZUNoaWxkQ29udGFpbmVyWzFdOiAo
OCwgMTUyLCAyNjAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMF06ICg4LCAyMDIsIDEwMCwg
ODApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclsxXTogKDgsIDIwMiwgMTEwLCAxMCkKK292ZXJoYW5n
aW5nQ29udGFpbmVyWzJdOiAoOCwgMjAyLCA3ODQsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJb
M106ICg4LCAyMTIsIDUwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzRdOiAoOCwgMjIyLCAx
MTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbNV06ICg4LCAyMzIsIDUwLCAxMCkKK292ZXJo
YW5naW5nQ29udGFpbmVyWzZdOiAoOCwgMjQyLCAxMTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWlu
ZXJbN106ICg4LCAyNTIsIDUwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzhdOiAoOCwgMjYy
LCAxMTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbOV06ICg4LCAyNzIsIDUwLCAxMCkKK3Ry
YW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMF06ICg2MiwgNDAxLCA2NjEsIDMyKQordHJhbnNmb3Jt
ZWRDaGlsZENvbnRhaW5lclsxXTogKDgsIDQxMiwgNzY5LCAxMCkKK2NvbnRpbnVhdGlvblswXTog
KDEwOCwgNDYyLCAxMDAsIDEwKQorY29udGludWF0aW9uWzFdOiAoOCwgNDcyLCA3NjksIDEwKQor
Y29udGludWF0aW9uWzJdOiAoOCwgNDcyLCA3NjksIDEwKQorCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1y
ZWN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zh
c3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9j
b21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdHJhbnNm
b3JtZWRDaGlsZCB7CisJLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZTNkKDAuMiwgMSwgMCwgMzVn
cmFkKTsKK30KKyNhYnNvbHV0ZUNoaWxkIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJdG9wOiAz
MDBweDsKK30KKyNyZWxhdGl2ZUNoaWxkIHsKKwlwb3NpdGlvbjogcmVsYXRpdmU7CisJdG9wOiAy
MDBweDsKK30KKyNvdmVyaGFuZ2luZ0NvbnRhaW5lciB7CisJaGVpZ2h0OiAxMHB4OworfQorI292
ZXJoYW5naW5nRmxvYXRpbmdDaGlsZCB7CisJd2lkdGg6IDEwMHB4OworCWZsb2F0OiBsZWZ0Owor
fQorI3Rlc3RzIHsKKwlmb250OiAxMHB4IEFoZW07Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0
IHJlZ2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBE
dW1wUmVuZGVyVHJlZS4KK1RoZSBvdXRwdXR0ZWQgcmVjdHMgc2hvdWxkIGNvdmVyIHRoZSBoaXQg
dGVzdCByZWdpb25zIG9mIGFsbCB0aGUgbGlzdGVkIGVsZW1lbnRzLjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJ0ZXN0cyI+CisJPGRpdiBpZD0ibm9ybWFsRmxvdyI+
CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuPnN1bTwvc3Bhbj4uCisJPC9kaXY+CisJPGRpdiBpZD0i
YWJzb2x1dGVDaGlsZENvbnRhaW5lciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlkPSJhYnNv
bHV0ZUNoaWxkIj5BYnNvbHV0ZSBjaGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJyZWxh
dGl2ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9InJlbGF0aXZl
Q2hpbGQiPlJlbGF0aXZlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9Im92ZXJoYW5n
aW5nQ29udGFpbmVyIj4KKwkJPGRpdiBpZD0ib3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIj5PdmVy
aGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFu
Z2luZyBmbG9hdDwvZGl2PgorCTwvZGl2PgorCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGRDb250
YWluZXIiPgorCQk8ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxkIj5UcmFuc2Zvcm1lZDwvZGl2Pgor
CTwvZGl2PgorCTxkaXY+CisJCTxiIGlkPSJjb250aW51YXRpb24iPlRoaXMgYiB0YWcKKwkJPGRp
dj5jYXVzZXMgYTwvZGl2PgorCQljb250aW51YXRpb248L2I+CisJPC9kaXY+Cis8L2Rpdj4KKzxz
Y3JpcHQ+CitpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQorCXJldHVybjsKKword2luZG93LnRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsaXN0ZW5lcigpIHsgfQorCitmdW5jdGlv
biBsb2cobXNnKSB7CisJdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
CisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsK
KyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBzb3J0
UmVjdHMoYSwgYikgeworCXJldHVybiBhLnRvcCAtIGIudG9wOworfQorCitmdW5jdGlvbiBsb2dS
ZWN0cyhpZCkgeworCWVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisJZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNlKTsKKwly
ZWN0cyA9IHdpbmRvdy5pbnRlcm5hbHMudG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKGRvY3Vt
ZW50KTsKKwl2YXIgc29ydGVkUmVjdHMgPSBuZXcgQXJyYXkoKTsKKwlmb3IgKHZhciBpID0gMDsg
aSA8IHJlY3RzLmxlbmd0aDsgKytpKQorCQlzb3J0ZWRSZWN0c1tpXSA9IHJlY3RzW2ldOworCXNv
cnRlZFJlY3RzLnNvcnQoc29ydFJlY3RzKTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxl
bmd0aDsgKytpKQorCQlsb2coaWQgKyAiWyIgKyBpICsgIl06ICgiICsgc29ydGVkUmVjdHNbaV0u
bGVmdCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS50b3AgKyAiLCAiICsgc29ydGVkUmVjdHNbaV0u
d2lkdGggKyAiLCAiICsgc29ydGVkUmVjdHNbaV0uaGVpZ2h0ICsgIikiKTsKKwllbGVtZW50LnJl
bW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2UpOworfQorCits
b2dSZWN0cygibm9ybWFsRmxvdyIpOworbG9nUmVjdHMoImFic29sdXRlQ2hpbGRDb250YWluZXIi
KTsKK2xvZ1JlY3RzKCJyZWxhdGl2ZUNoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygib3Zlcmhh
bmdpbmdDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJ0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyIik7
Citsb2dSZWN0cygiY29udGludWF0aW9uIik7CisKK3ZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RzIik7Cit0ZXN0Q29udGFpbmVyLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178256</attachid>
            <date>2012-12-07 12:35:14 -0800</date>
            <delta_ts>2012-12-07 14:08:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121207123237.patch</filename>
            <type>text/plain</type>
            <size>52036</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMi0wNyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuCisKKyAgICAgICAgVGhlIGhpdCB0ZXN0IHJlY3RzIGZvciBhbiBhcmJpdHJhcnkgUmVu
ZGVyT2JqZWN0IGNhbiBiZSBnZW5lcmF0ZWQgZWl0aGVyIGluIHRlcm1zIG9mIGFic29sdXRlIGNv
b3JkaW5hdGVzCisgICAgICAgIG9yIHRoZSBjb29yZGluYXRlcyBvZiBlYWNoIHJlbmRlcmVyJ3Mg
cmVwYWludCBjb250YWluZXIuIFRoaXMgYWxsb3dzIHBsYXRmb3JtcyB0aGF0IHNjcm9sbCBpbiB0
aGUKKyAgICAgICAgY29tcG9zaXRvciB0byBzY3JvbGwgdGhlc2UgcmVjdHMgYWxvbmcgd2l0aCB0
aGUgc2Nyb2xsaW5nIGxheWVyIHdpdGhvdXQgaGF2aW5nIHRvIHVwZGF0ZSB0aGVtLgorCisgICAg
ICAgIFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3It
dG91Y2gtaGl0LXJlY3RzLmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGFzVG91Y2hFdmVudEhhbmRsZXJzKToK
KyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0b3VjaEV2
ZW50VGFyZ2V0cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dHJ5QWRkRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjp0cnlSZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZEZyYW1lQmFzZTo6cmVzdG9yZSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUpOgor
ICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlbW92
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVs
YXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZVJlcGFpbnRDb250YWluZXJUb3VjaEV2
ZW50VGFyZ2V0UmVjdHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0VG91
Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRv
cik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVu
dFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVj
dHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRD
b250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAo
UmVuZGVyQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjphZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRh
aW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6CisgICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRIaXRUZXN0aW5nQm91
bmRzRm9yUmVwYWludENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChSZW5kZXJJbmxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kc0ZvckhpdFRlc3RpbmcpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVw
YWludENvbnRhaW5lckJvdW5kc0ZvckhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjphZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKFJl
bmRlclZpZXcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVh
ZHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFJlbmRl
clNWR01vZGVsT2JqZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRUYXJn
ZXRDbGllbnRSZWN0cyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAg
KEludGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDEyLTEy
LTA3ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNT
SU9OKHIxMjcxNjMpOiBDb250ZW50IGlzIG9mZnNldCB0byB0aGUgcmlnaHQgYXQgcmVhLnJ1Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw5ICs0OTYsNiBA
QCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAgICAgLCBtX3dyaXRl
UmVjdXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwgbV93cml0ZVJlY3Vyc2lvbkRlcHRoKDAp
CiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50KDApCi0jZW5kaWYKICAgICAsIG1f
cGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5nVGFza3NUaW1lckZpcmVk
KQogICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fdmlz
dWFsVXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTU1OTksMzMgKzU1OTYsNTcgQEAgdm9pZCBEb2N1
bWVudDo6ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZQogICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnRDaGFuZ2VkKHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFu
ZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKiBoYW5k
bGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgKyttX3RvdWNoRXZlbnRIYW5k
bGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCA+IDEpCisgICAgaWYg
KCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQorICAgICAgICBtX3RvdWNoRXZlbnRUYXJnZXRz
ID0gYWRvcHRQdHIobmV3IFRvdWNoRXZlbnRUYXJnZXRTZXQpOworICAgIG1fdG91Y2hFdmVudFRh
cmdldHMtPmFkZChoYW5kbGVyKTsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERv
Y3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlz
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKQot
ICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsK
KyAgICB9CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpIHsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0No
YW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNp
emUoKSA9PSAxKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91
Y2hFdmVudHModHJ1ZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7
CiAjZW5kaWYKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIo
KQordm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxl
cikKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIEFTU0VSVChtX3RvdWNoRXZlbnRI
YW5kbGVyQ291bnQpOwotICAgIC0tbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmICht
X3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdl
dCgpKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fdG91Y2hFdmVudFRhcmdldHMtPmNv
bnRhaW5zKGhhbmRsZXIpKTsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxl
cik7CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAg
ICAgIHBhcmVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykK
KyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFn
ZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICBpZiAo
bV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpKQorICAgICAgICByZXR1cm47CiAgICAgZm9yIChj
b25zdCBGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAg
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+aGFzVG91Y2hF
dmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKGZhbHNlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiw4IEBAIGVudW0gTm9kZUxpc3RJbnZhbGlkYXRpb25U
eXBlIHsKIH07CiBjb25zdCBpbnQgbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlcyA9IEludmFs
aWRhdGVPbkFueUF0dHJDaGFuZ2UgKyAxOwogCit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PE5vZGUq
PiBUb3VjaEV2ZW50VGFyZ2V0U2V0OworCiBjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDb250YWlu
ZXJOb2RlLCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSog
ZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKQEAgLTExMTUsMTMgKzExMTcsMTkgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKIAogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCi0gICAgdW5zaWduZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVu
dEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gKG1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpID8g
bV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFsc2U7IH0KICNlbHNlCi0gICAgdW5zaWdu
ZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBib29s
IGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
IAotICAgIHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICB2b2lkIGRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgdm9pZCBkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihO
b2RlKik7CisgICAgdm9pZCBkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRv
dWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQo
KTsgfQorI2Vsc2UKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFy
Z2V0cygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiAgICAgYm9vbCB2aXN1YWxVcGRh
dGVzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7IH0KIApA
QCAtMTQ5OSw3ICsxNTA3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1bnNpZ25lZCBtX3doZWVs
RXZlbnRIYW5kbGVyQ291bnQ7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNpZ25l
ZCBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7CisgICAgT3duUHRyPFRvdWNoRXZlbnRUYXJnZXRT
ZXQ+IG1fdG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1OSw4ICsy
MjU5LDggQEAgdm9pZCBOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudE5hbWVzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGdldEV2ZW50TGlzdGVu
ZXJzKHRvdWNoRXZlbnROYW1lc1tpXSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
bGlzdGVuZXJzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRv
dWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI4OSw3ICsyMjg5
LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeUFkZEV2ZW50TGlzdGVuZXIoTgogICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAo
ZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRv
Y3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQt
PmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpAQCAtMjMxMSw3ICsyMzExLDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeVJlbW92
ZUV2ZW50TGlzdGVuZQogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhh
bmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUo
ZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBDYWNoZWRGcmFtZUJhc2U6OnJlc3RvcmUoKQogICAgIG1fZG9jdW1lbnQt
PmVucXVldWVQb3BzdGF0ZUV2ZW50KGhpc3RvcnlJdGVtICYmIGhpc3RvcnlJdGVtLT5zdGF0ZU9i
amVjdCgpID8gaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgOiBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bGxWYWx1ZSgpKTsKICAgICAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlm
IChtX2RvY3VtZW50LT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgaWYgKG1fZG9jdW1l
bnQtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2
OTY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRF
bGVtZW50KCkKICAgICAgICAgZG9jdW1lbnQoKS0+Zm9ybUNvbnRyb2xsZXIoKS0+Y2hlY2tlZFJh
ZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1v
dmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICNlbmRpZgogfQogCkBAIC00ODksOSArNDg5LDkg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBib29sIGhhc1RvdWNo
RXZlbnRIYW5kbGVyID0gbV9pbnB1dFR5cGUtPmhhc1RvdWNoRXZlbnRIYW5kbGVyKCk7CiAgICAg
aWYgKGhhc1RvdWNoRXZlbnRIYW5kbGVyICE9IG1faGFzVG91Y2hFdmVudEhhbmRsZXIpIHsKICAg
ICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxlcikKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVu
dEhhbmRsZXIodGhpcyk7CiAgICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgbV9oYXNUb3VjaEV2ZW50SGFuZGxlciA9IGhhc1Rv
dWNoRXZlbnRIYW5kbGVyOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg0LDcgKzE1ODQsNyBAQCBib29sIERPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRX
aGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3Vj
aEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNo
RXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoZG9jdW1lbnQpOwogICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLnN0b3JhZ2VFdmVudCkKICAgICAgICAgICAgIGRpZEFkZFN0b3JhZ2VFdmVudExpc3RlbmVy
KHRoaXMpOwogICAgIH0KQEAgLTE2MTUsNyArMTYxNSw3IEBAIGJvb2wgRE9NV2luZG93OjpyZW1v
dmVFdmVudExpc3RlbmVyKGNvbnMKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVs
RXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZl
bnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcihkb2N1bWVudCk7CiAgICAgfQogCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MDQsNyArMzkwNCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBub2Rl
LT5kb2N1bWVudCgpOwogICAgICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQor
ICAgICAgICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRh
cmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5vZGUpOwpAQCAtMzkyNCw3ICszOTI0LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29ucwogICAgICAgICBEb2N1
bWVudCogZG9jID0gdG91Y2hUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICBp
ZiAoIWRvYykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvYy0+dG91Y2hF
dmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRs
ZXJzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1l
ID0gZG9jLT5mcmFtZSgpOwogICAgICAgICBpZiAoIXRhcmdldEZyYW1lKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBGcmFtZTo6c2V0
RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bQogICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWlu
RnJhbWUoKSA9PSB0aGlzKSB7CiAgICAgICAgIG5vdGlmeUNocm9tZUNsaWVudFdoZWVsRXZlbnRI
YW5kbGVyQ291bnRDaGFuZ2VkKCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAgICAg
aWYgKG1fZG9jICYmIG1fZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlm
IChtX2RvYyAmJiBtX2RvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBt
X3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlm
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5o
IgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTE4MSw2ICsxODIsNDUgQEAg
UmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRgogICAgIHJldHVybiBub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lO
RykKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVSZXBhaW50Q29udGFpbmVyVG91Y2hFdmVudFRhcmdl
dFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9jdW1l
bnQpOworICAgIGlmICghZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1bWVu
dC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5iZWdpbigpOyBpdGVyICE9IHRhcmdldHMtPmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPmtleSA9PSBkb2N1bWVudCkgeworICAg
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQor
ICAgICAgICAgICAgICAgIHZpZXctPnJlcGFpbnRDb250YWluZXJCb3VuZHNGb3JIaXRUZXN0aW5n
KHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGl0ZXItPmtleS0+aXNEb2N1bWVudE5vZGUoKSAmJiBpdGVy
LT5rZXkgIT0gZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVSZXBhaW50Q29udGFp
bmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oaXRlci0+a2V5KSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXRlci0+
a2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnRDb250YWluZXJC
b3VuZHNGb3JIaXRUZXN0aW5nKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMpOworICAgIH0K
K30KKyNlbmRpZgorCitSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjb21wdXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7Cisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIGlmICghZG9jdW1lbnQtPnZpZXco
KSkKKyAgICAgICAgcmV0dXJuIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7CisKKyAgICBh
Y2N1bXVsYXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhyZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzLCBkb2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVwYWlu
dENvbnRhaW5lckhpdFRlc3RSZWN0czsKK30KKwogdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWdu
ZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEz
Njk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTAsNiAr
NTEsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAogZW51bSBTY3JvbGxp
bmdOb2RlVHlwZSB7IFNjcm9sbGluZ05vZGUsIEZpeGVkTm9kZSB9OwogCitjbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsK
QEAgLTE0OSw3ICsxNTEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVB
cmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5
ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1l
bnQqKSB7IH0KIAorICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgY29tcHV0ZVJlcGFp
bnRDb250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgRG9jdW1lbnQqKTsKIHByb3Rl
Y3RlZDoKICAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAx
MzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCwy
MyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gYWxs
IHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBs
aXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKICAgICAvLyBmcmFtZSB2
aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAg
UmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworICAgIFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMgdG91Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVJlcGFpbnRD
b250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1l
bnQoKSk7CiAgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOworICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVj
dHMpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZl
bnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIC8v
IFdhaXQgdW50aWwgYWZ0ZXIgbGF5b3V0IHRvIHVwZGF0ZS4KKyAgICBpZiAobV9wYWdlLT5tYWlu
RnJhbWUoKS0+dmlldygpLT5uZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3Jl
IHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KKyAgICBzZXRTY3JvbGxMYXll
cihzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsK
KyAgICBpZiAobV9wcml2YXRlLT5zY3JvbGxMYXllcigpKSB7CisgICAgICAgIFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMgdG91Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVJlcGFpbnRD
b250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1lbnQpOworICAgICAgICBzZXRUb3Vj
aEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdldFJlY3RzKTsKKyAgICB9CiB9CiAKIHZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hh
bmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtMjA5LDYgKzIyNSwyMCBAQCB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vCiAgICAgfQogfQogCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKQor
eworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuYmVnaW4oKTsgaXRlciAhPSByZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgV2ViVmVj
dG9yPFdlYlJlY3Q+IHdlYlJlY3RzKGl0ZXItPnZhbHVlLnNpemUoKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB3
ZWJSZWN0c1tpXSA9IGl0ZXItPnZhbHVlW2ldOworCisgICAgICAgIEFTU0VSVChpdGVyLT5rZXkt
PmxheWVyKCkpOworICAgICAgICBXZWJMYXllciogd2ViTGF5ZXIgPSBpdGVyLT5rZXktPmxheWVy
KCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAg
IEFTU0VSVCh3ZWJMYXllcik7CisgICAgICAgIHdlYkxheWVyLT5zZXRUb3VjaEV2ZW50SGFuZGxl
clJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhh
bmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3Jv
bGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZl
cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlz
aW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4
LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzY3Jv
bGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJl
YSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAgIHZp
cnR1YWwgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNvbnN0IERvY3VtZW50
KikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVs
RXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB2
b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRo
cmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGlj
c0xheWVyKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdp
b24mKTsKKyAgICB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzJik7CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KHVuc2lnbmVkKTsKICAgICBQYXNzT3duUHRyPFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXI+IGNy
ZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciosIFdlYktpdDo6V2ViTGF5ZXIqIHNjcm9sbExh
eWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZpZXcqKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lv
biAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTMwLDYgKzY5MzAsNTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkt
PmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9m
ZnNldCArIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxv
Y2F0aW9uKCkgLSBsb2NhdGlvbigpKSk7CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkZEhpdFRl
c3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29u
dGFpbmVyKSBjb25zdAoreworICAgIExheW91dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRh
aW5lciA9IG9mZnNldEZyb21Db250YWluZXI7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8
IGhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNv
bnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBh
aW50Q29udGFpbmVyLCBhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIH0KKworICAg
IFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7CisgICAgSW50UmVjdCBoaXRUZXN0UmVjdDsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaGl0VGVzdFJlY3QgPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciwgYm9yZGVyQm94UmVjdCgpLnNp
emUoKSk7CisjZWxzZQorICAgIGhpdFRlc3RSZWN0ID0gY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQocmVwYWludENvbnRhaW5lcik7CisgICAgYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVy
ID0gTGF5b3V0U2l6ZSgpOworI2VuZGlmCisgICAgaWYgKCFoaXRUZXN0UmVjdC5pc0VtcHR5KCkp
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaGl0VGVzdFJlY3QpOworCisgICAgaWYgKGhhc0hvcml6
b250YWxMYXlvdXRPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3coKSkgewor
ICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgdG9w
ID0gbWF4PExheW91dFVuaXQ+KGN1cnItPmxpbmVUb3AoKSwgY3Vyci0+dG9wKCkpOworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBtaW48TGF5b3V0VW5pdD4oY3Vyci0+bGluZUJvdHRv
bSgpLCBjdXJyLT50b3AoKSArIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFJl
Y3QgcmVjdChhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIueCgpICsgY3Vyci0+eCgpLCBhZGp1
c3RlZE9mZnNldEZyb21Db250YWluZXIueSgpICsgdG9wLCBjdXJyLT53aWR0aCgpLCBib3R0b20g
LSB0b3ApOworICAgICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHBpeGVsU25hcHBlZEludFJlY3QocmVjdCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNUZXh0
KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpICYmIGN1cnItPmlzQm94KCkpIHsKKyAgICAgICAg
ICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBib3gt
PmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJI
aXRUZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsICBhZGp1c3RlZE9mZnNldEZyb21Db250YWlu
ZXIgKyBib3gtPmxvY2F0aW9uT2Zmc2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFyZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHM6Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVw
YWludENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMuZW5kKCkpCisgICAgICAgICAgICBpdGVyID0gcmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0cy5hZGQocmVwYWludENvbnRhaW5lciwgcmVzdWx0KS5pdGVyYXRvcjsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7CisgICAgfQorfQor
CiBSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVB
cyhjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3QKIHsKICAgICBpZiAoaXNBbm9ueW1v
dXNDb2x1bW5zQmxvY2soKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUwNiw4IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25z
dCBMYXlvdXRQb2ludCYpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZEhpdFRlc3RpbmdCb3VuZHNG
b3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0
IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAjaWYgRU5B
QkxFKFNWRykKICAgICAvLyBPbmx5IHVzZWQgYnkgUmVuZGVyU1ZHVGV4dCwgd2hpY2ggZXhwbGlj
aXRlbHkgb3ZlcnJpZGVzIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jaygpLCBkbyBOT1QgdXNlIGZv
ciBhbnl0aGluZyBlbHNlLgogICAgIHZvaWQgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTM2OTY4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4MCw2ICs0ODAsMzMgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3Rz
KFZlY3RvcgogICAgICAgICByZWN0cy5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChhZGRpdGlv
bmFsT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAordm9pZCBSZW5kZXJCb3g6OmFkZEhpdFRlc3RpbmdC
b3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJl
cGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29udGFpbmVy
KSBjb25zdAoreworICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIExheW91dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciA9IG9mZnNl
dEZyb21Db250YWluZXI7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKKyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJl
cGFpbnQoKTsKKyAgICAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVy
LCBhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgSW50UmVjdCByZXN1bHQocGl4ZWxTbmFwcGVkSW50UmVjdChh
ZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIsIGJvcmRlckJveFJlY3QoKS5zaXplKCkpKTsKKyNl
bHNlCisgICAgSW50UmVjdCByZXN1bHQoY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVw
YWludENvbnRhaW5lcikpOworI2VuZGlmCisgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0
czo6aXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZmluZChyZXBh
aW50Q29udGFpbmVyKTsKKyAgICBpZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHRWZWN0b3I7CisgICAg
ICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmVwYWludENvbnRhaW5l
ckhpdFRlc3RSZWN0cy5hZGQocmVwYWludENvbnRhaW5lciwgcmVzdWx0VmVjdG9yKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7Cit9CisKKwogTGF5b3V0
UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3Rpb25Cb3goKSBjb25zdAogewogICAgIExheW91dFJlY3Qg
cmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24g
MTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcsNiArMTU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAv
KnJlcGFpbnRDb250YWluZXIqLywgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5n
Qm91bmRzRm9yUmVwYWludENvbnRhaW5lcihSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwg
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAw
LCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwog
ICAgIC8vIFVzZSB0aGlzIHdpdGggY2F1dGlvbiEgTm8gdHlwZSBjaGVja2luZyBpcyBkb25lIQog
ICAgIFJlbmRlckJveCogcHJldmlvdXNTaWJsaW5nQm94KCkgY29uc3Q7CiAgICAgUmVuZGVyQm94
KiBuZXh0U2libGluZ0JveCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI4LDYgKzE0Mjgs
NTAgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlYwogICAgIH0KIH0K
IAordm9pZCBSZW5kZXJJbmxpbmU6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFp
bmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29udGFpbmVyKSBjb25zdAoreworICAgIExheW91
dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciA9IG9mZnNldEZyb21Db250YWluZXI7
CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
KyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAg
ICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBv
ZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBhZGp1c3RlZE9mZnNl
dEZyb21Db250YWluZXIpOworICAgIH0KKworICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7Cisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIEZJWE1FOiBUaGlzIGNsYXNz
IG5hbWUgaXMgYSBtaXNub21lciwgYXMgdGhlc2UgcmVjdHMgYXJlIGluIG91ciByZXBhaW50IGNv
bnRhaW5lcidzIGNvb3JkaW5hdGUgc3BhY2UsCisgICAgLy8gbm90IGFic29sdXRlIGNvb3JkaW5h
dGVzLgorICAgIEFic29sdXRlUmVjdHNHZW5lcmF0b3JDb250ZXh0IGNvbnRleHQocmVzdWx0LCBh
ZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIGdlbmVyYXRlTGluZUJveFJlY3RzKGNv
bnRleHQpOworCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNU
ZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7CisgICAgICAgICAgICBMYXlvdXRQb2lu
dCBwb3MoYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyKTsKKyAgICAgICAgICAgIGlmIChjdXJy
LT5pc0JveCgpKQorICAgICAgICAgICAgICAgIHBvcy5tb3ZlKHRvUmVuZGVyQm94KGN1cnIpLT5s
b2NhdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGN1cnItPmFkZEhpdFRlc3RpbmdCb3VuZHNG
b3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRD
b250YWluZXIsIHBvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29udGludWF0aW9u
KCkpIHsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbigpLT5pc0lubGluZSgpKQorICAgICAgICAg
ICAgY29udGludWF0aW9uKCktPmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVy
KHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsIHRvUG9pbnQo
YWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdC
bG9jaygpLT5sb2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZEhpdFRlc3RpbmdCb3Vu
ZHNGb3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFp
bnRDb250YWluZXIsIHRvUG9pbnQoYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyICsgdG9SZW5k
ZXJCb3goY29udGludWF0aW9uKCkpLT5sb2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxv
Y2F0aW9uKCkpKTsKKyAgICB9CisjZWxzZQorICAgIHJlc3VsdC5hcHBlbmQoY2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcikpOworI2VuZGlmCisgICAgaWYgKCFy
ZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6
Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVwYWlu
dENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMuZW5kKCkpCisgICAgICAgICAgICByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmFk
ZChyZXBhaW50Q29udGFpbmVyLCByZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
dGVyLT52YWx1ZS5hcHBlbmQocmVzdWx0KTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVySW5saW5l
OjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoIWhhc091dGxpbmUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDEzNjk2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtODAsNiArODAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBw
YWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAg
IHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
Y3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQ
b2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb250aW51YXRpb247CiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRp
bnVhdGlvbjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDE4IEBAIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCogUmVuZGVyT2JqZWN0OjpyZW4KICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVj
dC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSA/IHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG9i
amVjdCkgOiAwOwogfQogCit2b2lkIFJlbmRlck9iamVjdDo6b2Zmc2V0RnJvbVJlcGFpbnRDb250
YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5
b3V0UG9pbnQmIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0
aGlzKQorICAgICAgICBvZmZzZXQgPSBMYXlvdXRQb2ludCgpOworICAgIGVsc2UgeworICAgICAg
ICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFu
c2Zvcm1EaXJlY3Rpb24sIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIG1hcExvY2FsVG9Db250YWlu
ZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIEFwcGx5Q29udGFpbmVyRmxpcCB8
IFVzZVRyYW5zZm9ybXMgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3Jtcyk7CisgICAgICAgIHRyYW5z
Zm9ybVN0YXRlLmZsYXR0ZW4oKTsKKyAgICAgICAgb2Zmc2V0ID0gTGF5b3V0UG9pbnQodHJhbnNm
b3JtU3RhdGUubGFzdFBsYW5hclBvaW50KCkpOworICAgIH0KK30KKwogUmVuZGVyQmxvY2sqIFJl
bmRlck9iamVjdDo6Zmlyc3RMaW5lQmxvY2soKSBjb25zdAogewogICAgIHJldHVybiAwOwpAQCAt
MjYzMiw2ICsyNjQ0LDE3IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBI
aXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJv
dW5kc0ZvckhpdFRlc3RpbmcoVmVjdG9yPEludFJlY3Q+JiBhYnNvbHV0ZVJlY3RzKSBjb25zdAor
eworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgcmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0czsKKyAgICByZXBhaW50Q29udGFpbmVyQm91bmRzRm9ySGl0VGVzdGluZyhyZXBhaW50
Q29udGFpbmVySGl0VGVzdFJlY3RzKTsKKworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0czo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMuYmVnaW4oKTsgaXRlciAhPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIGFic29sdXRlUmVjdHMuYXBwZW5kKGl0ZXItPmtleS0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoaXRlci0+dmFsdWVbaV0pLCBVc2VUcmFuc2Zvcm1z
IHwgQXBwbHlDb250YWluZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpLmJvdW5kaW5n
Qm94KCkpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OnNjaGVkdWxlUmVsYXlvdXQo
KQogewogICAgIGlmIChpc1JlbmRlclZpZXcoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcg
QEAgc3RydWN0IEFubm90YXRlZFJlZ2lvblZhbHVlIHsKICNlbmRpZgogCiB0eXBlZGVmIFdURjo6
SGFzaFNldDxjb25zdCBSZW5kZXJPYmplY3QqPiBSZW5kZXJPYmplY3RBbmNlc3RvckxpbmVib3hE
aXJ0eVNldDsKLQordHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCosIFZlY3RvcjxJbnRSZWN0PiA+IFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7CiAj
aWZuZGVmIE5ERUJVRwogY29uc3QgaW50IHNob3dUcmVlQ2hhcmFjdGVyT2Zmc2V0ID0gMzk7CiAj
ZW5kaWYKQEAgLTk1Nyw2ICs5NTcsMTYgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYp
IHsgfTsKIAorICAgIHZvaWQgYWJzb2x1dGVCb3VuZHNGb3JIaXRUZXN0aW5nKFZlY3RvcjxJbnRS
ZWN0PiYpIGNvbnN0OworCisgICAgLy8gSGl0IHRlc3QgYm91bmRzIGluIHRoZSBjb29yZGluYXRl
IHNwYWNlIG9mIHRoZWlyIHJlcGFpbnQgY29udGFpbmVycworICAgIHZvaWQgcmVwYWludENvbnRh
aW5lckJvdW5kc0ZvckhpdFRlc3RpbmcoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVw
YWludENvbnRhaW5lckhpdFRlc3RSZWN0cykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkSGl0VGVzdGluZ0JvdW5k
c0ZvclJlcGFpbnRDb250YWluZXIoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYsIGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0
UG9pbnQoKSkgY29uc3QgeyB9OworCiAgICAgTGF5b3V0UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3Vu
ZHMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50
KDApOwpAQCAtOTcwLDYgKzk4MCw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBpbmxpbmUg
Ym9vbCBsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSBjb25zdDsKIAorICAgIHZvaWQg
b2Zmc2V0RnJvbVJlcGFpbnRDb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCos
IExheW91dFBvaW50JikgY29uc3Q7CisKICAgICAvLyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhl
IHN1cGVyY2xhc3MgYXQgdGhlIGVuZAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwogICAgIC8vIE92
ZXJyaWRlcyBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcyBhdCB0aGUgc3RhcnQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYyLDYgKzI2MiwyNSBAQCB2b2lkIFJlbmRlclZpZXc6Om1hcEFic29sdXRlVG9Mb2NhbFBv
aW50CiAgICAgfQogfQogCit2b2lkIFJlbmRlclZpZXc6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JS
ZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRS
ZXBhaW50Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgcmVwYWludE9mZnNldCkgY29uc3QK
K3sKKyAgICBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJlcGFpbnQoKTsK
KyAgICBpZiAoIWN1cnJlbnRSZXBhaW50Q29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRSZWN0IGRvY3VtZW50UmVjdCA9IHVuc2NhbGVkRG9jdW1lbnRSZWN0KCk7CisgICAgaWYg
KGRvY3VtZW50UmVjdC53aWR0aCgpICYmIGRvY3VtZW50UmVjdC5oZWlnaHQoKSkgeworICAgICAg
ICBWZWN0b3I8SW50UmVjdD4gcmVzdWx0OworICAgICAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50
UmVjdCk7CisKKyAgICAgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6aXRlcmF0b3Ig
aXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZmluZChjdXJyZW50UmVwYWludENv
bnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMuZW5kKCkpCisgICAgICAgICAgICByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmFkZChj
dXJyZW50UmVwYWludENvbnRhaW5lciwgcmVzdWx0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaXRlci0+dmFsdWUgPSByZXN1bHQ7CisgICAgfQorfQorCiBib29sIFJlbmRlclZpZXc6OnJl
cXVpcmVzQ29sdW1ucyhpbnQgZGVzaXJlZENvbHVtbkNvdW50KSBjb25zdAogewogICAgIGlmICht
X2ZyYW1lVmlldykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2
aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVS
UklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENv
bnRhaW5lcihSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBMYXlvdXRQb2lu
dCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIGVudW0gU2VsZWN0aW9u
UmVwYWludE1vZGUgeyBSZXBhaW50TmV3WE9ST2xkLCBSZXBhaW50TmV3TWludXNPbGQsIFJlcGFp
bnROb3RoaW5nIH07CiAgICAgdm9pZCBzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwg
aW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVuZFBvcywgU2VsZWN0aW9uUmVw
YWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKICAgICB2b2lkIGdldFNlbGVjdGlvbihSZW5k
ZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBpbnQmIHN0YXJ0T2Zmc2V0LCBSZW5kZXJPYmplY3Qq
JiBlbmRSZW5kZXJlciwgaW50JiBlbmRPZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNs
dWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1l
bnQuaCIKQEAgLTkxLDYgKzkyLDEyIEBAIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29s
dXRlUXVhZHMKICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3Vu
ZGluZ0JveCgpLCAwIC8qIG1vZGUgKi8sIHdhc0ZpeGVkKSk7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgcmVwYWludE9mZnNldCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogY2Fs
Y3VsYXRlIHRoZSBtaW5pbWFsIHJlY3QuCisgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmZp
bmRUcmVlUm9vdE9iamVjdCh0aGlzKS0+YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250
YWluZXIocmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cywgY3VycmVudFJlcGFpbnRDb250YWlu
ZXIsIHJlcGFpbnRPZmZzZXQpOworfQorCiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp3aWxs
QmVEZXN0cm95ZWQoKQogewogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQo
dGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29s
KiB3YXNGaXhlZCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkSGl0VGVzdGluZ0JvdW5k
c0ZvclJlcGFpbnRDb250YWluZXIoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYsIGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyID0gMCwgY29u
c3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJREU7CisKICAgICB2
aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE1hcENvb3JkaW5hdGVzRmxh
Z3MgPSBBcHBseUNvbnRhaW5lckZsaXAgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3JtcywgYm9vbCog
d2FzRml4ZWQgPSAwKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9i
amVjdCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogbmV3U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
VHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTY2hlbWVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgi
CiAjaW5jbHVkZSAiU2VsZWN0UnVsZUZlYXR1cmVTZXQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMTE5MSw4ICsxMTkyLDQx
IEBAIHVuc2lnbmVkIEludGVybmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3UKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGRvY3VtZW50LT50b3VjaEV2ZW50SGFuZGxlckNv
dW50KCk7CisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hIYW5kbGVycyA9IGRv
Y3VtZW50LT50b3VjaEV2ZW50VGFyZ2V0cygpOworICAgIGlmICghdG91Y2hIYW5kbGVycykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgZm9yIChUb3Vj
aEV2ZW50VGFyZ2V0U2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdG91Y2hIYW5kbGVycy0+YmVn
aW4oKTsgaXRlciAhPSB0b3VjaEhhbmRsZXJzLT5lbmQoKTsgKytpdGVyKQorICAgICAgICBjb3Vu
dCArPSBpdGVyLT52YWx1ZTsKKyAgICByZXR1cm4gY291bnQ7Cit9CisKKyNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRfVFJBQ0tJTkcpCitQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBJbnRlcm5hbHM6
OnRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52aWV3KCkgfHwg
IWRvY3VtZW50LT5wYWdlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIWRvY3VtZW50LT5wYWdlKCktPnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRl
KCk7CisKKyAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CisKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4g
cXVhZHM7CisKKyAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIHJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHMgPSBkb2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigp
LT5jb21wdXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhkb2N1bWVudCk7
CisKKyAgICBmb3IgKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmJlZ2luKCk7IGl0ZXIgIT0gcmVw
YWludENvbnRhaW5lckhpdFRlc3RSZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBx
dWFkcy5hcHBlbmQoaXRlci0+a2V5LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChpdGVy
LT52YWx1ZVtpXSksIFVzZVRyYW5zZm9ybXMgfCBBcHBseUNvbnRhaW5lckZsaXAgfCBTbmFwT2Zm
c2V0Rm9yVHJhbnNmb3JtcykpOworICAgIH0KKworICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6
Y3JlYXRlKHF1YWRzKTsKIH0KKyNlbmRpZgogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBJbnRlcm5h
bHM6Om5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgeCwgaW50IHksIHVuc2ln
bmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICB1bnNpZ25lZCBib3R0
b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9v
bCBhbGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDkg
QEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudChEb2N1bWVu
dCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50
KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFD
S0lORykKKyAgICBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiB0b3VjaEV2ZW50VGFyZ2V0Q2xp
ZW50UmVjdHMoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKIAogICAgIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IG5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqLCBpbnQgeCwgaW50IHksIHVu
c2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICAgICAgdW5zaWdu
ZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcsIGJvb2wgaWdub3JlQ2xpcHBp
bmcsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxMzY5NjgpCisrKyBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEz
Nyw2ICsxMzcsOSBAQAogCiAgICAgdW5zaWduZWQgbG9uZyB3aGVlbEV2ZW50SGFuZGxlckNvdW50
KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgdW5zaWdu
ZWQgbG9uZyB0b3VjaEV2ZW50SGFuZGxlckNvdW50KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlz
ZXMgKERPTUV4Y2VwdGlvbik7CisjaWYgZGVmaW5lZChFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJ
TkcpICYmIEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORworICAgIENsaWVudFJlY3RMaXN0IHRv
dWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChE
T01FeGNlcHRpb24pOworI2VuZGlmCiAKICAgICBOb2RlTGlzdCBub2Rlc0Zyb21SZWN0KGluIERv
Y3VtZW50IGRvY3VtZW50LCBpbiBsb25nIHgsIGluIGxvbmcgeSwKICAgICAgICAgaW4gdW5zaWdu
ZWQgbG9uZyB0b3BQYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIHJpZ2h0UGFkZGluZywgaW4gdW5z
aWduZWQgbG9uZyBib3R0b21QYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIGxlZnRQYWRkaW5nLApJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTItMTItMDcgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVzIHRvIGVu
YWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxpbmcgdG91Y2ggZXZlbnQg
dGFyZ2V0IHJlZ2lvbiB0cmFja2luZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAg
ICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQbHVnaW5Db250YWluZXJJbXBsOjpyZXF1ZXN0VG91Y2hFdmVudFR5cGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6
CisKIDIwMTItMTItMDcgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtDaHJvbWl1bV0gTW92ZSBXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSBvdXQgb2Yg
UGxhdGZvcm1TdXBwb3J0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShy
ZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQAogICAgICAgJ0VOQUJMRV9UT1VDSF9B
REpVU1RNRU5UPTEnLAogICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVOVFM9PChlbmFibGVfdG91Y2hf
ZXZlbnRzKScsCiAgICAgICAnRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORz08KGVuYWJsZV90b3Vj
aF9pY29uX2xvYWRpbmcpJywKKyAgICAgICdFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkc9PChl
bmFibGVfdG91Y2hfZXZlbnRzKScsCiAgICAgICAnRU5BQkxFX1RPVUNIX1NMSURFUj0xJywKICAg
ICAgICdFTkFCTEVfVVNFUl9USU1JTkc9MScsCiAgICAgICAnRU5BQkxFX1Y4X1NDUklQVF9ERUJV
R19TRVJWRVI9MScsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5D
b250YWluZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzMCw5ICs1MzAsOSBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJl
cXVlc3RUb3VjCiAgICAgICAgIHJldHVybjsKICAgICBtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSA9
IHJlcXVlc3RUeXBlOwogICAgIGlmIChtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSAhPSBUb3VjaEV2
ZW50UmVxdWVzdFR5cGVOb25lKQotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZEFk
ZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlk
QWRkVG91Y2hFdmVudEhhbmRsZXIobV9lbGVtZW50KTsKICAgICBlbHNlCi0gICAgICAgIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAg
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1l
bnQpOwogfQogCiB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNldFdhbnRzV2hlZWxFdmVu
dHMoYm9vbCB3YW50c1doZWVsRXZlbnRzKQpAQCAtNjg1LDcgKzY4NSw3IEBAIFdlYlBsdWdpbkNv
bnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWkKICNlbmRpZgogCiAgICAgaWYgKG1fdG91Y2hF
dmVudFJlcXVlc3RUeXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0gICAgICAgIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAg
ICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihtX2Vs
ZW1lbnQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsdWdpbkxvYWRPYnNlcnZl
cnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcGx1Z2luTG9hZE9ic2VydmVyc1tpXS0+Y2xlYXJQ
bHVnaW5Db250YWluZXIoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEyLTA3
ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3Vw
cG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVu
dCByZWplY3Rpb24gaW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91
Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNo
LWhpdC1yZWN0cy5odG1sOiBBZGRlZC4KKwogMjAxMi0xMi0wNyAgSmFtZXMgU2ltb25zZW4gIDxz
aW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBFbmFibGUgSW50ZWwn
cyBSZXNvdXJjZSBUaW1pbmcgdGVzdHMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2
ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3Vj
aC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjMgQEAKK1RoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMg
Z2l2ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVy
VHJlZS4gVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lv
bnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuCisKK25vcm1hbEZsb3dbMF06ICg4LCA3Miwg
Nzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMF06ICg4LCAxMDIsIDc4NCwgMTApCith
YnNvbHV0ZUNoaWxkQ29udGFpbmVyWzFdOiAoMTE4LCAzMDAsIDE0MCwgMTApCityZWxhdGl2ZUNo
aWxkQ29udGFpbmVyWzBdOiAoOCwgMTUyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5l
clsxXTogKDgsIDE1MiwgMjYwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzBdOiAoOCwgMjAy
LCAxMDAsIDgwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMV06ICg4LCAyMDIsIDExMCwgMTApCitv
dmVyaGFuZ2luZ0NvbnRhaW5lclsyXTogKDgsIDIwMiwgNzg0LCAxMCkKK292ZXJoYW5naW5nQ29u
dGFpbmVyWzNdOiAoOCwgMjEyLCA1MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls0XTogKDgs
IDIyMiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzVdOiAoOCwgMjMyLCA1MCwgMTAp
CitvdmVyaGFuZ2luZ0NvbnRhaW5lcls2XTogKDgsIDI0MiwgMTEwLCAxMCkKK292ZXJoYW5naW5n
Q29udGFpbmVyWzddOiAoOCwgMjUyLCA1MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls4XTog
KDgsIDI2MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzldOiAoOCwgMjcyLCA1MCwg
MTApCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzBdOiAoNjIsIDQwMSwgNjYxLCAzMikKK3Ry
YW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMV06ICg4LCA0MTIsIDc2OSwgMTApCitjb250aW51YXRp
b25bMF06ICgxMDgsIDQ2MiwgMTAwLCAxMCkKK2NvbnRpbnVhdGlvblsxXTogKDgsIDQ3MiwgNzY5
LCAxMCkKK2NvbnRpbnVhdGlvblsyXTogKDgsIDQ3MiwgNzY5LCAxMCkKKwpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3Vj
aC1oaXQtcmVjdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMv
dG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyN0
cmFuc2Zvcm1lZENoaWxkIHsKKwktd2Via2l0LXRyYW5zZm9ybTogcm90YXRlM2QoMC4yLCAxLCAw
LCAzNWdyYWQpOworfQorI2Fic29sdXRlQ2hpbGQgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl0
b3A6IDMwMHB4OworfQorI3JlbGF0aXZlQ2hpbGQgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwl0
b3A6IDIwMHB4OworfQorI292ZXJoYW5naW5nQ29udGFpbmVyIHsKKwloZWlnaHQ6IDEwcHg7Cit9
Cisjb3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIHsKKwl3aWR0aDogMTAwcHg7CisJZmxvYXQ6IGxl
ZnQ7Cit9CisjdGVzdHMgeworCWZvbnQ6IDEwcHggQWhlbTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0
IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVu
IGluIER1bXBSZW5kZXJUcmVlLgorVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhl
IGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuPC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InRlc3RzIj4KKwk8ZGl2IGlkPSJub3JtYWxG
bG93Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4+c3VtPC9zcGFuPi4KKwk8L2Rpdj4KKwk8ZGl2
IGlkPSJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9
ImFic29sdXRlQ2hpbGQiPkFic29sdXRlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9
InJlbGF0aXZlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0icmVs
YXRpdmVDaGlsZCI+UmVsYXRpdmUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0ib3Zl
cmhhbmdpbmdDb250YWluZXIiPgorCQk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0Zsb2F0aW5nQ2hpbGQi
Pk92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92
ZXJoYW5naW5nIGZsb2F0PC9kaXY+CisJPC9kaXY+CisJPGRpdiBpZD0idHJhbnNmb3JtZWRDaGls
ZENvbnRhaW5lciI+CisJCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGQiPlRyYW5zZm9ybWVkPC9k
aXY+CisJPC9kaXY+CisJPGRpdj4KKwkJPGIgaWQ9ImNvbnRpbnVhdGlvbiI+VGhpcyBiIHRhZwor
CQk8ZGl2PmNhdXNlcyBhPC9kaXY+CisJCWNvbnRpbnVhdGlvbjwvYj4KKwk8L2Rpdj4KKzwvZGl2
PgorPHNjcmlwdD4KK2lmICghd2luZG93LnRlc3RSdW5uZXIpCisJcmV0dXJuOworCit3aW5kb3cu
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxpc3RlbmVyKCkgeyB9CisKK2Z1
bmN0aW9uIGxvZyhtc2cpIHsKKwl2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNw
YW4pOworICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9u
IHNvcnRSZWN0cyhhLCBiKSB7CisJcmV0dXJuIGEudG9wIC0gYi50b3A7Cit9CisKK2Z1bmN0aW9u
IGxvZ1JlY3RzKGlkKSB7CisJZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsK
KwllbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2Up
OworCXJlY3RzID0gd2luZG93LmludGVybmFscy50b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMo
ZG9jdW1lbnQpOworCXZhciBzb3J0ZWRSZWN0cyA9IG5ldyBBcnJheSgpOworCWZvciAodmFyIGkg
PSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCXNvcnRlZFJlY3RzW2ldID0gcmVjdHNbaV07
CisJc29ydGVkUmVjdHMuc29ydChzb3J0UmVjdHMpOworCWZvciAodmFyIGkgPSAwOyBpIDwgcmVj
dHMubGVuZ3RoOyArK2kpCisJCWxvZyhpZCArICJbIiArIGkgKyAiXTogKCIgKyBzb3J0ZWRSZWN0
c1tpXS5sZWZ0ICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLnRvcCArICIsICIgKyBzb3J0ZWRSZWN0
c1tpXS53aWR0aCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS5oZWlnaHQgKyAiKSIpOworCWVsZW1l
bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7Cit9
CisKK2xvZ1JlY3RzKCJub3JtYWxGbG93Iik7Citsb2dSZWN0cygiYWJzb2x1dGVDaGlsZENvbnRh
aW5lciIpOworbG9nUmVjdHMoInJlbGF0aXZlQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJv
dmVyaGFuZ2luZ0NvbnRhaW5lciIpOworbG9nUmVjdHMoInRyYW5zZm9ybWVkQ2hpbGRDb250YWlu
ZXIiKTsKK2xvZ1JlY3RzKCJjb250aW51YXRpb24iKTsKKwordmFyIHRlc3RDb250YWluZXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHMiKTsKK3Rlc3RDb250YWluZXIucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178272</attachid>
            <date>2012-12-07 14:09:00 -0800</date>
            <delta_ts>2012-12-07 14:41:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121207140624.patch</filename>
            <type>text/plain</type>
            <size>52156</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMi0wNyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuCisKKyAgICAgICAgVGhlIGhpdCB0ZXN0IHJlY3RzIGZvciBhbiBhcmJpdHJhcnkgUmVu
ZGVyT2JqZWN0IGNhbiBiZSBnZW5lcmF0ZWQgZWl0aGVyIGluIHRlcm1zIG9mIGFic29sdXRlIGNv
b3JkaW5hdGVzCisgICAgICAgIG9yIHRoZSBjb29yZGluYXRlcyBvZiBlYWNoIHJlbmRlcmVyJ3Mg
cmVwYWludCBjb250YWluZXIuIFRoaXMgYWxsb3dzIHBsYXRmb3JtcyB0aGF0IHNjcm9sbCBpbiB0
aGUKKyAgICAgICAgY29tcG9zaXRvciB0byBzY3JvbGwgdGhlc2UgcmVjdHMgYWxvbmcgd2l0aCB0
aGUgc2Nyb2xsaW5nIGxheWVyIHdpdGhvdXQgaGF2aW5nIHRvIHVwZGF0ZSB0aGVtLgorCisgICAg
ICAgIFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3It
dG91Y2gtaGl0LXJlY3RzLmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGFzVG91Y2hFdmVudEhhbmRsZXJzKToK
KyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0b3VjaEV2
ZW50VGFyZ2V0cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dHJ5QWRkRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjp0cnlSZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZEZyYW1lQmFzZTo6cmVzdG9yZSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUpOgor
ICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlbW92
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVs
YXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZVJlcGFpbnRDb250YWluZXJUb3VjaEV2
ZW50VGFyZ2V0UmVjdHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0VG91
Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRv
cik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVu
dFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVj
dHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRD
b250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAo
UmVuZGVyQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjphZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRh
aW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6CisgICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRIaXRUZXN0aW5nQm91
bmRzRm9yUmVwYWludENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChSZW5kZXJJbmxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kc0ZvckhpdFRlc3RpbmcpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVw
YWludENvbnRhaW5lckJvdW5kc0ZvckhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjphZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKFJl
bmRlclZpZXcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVh
ZHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFJlbmRl
clNWR01vZGVsT2JqZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRUYXJn
ZXRDbGllbnRSZWN0cyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAg
KEludGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDEyLTEy
LTA3ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNT
SU9OKHIxMjcxNjMpOiBDb250ZW50IGlzIG9mZnNldCB0byB0aGUgcmlnaHQgYXQgcmVhLnJ1Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw5ICs0OTYsNiBA
QCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAgICAgLCBtX3dyaXRl
UmVjdXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwgbV93cml0ZVJlY3Vyc2lvbkRlcHRoKDAp
CiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50KDApCi0jZW5kaWYKICAgICAsIG1f
cGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5nVGFza3NUaW1lckZpcmVk
KQogICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fdmlz
dWFsVXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTU1OTksMzMgKzU1OTYsNTcgQEAgdm9pZCBEb2N1
bWVudDo6ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZQogICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnRDaGFuZ2VkKHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFu
ZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKiBoYW5k
bGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgKyttX3RvdWNoRXZlbnRIYW5k
bGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCA+IDEpCisgICAgaWYg
KCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQorICAgICAgICBtX3RvdWNoRXZlbnRUYXJnZXRz
ID0gYWRvcHRQdHIobmV3IFRvdWNoRXZlbnRUYXJnZXRTZXQpOworICAgIG1fdG91Y2hFdmVudFRh
cmdldHMtPmFkZChoYW5kbGVyKTsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERv
Y3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlz
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKQot
ICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsK
KyAgICB9CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpIHsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0No
YW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNp
emUoKSA9PSAxKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91
Y2hFdmVudHModHJ1ZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7
CiAjZW5kaWYKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIo
KQordm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxl
cikKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIEFTU0VSVChtX3RvdWNoRXZlbnRI
YW5kbGVyQ291bnQpOwotICAgIC0tbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmICht
X3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdl
dCgpKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fdG91Y2hFdmVudFRhcmdldHMtPmNv
bnRhaW5zKGhhbmRsZXIpKTsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxl
cik7CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAg
ICAgIHBhcmVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykK
KyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFn
ZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICBpZiAo
bV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpKQorICAgICAgICByZXR1cm47CiAgICAgZm9yIChj
b25zdCBGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAg
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+aGFzVG91Y2hF
dmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKGZhbHNlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiw4IEBAIGVudW0gTm9kZUxpc3RJbnZhbGlkYXRpb25U
eXBlIHsKIH07CiBjb25zdCBpbnQgbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlcyA9IEludmFs
aWRhdGVPbkFueUF0dHJDaGFuZ2UgKyAxOwogCit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PE5vZGUq
PiBUb3VjaEV2ZW50VGFyZ2V0U2V0OworCiBjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDb250YWlu
ZXJOb2RlLCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSog
ZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKQEAgLTExMTUsMTMgKzExMTcsMTkgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKIAogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCi0gICAgdW5zaWduZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVu
dEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gKG1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpID8g
bV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFsc2U7IH0KICNlbHNlCi0gICAgdW5zaWdu
ZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBib29s
IGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
IAotICAgIHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICB2b2lkIGRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgdm9pZCBkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihO
b2RlKik7CisgICAgdm9pZCBkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRv
dWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQo
KTsgfQorI2Vsc2UKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFy
Z2V0cygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiAgICAgYm9vbCB2aXN1YWxVcGRh
dGVzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7IH0KIApA
QCAtMTQ5OSw3ICsxNTA3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1bnNpZ25lZCBtX3doZWVs
RXZlbnRIYW5kbGVyQ291bnQ7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNpZ25l
ZCBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7CisgICAgT3duUHRyPFRvdWNoRXZlbnRUYXJnZXRT
ZXQ+IG1fdG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1OSw4ICsy
MjU5LDggQEAgdm9pZCBOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudE5hbWVzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGdldEV2ZW50TGlzdGVu
ZXJzKHRvdWNoRXZlbnROYW1lc1tpXSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
bGlzdGVuZXJzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRv
dWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI4OSw3ICsyMjg5
LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeUFkZEV2ZW50TGlzdGVuZXIoTgogICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAo
ZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRv
Y3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQt
PmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpAQCAtMjMxMSw3ICsyMzExLDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeVJlbW92
ZUV2ZW50TGlzdGVuZQogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhh
bmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUo
ZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBDYWNoZWRGcmFtZUJhc2U6OnJlc3RvcmUoKQogICAgIG1fZG9jdW1lbnQt
PmVucXVldWVQb3BzdGF0ZUV2ZW50KGhpc3RvcnlJdGVtICYmIGhpc3RvcnlJdGVtLT5zdGF0ZU9i
amVjdCgpID8gaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgOiBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bGxWYWx1ZSgpKTsKICAgICAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlm
IChtX2RvY3VtZW50LT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgaWYgKG1fZG9jdW1l
bnQtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2
OTY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRF
bGVtZW50KCkKICAgICAgICAgZG9jdW1lbnQoKS0+Zm9ybUNvbnRyb2xsZXIoKS0+Y2hlY2tlZFJh
ZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1v
dmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICNlbmRpZgogfQogCkBAIC00ODksOSArNDg5LDkg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBib29sIGhhc1RvdWNo
RXZlbnRIYW5kbGVyID0gbV9pbnB1dFR5cGUtPmhhc1RvdWNoRXZlbnRIYW5kbGVyKCk7CiAgICAg
aWYgKGhhc1RvdWNoRXZlbnRIYW5kbGVyICE9IG1faGFzVG91Y2hFdmVudEhhbmRsZXIpIHsKICAg
ICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxlcikKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVu
dEhhbmRsZXIodGhpcyk7CiAgICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgbV9oYXNUb3VjaEV2ZW50SGFuZGxlciA9IGhhc1Rv
dWNoRXZlbnRIYW5kbGVyOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg0LDcgKzE1ODQsNyBAQCBib29sIERPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRX
aGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3Vj
aEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNo
RXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoZG9jdW1lbnQpOwogICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLnN0b3JhZ2VFdmVudCkKICAgICAgICAgICAgIGRpZEFkZFN0b3JhZ2VFdmVudExpc3RlbmVy
KHRoaXMpOwogICAgIH0KQEAgLTE2MTUsNyArMTYxNSw3IEBAIGJvb2wgRE9NV2luZG93OjpyZW1v
dmVFdmVudExpc3RlbmVyKGNvbnMKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVs
RXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZl
bnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcihkb2N1bWVudCk7CiAgICAgfQogCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MDQsNyArMzkwNCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBub2Rl
LT5kb2N1bWVudCgpOwogICAgICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQor
ICAgICAgICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRh
cmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5vZGUpOwpAQCAtMzkyNCw3ICszOTI0LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29ucwogICAgICAgICBEb2N1
bWVudCogZG9jID0gdG91Y2hUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICBp
ZiAoIWRvYykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvYy0+dG91Y2hF
dmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRs
ZXJzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1l
ID0gZG9jLT5mcmFtZSgpOwogICAgICAgICBpZiAoIXRhcmdldEZyYW1lKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBGcmFtZTo6c2V0
RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bQogICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWlu
RnJhbWUoKSA9PSB0aGlzKSB7CiAgICAgICAgIG5vdGlmeUNocm9tZUNsaWVudFdoZWVsRXZlbnRI
YW5kbGVyQ291bnRDaGFuZ2VkKCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAgICAg
aWYgKG1fZG9jICYmIG1fZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlm
IChtX2RvYyAmJiBtX2RvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBt
X3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlm
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5o
IgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTE4MSw2ICsxODIsNDUgQEAg
UmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRgogICAgIHJldHVybiBub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lO
RykKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVSZXBhaW50Q29udGFpbmVyVG91Y2hFdmVudFRhcmdl
dFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9jdW1l
bnQpOworICAgIGlmICghZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1bWVu
dC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5iZWdpbigpOyBpdGVyICE9IHRhcmdldHMtPmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPmtleSA9PSBkb2N1bWVudCkgeworICAg
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQor
ICAgICAgICAgICAgICAgIHZpZXctPnJlcGFpbnRDb250YWluZXJCb3VuZHNGb3JIaXRUZXN0aW5n
KHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGl0ZXItPmtleS0+aXNEb2N1bWVudE5vZGUoKSAmJiBpdGVy
LT5rZXkgIT0gZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVSZXBhaW50Q29udGFp
bmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oaXRlci0+a2V5KSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXRlci0+
a2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnRDb250YWluZXJC
b3VuZHNGb3JIaXRUZXN0aW5nKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMpOworICAgIH0K
K30KKyNlbmRpZgorCitSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjb21wdXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7Cisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIGlmICghZG9jdW1lbnQtPnZpZXco
KSkKKyAgICAgICAgcmV0dXJuIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7CisKKyAgICBh
Y2N1bXVsYXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhyZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzLCBkb2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVwYWlu
dENvbnRhaW5lckhpdFRlc3RSZWN0czsKK30KKwogdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWdu
ZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEz
Njk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTAsNiAr
NTEsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAogZW51bSBTY3JvbGxp
bmdOb2RlVHlwZSB7IFNjcm9sbGluZ05vZGUsIEZpeGVkTm9kZSB9OwogCitjbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsK
QEAgLTE0OSw3ICsxNTEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVB
cmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5
ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1l
bnQqKSB7IH0KIAorICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgY29tcHV0ZVJlcGFp
bnRDb250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgRG9jdW1lbnQqKTsKIHByb3Rl
Y3RlZDoKICAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAx
MzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCwy
MyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gYWxs
IHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBs
aXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKICAgICAvLyBmcmFtZSB2
aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAg
UmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworICAgIFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMgdG91Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVJlcGFpbnRD
b250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1l
bnQoKSk7CiAgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOworICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVj
dHMpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZl
bnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIC8v
IFdhaXQgdW50aWwgYWZ0ZXIgbGF5b3V0IHRvIHVwZGF0ZS4KKyAgICBpZiAobV9wYWdlLT5tYWlu
RnJhbWUoKS0+dmlldygpLT5uZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3Jl
IHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KKyAgICBzZXRTY3JvbGxMYXll
cihzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsK
KyAgICBpZiAobV9wcml2YXRlLT5zY3JvbGxMYXllcigpKSB7CisgICAgICAgIFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMgdG91Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVJlcGFpbnRD
b250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1lbnQpOworICAgICAgICBzZXRUb3Vj
aEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdldFJlY3RzKTsKKyAgICB9CiB9CiAKIHZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hh
bmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtMjA5LDYgKzIyNSwyMCBAQCB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vCiAgICAgfQogfQogCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKQor
eworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuYmVnaW4oKTsgaXRlciAhPSByZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgV2ViVmVj
dG9yPFdlYlJlY3Q+IHdlYlJlY3RzKGl0ZXItPnZhbHVlLnNpemUoKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB3
ZWJSZWN0c1tpXSA9IGl0ZXItPnZhbHVlW2ldOworCisgICAgICAgIEFTU0VSVChpdGVyLT5rZXkt
PmxheWVyKCkpOworICAgICAgICBXZWJMYXllciogd2ViTGF5ZXIgPSBpdGVyLT5rZXktPmxheWVy
KCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAg
IEFTU0VSVCh3ZWJMYXllcik7CisgICAgICAgIHdlYkxheWVyLT5zZXRUb3VjaEV2ZW50SGFuZGxl
clJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhh
bmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3Jv
bGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZl
cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlz
aW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4
LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzY3Jv
bGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJl
YSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAgIHZp
cnR1YWwgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNvbnN0IERvY3VtZW50
KikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVs
RXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB2
b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRo
cmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGlj
c0xheWVyKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdp
b24mKTsKKyAgICB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzJik7CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KHVuc2lnbmVkKTsKICAgICBQYXNzT3duUHRyPFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXI+IGNy
ZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciosIFdlYktpdDo6V2ViTGF5ZXIqIHNjcm9sbExh
eWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZpZXcqKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lv
biAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTMwLDYgKzY5MzAsNTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkt
PmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9m
ZnNldCArIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxv
Y2F0aW9uKCkgLSBsb2NhdGlvbigpKSk7CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkZEhpdFRl
c3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29u
dGFpbmVyKSBjb25zdAoreworICAgIExheW91dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRh
aW5lciA9IG9mZnNldEZyb21Db250YWluZXI7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8
IGhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNv
bnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBh
aW50Q29udGFpbmVyLCBhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIH0KKworICAg
IFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7CisgICAgSW50UmVjdCBoaXRUZXN0UmVjdDsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaGl0VGVzdFJlY3QgPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciwgYm9yZGVyQm94UmVjdCgpLnNp
emUoKSk7CisjZWxzZQorICAgIGhpdFRlc3RSZWN0ID0gY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQocmVwYWludENvbnRhaW5lcik7CisgICAgYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVy
ID0gTGF5b3V0U2l6ZSgpOworI2VuZGlmCisgICAgaWYgKCFoaXRUZXN0UmVjdC5pc0VtcHR5KCkp
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaGl0VGVzdFJlY3QpOworCisgICAgaWYgKGhhc0hvcml6
b250YWxMYXlvdXRPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3coKSkgewor
ICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgdG9w
ID0gbWF4PExheW91dFVuaXQ+KGN1cnItPmxpbmVUb3AoKSwgY3Vyci0+dG9wKCkpOworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBtaW48TGF5b3V0VW5pdD4oY3Vyci0+bGluZUJvdHRv
bSgpLCBjdXJyLT50b3AoKSArIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFJl
Y3QgcmVjdChhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIueCgpICsgY3Vyci0+eCgpLCBhZGp1
c3RlZE9mZnNldEZyb21Db250YWluZXIueSgpICsgdG9wLCBjdXJyLT53aWR0aCgpLCBib3R0b20g
LSB0b3ApOworICAgICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHBpeGVsU25hcHBlZEludFJlY3QocmVjdCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNUZXh0
KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpICYmIGN1cnItPmlzQm94KCkpIHsKKyAgICAgICAg
ICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBib3gt
PmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJI
aXRUZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsICBhZGp1c3RlZE9mZnNldEZyb21Db250YWlu
ZXIgKyBib3gtPmxvY2F0aW9uT2Zmc2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFyZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHM6Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVw
YWludENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMuZW5kKCkpCisgICAgICAgICAgICBpdGVyID0gcmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0cy5hZGQocmVwYWludENvbnRhaW5lciwgcmVzdWx0KS5pdGVyYXRvcjsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7CisgICAgfQorfQor
CiBSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVB
cyhjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3QKIHsKICAgICBpZiAoaXNBbm9ueW1v
dXNDb2x1bW5zQmxvY2soKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUwNiw4IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25z
dCBMYXlvdXRQb2ludCYpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZEhpdFRlc3RpbmdCb3VuZHNG
b3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0
IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAjaWYgRU5B
QkxFKFNWRykKICAgICAvLyBPbmx5IHVzZWQgYnkgUmVuZGVyU1ZHVGV4dCwgd2hpY2ggZXhwbGlj
aXRlbHkgb3ZlcnJpZGVzIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jaygpLCBkbyBOT1QgdXNlIGZv
ciBhbnl0aGluZyBlbHNlLgogICAgIHZvaWQgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTM2OTY4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4MCw2ICs0ODAsMzMgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3Rz
KFZlY3RvcgogICAgICAgICByZWN0cy5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChhZGRpdGlv
bmFsT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAordm9pZCBSZW5kZXJCb3g6OmFkZEhpdFRlc3RpbmdC
b3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJl
cGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29udGFpbmVy
KSBjb25zdAoreworICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIExheW91dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciA9IG9mZnNl
dEZyb21Db250YWluZXI7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKKyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJl
cGFpbnQoKTsKKyAgICAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVy
LCBhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgSW50UmVjdCByZXN1bHQocGl4ZWxTbmFwcGVkSW50UmVjdChh
ZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIsIGJvcmRlckJveFJlY3QoKS5zaXplKCkpKTsKKyNl
bHNlCisgICAgSW50UmVjdCByZXN1bHQoY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVw
YWludENvbnRhaW5lcikpOworI2VuZGlmCisgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0
czo6aXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZmluZChyZXBh
aW50Q29udGFpbmVyKTsKKyAgICBpZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHRWZWN0b3I7CisgICAg
ICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmVwYWludENvbnRhaW5l
ckhpdFRlc3RSZWN0cy5hZGQocmVwYWludENvbnRhaW5lciwgcmVzdWx0VmVjdG9yKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7Cit9CisKKwogTGF5b3V0
UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3Rpb25Cb3goKSBjb25zdAogewogICAgIExheW91dFJlY3Qg
cmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24g
MTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcsNiArMTU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAv
KnJlcGFpbnRDb250YWluZXIqLywgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5n
Qm91bmRzRm9yUmVwYWludENvbnRhaW5lcihSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwg
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAw
LCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwog
ICAgIC8vIFVzZSB0aGlzIHdpdGggY2F1dGlvbiEgTm8gdHlwZSBjaGVja2luZyBpcyBkb25lIQog
ICAgIFJlbmRlckJveCogcHJldmlvdXNTaWJsaW5nQm94KCkgY29uc3Q7CiAgICAgUmVuZGVyQm94
KiBuZXh0U2libGluZ0JveCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI4LDYgKzE0Mjgs
NTAgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlYwogICAgIH0KIH0K
IAordm9pZCBSZW5kZXJJbmxpbmU6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFp
bmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29udGFpbmVyKSBjb25zdAoreworICAgIExheW91
dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciA9IG9mZnNldEZyb21Db250YWluZXI7
CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
KyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAg
ICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBv
ZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBhZGp1c3RlZE9mZnNl
dEZyb21Db250YWluZXIpOworICAgIH0KKworICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7Cisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIEZJWE1FOiBUaGlzIGNsYXNz
IG5hbWUgaXMgYSBtaXNub21lciwgYXMgdGhlc2UgcmVjdHMgYXJlIGluIG91ciByZXBhaW50IGNv
bnRhaW5lcidzIGNvb3JkaW5hdGUgc3BhY2UsCisgICAgLy8gbm90IGFic29sdXRlIGNvb3JkaW5h
dGVzLgorICAgIEFic29sdXRlUmVjdHNHZW5lcmF0b3JDb250ZXh0IGNvbnRleHQocmVzdWx0LCBh
ZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIGdlbmVyYXRlTGluZUJveFJlY3RzKGNv
bnRleHQpOworCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNU
ZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7CisgICAgICAgICAgICBMYXlvdXRQb2lu
dCBwb3MoYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyKTsKKyAgICAgICAgICAgIGlmIChjdXJy
LT5pc0JveCgpKQorICAgICAgICAgICAgICAgIHBvcy5tb3ZlKHRvUmVuZGVyQm94KGN1cnIpLT5s
b2NhdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGN1cnItPmFkZEhpdFRlc3RpbmdCb3VuZHNG
b3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRD
b250YWluZXIsIHBvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29udGludWF0aW9u
KCkpIHsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbigpLT5pc0lubGluZSgpKQorICAgICAgICAg
ICAgY29udGludWF0aW9uKCktPmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVy
KHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsIHRvUG9pbnQo
YWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdC
bG9jaygpLT5sb2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZEhpdFRlc3RpbmdCb3Vu
ZHNGb3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFp
bnRDb250YWluZXIsIHRvUG9pbnQoYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyICsgdG9SZW5k
ZXJCb3goY29udGludWF0aW9uKCkpLT5sb2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxv
Y2F0aW9uKCkpKTsKKyAgICB9CisjZWxzZQorICAgIHJlc3VsdC5hcHBlbmQoY2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcikpOworI2VuZGlmCisgICAgaWYgKCFy
ZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6
Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVwYWlu
dENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMuZW5kKCkpCisgICAgICAgICAgICByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmFk
ZChyZXBhaW50Q29udGFpbmVyLCByZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
dGVyLT52YWx1ZS5hcHBlbmQocmVzdWx0KTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVySW5saW5l
OjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoIWhhc091dGxpbmUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDEzNjk2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtODAsNiArODAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBw
YWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAg
IHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
Y3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQ
b2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb250aW51YXRpb247CiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRp
bnVhdGlvbjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDE4IEBAIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCogUmVuZGVyT2JqZWN0OjpyZW4KICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVj
dC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSA/IHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG9i
amVjdCkgOiAwOwogfQogCit2b2lkIFJlbmRlck9iamVjdDo6b2Zmc2V0RnJvbVJlcGFpbnRDb250
YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5
b3V0UG9pbnQmIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0
aGlzKQorICAgICAgICBvZmZzZXQgPSBMYXlvdXRQb2ludCgpOworICAgIGVsc2UgeworICAgICAg
ICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFu
c2Zvcm1EaXJlY3Rpb24sIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIG1hcExvY2FsVG9Db250YWlu
ZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIEFwcGx5Q29udGFpbmVyRmxpcCB8
IFVzZVRyYW5zZm9ybXMgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3Jtcyk7CisgICAgICAgIHRyYW5z
Zm9ybVN0YXRlLmZsYXR0ZW4oKTsKKyAgICAgICAgb2Zmc2V0ID0gTGF5b3V0UG9pbnQodHJhbnNm
b3JtU3RhdGUubGFzdFBsYW5hclBvaW50KCkpOworICAgIH0KK30KKwogUmVuZGVyQmxvY2sqIFJl
bmRlck9iamVjdDo6Zmlyc3RMaW5lQmxvY2soKSBjb25zdAogewogICAgIHJldHVybiAwOwpAQCAt
MjYzMiw2ICsyNjQ0LDE3IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBI
aXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJv
dW5kc0ZvckhpdFRlc3RpbmcoVmVjdG9yPEludFJlY3Q+JiBhYnNvbHV0ZVJlY3RzKSBjb25zdAor
eworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgcmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0czsKKyAgICByZXBhaW50Q29udGFpbmVyQm91bmRzRm9ySGl0VGVzdGluZyhyZXBhaW50
Q29udGFpbmVySGl0VGVzdFJlY3RzKTsKKworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0czo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMuYmVnaW4oKTsgaXRlciAhPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIGFic29sdXRlUmVjdHMuYXBwZW5kKGl0ZXItPmtleS0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoaXRlci0+dmFsdWVbaV0pLCBVc2VUcmFuc2Zvcm1z
IHwgQXBwbHlDb250YWluZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpLmJvdW5kaW5n
Qm94KCkpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OnNjaGVkdWxlUmVsYXlvdXQo
KQogewogICAgIGlmIChpc1JlbmRlclZpZXcoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcg
QEAgc3RydWN0IEFubm90YXRlZFJlZ2lvblZhbHVlIHsKICNlbmRpZgogCiB0eXBlZGVmIFdURjo6
SGFzaFNldDxjb25zdCBSZW5kZXJPYmplY3QqPiBSZW5kZXJPYmplY3RBbmNlc3RvckxpbmVib3hE
aXJ0eVNldDsKLQordHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCosIFZlY3RvcjxJbnRSZWN0PiA+IFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7CiAj
aWZuZGVmIE5ERUJVRwogY29uc3QgaW50IHNob3dUcmVlQ2hhcmFjdGVyT2Zmc2V0ID0gMzk7CiAj
ZW5kaWYKQEAgLTk1Nyw2ICs5NTcsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYp
IHsgfTsKIAorICAgIHZvaWQgYWJzb2x1dGVCb3VuZHNGb3JIaXRUZXN0aW5nKFZlY3RvcjxJbnRS
ZWN0PiYpIGNvbnN0OworCisgICAgLy8gSGl0IHRlc3QgYm91bmRzIGluIHRoZSBjb29yZGluYXRl
IHNwYWNlIG9mIHRoZWlyIHJlcGFpbnQgY29udGFpbmVycworICAgIHZvaWQgcmVwYWludENvbnRh
aW5lckJvdW5kc0ZvckhpdFRlc3RpbmcoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVw
YWludENvbnRhaW5lckhpdFRlc3RSZWN0cykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgZGly
ZWN0bHksIGJ1dCBpbnN0ZWFkIHVzZXJzIHNob3VsZCBjYWxsIGFic29sdXRlQm91bmRzRm9ySGl0
VGVzdGluZyBvciByZXBhaW50Q29udGFpbmVyQm91bmRzRm9ySGl0VGVzdGluZy4KKyAgICB2aXJ0
dWFsIHZvaWQgYWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIoUmVwYWludENv
bnRhaW5lckhpdFRlc3RSZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqID0gMCwg
Y29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgeyB9OworCiAgICAgTGF5
b3V0UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KDApOwpAQCAtOTcwLDYgKzk4MSw4IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBpbmxpbmUgYm9vbCBsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1
YnRyZWUoKSBjb25zdDsKIAorICAgIHZvaWQgb2Zmc2V0RnJvbVJlcGFpbnRDb250YWluZXIoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCosIExheW91dFBvaW50JikgY29uc3Q7CisKICAgICAv
LyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xhc3MgYXQgdGhlIGVuZAogICAgIHZp
cnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogbmV3U3R5bGUpOwogICAgIC8vIE92ZXJyaWRlcyBzaG91bGQgY2FsbCB0aGUgc3VwZXJj
bGFzcyBhdCB0aGUgc3RhcnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2MiwyNSBAQCB2b2lkIFJlbmRl
clZpZXc6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50CiAgICAgfQogfQogCit2b2lkIFJlbmRlclZp
ZXc6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50Jikg
Y29uc3QKK3sKKyAgICBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJlcGFp
bnQoKTsKKyAgICBpZiAoIWN1cnJlbnRSZXBhaW50Q29udGFpbmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBJbnRSZWN0IGRvY3VtZW50UmVjdCA9IHVuc2NhbGVkRG9jdW1lbnRSZWN0KCk7Cisg
ICAgaWYgKGRvY3VtZW50UmVjdC53aWR0aCgpICYmIGRvY3VtZW50UmVjdC5oZWlnaHQoKSkgewor
ICAgICAgICBWZWN0b3I8SW50UmVjdD4gcmVzdWx0OworICAgICAgICByZXN1bHQuYXBwZW5kKGRv
Y3VtZW50UmVjdCk7CisKKyAgICAgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6aXRl
cmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZmluZChjdXJyZW50UmVw
YWludENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMuZW5kKCkpCisgICAgICAgICAgICByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3Rz
LmFkZChjdXJyZW50UmVwYWludENvbnRhaW5lciwgcmVzdWx0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaXRlci0+dmFsdWUgPSByZXN1bHQ7CisgICAgfQorfQorCiBib29sIFJlbmRlclZp
ZXc6OnJlcXVpcmVzQ29sdW1ucyhpbnQgZGVzaXJlZENvbHVtbkNvdW50KSBjb25zdAogewogICAg
IGlmIChtX2ZyYW1lVmlldykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQm
KSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVw
YWludENvbnRhaW5lcihSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBMYXlv
dXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIGVudW0gU2Vs
ZWN0aW9uUmVwYWludE1vZGUgeyBSZXBhaW50TmV3WE9ST2xkLCBSZXBhaW50TmV3TWludXNPbGQs
IFJlcGFpbnROb3RoaW5nIH07CiAgICAgdm9pZCBzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBz
dGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVuZFBvcywgU2VsZWN0
aW9uUmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKICAgICB2b2lkIGdldFNlbGVjdGlv
bihSZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBpbnQmIHN0YXJ0T2Zmc2V0LCBSZW5kZXJP
YmplY3QqJiBlbmRSZW5kZXJlciwgaW50JiBlbmRPZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAK
ICNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxl
ZEVsZW1lbnQuaCIKQEAgLTkxLDYgKzkyLDEyIEBAIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmFic29sdXRlUXVhZHMKICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJv
a2VCb3VuZGluZ0JveCgpLCAwIC8qIG1vZGUgKi8sIHdhc0ZpeGVkKSk7CiB9CiAKK3ZvaWQgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVy
KFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgcmVwYWludE9mZnNldCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogY2FsY3VsYXRlIHRoZSBtaW5pbWFsIHJlY3QuCisgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBv
cnQ6OmZpbmRUcmVlUm9vdE9iamVjdCh0aGlzKS0+YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFp
bnRDb250YWluZXIocmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cywgY3VycmVudFJlcGFpbnRD
b250YWluZXIsIHJlcGFpbnRPZmZzZXQpOworfQorCiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp3aWxsQmVEZXN0cm95ZWQoKQogewogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0
cm95ZWQodGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
LCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkSGl0VGVzdGlu
Z0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYs
IGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGN1cnJlbnRSZXBhaW50Q29udGFpbmVyID0g
MCwgY29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgT1ZFUlJJREU7CisK
ICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE1hcENvb3JkaW5h
dGVzRmxhZ3MgPSBBcHBseUNvbnRhaW5lckZsaXAgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3Jtcywg
Ym9vbCogd2FzRml4ZWQgPSAwKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IFJl
bmRlck9iamVjdCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBj
b25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5h
dG9yLmgiCiAjaW5jbHVkZSAiU2VsZWN0UnVsZUZlYXR1cmVTZXQuaCIKICNpbmNsdWRlICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMTE5MSw4ICsx
MTkyLDQxIEBAIHVuc2lnbmVkIEludGVybmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3UKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGRvY3VtZW50LT50b3VjaEV2ZW50SGFu
ZGxlckNvdW50KCk7CisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hIYW5kbGVy
cyA9IGRvY3VtZW50LT50b3VjaEV2ZW50VGFyZ2V0cygpOworICAgIGlmICghdG91Y2hIYW5kbGVy
cykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgZm9y
IChUb3VjaEV2ZW50VGFyZ2V0U2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdG91Y2hIYW5kbGVy
cy0+YmVnaW4oKTsgaXRlciAhPSB0b3VjaEhhbmRsZXJzLT5lbmQoKTsgKytpdGVyKQorICAgICAg
ICBjb3VudCArPSBpdGVyLT52YWx1ZTsKKyAgICByZXR1cm4gY291bnQ7Cit9CisKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCitQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBJbnRl
cm5hbHM6OnRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhEb2N1bWVudCogZG9jdW1lbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52aWV3
KCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIWRvY3VtZW50LT5wYWdlKCkt
PnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6
Y3JlYXRlKCk7CisKKyAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CisKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CisgICAgVmVjdG9yPEZsb2F0
UXVhZD4gcXVhZHM7CisKKyAgICBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIHJlcGFpbnRD
b250YWluZXJIaXRUZXN0UmVjdHMgPSBkb2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGlu
YXRvcigpLT5jb21wdXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhkb2N1
bWVudCk7CisKKyAgICBmb3IgKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmJlZ2luKCk7IGl0ZXIg
IT0gcmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBxdWFkcy5hcHBlbmQoaXRlci0+a2V5LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVh
ZChpdGVyLT52YWx1ZVtpXSksIFVzZVRyYW5zZm9ybXMgfCBBcHBseUNvbnRhaW5lckZsaXAgfCBT
bmFwT2Zmc2V0Rm9yVHJhbnNmb3JtcykpOworICAgIH0KKworICAgIHJldHVybiBDbGllbnRSZWN0
TGlzdDo6Y3JlYXRlKHF1YWRzKTsKIH0KKyNlbmRpZgogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBJ
bnRlcm5hbHM6Om5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgeCwgaW50IHks
IHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICB1bnNpZ25l
ZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGlu
ZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiAr
MTcwLDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudChE
b2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxl
ckNvdW50KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJMRShUT1VDSF9FVkVO
VF9UUkFDS0lORykKKyAgICBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiB0b3VjaEV2ZW50VGFy
Z2V0Q2xpZW50UmVjdHMoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKIAogICAg
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqLCBpbnQgeCwgaW50
IHksIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICAgICAg
dW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcsIGJvb2wgaWdub3Jl
Q2xpcHBpbmcsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxMzY5Njgp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEzNyw2ICsxMzcsOSBAQAogCiAgICAgdW5zaWduZWQgbG9uZyB3aGVlbEV2ZW50SGFuZGxl
ckNvdW50KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAg
dW5zaWduZWQgbG9uZyB0b3VjaEV2ZW50SGFuZGxlckNvdW50KGluIERvY3VtZW50IGRvY3VtZW50
KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisjaWYgZGVmaW5lZChFTkFCTEVfVE9VQ0hfRVZFTlRf
VFJBQ0tJTkcpICYmIEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORworICAgIENsaWVudFJlY3RM
aXN0IHRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFp
c2VzIChET01FeGNlcHRpb24pOworI2VuZGlmCiAKICAgICBOb2RlTGlzdCBub2Rlc0Zyb21SZWN0
KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBsb25nIHgsIGluIGxvbmcgeSwKICAgICAgICAgaW4g
dW5zaWduZWQgbG9uZyB0b3BQYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIHJpZ2h0UGFkZGluZywg
aW4gdW5zaWduZWQgbG9uZyBib3R0b21QYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIGxlZnRQYWRk
aW5nLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTItMTItMDcgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVz
IHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxpbmcgdG91Y2gg
ZXZlbnQgdGFyZ2V0IHJlZ2lvbiB0cmFja2luZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6
CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpyZXF1ZXN0VG91Y2hFdmVudFR5cGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVy
SW1wbCk6CisKIDIwMTItMTItMDcgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92ZSBXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSBv
dXQgb2YgUGxhdGZvcm1TdXBwb3J0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1
cmVzLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5n
eXBpCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVz
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQAogICAgICAgJ0VOQUJMRV9U
T1VDSF9BREpVU1RNRU5UPTEnLAogICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVOVFM9PChlbmFibGVf
dG91Y2hfZXZlbnRzKScsCiAgICAgICAnRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORz08KGVuYWJs
ZV90b3VjaF9pY29uX2xvYWRpbmcpJywKKyAgICAgICdFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJ
Tkc9PChlbmFibGVfdG91Y2hfZXZlbnRzKScsCiAgICAgICAnRU5BQkxFX1RPVUNIX1NMSURFUj0x
JywKICAgICAgICdFTkFCTEVfVVNFUl9USU1JTkc9MScsCiAgICAgICAnRU5BQkxFX1Y4X1NDUklQ
VF9ERUJVR19TRVJWRVI9MScsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
bHVnaW5Db250YWluZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzMCw5ICs1MzAsOSBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lcklt
cGw6OnJlcXVlc3RUb3VjCiAgICAgICAgIHJldHVybjsKICAgICBtX3RvdWNoRXZlbnRSZXF1ZXN0
VHlwZSA9IHJlcXVlc3RUeXBlOwogICAgIGlmIChtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSAhPSBU
b3VjaEV2ZW50UmVxdWVzdFR5cGVOb25lKQotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIobV9lbGVtZW50KTsKICAgICBlbHNlCi0gICAgICAg
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAg
ICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlciht
X2VsZW1lbnQpOwogfQogCiB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNldFdhbnRzV2hl
ZWxFdmVudHMoYm9vbCB3YW50c1doZWVsRXZlbnRzKQpAQCAtNjg1LDcgKzY4NSw3IEBAIFdlYlBs
dWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWkKICNlbmRpZgogCiAgICAgaWYgKG1f
dG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0gICAg
ICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsK
KyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxl
cihtX2VsZW1lbnQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsdWdpbkxvYWRP
YnNlcnZlcnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcGx1Z2luTG9hZE9ic2VydmVyc1tpXS0+
Y2xlYXJQbHVnaW5Db250YWluZXIoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEy
LTEyLTA3ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFz
dCBldmVudCByZWplY3Rpb24gaW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVu
dHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9y
LXRvdWNoLWhpdC1yZWN0cy5odG1sOiBBZGRlZC4KKwogMjAxMi0xMi0wNyAgSmFtZXMgU2ltb25z
ZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBFbmFibGUg
SW50ZWwncyBSZXNvdXJjZSBUaW1pbmcgdGVzdHMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9m
YXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50
cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjMgQEAKK1RoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJl
Z2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1w
UmVuZGVyVHJlZS4gVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhlIGhpdCB0ZXN0
IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuCisKK25vcm1hbEZsb3dbMF06ICg4
LCA3MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMF06ICg4LCAxMDIsIDc4NCwg
MTApCithYnNvbHV0ZUNoaWxkQ29udGFpbmVyWzFdOiAoMTE4LCAzMDAsIDE0MCwgMTApCityZWxh
dGl2ZUNoaWxkQ29udGFpbmVyWzBdOiAoOCwgMTUyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENv
bnRhaW5lclsxXTogKDgsIDE1MiwgMjYwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzBdOiAo
OCwgMjAyLCAxMDAsIDgwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMV06ICg4LCAyMDIsIDExMCwg
MTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclsyXTogKDgsIDIwMiwgNzg0LCAxMCkKK292ZXJoYW5n
aW5nQ29udGFpbmVyWzNdOiAoOCwgMjEyLCA1MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls0
XTogKDgsIDIyMiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzVdOiAoOCwgMjMyLCA1
MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lcls2XTogKDgsIDI0MiwgMTEwLCAxMCkKK292ZXJo
YW5naW5nQ29udGFpbmVyWzddOiAoOCwgMjUyLCA1MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5l
cls4XTogKDgsIDI2MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzldOiAoOCwgMjcy
LCA1MCwgMTApCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzBdOiAoNjIsIDQwMSwgNjYxLCAz
MikKK3RyYW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMV06ICg4LCA0MTIsIDc2OSwgMTApCitjb250
aW51YXRpb25bMF06ICgxMDgsIDQ2MiwgMTAwLCAxMCkKK2NvbnRpbnVhdGlvblsxXTogKDgsIDQ3
MiwgNzY5LCAxMCkKK2NvbnRpbnVhdGlvblsyXTogKDgsIDQ3MiwgNzY5LCAxMCkKKwpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRv
ci10b3VjaC1oaXQtcmVjdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9l
dmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHls
ZT4KKyN0cmFuc2Zvcm1lZENoaWxkIHsKKwktd2Via2l0LXRyYW5zZm9ybTogcm90YXRlM2QoMC4y
LCAxLCAwLCAzNWdyYWQpOworfQorI2Fic29sdXRlQ2hpbGQgeworCXBvc2l0aW9uOiBhYnNvbHV0
ZTsKKwl0b3A6IDMwMHB4OworfQorI3JlbGF0aXZlQ2hpbGQgeworCXBvc2l0aW9uOiByZWxhdGl2
ZTsKKwl0b3A6IDIwMHB4OworfQorI292ZXJoYW5naW5nQ29udGFpbmVyIHsKKwloZWlnaHQ6IDEw
cHg7Cit9Cisjb3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIHsKKwl3aWR0aDogMTAwcHg7CisJZmxv
YXQ6IGxlZnQ7Cit9CisjdGVzdHMgeworCWZvbnQ6IDEwcHggQWhlbTsKK30KKzwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0cyB2ZXJpZmllcyB0
aGUgaGl0IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkg
YmUgcnVuIGluIER1bXBSZW5kZXJUcmVlLgorVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292
ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuPC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InRlc3RzIj4KKwk8ZGl2IGlkPSJu
b3JtYWxGbG93Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4+c3VtPC9zcGFuPi4KKwk8L2Rpdj4K
Kwk8ZGl2IGlkPSJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNw
YW4gaWQ9ImFic29sdXRlQ2hpbGQiPkFic29sdXRlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxk
aXYgaWQ9InJlbGF0aXZlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBp
ZD0icmVsYXRpdmVDaGlsZCI+UmVsYXRpdmUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBp
ZD0ib3ZlcmhhbmdpbmdDb250YWluZXIiPgorCQk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0Zsb2F0aW5n
Q2hpbGQiPk92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZs
b2F0IG92ZXJoYW5naW5nIGZsb2F0PC9kaXY+CisJPC9kaXY+CisJPGRpdiBpZD0idHJhbnNmb3Jt
ZWRDaGlsZENvbnRhaW5lciI+CisJCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGQiPlRyYW5zZm9y
bWVkPC9kaXY+CisJPC9kaXY+CisJPGRpdj4KKwkJPGIgaWQ9ImNvbnRpbnVhdGlvbiI+VGhpcyBi
IHRhZworCQk8ZGl2PmNhdXNlcyBhPC9kaXY+CisJCWNvbnRpbnVhdGlvbjwvYj4KKwk8L2Rpdj4K
KzwvZGl2PgorPHNjcmlwdD4KK2lmICghd2luZG93LnRlc3RSdW5uZXIpCisJcmV0dXJuOworCit3
aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxpc3RlbmVyKCkgeyB9
CisKK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKwl2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENo
aWxkKHNwYW4pOworICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1
bmN0aW9uIHNvcnRSZWN0cyhhLCBiKSB7CisJcmV0dXJuIGEudG9wIC0gYi50b3A7Cit9CisKK2Z1
bmN0aW9uIGxvZ1JlY3RzKGlkKSB7CisJZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGlkKTsKKwllbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwg
ZmFsc2UpOworCXJlY3RzID0gd2luZG93LmludGVybmFscy50b3VjaEV2ZW50VGFyZ2V0Q2xpZW50
UmVjdHMoZG9jdW1lbnQpOworCXZhciBzb3J0ZWRSZWN0cyA9IG5ldyBBcnJheSgpOworCWZvciAo
dmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCXNvcnRlZFJlY3RzW2ldID0gcmVj
dHNbaV07CisJc29ydGVkUmVjdHMuc29ydChzb3J0UmVjdHMpOworCWZvciAodmFyIGkgPSAwOyBp
IDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCWxvZyhpZCArICJbIiArIGkgKyAiXTogKCIgKyBzb3J0
ZWRSZWN0c1tpXS5sZWZ0ICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLnRvcCArICIsICIgKyBzb3J0
ZWRSZWN0c1tpXS53aWR0aCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS5oZWlnaHQgKyAiKSIpOwor
CWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxz
ZSk7Cit9CisKK2xvZ1JlY3RzKCJub3JtYWxGbG93Iik7Citsb2dSZWN0cygiYWJzb2x1dGVDaGls
ZENvbnRhaW5lciIpOworbG9nUmVjdHMoInJlbGF0aXZlQ2hpbGRDb250YWluZXIiKTsKK2xvZ1Jl
Y3RzKCJvdmVyaGFuZ2luZ0NvbnRhaW5lciIpOworbG9nUmVjdHMoInRyYW5zZm9ybWVkQ2hpbGRD
b250YWluZXIiKTsKK2xvZ1JlY3RzKCJjb250aW51YXRpb24iKTsKKwordmFyIHRlc3RDb250YWlu
ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHMiKTsKK3Rlc3RDb250YWluZXIucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178281</attachid>
            <date>2012-12-07 14:41:05 -0800</date>
            <delta_ts>2012-12-10 10:02:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121207143829.patch</filename>
            <type>text/plain</type>
            <size>52128</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMi0wNyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuCisKKyAgICAgICAgVGhlIGhpdCB0ZXN0IHJlY3RzIGZvciBhbiBhcmJpdHJhcnkgUmVu
ZGVyT2JqZWN0IGNhbiBiZSBnZW5lcmF0ZWQgZWl0aGVyIGluIHRlcm1zIG9mIGFic29sdXRlIGNv
b3JkaW5hdGVzCisgICAgICAgIG9yIHRoZSBjb29yZGluYXRlcyBvZiBlYWNoIHJlbmRlcmVyJ3Mg
cmVwYWludCBjb250YWluZXIuIFRoaXMgYWxsb3dzIHBsYXRmb3JtcyB0aGF0IHNjcm9sbCBpbiB0
aGUKKyAgICAgICAgY29tcG9zaXRvciB0byBzY3JvbGwgdGhlc2UgcmVjdHMgYWxvbmcgd2l0aCB0
aGUgc2Nyb2xsaW5nIGxheWVyIHdpdGhvdXQgaGF2aW5nIHRvIHVwZGF0ZSB0aGVtLgorCisgICAg
ICAgIFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3It
dG91Y2gtaGl0LXJlY3RzLmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGFzVG91Y2hFdmVudEhhbmRsZXJzKToK
KyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0b3VjaEV2
ZW50VGFyZ2V0cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dHJ5QWRkRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjp0cnlSZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZEZyYW1lQmFzZTo6cmVzdG9yZSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUpOgor
ICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlbW92
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVs
YXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZVJlcGFpbnRDb250YWluZXJUb3VjaEV2
ZW50VGFyZ2V0UmVjdHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0VG91
Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRv
cik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVu
dFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVj
dHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRD
b250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAo
UmVuZGVyQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjphZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRh
aW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6CisgICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRIaXRUZXN0aW5nQm91
bmRzRm9yUmVwYWludENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChSZW5kZXJJbmxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kc0ZvckhpdFRlc3RpbmcpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVw
YWludENvbnRhaW5lckJvdW5kc0ZvckhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjphZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKFJl
bmRlclZpZXcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVh
ZHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFJlbmRl
clNWR01vZGVsT2JqZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRUYXJn
ZXRDbGllbnRSZWN0cyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAg
KEludGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDEyLTEy
LTA3ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNT
SU9OKHIxMjcxNjMpOiBDb250ZW50IGlzIG9mZnNldCB0byB0aGUgcmlnaHQgYXQgcmVhLnJ1Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw5ICs0OTYsNiBA
QCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAgICAgLCBtX3dyaXRl
UmVjdXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwgbV93cml0ZVJlY3Vyc2lvbkRlcHRoKDAp
CiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50KDApCi0jZW5kaWYKICAgICAsIG1f
cGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5nVGFza3NUaW1lckZpcmVk
KQogICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fdmlz
dWFsVXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTU1OTksMzMgKzU1OTYsNTcgQEAgdm9pZCBEb2N1
bWVudDo6ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZQogICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnRDaGFuZ2VkKHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFu
ZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKiBoYW5k
bGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgKyttX3RvdWNoRXZlbnRIYW5k
bGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCA+IDEpCisgICAgaWYg
KCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQorICAgICAgICBtX3RvdWNoRXZlbnRUYXJnZXRz
ID0gYWRvcHRQdHIobmV3IFRvdWNoRXZlbnRUYXJnZXRTZXQpOworICAgIG1fdG91Y2hFdmVudFRh
cmdldHMtPmFkZChoYW5kbGVyKTsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERv
Y3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlz
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKQot
ICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsK
KyAgICB9CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpIHsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0No
YW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNp
emUoKSA9PSAxKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91
Y2hFdmVudHModHJ1ZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7
CiAjZW5kaWYKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIo
KQordm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxl
cikKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIEFTU0VSVChtX3RvdWNoRXZlbnRI
YW5kbGVyQ291bnQpOwotICAgIC0tbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmICht
X3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdl
dCgpKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fdG91Y2hFdmVudFRhcmdldHMtPmNv
bnRhaW5zKGhhbmRsZXIpKTsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxl
cik7CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAg
ICAgIHBhcmVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykK
KyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFn
ZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICBpZiAo
bV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpKQorICAgICAgICByZXR1cm47CiAgICAgZm9yIChj
b25zdCBGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAg
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+aGFzVG91Y2hF
dmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKGZhbHNlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiw4IEBAIGVudW0gTm9kZUxpc3RJbnZhbGlkYXRpb25U
eXBlIHsKIH07CiBjb25zdCBpbnQgbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlcyA9IEludmFs
aWRhdGVPbkFueUF0dHJDaGFuZ2UgKyAxOwogCit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PE5vZGUq
PiBUb3VjaEV2ZW50VGFyZ2V0U2V0OworCiBjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDb250YWlu
ZXJOb2RlLCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSog
ZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKQEAgLTExMTUsMTMgKzExMTcsMTkgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKIAogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCi0gICAgdW5zaWduZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVu
dEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gKG1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpID8g
bV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFsc2U7IH0KICNlbHNlCi0gICAgdW5zaWdu
ZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBib29s
IGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
IAotICAgIHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICB2b2lkIGRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgdm9pZCBkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihO
b2RlKik7CisgICAgdm9pZCBkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRv
dWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQo
KTsgfQorI2Vsc2UKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFy
Z2V0cygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiAgICAgYm9vbCB2aXN1YWxVcGRh
dGVzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7IH0KIApA
QCAtMTQ5OSw3ICsxNTA3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1bnNpZ25lZCBtX3doZWVs
RXZlbnRIYW5kbGVyQ291bnQ7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNpZ25l
ZCBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7CisgICAgT3duUHRyPFRvdWNoRXZlbnRUYXJnZXRT
ZXQ+IG1fdG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1OSw4ICsy
MjU5LDggQEAgdm9pZCBOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudE5hbWVzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGdldEV2ZW50TGlzdGVu
ZXJzKHRvdWNoRXZlbnROYW1lc1tpXSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
bGlzdGVuZXJzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRv
dWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI4OSw3ICsyMjg5
LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeUFkZEV2ZW50TGlzdGVuZXIoTgogICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAo
ZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRv
Y3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQt
PmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpAQCAtMjMxMSw3ICsyMzExLDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeVJlbW92
ZUV2ZW50TGlzdGVuZQogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhh
bmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUo
ZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBDYWNoZWRGcmFtZUJhc2U6OnJlc3RvcmUoKQogICAgIG1fZG9jdW1lbnQt
PmVucXVldWVQb3BzdGF0ZUV2ZW50KGhpc3RvcnlJdGVtICYmIGhpc3RvcnlJdGVtLT5zdGF0ZU9i
amVjdCgpID8gaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgOiBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bGxWYWx1ZSgpKTsKICAgICAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlm
IChtX2RvY3VtZW50LT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgaWYgKG1fZG9jdW1l
bnQtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2
OTY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRF
bGVtZW50KCkKICAgICAgICAgZG9jdW1lbnQoKS0+Zm9ybUNvbnRyb2xsZXIoKS0+Y2hlY2tlZFJh
ZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1v
dmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICNlbmRpZgogfQogCkBAIC00ODksOSArNDg5LDkg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBib29sIGhhc1RvdWNo
RXZlbnRIYW5kbGVyID0gbV9pbnB1dFR5cGUtPmhhc1RvdWNoRXZlbnRIYW5kbGVyKCk7CiAgICAg
aWYgKGhhc1RvdWNoRXZlbnRIYW5kbGVyICE9IG1faGFzVG91Y2hFdmVudEhhbmRsZXIpIHsKICAg
ICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxlcikKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVu
dEhhbmRsZXIodGhpcyk7CiAgICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgbV9oYXNUb3VjaEV2ZW50SGFuZGxlciA9IGhhc1Rv
dWNoRXZlbnRIYW5kbGVyOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg0LDcgKzE1ODQsNyBAQCBib29sIERPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRX
aGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3Vj
aEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNo
RXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoZG9jdW1lbnQpOwogICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLnN0b3JhZ2VFdmVudCkKICAgICAgICAgICAgIGRpZEFkZFN0b3JhZ2VFdmVudExpc3RlbmVy
KHRoaXMpOwogICAgIH0KQEAgLTE2MTUsNyArMTYxNSw3IEBAIGJvb2wgRE9NV2luZG93OjpyZW1v
dmVFdmVudExpc3RlbmVyKGNvbnMKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVs
RXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZl
bnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcihkb2N1bWVudCk7CiAgICAgfQogCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MDQsNyArMzkwNCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBub2Rl
LT5kb2N1bWVudCgpOwogICAgICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQor
ICAgICAgICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRh
cmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5vZGUpOwpAQCAtMzkyNCw3ICszOTI0LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29ucwogICAgICAgICBEb2N1
bWVudCogZG9jID0gdG91Y2hUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICBp
ZiAoIWRvYykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvYy0+dG91Y2hF
dmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRs
ZXJzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1l
ID0gZG9jLT5mcmFtZSgpOwogICAgICAgICBpZiAoIXRhcmdldEZyYW1lKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBGcmFtZTo6c2V0
RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bQogICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWlu
RnJhbWUoKSA9PSB0aGlzKSB7CiAgICAgICAgIG5vdGlmeUNocm9tZUNsaWVudFdoZWVsRXZlbnRI
YW5kbGVyQ291bnRDaGFuZ2VkKCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAgICAg
aWYgKG1fZG9jICYmIG1fZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlm
IChtX2RvYyAmJiBtX2RvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBt
X3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlm
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5o
IgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTE4MSw2ICsxODIsNDUgQEAg
UmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRgogICAgIHJldHVybiBub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lO
RykKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVSZXBhaW50Q29udGFpbmVyVG91Y2hFdmVudFRhcmdl
dFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9jdW1l
bnQpOworICAgIGlmICghZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1bWVu
dC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5iZWdpbigpOyBpdGVyICE9IHRhcmdldHMtPmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPmtleSA9PSBkb2N1bWVudCkgeworICAg
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQor
ICAgICAgICAgICAgICAgIHZpZXctPnJlcGFpbnRDb250YWluZXJCb3VuZHNGb3JIaXRUZXN0aW5n
KHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGl0ZXItPmtleS0+aXNEb2N1bWVudE5vZGUoKSAmJiBpdGVy
LT5rZXkgIT0gZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVSZXBhaW50Q29udGFp
bmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oaXRlci0+a2V5KSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXRlci0+
a2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnRDb250YWluZXJC
b3VuZHNGb3JIaXRUZXN0aW5nKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMpOworICAgIH0K
K30KKyNlbmRpZgorCitSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjb21wdXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7Cisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIGlmICghZG9jdW1lbnQtPnZpZXco
KSkKKyAgICAgICAgcmV0dXJuIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7CisKKyAgICBh
Y2N1bXVsYXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhyZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzLCBkb2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVwYWlu
dENvbnRhaW5lckhpdFRlc3RSZWN0czsKK30KKwogdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWdu
ZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEz
Njk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTAsNiAr
NTEsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAogZW51bSBTY3JvbGxp
bmdOb2RlVHlwZSB7IFNjcm9sbGluZ05vZGUsIEZpeGVkTm9kZSB9OwogCitjbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsK
QEAgLTE0OSw3ICsxNTEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVB
cmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9u
TGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5
ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1l
bnQqKSB7IH0KIAorICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgY29tcHV0ZVJlcGFp
bnRDb250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgRG9jdW1lbnQqKTsKIHByb3Rl
Y3RlZDoKICAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAx
MzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCwy
MyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gYWxs
IHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBs
aXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKICAgICAvLyBmcmFtZSB2
aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAg
UmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworICAgIFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMgdG91Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVJlcGFpbnRD
b250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1l
bnQoKSk7CiAgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOworICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVj
dHMpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZl
bnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIC8v
IFdhaXQgdW50aWwgYWZ0ZXIgbGF5b3V0IHRvIHVwZGF0ZS4KKyAgICBpZiAobV9wYWdlLT5tYWlu
RnJhbWUoKS0+dmlldygpLT5uZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3Jl
IHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KKyAgICBzZXRTY3JvbGxMYXll
cihzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsK
KyAgICBpZiAobV9wcml2YXRlLT5zY3JvbGxMYXllcigpKSB7CisgICAgICAgIFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHMgdG91Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVJlcGFpbnRD
b250YWluZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1lbnQpOworICAgICAgICBzZXRUb3Vj
aEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdldFJlY3RzKTsKKyAgICB9CiB9CiAKIHZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hh
bmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtMjA5LDYgKzIyNSwyMCBAQCB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vCiAgICAgfQogfQogCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKQor
eworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuYmVnaW4oKTsgaXRlciAhPSByZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgV2ViVmVj
dG9yPFdlYlJlY3Q+IHdlYlJlY3RzKGl0ZXItPnZhbHVlLnNpemUoKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB3
ZWJSZWN0c1tpXSA9IGl0ZXItPnZhbHVlW2ldOworCisgICAgICAgIEFTU0VSVChpdGVyLT5rZXkt
PmxheWVyKCkpOworICAgICAgICBXZWJMYXllciogd2ViTGF5ZXIgPSBpdGVyLT5rZXktPmxheWVy
KCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAg
IEFTU0VSVCh3ZWJMYXllcik7CisgICAgICAgIHdlYkxheWVyLT5zZXRUb3VjaEV2ZW50SGFuZGxl
clJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhh
bmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3Jv
bGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZl
cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlz
aW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4
LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzY3Jv
bGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJl
YSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAgIHZp
cnR1YWwgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNvbnN0IERvY3VtZW50
KikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVs
RXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB2
b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRo
cmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGlj
c0xheWVyKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdp
b24mKTsKKyAgICB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzJik7CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KHVuc2lnbmVkKTsKICAgICBQYXNzT3duUHRyPFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXI+IGNy
ZWF0ZVNjcm9sbGJhckxheWVyKFNjcm9sbGJhciosIFdlYktpdDo6V2ViTGF5ZXIqIHNjcm9sbExh
eWVyLCBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZpZXcqKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lv
biAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTMwLDYgKzY5MzAsNTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkt
PmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9m
ZnNldCArIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxv
Y2F0aW9uKCkgLSBsb2NhdGlvbigpKSk7CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkZEhpdFRl
c3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29u
dGFpbmVyKSBjb25zdAoreworICAgIExheW91dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRh
aW5lciA9IG9mZnNldEZyb21Db250YWluZXI7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8
IGhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNv
bnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBh
aW50Q29udGFpbmVyLCBhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIH0KKworICAg
IFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7CisgICAgSW50UmVjdCBoaXRUZXN0UmVjdDsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaGl0VGVzdFJlY3QgPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciwgYm9yZGVyQm94UmVjdCgpLnNp
emUoKSk7CisjZWxzZQorICAgIGhpdFRlc3RSZWN0ID0gY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQocmVwYWludENvbnRhaW5lcik7CisgICAgYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVy
ID0gTGF5b3V0U2l6ZSgpOworI2VuZGlmCisgICAgaWYgKCFoaXRUZXN0UmVjdC5pc0VtcHR5KCkp
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaGl0VGVzdFJlY3QpOworCisgICAgaWYgKGhhc0hvcml6
b250YWxMYXlvdXRPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3coKSkgewor
ICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgdG9w
ID0gbWF4PExheW91dFVuaXQ+KGN1cnItPmxpbmVUb3AoKSwgY3Vyci0+dG9wKCkpOworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBtaW48TGF5b3V0VW5pdD4oY3Vyci0+bGluZUJvdHRv
bSgpLCBjdXJyLT50b3AoKSArIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFJl
Y3QgcmVjdChhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIueCgpICsgY3Vyci0+eCgpLCBhZGp1
c3RlZE9mZnNldEZyb21Db250YWluZXIueSgpICsgdG9wLCBjdXJyLT53aWR0aCgpLCBib3R0b20g
LSB0b3ApOworICAgICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHBpeGVsU25hcHBlZEludFJlY3QocmVjdCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNUZXh0
KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpICYmIGN1cnItPmlzQm94KCkpIHsKKyAgICAgICAg
ICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBib3gt
PmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJI
aXRUZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsICBhZGp1c3RlZE9mZnNldEZyb21Db250YWlu
ZXIgKyBib3gtPmxvY2F0aW9uT2Zmc2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFyZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHM6Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVw
YWludENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMuZW5kKCkpCisgICAgICAgICAgICBpdGVyID0gcmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0cy5hZGQocmVwYWludENvbnRhaW5lciwgcmVzdWx0KS5pdGVyYXRvcjsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7CisgICAgfQorfQor
CiBSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVB
cyhjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3QKIHsKICAgICBpZiAoaXNBbm9ueW1v
dXNDb2x1bW5zQmxvY2soKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUwNiw4IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25z
dCBMYXlvdXRQb2ludCYpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZEhpdFRlc3RpbmdCb3VuZHNG
b3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0
IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAjaWYgRU5B
QkxFKFNWRykKICAgICAvLyBPbmx5IHVzZWQgYnkgUmVuZGVyU1ZHVGV4dCwgd2hpY2ggZXhwbGlj
aXRlbHkgb3ZlcnJpZGVzIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jaygpLCBkbyBOT1QgdXNlIGZv
ciBhbnl0aGluZyBlbHNlLgogICAgIHZvaWQgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTM2OTY4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4MCw2ICs0ODAsMzMgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3Rz
KFZlY3RvcgogICAgICAgICByZWN0cy5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChhZGRpdGlv
bmFsT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAordm9pZCBSZW5kZXJCb3g6OmFkZEhpdFRlc3RpbmdC
b3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJl
cGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29udGFpbmVy
KSBjb25zdAoreworICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIExheW91dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciA9IG9mZnNl
dEZyb21Db250YWluZXI7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKKyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJl
cGFpbnQoKTsKKyAgICAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVy
LCBhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgSW50UmVjdCByZXN1bHQocGl4ZWxTbmFwcGVkSW50UmVjdChh
ZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIsIGJvcmRlckJveFJlY3QoKS5zaXplKCkpKTsKKyNl
bHNlCisgICAgSW50UmVjdCByZXN1bHQoY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVw
YWludENvbnRhaW5lcikpOworI2VuZGlmCisgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0
czo6aXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZmluZChyZXBh
aW50Q29udGFpbmVyKTsKKyAgICBpZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHRWZWN0b3I7CisgICAg
ICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmVwYWludENvbnRhaW5l
ckhpdFRlc3RSZWN0cy5hZGQocmVwYWludENvbnRhaW5lciwgcmVzdWx0VmVjdG9yKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7Cit9CisKKwogTGF5b3V0
UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3Rpb25Cb3goKSBjb25zdAogewogICAgIExheW91dFJlY3Qg
cmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24g
MTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcsNiArMTU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAv
KnJlcGFpbnRDb250YWluZXIqLywgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5n
Qm91bmRzRm9yUmVwYWludENvbnRhaW5lcihSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwg
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAw
LCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwog
ICAgIC8vIFVzZSB0aGlzIHdpdGggY2F1dGlvbiEgTm8gdHlwZSBjaGVja2luZyBpcyBkb25lIQog
ICAgIFJlbmRlckJveCogcHJldmlvdXNTaWJsaW5nQm94KCkgY29uc3Q7CiAgICAgUmVuZGVyQm94
KiBuZXh0U2libGluZ0JveCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI4LDYgKzE0Mjgs
NTAgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlYwogICAgIH0KIH0K
IAordm9pZCBSZW5kZXJJbmxpbmU6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFp
bmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29udGFpbmVyKSBjb25zdAoreworICAgIExheW91
dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciA9IG9mZnNldEZyb21Db250YWluZXI7
CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
KyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAg
ICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBv
ZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBhZGp1c3RlZE9mZnNl
dEZyb21Db250YWluZXIpOworICAgIH0KKworICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7Cisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIEZJWE1FOiBUaGlzIGNsYXNz
IG5hbWUgaXMgYSBtaXNub21lciwgYXMgdGhlc2UgcmVjdHMgYXJlIGluIG91ciByZXBhaW50IGNv
bnRhaW5lcidzIGNvb3JkaW5hdGUgc3BhY2UsCisgICAgLy8gbm90IGFic29sdXRlIGNvb3JkaW5h
dGVzLgorICAgIEFic29sdXRlUmVjdHNHZW5lcmF0b3JDb250ZXh0IGNvbnRleHQocmVzdWx0LCBh
ZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAgIGdlbmVyYXRlTGluZUJveFJlY3RzKGNv
bnRleHQpOworCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNU
ZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7CisgICAgICAgICAgICBMYXlvdXRQb2lu
dCBwb3MoYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyKTsKKyAgICAgICAgICAgIGlmIChjdXJy
LT5pc0JveCgpKQorICAgICAgICAgICAgICAgIHBvcy5tb3ZlKHRvUmVuZGVyQm94KGN1cnIpLT5s
b2NhdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGN1cnItPmFkZEhpdFRlc3RpbmdCb3VuZHNG
b3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRD
b250YWluZXIsIHBvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29udGludWF0aW9u
KCkpIHsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbigpLT5pc0lubGluZSgpKQorICAgICAgICAg
ICAgY29udGludWF0aW9uKCktPmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVy
KHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsIHRvUG9pbnQo
YWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdC
bG9jaygpLT5sb2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZEhpdFRlc3RpbmdCb3Vu
ZHNGb3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFp
bnRDb250YWluZXIsIHRvUG9pbnQoYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyICsgdG9SZW5k
ZXJCb3goY29udGludWF0aW9uKCkpLT5sb2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxv
Y2F0aW9uKCkpKTsKKyAgICB9CisjZWxzZQorICAgIHJlc3VsdC5hcHBlbmQoY2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcikpOworI2VuZGlmCisgICAgaWYgKCFy
ZXN1bHQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6
Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVwYWlu
dENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMuZW5kKCkpCisgICAgICAgICAgICByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmFk
ZChyZXBhaW50Q29udGFpbmVyLCByZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
dGVyLT52YWx1ZS5hcHBlbmQocmVzdWx0KTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVySW5saW5l
OjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoIWhhc091dGxpbmUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDEzNjk2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtODAsNiArODAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBw
YWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAg
IHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
Y3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQ
b2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb250aW51YXRpb247CiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRp
bnVhdGlvbjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDE4IEBAIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCogUmVuZGVyT2JqZWN0OjpyZW4KICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVj
dC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSA/IHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG9i
amVjdCkgOiAwOwogfQogCit2b2lkIFJlbmRlck9iamVjdDo6b2Zmc2V0RnJvbVJlcGFpbnRDb250
YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5
b3V0UG9pbnQmIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0
aGlzKQorICAgICAgICBvZmZzZXQgPSBMYXlvdXRQb2ludCgpOworICAgIGVsc2UgeworICAgICAg
ICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFu
c2Zvcm1EaXJlY3Rpb24sIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIG1hcExvY2FsVG9Db250YWlu
ZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIEFwcGx5Q29udGFpbmVyRmxpcCB8
IFVzZVRyYW5zZm9ybXMgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3Jtcyk7CisgICAgICAgIHRyYW5z
Zm9ybVN0YXRlLmZsYXR0ZW4oKTsKKyAgICAgICAgb2Zmc2V0ID0gTGF5b3V0UG9pbnQodHJhbnNm
b3JtU3RhdGUubGFzdFBsYW5hclBvaW50KCkpOworICAgIH0KK30KKwogUmVuZGVyQmxvY2sqIFJl
bmRlck9iamVjdDo6Zmlyc3RMaW5lQmxvY2soKSBjb25zdAogewogICAgIHJldHVybiAwOwpAQCAt
MjYzMiw2ICsyNjQ0LDE3IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBI
aXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJv
dW5kc0ZvckhpdFRlc3RpbmcoVmVjdG9yPEludFJlY3Q+JiBhYnNvbHV0ZVJlY3RzKSBjb25zdAor
eworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgcmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0czsKKyAgICByZXBhaW50Q29udGFpbmVyQm91bmRzRm9ySGl0VGVzdGluZyhyZXBhaW50
Q29udGFpbmVySGl0VGVzdFJlY3RzKTsKKworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRl
c3RSZWN0czo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVj
dHMuYmVnaW4oKTsgaXRlciAhPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIGFic29sdXRlUmVjdHMuYXBwZW5kKGl0ZXItPmtleS0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoaXRlci0+dmFsdWVbaV0pLCBVc2VUcmFuc2Zvcm1z
IHwgQXBwbHlDb250YWluZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpLmJvdW5kaW5n
Qm94KCkpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OnNjaGVkdWxlUmVsYXlvdXQo
KQogewogICAgIGlmIChpc1JlbmRlclZpZXcoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcg
QEAgc3RydWN0IEFubm90YXRlZFJlZ2lvblZhbHVlIHsKICNlbmRpZgogCiB0eXBlZGVmIFdURjo6
SGFzaFNldDxjb25zdCBSZW5kZXJPYmplY3QqPiBSZW5kZXJPYmplY3RBbmNlc3RvckxpbmVib3hE
aXJ0eVNldDsKLQordHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCosIFZlY3RvcjxJbnRSZWN0PiA+IFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7CiAj
aWZuZGVmIE5ERUJVRwogY29uc3QgaW50IHNob3dUcmVlQ2hhcmFjdGVyT2Zmc2V0ID0gMzk7CiAj
ZW5kaWYKQEAgLTk1Nyw2ICs5NTcsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYp
IHsgfTsKIAorICAgIHZvaWQgYWJzb2x1dGVCb3VuZHNGb3JIaXRUZXN0aW5nKFZlY3RvcjxJbnRS
ZWN0PiYpIGNvbnN0OworCisgICAgLy8gSGl0IHRlc3QgYm91bmRzIGluIHRoZSBjb29yZGluYXRl
IHNwYWNlIG9mIHRoZWlyIHJlcGFpbnQgY29udGFpbmVycworICAgIHZvaWQgcmVwYWludENvbnRh
aW5lckJvdW5kc0ZvckhpdFRlc3RpbmcoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVw
YWludENvbnRhaW5lckhpdFRlc3RSZWN0cykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVySGl0
VGVzdFJlY3RzKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgZGly
ZWN0bHksIGJ1dCBpbnN0ZWFkIHVzZXJzIHNob3VsZCBjYWxsIGFic29sdXRlQm91bmRzRm9ySGl0
VGVzdGluZyBvciByZXBhaW50Q29udGFpbmVyQm91bmRzRm9ySGl0VGVzdGluZy4KKyAgICB2aXJ0
dWFsIHZvaWQgYWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIoUmVwYWludENv
bnRhaW5lckhpdFRlc3RSZWN0cyYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqID0gMCwg
Y29uc3QgTGF5b3V0UG9pbnQmID0gTGF5b3V0UG9pbnQoKSkgY29uc3QgeyB9OworCiAgICAgTGF5
b3V0UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KDApOwpAQCAtOTcwLDYgKzk4MSw4IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBpbmxpbmUgYm9vbCBsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1
YnRyZWUoKSBjb25zdDsKIAorICAgIHZvaWQgb2Zmc2V0RnJvbVJlcGFpbnRDb250YWluZXIoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCosIExheW91dFBvaW50JikgY29uc3Q7CisKICAgICAv
LyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xhc3MgYXQgdGhlIGVuZAogICAgIHZp
cnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogbmV3U3R5bGUpOwogICAgIC8vIE92ZXJyaWRlcyBzaG91bGQgY2FsbCB0aGUgc3VwZXJj
bGFzcyBhdCB0aGUgc3RhcnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2MiwyNSBAQCB2b2lkIFJlbmRl
clZpZXc6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50CiAgICAgfQogfQogCit2b2lkIFJlbmRlclZp
ZXc6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50Jikg
Y29uc3QKK3sKKyAgICByZXBhaW50Q29udGFpbmVyID0gY29udGFpbmVyRm9yUmVwYWludCgpOwor
ICAgIGlmICghcmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVj
dCBkb2N1bWVudFJlY3QgPSB1bnNjYWxlZERvY3VtZW50UmVjdCgpOworICAgIGlmIChkb2N1bWVu
dFJlY3Qud2lkdGgoKSAmJiBkb2N1bWVudFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgVmVjdG9y
PEludFJlY3Q+IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFJlY3QpOwor
CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6Oml0ZXJhdG9yIGl0ZXIgPSBy
ZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVwYWludENvbnRhaW5lcik7CisgICAg
ICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZW5kKCkpCisgICAg
ICAgICAgICByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmFkZChyZXBhaW50Q29udGFpbmVy
LCByZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IHJlc3Vs
dDsKKyAgICB9Cit9CisKIGJvb2wgUmVuZGVyVmlldzo6cmVxdWlyZXNDb2x1bW5zKGludCBkZXNp
cmVkQ29sdW1uQ291bnQpIGNvbnN0CiB7CiAgICAgaWYgKG1fZnJhbWVWaWV3KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2
ICs4Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2
b2lkIGFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVw
YWludENvbnRhaW5lciA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNv
bnN0IE9WRVJSSURFOworCiAgICAgZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFpbnRO
ZXdYT1JPbGQsIFJlcGFpbnROZXdNaW51c09sZCwgUmVwYWludE5vdGhpbmcgfTsKICAgICB2b2lk
IHNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9i
amVjdCogZW5kLCBpbnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdY
T1JPbGQpOwogICAgIHZvaWQgZ2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVy
ZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQmIGVu
ZE9mZnNldCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxP
YmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR1Jvb3QuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNl
c0NhY2hlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgpAQCAtOTEsNiArOTIsMTIg
QEAgdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcwogICAgIHF1YWRzLmFw
cGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHN0cm9rZUJvdW5kaW5nQm94KCksIDAgLyogbW9kZSAq
Lywgd2FzRml4ZWQpKTsKIH0KIAordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkSGl0VGVz
dGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0
cyYgcmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cywgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiByZXBhaW50
T2Zmc2V0KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBjYWxjdWxhdGUgdGhlIG1pbmltYWwgcmVj
dC4KKyAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KHRoaXMp
LT5hZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVy
SGl0VGVzdFJlY3RzLCBjdXJyZW50UmVwYWludENvbnRhaW5lciwgcmVwYWludE9mZnNldCk7Cit9
CisKIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudERlc3Ryb3llZCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJl
dmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdDsKIAor
ICAgIHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihS
ZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlv
dXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRv
Q29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IFRyYW5zZm9ybVN0YXRlJiwgTWFwQ29vcmRpbmF0ZXNGbGFncyA9IEFwcGx5Q29udGFpbmVyRmxp
cCB8IFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zLCBib29sKiB3YXNGaXhlZCA9IDApIGNvbnN0IE9W
RVJSSURFOwogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29u
dGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJl
bmRlckdlb21ldHJ5TWFwJikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxl
V2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAxMzY5Njgp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5Lmgi
CisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWxlY3RSdWxl
RmVhdHVyZVNldC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCkBAIC0xMTkxLDggKzExOTIsNDEgQEAgdW5zaWduZWQgSW50ZXJuYWxz
Ojp0b3VjaEV2ZW50SGFuZGxlckNvdQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZG9jdW1lbnQtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICBjb25zdCBUb3Vj
aEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEhhbmRsZXJzID0gZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJn
ZXRzKCk7CisgICAgaWYgKCF0b3VjaEhhbmRsZXJzKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSB0b3VjaEhhbmRsZXJzLT5iZWdpbigpOyBpdGVyICE9IHRvdWNoSGFu
ZGxlcnMtPmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGNvdW50ICs9IGl0ZXItPnZhbHVlOworICAg
IHJldHVybiBjb3VudDsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKK1Bh
c3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEludGVybmFsczo6dG91Y2hFdmVudFRhcmdldENsaWVu
dFJlY3RzKERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYg
KCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkgewor
ICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIGlmICghZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAg
ICAgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0OjpjcmVhdGUoKTsKKworICAgIGRvY3VtZW50LT51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKworICAgIFZlY3RvcjxJbnRS
ZWN0PiByZWN0czsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKworICAgIFJlcGFpbnRD
b250YWluZXJIaXRUZXN0UmVjdHMgcmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyA9IGRvY3Vt
ZW50LT5wYWdlKCktPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCktPmNvbXB1dGVSZXBhaW50Q29udGFp
bmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50KTsKKworICAgIGZvciAoUmVwYWludENv
bnRhaW5lckhpdFRlc3RSZWN0czo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHMuYmVnaW4oKTsgaXRlciAhPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVy
LT52YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHF1YWRzLmFwcGVuZChpdGVyLT5rZXkt
PmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKGl0ZXItPnZhbHVlW2ldKSwgVXNlVHJhbnNm
b3JtcyB8IEFwcGx5Q29udGFpbmVyRmxpcCB8IFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0OjpjcmVhdGUocXVhZHMpOwogfQorI2Vu
ZGlmCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEludGVybmFsczo6bm9kZXNGcm9tUmVjdChEb2N1
bWVudCogZG9jdW1lbnQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWdu
ZWQgcmlnaHRQYWRkaW5nLAogICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxl
ZnRQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw2ICsxNzAsOSBAQCBwdWJsaWM6CiAKICAgICB1bnNp
Z25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoRG9jdW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIFBhc3NSZWZQdHI8
Q2xpZW50UmVjdExpc3Q+IHRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhEb2N1bWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXNG
cm9tUmVjdChEb2N1bWVudCosIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5z
aWduZWQgcmlnaHRQYWRkaW5nLAogICAgICAgICB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNp
Z25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCBhbGxvd1NoYWRvd0Nv
bnRlbnQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNyw5IEBACiAKICAgICB1
bnNpZ25lZCBsb25nIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICB1bnNpZ25lZCBsb25nIHRvdWNoRXZlbnRIYW5k
bGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNp
ZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORykgJiYgRU5BQkxFX1RPVUNIX0VW
RU5UX1RSQUNLSU5HCisgICAgQ2xpZW50UmVjdExpc3QgdG91Y2hFdmVudFRhcmdldENsaWVudFJl
Y3RzKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisjZW5kaWYK
IAogICAgIE5vZGVMaXN0IG5vZGVzRnJvbVJlY3QoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGxv
bmcgeCwgaW4gbG9uZyB5LAogICAgICAgICBpbiB1bnNpZ25lZCBsb25nIHRvcFBhZGRpbmcsIGlu
IHVuc2lnbmVkIGxvbmcgcmlnaHRQYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIGJvdHRvbVBhZGRp
bmcsIGluIHVuc2lnbmVkIGxvbmcgbGVmdFBhZGRpbmcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMi0wNyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFbmFibGluZyB0b3VjaCBldmVudCB0YXJnZXQgcmVnaW9uIHRyYWNraW5n
LgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29u
dGFpbmVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6
OnJlcXVlc3RUb3VjaEV2ZW50VHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRh
aW5lckltcGw6On5XZWJQbHVnaW5Db250YWluZXJJbXBsKToKKwogMjAxMi0xMi0wNyAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBNb3Zl
IFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlIG91dCBvZiBQbGF0Zm9ybVN1cHBvcnQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDYgKzExNyw3IEBACiAgICAgICAnRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MScsCiAgICAgICAn
RU5BQkxFX1RPVUNIX0VWRU5UUz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFC
TEVfVE9VQ0hfSUNPTl9MT0FESU5HPTwoZW5hYmxlX3RvdWNoX2ljb25fbG9hZGluZyknLAorICAg
ICAgJ0VOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywK
ICAgICAgICdFTkFCTEVfVE9VQ0hfU0xJREVSPTEnLAogICAgICAgJ0VOQUJMRV9VU0VSX1RJTUlO
Rz0xJywKICAgICAgICdFTkFCTEVfVjhfU0NSSVBUX0RFQlVHX1NFUlZFUj0xJywKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDkgKzUzMCw5
IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRvdWMKICAgICAgICAgcmV0
dXJuOwogICAgIG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7CiAgICAgaWYg
KG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0g
ICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsK
KyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlciht
X2VsZW1lbnQpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRS
ZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViUGx1
Z2luQ29udGFpbmVySW1wbDo6c2V0V2FudHNXaGVlbEV2ZW50cyhib29sIHdhbnRzV2hlZWxFdmVu
dHMpCkBAIC02ODUsNyArNjg1LDcgQEAgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBsdWdp
bkNvbnRhaQogI2VuZGlmCiAKICAgICBpZiAobV90b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0gVG91
Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcGx1Z2luTG9hZE9ic2VydmVycy5zaXplKCk7ICsraSkKICAgICAg
ICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzW2ldLT5jbGVhclBsdWdpbkNvbnRhaW5lcigpOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTM2OTY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTItMDcgIExldmkgV2VpbnRyYXViICA8bGV2
aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQg
dGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29t
cG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhp
dC1yZWN0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWw6IEFkZGVk
LgorCiAyMDEyLTEyLTA3ICBKYW1lcyBTaW1vbnNlbiAgPHNpbW9uamFtQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbQ2hyb21pdW1dIEVuYWJsZSBJbnRlbCdzIFJlc291cmNlIFRpbWluZyB0ZXN0
cwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gv
Y29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3It
dG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0
LXJlY3RzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorVGhpcyB0
ZXN0cyB2ZXJpZmllcyB0aGUgaGl0IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRv
ci4gSXQgY2FuIG9ubHkgYmUgcnVuIGluIER1bXBSZW5kZXJUcmVlLiBUaGUgb3V0cHV0dGVkIHJl
Y3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRlc3QgcmVnaW9ucyBvZiBhbGwgdGhlIGxpc3RlZCBl
bGVtZW50cy4KKworbm9ybWFsRmxvd1swXTogKDgsIDcyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGls
ZENvbnRhaW5lclswXTogKDgsIDEwMiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJb
MV06ICgxMTgsIDMwMCwgMTQwLCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMF06ICg4LCAx
NTIsIDc4NCwgMTApCityZWxhdGl2ZUNoaWxkQ29udGFpbmVyWzFdOiAoOCwgMTUyLCAyNjAsIDEw
KQorb3ZlcmhhbmdpbmdDb250YWluZXJbMF06ICg4LCAyMDIsIDEwMCwgODApCitvdmVyaGFuZ2lu
Z0NvbnRhaW5lclsxXTogKDgsIDIwMiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzJd
OiAoOCwgMjAyLCA3ODQsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbM106ICg4LCAyMTIsIDUw
LCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzRdOiAoOCwgMjIyLCAxMTAsIDEwKQorb3Zlcmhh
bmdpbmdDb250YWluZXJbNV06ICg4LCAyMzIsIDUwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVy
WzZdOiAoOCwgMjQyLCAxMTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbN106ICg4LCAyNTIs
IDUwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzhdOiAoOCwgMjYyLCAxMTAsIDEwKQorb3Zl
cmhhbmdpbmdDb250YWluZXJbOV06ICg4LCAyNzIsIDUwLCAxMCkKK3RyYW5zZm9ybWVkQ2hpbGRD
b250YWluZXJbMF06ICg2MiwgNDAxLCA2NjEsIDMyKQordHJhbnNmb3JtZWRDaGlsZENvbnRhaW5l
clsxXTogKDgsIDQxMiwgNzY5LCAxMCkKK2NvbnRpbnVhdGlvblswXTogKDEwOCwgNDYyLCAxMDAs
IDEwKQorY29udGludWF0aW9uWzFdOiAoOCwgNDcyLCA3NjksIDEwKQorY29udGludWF0aW9uWzJd
OiAoOCwgNDcyLCA3NjksIDEwKQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNo
L2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNo
LWhpdC1yZWN0cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3RyYW5zZm9ybWVkQ2hpbGQgeworCS13
ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUzZCgwLjIsIDEsIDAsIDM1Z3JhZCk7Cit9CisjYWJzb2x1
dGVDaGlsZCB7CisJcG9zaXRpb246IGFic29sdXRlOworCXRvcDogMzAwcHg7Cit9CisjcmVsYXRp
dmVDaGlsZCB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCXRvcDogMjAwcHg7Cit9Cisjb3Zlcmhh
bmdpbmdDb250YWluZXIgeworCWhlaWdodDogMTBweDsKK30KKyNvdmVyaGFuZ2luZ0Zsb2F0aW5n
Q2hpbGQgeworCXdpZHRoOiAxMDBweDsKKwlmbG9hdDogbGVmdDsKK30KKyN0ZXN0cyB7CisJZm9u
dDogMTBweCBBaGVtOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj5UaGlzIHRlc3RzIHZlcmlmaWVzIHRoZSBoaXQgdGVzdCByZWdpb25zIGdpdmVuIHRv
IHRoZSBjb21wb3NpdG9yLiBJdCBjYW4gb25seSBiZSBydW4gaW4gRHVtcFJlbmRlclRyZWUuCitU
aGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRlc3QgcmVnaW9ucyBvZiBh
bGwgdGhlIGxpc3RlZCBlbGVtZW50cy48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PGRpdiBpZD0idGVzdHMiPgorCTxkaXYgaWQ9Im5vcm1hbEZsb3ciPgorCQlMb3JlbSBpcHN1bQor
CQk8c3Bhbj5zdW08L3NwYW4+LgorCTwvZGl2PgorCTxkaXYgaWQ9ImFic29sdXRlQ2hpbGRDb250
YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0iYWJzb2x1dGVDaGlsZCI+QWJzb2x1
dGUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0icmVsYXRpdmVDaGlsZENvbnRhaW5l
ciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlkPSJyZWxhdGl2ZUNoaWxkIj5SZWxhdGl2ZSBj
aGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0NvbnRhaW5lciI+CisJ
CTxkaXYgaWQ9Im92ZXJoYW5naW5nRmxvYXRpbmdDaGlsZCI+T3ZlcmhhbmdpbmcgZmxvYXQgb3Zl
cmhhbmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQ8L2Rpdj4K
Kwk8L2Rpdj4KKwk8ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyIj4KKwkJPGRpdiBp
ZD0idHJhbnNmb3JtZWRDaGlsZCI+VHJhbnNmb3JtZWQ8L2Rpdj4KKwk8L2Rpdj4KKwk8ZGl2Pgor
CQk8YiBpZD0iY29udGludWF0aW9uIj5UaGlzIGIgdGFnCisJCTxkaXY+Y2F1c2VzIGE8L2Rpdj4K
KwkJY29udGludWF0aW9uPC9iPgorCTwvZGl2PgorPC9kaXY+Cis8c2NyaXB0PgoraWYgKCF3aW5k
b3cudGVzdFJ1bm5lcikKKwlyZXR1cm47CisKK3dpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKworZnVuY3Rpb24gbGlzdGVuZXIoKSB7IH0KKworZnVuY3Rpb24gbG9nKG1zZykgeworCXZh
ciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCWRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7CisgICAgc3Bhbi5pbm5lckhU
TUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24gc29ydFJlY3RzKGEsIGIpIHsKKwly
ZXR1cm4gYS50b3AgLSBiLnRvcDsKK30KKworZnVuY3Rpb24gbG9nUmVjdHMoaWQpIHsKKwllbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCWVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7CisJcmVjdHMgPSB3aW5kb3cuaW50
ZXJuYWxzLnRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhkb2N1bWVudCk7CisJdmFyIHNvcnRl
ZFJlY3RzID0gbmV3IEFycmF5KCk7CisJZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7
ICsraSkKKwkJc29ydGVkUmVjdHNbaV0gPSByZWN0c1tpXTsKKwlzb3J0ZWRSZWN0cy5zb3J0KHNv
cnRSZWN0cyk7CisJZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7ICsraSkKKwkJbG9n
KGlkICsgIlsiICsgaSArICJdOiAoIiArIHNvcnRlZFJlY3RzW2ldLmxlZnQgKyAiLCAiICsgc29y
dGVkUmVjdHNbaV0udG9wICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLndpZHRoICsgIiwgIiArIHNv
cnRlZFJlY3RzW2ldLmhlaWdodCArICIpIik7CisJZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVy
KCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNlKTsKK30KKworbG9nUmVjdHMoIm5vcm1hbEZs
b3ciKTsKK2xvZ1JlY3RzKCJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygicmVs
YXRpdmVDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoIm92ZXJoYW5naW5nQ29udGFpbmVyIik7
Citsb2dSZWN0cygidHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoImNvbnRp
bnVhdGlvbiIpOworCit2YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0cyIpOwordGVzdENvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRlc3RDb250
YWluZXIpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178580</attachid>
            <date>2012-12-10 10:02:14 -0800</date>
            <delta_ts>2012-12-11 14:19:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121210095936.patch</filename>
            <type>text/plain</type>
            <size>52164</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMi0wNyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuCisKKyAgICAgICAgVGhlIGhpdCB0ZXN0IHJlY3RzIGZvciBhbiBhcmJpdHJhcnkgUmVu
ZGVyT2JqZWN0IGNhbiBiZSBnZW5lcmF0ZWQgZWl0aGVyIGluIHRlcm1zIG9mIGFic29sdXRlIGNv
b3JkaW5hdGVzCisgICAgICAgIG9yIHRoZSBjb29yZGluYXRlcyBvZiBlYWNoIHJlbmRlcmVyJ3Mg
cmVwYWludCBjb250YWluZXIuIFRoaXMgYWxsb3dzIHBsYXRmb3JtcyB0aGF0IHNjcm9sbCBpbiB0
aGUKKyAgICAgICAgY29tcG9zaXRvciB0byBzY3JvbGwgdGhlc2UgcmVjdHMgYWxvbmcgd2l0aCB0
aGUgc2Nyb2xsaW5nIGxheWVyIHdpdGhvdXQgaGF2aW5nIHRvIHVwZGF0ZSB0aGVtLgorCisgICAg
ICAgIFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3It
dG91Y2gtaGl0LXJlY3RzLmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGFzVG91Y2hFdmVudEhhbmRsZXJzKToK
KyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0b3VjaEV2
ZW50VGFyZ2V0cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dHJ5QWRkRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjp0cnlSZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZEZyYW1lQmFzZTo6cmVzdG9yZSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUpOgor
ICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlbW92
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjphY2N1bXVs
YXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZVJlcGFpbnRDb250YWluZXJUb3VjaEV2
ZW50VGFyZ2V0UmVjdHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0VG91
Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRv
cik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVu
dFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVj
dHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRD
b250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAo
UmVuZGVyQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjphZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRh
aW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6CisgICAgICAgIChSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRIaXRUZXN0aW5nQm91
bmRzRm9yUmVwYWludENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChSZW5kZXJJbmxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kc0ZvckhpdFRlc3RpbmcpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVw
YWludENvbnRhaW5lckJvdW5kc0ZvckhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjphZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKFJl
bmRlclZpZXcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVh
ZHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFJlbmRl
clNWR01vZGVsT2JqZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRUYXJn
ZXRDbGllbnRSZWN0cyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAg
KEludGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDEyLTEy
LTA3ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNT
SU9OKHIxMjcxNjMpOiBDb250ZW50IGlzIG9mZnNldCB0byB0aGUgcmlnaHQgYXQgcmVhLnJ1Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw5ICs0OTYsNiBA
QCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAgICAgLCBtX3dyaXRl
UmVjdXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwgbV93cml0ZVJlY3Vyc2lvbkRlcHRoKDAp
CiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50KDApCi0jZW5kaWYKICAgICAsIG1f
cGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5nVGFza3NUaW1lckZpcmVk
KQogICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fdmlz
dWFsVXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTU1OTksMzMgKzU1OTYsNTcgQEAgdm9pZCBEb2N1
bWVudDo6ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZQogICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnRDaGFuZ2VkKHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFu
ZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKiBoYW5k
bGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgKyttX3RvdWNoRXZlbnRIYW5k
bGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCA+IDEpCisgICAgaWYg
KCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQorICAgICAgICBtX3RvdWNoRXZlbnRUYXJnZXRz
ID0gYWRvcHRQdHIobmV3IFRvdWNoRXZlbnRUYXJnZXRTZXQpOworICAgIG1fdG91Y2hFdmVudFRh
cmdldHMtPmFkZChoYW5kbGVyKTsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERv
Y3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlz
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKQot
ICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsK
KyAgICB9CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpIHsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0No
YW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNp
emUoKSA9PSAxKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91
Y2hFdmVudHModHJ1ZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7
CiAjZW5kaWYKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIo
KQordm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxl
cikKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIEFTU0VSVChtX3RvdWNoRXZlbnRI
YW5kbGVyQ291bnQpOwotICAgIC0tbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmICht
X3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdl
dCgpKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fdG91Y2hFdmVudFRhcmdldHMtPmNv
bnRhaW5zKGhhbmRsZXIpKTsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxl
cik7CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAg
ICAgIHBhcmVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykK
KyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFn
ZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQodGhpcyk7CisjZW5kaWYKKyAgICBpZiAo
bV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpKQorICAgICAgICByZXR1cm47CiAgICAgZm9yIChj
b25zdCBGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAg
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+aGFzVG91Y2hF
dmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKGZhbHNlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjA2LDYgKzIwNiw4IEBAIGVudW0gTm9kZUxpc3RJbnZhbGlkYXRpb25U
eXBlIHsKIH07CiBjb25zdCBpbnQgbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlcyA9IEludmFs
aWRhdGVPbkFueUF0dHJDaGFuZ2UgKyAxOwogCit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PE5vZGUq
PiBUb3VjaEV2ZW50VGFyZ2V0U2V0OworCiBjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDb250YWlu
ZXJOb2RlLCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSog
ZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKQEAgLTExMTUsMTMgKzExMTcsMTkgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKIAogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCi0gICAgdW5zaWduZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVu
dEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gKG1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpID8g
bV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFsc2U7IH0KICNlbHNlCi0gICAgdW5zaWdu
ZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBib29s
IGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
IAotICAgIHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICB2b2lkIGRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgdm9pZCBkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihO
b2RlKik7CisgICAgdm9pZCBkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRv
dWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQo
KTsgfQorI2Vsc2UKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFy
Z2V0cygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiAgICAgYm9vbCB2aXN1YWxVcGRh
dGVzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7IH0KIApA
QCAtMTQ5OSw3ICsxNTA3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1bnNpZ25lZCBtX3doZWVs
RXZlbnRIYW5kbGVyQ291bnQ7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNpZ25l
ZCBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7CisgICAgT3duUHRyPFRvdWNoRXZlbnRUYXJnZXRT
ZXQ+IG1fdG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1OSw4ICsy
MjU5LDggQEAgdm9pZCBOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudE5hbWVzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGdldEV2ZW50TGlzdGVu
ZXJzKHRvdWNoRXZlbnROYW1lc1tpXSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
bGlzdGVuZXJzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRv
dWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI4OSw3ICsyMjg5
LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeUFkZEV2ZW50TGlzdGVuZXIoTgogICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAo
ZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRv
Y3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQt
PmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpAQCAtMjMxMSw3ICsyMzExLDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeVJlbW92
ZUV2ZW50TGlzdGVuZQogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhh
bmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUo
ZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBDYWNoZWRGcmFtZUJhc2U6OnJlc3RvcmUoKQogICAgIG1fZG9jdW1lbnQt
PmVucXVldWVQb3BzdGF0ZUV2ZW50KGhpc3RvcnlJdGVtICYmIGhpc3RvcnlJdGVtLT5zdGF0ZU9i
amVjdCgpID8gaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgOiBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bGxWYWx1ZSgpKTsKICAgICAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlm
IChtX2RvY3VtZW50LT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgaWYgKG1fZG9jdW1l
bnQtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2
OTY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRF
bGVtZW50KCkKICAgICAgICAgZG9jdW1lbnQoKS0+Zm9ybUNvbnRyb2xsZXIoKS0+Y2hlY2tlZFJh
ZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1v
dmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICNlbmRpZgogfQogCkBAIC00ODksOSArNDg5LDkg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBib29sIGhhc1RvdWNo
RXZlbnRIYW5kbGVyID0gbV9pbnB1dFR5cGUtPmhhc1RvdWNoRXZlbnRIYW5kbGVyKCk7CiAgICAg
aWYgKGhhc1RvdWNoRXZlbnRIYW5kbGVyICE9IG1faGFzVG91Y2hFdmVudEhhbmRsZXIpIHsKICAg
ICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxlcikKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVu
dEhhbmRsZXIodGhpcyk7CiAgICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgbV9oYXNUb3VjaEV2ZW50SGFuZGxlciA9IGhhc1Rv
dWNoRXZlbnRIYW5kbGVyOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg0LDcgKzE1ODQsNyBAQCBib29sIERPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRX
aGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3Vj
aEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNo
RXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoZG9jdW1lbnQpOwogICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLnN0b3JhZ2VFdmVudCkKICAgICAgICAgICAgIGRpZEFkZFN0b3JhZ2VFdmVudExpc3RlbmVy
KHRoaXMpOwogICAgIH0KQEAgLTE2MTUsNyArMTYxNSw3IEBAIGJvb2wgRE9NV2luZG93OjpyZW1v
dmVFdmVudExpc3RlbmVyKGNvbnMKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVs
RXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZl
bnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcihkb2N1bWVudCk7CiAgICAgfQogCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MDQsNyArMzkwNCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBub2Rl
LT5kb2N1bWVudCgpOwogICAgICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQor
ICAgICAgICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRh
cmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5vZGUpOwpAQCAtMzkyNCw3ICszOTI0LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29ucwogICAgICAgICBEb2N1
bWVudCogZG9jID0gdG91Y2hUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICBp
ZiAoIWRvYykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvYy0+dG91Y2hF
dmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRs
ZXJzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1l
ID0gZG9jLT5mcmFtZSgpOwogICAgICAgICBpZiAoIXRhcmdldEZyYW1lKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBGcmFtZTo6c2V0
RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bQogICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWlu
RnJhbWUoKSA9PSB0aGlzKSB7CiAgICAgICAgIG5vdGlmeUNocm9tZUNsaWVudFdoZWVsRXZlbnRI
YW5kbGVyQ291bnRDaGFuZ2VkKCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAgICAg
aWYgKG1fZG9jICYmIG1fZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlm
IChtX2RvYyAmJiBtX2RvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBt
X3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlm
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5o
IgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTE4MSw2ICsxODIsNDcgQEAg
UmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRgogICAgIHJldHVybiBub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lO
RykKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVSZXBhaW50Q29udGFpbmVyVG91Y2hFdmVudFRhcmdl
dFJlY3RzKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9jdW1l
bnQpOworICAgIGlmICghZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1bWVu
dC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5iZWdpbigpOyBpdGVyICE9IHRhcmdldHMtPmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPmtleSA9PSBkb2N1bWVudCkgeworICAg
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQor
ICAgICAgICAgICAgICAgIHZpZXctPnJlcGFpbnRDb250YWluZXJCb3VuZHNGb3JIaXRUZXN0aW5n
KHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGl0ZXItPmtleS0+aXNEb2N1bWVudE5vZGUoKSAmJiBpdGVy
LT5rZXkgIT0gZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVSZXBhaW50Q29udGFp
bmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oaXRlci0+a2V5KSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXRlci0+
a2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnRDb250YWluZXJC
b3VuZHNGb3JIaXRUZXN0aW5nKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMpOworICAgIH0K
K30KKyNlbmRpZgorCitSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjb21wdXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBSZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7Cisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIGlmICghZG9jdW1lbnQtPnZpZXco
KSkKKyAgICAgICAgcmV0dXJuIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7CisKKyAgICBh
Y2N1bXVsYXRlUmVwYWludENvbnRhaW5lclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhyZXBhaW50Q29u
dGFpbmVySGl0VGVzdFJlY3RzLCBkb2N1bWVudCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShk
b2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0
czsKK30KKwogdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hl
ZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJD
b3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0
UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTAsNiArNTEsNyBAQCB0eXBlZGVmIHVpbnQ2
NF90IFNjcm9sbGluZ05vZGVJRDsKIAogZW51bSBTY3JvbGxpbmdOb2RlVHlwZSB7IFNjcm9sbGlu
Z05vZGUsIEZpeGVkTm9kZSB9OwogCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwogY2xh
c3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsKQEAgLTE0OSw3ICsxNTEsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFu
Z2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIq
LCBib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJM
YXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRvdWNo
RXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQoY29uc3QgRG9jdW1lbnQqKSB7IH0KIAorICAgIFJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHMgY29tcHV0ZVJlcGFpbnRDb250YWluZXJUb3VjaEV2ZW50
VGFyZ2V0UmVjdHMoY29uc3QgRG9jdW1lbnQqKTsKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBT
Y3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCwyMyBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1
Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRv
IGRvIHRoaXMgZXZlbiBpZiB0aGUKICAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMg
dXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZy
YW1lKCksIEludFBvaW50KCkpOworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgdG91
Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVJlcGFpbnRDb250YWluZXJUb3VjaEV2ZW50VGFy
Z2V0UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAgICAgc2V0Tm9uRmFz
dFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOworICAgIHNldFRvdWNo
RXZlbnRUYXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOworfQorCit2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIC8vIFdhaXQgdW50aWwgYWZ0ZXIgbGF5
b3V0IHRvIHVwZGF0ZS4KKyAgICBpZiAobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5uZWVk
c0xheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSB3b24ndCBuZWNlc3Nhcmls
eSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRo
ZSByb290IG91cnNlbHZlcy4KKyAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1l
VmlldyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsKKyAgICBpZiAobV9wcml2YXRlLT5z
Y3JvbGxMYXllcigpKSB7CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMgdG91
Y2hFdmVudFRhcmdldFJlY3RzID0gY29tcHV0ZVJlcGFpbnRDb250YWluZXJUb3VjaEV2ZW50VGFy
Z2V0UmVjdHMoZG9jdW1lbnQpOworICAgICAgICBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHModG91
Y2hFdmVudFRhcmdldFJlY3RzKTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bTo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVW
aWV3KQpAQCAtMjA5LDYgKzIyNSwyMCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW06OnNldE5vCiAgICAgfQogfQogCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06
OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzJiByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKQoreworICAgIGZvciAoUmVwYWludENv
bnRhaW5lckhpdFRlc3RSZWN0czo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHMuYmVnaW4oKTsgaXRlciAhPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgV2ViVmVjdG9yPFdlYlJlY3Q+IHdlYlJlY3Rz
KGl0ZXItPnZhbHVlLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRl
ci0+dmFsdWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB3ZWJSZWN0c1tpXSA9IGl0ZXItPnZh
bHVlW2ldOworCisgICAgICAgIEFTU0VSVChpdGVyLT5rZXktPmxheWVyKCkpOworICAgICAgICBX
ZWJMYXllciogd2ViTGF5ZXIgPSBpdGVyLT5rZXktPmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhp
Y3NMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIEFTU0VSVCh3ZWJMYXllcik7Cisg
ICAgICAgIHdlYkxheWVyLT5zZXRUb3VjaEV2ZW50SGFuZGxlclJlZ2lvbih3ZWJSZWN0cyk7Cisg
ICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFdoZWVsRXZl
bnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKIHsKICAgICAv
LyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3Jl
IHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9T
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4LDE2IEBAIHB1YmxpYzoKICAgICAv
LyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUg
Z2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFy
ZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5ZXIqKTsK
IAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdG91Y2ggaGFuZGxlcnMgYXJlIHJl
Z2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAgIHZpcnR1YWwgdm9pZCBzZXRUb3VjaEV2
ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKGNvbnN0IERvY3VtZW50KikgT1ZFUlJJREU7CisKIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JG
cmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFVwZGF0ZVNj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMp
OwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdm9pZCBz
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyAgICB2b2lkIHNldFRv
dWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJik7
CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKTsKICAgICBQYXNz
T3duUHRyPFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXI+IGNyZWF0ZVNjcm9sbGJhckxheWVyKFNj
cm9sbGJhciosIFdlYktpdDo6V2ViTGF5ZXIqIHNjcm9sbExheWVyLCBHcmFwaGljc0xheWVyKiBz
Y3JvbGxiYXJHcmFwaGljc0xheWVyLCBGcmFtZVZpZXcqKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTMw
LDYgKzY5MzAsNTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAog
ICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJl
Y3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9mZnNldCArIGlubGluZUVsZW1lbnRD
b250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBsb2NhdGlvbigp
KSk7CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50
Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJI
aXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29udGFpbmVyKSBjb25zdAoreworICAg
IExheW91dFBvaW50IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciA9IG9mZnNldEZyb21Db250
YWluZXI7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWludGluZ0xheWVy
KCkpIHsKKyAgICAgICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJlcGFpbnQoKTsK
KyAgICAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBhZGp1c3Rl
ZE9mZnNldEZyb21Db250YWluZXIpOworICAgIH0KKworICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1
bHQ7CisgICAgSW50UmVjdCBoaXRUZXN0UmVjdDsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgaGl0VGVzdFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGFkanVzdGVkT2Zm
c2V0RnJvbUNvbnRhaW5lciwgYm9yZGVyQm94UmVjdCgpLnNpemUoKSk7CisjZWxzZQorICAgIGhp
dFRlc3RSZWN0ID0gY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5l
cik7CisgICAgYWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyID0gTGF5b3V0U2l6ZSgpOworI2Vu
ZGlmCisgICAgaWYgKCFoaXRUZXN0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoaGl0VGVzdFJlY3QpOworCisgICAgaWYgKGhhc0hvcml6b250YWxMYXlvdXRPdmVyZmxvdygp
IHx8IGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3coKSkgeworICAgICAgICBmb3IgKFJvb3RJbmxp
bmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290
Qm94KCkpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgdG9wID0gbWF4PExheW91dFVuaXQ+KGN1
cnItPmxpbmVUb3AoKSwgY3Vyci0+dG9wKCkpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0
b20gPSBtaW48TGF5b3V0VW5pdD4oY3Vyci0+bGluZUJvdHRvbSgpLCBjdXJyLT50b3AoKSArIGN1
cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcmVjdChhZGp1c3RlZE9mZnNl
dEZyb21Db250YWluZXIueCgpICsgY3Vyci0+eCgpLCBhZGp1c3RlZE9mZnNldEZyb21Db250YWlu
ZXIueSgpICsgdG9wLCBjdXJyLT53aWR0aCgpLCBib3R0b20gLSB0b3ApOworICAgICAgICAgICAg
aWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBpeGVs
U25hcHBlZEludFJlY3QocmVjdCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2li
bGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1h
cmtlcigpICYmIGN1cnItPmlzQm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0g
dG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBib3gtPmFkZEhpdFRlc3RpbmdCb3VuZHNG
b3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRD
b250YWluZXIsICBhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIgKyBib3gtPmxvY2F0aW9uT2Zm
c2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKSB7
CisgICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6Oml0ZXJhdG9yIGl0ZXIgPSBy
ZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVwYWludENvbnRhaW5lcik7CisgICAg
ICAgIGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZW5kKCkpCisgICAg
ICAgICAgICBpdGVyID0gcmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cy5hZGQocmVwYWludENv
bnRhaW5lciwgcmVzdWx0KS5pdGVyYXRvcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRl
ci0+dmFsdWUuYXBwZW5kKHJlc3VsdCk7CisgICAgfQorfQorCiBSZW5kZXJCb3gqIFJlbmRlckJs
b2NrOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJPYmplY3Qq
IHBhcmVudCkgY29uc3QKIHsKICAgICBpZiAoaXNBbm9ueW1vdXNDb2x1bW5zQmxvY2soKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxMzY5Njgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNTA2LDYgKzUwNiw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRG
b2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCisg
ICAgdmlydHVhbCB2b2lkIGFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJl
cGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNvbnN0IExheW91dFBvaW50JiA9IExheW91
dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBPbmx5
IHVzZWQgYnkgUmVuZGVyU1ZHVGV4dCwgd2hpY2ggZXhwbGljaXRlbHkgb3ZlcnJpZGVzIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jaygpLCBkbyBOT1QgdXNlIGZvciBhbnl0aGluZyBlbHNlLgogICAg
IHZvaWQgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw2ICs0ODAsMzMg
QEAgdm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcgogICAgICAgICByZWN0
cy5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBzaXplKCkpKTsK
IH0KIAordm9pZCBSZW5kZXJCb3g6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFp
bmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0
UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tQ29udGFpbmVyKSBjb25zdAoreworICAgIGlmICgh
d2lkdGgoKSB8fCAhaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIExheW91dFBvaW50
IGFkanVzdGVkT2Zmc2V0RnJvbUNvbnRhaW5lciA9IG9mZnNldEZyb21Db250YWluZXI7CisgICAg
aWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IGhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAg
ICAgcmVwYWludENvbnRhaW5lciA9IGNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAgICAgaWYg
KCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBvZmZzZXRG
cm9tUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBhZGp1c3RlZE9mZnNldEZyb21D
b250YWluZXIpOworICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
SW50UmVjdCByZXN1bHQocGl4ZWxTbmFwcGVkSW50UmVjdChhZGp1c3RlZE9mZnNldEZyb21Db250
YWluZXIsIGJvcmRlckJveFJlY3QoKS5zaXplKCkpKTsKKyNlbHNlCisgICAgSW50UmVjdCByZXN1
bHQoY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcikpOworI2Vu
ZGlmCisgICAgUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6aXRlcmF0b3IgaXRlciA9IHJl
cGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZmluZChyZXBhaW50Q29udGFpbmVyKTsKKyAgICBp
ZiAoaXRlciA9PSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpKSB7CisgICAgICAg
IFZlY3RvcjxJbnRSZWN0PiByZXN1bHRWZWN0b3I7CisgICAgICAgIHJlc3VsdFZlY3Rvci5hcHBl
bmQocmVzdWx0KTsKKyAgICAgICAgcmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cy5hZGQocmVw
YWludENvbnRhaW5lciwgcmVzdWx0VmVjdG9yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaXRlci0+
dmFsdWUuYXBwZW5kKHJlc3VsdCk7Cit9CisKKwogTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmxl
Y3Rpb25Cb3goKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVzdWx0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVw
YWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywg
Y29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQm
KTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRIaXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRh
aW5lcihSZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWluZXIgPSAwLCBjb25zdCBMYXlvdXRQb2ludCYg
PSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklERTsKKwogICAgIC8vIFVzZSB0aGlzIHdpdGgg
Y2F1dGlvbiEgTm8gdHlwZSBjaGVja2luZyBpcyBkb25lIQogICAgIFJlbmRlckJveCogcHJldmlv
dXNTaWJsaW5nQm94KCkgY29uc3Q7CiAgICAgUmVuZGVyQm94KiBuZXh0U2libGluZ0JveCgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJl
dmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI4LDYgKzE0MjgsNTAgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlYwogICAgIH0KIH0KIAordm9pZCBSZW5kZXJJbmxpbmU6
OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJI
aXRUZXN0UmVjdHMmIHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBvZmZz
ZXRGcm9tQ29udGFpbmVyKSBjb25zdAoreworICAgIExheW91dFBvaW50IGFkanVzdGVkT2Zmc2V0
RnJvbUNvbnRhaW5lciA9IG9mZnNldEZyb21Db250YWluZXI7CisgICAgaWYgKCFyZXBhaW50Q29u
dGFpbmVyIHx8IGhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgcmVwYWludENvbnRh
aW5lciA9IGNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAgICAgaWYgKCFyZXBhaW50Q29udGFp
bmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBvZmZzZXRGcm9tUmVwYWludENvbnRh
aW5lcihyZXBhaW50Q29udGFpbmVyLCBhZGp1c3RlZE9mZnNldEZyb21Db250YWluZXIpOworICAg
IH0KKworICAgIFZlY3RvcjxJbnRSZWN0PiByZXN1bHQ7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIC8vIEZJWE1FOiBUaGlzIGNsYXNzIG5hbWUgaXMgYSBtaXNub21lciwg
YXMgdGhlc2UgcmVjdHMgYXJlIGluIG91ciByZXBhaW50IGNvbnRhaW5lcidzIGNvb3JkaW5hdGUg
c3BhY2UsCisgICAgLy8gbm90IGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIEFic29sdXRlUmVj
dHNHZW5lcmF0b3JDb250ZXh0IGNvbnRleHQocmVzdWx0LCBhZGp1c3RlZE9mZnNldEZyb21Db250
YWluZXIpOworICAgIGdlbmVyYXRlTGluZUJveFJlY3RzKGNvbnRleHQpOworCisgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0
U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlz
dE1hcmtlcigpKSB7CisgICAgICAgICAgICBMYXlvdXRQb2ludCBwb3MoYWRqdXN0ZWRPZmZzZXRG
cm9tQ29udGFpbmVyKTsKKyAgICAgICAgICAgIGlmIChjdXJyLT5pc0JveCgpKQorICAgICAgICAg
ICAgICAgIHBvcy5tb3ZlKHRvUmVuZGVyQm94KGN1cnIpLT5sb2NhdGlvbk9mZnNldCgpKTsKKyAg
ICAgICAgICAgIGN1cnItPmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKHJl
cGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsIHBvcyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29udGludWF0aW9uKCkpIHsKKyAgICAgICAgaWYgKGNv
bnRpbnVhdGlvbigpLT5pc0lubGluZSgpKQorICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFk
ZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXJIaXRU
ZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsIHRvUG9pbnQoYWRqdXN0ZWRPZmZzZXRGcm9tQ29u
dGFpbmVyICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpIC0g
Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29udGludWF0aW9uKCktPmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVy
KHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMsIHJlcGFpbnRDb250YWluZXIsIHRvUG9pbnQo
YWRqdXN0ZWRPZmZzZXRGcm9tQ29udGFpbmVyICsgdG9SZW5kZXJCb3goY29udGludWF0aW9uKCkp
LT5sb2NhdGlvbigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKKyAgICB9Cisj
ZWxzZQorICAgIHJlc3VsdC5hcHBlbmQoY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVw
YWludENvbnRhaW5lcikpOworI2VuZGlmCisgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM6Oml0ZXJhdG9yIGl0ZXIgPSByZXBh
aW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmZpbmQocmVwYWludENvbnRhaW5lcik7CisgICAgICAg
IGlmIChpdGVyID09IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuZW5kKCkpCisgICAgICAg
ICAgICByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmFkZChyZXBhaW50Q29udGFpbmVyLCBy
ZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVyLT52YWx1ZS5hcHBlbmQocmVz
dWx0KTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCkKIHsKICAgICBpZiAoIWhhc091dGxpbmUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBwYWludE91dGxpbmUoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRIaXRU
ZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihSZXBhaW50Q29udGFpbmVySGl0VGVzdFJl
Y3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250YWlu
ZXIgPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVSUklE
RTsKKwogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51YXRpb247CiAgICAg
dXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlvbjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDEzNjk2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MTMsNiArNjEzLDE4IEBAIFJlbmRlck5hbWVkRmxvd1RocmVhZCogUmVuZGVyT2Jq
ZWN0OjpyZW4KICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC0+aXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWQoKSA/IHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG9iamVjdCkgOiAwOwogfQogCit2b2lk
IFJlbmRlck9iamVjdDo6b2Zmc2V0RnJvbVJlcGFpbnRDb250YWluZXIoY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0UG9pbnQmIG9mZnNldCkgY29u
c3QKK3sKKyAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlzKQorICAgICAgICBvZmZzZXQg
PSBMYXlvdXRQb2ludCgpOworICAgIGVsc2UgeworICAgICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFu
c2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIEZsb2F0
UG9pbnQoKSk7CisgICAgICAgIG1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwg
dHJhbnNmb3JtU3RhdGUsIEFwcGx5Q29udGFpbmVyRmxpcCB8IFVzZVRyYW5zZm9ybXMgfCBTbmFw
T2Zmc2V0Rm9yVHJhbnNmb3Jtcyk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlLmZsYXR0ZW4oKTsK
KyAgICAgICAgb2Zmc2V0ID0gTGF5b3V0UG9pbnQodHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclBv
aW50KCkpOworICAgIH0KK30KKwogUmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5l
QmxvY2soKSBjb25zdAogewogICAgIHJldHVybiAwOwpAQCAtMjYzMiw2ICsyNjQ0LDE3IEBAIGJv
b2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kc0ZvckhpdFRlc3RpbmcoVmVj
dG9yPEludFJlY3Q+JiBhYnNvbHV0ZVJlY3RzKSBjb25zdAoreworICAgIFJlcGFpbnRDb250YWlu
ZXJIaXRUZXN0UmVjdHMgcmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czsKKyAgICByZXBhaW50
Q29udGFpbmVyQm91bmRzRm9ySGl0VGVzdGluZyhyZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3Rz
KTsKKworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuYmVnaW4oKTsgaXRlciAhPSBy
ZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IGFic29sdXRlUmVjdHMuYXBwZW5kKGl0ZXItPmtleS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFF1YWQoaXRlci0+dmFsdWVbaV0pLCBVc2VUcmFuc2Zvcm1zIHwgQXBwbHlDb250YWluZXJGbGlw
IHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOworICAgIH0KK30KKwog
dm9pZCBSZW5kZXJPYmplY3Q6OnNjaGVkdWxlUmVsYXlvdXQoKQogewogICAgIGlmIChpc1JlbmRl
clZpZXcoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAko
cmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RydWN0IEFubm90YXRlZFJl
Z2lvblZhbHVlIHsKICNlbmRpZgogCiB0eXBlZGVmIFdURjo6SGFzaFNldDxjb25zdCBSZW5kZXJP
YmplY3QqPiBSZW5kZXJPYmplY3RBbmNlc3RvckxpbmVib3hEaXJ0eVNldDsKLQordHlwZWRlZiBX
VEY6Okhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCosIFZlY3RvcjxJbnRSZWN0
PiA+IFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHM7CiAjaWZuZGVmIE5ERUJVRwogY29uc3Qg
aW50IHNob3dUcmVlQ2hhcmFjdGVyT2Zmc2V0ID0gMzk7CiAjZW5kaWYKQEAgLTk1Nyw2ICs5NTcs
MTcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpIHsgfTsKIAorICAgIHZvaWQgYWJz
b2x1dGVCb3VuZHNGb3JIaXRUZXN0aW5nKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OworCisgICAg
Ly8gSGl0IHRlc3QgYm91bmRzIGluIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZWlyIHJlcGFp
bnQgY29udGFpbmVycworICAgIHZvaWQgcmVwYWludENvbnRhaW5lckJvdW5kc0ZvckhpdFRlc3Rp
bmcoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRhaW5lckhpdFRlc3RS
ZWN0cykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRIaXRUZXN0aW5nQm91bmRzRm9y
UmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzKTsKKyAgICB9CisK
KyAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkIHVz
ZXJzIHNob3VsZCBjYWxsIGFic29sdXRlQm91bmRzRm9ySGl0VGVzdGluZyBvciByZXBhaW50Q29u
dGFpbmVyQm91bmRzRm9ySGl0VGVzdGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgYWRkSGl0VGVzdGlu
Z0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYs
IGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqID0gMCwgY29uc3QgTGF5b3V0UG9pbnQmID0g
TGF5b3V0UG9pbnQoKSkgY29uc3QgeyB9OworCiAgICAgTGF5b3V0UmVjdCBhYnNvbHV0ZU91dGxp
bmVCb3VuZHMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG91dGxpbmVCb3VuZHNGb3JS
ZXBhaW50KDApOwpAQCAtOTcwLDYgKzk4MSw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBp
bmxpbmUgYm9vbCBsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSBjb25zdDsKIAorICAg
IHZvaWQgb2Zmc2V0RnJvbVJlcGFpbnRDb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCosIExheW91dFBvaW50JikgY29uc3Q7CisKICAgICAvLyBPdmVycmlkZXMgc2hvdWxkIGNh
bGwgdGhlIHN1cGVyY2xhc3MgYXQgdGhlIGVuZAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwogICAg
IC8vIE92ZXJyaWRlcyBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcyBhdCB0aGUgc3RhcnQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDEzNjk2
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYyLDYgKzI2MiwyNSBAQCB2b2lkIFJlbmRlclZpZXc6Om1hcEFic29sdXRlVG9M
b2NhbFBvaW50CiAgICAgfQogfQogCit2b2lkIFJlbmRlclZpZXc6OmFkZEhpdFRlc3RpbmdCb3Vu
ZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmIHJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHMsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JikgY29uc3QKK3sKKyAgICByZXBhaW50
Q29udGFpbmVyID0gY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIGlmICghcmVwYWludENvbnRh
aW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBkb2N1bWVudFJlY3QgPSB1bnNj
YWxlZERvY3VtZW50UmVjdCgpOworICAgIGlmIChkb2N1bWVudFJlY3Qud2lkdGgoKSAmJiBkb2N1
bWVudFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFJlY3QpOworCisgICAgICAgIFJlcGFpbnRDb250
YWluZXJIaXRUZXN0UmVjdHM6Oml0ZXJhdG9yIGl0ZXIgPSByZXBhaW50Q29udGFpbmVySGl0VGVz
dFJlY3RzLmZpbmQocmVwYWludENvbnRhaW5lcik7CisgICAgICAgIGlmIChpdGVyID09IHJlcGFp
bnRDb250YWluZXJIaXRUZXN0UmVjdHMuZW5kKCkpCisgICAgICAgICAgICByZXBhaW50Q29udGFp
bmVySGl0VGVzdFJlY3RzLmFkZChyZXBhaW50Q29udGFpbmVyLCByZXN1bHQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IHJlc3VsdDsKKyAgICB9Cit9CisKIGJvb2wg
UmVuZGVyVmlldzo6cmVxdWlyZXNDb2x1bW5zKGludCBkZXNpcmVkQ29sdW1uQ291bnQpIGNvbnN0
CiB7CiAgICAgaWYgKG1fZnJhbWVWaWV3KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpIE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIGFkZEhpdFRlc3RpbmdCb3Vu
ZHNGb3JSZXBhaW50Q29udGFpbmVyKFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMmLCBjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjdXJyZW50UmVwYWludENvbnRhaW5lciA9IDAsIGNv
bnN0IExheW91dFBvaW50JiA9IExheW91dFBvaW50KCkpIGNvbnN0IE9WRVJSSURFOworCiAgICAg
ZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFpbnROZXdYT1JPbGQsIFJlcGFpbnROZXdN
aW51c09sZCwgUmVwYWludE5vdGhpbmcgfTsKICAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJP
YmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9z
LCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwogICAgIHZvaWQgZ2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQs
IFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQmIGVuZE9mZnNldCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCiAjaW5jbHVkZSAi
U1ZHU3R5bGVkRWxlbWVudC5oIgpAQCAtOTEsNiArOTIsMTIgQEAgdm9pZCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWJzb2x1dGVRdWFkcwogICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVR
dWFkKHN0cm9rZUJvdW5kaW5nQm94KCksIDAgLyogbW9kZSAqLywgd2FzRml4ZWQpKTsKIH0KIAor
dm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRD
b250YWluZXIoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyYgcmVwYWludENvbnRhaW5lckhp
dFRlc3RSZWN0cywgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRD
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiByZXBhaW50T2Zmc2V0KSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBjYWxjdWxhdGUgdGhlIG1pbmltYWwgcmVjdC4KKyAgICByZXR1cm4gU1ZHUmVu
ZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KHRoaXMpLT5hZGRIaXRUZXN0aW5nQm91bmRz
Rm9yUmVwYWludENvbnRhaW5lcihyZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLCBjdXJyZW50
UmVwYWludENvbnRhaW5lciwgcmVwYWludE9mZnNldCk7Cit9CisKIHZvaWQgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNs
aWVudERlc3Ryb3llZCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRI
aXRUZXN0aW5nQm91bmRzRm9yUmVwYWludENvbnRhaW5lcihSZXBhaW50Q29udGFpbmVySGl0VGVz
dFJlY3RzJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY3VycmVudFJlcGFpbnRDb250
YWluZXIgPSAwLCBjb25zdCBMYXlvdXRQb2ludCYgPSBMYXlvdXRQb2ludCgpKSBjb25zdCBPVkVS
UklERTsKKwogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgTWFw
Q29vcmRpbmF0ZXNGbGFncyA9IEFwcGx5Q29udGFpbmVyRmxpcCB8IFNuYXBPZmZzZXRGb3JUcmFu
c2Zvcm1zLCBib29sKiB3YXNGaXhlZCA9IDApIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZl
cmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWxlY3RSdWxlRmVhdHVyZVNldC5oIgogI2luY2x1
ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0x
MTkxLDggKzExOTIsNDEgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNv
dQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPnRvdWNo
RXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3Vj
aEhhbmRsZXJzID0gZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCk7CisgICAgaWYgKCF0b3Vj
aEhhbmRsZXJzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsK
KyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b3Vj
aEhhbmRsZXJzLT5iZWdpbigpOyBpdGVyICE9IHRvdWNoSGFuZGxlcnMtPmVuZCgpOyArK2l0ZXIp
CisgICAgICAgIGNvdW50ICs9IGl0ZXItPnZhbHVlOworICAgIHJldHVybiBjb3VudDsKK30KKwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKK1Bhc3NSZWZQdHI8Q2xpZW50UmVjdExp
c3Q+IEludGVybmFsczo6dG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKERvY3VtZW50KiBkb2N1
bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1l
bnQtPnZpZXcoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkgeworICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghZG9jdW1lbnQt
PnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIENsaWVudFJl
Y3RMaXN0OjpjcmVhdGUoKTsKKworICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKKyAgICBWZWN0
b3I8RmxvYXRRdWFkPiBxdWFkczsKKworICAgIFJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMg
cmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0cyA9IGRvY3VtZW50LT5wYWdlKCktPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCktPmNvbXB1dGVSZXBhaW50Q29udGFpbmVyVG91Y2hFdmVudFRhcmdldFJl
Y3RzKGRvY3VtZW50KTsKKworICAgIGZvciAoUmVwYWludENvbnRhaW5lckhpdFRlc3RSZWN0czo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlcGFpbnRDb250YWluZXJIaXRUZXN0UmVjdHMuYmVnaW4o
KTsgaXRlciAhPSByZXBhaW50Q29udGFpbmVySGl0VGVzdFJlY3RzLmVuZCgpOyArK2l0ZXIpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIHF1YWRzLmFwcGVuZChpdGVyLT5rZXktPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRRdWFkKGl0ZXItPnZhbHVlW2ldKSwgVXNlVHJhbnNmb3JtcyB8IEFwcGx5Q29udGFpbmVy
RmxpcCB8IFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zKSk7CisgICAgfQorCisgICAgcmV0dXJuIENs
aWVudFJlY3RMaXN0OjpjcmVhdGUocXVhZHMpOwogfQorI2VuZGlmCiAKIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IEludGVybmFsczo6bm9kZXNGcm9tUmVjdChEb2N1bWVudCogZG9jdW1lbnQsIGludCB4
LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAg
IHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBib29sIGlnbm9y
ZUNsaXBwaW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDEzNjk2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3MCw2ICsxNzAsOSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxl
ckNvdW50KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHVuc2lnbmVkIHRvdWNoRXZl
bnRIYW5kbGVyQ291bnQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IHRvdWNo
RXZlbnRUYXJnZXRDbGllbnRSZWN0cyhEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRp
ZgogCiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVjdChEb2N1bWVudCosIGlu
dCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAog
ICAgICAgICB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9v
bCBpZ25vcmVDbGlwcGluZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9u
IDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3LDYgKzEzNyw5IEBACiAKICAgICB1bnNpZ25lZCBsb25nIHdoZWVsRXZl
bnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KTsKICAgICB1bnNpZ25lZCBsb25nIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQg
ZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VD
SF9FVkVOVF9UUkFDS0lORykgJiYgRU5BQkxFX1RPVUNIX0VWRU5UX1RSQUNLSU5HCisgICAgQ2xp
ZW50UmVjdExpc3QgdG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKGluIERvY3VtZW50IGRvY3Vt
ZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKIAogICAgIE5vZGVMaXN0IG5vZGVz
RnJvbVJlY3QoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGxvbmcgeCwgaW4gbG9uZyB5LAogICAg
ICAgICBpbiB1bnNpZ25lZCBsb25nIHRvcFBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgcmlnaHRQ
YWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIGJvdHRvbVBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcg
bGVmdFBhZGRpbmcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2
OTY4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMi0wNyAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJl
Y3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9y
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGlu
ZyB0b3VjaCBldmVudCB0YXJnZXQgcmVnaW9uIHRyYWNraW5nLgorCisgICAgICAgICogZmVhdHVy
ZXMuZ3lwaToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcXVlc3RUb3VjaEV2ZW50VHlw
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5D
b250YWluZXJJbXBsKToKKwogMjAxMi0xMi0wNyAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBNb3ZlIFdvcmtlckNvbnRleHRQcm94eTo6
Y3JlYXRlIG91dCBvZiBQbGF0Zm9ybVN1cHBvcnQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2Zl
YXR1cmVzLmd5cGkJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
ZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBACiAgICAgICAn
RU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MScsCiAgICAgICAnRU5BQkxFX1RPVUNIX0VWRU5UUz08
KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5H
PTwoZW5hYmxlX3RvdWNoX2ljb25fbG9hZGluZyknLAorICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVO
VF9UUkFDS0lORz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hf
U0xJREVSPTEnLAogICAgICAgJ0VOQUJMRV9VU0VSX1RJTUlORz0xJywKICAgICAgICdFTkFCTEVf
VjhfU0NSSVBUX0RFQlVHX1NFUlZFUj0xJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiAxMzY5
NjgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDkgKzUzMCw5IEBAIHZvaWQgV2ViUGx1Z2luQ29u
dGFpbmVySW1wbDo6cmVxdWVzdFRvdWMKICAgICAgICAgcmV0dXJuOwogICAgIG1fdG91Y2hFdmVu
dFJlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7CiAgICAgaWYgKG1fdG91Y2hFdmVudFJlcXVlc3RU
eXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0gICAgICAgIG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5k
b2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogICAgIGVsc2UK
LSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxl
cigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRI
YW5kbGVyKG1fZWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c2V0
V2FudHNXaGVlbEV2ZW50cyhib29sIHdhbnRzV2hlZWxFdmVudHMpCkBAIC02ODUsNyArNjg1LDcg
QEAgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBsdWdpbkNvbnRhaQogI2VuZGlmCiAKICAg
ICBpZiAobV90b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0gVG91Y2hFdmVudFJlcXVlc3RUeXBlTm9u
ZSkKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZl
bnRIYW5kbGVyKG1fZWxlbWVudCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGx1
Z2luTG9hZE9ic2VydmVycy5zaXplKCk7ICsraSkKICAgICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2
ZXJzW2ldLT5jbGVhclBsdWdpbkNvbnRhaW5lcigpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2OTY4
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTItMTItMDcgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVzIHRvIGVu
YWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9m
YXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2Nv
bXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEyLTA3ICBKYW1l
cyBTaW1vbnNlbiAgPHNpbW9uamFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1d
IEVuYWJsZSBJbnRlbCdzIFJlc291cmNlIFRpbWluZyB0ZXN0cwpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQt
cmVjdHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zh
c3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorVGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0
IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVu
IGluIER1bXBSZW5kZXJUcmVlLiBUaGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUg
aGl0IHRlc3QgcmVnaW9ucyBvZiBhbGwgdGhlIGxpc3RlZCBlbGVtZW50cy4KKworbm9ybWFsRmxv
d1swXTogKDgsIDcyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclswXTogKDgsIDEw
MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMV06ICgxMTgsIDMwMCwgMTQwLCAx
MCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMF06ICg4LCAxNTIsIDc4NCwgMTApCityZWxhdGl2
ZUNoaWxkQ29udGFpbmVyWzFdOiAoOCwgMTUyLCAyNjAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWlu
ZXJbMF06ICg4LCAyMDIsIDEwMCwgODApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclsxXTogKDgsIDIw
MiwgMTEwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzJdOiAoOCwgMjAyLCA3ODQsIDEwKQor
b3ZlcmhhbmdpbmdDb250YWluZXJbM106ICg4LCAyMTIsIDUwLCAxMCkKK292ZXJoYW5naW5nQ29u
dGFpbmVyWzRdOiAoOCwgMjIyLCAxMTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbNV06ICg4
LCAyMzIsIDUwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzZdOiAoOCwgMjQyLCAxMTAsIDEw
KQorb3ZlcmhhbmdpbmdDb250YWluZXJbN106ICg4LCAyNTIsIDUwLCAxMCkKK292ZXJoYW5naW5n
Q29udGFpbmVyWzhdOiAoOCwgMjYyLCAxMTAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbOV06
ICg4LCAyNzIsIDUwLCAxMCkKK3RyYW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMF06ICg2MiwgNDAx
LCA2NjEsIDMyKQordHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lclsxXTogKDgsIDQxMiwgNzY5LCAx
MCkKK2NvbnRpbnVhdGlvblswXTogKDEwOCwgNDYyLCAxMDAsIDEwKQorY29udGludWF0aW9uWzFd
OiAoOCwgNDcyLCA3NjksIDEwKQorY29udGludWF0aW9uWzJdOiAoOCwgNDcyLCA3NjksIDEwKQor
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9j
b21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0
LXJlY3RzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHN0eWxlPgorI3RyYW5zZm9ybWVkQ2hpbGQgeworCS13ZWJraXQtdHJhbnNmb3JtOiByb3Rh
dGUzZCgwLjIsIDEsIDAsIDM1Z3JhZCk7Cit9CisjYWJzb2x1dGVDaGlsZCB7CisJcG9zaXRpb246
IGFic29sdXRlOworCXRvcDogMzAwcHg7Cit9CisjcmVsYXRpdmVDaGlsZCB7CisJcG9zaXRpb246
IHJlbGF0aXZlOworCXRvcDogMjAwcHg7Cit9Cisjb3ZlcmhhbmdpbmdDb250YWluZXIgeworCWhl
aWdodDogMTBweDsKK30KKyNvdmVyaGFuZ2luZ0Zsb2F0aW5nQ2hpbGQgeworCXdpZHRoOiAxMDBw
eDsKKwlmbG9hdDogbGVmdDsKK30KKyN0ZXN0cyB7CisJZm9udDogMTBweCBBaGVtOworfQorPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3RzIHZl
cmlmaWVzIHRoZSBoaXQgdGVzdCByZWdpb25zIGdpdmVuIHRvIHRoZSBjb21wb3NpdG9yLiBJdCBj
YW4gb25seSBiZSBydW4gaW4gRHVtcFJlbmRlclRyZWUuCitUaGUgb3V0cHV0dGVkIHJlY3RzIHNo
b3VsZCBjb3ZlciB0aGUgaGl0IHRlc3QgcmVnaW9ucyBvZiBhbGwgdGhlIGxpc3RlZCBlbGVtZW50
cy48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPGRpdiBpZD0idGVzdHMiPgorCTxk
aXYgaWQ9Im5vcm1hbEZsb3ciPgorCQlMb3JlbSBpcHN1bQorCQk8c3Bhbj5zdW08L3NwYW4+Lgor
CTwvZGl2PgorCTxkaXYgaWQ9ImFic29sdXRlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1
bQorCQk8c3BhbiBpZD0iYWJzb2x1dGVDaGlsZCI+QWJzb2x1dGUgY2hpbGQ8L3NwYW4+CisJPC9k
aXY+CisJPGRpdiBpZD0icmVsYXRpdmVDaGlsZENvbnRhaW5lciI+CisJCUxvcmVtIGlwc3VtCisJ
CTxzcGFuIGlkPSJyZWxhdGl2ZUNoaWxkIj5SZWxhdGl2ZSBjaGlsZDwvc3Bhbj4KKwk8L2Rpdj4K
Kwk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0NvbnRhaW5lciI+CisJCTxkaXYgaWQ9Im92ZXJoYW5naW5n
RmxvYXRpbmdDaGlsZCI+T3ZlcmhhbmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQgb3Zlcmhh
bmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQ8L2Rpdj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJ0
cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyIj4KKwkJPGRpdiBpZD0idHJhbnNmb3JtZWRDaGlsZCI+
VHJhbnNmb3JtZWQ8L2Rpdj4KKwk8L2Rpdj4KKwk8ZGl2PgorCQk8YiBpZD0iY29udGludWF0aW9u
Ij5UaGlzIGIgdGFnCisJCTxkaXY+Y2F1c2VzIGE8L2Rpdj4KKwkJY29udGludWF0aW9uPC9iPgor
CTwvZGl2PgorPC9kaXY+Cis8c2NyaXB0PgoraWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKKwlyZXR1
cm47CisKK3dpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbGlzdGVu
ZXIoKSB7IH0KKworZnVuY3Rpb24gbG9nKG1zZykgeworCXZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIiku
YXBwZW5kQ2hpbGQoc3Bhbik7CisgICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsK
K30KKworZnVuY3Rpb24gc29ydFJlY3RzKGEsIGIpIHsKKwlyZXR1cm4gYS50b3AgLSBiLnRvcDsK
K30KKworZnVuY3Rpb24gbG9nUmVjdHMoaWQpIHsKKwllbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWQpOworCWVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxp
c3RlbmVyLCBmYWxzZSk7CisJcmVjdHMgPSB3aW5kb3cuaW50ZXJuYWxzLnRvdWNoRXZlbnRUYXJn
ZXRDbGllbnRSZWN0cyhkb2N1bWVudCk7CisJdmFyIHNvcnRlZFJlY3RzID0gbmV3IEFycmF5KCk7
CisJZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7ICsraSkKKwkJc29ydGVkUmVjdHNb
aV0gPSByZWN0c1tpXTsKKwlzb3J0ZWRSZWN0cy5zb3J0KHNvcnRSZWN0cyk7CisJZm9yICh2YXIg
aSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7ICsraSkKKwkJbG9nKGlkICsgIlsiICsgaSArICJdOiAo
IiArIHNvcnRlZFJlY3RzW2ldLmxlZnQgKyAiLCAiICsgc29ydGVkUmVjdHNbaV0udG9wICsgIiwg
IiArIHNvcnRlZFJlY3RzW2ldLndpZHRoICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLmhlaWdodCAr
ICIpIik7CisJZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbGlzdGVu
ZXIsIGZhbHNlKTsKK30KKworbG9nUmVjdHMoIm5vcm1hbEZsb3ciKTsKK2xvZ1JlY3RzKCJhYnNv
bHV0ZUNoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygicmVsYXRpdmVDaGlsZENvbnRhaW5lciIp
OworbG9nUmVjdHMoIm92ZXJoYW5naW5nQ29udGFpbmVyIik7Citsb2dSZWN0cygidHJhbnNmb3Jt
ZWRDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoImNvbnRpbnVhdGlvbiIpOworCit2YXIgdGVz
dENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0cyIpOwordGVzdENvbnRh
aW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRlc3RDb250YWluZXIpOworCis8L3NjcmlwdD4K
KzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178845</attachid>
            <date>2012-12-11 12:16:04 -0800</date>
            <delta_ts>2012-12-11 14:19:19 -0800</delta_ts>
            <desc>Simplified solution</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>34524</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0xMi0wNyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0
aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0
IHJlZ2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGlu
ZworICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQK
KyAgICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBp
cyBpbml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4K
KyAgICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmlj
ZXMgd2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50Cisg
ICAgICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8g
dHVybiB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBn
b2FsLCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3
aXRoIHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNp
Z25lZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhl
biB1cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxp
a2UgaG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRy
YWNrZWQuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdCBwcm9wZXJseSB1
cGRhdGUgdGhlIGhpdCB0ZXN0IHJlY3RzIHdoZW4gdGhlIHJlbmRlcmVycyBhcmUgaW5zaWRlIGEg
c3ViLQorICAgICAgICB0cmVlIHRoYXQgc2Nyb2xscy4KKworICAgICAgICBUZXN0OiBwbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5o
dG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6Omhhc1RvdWNoRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudFRhcmdldHMpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpZE1vdmVUb05l
d0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZUJhc2U6OnJl
c3RvcmUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0ZVJlcGFpbnRDb250YWlu
ZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNvbXB1dGVSZXBhaW50Q29udGFpbmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKToK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0
c0NoYW5nZWQpOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3
TGF5b3V0VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmg6Cisg
ICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZEZv
Y3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmFkZEhpdFRlc3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFJlbmRlckJsb2NrKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAoUmVu
ZGVyQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkSGl0VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250
YWluZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5oOgorICAgICAgICAoUmVuZGVySW5saW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b2Zmc2V0RnJv
bVJlcGFpbnRDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6YWJzb2x1dGVCb3VuZHNGb3JIaXRUZXN0aW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJlbmRlck9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlcGFpbnRDb250YWluZXJCb3Vu
ZHNGb3JIaXRUZXN0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWRkSGl0
VGVzdGluZ0JvdW5kc0ZvclJlcGFpbnRDb250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFkZEhpdFRlc3Rp
bmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgIChSZW5kZXJWaWV3KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFkZEhpdFRl
c3RpbmdCb3VuZHNGb3JSZXBhaW50Q29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAgIChSZW5kZXJTVkdNb2RlbE9iamVjdCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMpOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgIChJbnRlcm5hbHMpOgorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxMi0xMi0wNyAgUm9iZXJ0IEhvZ2Fu
ICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTI3MTYzKTogQ29u
dGVudCBpcyBvZmZzZXQgdG8gdGhlIHJpZ2h0IGF0IHJlYS5ydQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTYsOSArNDk2LDYgQEAgRG9jdW1lbnQ6OkRvY3Vt
ZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSwogICAgICwgbV93cml0ZVJlY3Vyc2lvbklzVG9vRGVl
cChmYWxzZSkKICAgICAsIG1fd3JpdGVSZWN1cnNpb25EZXB0aCgwKQogICAgICwgbV93aGVlbEV2
ZW50SGFuZGxlckNvdW50KDApCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAsIG1fdG91
Y2hFdmVudEhhbmRsZXJDb3VudCgwKQotI2VuZGlmCiAgICAgLCBtX3BlbmRpbmdUYXNrc1RpbWVy
KHRoaXMsICZEb2N1bWVudDo6cGVuZGluZ1Rhc2tzVGltZXJGaXJlZCkKICAgICAsIG1fc2NoZWR1
bGVkVGFza3NBcmVTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX3Zpc3VhbFVwZGF0ZXNBbGxvd2Vk
KHRydWUpCkBAIC01NTk5LDMzICs1NTk2LDU3IEBAIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVdo
ZWVsRXZlbnRIYW5kbGUKICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCh0aGlzKTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKQordm9pZCBEb2N1
bWVudDo6ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxlcikKIHsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgICsrbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlm
IChtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQgPiAxKQorICAgIGlmICghbV90b3VjaEV2ZW50VGFy
Z2V0cy5nZXQoKSkKKyAgICAgICAgbV90b3VjaEV2ZW50VGFyZ2V0cyA9IGFkb3B0UHRyKG5ldyBU
b3VjaEV2ZW50VGFyZ2V0U2V0KTsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5hZGQoaGFuZGxl
cik7CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAg
ICAgIHBhcmVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CisgICAgfQorICAgIGlmIChQ
YWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKSB7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNL
SU5HKQorICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT50b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UodGhpcyk7CisjZW5k
aWYKKyAgICAgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUoKSA9PSAxKQorICAgICAg
ICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CiAjZW5kaWYKIH0KIAotdm9p
ZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKQordm9pZCBEb2N1bWVudDo6
ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxlcikKIHsKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotICAgIEFTU0VSVChtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpOwotICAg
IC0tbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmIChtX3RvdWNoRXZlbnRIYW5kbGVy
Q291bnQpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQogICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKG1fdG91Y2hFdmVudFRhcmdldHMtPmNvbnRhaW5zKGhhbmRsZXIpKTsK
KyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxlcik7CisgICAgaWYgKERvY3Vt
ZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAgICAgIHBhcmVudC0+ZGlkUmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0
dXJuOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBpZiAoU2Nyb2xsaW5n
Q29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnRvdWNoRXZlbnRUYXJnZXRS
ZWN0c0RpZENoYW5nZSh0aGlzKTsKKyNlbmRpZgorICAgIGlmIChtX3RvdWNoRXZlbnRUYXJnZXRz
LT5zaXplKCkpCisgICAgICAgIHJldHVybjsKICAgICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9
IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3Vt
ZW50KCktPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1
bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5u
ZWVkVG91Y2hFdmVudHMoZmFsc2UpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7
CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEzNjk2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYs
NiArMjA2LDggQEAgZW51bSBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgewogfTsKIGNvbnN0IGlu
dCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzID0gSW52YWxpZGF0ZU9uQW55QXR0ckNoYW5n
ZSArIDE7CiAKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Tm9kZSo+IFRvdWNoRXZlbnRUYXJnZXRT
ZXQ7CisKIGNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRhaW5lck5vZGUsIHB1YmxpYyBUcmVl
U2NvcGUsIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYg
dXJsKQpAQCAtMTExNSwxMyArMTExNywxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZW1vdmVX
aGVlbEV2ZW50SGFuZGxlcigpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNp
Z25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50
SGFuZGxlckNvdW50OyB9CisgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSBjb25zdCB7
IHJldHVybiAobV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkgPyBtX3RvdWNoRXZlbnRUYXJnZXRz
LT5zaXplKCkgOiBmYWxzZTsgfQogI2Vsc2UKLSAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxl
ckNvdW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRs
ZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgdm9pZCBkaWRBZGRU
b3VjaEV2ZW50SGFuZGxlcigpOwotICAgIHZvaWQgZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIo
KTsKKyAgICB2b2lkIGRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKyAgICB2b2lkIGRp
ZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hFdmVudFRhcmdldHMoKSBj
b25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpOyB9CisjZWxzZQorICAgIGNv
bnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorI2VuZGlmCiAKICAgICBib29sIHZpc3VhbFVwZGF0ZXNBbGxvd2VkKCkgY29uc3Qg
eyByZXR1cm4gbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsgfQogCkBAIC0xNDk5LDcgKzE1MDcsNyBA
QCBwcml2YXRlOgogICAgIAogICAgIHVuc2lnbmVkIG1fd2hlZWxFdmVudEhhbmRsZXJDb3VudDsK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHVuc2lnbmVkIG1fdG91Y2hFdmVudEhhbmRs
ZXJDb3VudDsKKyAgICBPd25QdHI8VG91Y2hFdmVudFRhcmdldFNldD4gbV90b3VjaEV2ZW50VGFy
Z2V0czsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjU5LDggKzIyNTksOCBAQCB2b2lkIE5vZGU6
OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0b3VjaEV2ZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgRXZlbnRMaXN0
ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gZ2V0RXZlbnRMaXN0ZW5lcnModG91Y2hFdmVudE5hbWVz
W2ldKTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBsaXN0ZW5lcnMuc2l6ZSgpOyAr
K2opIHsKLSAgICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxl
cigpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsK
KyAgICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlz
KTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjg5LDcgKzIyODksNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgdHJ5QWRkRXZlbnRMaXN0ZW5lcihOCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRX
aGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3Vj
aEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNo
RXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIodGFyZ2V0Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzExLDcg
KzIzMTEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lCiAgICAg
ICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAg
ICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBl
bHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAg
ICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGFyZ2V0Tm9kZSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZy
YW1lLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIENhY2hl
ZEZyYW1lQmFzZTo6cmVzdG9yZSgpCiAgICAgbV9kb2N1bWVudC0+ZW5xdWV1ZVBvcHN0YXRlRXZl
bnQoaGlzdG9yeUl0ZW0gJiYgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgPyBoaXN0b3J5SXRl
bS0+c3RhdGVPYmplY3QoKSA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwog
ICAgIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fZG9jdW1lbnQtPnRvdWNo
RXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+aGFzVG91Y2hFdmVudEhh
bmRsZXJzKCkpCiAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgp
LT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyAr
MTYzLDcgQEAgSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgICAgICBk
b2N1bWVudCgpLT5mb3JtQ29udHJvbGxlcigpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3Zl
QnV0dG9uKHRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgaWYgKG1faGFzVG91
Y2hFdmVudEhhbmRsZXIpCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRI
YW5kbGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KHRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTQ4OSw5ICs0ODksOSBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnVwZGF0ZVR5cGUoKQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXIgPSBtX2lu
cHV0VHlwZS0+aGFzVG91Y2hFdmVudEhhbmRsZXIoKTsKICAgICBpZiAoaGFzVG91Y2hFdmVudEhh
bmRsZXIgIT0gbV9oYXNUb3VjaEV2ZW50SGFuZGxlcikgewogICAgICAgaWYgKGhhc1RvdWNoRXZl
bnRIYW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigp
OworICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAg
ICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIo
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7
CiAgICAgICBtX2hhc1RvdWNoRXZlbnRIYW5kbGVyID0gaGFzVG91Y2hFdmVudEhhbmRsZXI7CiAg
ICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAx
MzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1ODQsNyArMTU4NCw3IEBAIGJvb2wgRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVy
KGNvbnN0IEEKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVl
bEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKCk7
CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlw
ZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihkb2N1bWVudCk7CiAg
ICAgICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50KQog
ICAgICAgICAgICAgZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIodGhpcyk7CiAgICAgfQpAQCAt
MTYxNSw3ICsxNjE1LDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29u
cwogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQp
CiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKICAg
ICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkK
LSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAg
ICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKGRvY3VtZW50KTsK
ICAgICB9CiAKICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDEzNjk2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzkwNCw3ICszOTA0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQo
Y29ucwogICAgICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IG5vZGUtPmRvY3VtZW50KCk7CiAgICAg
ICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmICghZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgICAgICBpZiAoIWRv
Yy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgICAgIG1fb3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0cy5zZXQodG91Y2hQb2lu
dFRhcmdldEtleSwgbm9kZSk7CkBAIC0zOTI0LDcgKzM5MjQsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlVG91Y2hFdmVudChjb25zCiAgICAgICAgIERvY3VtZW50KiBkb2MgPSB0b3VjaFRh
cmdldC0+dG9Ob2RlKCktPmRvY3VtZW50KCk7CiAgICAgICAgIGlmICghZG9jKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmICghZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkp
CisgICAgICAgIGlmICghZG9jLT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBkb2MtPmZyYW1lKCk7CiAg
ICAgICAgIGlmICghdGFyZ2V0RnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNp
b24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEZyYW1lOjpzZXREb2N1bWVudChQYXNzUmVmUHRy
PERvY3VtCiAgICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPm1haW5GcmFtZSgpID09IHRoaXMpIHsK
ICAgICAgICAgbm90aWZ5Q2hyb21lQ2xpZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQo
KTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICAgICBpZiAobV9kb2MgJiYgbV9kb2Mt
PnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAgICAgaWYgKG1fZG9jICYmIG1fZG9jLT5o
YXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAgICAgICAgIG1fcGFnZS0+Y2hyb21lKCktPmNs
aWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKIAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgpAQCAtMTgxLDYgKzE4Miw1NiBAQCBSZWdpb24gU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNvbXB1dGVOb25GCiAgICAgcmV0dXJuIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
OwogfQogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorc3RhdGljIHZvaWQgYWNj
dW11bGF0ZVJlbmRlcmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgcmVjdHMuYXBwZW5kKGVu
Y2xvc2luZ0ludFJlY3QocmVuZGVyZXItPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KDAp
KSk7CisgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICAgICAgY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcik7CisgICAgICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGJsb2NrLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgYWNjdW11bGF0ZVJlbmRlcmVy
VG91Y2hFdmVudFRhcmdldFJlY3RzKHJlY3RzLCBjaGlsZCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBhY2N1bXVsYXRlRG9jdW1lbnRFdmVudFRhcmdldFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9jdW1lbnQp
OworICAgIGlmICghZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1bWVudC0+
dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5iZWdpbigpOyBpdGVyICE9IHRhcmdldHMtPmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPmtleSA9PSBkb2N1bWVudCkgeworICAgICAg
ICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAg
ICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHZpZXctPmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KDApKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXRlci0+a2V5LT5pc0RvY3VtZW50Tm9kZSgpICYmIGl0ZXItPmtl
eSAhPSBkb2N1bWVudCkgeworICAgICAgICAgICAgYWNjdW11bGF0ZURvY3VtZW50RXZlbnRUYXJn
ZXRSZWN0cyhyZWN0cywgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpdGVyLT5rZXkpKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBpdGVyLT5rZXktPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBhY2N1bXVsYXRl
UmVuZGVyZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMocmVjdHMsIHJlbmRlcmVyKTsKKyAgICB9Cit9
CisjZW5kaWYKKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZUFic29sdXRlVG91
Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgVmVjdG9yPEludFJl
Y3Q+JiByZWN0cykKK3sKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworI2lmIEVOQUJMRShUT1VDSF9F
VkVOVF9UUkFDS0lORykKKyAgICBpZiAoIWRvY3VtZW50LT52aWV3KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBUaGVzZSByZWN0cyB3b24ndCBiZSBwcm9wZXJseSB1cGRhdGVk
IGlmIHRoZSByZW5kZXJlcnMgYXJlIGluIGEgc3ViLXRyZWUgdGhhdCBzY3JvbGxzLgorICAgIGFj
Y3VtdWxhdGVEb2N1bWVudEV2ZW50VGFyZ2V0UmVjdHMocmVjdHMsIGRvY3VtZW50KTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRpZgorfQorCiB1bnNpZ25lZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50KCkK
IHsKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50ID0gMDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CkBAIC01MCw2ICs1MSw3IEBAIHR5cGVkZWYgdWludDY0X3QgU2Nyb2xsaW5nTm9kZUlEOwog
CiBlbnVtIFNjcm9sbGluZ05vZGVUeXBlIHsgU2Nyb2xsaW5nTm9kZSwgRml4ZWROb2RlIH07CiAK
K2NsYXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBH
cmFwaGljc0xheWVyOwpAQCAtMTQ5LDcgKzE1MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdy
YXBoaWNzTGF5ZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJJc0NvbnRhaW5lckZv
ckZpeGVkUG9zaXRpb25MYXllcnMoR3JhcGhpY3NMYXllciosIGJvb2wpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqLCBi
b29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdl
KGNvbnN0IERvY3VtZW50KikgeyB9CiAKKyAgICB2b2lkIGNvbXB1dGVBYnNvbHV0ZVRvdWNoRXZl
bnRUYXJnZXRSZWN0cyhjb25zdCBEb2N1bWVudCosIFZlY3RvcjxJbnRSZWN0PiYpOwogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEz
Njk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDI1
IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWUKICAgICAvLyBhbGwg
c2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFtZXMsIG92ZXJmbG93IGRpdnMgYW5kIGxp
c3QgYm94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlmIHRoZQogICAgIC8vIGZyYW1lIHZp
ZXcgd2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5vdCB0aGUgbWFpbiBmcmFtZS4KICAgICBS
ZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9pbnQoKSk7CisgICAgVmVjdG9yPEludFJl
Y3Q+IHRvdWNoRXZlbnRUYXJnZXRSZWN0czsKKyAgICBjb21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50
VGFyZ2V0UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSwgdG91Y2hFdmVudFRh
cmdldFJlY3RzKTsKICAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbik7CisgICAgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKHRvdWNoRXZlbnRUYXJn
ZXRSZWN0cyk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6dG91Y2hF
dmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAg
ICAvLyBXYWl0IHVudGlsIGFmdGVyIGxheW91dCB0byB1cGRhdGUuCisgICAgaWYgKG1fcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJl
Zm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xs
TGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygp
KSk7CisgICAgaWYgKG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICBWZWN0b3I8
SW50UmVjdD4gdG91Y2hFdmVudFRhcmdldFJlY3RzOworICAgICAgICBjb21wdXRlQWJzb2x1dGVU
b3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1lbnQsIHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7Cisg
ICAgICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOwor
ICAgIH0KIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdS
b290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC0yMDksNiArMjI3LDE4
IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0Tm8KICAgICB9CiB9CiAK
K3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVudFRhcmdldFJl
Y3RzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgYWJzb2x1dGVIaXRUZXN0UmVjdHMpCit7CisgICAg
Ly8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9y
ZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xsTGF5
ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7
CisgICAgaWYgKG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICBXZWJWZWN0b3I8
V2ViUmVjdD4gd2ViUmVjdHMoYWJzb2x1dGVIaXRUZXN0UmVjdHMuc2l6ZSgpKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhYnNvbHV0ZUhpdFRlc3RSZWN0cy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIHdlYlJlY3RzW2ldID0gYWJzb2x1dGVIaXRUZXN0UmVjdHNbaV07CisgICAg
ICAgIG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKS0+c2V0VG91Y2hFdmVudEhhbmRsZXJSZWdpb24o
d2ViUmVjdHMpOworICAgIH0KK30KKwogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnQpCiB7CiAgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIo
KSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCShyZXZpc2lvbiAxMzY5
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCwxNiBAQCBw
dWJsaWM6CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2Nyb2xsYWJsZSBs
YXllciBmb3IgdGhlIGdpdmVuIHNjcm9sbCBhcmVhIGNoYW5nZXMuCiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFw
aGljc0xheWVyKik7CiAKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRvdWNoIGhh
bmRsZXJzIGFyZSByZWdpc3RlcmVkLCByZW1vdmVkLCBvciBtb3ZlZC4KKyAgICB2aXJ0dWFsIHZv
aWQgdG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKGNvbnN0IERvY3VtZW50KikgT1ZFUlJJ
REU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5k
bGVyQ291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldFNo
b3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9s
bGluZ1JlYXNvbnMpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7
CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyAg
ICB2b2lkIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKTsK
ICAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOwogICAgIFBhc3NP
d25QdHI8V2ViS2l0OjpXZWJTY3JvbGxiYXJMYXllcj4gY3JlYXRlU2Nyb2xsYmFyTGF5ZXIoU2Ny
b2xsYmFyKiwgV2ViS2l0OjpXZWJMYXllciogc2Nyb2xsTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNj
cm9sbGJhckdyYXBoaWNzTGF5ZXIsIEZyYW1lVmlldyopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWxlY3RSdWxlRmVhdHVyZVNldC5oIgogI2luY2x1
ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0x
MTkxLDggKzExOTIsMzggQEAgdW5zaWduZWQgSW50ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNv
dQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPnRvdWNo
RXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3Vj
aEhhbmRsZXJzID0gZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCk7CisgICAgaWYgKCF0b3Vj
aEhhbmRsZXJzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsK
KyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b3Vj
aEhhbmRsZXJzLT5iZWdpbigpOyBpdGVyICE9IHRvdWNoSGFuZGxlcnMtPmVuZCgpOyArK2l0ZXIp
CisgICAgICAgIGNvdW50ICs9IGl0ZXItPnZhbHVlOworICAgIHJldHVybiBjb3VudDsKK30KKwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKK1Bhc3NSZWZQdHI8Q2xpZW50UmVjdExp
c3Q+IEludGVybmFsczo6dG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKERvY3VtZW50KiBkb2N1
bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1l
bnQtPnZpZXcoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkgeworICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghZG9jdW1lbnQt
PnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIENsaWVudFJl
Y3RMaXN0OjpjcmVhdGUoKTsKKworICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiBhYnNvbHV0ZVJlY3RzOwor
ICAgIGRvY3VtZW50LT5wYWdlKCktPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCktPmNvbXB1dGVBYnNv
bHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhkb2N1bWVudCwgYWJzb2x1dGVSZWN0cyk7CisgICAg
VmVjdG9yPEZsb2F0UXVhZD4gYWJzb2x1dGVRdWFkcyhhYnNvbHV0ZVJlY3RzLnNpemUoKSk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlUmVjdHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGFic29sdXRlUXVhZHNbaV0gPSBGbG9hdFF1YWQoYWJzb2x1dGVSZWN0c1tpXSk7CisK
KyAgICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZShhYnNvbHV0ZVF1YWRzKTsKIH0KKyNl
bmRpZgogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBJbnRlcm5hbHM6Om5vZGVzRnJvbVJlY3QoRG9j
dW1lbnQqIGRvY3VtZW50LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2ln
bmVkIHJpZ2h0UGFkZGluZywKICAgICB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBs
ZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDkgQEAgcHVibGljOgogCiAgICAgdW5z
aWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudChEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KERvY3VtZW50KiwgRXhjZXB0aW9u
Q29kZSYpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBQYXNzUmVmUHRy
PENsaWVudFJlY3RMaXN0PiB0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoRG9jdW1lbnQqLCBF
eGNlcHRpb25Db2RlJik7CisjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5vZGVz
RnJvbVJlY3QoRG9jdW1lbnQqLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVu
c2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICAgICAgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5z
aWduZWQgbGVmdFBhZGRpbmcsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIGJvb2wgYWxsb3dTaGFkb3dD
b250ZW50LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsOSBAQAogCiAgICAg
dW5zaWduZWQgbG9uZyB3aGVlbEV2ZW50SGFuZGxlckNvdW50KGluIERvY3VtZW50IGRvY3VtZW50
KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgdW5zaWduZWQgbG9uZyB0b3VjaEV2ZW50SGFu
ZGxlckNvdW50KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7Cisj
aWYgZGVmaW5lZChFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpICYmIEVOQUJMRV9UT1VDSF9F
VkVOVF9UUkFDS0lORworICAgIENsaWVudFJlY3RMaXN0IHRvdWNoRXZlbnRUYXJnZXRDbGllbnRS
ZWN0cyhpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOworI2VuZGlm
CiAKICAgICBOb2RlTGlzdCBub2Rlc0Zyb21SZWN0KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBs
b25nIHgsIGluIGxvbmcgeSwKICAgICAgICAgaW4gdW5zaWduZWQgbG9uZyB0b3BQYWRkaW5nLCBp
biB1bnNpZ25lZCBsb25nIHJpZ2h0UGFkZGluZywgaW4gdW5zaWduZWQgbG9uZyBib3R0b21QYWRk
aW5nLCBpbiB1bnNpZ25lZCBsb25nIGxlZnRQYWRkaW5nLApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTItMDcgIExldmkg
V2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVj
dGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRW5hYmxpbmcgdG91Y2ggZXZlbnQgdGFyZ2V0IHJlZ2lvbiB0cmFja2lu
Zy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNv
bnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBs
OjpyZXF1ZXN0VG91Y2hFdmVudFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250
YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6CisKIDIwMTItMTItMDcgIE1hcmsg
UGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92
ZSBXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSBvdXQgb2YgUGxhdGZvcm1TdXBwb3J0CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShyZXZpc2lvbiAxMzY5NjgpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEx
Nyw2ICsxMTcsNyBAQAogICAgICAgJ0VOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEnLAogICAgICAg
J0VOQUJMRV9UT1VDSF9FVkVOVFM9PChlbmFibGVfdG91Y2hfZXZlbnRzKScsCiAgICAgICAnRU5B
QkxFX1RPVUNIX0lDT05fTE9BRElORz08KGVuYWJsZV90b3VjaF9pY29uX2xvYWRpbmcpJywKKyAg
ICAgICdFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkc9PChlbmFibGVfdG91Y2hfZXZlbnRzKScs
CiAgICAgICAnRU5BQkxFX1RPVUNIX1NMSURFUj0xJywKICAgICAgICdFTkFCTEVfVVNFUl9USU1J
Tkc9MScsCiAgICAgICAnRU5BQkxFX1Y4X1NDUklQVF9ERUJVR19TRVJWRVI9MScsCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJ
bXBsLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCw5ICs1MzAs
OSBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcXVlc3RUb3VjCiAgICAgICAgIHJl
dHVybjsKICAgICBtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOwogICAgIGlm
IChtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSAhPSBUb3VjaEV2ZW50UmVxdWVzdFR5cGVOb25lKQot
ICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7
CisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIo
bV9lbGVtZW50KTsKICAgICBlbHNlCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlk
UmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogfQogCiB2b2lkIFdlYlBs
dWdpbkNvbnRhaW5lckltcGw6OnNldFdhbnRzV2hlZWxFdmVudHMoYm9vbCB3YW50c1doZWVsRXZl
bnRzKQpAQCAtNjg1LDcgKzY4NSw3IEBAIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVn
aW5Db250YWkKICNlbmRpZgogCiAgICAgaWYgKG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRv
dWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3BsdWdpbkxvYWRPYnNlcnZlcnMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIG1fcGx1Z2luTG9hZE9ic2VydmVyc1tpXS0+Y2xlYXJQbHVnaW5Db250YWluZXIoKTsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEyLTA3ICBMZXZpIFdlaW50cmF1YiAgPGxl
dml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0
IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rpb24gaW4gdGhlIGNv
bXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1o
aXQtcmVjdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sOiBBZGRl
ZC4KKwogMjAxMi0xMi0wNyAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW0Nocm9taXVtXSBFbmFibGUgSW50ZWwncyBSZXNvdXJjZSBUaW1pbmcgdGVz
dHMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNo
L2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9y
LXRvdWNoLWhpdC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhp
dC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKK1RoaXMg
dGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBvc2l0
b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJlZS4gVGhlIG91dHB1dHRlZCBy
ZWN0cyBzaG91bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQg
ZWxlbWVudHMuCisKK25vcm1hbEZsb3dbMF06ICg4LCA3MiwgNzg0LCAxMCkKK25vcm1hbEZsb3db
MV06ICg4LCA3MiwgNzg0LCAxMCkKK25vcm1hbEZsb3dbMl06ICgxMjgsIDcyLCAzMCwgMTApCitu
b3JtYWxGbG93WzNdOiAoOCwgNzIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxkQ29udGFpbmVyWzBd
OiAoOCwgMTYyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclsxXTogKDgsIDE2Miwg
Nzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMl06ICg4LCAxNjIsIDc4NCwgMTApCith
YnNvbHV0ZUNoaWxkQ29udGFpbmVyWzNdOiAoMTE4LCAzMDAsIDE0MCwgMTApCithYnNvbHV0ZUNo
aWxkQ29udGFpbmVyWzRdOiAoMTE4LCAzMDAsIDE0MCwgMTApCityZWxhdGl2ZUNoaWxkQ29udGFp
bmVyWzBdOiAoOCwgMjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclsxXTogKDgs
IDI3MiwgNzg0LCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMl06ICg4LCAyNzIsIDc4NCwg
MTApCityZWxhdGl2ZUNoaWxkQ29udGFpbmVyWzNdOiAoMTI4LCA0NzIsIDE0MCwgMTApCitvdmVy
aGFuZ2luZ0NvbnRhaW5lclswXTogKDgsIDM2MiwgNzg0LCAxMCkKK292ZXJoYW5naW5nQ29udGFp
bmVyWzFdOiAoOCwgMzYyLCAxMTAsIDgwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMl06ICg4LCAz
NjIsIDExMCwgODApCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzBdOiAoNjIsIDQyMSwgNjYx
LCAzMikKK3RyYW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMV06ICg2MiwgNDIxLCA2NjEsIDMyKQor
dHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lclsyXTogKDgsIDQzMiwgNzY5LCAxMCkKK2NvbnRpbnVh
dGlvblswXTogKDEwOCwgNTAyLCAxMDAsIDEwKQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZl
bnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3Np
dG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3RyYW5zZm9ybWVkQ2hp
bGQgeworCS13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUzZCgwLjIsIDEsIDAsIDM1Z3JhZCk7Cit9
CisjYWJzb2x1dGVDaGlsZCB7CisJcG9zaXRpb246IGFic29sdXRlOworCXRvcDogMzAwcHg7Cit9
CisjcmVsYXRpdmVDaGlsZCB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCXRvcDogMjAwcHg7Cit9
Cisjb3ZlcmhhbmdpbmdDb250YWluZXIgeworCWhlaWdodDogMTBweDsKK30KKyNvdmVyaGFuZ2lu
Z0Zsb2F0aW5nQ2hpbGQgeworCXdpZHRoOiAxMDBweDsKKwlmbG9hdDogbGVmdDsKK30KKyN0ZXN0
cyB7CisJZm9udDogMTBweCBBaGVtOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3RzIHZlcmlmaWVzIHRoZSBoaXQgdGVzdCByZWdpb25z
IGdpdmVuIHRvIHRoZSBjb21wb3NpdG9yLiBJdCBjYW4gb25seSBiZSBydW4gaW4gRHVtcFJlbmRl
clRyZWUuCitUaGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRlc3QgcmVn
aW9ucyBvZiBhbGwgdGhlIGxpc3RlZCBlbGVtZW50cy48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPGRpdiBpZD0idGVzdHMiPgorCTxkaXYgaWQ9Im5vcm1hbEZsb3ciPgorCQlMb3Jl
bSBpcHN1bQorCQk8c3Bhbj5zdW08L3NwYW4+LgorCTwvZGl2PgorCTxkaXYgaWQ9ImFic29sdXRl
Q2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0iYWJzb2x1dGVDaGls
ZCI+QWJzb2x1dGUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0icmVsYXRpdmVDaGls
ZENvbnRhaW5lciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlkPSJyZWxhdGl2ZUNoaWxkIj5S
ZWxhdGl2ZSBjaGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0NvbnRh
aW5lciI+CisJCTxkaXYgaWQ9Im92ZXJoYW5naW5nRmxvYXRpbmdDaGlsZCI+T3Zlcmhhbmdpbmcg
ZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxv
YXQ8L2Rpdj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyIj4K
KwkJPGRpdiBpZD0idHJhbnNmb3JtZWRDaGlsZCI+VHJhbnNmb3JtZWQ8L2Rpdj4KKwk8L2Rpdj4K
Kwk8ZGl2PgorCQk8YiBpZD0iY29udGludWF0aW9uIj5UaGlzIGIgdGFnCisJCTxkaXY+Y2F1c2Vz
IGE8L2Rpdj4KKwkJY29udGludWF0aW9uPC9iPgorCTwvZGl2PgorPC9kaXY+Cis8c2NyaXB0Pgor
aWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKKwlyZXR1cm47CisKK3dpbmRvdy50ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbGlzdGVuZXIoKSB7IH0KKworZnVuY3Rpb24gbG9nKG1z
ZykgeworCXZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCWRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7CisgICAgc3Bh
bi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24gc29ydFJlY3RzKGEs
IGIpIHsKKwlyZXR1cm4gYS50b3AgLSBiLnRvcDsKK30KKworZnVuY3Rpb24gbG9nUmVjdHMoaWQp
IHsKKwllbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCWVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7CisJcmVjdHMgPSB3
aW5kb3cuaW50ZXJuYWxzLnRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhkb2N1bWVudCk7CisJ
dmFyIHNvcnRlZFJlY3RzID0gbmV3IEFycmF5KCk7CisJZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0
cy5sZW5ndGg7ICsraSkKKwkJc29ydGVkUmVjdHNbaV0gPSByZWN0c1tpXTsKKwlzb3J0ZWRSZWN0
cy5zb3J0KHNvcnRSZWN0cyk7CisJZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7ICsr
aSkKKwkJbG9nKGlkICsgIlsiICsgaSArICJdOiAoIiArIHNvcnRlZFJlY3RzW2ldLmxlZnQgKyAi
LCAiICsgc29ydGVkUmVjdHNbaV0udG9wICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLndpZHRoICsg
IiwgIiArIHNvcnRlZFJlY3RzW2ldLmhlaWdodCArICIpIik7CisJZWxlbWVudC5yZW1vdmVFdmVu
dExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNlKTsKK30KKworbG9nUmVjdHMo
Im5vcm1hbEZsb3ciKTsKK2xvZ1JlY3RzKCJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIik7Citsb2dS
ZWN0cygicmVsYXRpdmVDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoIm92ZXJoYW5naW5nQ29u
dGFpbmVyIik7Citsb2dSZWN0cygidHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lciIpOworbG9nUmVj
dHMoImNvbnRpbnVhdGlvbiIpOworCit2YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0ZXN0cyIpOwordGVzdENvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KHRlc3RDb250YWluZXIpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178874</attachid>
            <date>2012-12-11 14:19:25 -0800</date>
            <delta_ts>2012-12-12 16:14:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121211141647.patch</filename>
            <type>text/plain</type>
            <size>33603</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDEyLTEyLTA3ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
dHJhY2tpbmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rp
b24gaW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGluZyBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCB0YXJnZXQg
cmVnaW9ucyBmb3IgdGhlIHB1cnBvc2Ugb2YgcGVyZm9ybWluZyBpbml0aWFsIGhpdCB0ZXN0aW5n
CisgICAgICAgIGluIHRoZSBjb21wb3NpdG9yIHRvIGF2b2lkIGJsb2NraW5nIHNjcm9sbGluZyBv
biB0aGUgbWFpbiB0aHJlYWQgd2hpbGUgd2FpdGluZyB0byBoaXQgdGVzdCBldmVudHMgdGhhdAor
ICAgICAgICBhcmVuJ3Qgb2NjdXJpbmcgaW4gcmVnaW9ucyB3aXRoIGhhbmRsZXJzLiBUaGlzIGlz
IGluaXRpYWxseSBiZWluZyBkb25lIHRvIGF2b2lkIGhhdmluZyB0byBnbyB0byB0aGUgbWFpbgor
ICAgICAgICB0aHJlYWQgd2hlbiBzY3JvbGxpbmcgYnkgZmxpY2tpbmcgb24gdG91Y2ggZGV2aWNl
cyB3aGVuIHRoZSBmbGljayBvY2N1cnMgb3V0c2lkZSBhIHRyYWNrZWQgdG91Y2ggZXZlbnQKKyAg
ICAgICAgcmVnaW9uLiBUaGlzIHBhdGNoIGluY2x1ZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byB0
dXJuIHRoaXMgb24gaW4gQ2hyb21pdW0uCisKKyAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzIGdv
YWwsIERvY3VtZW50IHdpbGwgbm93IGtlZXAgYSBjb3VudGVkIGhhc2ggc2V0IG9mIG5vZGVzIHdp
dGggdG91Y2ggZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgaW5zdGVhZCBvZiBvbmx5IGFuIHVuc2ln
bmVkIGludGVnZXIgb2YgdGhlIHRvdGFsIGNvdW50LiBTY3JvbGxpbmdDb29yZGluYXRvciB0aGVu
IHVwZGF0ZXMgdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgd2hlbiBuZXcgdG91Y2ggZXZlbnQgaGFu
ZGxlcnMgYXJlIHJlZ2lzdGVyZWQgb3IgcmVtb3ZlZCwgb3IgYWZ0ZXIgbGF5b3V0IG11Y2ggbGlr
ZSBob3cKKyAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25zIGFyZSBjdXJyZW50bHkgdHJh
Y2tlZC4KKworICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIHdpbGwgbm90IHByb3Blcmx5IHVw
ZGF0ZSB0aGUgaGl0IHRlc3QgcmVjdHMgd2hlbiB0aGUgcmVuZGVyZXJzIGFyZSBpbnNpZGUgYSBz
dWItCisgICAgICAgIHRyZWUgdGhhdCBzY3JvbGxzLgorCisgICAgICAgIFRlc3Q6IHBsYXRmb3Jt
L2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0
bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6RG9jdW1lbnQpOiBBZGRlZCBhIEhhc2hDb3VudGVkU2V0IG9mIHRvdWNoIHRhcmdldCBu
b2Rlcy4gTm90ZTogRE9NV2luZG93IHRhcmdldHMKKyAgICAgICAgYXJlIHN0b3JlZCBhcyB0aGUg
RG9jdW1lbnQgdGhleSBwb2ludCB0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRB
ZGRUb3VjaEV2ZW50SGFuZGxlcik6IENoYW5nZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgaGFuZGxl
ciBpbnN0ZWFkIG9mIGEgY291bnQsIGFuZAorICAgICAgICB0byB1cGRhdGUgdGhlIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yIHdpdGggdGhlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Omhhc1RvdWNoRXZlbnRIYW5kbGVy
cyk6IEl0J3Mgbm8gbG9uZ2VyIE8oMSkgdG8gZ2V0IHRoZSBjb3VudCBvZiB0b3VjaCBoYW5kbGVy
cywgc28KKyAgICAgICAgZXhwb3NlIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvciBub3QuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudFRhcmdldHMpOgorICAgICAgICAqIGRv
bS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpZE1vdmVUb05ld0RvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRG
cmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZUJhc2U6OnJlc3RvcmUpOgor
ICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIpOiBBZGQg
dGhlIERvY3VtZW50IHRvIHRoZSB0b3VjaCB0YXJnZXQgc2V0IGluc3RlYWQgb2YgRE9NV2luZG93
LgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKTogV2Fs
ayB0aGUgcmVuZGVyZXJzIGZvciBldmVudCBoYW5kbGVyCisgICAgICAgIG5vZGVzIGFuZCBnZW5l
cmF0ZSB0aGUgYWJzb2x1dGUgaGl0IHRlc3RpbmcgcmVjdHMuCisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKTogSG9vayB0byBw
YXNzIGFsb25nIHRoZSBoaXQgdGVzdCByZWN0cyB0bworICAgICAgICB0aGUgc2Nyb2xsaW5nIHRy
ZWUvY29tcG9zaXRvci4KKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1l
Vmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2No
cm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCk6IENo
YW5nZWQgdG8gZG8gdGhlIHdvcmsgdG8gY2FsY3VsYXRlIHRoZSBhY3R1YWwgY291bnQgc2luY2UK
KyAgICAgICAgaXQncyBubyBsb25nZXIgc3RvcmVkIGFzIGFuIGludCBpbiBEb2N1bWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKToK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAoSW50ZXJuYWxzKToKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTItMTItMDcgIFJvYmVydCBIb2dh
biAgPHJvYmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEyNzE2Myk6IENv
bnRlbnQgaXMgb2Zmc2V0IHRvIHRoZSByaWdodCBhdCByZWEucnUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk2LDkgKzQ5Niw2IEBAIERvY3VtZW50OjpEb2N1
bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEsKICAgICAsIG1fd3JpdGVSZWN1cnNpb25Jc1Rvb0Rl
ZXAoZmFsc2UpCiAgICAgLCBtX3dyaXRlUmVjdXJzaW9uRGVwdGgoMCkKICAgICAsIG1fd2hlZWxF
dmVudEhhbmRsZXJDb3VudCgwKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLCBtX3Rv
dWNoRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNlbmRpZgogICAgICwgbV9wZW5kaW5nVGFza3NUaW1l
cih0aGlzLCAmRG9jdW1lbnQ6OnBlbmRpbmdUYXNrc1RpbWVyRmlyZWQpCiAgICAgLCBtX3NjaGVk
dWxlZFRhc2tzQXJlU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV92aXN1YWxVcGRhdGVzQWxsb3dl
ZCh0cnVlKQpAQCAtNTU5OSwzMyArNTU5Niw1NyBAQCB2b2lkIERvY3VtZW50OjpkaWRSZW1vdmVX
aGVlbEV2ZW50SGFuZGxlCiAgICAgd2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQodGhpcyk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCkKK3ZvaWQgRG9j
dW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqIGhhbmRsZXIpCiB7CiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKLSAgICArK21fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsKLSAgICBp
ZiAobV90b3VjaEV2ZW50SGFuZGxlckNvdW50ID4gMSkKKyAgICBpZiAoIW1fdG91Y2hFdmVudFRh
cmdldHMuZ2V0KCkpCisgICAgICAgIG1fdG91Y2hFdmVudFRhcmdldHMgPSBhZG9wdFB0cihuZXcg
VG91Y2hFdmVudFRhcmdldFNldCk7CisgICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+YWRkKGhhbmRs
ZXIpOworICAgIGlmIChEb2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgeworICAg
ICAgICBwYXJlbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOworICAgIH0KKyAgICBpZiAo
UGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkgeworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFD
S0lORykKKyAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+dG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKHRoaXMpOworI2Vu
ZGlmCisgICAgICAgIGlmIChtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkgPT0gMSkKKyAgICAg
ICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwor
ICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCkKK3ZvaWQgRG9jdW1lbnQ6
OmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqIGhhbmRsZXIpCiB7CiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKLSAgICBBU1NFUlQobV90b3VjaEV2ZW50SGFuZGxlckNvdW50KTsKLSAg
ICAtLW1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsKLSAgICBpZiAobV90b3VjaEV2ZW50SGFuZGxl
ckNvdW50KQorICAgIGlmICghbV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkKICAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVChtX3RvdWNoRXZlbnRUYXJnZXRzLT5jb250YWlucyhoYW5kbGVyKSk7
CisgICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+cmVtb3ZlKGhhbmRsZXIpOworICAgIGlmIChEb2N1
bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgeworICAgICAgICBwYXJlbnQtPmRpZFJl
bW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAg
ICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJl
dHVybjsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgaWYgKFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT50b3VjaEV2ZW50VGFyZ2V0
UmVjdHNEaWRDaGFuZ2UodGhpcyk7CisjZW5kaWYKKyAgICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0
cy0+c2l6ZSgpKQorICAgICAgICByZXR1cm47CiAgICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUg
PSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVy
c2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1
bWVudCgpLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlmIChmcmFtZS0+ZG9j
dW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+
bmVlZFRvdWNoRXZlbnRzKGZhbHNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIp
OwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzY5Njgp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjA2
LDYgKzIwNiw4IEBAIGVudW0gTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIHsKIH07CiBjb25zdCBp
bnQgbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlcyA9IEludmFsaWRhdGVPbkFueUF0dHJDaGFu
Z2UgKyAxOwogCit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PE5vZGUqPiBUb3VjaEV2ZW50VGFyZ2V0
U2V0OworCiBjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlLCBwdWJsaWMgVHJl
ZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwm
IHVybCkKQEAgLTExMTUsMTMgKzExMTcsMTkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVtb3Zl
V2hlZWxFdmVudEhhbmRsZXIoKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdW5z
aWduZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVu
dEhhbmRsZXJDb3VudDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJzKCkgY29uc3Qg
eyByZXR1cm4gKG1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpID8gbV90b3VjaEV2ZW50VGFyZ2V0
cy0+c2l6ZSgpIDogZmFsc2U7IH0KICNlbHNlCi0gICAgdW5zaWduZWQgdG91Y2hFdmVudEhhbmRs
ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5k
bGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICB2b2lkIGRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KCk7CisgICAgdm9pZCBkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisgICAgdm9pZCBk
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQorICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkg
Y29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKTsgfQorI2Vsc2UKKyAgICBj
b25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKyNlbmRpZgogCiAgICAgYm9vbCB2aXN1YWxVcGRhdGVzQWxsb3dlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQ7IH0KIApAQCAtMTQ5OSw3ICsxNTA3LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB1bnNpZ25lZCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQ7
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNpZ25lZCBtX3RvdWNoRXZlbnRIYW5k
bGVyQ291bnQ7CisgICAgT3duUHRyPFRvdWNoRXZlbnRUYXJnZXRTZXQ+IG1fdG91Y2hFdmVudFRh
cmdldHM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1OSw4ICsyMjU5LDggQEAgdm9pZCBOb2Rl
OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdG91Y2hFdmVudE5hbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEV2ZW50TGlz
dGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGdldEV2ZW50TGlzdGVuZXJzKHRvdWNoRXZlbnROYW1l
c1tpXSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbGlzdGVuZXJzLnNpemUoKTsg
KytqKSB7Ci0gICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRs
ZXIoKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7
CisgICAgICAgICAgICBvbGREb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhp
cyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlz
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI4OSw3ICsyMjg5LDcgQEAgc3RhdGljIGlubGlu
ZSBib29sIHRyeUFkZEV2ZW50TGlzdGVuZXIoTgogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRk
V2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91
Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRI
YW5kbGVyKHRhcmdldE5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjMxMSw3
ICsyMzExLDcgQEAgc3RhdGljIGlubGluZSBib29sIHRyeVJlbW92ZUV2ZW50TGlzdGVuZQogICAg
ICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAg
ICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAg
ZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAg
ICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRhcmdldE5vZGUpOwogICAg
IH0KIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRG
cmFtZS5jcHAJKHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2Fj
aGVkRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBDYWNo
ZWRGcmFtZUJhc2U6OnJlc3RvcmUoKQogICAgIG1fZG9jdW1lbnQtPmVucXVldWVQb3BzdGF0ZUV2
ZW50KGhpc3RvcnlJdGVtICYmIGhpc3RvcnlJdGVtLT5zdGF0ZU9iamVjdCgpID8gaGlzdG9yeUl0
ZW0tPnN0YXRlT2JqZWN0KCkgOiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsK
ICAgICAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChtX2RvY3VtZW50LT50b3Vj
aEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmhhc1RvdWNoRXZlbnRI
YW5kbGVycygpKQogICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQo
KS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcg
KzE2Myw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKICAgICAgICAg
ZG9jdW1lbnQoKS0+Zm9ybUNvbnRyb2xsZXIoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92
ZUJ1dHRvbih0aGlzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1Rv
dWNoRXZlbnRIYW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcigpOworICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxl
cih0aGlzKTsKICNlbmRpZgogfQogCkBAIC00ODksOSArNDg5LDkgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVyID0gbV9p
bnB1dFR5cGUtPmhhc1RvdWNoRXZlbnRIYW5kbGVyKCk7CiAgICAgaWYgKGhhc1RvdWNoRXZlbnRI
YW5kbGVyICE9IG1faGFzVG91Y2hFdmVudEhhbmRsZXIpIHsKICAgICAgIGlmIChoYXNUb3VjaEV2
ZW50SGFuZGxlcikKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIo
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAg
ICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRoaXMp
OwogICAgICAgbV9oYXNUb3VjaEV2ZW50SGFuZGxlciA9IGhhc1RvdWNoRXZlbnRIYW5kbGVyOwog
ICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24g
MTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTg0LDcgKzE1ODQsNyBAQCBib29sIERPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hl
ZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRXaGVlbEV2ZW50SGFuZGxlcigp
OwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5
cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7Cisg
ICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoZG9jdW1lbnQpOwog
ICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCkK
ICAgICAgICAgICAgIGRpZEFkZFN0b3JhZ2VFdmVudExpc3RlbmVyKHRoaXMpOwogICAgIH0KQEAg
LTE2MTUsNyArMTYxNSw3IEBAIGJvb2wgRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKGNv
bnMKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50
KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7CiAg
ICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkp
Ci0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihkb2N1bWVudCk7
CiAgICAgfQogCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMzY5Njgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5MDQsNyArMzkwNCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50
KGNvbnMKICAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBub2RlLT5kb2N1bWVudCgpOwogICAg
ICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICAgICAgaWYgKCFk
b2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuc2V0KHRvdWNoUG9p
bnRUYXJnZXRLZXksIG5vZGUpOwpAQCAtMzkyNCw3ICszOTI0LDcgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29ucwogICAgICAgICBEb2N1bWVudCogZG9jID0gdG91Y2hU
YXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICBpZiAoIWRvYykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgp
KQorICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gZG9jLT5mcmFtZSgpOwog
ICAgICAgICBpZiAoIXRhcmdldEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlz
aW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBGcmFtZTo6c2V0RG9jdW1lbnQoUGFzc1JlZlB0
cjxEb2N1bQogICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKSA9PSB0aGlzKSB7
CiAgICAgICAgIG5vdGlmeUNocm9tZUNsaWVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2Vk
KCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAgICAgaWYgKG1fZG9jICYmIG1fZG9j
LT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+
aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBtX3BhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKQEAgLTE4MSw2ICsxODIsNTQgQEAgUmVnaW9uIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpjb21wdXRlTm9uRgogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bjsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKK3N0YXRpYyB2b2lkIGFj
Y3VtdWxhdGVSZW5kZXJlclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyBPKE5eMikgYXMgaXQgd2Fsa3MgdGhlIHRyZWUgdG8gdGhlIHJvb3QgZm9yIGV2
ZXJ5IHJlbmRlcmVyLiBSZW5kZXJHZW9tZXRyeU1hcCB3b3VsZCBmaXggdGhpcy4KKyAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlci0+Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoMCkpKTsKKyAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkgeworICAg
ICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKTsK
KyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gYmxvY2stPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBhY2N1bXVs
YXRlUmVuZGVyZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMocmVjdHMsIGNoaWxkKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVEb2N1bWVudEV2ZW50VGFyZ2V0UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VS
VChkb2N1bWVudCk7CisgICAgaWYgKCFkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdGFyZ2V0cyA9
IGRvY3VtZW50LT50b3VjaEV2ZW50VGFyZ2V0cygpOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdl
dFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRhcmdldHMtPmJlZ2luKCk7IGl0ZXIgIT0gdGFy
Z2V0cy0+ZW5kKCk7ICsraXRlcikgeworICAgICAgICBjb25zdCBOb2RlKiB0b3VjaFRhcmdldCA9
IGl0ZXItPmtleTsKKyAgICAgICAgaWYgKHRvdWNoVGFyZ2V0ID09IGRvY3VtZW50KSB7CisgICAg
ICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkpCisg
ICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3Qodmlldy0+Y2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoMCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh0b3VjaFRhcmdldC0+aXNEb2N1bWVudE5vZGUoKSAmJiB0b3Vj
aFRhcmdldCAhPSBkb2N1bWVudCkgeworICAgICAgICAgICAgYWNjdW11bGF0ZURvY3VtZW50RXZl
bnRUYXJnZXRSZWN0cyhyZWN0cywgc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnQqPih0b3VjaFRh
cmdldCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRvdWNoVGFyZ2V0LT5yZW5kZXJlcigpKQorICAgICAg
ICAgICAgYWNjdW11bGF0ZVJlbmRlcmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlY3RzLCByZW5k
ZXJlcik7CisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlQWJz
b2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0
b3I8SW50UmVjdD4mIHJlY3RzKQoreworICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgaWYgKCFk
b2N1bWVudC0+dmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhlc2Ug
cmVjdHMgd29uJ3QgYmUgcHJvcGVybHkgdXBkYXRlZCBpZiB0aGUgcmVuZGVyZXJzIGFyZSBpbiBh
IHN1Yi10cmVlIHRoYXQgc2Nyb2xscy4KKyAgICBhY2N1bXVsYXRlRG9jdW1lbnRFdmVudFRhcmdl
dFJlY3RzKHJlY3RzLCBkb2N1bWVudCk7Cit9CisjZW5kaWYKKwogdW5zaWduZWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAg
ICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJl
dmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpA
QCAtNTAsNiArNTEsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAogZW51
bSBTY3JvbGxpbmdOb2RlVHlwZSB7IFNjcm9sbGluZ05vZGUsIEZpeGVkTm9kZSB9OwogCitjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhp
Y3NMYXllcjsKQEAgLTE0OSw3ICsxNTEsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhp
Y3NMYXllciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklzQ29udGFpbmVyRm9yRml4
ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UoY29u
c3QgRG9jdW1lbnQqKSB7IH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAg
ICB2b2lkIGNvbXB1dGVBYnNvbHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBEb2N1bWVu
dCosIFZlY3RvcjxJbnRSZWN0PiYpOworI2VuZGlmCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3IoUGFnZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmNwcAkocmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsMzAgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtOjpmcmFtZQogICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0
IHdhcyB1cGRhdGVkIGlzIG5vdCB0aGUgbWFpbiBmcmFtZS4KICAgICBSZWdpb24gbm9uRmFzdFNj
cm9sbGFibGVSZWdpb24gPSBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5t
YWluRnJhbWUoKSwgSW50UG9pbnQoKSk7CiAgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24o
bm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lO
RykKKyAgICBWZWN0b3I8SW50UmVjdD4gdG91Y2hFdmVudFRhcmdldFJlY3RzOworICAgIGNvbXB1
dGVBYnNvbHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1
bWVudCgpLCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOworICAgIHNldFRvdWNoRXZlbnRUYXJnZXRS
ZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6dG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcp
CisgICAgLy8gV2FpdCB1bnRpbCBhZnRlciBsYXlvdXQgdG8gdXBkYXRlLgorICAgIGlmIChtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFdlIHdvbid0IG5lY2Vzc2FyaWx5IGdldCBhIHNldFNjcm9sbExheWVyKCkgY2Fs
bCBiZWZvcmUgdGhpcyBvbmUsIHNvIGdyYWIgdGhlIHJvb3Qgb3Vyc2VsdmVzLgorICAgIHNldFNj
cm9sbExheWVyKHNjcm9sbExheWVyRm9yRnJhbWVWaWV3KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKSkpOworICAgIGlmIChtX3ByaXZhdGUtPnNjcm9sbExheWVyKCkpIHsKKyAgICAgICAgVmVj
dG9yPEludFJlY3Q+IHRvdWNoRXZlbnRUYXJnZXRSZWN0czsKKyAgICAgICAgY29tcHV0ZUFic29s
dXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50LCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHMp
OworICAgICAgICBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdldFJlY3Rz
KTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisjZW5kaWYKIH0K
IAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFtZVZpZXdSb290TGF5ZXJE
aWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC0yMDksNiArMjMzLDE4IEBAIHZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0Tm8KICAgICB9CiB9CiAKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgYWJzb2x1dGVIaXRUZXN0UmVjdHMpCit7CisgICAgLy8gV2Ugd29u
J3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9u
ZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xs
TGF5ZXJGb3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CisgICAgaWYg
KG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICBXZWJWZWN0b3I8V2ViUmVjdD4g
d2ViUmVjdHMoYWJzb2x1dGVIaXRUZXN0UmVjdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhYnNvbHV0ZUhpdFRlc3RSZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIHdlYlJlY3RzW2ldID0gYWJzb2x1dGVIaXRUZXN0UmVjdHNbaV07CisgICAgICAgIG1fcHJp
dmF0ZS0+c2Nyb2xsTGF5ZXIoKS0+c2V0VG91Y2hFdmVudEhhbmRsZXJSZWdpb24od2ViUmVjdHMp
OworICAgIH0KK30KKwogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVl
bEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCiB7CiAg
ICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJl
Zm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21p
dW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCShyZXZpc2lvbiAxMzY5NjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCwxNiBAQCBwdWJsaWM6CiAg
ICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2Nyb2xsYWJsZSBsYXllciBmb3Ig
dGhlIGdpdmVuIHNjcm9sbCBhcmVhIGNoYW5nZXMuCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGFi
bGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFwaGljc0xheWVy
Kik7CiAKKyAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRvdWNoIGhhbmRsZXJzIGFy
ZSByZWdpc3RlcmVkLCByZW1vdmVkLCBvciBtb3ZlZC4KKyAgICB2aXJ0dWFsIHZvaWQgdG91Y2hF
dmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKGNvbnN0IERvY3VtZW50KikgT1ZFUlJJREU7CisKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRG
b3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFVwZGF0
ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNv
bnMpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdm9p
ZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyAgICB2b2lkIHNl
dFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKTsKICAgICB2b2lk
IHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOwogICAgIFBhc3NPd25QdHI8V2Vi
S2l0OjpXZWJTY3JvbGxiYXJMYXllcj4gY3JlYXRlU2Nyb2xsYmFyTGF5ZXIoU2Nyb2xsYmFyKiwg
V2ViS2l0OjpXZWJMYXllciogc2Nyb2xsTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbGJhckdy
YXBoaWNzTGF5ZXIsIEZyYW1lVmlldyopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCIKICNpbmNsdWRlICJTZWxlY3RSdWxlRmVhdHVyZVNldC5oIgogI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0xMTkxLDggKzEx
OTIsMzggQEAgdW5zaWduZWQgSW50ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNvdQogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPnRvdWNoRXZlbnRIYW5k
bGVyQ291bnQoKTsKKyAgICBjb25zdCBUb3VjaEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEhhbmRsZXJz
ID0gZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCk7CisgICAgaWYgKCF0b3VjaEhhbmRsZXJz
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3Ig
KFRvdWNoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b3VjaEhhbmRsZXJz
LT5iZWdpbigpOyBpdGVyICE9IHRvdWNoSGFuZGxlcnMtPmVuZCgpOyArK2l0ZXIpCisgICAgICAg
IGNvdW50ICs9IGl0ZXItPnZhbHVlOworICAgIHJldHVybiBjb3VudDsKK30KKworI2lmIEVOQUJM
RShUT1VDSF9FVkVOVF9UUkFDS0lORykKK1Bhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEludGVy
bmFsczo6dG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKERvY3VtZW50KiBkb2N1bWVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXco
KSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghZG9jdW1lbnQtPnBhZ2UoKS0+
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0Ojpj
cmVhdGUoKTsKKworICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiBhYnNvbHV0ZVJlY3RzOworICAgIGRvY3Vt
ZW50LT5wYWdlKCktPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCktPmNvbXB1dGVBYnNvbHV0ZVRvdWNo
RXZlbnRUYXJnZXRSZWN0cyhkb2N1bWVudCwgYWJzb2x1dGVSZWN0cyk7CisgICAgVmVjdG9yPEZs
b2F0UXVhZD4gYWJzb2x1dGVRdWFkcyhhYnNvbHV0ZVJlY3RzLnNpemUoKSk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlUmVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGFi
c29sdXRlUXVhZHNbaV0gPSBGbG9hdFF1YWQoYWJzb2x1dGVSZWN0c1tpXSk7CisKKyAgICByZXR1
cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZShhYnNvbHV0ZVF1YWRzKTsKIH0KKyNlbmRpZgogCiBQ
YXNzUmVmUHRyPE5vZGVMaXN0PiBJbnRlcm5hbHM6Om5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqIGRv
Y3VtZW50LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0
UGFkZGluZywKICAgICB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGlu
ZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZp
c2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgd2hl
ZWxFdmVudEhhbmRsZXJDb3VudChEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB1bnNp
Z25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBQYXNzUmVmUHRyPENsaWVudFJl
Y3RMaXN0PiB0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoRG9jdW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7CisjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5vZGVzRnJvbVJlY3Qo
RG9jdW1lbnQqLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJp
Z2h0UGFkZGluZywKICAgICAgICAgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVm
dFBhZGRpbmcsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsOSBAQAogCiAgICAgdW5zaWduZWQg
bG9uZyB3aGVlbEV2ZW50SGFuZGxlckNvdW50KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMg
KERPTUV4Y2VwdGlvbik7CiAgICAgdW5zaWduZWQgbG9uZyB0b3VjaEV2ZW50SGFuZGxlckNvdW50
KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisjaWYgZGVmaW5l
ZChFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpICYmIEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFD
S0lORworICAgIENsaWVudFJlY3RMaXN0IHRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhpbiBE
b2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOworI2VuZGlmCiAKICAgICBO
b2RlTGlzdCBub2Rlc0Zyb21SZWN0KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBsb25nIHgsIGlu
IGxvbmcgeSwKICAgICAgICAgaW4gdW5zaWduZWQgbG9uZyB0b3BQYWRkaW5nLCBpbiB1bnNpZ25l
ZCBsb25nIHJpZ2h0UGFkZGluZywgaW4gdW5zaWduZWQgbG9uZyBib3R0b21QYWRkaW5nLCBpbiB1
bnNpZ25lZCBsb25nIGxlZnRQYWRkaW5nLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEzNjk2OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTItMDcgIExldmkgV2VpbnRyYXVi
ICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2lu
ZyBoaXQgdGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0
aGUgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRW5hYmxpbmcgdG91Y2ggZXZlbnQgdGFyZ2V0IHJlZ2lvbiB0cmFja2luZy4KKworICAg
ICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpyZXF1ZXN0
VG91Y2hFdmVudFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBs
Ojp+V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6CisKIDIwMTItMTItMDcgIE1hcmsgUGlsZ3JpbSAg
PHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92ZSBXb3JrZXJD
b250ZXh0UHJveHk6OmNyZWF0ZSBvdXQgb2YgUGxhdGZvcm1TdXBwb3J0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShyZXZpc2lvbiAxMzY5NjgpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcs
NyBAQAogICAgICAgJ0VOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEnLAogICAgICAgJ0VOQUJMRV9U
T1VDSF9FVkVOVFM9PChlbmFibGVfdG91Y2hfZXZlbnRzKScsCiAgICAgICAnRU5BQkxFX1RPVUNI
X0lDT05fTE9BRElORz08KGVuYWJsZV90b3VjaF9pY29uX2xvYWRpbmcpJywKKyAgICAgICdFTkFC
TEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkc9PChlbmFibGVfdG91Y2hfZXZlbnRzKScsCiAgICAgICAn
RU5BQkxFX1RPVUNIX1NMSURFUj0xJywKICAgICAgICdFTkFCTEVfVVNFUl9USU1JTkc9MScsCiAg
ICAgICAnRU5BQkxFX1Y4X1NDUklQVF9ERUJVR19TRVJWRVI9MScsCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAko
cmV2aXNpb24gMTM2OTY4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2lu
Q29udGFpbmVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCw5ICs1MzAsOSBAQCB2b2lk
IFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcXVlc3RUb3VjCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOwogICAgIGlmIChtX3RvdWNo
RXZlbnRSZXF1ZXN0VHlwZSAhPSBUb3VjaEV2ZW50UmVxdWVzdFR5cGVOb25lKQotICAgICAgICBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAg
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIobV9lbGVtZW50
KTsKICAgICBlbHNlCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1v
dmVUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogfQogCiB2b2lkIFdlYlBsdWdpbkNvbnRh
aW5lckltcGw6OnNldFdhbnRzV2hlZWxFdmVudHMoYm9vbCB3YW50c1doZWVsRXZlbnRzKQpAQCAt
Njg1LDcgKzY4NSw3IEBAIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWkK
ICNlbmRpZgogCiAgICAgaWYgKG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRvdWNoRXZlbnRS
ZXF1ZXN0VHlwZU5vbmUpCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRS
ZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3BsdWdpbkxvYWRPYnNlcnZlcnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcGx1
Z2luTG9hZE9ic2VydmVyc1tpXS0+Y2xlYXJQbHVnaW5Db250YWluZXIoKTsKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEzNjk2OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEyLTEyLTA3ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgcmVj
dGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rpb24gaW4gdGhlIGNvbXBvc2l0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzkxNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2
ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sOiBBZGRlZC4KKwogMjAx
Mi0xMi0wNyAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtXSBFbmFibGUgSW50ZWwncyBSZXNvdXJjZSBUaW1pbmcgdGVzdHMKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0
b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhp
dC1yZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKK1RoaXMgdGVzdHMgdmVy
aWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNh
biBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJlZS4gVGhlIG91dHB1dHRlZCByZWN0cyBzaG91
bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMu
CisKK25vcm1hbEZsb3dbMF06ICg4LCA3MiwgNzg0LCAxMCkKK25vcm1hbEZsb3dbMV06ICg4LCA3
MiwgNzg0LCAxMCkKK25vcm1hbEZsb3dbMl06ICgxMjgsIDcyLCAzMCwgMTApCitub3JtYWxGbG93
WzNdOiAoOCwgNzIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxkQ29udGFpbmVyWzBdOiAoOCwgMTYy
LCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclsxXTogKDgsIDE2MiwgNzg0LCAxMCkK
K2Fic29sdXRlQ2hpbGRDb250YWluZXJbMl06ICg4LCAxNjIsIDc4NCwgMTApCithYnNvbHV0ZUNo
aWxkQ29udGFpbmVyWzNdOiAoMTE4LCAzMDAsIDE0MCwgMTApCithYnNvbHV0ZUNoaWxkQ29udGFp
bmVyWzRdOiAoMTE4LCAzMDAsIDE0MCwgMTApCityZWxhdGl2ZUNoaWxkQ29udGFpbmVyWzBdOiAo
OCwgMjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclsxXTogKDgsIDI3MiwgNzg0
LCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMl06ICg4LCAyNzIsIDc4NCwgMTApCityZWxh
dGl2ZUNoaWxkQ29udGFpbmVyWzNdOiAoMTI4LCA0NzIsIDE0MCwgMTApCitvdmVyaGFuZ2luZ0Nv
bnRhaW5lclswXTogKDgsIDM2MiwgNzg0LCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzFdOiAo
OCwgMzYyLCAxMTAsIDgwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMl06ICg4LCAzNjIsIDExMCwg
ODApCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzBdOiAoNjIsIDQyMSwgNjYxLCAzMikKK3Ry
YW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMV06ICg2MiwgNDIxLCA2NjEsIDMyKQordHJhbnNmb3Jt
ZWRDaGlsZENvbnRhaW5lclsyXTogKDgsIDQzMiwgNzY5LCAxMCkKK2NvbnRpbnVhdGlvblswXTog
KDEwOCwgNTAyLCAxMDAsIDEwKQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNo
L2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNo
LWhpdC1yZWN0cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3RyYW5zZm9ybWVkQ2hpbGQgeworCS13
ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUzZCgwLjIsIDEsIDAsIDM1Z3JhZCk7Cit9CisjYWJzb2x1
dGVDaGlsZCB7CisJcG9zaXRpb246IGFic29sdXRlOworCXRvcDogMzAwcHg7Cit9CisjcmVsYXRp
dmVDaGlsZCB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCXRvcDogMjAwcHg7Cit9Cisjb3Zlcmhh
bmdpbmdDb250YWluZXIgeworCWhlaWdodDogMTBweDsKK30KKyNvdmVyaGFuZ2luZ0Zsb2F0aW5n
Q2hpbGQgeworCXdpZHRoOiAxMDBweDsKKwlmbG9hdDogbGVmdDsKK30KKyN0ZXN0cyB7CisJZm9u
dDogMTBweCBBaGVtOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj5UaGlzIHRlc3RzIHZlcmlmaWVzIHRoZSBoaXQgdGVzdCByZWdpb25zIGdpdmVuIHRv
IHRoZSBjb21wb3NpdG9yLiBJdCBjYW4gb25seSBiZSBydW4gaW4gRHVtcFJlbmRlclRyZWUuCitU
aGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRlc3QgcmVnaW9ucyBvZiBh
bGwgdGhlIGxpc3RlZCBlbGVtZW50cy48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PGRpdiBpZD0idGVzdHMiPgorCTxkaXYgaWQ9Im5vcm1hbEZsb3ciPgorCQlMb3JlbSBpcHN1bQor
CQk8c3Bhbj5zdW08L3NwYW4+LgorCTwvZGl2PgorCTxkaXYgaWQ9ImFic29sdXRlQ2hpbGRDb250
YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0iYWJzb2x1dGVDaGlsZCI+QWJzb2x1
dGUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0icmVsYXRpdmVDaGlsZENvbnRhaW5l
ciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlkPSJyZWxhdGl2ZUNoaWxkIj5SZWxhdGl2ZSBj
aGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0NvbnRhaW5lciI+CisJ
CTxkaXYgaWQ9Im92ZXJoYW5naW5nRmxvYXRpbmdDaGlsZCI+T3ZlcmhhbmdpbmcgZmxvYXQgb3Zl
cmhhbmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQ8L2Rpdj4K
Kwk8L2Rpdj4KKwk8ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyIj4KKwkJPGRpdiBp
ZD0idHJhbnNmb3JtZWRDaGlsZCI+VHJhbnNmb3JtZWQ8L2Rpdj4KKwk8L2Rpdj4KKwk8ZGl2Pgor
CQk8YiBpZD0iY29udGludWF0aW9uIj5UaGlzIGIgdGFnCisJCTxkaXY+Y2F1c2VzIGE8L2Rpdj4K
KwkJY29udGludWF0aW9uPC9iPgorCTwvZGl2PgorPC9kaXY+Cis8c2NyaXB0PgoraWYgKCF3aW5k
b3cudGVzdFJ1bm5lcikKKwlyZXR1cm47CisKK3dpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKworZnVuY3Rpb24gbGlzdGVuZXIoKSB7IH0KKworZnVuY3Rpb24gbG9nKG1zZykgeworCXZh
ciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCWRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7CisgICAgc3Bhbi5pbm5lckhU
TUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24gc29ydFJlY3RzKGEsIGIpIHsKKwly
ZXR1cm4gYS50b3AgLSBiLnRvcDsKK30KKworZnVuY3Rpb24gbG9nUmVjdHMoaWQpIHsKKwllbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCWVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7CisJcmVjdHMgPSB3aW5kb3cuaW50
ZXJuYWxzLnRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhkb2N1bWVudCk7CisJdmFyIHNvcnRl
ZFJlY3RzID0gbmV3IEFycmF5KCk7CisJZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7
ICsraSkKKwkJc29ydGVkUmVjdHNbaV0gPSByZWN0c1tpXTsKKwlzb3J0ZWRSZWN0cy5zb3J0KHNv
cnRSZWN0cyk7CisJZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7ICsraSkKKwkJbG9n
KGlkICsgIlsiICsgaSArICJdOiAoIiArIHNvcnRlZFJlY3RzW2ldLmxlZnQgKyAiLCAiICsgc29y
dGVkUmVjdHNbaV0udG9wICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLndpZHRoICsgIiwgIiArIHNv
cnRlZFJlY3RzW2ldLmhlaWdodCArICIpIik7CisJZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVy
KCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNlKTsKK30KKworbG9nUmVjdHMoIm5vcm1hbEZs
b3ciKTsKK2xvZ1JlY3RzKCJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygicmVs
YXRpdmVDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoIm92ZXJoYW5naW5nQ29udGFpbmVyIik7
Citsb2dSZWN0cygidHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoImNvbnRp
bnVhdGlvbiIpOworCit2YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0cyIpOwordGVzdENvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRlc3RDb250
YWluZXIpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179143</attachid>
            <date>2012-12-12 16:15:54 -0800</date>
            <delta_ts>2012-12-12 16:20:03 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103914-20121212161312.patch</filename>
            <type>text/plain</type>
            <size>29348</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDEyLTEyLTA3ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
dHJhY2tpbmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rp
b24gaW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4K
KworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0IHJl
Z2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGluZwor
ICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcgb24g
dGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQKKyAg
ICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBpcyBp
bml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4KKyAg
ICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmljZXMg
d2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50CisgICAg
ICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8gdHVy
biB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBnb2Fs
LCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3aXRo
IHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNpZ25l
ZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhlbiB1
cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhhbmRs
ZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxpa2Ug
aG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRyYWNr
ZWQuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdCBwcm9wZXJseSB1cGRh
dGUgdGhlIGhpdCB0ZXN0IHJlY3RzIHdoZW4gdGhlIHJlbmRlcmVycyBhcmUgaW5zaWRlIGEgc3Vi
LQorICAgICAgICB0cmVlIHRoYXQgc2Nyb2xscy4KKworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9j
aHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1s
CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OkRvY3VtZW50KTogQWRkZWQgYSBIYXNoQ291bnRlZFNldCBvZiB0b3VjaCB0YXJnZXQgbm9k
ZXMuIE5vdGU6IERPTVdpbmRvdyB0YXJnZXRzCisgICAgICAgIGFyZSBzdG9yZWQgYXMgdGhlIERv
Y3VtZW50IHRoZXkgcG9pbnQgdG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIpOiBDaGFuZ2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGhhbmRsZXIg
aW5zdGVhZCBvZiBhIGNvdW50LCBhbmQKKyAgICAgICAgdG8gdXBkYXRlIHRoZSBTY3JvbGxpbmdD
b29yZGluYXRvciB3aXRoIHRoZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpoYXNUb3VjaEV2ZW50SGFuZGxlcnMp
OiBJdCdzIG5vIGxvbmdlciBPKDEpIHRvIGdldCB0aGUgY291bnQgb2YgdG91Y2ggaGFuZGxlcnMs
IHNvCisgICAgICAgIGV4cG9zZSB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3Igbm90LgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRvdWNoRXZlbnRUYXJnZXRzKToKKyAgICAgICAgKiBkb20v
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjp0cnlBZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnRyeVJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWVCYXNlOjpyZXN0b3JlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKTogQWRkIHRo
ZSBEb2N1bWVudCB0byB0aGUgdG91Y2ggdGFyZ2V0IHNldCBpbnN0ZWFkIG9mIERPTVdpbmRvdy4K
KyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjpzZXREb2N1bWVudCk6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmNvbXB1dGVBYnNvbHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6IFdhbGsg
dGhlIHJlbmRlcmVycyBmb3IgZXZlbnQgaGFuZGxlcgorICAgICAgICBub2RlcyBhbmQgZ2VuZXJh
dGUgdGhlIGFic29sdXRlIGhpdCB0ZXN0aW5nIHJlY3RzLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6IEhvb2sgdG8gcGFz
cyBhbG9uZyB0aGUgaGl0IHRlc3QgcmVjdHMgdG8KKyAgICAgICAgdGhlIHNjcm9sbGluZyB0cmVl
L2NvbXBvc2l0b3IuCisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFtZVZp
ZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJv
bWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmg6CisgICAgICAgIChTY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291bnQpOiBDaGFu
Z2VkIHRvIGRvIHRoZSB3b3JrIHRvIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIGNvdW50IHNpbmNlCisg
ICAgICAgIGl0J3Mgbm8gbG9uZ2VyIHN0b3JlZCBhcyBhbiBpbnQgaW4gRG9jdW1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyk6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKEludGVybmFscyk6CisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDEyLTEyLTEyICBTZW9ranUgS3dvbiAg
PHNlb2tqdS5rd29uQGdtYWlsLmNvbT4KIAogICAgICAgICBbRUZMXSBSZWZhY3RvciBkdXBsaWNh
dGUgY29kZSBpbnRvIEVmbEluc3BlY3RvclV0aWxpdGllcwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAxMzc1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsOSArNDk4LDYgQEAgRG9jdW1lbnQ6OkRvY3VtZW50
KEZyYW1lKiBmcmFtZSwgY29uc3QgSwogICAgICwgbV93cml0ZVJlY3Vyc2lvbklzVG9vRGVlcChm
YWxzZSkKICAgICAsIG1fd3JpdGVSZWN1cnNpb25EZXB0aCgwKQogICAgICwgbV93aGVlbEV2ZW50
SGFuZGxlckNvdW50KDApCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAsIG1fdG91Y2hF
dmVudEhhbmRsZXJDb3VudCgwKQotI2VuZGlmCiAgICAgLCBtX3BlbmRpbmdUYXNrc1RpbWVyKHRo
aXMsICZEb2N1bWVudDo6cGVuZGluZ1Rhc2tzVGltZXJGaXJlZCkKICAgICAsIG1fc2NoZWR1bGVk
VGFza3NBcmVTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX3Zpc3VhbFVwZGF0ZXNBbGxvd2VkKHRy
dWUpCkBAIC01NTk1LDMzICs1NTkyLDU3IEBAIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVdoZWVs
RXZlbnRIYW5kbGUKICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCh0aGlzKTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKQordm9pZCBEb2N1bWVu
dDo6ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxlcikKIHsKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotICAgICsrbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmICht
X3RvdWNoRXZlbnRIYW5kbGVyQ291bnQgPiAxKQorICAgIGlmICghbV90b3VjaEV2ZW50VGFyZ2V0
cy5nZXQoKSkKKyAgICAgICAgbV90b3VjaEV2ZW50VGFyZ2V0cyA9IGFkb3B0UHRyKG5ldyBUb3Vj
aEV2ZW50VGFyZ2V0U2V0KTsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5hZGQoaGFuZGxlcik7
CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAgICAg
IHBhcmVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hyb21l
KCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CisgICAgfQorICAgIGlmIChQYWdl
KiBwYWdlID0gdGhpcy0+cGFnZSgpKSB7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5H
KQorICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT50b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UodGhpcyk7CisjZW5kaWYK
KyAgICAgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUoKSA9PSAxKQorICAgICAgICAg
ICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CisgICAg
fQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CiAjZW5kaWYKIH0KIAotdm9pZCBE
b2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKQordm9pZCBEb2N1bWVudDo6ZGlk
UmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxlcikKIHsKICNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQotICAgIEFTU0VSVChtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpOwotICAgIC0t
bV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmIChtX3RvdWNoRXZlbnRIYW5kbGVyQ291
bnQpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQogICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKG1fdG91Y2hFdmVudFRhcmdldHMtPmNvbnRhaW5zKGhhbmRsZXIpKTsKKyAg
ICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxlcik7CisgICAgaWYgKERvY3VtZW50
KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAgICAgIHBhcmVudC0+ZGlkUmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBQ
YWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
OworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBpZiAoU2Nyb2xsaW5nQ29v
cmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnRvdWNoRXZlbnRUYXJnZXRSZWN0
c0RpZENoYW5nZSh0aGlzKTsKKyNlbmRpZgorICAgIGlmIChtX3RvdWNoRXZlbnRUYXJnZXRzLT5z
aXplKCkpCisgICAgICAgIHJldHVybjsKICAgICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9IHBh
Z2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50
KCktPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVk
VG91Y2hFdmVudHMoZmFsc2UpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CiAj
ZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEzNzUzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNiAr
MjA3LDggQEAgZW51bSBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgewogfTsKIGNvbnN0IGludCBu
dW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzID0gSW52YWxpZGF0ZU9uQW55QXR0ckNoYW5nZSAr
IDE7CiAKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Tm9kZSo+IFRvdWNoRXZlbnRUYXJnZXRTZXQ7
CisKIGNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRhaW5lck5vZGUsIHB1YmxpYyBUcmVlU2Nv
cGUsIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJs
KQpAQCAtMTExOCwxMyArMTEyMCwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZW1vdmVXaGVl
bEV2ZW50SGFuZGxlcigpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNpZ25l
ZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50SGFu
ZGxlckNvdW50OyB9CisgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSBjb25zdCB7IHJl
dHVybiAobV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkgPyBtX3RvdWNoRXZlbnRUYXJnZXRzLT5z
aXplKCkgOiBmYWxzZTsgfQogI2Vsc2UKLSAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNv
dW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJz
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgdm9pZCBkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcigpOwotICAgIHZvaWQgZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsK
KyAgICB2b2lkIGRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKyAgICB2b2lkIGRpZFJl
bW92ZVRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hFdmVudFRhcmdldHMoKSBjb25z
dCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpOyB9CisjZWxzZQorICAgIGNvbnN0
IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorI2VuZGlmCiAKICAgICBib29sIHZpc3VhbFVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsgfQogCkBAIC0xNTAzLDcgKzE1MTEsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIHVuc2lnbmVkIG1fd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHVuc2lnbmVkIG1fdG91Y2hFdmVudEhhbmRsZXJD
b3VudDsKKyAgICBPd25QdHI8VG91Y2hFdmVudFRhcmdldFNldD4gbV90b3VjaEV2ZW50VGFyZ2V0
czsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTM3NTMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA1LDggKzIxMDUsOCBAQCB2b2lkIE5vZGU6OmRp
ZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
b3VjaEV2ZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgRXZlbnRMaXN0ZW5l
clZlY3RvciYgbGlzdGVuZXJzID0gZ2V0RXZlbnRMaXN0ZW5lcnModG91Y2hFdmVudE5hbWVzW2ld
KTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBsaXN0ZW5lcnMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigp
OwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAg
ICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIxMzUsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgdHJ5QWRkRXZlbnRMaXN0ZW5lcihOCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnRO
YW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRXaGVl
bEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2
ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZl
bnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRs
ZXIodGFyZ2V0Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTU3LDcgKzIx
NTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lCiAgICAgICAg
IGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAg
ICAgIGRvY3VtZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNl
IGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBk
b2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGFyZ2V0Tm9kZSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1l
LmNwcAkocmV2aXNpb24gMTM3NTMxKQorKysgU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIENhY2hlZEZy
YW1lQmFzZTo6cmVzdG9yZSgpCiAgICAgbV9kb2N1bWVudC0+ZW5xdWV1ZVBvcHN0YXRlRXZlbnQo
aGlzdG9yeUl0ZW0gJiYgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgPyBoaXN0b3J5SXRlbS0+
c3RhdGVPYmplY3QoKSA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwogICAg
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fZG9jdW1lbnQtPnRvdWNoRXZl
bnRIYW5kbGVyQ291bnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+aGFzVG91Y2hFdmVudEhhbmRs
ZXJzKCkpCiAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5u
ZWVkVG91Y2hFdmVudHModHJ1ZSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzc1MzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYz
LDcgQEAgSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgICAgICBkb2N1
bWVudCgpLT5mb3JtQ29udHJvbGxlcigpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0
dG9uKHRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgaWYgKG1faGFzVG91Y2hF
dmVudEhhbmRsZXIpCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5k
bGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRo
aXMpOwogI2VuZGlmCiB9CiAKQEAgLTQ4OSw5ICs0ODksOSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnVwZGF0ZVR5cGUoKQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXIgPSBtX2lucHV0
VHlwZS0+aGFzVG91Y2hFdmVudEhhbmRsZXIoKTsKICAgICBpZiAoaGFzVG91Y2hFdmVudEhhbmRs
ZXIgIT0gbV9oYXNUb3VjaEV2ZW50SGFuZGxlcikgewogICAgICAgaWYgKGhhc1RvdWNoRXZlbnRI
YW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOwor
ICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAg
IGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsK
KyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAg
ICAgICBtX2hhc1RvdWNoRXZlbnRIYW5kbGVyID0gaGFzVG91Y2hFdmVudEhhbmRsZXI7CiAgICAg
fQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAxMzc1
MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1ODEsNyArMTU4MSw3IEBAIGJvb2wgRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKGNv
bnN0IEEKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2
ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKCk7CiAg
ICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkp
Ci0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihkb2N1bWVudCk7CiAgICAg
ICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50KQogICAg
ICAgICAgICAgZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIodGhpcyk7CiAgICAgfQpAQCAtMTYx
Miw3ICsxNjEyLDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29ucwog
ICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAg
ICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAg
ICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAg
ICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAg
ICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKGRvY3VtZW50KTsKICAg
ICB9CiAKICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDEzNzUzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzkzOSw3ICszOTM5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29u
cwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgp
KQorICAgICAgICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbV9vcmlnaW5hdGluZ1RvdWNoUG9pbnRU
YXJnZXRzLnNldCh0b3VjaFBvaW50VGFyZ2V0S2V5LCBub2RlKTsKICAgICAgICAgICAgIHRvdWNo
VGFyZ2V0ID0gbm9kZTsKQEAgLTM5NjQsNyArMzk2NCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHRvdWNoVGFyZ2V0
LT50b05vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCFkb2MtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAg
ICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGRvYy0+ZnJhbWUoKTsKICAgICAg
ICAgaWYgKCF0YXJnZXRGcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAx
Mzc1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgRnJhbWU6OnNldERvY3VtZW50KFBhc3NSZWZQdHI8RG9j
dW0KICAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+bWFpbkZyYW1lKCkgPT0gdGhpcykgewogICAg
ICAgICBub3RpZnlDaHJvbWVDbGllbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCgpOwog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+dG91
Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmhhc1Rv
dWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgbV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsKICNlbmRpZgogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCkBAIC0xNzYsNiArMTc3LDU0IEBAIFJlZ2lvbiBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6Y29tcHV0ZU5vbkYKICAgICByZXR1cm4gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CiB9
CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCitzdGF0aWMgdm9pZCBhY2N1bXVs
YXRlUmVuZGVyZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBtZXRo
b2QgaXMgTyhOXjIpIGFzIGl0IHdhbGtzIHRoZSB0cmVlIHRvIHRoZSByb290IGZvciBldmVyeSBy
ZW5kZXJlci4gUmVuZGVyR2VvbWV0cnlNYXAgd291bGQgZml4IHRoaXMuCisgICAgcmVjdHMuYXBw
ZW5kKGVuY2xvc2luZ0ludFJlY3QocmVuZGVyZXItPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KDApKSk7CisgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICAgICAg
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcik7CisgICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGJsb2NrLT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgYWNjdW11bGF0ZVJl
bmRlcmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlY3RzLCBjaGlsZCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBhY2N1bXVsYXRlRG9jdW1lbnRFdmVudFRhcmdldFJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYgcmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9j
dW1lbnQpOworICAgIGlmICghZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1
bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5iZWdpbigpOyBpdGVyICE9IHRhcmdldHMt
PmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgY29uc3QgTm9kZSogdG91Y2hUYXJnZXQgPSBpdGVy
LT5rZXk7CisgICAgICAgIGlmICh0b3VjaFRhcmdldCA9PSBkb2N1bWVudCkgeworICAgICAgICAg
ICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgICAg
ICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHZpZXctPmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KDApKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAodG91Y2hUYXJnZXQtPmlzRG9jdW1lbnROb2RlKCkgJiYgdG91Y2hUYXJn
ZXQgIT0gZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVEb2N1bWVudEV2ZW50VGFy
Z2V0UmVjdHMocmVjdHMsIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50Kj4odG91Y2hUYXJnZXQp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSB0b3VjaFRhcmdldC0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAg
IGFjY3VtdWxhdGVSZW5kZXJlclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhyZWN0cywgcmVuZGVyZXIp
OworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZUFic29sdXRl
VG91Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgVmVjdG9yPElu
dFJlY3Q+JiByZWN0cykKK3sKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgIGlmICghZG9jdW1l
bnQtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoZXNlIHJlY3Rz
IHdvbid0IGJlIHByb3Blcmx5IHVwZGF0ZWQgaWYgdGhlIHJlbmRlcmVycyBhcmUgaW4gYSBzdWIt
dHJlZSB0aGF0IHNjcm9sbHMuCisgICAgYWNjdW11bGF0ZURvY3VtZW50RXZlbnRUYXJnZXRSZWN0
cyhyZWN0cywgZG9jdW1lbnQpOworfQorI2VuZGlmCisKIHVuc2lnbmVkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogewogICAgIHVu
c2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lv
biAxMzc1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUw
LDYgKzUxLDcgQEAgdHlwZWRlZiB1aW50NjRfdCBTY3JvbGxpbmdOb2RlSUQ7CiAKIGVudW0gU2Ny
b2xsaW5nTm9kZVR5cGUgeyBTY3JvbGxpbmdOb2RlLCBGaXhlZE5vZGUgfTsKIAorY2xhc3MgRG9j
dW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5
ZXI7CkBAIC0xNDksNiArMTUxLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
YWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5
ZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9z
aXRpb25MYXllcnMoR3JhcGhpY3NMYXllciosIGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqLCBib29sKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgdG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKGNvbnN0IERv
Y3VtZW50KikgeyB9CisgIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICB2
b2lkIGNvbXB1dGVBYnNvbHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBEb2N1bWVudCos
IFZlY3RvcjxJbnRSZWN0PiYpOworI2VuZGlmCiAKICAgICBzdGF0aWMgU3RyaW5nIG1haW5UaHJl
YWRTY3JvbGxpbmdSZWFzb25zQXNUZXh0KE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKICAg
ICBTdHJpbmcgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnNBc1RleHQoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAx
Mzc1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwz
MCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gZnJh
bWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgog
ICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKICAgICBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7CisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIFZlY3RvcjxJbnRSZWN0PiB0b3VjaEV2ZW50VGFy
Z2V0UmVjdHM7CisgICAgY29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKG1fcGFn
ZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCksIHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisgICAg
c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisjZW5kaWYK
K30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjp0b3VjaEV2ZW50VGFyZ2V0
UmVjdHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworI2lmIEVOQUJMRShU
T1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICAvLyBXYWl0IHVudGlsIGFmdGVyIGxheW91dCB0byB1
cGRhdGUuCisgICAgaWYgKG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+bmVlZHNMYXlvdXQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEg
c2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBv
dXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9w
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CisgICAgaWYgKG1fcHJpdmF0ZS0+c2Nyb2xsTGF5
ZXIoKSkgeworICAgICAgICBWZWN0b3I8SW50UmVjdD4gdG91Y2hFdmVudFRhcmdldFJlY3RzOwor
ICAgICAgICBjb21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1lbnQsIHRv
dWNoRXZlbnRUYXJnZXRSZWN0cyk7CisgICAgICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0
b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRv
Y3VtZW50KTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06
OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKQEAgLTIw
OSw2ICsyMzMsMTggQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRObwog
ICAgIH0KIH0KIAordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2
ZW50VGFyZ2V0UmVjdHMoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBhYnNvbHV0ZUhpdFRlc3RSZWN0
cykKK3sKKyAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigp
IGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KKyAgICBz
ZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgp
LT52aWV3KCkpKTsKKyAgICBpZiAobV9wcml2YXRlLT5zY3JvbGxMYXllcigpKSB7CisgICAgICAg
IFdlYlZlY3RvcjxXZWJSZWN0PiB3ZWJSZWN0cyhhYnNvbHV0ZUhpdFRlc3RSZWN0cy5zaXplKCkp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlSGl0VGVzdFJlY3RzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgd2ViUmVjdHNbaV0gPSBhYnNvbHV0ZUhpdFRlc3RSZWN0
c1tpXTsKKyAgICAgICAgbV9wcml2YXRlLT5zY3JvbGxMYXllcigpLT5zZXRUb3VjaEV2ZW50SGFu
ZGxlclJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVu
dEhhbmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRT
Y3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNl
bHZlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJl
dmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVt
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIg
KzY4LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBz
Y3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxl
QXJlYSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2
ZXIgdG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAg
IHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1l
bnQqKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWlu
VGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CiAKICAgICB2b2lkIHNldFNjcm9sbExheWVyKEdyYXBo
aWNzTGF5ZXIqKTsKICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJl
Z2lvbiYpOworICAgIHZvaWQgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0IFZlY3RvcjxJ
bnRSZWN0PiYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7
CiAgICAgUGFzc093blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhckxheWVyPiBjcmVhdGVTY3JvbGxi
YXJMYXllcihTY3JvbGxiYXIqLCBXZWJLaXQ6OldlYkxheWVyKiBzY3JvbGxMYXllciwgR3JhcGhp
Y3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVWaWV3Kik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiAr
NzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlbGVjdFJ1bGVGZWF0dXJlU2V0
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKQEAgLTEyMDAsOCArMTIwMSwzOCBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6OnRvdWNoRXZl
bnRIYW5kbGVyQ291CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBkb2N1
bWVudC0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpOworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJn
ZXRTZXQqIHRvdWNoSGFuZGxlcnMgPSBkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAg
ICBpZiAoIXRvdWNoSGFuZGxlcnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQg
Y291bnQgPSAwOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdldFNldDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHRvdWNoSGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIgIT0gdG91Y2hIYW5kbGVycy0+ZW5k
KCk7ICsraXRlcikKKyAgICAgICAgY291bnQgKz0gaXRlci0+dmFsdWU7CisgICAgcmV0dXJuIGNv
dW50OworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorUGFzc1JlZlB0cjxD
bGllbnRSZWN0TGlzdD4gSW50ZXJuYWxzOjp0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoRG9j
dW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+dmlldygpIHx8ICFkb2N1bWVudC0+cGFnZSgpKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYg
KCFkb2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICByZXR1
cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZSgpOworCisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgVmVjdG9yPEludFJlY3Q+IGFic29s
dXRlUmVjdHM7CisgICAgZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKS0+
Y29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50LCBhYnNvbHV0ZVJl
Y3RzKTsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVF1YWRzKGFic29sdXRlUmVjdHMu
c2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVSZWN0cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgYWJzb2x1dGVRdWFkc1tpXSA9IEZsb2F0UXVhZChhYnNvbHV0ZVJl
Y3RzW2ldKTsKKworICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKGFic29sdXRlUXVh
ZHMpOwogfQorI2VuZGlmCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEludGVybmFsczo6bm9kZXNG
cm9tUmVjdChEb2N1bWVudCogZG9jdW1lbnQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFk
ZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcs
IHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hh
ZG93Q29udGVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOSBAQCBwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KERvY3VtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoRG9jdW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAg
IFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IHRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhE
b2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gbm9kZXNGcm9tUmVjdChEb2N1bWVudCosIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9w
UGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgICAgICB1bnNpZ25lZCBib3R0b21Q
YWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCBh
bGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw5
IEBACiAKICAgICB1bnNpZ25lZCBsb25nIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1l
bnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICB1bnNpZ25lZCBsb25nIHRv
dWNoRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORykgJiYgRU5B
QkxFX1RPVUNIX0VWRU5UX1RSQUNLSU5HCisgICAgQ2xpZW50UmVjdExpc3QgdG91Y2hFdmVudFRh
cmdldENsaWVudFJlY3RzKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlv
bik7CisjZW5kaWYKIAogICAgIE5vZGVMaXN0IG5vZGVzRnJvbVJlY3QoaW4gRG9jdW1lbnQgZG9j
dW1lbnQsIGluIGxvbmcgeCwgaW4gbG9uZyB5LAogICAgICAgICBpbiB1bnNpZ25lZCBsb25nIHRv
cFBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgcmlnaHRQYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25n
IGJvdHRvbVBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgbGVmdFBhZGRpbmcsCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NTMxKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0x
Mi0wNyAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3Qg
ZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBT
aW1vbiBGcmFzZXIuCisKKyAgICAgICAgRW5hYmxpbmcgdG91Y2ggZXZlbnQgdGFyZ2V0IHJlZ2lv
biB0cmFja2luZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogc3JjL1dl
YlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250
YWluZXJJbXBsOjpyZXF1ZXN0VG91Y2hFdmVudFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6CisKIDIwMTItMTIt
MTIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEVuY2Fwc3VsYXRl
IGV4dGVybmFsbHkgdXNlZCB3ZWJkYXRhYmFzZSBBUElzIGluIERhdGFiYXNlTWFuYWdlci4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDEzNzUzMSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MTE2LDYgKzExNiw3IEBACiAgICAgICAnRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MScsCiAgICAg
ICAnRU5BQkxFX1RPVUNIX0VWRU5UUz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdF
TkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTwoZW5hYmxlX3RvdWNoX2ljb25fbG9hZGluZyknLAor
ICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORz08KGVuYWJsZV90b3VjaF9ldmVudHMp
JywKICAgICAgICdFTkFCTEVfVE9VQ0hfU0xJREVSPTEnLAogICAgICAgJ0VOQUJMRV9VU0VSX1RJ
TUlORz0xJywKICAgICAgICdFTkFCTEVfVjhfU0NSSVBUX0RFQlVHX1NFUlZFUj0xJywKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5l
ckltcGwuY3BwCShyZXZpc2lvbiAxMzc1MzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDkgKzUz
MCw5IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRvdWMKICAgICAgICAg
cmV0dXJuOwogICAgIG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7CiAgICAg
aWYgKG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUp
Ci0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIo
KTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxl
cihtX2VsZW1lbnQpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiB9CiAKIHZvaWQgV2Vi
UGx1Z2luQ29udGFpbmVySW1wbDo6c2V0V2FudHNXaGVlbEV2ZW50cyhib29sIHdhbnRzV2hlZWxF
dmVudHMpCkBAIC02ODUsNyArNjg1LDcgQEAgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBs
dWdpbkNvbnRhaQogI2VuZGlmCiAKICAgICBpZiAobV90b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0g
VG91Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fcGx1Z2luTG9hZE9ic2VydmVycy5zaXplKCk7ICsraSkKICAg
ICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzW2ldLT5jbGVhclBsdWdpbkNvbnRhaW5lcigpOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMTM3NTMxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTItMDcgIExldmkgV2VpbnRyYXViICA8
bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBo
aXQgdGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUg
Y29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1o
aXQtcmVjdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sOiBBZGRl
ZC4KKwogMjAxMi0xMi0xMSAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAoU3VicGl4ZWwgbGF5b3V0KTogR3JheSB2ZXJ0aWNhbCBsaW5lcyBh
cHBlYXIgd2hlbiBtb3ZpbmcgaW5zZXJ0aW9uIHBvaW50IHRvIHJpZ2h0IG9uIE1hYwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179146</attachid>
            <date>2012-12-12 16:20:19 -0800</date>
            <delta_ts>2012-12-12 16:44:38 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103914-20121212161736.patch</filename>
            <type>text/plain</type>
            <size>37331</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDEyLTEyLTA3ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
dHJhY2tpbmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rp
b24gaW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4K
KworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0IHRlc3QgdGFyZ2V0IHJl
Z2lvbnMgZm9yIHRoZSBwdXJwb3NlIG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBoaXQgdGVzdGluZwor
ICAgICAgICBpbiB0aGUgY29tcG9zaXRvciB0byBhdm9pZCBibG9ja2luZyBzY3JvbGxpbmcgb24g
dGhlIG1haW4gdGhyZWFkIHdoaWxlIHdhaXRpbmcgdG8gaGl0IHRlc3QgZXZlbnRzIHRoYXQKKyAg
ICAgICAgYXJlbid0IG9jY3VyaW5nIGluIHJlZ2lvbnMgd2l0aCBoYW5kbGVycy4gVGhpcyBpcyBp
bml0aWFsbHkgYmVpbmcgZG9uZSB0byBhdm9pZCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1haW4KKyAg
ICAgICAgdGhyZWFkIHdoZW4gc2Nyb2xsaW5nIGJ5IGZsaWNraW5nIG9uIHRvdWNoIGRldmljZXMg
d2hlbiB0aGUgZmxpY2sgb2NjdXJzIG91dHNpZGUgYSB0cmFja2VkIHRvdWNoIGV2ZW50CisgICAg
ICAgIHJlZ2lvbi4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgaW1wbGVtZW50YXRpb24gdG8gdHVy
biB0aGlzIG9uIGluIENocm9taXVtLgorCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyBnb2Fs
LCBEb2N1bWVudCB3aWxsIG5vdyBrZWVwIGEgY291bnRlZCBoYXNoIHNldCBvZiBub2RlcyB3aXRo
IHRvdWNoIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIGluc3RlYWQgb2Ygb25seSBhbiB1bnNpZ25l
ZCBpbnRlZ2VyIG9mIHRoZSB0b3RhbCBjb3VudC4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IgdGhlbiB1
cGRhdGVzIHRoZSBjb21wb3NpdG9yCisgICAgICAgIHdoZW4gbmV3IHRvdWNoIGV2ZW50IGhhbmRs
ZXJzIGFyZSByZWdpc3RlcmVkIG9yIHJlbW92ZWQsIG9yIGFmdGVyIGxheW91dCBtdWNoIGxpa2Ug
aG93CisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9ucyBhcmUgY3VycmVudGx5IHRyYWNr
ZWQuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdCBwcm9wZXJseSB1cGRh
dGUgdGhlIGhpdCB0ZXN0IHJlY3RzIHdoZW4gdGhlIHJlbmRlcmVycyBhcmUgaW5zaWRlIGEgc3Vi
LQorICAgICAgICB0cmVlIHRoYXQgc2Nyb2xscy4KKworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9j
aHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1s
CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OkRvY3VtZW50KTogQWRkZWQgYSBIYXNoQ291bnRlZFNldCBvZiB0b3VjaCB0YXJnZXQgbm9k
ZXMuIE5vdGU6IERPTVdpbmRvdyB0YXJnZXRzCisgICAgICAgIGFyZSBzdG9yZWQgYXMgdGhlIERv
Y3VtZW50IHRoZXkgcG9pbnQgdG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIpOiBDaGFuZ2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGhhbmRsZXIg
aW5zdGVhZCBvZiBhIGNvdW50LCBhbmQKKyAgICAgICAgdG8gdXBkYXRlIHRoZSBTY3JvbGxpbmdD
b29yZGluYXRvciB3aXRoIHRoZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpoYXNUb3VjaEV2ZW50SGFuZGxlcnMp
OiBJdCdzIG5vIGxvbmdlciBPKDEpIHRvIGdldCB0aGUgY291bnQgb2YgdG91Y2ggaGFuZGxlcnMs
IHNvCisgICAgICAgIGV4cG9zZSB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3Igbm90LgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRvdWNoRXZlbnRUYXJnZXRzKToKKyAgICAgICAgKiBkb20v
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjp0cnlBZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnRyeVJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWVCYXNlOjpyZXN0b3JlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKTogQWRkIHRo
ZSBEb2N1bWVudCB0byB0aGUgdG91Y2ggdGFyZ2V0IHNldCBpbnN0ZWFkIG9mIERPTVdpbmRvdy4K
KyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjpzZXREb2N1bWVudCk6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmNvbXB1dGVBYnNvbHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyk6IFdhbGsg
dGhlIHJlbmRlcmVycyBmb3IgZXZlbnQgaGFuZGxlcgorICAgICAgICBub2RlcyBhbmQgZ2VuZXJh
dGUgdGhlIGFic29sdXRlIGhpdCB0ZXN0aW5nIHJlY3RzLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6IEhvb2sgdG8gcGFz
cyBhbG9uZyB0aGUgaGl0IHRlc3QgcmVjdHMgdG8KKyAgICAgICAgdGhlIHNjcm9sbGluZyB0cmVl
L2NvbXBvc2l0b3IuCisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpmcmFtZVZp
ZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6
c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJv
bWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmg6CisgICAgICAgIChTY3JvbGxpbmdD
b29yZGluYXRvckNocm9taXVtKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291bnQpOiBDaGFu
Z2VkIHRvIGRvIHRoZSB3b3JrIHRvIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIGNvdW50IHNpbmNlCisg
ICAgICAgIGl0J3Mgbm8gbG9uZ2VyIHN0b3JlZCBhcyBhbiBpbnQgaW4gRG9jdW1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyk6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKEludGVybmFscyk6CisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDEyLTEyLTEyICBTZW9ranUgS3dvbiAg
PHNlb2tqdS5rd29uQGdtYWlsLmNvbT4KIAogICAgICAgICBbRUZMXSBSZWZhY3RvciBkdXBsaWNh
dGUgY29kZSBpbnRvIEVmbEluc3BlY3RvclV0aWxpdGllcwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAxMzc1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsOSArNDk4LDYgQEAgRG9jdW1lbnQ6OkRvY3VtZW50
KEZyYW1lKiBmcmFtZSwgY29uc3QgSwogICAgICwgbV93cml0ZVJlY3Vyc2lvbklzVG9vRGVlcChm
YWxzZSkKICAgICAsIG1fd3JpdGVSZWN1cnNpb25EZXB0aCgwKQogICAgICwgbV93aGVlbEV2ZW50
SGFuZGxlckNvdW50KDApCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAsIG1fdG91Y2hF
dmVudEhhbmRsZXJDb3VudCgwKQotI2VuZGlmCiAgICAgLCBtX3BlbmRpbmdUYXNrc1RpbWVyKHRo
aXMsICZEb2N1bWVudDo6cGVuZGluZ1Rhc2tzVGltZXJGaXJlZCkKICAgICAsIG1fc2NoZWR1bGVk
VGFza3NBcmVTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX3Zpc3VhbFVwZGF0ZXNBbGxvd2VkKHRy
dWUpCkBAIC01NTk1LDMzICs1NTkyLDU3IEBAIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVdoZWVs
RXZlbnRIYW5kbGUKICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCh0aGlzKTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKQordm9pZCBEb2N1bWVu
dDo6ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxlcikKIHsKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotICAgICsrbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmICht
X3RvdWNoRXZlbnRIYW5kbGVyQ291bnQgPiAxKQorICAgIGlmICghbV90b3VjaEV2ZW50VGFyZ2V0
cy5nZXQoKSkKKyAgICAgICAgbV90b3VjaEV2ZW50VGFyZ2V0cyA9IGFkb3B0UHRyKG5ldyBUb3Vj
aEV2ZW50VGFyZ2V0U2V0KTsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5hZGQoaGFuZGxlcik7
CisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAgICAg
IHBhcmVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hyb21l
KCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CisgICAgfQorICAgIGlmIChQYWdl
KiBwYWdlID0gdGhpcy0+cGFnZSgpKSB7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5H
KQorICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT50b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UodGhpcyk7CisjZW5kaWYK
KyAgICAgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUoKSA9PSAxKQorICAgICAgICAg
ICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CisgICAg
fQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CiAjZW5kaWYKIH0KIAotdm9pZCBE
b2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKQordm9pZCBEb2N1bWVudDo6ZGlk
UmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoTm9kZSogaGFuZGxlcikKIHsKICNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQotICAgIEFTU0VSVChtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQpOwotICAgIC0t
bV90b3VjaEV2ZW50SGFuZGxlckNvdW50OwotICAgIGlmIChtX3RvdWNoRXZlbnRIYW5kbGVyQ291
bnQpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQogICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKG1fdG91Y2hFdmVudFRhcmdldHMtPmNvbnRhaW5zKGhhbmRsZXIpKTsKKyAg
ICBtX3RvdWNoRXZlbnRUYXJnZXRzLT5yZW1vdmUoaGFuZGxlcik7CisgICAgaWYgKERvY3VtZW50
KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAgICAgIHBhcmVudC0+ZGlkUmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBQ
YWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
OworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICBpZiAoU2Nyb2xsaW5nQ29v
cmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnRvdWNoRXZlbnRUYXJnZXRSZWN0
c0RpZENoYW5nZSh0aGlzKTsKKyNlbmRpZgorICAgIGlmIChtX3RvdWNoRXZlbnRUYXJnZXRzLT5z
aXplKCkpCisgICAgICAgIHJldHVybjsKICAgICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9IHBh
Z2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50
KCktPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5uZWVk
VG91Y2hFdmVudHMoZmFsc2UpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CiAj
ZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEzNzUzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNiAr
MjA3LDggQEAgZW51bSBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgewogfTsKIGNvbnN0IGludCBu
dW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzID0gSW52YWxpZGF0ZU9uQW55QXR0ckNoYW5nZSAr
IDE7CiAKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Tm9kZSo+IFRvdWNoRXZlbnRUYXJnZXRTZXQ7
CisKIGNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRhaW5lck5vZGUsIHB1YmxpYyBUcmVlU2Nv
cGUsIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJs
KQpAQCAtMTExOCwxMyArMTEyMCwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZW1vdmVXaGVl
bEV2ZW50SGFuZGxlcigpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB1bnNpZ25l
ZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2ZW50SGFu
ZGxlckNvdW50OyB9CisgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSBjb25zdCB7IHJl
dHVybiAobV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkgPyBtX3RvdWNoRXZlbnRUYXJnZXRzLT5z
aXplKCkgOiBmYWxzZTsgfQogI2Vsc2UKLSAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNv
dW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJz
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgdm9pZCBkaWRBZGRUb3Vj
aEV2ZW50SGFuZGxlcigpOwotICAgIHZvaWQgZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsK
KyAgICB2b2lkIGRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKyAgICB2b2lkIGRpZFJl
bW92ZVRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hFdmVudFRhcmdldHMoKSBjb25z
dCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpOyB9CisjZWxzZQorICAgIGNvbnN0
IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorI2VuZGlmCiAKICAgICBib29sIHZpc3VhbFVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsgfQogCkBAIC0xNTAzLDcgKzE1MTEsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIHVuc2lnbmVkIG1fd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHVuc2lnbmVkIG1fdG91Y2hFdmVudEhhbmRsZXJD
b3VudDsKKyAgICBPd25QdHI8VG91Y2hFdmVudFRhcmdldFNldD4gbV90b3VjaEV2ZW50VGFyZ2V0
czsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTM3NTMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA1LDggKzIxMDUsOCBAQCB2b2lkIE5vZGU6OmRp
ZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
b3VjaEV2ZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgRXZlbnRMaXN0ZW5l
clZlY3RvciYgbGlzdGVuZXJzID0gZ2V0RXZlbnRMaXN0ZW5lcnModG91Y2hFdmVudE5hbWVzW2ld
KTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBsaXN0ZW5lcnMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigp
OwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAg
ICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIxMzUsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgdHJ5QWRkRXZlbnRMaXN0ZW5lcihOCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnRO
YW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRXaGVl
bEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2
ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZl
bnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRs
ZXIodGFyZ2V0Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTU3LDcgKzIx
NTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lCiAgICAgICAg
IGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAg
ICAgIGRvY3VtZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNl
IGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBk
b2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGFyZ2V0Tm9kZSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1l
LmNwcAkocmV2aXNpb24gMTM3NTMxKQorKysgU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIENhY2hlZEZy
YW1lQmFzZTo6cmVzdG9yZSgpCiAgICAgbV9kb2N1bWVudC0+ZW5xdWV1ZVBvcHN0YXRlRXZlbnQo
aGlzdG9yeUl0ZW0gJiYgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgPyBoaXN0b3J5SXRlbS0+
c3RhdGVPYmplY3QoKSA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwogICAg
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fZG9jdW1lbnQtPnRvdWNoRXZl
bnRIYW5kbGVyQ291bnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+aGFzVG91Y2hFdmVudEhhbmRs
ZXJzKCkpCiAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5u
ZWVkVG91Y2hFdmVudHModHJ1ZSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzc1MzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYz
LDcgQEAgSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgICAgICBkb2N1
bWVudCgpLT5mb3JtQ29udHJvbGxlcigpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0
dG9uKHRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgaWYgKG1faGFzVG91Y2hF
dmVudEhhbmRsZXIpCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5k
bGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRo
aXMpOwogI2VuZGlmCiB9CiAKQEAgLTQ4OSw5ICs0ODksOSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnVwZGF0ZVR5cGUoKQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXIgPSBtX2lucHV0
VHlwZS0+aGFzVG91Y2hFdmVudEhhbmRsZXIoKTsKICAgICBpZiAoaGFzVG91Y2hFdmVudEhhbmRs
ZXIgIT0gbV9oYXNUb3VjaEV2ZW50SGFuZGxlcikgewogICAgICAgaWYgKGhhc1RvdWNoRXZlbnRI
YW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOwor
ICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAg
IGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsK
KyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAg
ICAgICBtX2hhc1RvdWNoRXZlbnRIYW5kbGVyID0gaGFzVG91Y2hFdmVudEhhbmRsZXI7CiAgICAg
fQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAxMzc1
MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1ODEsNyArMTU4MSw3IEBAIGJvb2wgRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKGNv
bnN0IEEKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2
ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKCk7CiAg
ICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkp
Ci0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihkb2N1bWVudCk7CiAgICAg
ICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50KQogICAg
ICAgICAgICAgZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIodGhpcyk7CiAgICAgfQpAQCAtMTYx
Miw3ICsxNjEyLDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29ucwog
ICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAg
ICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAg
ICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAg
ICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAg
ICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKGRvY3VtZW50KTsKICAg
ICB9CiAKICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDEzNzUzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzkzOSw3ICszOTM5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29u
cwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgp
KQorICAgICAgICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbV9vcmlnaW5hdGluZ1RvdWNoUG9pbnRU
YXJnZXRzLnNldCh0b3VjaFBvaW50VGFyZ2V0S2V5LCBub2RlKTsKICAgICAgICAgICAgIHRvdWNo
VGFyZ2V0ID0gbm9kZTsKQEAgLTM5NjQsNyArMzk2NCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnMKICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHRvdWNoVGFyZ2V0
LT50b05vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCFkb2MtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAg
ICAgICAgaWYgKCFkb2MtPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGRvYy0+ZnJhbWUoKTsKICAgICAg
ICAgaWYgKCF0YXJnZXRGcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAx
Mzc1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgRnJhbWU6OnNldERvY3VtZW50KFBhc3NSZWZQdHI8RG9j
dW0KICAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+bWFpbkZyYW1lKCkgPT0gdGhpcykgewogICAg
ICAgICBub3RpZnlDaHJvbWVDbGllbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCgpOwog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+dG91
Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmhhc1Rv
dWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgbV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsKICNlbmRpZgogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5j
cHAJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCkBAIC0xNzYsNiArMTc3LDU0IEBAIFJlZ2lvbiBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6Y29tcHV0ZU5vbkYKICAgICByZXR1cm4gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CiB9
CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCitzdGF0aWMgdm9pZCBhY2N1bXVs
YXRlUmVuZGVyZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBtZXRo
b2QgaXMgTyhOXjIpIGFzIGl0IHdhbGtzIHRoZSB0cmVlIHRvIHRoZSByb290IGZvciBldmVyeSBy
ZW5kZXJlci4gUmVuZGVyR2VvbWV0cnlNYXAgd291bGQgZml4IHRoaXMuCisgICAgcmVjdHMuYXBw
ZW5kKGVuY2xvc2luZ0ludFJlY3QocmVuZGVyZXItPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KDApKSk7CisgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICAgICAg
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcik7CisgICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGJsb2NrLT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgYWNjdW11bGF0ZVJl
bmRlcmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlY3RzLCBjaGlsZCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBhY2N1bXVsYXRlRG9jdW1lbnRFdmVudFRhcmdldFJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYgcmVjdHMsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9j
dW1lbnQpOworICAgIGlmICghZG9jdW1lbnQtPnRvdWNoRXZlbnRUYXJnZXRzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRhcmdldHMgPSBkb2N1
bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBmb3IgKFRvdWNoRXZlbnRUYXJnZXRTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0YXJnZXRzLT5iZWdpbigpOyBpdGVyICE9IHRhcmdldHMt
PmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgY29uc3QgTm9kZSogdG91Y2hUYXJnZXQgPSBpdGVy
LT5rZXk7CisgICAgICAgIGlmICh0b3VjaFRhcmdldCA9PSBkb2N1bWVudCkgeworICAgICAgICAg
ICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgICAg
ICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHZpZXctPmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KDApKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAodG91Y2hUYXJnZXQtPmlzRG9jdW1lbnROb2RlKCkgJiYgdG91Y2hUYXJn
ZXQgIT0gZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVEb2N1bWVudEV2ZW50VGFy
Z2V0UmVjdHMocmVjdHMsIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50Kj4odG91Y2hUYXJnZXQp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSB0b3VjaFRhcmdldC0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAg
IGFjY3VtdWxhdGVSZW5kZXJlclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhyZWN0cywgcmVuZGVyZXIp
OworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZUFic29sdXRl
VG91Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgVmVjdG9yPElu
dFJlY3Q+JiByZWN0cykKK3sKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgIGlmICghZG9jdW1l
bnQtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoZXNlIHJlY3Rz
IHdvbid0IGJlIHByb3Blcmx5IHVwZGF0ZWQgaWYgdGhlIHJlbmRlcmVycyBhcmUgaW4gYSBzdWIt
dHJlZSB0aGF0IHNjcm9sbHMuCisgICAgYWNjdW11bGF0ZURvY3VtZW50RXZlbnRUYXJnZXRSZWN0
cyhyZWN0cywgZG9jdW1lbnQpOworfQorI2VuZGlmCisKIHVuc2lnbmVkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjb21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogewogICAgIHVu
c2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lv
biAxMzc1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUw
LDYgKzUxLDcgQEAgdHlwZWRlZiB1aW50NjRfdCBTY3JvbGxpbmdOb2RlSUQ7CiAKIGVudW0gU2Ny
b2xsaW5nTm9kZVR5cGUgeyBTY3JvbGxpbmdOb2RlLCBGaXhlZE5vZGUgfTsKIAorY2xhc3MgRG9j
dW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5
ZXI7CkBAIC0xNDksNiArMTUxLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
YWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5
ZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9z
aXRpb25MYXllcnMoR3JhcGhpY3NMYXllciosIGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllcklzRml4ZWRUb0NvbnRhaW5lckxheWVyKEdyYXBoaWNzTGF5ZXIqLCBib29sKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgdG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKGNvbnN0IERv
Y3VtZW50KikgeyB9CisgIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICB2
b2lkIGNvbXB1dGVBYnNvbHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBEb2N1bWVudCos
IFZlY3RvcjxJbnRSZWN0PiYpOworI2VuZGlmCiAKICAgICBzdGF0aWMgU3RyaW5nIG1haW5UaHJl
YWRTY3JvbGxpbmdSZWFzb25zQXNUZXh0KE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKICAg
ICBTdHJpbmcgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnNBc1RleHQoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAx
Mzc1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwz
MCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gZnJh
bWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgog
ICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKICAgICBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7CisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIFZlY3RvcjxJbnRSZWN0PiB0b3VjaEV2ZW50VGFy
Z2V0UmVjdHM7CisgICAgY29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKG1fcGFn
ZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCksIHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisgICAg
c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisjZW5kaWYK
K30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjp0b3VjaEV2ZW50VGFyZ2V0
UmVjdHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworI2lmIEVOQUJMRShU
T1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICAvLyBXYWl0IHVudGlsIGFmdGVyIGxheW91dCB0byB1
cGRhdGUuCisgICAgaWYgKG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+bmVlZHNMYXlvdXQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEg
c2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBv
dXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9w
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CisgICAgaWYgKG1fcHJpdmF0ZS0+c2Nyb2xsTGF5
ZXIoKSkgeworICAgICAgICBWZWN0b3I8SW50UmVjdD4gdG91Y2hFdmVudFRhcmdldFJlY3RzOwor
ICAgICAgICBjb21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1lbnQsIHRv
dWNoRXZlbnRUYXJnZXRSZWN0cyk7CisgICAgICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0
b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRv
Y3VtZW50KTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06
OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKQEAgLTIw
OSw2ICsyMzMsMTggQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRObwog
ICAgIH0KIH0KIAordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2
ZW50VGFyZ2V0UmVjdHMoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBhYnNvbHV0ZUhpdFRlc3RSZWN0
cykKK3sKKyAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigp
IGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KKyAgICBz
ZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgp
LT52aWV3KCkpKTsKKyAgICBpZiAobV9wcml2YXRlLT5zY3JvbGxMYXllcigpKSB7CisgICAgICAg
IFdlYlZlY3RvcjxXZWJSZWN0PiB3ZWJSZWN0cyhhYnNvbHV0ZUhpdFRlc3RSZWN0cy5zaXplKCkp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlSGl0VGVzdFJlY3RzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgd2ViUmVjdHNbaV0gPSBhYnNvbHV0ZUhpdFRlc3RSZWN0
c1tpXTsKKyAgICAgICAgbV9wcml2YXRlLT5zY3JvbGxMYXllcigpLT5zZXRUb3VjaEV2ZW50SGFu
ZGxlclJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVu
dEhhbmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRT
Y3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNl
bHZlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJl
dmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVt
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIg
KzY4LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBz
Y3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxl
QXJlYSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2
ZXIgdG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAg
IHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1l
bnQqKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWlu
VGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CiAKICAgICB2b2lkIHNldFNjcm9sbExheWVyKEdyYXBo
aWNzTGF5ZXIqKTsKICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJl
Z2lvbiYpOworICAgIHZvaWQgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0IFZlY3RvcjxJ
bnRSZWN0PiYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7
CiAgICAgUGFzc093blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhckxheWVyPiBjcmVhdGVTY3JvbGxi
YXJMYXllcihTY3JvbGxiYXIqLCBXZWJLaXQ6OldlYkxheWVyKiBzY3JvbGxMYXllciwgR3JhcGhp
Y3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVWaWV3Kik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiAr
NzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlbGVjdFJ1bGVGZWF0dXJlU2V0
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKQEAgLTEyMDAsOCArMTIwMSwzOCBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6OnRvdWNoRXZl
bnRIYW5kbGVyQ291CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBkb2N1
bWVudC0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpOworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJn
ZXRTZXQqIHRvdWNoSGFuZGxlcnMgPSBkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAg
ICBpZiAoIXRvdWNoSGFuZGxlcnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQg
Y291bnQgPSAwOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdldFNldDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHRvdWNoSGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIgIT0gdG91Y2hIYW5kbGVycy0+ZW5k
KCk7ICsraXRlcikKKyAgICAgICAgY291bnQgKz0gaXRlci0+dmFsdWU7CisgICAgcmV0dXJuIGNv
dW50OworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorUGFzc1JlZlB0cjxD
bGllbnRSZWN0TGlzdD4gSW50ZXJuYWxzOjp0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoRG9j
dW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+dmlldygpIHx8ICFkb2N1bWVudC0+cGFnZSgpKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYg
KCFkb2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICByZXR1
cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZSgpOworCisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgVmVjdG9yPEludFJlY3Q+IGFic29s
dXRlUmVjdHM7CisgICAgZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKS0+
Y29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50LCBhYnNvbHV0ZVJl
Y3RzKTsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVF1YWRzKGFic29sdXRlUmVjdHMu
c2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVSZWN0cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgYWJzb2x1dGVRdWFkc1tpXSA9IEZsb2F0UXVhZChhYnNvbHV0ZVJl
Y3RzW2ldKTsKKworICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKGFic29sdXRlUXVh
ZHMpOwogfQorI2VuZGlmCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEludGVybmFsczo6bm9kZXNG
cm9tUmVjdChEb2N1bWVudCogZG9jdW1lbnQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFk
ZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcs
IHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hh
ZG93Q29udGVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOSBAQCBwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KERvY3VtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoRG9jdW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAg
IFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IHRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhE
b2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gbm9kZXNGcm9tUmVjdChEb2N1bWVudCosIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9w
UGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgICAgICB1bnNpZ25lZCBib3R0b21Q
YWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCBh
bGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDEzNzUzMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw5
IEBACiAKICAgICB1bnNpZ25lZCBsb25nIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1l
bnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICB1bnNpZ25lZCBsb25nIHRv
dWNoRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORykgJiYgRU5B
QkxFX1RPVUNIX0VWRU5UX1RSQUNLSU5HCisgICAgQ2xpZW50UmVjdExpc3QgdG91Y2hFdmVudFRh
cmdldENsaWVudFJlY3RzKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlv
bik7CisjZW5kaWYKIAogICAgIE5vZGVMaXN0IG5vZGVzRnJvbVJlY3QoaW4gRG9jdW1lbnQgZG9j
dW1lbnQsIGluIGxvbmcgeCwgaW4gbG9uZyB5LAogICAgICAgICBpbiB1bnNpZ25lZCBsb25nIHRv
cFBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgcmlnaHRQYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25n
IGJvdHRvbVBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgbGVmdFBhZGRpbmcsCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NTMxKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0x
Mi0wNyAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3Qg
ZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBT
aW1vbiBGcmFzZXIuCisKKyAgICAgICAgRW5hYmxpbmcgdG91Y2ggZXZlbnQgdGFyZ2V0IHJlZ2lv
biB0cmFja2luZy4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogc3JjL1dl
YlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250
YWluZXJJbXBsOjpyZXF1ZXN0VG91Y2hFdmVudFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6CisKIDIwMTItMTIt
MTIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEVuY2Fwc3VsYXRl
IGV4dGVybmFsbHkgdXNlZCB3ZWJkYXRhYmFzZSBBUElzIGluIERhdGFiYXNlTWFuYWdlci4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDEzNzUzMSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MTE2LDYgKzExNiw3IEBACiAgICAgICAnRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MScsCiAgICAg
ICAnRU5BQkxFX1RPVUNIX0VWRU5UUz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdF
TkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTwoZW5hYmxlX3RvdWNoX2ljb25fbG9hZGluZyknLAor
ICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORz08KGVuYWJsZV90b3VjaF9ldmVudHMp
JywKICAgICAgICdFTkFCTEVfVE9VQ0hfU0xJREVSPTEnLAogICAgICAgJ0VOQUJMRV9VU0VSX1RJ
TUlORz0xJywKICAgICAgICdFTkFCTEVfVjhfU0NSSVBUX0RFQlVHX1NFUlZFUj0xJywKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5l
ckltcGwuY3BwCShyZXZpc2lvbiAxMzc1MzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDkgKzUz
MCw5IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRvdWMKICAgICAgICAg
cmV0dXJuOwogICAgIG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7CiAgICAg
aWYgKG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUp
Ci0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIo
KTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxl
cihtX2VsZW1lbnQpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiB9CiAKIHZvaWQgV2Vi
UGx1Z2luQ29udGFpbmVySW1wbDo6c2V0V2FudHNXaGVlbEV2ZW50cyhib29sIHdhbnRzV2hlZWxF
dmVudHMpCkBAIC02ODUsNyArNjg1LDcgQEAgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBs
dWdpbkNvbnRhaQogI2VuZGlmCiAKICAgICBpZiAobV90b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0g
VG91Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fcGx1Z2luTG9hZE9ic2VydmVycy5zaXplKCk7ICsraSkKICAg
ICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzW2ldLT5jbGVhclBsdWdpbkNvbnRhaW5lcigpOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMTM3NTMxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTItMDcgIExldmkgV2VpbnRyYXViICA8
bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBo
aXQgdGVzdCByZWN0YW5nbGVzIHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUg
Y29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAzOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1o
aXQtcmVjdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sOiBBZGRl
ZC4KKwogMjAxMi0xMi0xMSAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAoU3VicGl4ZWwgbGF5b3V0KTogR3JheSB2ZXJ0aWNhbCBsaW5lcyBh
cHBlYXIgd2hlbiBtb3ZpbmcgaW5zZXJ0aW9uIHBvaW50IHRvIHJpZ2h0IG9uIE1hYwpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRv
ci10b3VjaC1oaXQtcmVjdHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0
LXJlY3RzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACitUaGlzIHRlc3RzIHZl
cmlmaWVzIHRoZSBoaXQgdGVzdCByZWdpb25zIGdpdmVuIHRvIHRoZSBjb21wb3NpdG9yLiBJdCBj
YW4gb25seSBiZSBydW4gaW4gRHVtcFJlbmRlclRyZWUuIFRoZSBvdXRwdXR0ZWQgcmVjdHMgc2hv
dWxkIGNvdmVyIHRoZSBoaXQgdGVzdCByZWdpb25zIG9mIGFsbCB0aGUgbGlzdGVkIGVsZW1lbnRz
LgorCitub3JtYWxGbG93WzBdOiAoOCwgNzIsIDc4NCwgMTApCitub3JtYWxGbG93WzFdOiAoOCwg
NzIsIDc4NCwgMTApCitub3JtYWxGbG93WzJdOiAoMTI4LCA3MiwgMzAsIDEwKQorbm9ybWFsRmxv
d1szXTogKDgsIDcyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclswXTogKDgsIDE2
MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMV06ICg4LCAxNjIsIDc4NCwgMTAp
CithYnNvbHV0ZUNoaWxkQ29udGFpbmVyWzJdOiAoOCwgMTYyLCA3ODQsIDEwKQorYWJzb2x1dGVD
aGlsZENvbnRhaW5lclszXTogKDExOCwgMzAwLCAxNDAsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRh
aW5lcls0XTogKDExOCwgMzAwLCAxNDAsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclswXTog
KDgsIDI3MiwgNzg0LCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMV06ICg4LCAyNzIsIDc4
NCwgMTApCityZWxhdGl2ZUNoaWxkQ29udGFpbmVyWzJdOiAoOCwgMjcyLCA3ODQsIDEwKQorcmVs
YXRpdmVDaGlsZENvbnRhaW5lclszXTogKDEyOCwgNDcyLCAxNDAsIDEwKQorb3ZlcmhhbmdpbmdD
b250YWluZXJbMF06ICg4LCAzNjIsIDc4NCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclsxXTog
KDgsIDM2MiwgMTEwLCA4MCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzJdOiAoOCwgMzYyLCAxMTAs
IDgwKQordHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lclswXTogKDYyLCA0MjEsIDY2MSwgMzIpCit0
cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzFdOiAoNjIsIDQyMSwgNjYxLCAzMikKK3RyYW5zZm9y
bWVkQ2hpbGRDb250YWluZXJbMl06ICg4LCA0MzIsIDc2OSwgMTApCitjb250aW51YXRpb25bMF06
ICgxMDgsIDUwMiwgMTAwLCAxMCkKKworVGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0IHRlc3Qg
cmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVuIGluIER1
bXBSZW5kZXJUcmVlLiBUaGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRl
c3QgcmVnaW9ucyBvZiBhbGwgdGhlIGxpc3RlZCBlbGVtZW50cy4KKworbm9ybWFsRmxvd1swXTog
KDgsIDcyLCA3ODQsIDEwKQorbm9ybWFsRmxvd1sxXTogKDgsIDcyLCA3ODQsIDEwKQorbm9ybWFs
Rmxvd1syXTogKDEyOCwgNzIsIDMwLCAxMCkKK25vcm1hbEZsb3dbM106ICg4LCA3MiwgNzg0LCAx
MCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMF06ICg4LCAxNjIsIDc4NCwgMTApCithYnNvbHV0
ZUNoaWxkQ29udGFpbmVyWzFdOiAoOCwgMTYyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRh
aW5lclsyXTogKDgsIDE2MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbM106ICgx
MTgsIDMwMCwgMTQwLCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbNF06ICgxMTgsIDMwMCwg
MTQwLCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMF06ICg4LCAyNzIsIDc4NCwgMTApCity
ZWxhdGl2ZUNoaWxkQ29udGFpbmVyWzFdOiAoOCwgMjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGls
ZENvbnRhaW5lclsyXTogKDgsIDI3MiwgNzg0LCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJb
M106ICgxMjgsIDQ3MiwgMTQwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzBdOiAoOCwgMzYy
LCA3ODQsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMV06ICg4LCAzNjIsIDExMCwgODApCitv
dmVyaGFuZ2luZ0NvbnRhaW5lclsyXTogKDgsIDM2MiwgMTEwLCA4MCkKK3RyYW5zZm9ybWVkQ2hp
bGRDb250YWluZXJbMF06ICg2MiwgNDIxLCA2NjEsIDMyKQordHJhbnNmb3JtZWRDaGlsZENvbnRh
aW5lclsxXTogKDYyLCA0MjEsIDY2MSwgMzIpCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzJd
OiAoOCwgNDMyLCA3NjksIDEwKQorY29udGludWF0aW9uWzBdOiAoMTA4LCA1MDIsIDEwMCwgMTAp
CisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNo
L2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1o
aXQtcmVjdHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKyN0cmFuc2Zvcm1lZENoaWxkIHsKKwktd2Via2l0LXRyYW5zZm9ybTog
cm90YXRlM2QoMC4yLCAxLCAwLCAzNWdyYWQpOworfQorI2Fic29sdXRlQ2hpbGQgeworCXBvc2l0
aW9uOiBhYnNvbHV0ZTsKKwl0b3A6IDMwMHB4OworfQorI3JlbGF0aXZlQ2hpbGQgeworCXBvc2l0
aW9uOiByZWxhdGl2ZTsKKwl0b3A6IDIwMHB4OworfQorI292ZXJoYW5naW5nQ29udGFpbmVyIHsK
KwloZWlnaHQ6IDEwcHg7Cit9Cisjb3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIHsKKwl3aWR0aDog
MTAwcHg7CisJZmxvYXQ6IGxlZnQ7Cit9CisjdGVzdHMgeworCWZvbnQ6IDEwcHggQWhlbTsKK30K
Kzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0
cyB2ZXJpZmllcyB0aGUgaGl0IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4g
SXQgY2FuIG9ubHkgYmUgcnVuIGluIER1bXBSZW5kZXJUcmVlLgorVGhlIG91dHB1dHRlZCByZWN0
cyBzaG91bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxl
bWVudHMuPC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InRlc3RzIj4K
Kwk8ZGl2IGlkPSJub3JtYWxGbG93Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4+c3VtPC9zcGFu
Pi4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0g
aXBzdW0KKwkJPHNwYW4gaWQ9ImFic29sdXRlQ2hpbGQiPkFic29sdXRlIGNoaWxkPC9zcGFuPgor
CTwvZGl2PgorCTxkaXYgaWQ9InJlbGF0aXZlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1
bQorCQk8c3BhbiBpZD0icmVsYXRpdmVDaGlsZCI+UmVsYXRpdmUgY2hpbGQ8L3NwYW4+CisJPC9k
aXY+CisJPGRpdiBpZD0ib3ZlcmhhbmdpbmdDb250YWluZXIiPgorCQk8ZGl2IGlkPSJvdmVyaGFu
Z2luZ0Zsb2F0aW5nQ2hpbGQiPk92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92
ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0PC9kaXY+CisJPC9kaXY+CisJPGRpdiBp
ZD0idHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lciI+CisJCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hp
bGQiPlRyYW5zZm9ybWVkPC9kaXY+CisJPC9kaXY+CisJPGRpdj4KKwkJPGIgaWQ9ImNvbnRpbnVh
dGlvbiI+VGhpcyBiIHRhZworCQk8ZGl2PmNhdXNlcyBhPC9kaXY+CisJCWNvbnRpbnVhdGlvbjwv
Yj4KKwk8L2Rpdj4KKzwvZGl2PgorPHNjcmlwdD4KK2lmICghd2luZG93LnRlc3RSdW5uZXIpCisJ
cmV0dXJuOworCit3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxp
c3RlbmVyKCkgeyB9CisKK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKwl2YXIgc3BhbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29s
ZSIpLmFwcGVuZENoaWxkKHNwYW4pOworICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAv
Pic7Cit9CisKK2Z1bmN0aW9uIHNvcnRSZWN0cyhhLCBiKSB7CisJcmV0dXJuIGEudG9wIC0gYi50
b3A7Cit9CisKK2Z1bmN0aW9uIGxvZ1JlY3RzKGlkKSB7CisJZWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGlkKTsKKwllbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQn
LCBsaXN0ZW5lciwgZmFsc2UpOworCXJlY3RzID0gd2luZG93LmludGVybmFscy50b3VjaEV2ZW50
VGFyZ2V0Q2xpZW50UmVjdHMoZG9jdW1lbnQpOworCXZhciBzb3J0ZWRSZWN0cyA9IG5ldyBBcnJh
eSgpOworCWZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCXNvcnRlZFJl
Y3RzW2ldID0gcmVjdHNbaV07CisJc29ydGVkUmVjdHMuc29ydChzb3J0UmVjdHMpOworCWZvciAo
dmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCWxvZyhpZCArICJbIiArIGkgKyAi
XTogKCIgKyBzb3J0ZWRSZWN0c1tpXS5sZWZ0ICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLnRvcCAr
ICIsICIgKyBzb3J0ZWRSZWN0c1tpXS53aWR0aCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS5oZWln
aHQgKyAiKSIpOworCWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxp
c3RlbmVyLCBmYWxzZSk7Cit9CisKK2xvZ1JlY3RzKCJub3JtYWxGbG93Iik7Citsb2dSZWN0cygi
YWJzb2x1dGVDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoInJlbGF0aXZlQ2hpbGRDb250YWlu
ZXIiKTsKK2xvZ1JlY3RzKCJvdmVyaGFuZ2luZ0NvbnRhaW5lciIpOworbG9nUmVjdHMoInRyYW5z
Zm9ybWVkQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJjb250aW51YXRpb24iKTsKKwordmFy
IHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHMiKTsKK3Rlc3RD
b250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+Cisj
dHJhbnNmb3JtZWRDaGlsZCB7CisJLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZTNkKDAuMiwgMSwg
MCwgMzVncmFkKTsKK30KKyNhYnNvbHV0ZUNoaWxkIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJ
dG9wOiAzMDBweDsKK30KKyNyZWxhdGl2ZUNoaWxkIHsKKwlwb3NpdGlvbjogcmVsYXRpdmU7CisJ
dG9wOiAyMDBweDsKK30KKyNvdmVyaGFuZ2luZ0NvbnRhaW5lciB7CisJaGVpZ2h0OiAxMHB4Owor
fQorI292ZXJoYW5naW5nRmxvYXRpbmdDaGlsZCB7CisJd2lkdGg6IDEwMHB4OworCWZsb2F0OiBs
ZWZ0OworfQorI3Rlc3RzIHsKKwlmb250OiAxMHB4IEFoZW07Cit9Cis8L3N0eWxlPgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhp
dCB0ZXN0IHJlZ2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1
biBpbiBEdW1wUmVuZGVyVHJlZS4KK1RoZSBvdXRwdXR0ZWQgcmVjdHMgc2hvdWxkIGNvdmVyIHRo
ZSBoaXQgdGVzdCByZWdpb25zIG9mIGFsbCB0aGUgbGlzdGVkIGVsZW1lbnRzLjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJ0ZXN0cyI+CisJPGRpdiBpZD0ibm9ybWFs
RmxvdyI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuPnN1bTwvc3Bhbj4uCisJPC9kaXY+CisJPGRp
diBpZD0iYWJzb2x1dGVDaGlsZENvbnRhaW5lciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlk
PSJhYnNvbHV0ZUNoaWxkIj5BYnNvbHV0ZSBjaGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlk
PSJyZWxhdGl2ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9InJl
bGF0aXZlQ2hpbGQiPlJlbGF0aXZlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9Im92
ZXJoYW5naW5nQ29udGFpbmVyIj4KKwkJPGRpdiBpZD0ib3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxk
Ij5PdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBv
dmVyaGFuZ2luZyBmbG9hdDwvZGl2PgorCTwvZGl2PgorCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hp
bGRDb250YWluZXIiPgorCQk8ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxkIj5UcmFuc2Zvcm1lZDwv
ZGl2PgorCTwvZGl2PgorCTxkaXY+CisJCTxiIGlkPSJjb250aW51YXRpb24iPlRoaXMgYiB0YWcK
KwkJPGRpdj5jYXVzZXMgYTwvZGl2PgorCQljb250aW51YXRpb248L2I+CisJPC9kaXY+Cis8L2Rp
dj4KKzxzY3JpcHQ+CitpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQorCXJldHVybjsKKword2luZG93
LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsaXN0ZW5lcigpIHsgfQorCitm
dW5jdGlvbiBsb2cobXNnKSB7CisJdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChz
cGFuKTsKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlv
biBzb3J0UmVjdHMoYSwgYikgeworCXJldHVybiBhLnRvcCAtIGIudG9wOworfQorCitmdW5jdGlv
biBsb2dSZWN0cyhpZCkgeworCWVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7
CisJZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNl
KTsKKwlyZWN0cyA9IHdpbmRvdy5pbnRlcm5hbHMudG91Y2hFdmVudFRhcmdldENsaWVudFJlY3Rz
KGRvY3VtZW50KTsKKwl2YXIgc29ydGVkUmVjdHMgPSBuZXcgQXJyYXkoKTsKKwlmb3IgKHZhciBp
ID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgKytpKQorCQlzb3J0ZWRSZWN0c1tpXSA9IHJlY3RzW2ld
OworCXNvcnRlZFJlY3RzLnNvcnQoc29ydFJlY3RzKTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHJl
Y3RzLmxlbmd0aDsgKytpKQorCQlsb2coaWQgKyAiWyIgKyBpICsgIl06ICgiICsgc29ydGVkUmVj
dHNbaV0ubGVmdCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS50b3AgKyAiLCAiICsgc29ydGVkUmVj
dHNbaV0ud2lkdGggKyAiLCAiICsgc29ydGVkUmVjdHNbaV0uaGVpZ2h0ICsgIikiKTsKKwllbGVt
ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2UpOwor
fQorCitsb2dSZWN0cygibm9ybWFsRmxvdyIpOworbG9nUmVjdHMoImFic29sdXRlQ2hpbGRDb250
YWluZXIiKTsKK2xvZ1JlY3RzKCJyZWxhdGl2ZUNoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygi
b3ZlcmhhbmdpbmdDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJ0cmFuc2Zvcm1lZENoaWxkQ29udGFp
bmVyIik7Citsb2dSZWN0cygiY29udGludWF0aW9uIik7CisKK3ZhciB0ZXN0Q29udGFpbmVyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RzIik7Cit0ZXN0Q29udGFpbmVyLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179150</attachid>
            <date>2012-12-12 16:45:53 -0800</date>
            <delta_ts>2012-12-14 16:54:49 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103914-20121212164211.patch</filename>
            <type>text/plain</type>
            <size>37313</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDEyLTEyLTA3ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
dHJhY2tpbmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rp
b24gaW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGluZyBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCB0YXJnZXQg
cmVnaW9ucyBmb3IgdGhlIHB1cnBvc2Ugb2YgcGVyZm9ybWluZyBpbml0aWFsIGhpdCB0ZXN0aW5n
CisgICAgICAgIGluIHRoZSBjb21wb3NpdG9yIHRvIGF2b2lkIGJsb2NraW5nIHNjcm9sbGluZyBv
biB0aGUgbWFpbiB0aHJlYWQgd2hpbGUgd2FpdGluZyB0byBoaXQgdGVzdCBldmVudHMgdGhhdAor
ICAgICAgICBhcmVuJ3Qgb2NjdXJpbmcgaW4gcmVnaW9ucyB3aXRoIGhhbmRsZXJzLiBUaGlzIGlz
IGluaXRpYWxseSBiZWluZyBkb25lIHRvIGF2b2lkIGhhdmluZyB0byBnbyB0byB0aGUgbWFpbgor
ICAgICAgICB0aHJlYWQgd2hlbiBzY3JvbGxpbmcgYnkgZmxpY2tpbmcgb24gdG91Y2ggZGV2aWNl
cyB3aGVuIHRoZSBmbGljayBvY2N1cnMgb3V0c2lkZSBhIHRyYWNrZWQgdG91Y2ggZXZlbnQKKyAg
ICAgICAgcmVnaW9uLiBUaGlzIHBhdGNoIGluY2x1ZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byB0
dXJuIHRoaXMgb24gaW4gQ2hyb21pdW0uCisKKyAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzIGdv
YWwsIERvY3VtZW50IHdpbGwgbm93IGtlZXAgYSBjb3VudGVkIGhhc2ggc2V0IG9mIG5vZGVzIHdp
dGggdG91Y2ggZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgaW5zdGVhZCBvZiBvbmx5IGFuIHVuc2ln
bmVkIGludGVnZXIgb2YgdGhlIHRvdGFsIGNvdW50LiBTY3JvbGxpbmdDb29yZGluYXRvciB0aGVu
IHVwZGF0ZXMgdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgd2hlbiBuZXcgdG91Y2ggZXZlbnQgaGFu
ZGxlcnMgYXJlIHJlZ2lzdGVyZWQgb3IgcmVtb3ZlZCwgb3IgYWZ0ZXIgbGF5b3V0IG11Y2ggbGlr
ZSBob3cKKyAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25zIGFyZSBjdXJyZW50bHkgdHJh
Y2tlZC4KKworICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIHdpbGwgbm90IHByb3Blcmx5IHVw
ZGF0ZSB0aGUgaGl0IHRlc3QgcmVjdHMgd2hlbiB0aGUgcmVuZGVyZXJzIGFyZSBpbnNpZGUgYSBz
dWItCisgICAgICAgIHRyZWUgdGhhdCBzY3JvbGxzLgorCisgICAgICAgIFRlc3Q6IHBsYXRmb3Jt
L2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0
bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6RG9jdW1lbnQpOiBBZGRlZCBhIEhhc2hDb3VudGVkU2V0IG9mIHRvdWNoIHRhcmdldCBu
b2Rlcy4gTm90ZTogRE9NV2luZG93IHRhcmdldHMKKyAgICAgICAgYXJlIHN0b3JlZCBhcyB0aGUg
RG9jdW1lbnQgdGhleSBwb2ludCB0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRB
ZGRUb3VjaEV2ZW50SGFuZGxlcik6IENoYW5nZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgaGFuZGxl
ciBpbnN0ZWFkIG9mIGEgY291bnQsIGFuZAorICAgICAgICB0byB1cGRhdGUgdGhlIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yIHdpdGggdGhlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Omhhc1RvdWNoRXZlbnRIYW5kbGVy
cyk6IEl0J3Mgbm8gbG9uZ2VyIE8oMSkgdG8gZ2V0IHRoZSBjb3VudCBvZiB0b3VjaCBoYW5kbGVy
cywgc28KKyAgICAgICAgZXhwb3NlIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvciBub3QuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudFRhcmdldHMpOgorICAgICAgICAqIGRv
bS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpZE1vdmVUb05ld0RvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRG
cmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZUJhc2U6OnJlc3RvcmUpOgor
ICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIpOiBBZGQg
dGhlIERvY3VtZW50IHRvIHRoZSB0b3VjaCB0YXJnZXQgc2V0IGluc3RlYWQgb2YgRE9NV2luZG93
LgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKTogV2Fs
ayB0aGUgcmVuZGVyZXJzIGZvciBldmVudCBoYW5kbGVyCisgICAgICAgIG5vZGVzIGFuZCBnZW5l
cmF0ZSB0aGUgYWJzb2x1dGUgaGl0IHRlc3RpbmcgcmVjdHMuCisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKTogSG9vayB0byBw
YXNzIGFsb25nIHRoZSBoaXQgdGVzdCByZWN0cyB0bworICAgICAgICB0aGUgc2Nyb2xsaW5nIHRy
ZWUvY29tcG9zaXRvci4KKyAgICAgICAgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1l
Vmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3JDaHJvbWl1bTo6c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2No
cm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW0pOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCk6IENo
YW5nZWQgdG8gZG8gdGhlIHdvcmsgdG8gY2FsY3VsYXRlIHRoZSBhY3R1YWwgY291bnQgc2luY2UK
KyAgICAgICAgaXQncyBubyBsb25nZXIgc3RvcmVkIGFzIGFuIGludCBpbiBEb2N1bWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKToK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAoSW50ZXJuYWxzKToKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTItMTItMTIgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIxMzc1MjQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDEzNzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5OCw5ICs0OTgsNiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBj
b25zdCBLCiAgICAgLCBtX3dyaXRlUmVjdXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwgbV93
cml0ZVJlY3Vyc2lvbkRlcHRoKDApCiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkK
LSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50
KDApCi0jZW5kaWYKICAgICAsIG1fcGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50Ojpw
ZW5kaW5nVGFza3NUaW1lckZpcmVkKQogICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRl
ZChmYWxzZSkKICAgICAsIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTU1OTksMzMg
KzU1OTYsNTcgQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZQogICAg
IHdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50
OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2
ZW50SGFuZGxlcihOb2RlKiBoYW5kbGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0g
ICAgKyttX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhhbmRs
ZXJDb3VudCA+IDEpCisgICAgaWYgKCFtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKQorICAgICAg
ICBtX3RvdWNoRXZlbnRUYXJnZXRzID0gYWRvcHRQdHIobmV3IFRvdWNoRXZlbnRUYXJnZXRTZXQp
OworICAgIG1fdG91Y2hFdmVudFRhcmdldHMtPmFkZChoYW5kbGVyKTsKKyAgICBpZiAoRG9jdW1l
bnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRBZGRU
b3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChQYWdlKiBw
YWdlID0gdGhpcy0+cGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5l
ZWRUb3VjaEV2ZW50cyh0cnVlKTsKKyAgICB9CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5w
YWdlKCkpIHsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgICAgIGlmIChT
Y3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxp
bmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnRvdWNo
RXZlbnRUYXJnZXRSZWN0c0RpZENoYW5nZSh0aGlzKTsKKyNlbmRpZgorICAgICAgICBpZiAobV90
b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpID09IDEpCisgICAgICAgICAgICBwYWdlLT5jaHJvbWUo
KS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsKKyAgICB9CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShoYW5kbGVyKTsKICNlbmRpZgogfQogCi12b2lkIERvY3VtZW50OjpkaWRSZW1v
dmVUb3VjaEV2ZW50SGFuZGxlcigpCit2b2lkIERvY3VtZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcihOb2RlKiBoYW5kbGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAg
QVNTRVJUKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCk7Ci0gICAgLS1tX3RvdWNoRXZlbnRIYW5k
bGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCkKKyAgICBpZiAoIW1f
dG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV90
b3VjaEV2ZW50VGFyZ2V0cy0+Y29udGFpbnMoaGFuZGxlcikpOworICAgIG1fdG91Y2hFdmVudFRh
cmdldHMtPnJlbW92ZShoYW5kbGVyKTsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVu
dERvY3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxl
cih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFBhZ2UqIHBhZ2UgPSB0aGlz
LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xs
aW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBz
Y3JvbGxpbmdDb29yZGluYXRvci0+dG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKHRoaXMp
OworI2VuZGlmCisgICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUoKSkKKyAgICAgICAg
cmV0dXJuOwogICAgIGZvciAoY29uc3QgRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+dG91Y2hFdmVudEhh
bmRsZXJDb3VudCgpKQorICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRv
Y3VtZW50KCktPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyhmYWxz
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKICNlbmRpZgogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTM3NTM1KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsOCBAQCBlbnVtIE5v
ZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB7CiB9OwogY29uc3QgaW50IG51bU5vZGVMaXN0SW52YWxp
ZGF0aW9uVHlwZXMgPSBJbnZhbGlkYXRlT25BbnlBdHRyQ2hhbmdlICsgMTsKIAordHlwZWRlZiBI
YXNoQ291bnRlZFNldDxOb2RlKj4gVG91Y2hFdmVudFRhcmdldFNldDsKKwogY2xhc3MgRG9jdW1l
bnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSwgcHVibGljIFRyZWVTY29wZSwgcHVibGljIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3Vt
ZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCkBAIC0xMTE4LDEzICsx
MTIwLDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7
CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5k
bGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7IH0KKyAg
ICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIChtX3RvdWNoRXZl
bnRUYXJnZXRzLmdldCgpKSA/IG1fdG91Y2hFdmVudFRhcmdldHMtPnNpemUoKSA6IGZhbHNlOyB9
CiAjZWxzZQotICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7
Ci0gICAgdm9pZCBkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgIHZvaWQgZGlkQWRk
VG91Y2hFdmVudEhhbmRsZXIoTm9kZSopOworICAgIHZvaWQgZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIoTm9kZSopOworCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBjb25zdCBUb3Vj
aEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdG91
Y2hFdmVudFRhcmdldHMuZ2V0KCk7IH0KKyNlbHNlCisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdl
dFNldCogdG91Y2hFdmVudFRhcmdldHMoKSBjb25zdCB7IHJldHVybiAwOyB9CisjZW5kaWYKIAog
ICAgIGJvb2wgdmlzdWFsVXBkYXRlc0FsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX3Zpc3VhbFVw
ZGF0ZXNBbGxvd2VkOyB9CiAKQEAgLTE1MDMsNyArMTUxMSw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdW5zaWduZWQgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50OwogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCi0gICAgdW5zaWduZWQgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OworICAgIE93blB0
cjxUb3VjaEV2ZW50VGFyZ2V0U2V0PiBtX3RvdWNoRXZlbnRUYXJnZXRzOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShy
ZXZpc2lvbiAxMzc1MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMjIsOCArMjEyMiw4IEBAIHZvaWQgTm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1l
bnQoRG9jdW1lbnQKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdWNoRXZlbnROYW1lcy5z
aXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5l
cnMgPSBnZXRFdmVudExpc3RlbmVycyh0b3VjaEV2ZW50TmFtZXNbaV0pOwogICAgICAgICBmb3Ig
KHNpemVfdCBqID0gMDsgaiA8IGxpc3RlbmVycy5zaXplKCk7ICsraikgewotICAgICAgICAgICAg
b2xkRG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7Ci0gICAgICAgICAgICBk
b2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgb2xkRG9j
dW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTIxNTIsNyArMjE1Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0cnlBZGRFdmVudExp
c3RlbmVyKE4KICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVl
bEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKCk7
CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlw
ZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0YXJnZXROb2RlKTsK
ICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNzQsNyArMjE3NCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCB0cnlSZW1vdmVFdmVudExpc3RlbmUKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRp
ZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMo
KS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlk
UmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1v
dmVUb3VjaEV2ZW50SGFuZGxlcih0YXJnZXROb2RlKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCShyZXZpc2lvbiAx
Mzc1MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgQ2FjaGVkRnJhbWVCYXNlOjpyZXN0b3Jl
KCkKICAgICBtX2RvY3VtZW50LT5lbnF1ZXVlUG9wc3RhdGVFdmVudChoaXN0b3J5SXRlbSAmJiBo
aXN0b3J5SXRlbS0+c3RhdGVPYmplY3QoKSA/IGhpc3RvcnlJdGVtLT5zdGF0ZU9iamVjdCgpIDog
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CiAgICAgCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKLSAgICBpZiAobV9kb2N1bWVudC0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgp
KQorICAgIGlmIChtX2RvY3VtZW50LT5oYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSkKICAgICAgICAg
bV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0
cnVlKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDEzNzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMsNyBAQCBIVE1MSW5wdXRF
bGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiAgICAgICAgIGRvY3VtZW50KCktPmZvcm1Db250
cm9sbGVyKCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9oYXNUb3VjaEV2ZW50SGFuZGxlcikKLSAg
ICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAjZW5kaWYKIH0K
IApAQCAtNDg5LDkgKzQ4OSw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSgp
CiAgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlciA9IG1faW5wdXRUeXBlLT5oYXNUb3VjaEV2
ZW50SGFuZGxlcigpOwogICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxlciAhPSBtX2hhc1RvdWNo
RXZlbnRIYW5kbGVyKSB7CiAgICAgICBpZiAoaGFzVG91Y2hFdmVudEhhbmRsZXIpCi0gICAgICAg
IGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRvY3VtZW50
KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgZWxzZQotICAgICAgICBk
b2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBkb2N1bWVu
dCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgIG1faGFzVG91Y2hF
dmVudEhhbmRsZXIgPSBoYXNUb3VjaEV2ZW50SGFuZGxlcjsKICAgICB9CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDEzNzUzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4MSw3ICsxNTgx
LDcgQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQQogICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAo
ZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRv
Y3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgZG9jdW1lbnQt
PmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKGRvY3VtZW50KTsKICAgICAgICAgZWxzZSBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQpCiAgICAgICAgICAgICBkaWRBZGRT
dG9yYWdlRXZlbnRMaXN0ZW5lcih0aGlzKTsKICAgICB9CkBAIC0xNjEyLDcgKzE2MTIsNyBAQCBi
b29sIERPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zCiAgICAgICAgIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3Vt
ZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVu
dE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1l
bnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+
ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoZG9jdW1lbnQpOwogICAgIH0KIAogICAgIGlmIChl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTM3NTM1KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTM5LDcgKzM5MzksNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmICghZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgICAgICBp
ZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuc2V0KHRvdWNo
UG9pbnRUYXJnZXRLZXksIG5vZGUpOwogICAgICAgICAgICAgdG91Y2hUYXJnZXQgPSBub2RlOwpA
QCAtMzk2NCw3ICszOTY0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQo
Y29ucwogICAgICAgICBEb2N1bWVudCogZG9jID0gdG91Y2hUYXJnZXQtPnRvTm9kZSgpLT5kb2N1
bWVudCgpOwogICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAoIWRvYy0+
aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
RnJhbWUqIHRhcmdldEZyYW1lID0gZG9jLT5mcmFtZSgpOwogICAgICAgICBpZiAoIXRhcmdldEZy
YW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzNzUzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcg
QEAgdm9pZCBGcmFtZTo6c2V0RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bQogICAgIGlmIChtX3Bh
Z2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKSA9PSB0aGlzKSB7CiAgICAgICAgIG5vdGlmeUNocm9t
ZUNsaWVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKCk7CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKLSAgICAgICAgaWYgKG1fZG9jICYmIG1fZG9jLT50b3VjaEV2ZW50SGFuZGxlckNv
dW50KCkpCisgICAgICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJz
KCkpCiAgICAgICAgICAgICBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZl
bnRzKHRydWUpOwogI2VuZGlmCiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTM3
NTM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAg
LTE3Niw2ICsxNzcsNTQgQEAgUmVnaW9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9u
RgogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KIAorI2lmIEVOQUJMRShU
T1VDSF9FVkVOVF9UUkFDS0lORykKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVSZW5kZXJlclRvdWNo
RXZlbnRUYXJnZXRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQoreworICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBPKE5eMikgYXMg
aXQgd2Fsa3MgdGhlIHRyZWUgdG8gdGhlIHJvb3QgZm9yIGV2ZXJ5IHJlbmRlcmVyLiBSZW5kZXJH
ZW9tZXRyeU1hcCB3b3VsZCBmaXggdGhpcy4KKyAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50
UmVjdChyZW5kZXJlci0+Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoMCkpKTsKKyAgICBp
ZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkgeworICAgICAgICBjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKTsKKyAgICAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gYmxvY2stPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBhY2N1bXVsYXRlUmVuZGVyZXJUb3VjaEV2ZW50
VGFyZ2V0UmVjdHMocmVjdHMsIGNoaWxkKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFjY3Vt
dWxhdGVEb2N1bWVudEV2ZW50VGFyZ2V0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgaWYg
KCFkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdGFyZ2V0cyA9IGRvY3VtZW50LT50b3VjaEV2ZW50
VGFyZ2V0cygpOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdldFNldDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHRhcmdldHMtPmJlZ2luKCk7IGl0ZXIgIT0gdGFyZ2V0cy0+ZW5kKCk7ICsraXRlcikg
eworICAgICAgICBjb25zdCBOb2RlKiB0b3VjaFRhcmdldCA9IGl0ZXItPmtleTsKKyAgICAgICAg
aWYgKHRvdWNoVGFyZ2V0ID09IGRvY3VtZW50KSB7CisgICAgICAgICAgICBpZiAoUmVuZGVyVmll
dyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkpCisgICAgICAgICAgICAgICAgcmVjdHMu
YXBwZW5kKGVuY2xvc2luZ0ludFJlY3Qodmlldy0+Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFp
bnQoMCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b3VjaFRhcmdldC0+aXNEb2N1bWVudE5vZGUoKSAmJiB0b3VjaFRhcmdldCAhPSBkb2N1bWVudCkg
eworICAgICAgICAgICAgYWNjdW11bGF0ZURvY3VtZW50RXZlbnRUYXJnZXRSZWN0cyhyZWN0cywg
c3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnQqPih0b3VjaFRhcmdldCkpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHRvdWNoVGFyZ2V0LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgYWNjdW11bGF0ZVJlbmRl
cmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJlY3RzLCByZW5kZXJlcik7CisgICAgfQorfQorCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0
UmVjdHMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQor
eworICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgaWYgKCFkb2N1bWVudC0+dmlldygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhlc2UgcmVjdHMgd29uJ3QgYmUgcHJvcGVy
bHkgdXBkYXRlZCBpZiB0aGUgcmVuZGVyZXJzIGFyZSBpbiBhIHN1Yi10cmVlIHRoYXQgc2Nyb2xs
cy4KKyAgICBhY2N1bXVsYXRlRG9jdW1lbnRFdmVudFRhcmdldFJlY3RzKHJlY3RzLCBkb2N1bWVu
dCk7Cit9CisjZW5kaWYKKwogdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVD
dXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWduZWQgd2hlZWxFdmVu
dEhhbmRsZXJDb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzNzUzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTAsNiArNTEsNyBAQCB0eXBl
ZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAogZW51bSBTY3JvbGxpbmdOb2RlVHlwZSB7
IFNjcm9sbGluZ05vZGUsIEZpeGVkTm9kZSB9OwogCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZy
YW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsKQEAgLTE0OSw2ICsx
NTEsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExh
eWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFw
aGljc0xheWVyKiwgYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNGaXhlZFRv
Q29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1lbnQqKSB7IH0KKwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICB2b2lkIGNvbXB1dGVBYnNvbHV0
ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25zdCBEb2N1bWVudCosIFZlY3RvcjxJbnRSZWN0PiYp
OworI2VuZGlmCiAKICAgICBzdGF0aWMgU3RyaW5nIG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25z
QXNUZXh0KE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKICAgICBTdHJpbmcgbWFpblRocmVh
ZFNjcm9sbGluZ1JlYXNvbnNBc1RleHQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzc1MzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwzMCBAQCB2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lCiAgICAgLy8gZnJhbWUgdmlldyB3aG9zZSBsYXlv
dXQgd2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgogICAgIFJlZ2lvbiBub25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3BhZ2Ut
Pm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKICAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bihub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNL
SU5HKQorICAgIFZlY3RvcjxJbnRSZWN0PiB0b3VjaEV2ZW50VGFyZ2V0UmVjdHM7CisgICAgY29t
cHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKG1fcGFnZS0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCksIHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisgICAgc2V0VG91Y2hFdmVudFRhcmdl
dFJlY3RzKHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvckNocm9taXVtOjp0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lO
RykKKyAgICAvLyBXYWl0IHVudGlsIGFmdGVyIGxheW91dCB0byB1cGRhdGUuCisgICAgaWYgKG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gV2Ugd29uJ3QgbmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBj
YWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCisgICAgc2V0
U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+
dmlldygpKSk7CisgICAgaWYgKG1fcHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICBW
ZWN0b3I8SW50UmVjdD4gdG91Y2hFdmVudFRhcmdldFJlY3RzOworICAgICAgICBjb21wdXRlQWJz
b2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoZG9jdW1lbnQsIHRvdWNoRXZlbnRUYXJnZXRSZWN0
cyk7CisgICAgICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVj
dHMpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRpZgog
fQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXll
ckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKQEAgLTIwOSw2ICsyMzMsMTggQEAgdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRObwogICAgIH0KIH0KIAordm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29u
c3QgVmVjdG9yPEludFJlY3Q+JiBhYnNvbHV0ZUhpdFRlc3RSZWN0cykKK3sKKyAgICAvLyBXZSB3
b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMg
b25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KKyAgICBzZXRTY3JvbGxMYXllcihzY3Jv
bGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsKKyAgICBp
ZiAobV9wcml2YXRlLT5zY3JvbGxMYXllcigpKSB7CisgICAgICAgIFdlYlZlY3RvcjxXZWJSZWN0
PiB3ZWJSZWN0cyhhYnNvbHV0ZUhpdFRlc3RSZWN0cy5zaXplKCkpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFic29sdXRlSGl0VGVzdFJlY3RzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgd2ViUmVjdHNbaV0gPSBhYnNvbHV0ZUhpdFRlc3RSZWN0c1tpXTsKKyAgICAgICAgbV9w
cml2YXRlLT5zY3JvbGxMYXllcigpLT5zZXRUb3VjaEV2ZW50SGFuZGxlclJlZ2lvbih3ZWJSZWN0
cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKIHsK
ICAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwg
YmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNlbHZlcy4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hy
b21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJv
bWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgJKHJldmlzaW9uIDEzNzUzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4LDE2IEBAIHB1YmxpYzoK
ICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZv
ciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hhbmdlcy4KICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
YWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5
ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdG91Y2ggaGFuZGxlcnMg
YXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAgIHZpcnR1YWwgdm9pZCB0b3Vj
aEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1lbnQqKSBPVkVSUklERTsKKwog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkVXBk
YXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVh
c29ucyk7CiAKICAgICB2b2lkIHNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2
b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYpOworICAgIHZvaWQg
c2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOwogICAgIHZv
aWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7CiAgICAgUGFzc093blB0cjxX
ZWJLaXQ6OldlYlNjcm9sbGJhckxheWVyPiBjcmVhdGVTY3JvbGxiYXJMYXllcihTY3JvbGxiYXIq
LCBXZWJLaXQ6OldlYkxheWVyKiBzY3JvbGxMYXllciwgR3JhcGhpY3NMYXllciogc2Nyb2xsYmFy
R3JhcGhpY3NMYXllciwgRnJhbWVWaWV3Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAJKHJldmlzaW9uIDEzNzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGlu
YXRvci5oIgogI2luY2x1ZGUgIlNlbGVjdFJ1bGVGZWF0dXJlU2V0LmgiCiAjaW5jbHVkZSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTEyMDAsOCAr
MTIwMSwzOCBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiBkb2N1bWVudC0+dG91Y2hFdmVudEhh
bmRsZXJDb3VudCgpOworICAgIGNvbnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoSGFuZGxl
cnMgPSBkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKTsKKyAgICBpZiAoIXRvdWNoSGFuZGxl
cnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGZv
ciAoVG91Y2hFdmVudFRhcmdldFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRvdWNoSGFuZGxl
cnMtPmJlZ2luKCk7IGl0ZXIgIT0gdG91Y2hIYW5kbGVycy0+ZW5kKCk7ICsraXRlcikKKyAgICAg
ICAgY291bnQgKz0gaXRlci0+dmFsdWU7CisgICAgcmV0dXJuIGNvdW50OworfQorCisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gSW50
ZXJuYWxzOjp0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoRG9jdW1lbnQqIGRvY3VtZW50LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmll
dygpIHx8ICFkb2N1bWVudC0+cGFnZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1Nf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFkb2N1bWVudC0+cGFnZSgp
LT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6
OmNyZWF0ZSgpOworCisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOworCisgICAgVmVjdG9yPEludFJlY3Q+IGFic29sdXRlUmVjdHM7CisgICAgZG9j
dW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKS0+Y29tcHV0ZUFic29sdXRlVG91
Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50LCBhYnNvbHV0ZVJlY3RzKTsKKyAgICBWZWN0b3I8
RmxvYXRRdWFkPiBhYnNvbHV0ZVF1YWRzKGFic29sdXRlUmVjdHMuc2l6ZSgpKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVSZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAg
YWJzb2x1dGVRdWFkc1tpXSA9IEZsb2F0UXVhZChhYnNvbHV0ZVJlY3RzW2ldKTsKKworICAgIHJl
dHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKGFic29sdXRlUXVhZHMpOwogfQorI2VuZGlmCiAK
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEludGVybmFsczo6bm9kZXNGcm9tUmVjdChEb2N1bWVudCog
ZG9jdW1lbnQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmln
aHRQYWRkaW5nLAogICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRk
aW5nLCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgRXhjZXB0
aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHJl
dmlzaW9uIDEzNzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCB3
aGVlbEV2ZW50SGFuZGxlckNvdW50KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHVu
c2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIFBhc3NSZWZQdHI8Q2xpZW50
UmVjdExpc3Q+IHRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhEb2N1bWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVj
dChEb2N1bWVudCosIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQg
cmlnaHRQYWRkaW5nLAogICAgICAgICB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBs
ZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQs
IEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5pZGwJKHJldmlzaW9uIDEzNzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw5IEBACiAKICAgICB1bnNpZ25l
ZCBsb25nIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNl
cyAoRE9NRXhjZXB0aW9uKTsKICAgICB1bnNpZ25lZCBsb25nIHRvdWNoRXZlbnRIYW5kbGVyQ291
bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNpZiBkZWZp
bmVkKEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORykgJiYgRU5BQkxFX1RPVUNIX0VWRU5UX1RS
QUNLSU5HCisgICAgQ2xpZW50UmVjdExpc3QgdG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKGlu
IERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKIAogICAg
IE5vZGVMaXN0IG5vZGVzRnJvbVJlY3QoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGxvbmcgeCwg
aW4gbG9uZyB5LAogICAgICAgICBpbiB1bnNpZ25lZCBsb25nIHRvcFBhZGRpbmcsIGluIHVuc2ln
bmVkIGxvbmcgcmlnaHRQYWRkaW5nLCBpbiB1bnNpZ25lZCBsb25nIGJvdHRvbVBhZGRpbmcsIGlu
IHVuc2lnbmVkIGxvbmcgbGVmdFBhZGRpbmcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTM3NTM1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMi0wNyAgTGV2aSBXZWludHJh
dWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNr
aW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGlu
IHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDM5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAg
ICAgICAgRW5hYmxpbmcgdG91Y2ggZXZlbnQgdGFyZ2V0IHJlZ2lvbiB0cmFja2luZy4KKworICAg
ICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpyZXF1ZXN0
VG91Y2hFdmVudFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBs
Ojp+V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6CisKIDIwMTItMTItMTIgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEVuY2Fwc3VsYXRlIGV4dGVybmFsbHkgdXNlZCB3
ZWJkYXRhYmFzZSBBUElzIGluIERhdGFiYXNlTWFuYWdlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDEzNzUzNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBACiAg
ICAgICAnRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MScsCiAgICAgICAnRU5BQkxFX1RPVUNIX0VW
RU5UUz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVfVE9VQ0hfSUNPTl9M
T0FESU5HPTwoZW5hYmxlX3RvdWNoX2ljb25fbG9hZGluZyknLAorICAgICAgJ0VOQUJMRV9UT1VD
SF9FVkVOVF9UUkFDS0lORz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdFTkFCTEVf
VE9VQ0hfU0xJREVSPTEnLAogICAgICAgJ0VOQUJMRV9VU0VSX1RJTUlORz0xJywKICAgICAgICdF
TkFCTEVfVjhfU0NSSVBUX0RFQlVHX1NFUlZFUj0xJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lv
biAxMzc1MzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWlu
ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDkgKzUzMCw5IEBAIHZvaWQgV2ViUGx1
Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRvdWMKICAgICAgICAgcmV0dXJuOwogICAgIG1fdG91
Y2hFdmVudFJlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7CiAgICAgaWYgKG1fdG91Y2hFdmVudFJl
cXVlc3RUeXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0gICAgICAgIG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVt
ZW50LT5kb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogICAg
IGVsc2UKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50
SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6c2V0V2FudHNXaGVlbEV2ZW50cyhib29sIHdhbnRzV2hlZWxFdmVudHMpCkBAIC02ODUsNyAr
Njg1LDcgQEAgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBsdWdpbkNvbnRhaQogI2VuZGlm
CiAKICAgICBpZiAobV90b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0gVG91Y2hFdmVudFJlcXVlc3RU
eXBlTm9uZSkKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2
ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRv
dWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fcGx1Z2luTG9hZE9ic2VydmVycy5zaXplKCk7ICsraSkKICAgICAgICAgbV9wbHVnaW5Mb2Fk
T2JzZXJ2ZXJzW2ldLT5jbGVhclBsdWdpbkNvbnRhaW5lcigpOwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTM3NTM1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMTItMTItMDcgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0YW5nbGVz
IHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3Vj
aC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sOiBBZGRlZC4KKwogMjAxMi0xMi0xMSAg
RW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAo
U3VicGl4ZWwgbGF5b3V0KTogR3JheSB2ZXJ0aWNhbCBsaW5lcyBhcHBlYXIgd2hlbiBtb3Zpbmcg
aW5zZXJ0aW9uIHBvaW50IHRvIHJpZ2h0IG9uIE1hYwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZl
bnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACitUaGlzIHRlc3RzIHZlcmlmaWVzIHRoZSBoaXQgdGVz
dCByZWdpb25zIGdpdmVuIHRvIHRoZSBjb21wb3NpdG9yLiBJdCBjYW4gb25seSBiZSBydW4gaW4g
RHVtcFJlbmRlclRyZWUuIFRoZSBvdXRwdXR0ZWQgcmVjdHMgc2hvdWxkIGNvdmVyIHRoZSBoaXQg
dGVzdCByZWdpb25zIG9mIGFsbCB0aGUgbGlzdGVkIGVsZW1lbnRzLgorCitub3JtYWxGbG93WzBd
OiAoOCwgNzIsIDc4NCwgMTApCitub3JtYWxGbG93WzFdOiAoOCwgNzIsIDc4NCwgMTApCitub3Jt
YWxGbG93WzJdOiAoMTI4LCA3MiwgMzAsIDEwKQorbm9ybWFsRmxvd1szXTogKDgsIDcyLCA3ODQs
IDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclswXTogKDgsIDE2MiwgNzg0LCAxMCkKK2Fic29s
dXRlQ2hpbGRDb250YWluZXJbMV06ICg4LCAxNjIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxkQ29u
dGFpbmVyWzJdOiAoOCwgMTYyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclszXTog
KDExOCwgMzAwLCAxNDAsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lcls0XTogKDExOCwgMzAw
LCAxNDAsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclswXTogKDgsIDI3MiwgNzg0LCAxMCkK
K3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMV06ICg4LCAyNzIsIDc4NCwgMTApCityZWxhdGl2ZUNo
aWxkQ29udGFpbmVyWzJdOiAoOCwgMjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5l
clszXTogKDEyOCwgNDcyLCAxNDAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMF06ICg4LCAz
NjIsIDc4NCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclsxXTogKDgsIDM2MiwgMTEwLCA4MCkK
K292ZXJoYW5naW5nQ29udGFpbmVyWzJdOiAoOCwgMzYyLCAxMTAsIDgwKQordHJhbnNmb3JtZWRD
aGlsZENvbnRhaW5lclswXTogKDYyLCA0MjEsIDY2MSwgMzIpCit0cmFuc2Zvcm1lZENoaWxkQ29u
dGFpbmVyWzFdOiAoNjIsIDQyMSwgNjYxLCAzMikKK3RyYW5zZm9ybWVkQ2hpbGRDb250YWluZXJb
Ml06ICg4LCA0MzIsIDc2OSwgMTApCitjb250aW51YXRpb25bMF06ICgxMDgsIDUwMiwgMTAwLCAx
MCkKKworVGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0
aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVuIGluIER1bXBSZW5kZXJUcmVlLiBUaGUg
b3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRlc3QgcmVnaW9ucyBvZiBhbGwg
dGhlIGxpc3RlZCBlbGVtZW50cy4KKworbm9ybWFsRmxvd1swXTogKDgsIDcyLCA3ODQsIDEwKQor
bm9ybWFsRmxvd1sxXTogKDgsIDcyLCA3ODQsIDEwKQorbm9ybWFsRmxvd1syXTogKDEyOCwgNzIs
IDMwLCAxMCkKK25vcm1hbEZsb3dbM106ICg4LCA3MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRD
b250YWluZXJbMF06ICg4LCAxNjIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxkQ29udGFpbmVyWzFd
OiAoOCwgMTYyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclsyXTogKDgsIDE2Miwg
Nzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbM106ICgxMTgsIDMwMCwgMTQwLCAxMCkK
K2Fic29sdXRlQ2hpbGRDb250YWluZXJbNF06ICgxMTgsIDMwMCwgMTQwLCAxMCkKK3JlbGF0aXZl
Q2hpbGRDb250YWluZXJbMF06ICg4LCAyNzIsIDc4NCwgMTApCityZWxhdGl2ZUNoaWxkQ29udGFp
bmVyWzFdOiAoOCwgMjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclsyXTogKDgs
IDI3MiwgNzg0LCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbM106ICgxMjgsIDQ3MiwgMTQw
LCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzBdOiAoOCwgMzYyLCA3ODQsIDEwKQorb3Zlcmhh
bmdpbmdDb250YWluZXJbMV06ICg4LCAzNjIsIDExMCwgODApCitvdmVyaGFuZ2luZ0NvbnRhaW5l
clsyXTogKDgsIDM2MiwgMTEwLCA4MCkKK3RyYW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMF06ICg2
MiwgNDIxLCA2NjEsIDMyKQordHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lclsxXTogKDYyLCA0MjEs
IDY2MSwgMzIpCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzJdOiAoOCwgNDMyLCA3NjksIDEw
KQorY29udGludWF0aW9uWzBdOiAoMTA4LCA1MDIsIDEwMCwgMTApCisKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gt
aGl0LXJlY3RzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3Rv
dWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyN0
cmFuc2Zvcm1lZENoaWxkIHsKKwktd2Via2l0LXRyYW5zZm9ybTogcm90YXRlM2QoMC4yLCAxLCAw
LCAzNWdyYWQpOworfQorI2Fic29sdXRlQ2hpbGQgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl0
b3A6IDMwMHB4OworfQorI3JlbGF0aXZlQ2hpbGQgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwl0
b3A6IDIwMHB4OworfQorI292ZXJoYW5naW5nQ29udGFpbmVyIHsKKwloZWlnaHQ6IDEwcHg7Cit9
Cisjb3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIHsKKwl3aWR0aDogMTAwcHg7CisJZmxvYXQ6IGxl
ZnQ7Cit9CisjdGVzdHMgeworCWZvbnQ6IDEwcHggQWhlbTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0
IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVu
IGluIER1bXBSZW5kZXJUcmVlLgorVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhl
IGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuPC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InRlc3RzIj4KKwk8ZGl2IGlkPSJub3JtYWxG
bG93Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4+c3VtPC9zcGFuPi4KKwk8L2Rpdj4KKwk8ZGl2
IGlkPSJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9
ImFic29sdXRlQ2hpbGQiPkFic29sdXRlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9
InJlbGF0aXZlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0icmVs
YXRpdmVDaGlsZCI+UmVsYXRpdmUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0ib3Zl
cmhhbmdpbmdDb250YWluZXIiPgorCQk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0Zsb2F0aW5nQ2hpbGQi
Pk92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92
ZXJoYW5naW5nIGZsb2F0PC9kaXY+CisJPC9kaXY+CisJPGRpdiBpZD0idHJhbnNmb3JtZWRDaGls
ZENvbnRhaW5lciI+CisJCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGQiPlRyYW5zZm9ybWVkPC9k
aXY+CisJPC9kaXY+CisJPGRpdj4KKwkJPGIgaWQ9ImNvbnRpbnVhdGlvbiI+VGhpcyBiIHRhZwor
CQk8ZGl2PmNhdXNlcyBhPC9kaXY+CisJCWNvbnRpbnVhdGlvbjwvYj4KKwk8L2Rpdj4KKzwvZGl2
PgorPHNjcmlwdD4KK2lmICghd2luZG93LnRlc3RSdW5uZXIpCisJcmV0dXJuOworCit3aW5kb3cu
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxpc3RlbmVyKCkgeyB9CisKK2Z1
bmN0aW9uIGxvZyhtc2cpIHsKKwl2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNw
YW4pOworICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9u
IHNvcnRSZWN0cyhhLCBiKSB7CisJcmV0dXJuIGEudG9wIC0gYi50b3A7Cit9CisKK2Z1bmN0aW9u
IGxvZ1JlY3RzKGlkKSB7CisJZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsK
KwllbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2Up
OworCXJlY3RzID0gd2luZG93LmludGVybmFscy50b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMo
ZG9jdW1lbnQpOworCXZhciBzb3J0ZWRSZWN0cyA9IG5ldyBBcnJheSgpOworCWZvciAodmFyIGkg
PSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCXNvcnRlZFJlY3RzW2ldID0gcmVjdHNbaV07
CisJc29ydGVkUmVjdHMuc29ydChzb3J0UmVjdHMpOworCWZvciAodmFyIGkgPSAwOyBpIDwgcmVj
dHMubGVuZ3RoOyArK2kpCisJCWxvZyhpZCArICJbIiArIGkgKyAiXTogKCIgKyBzb3J0ZWRSZWN0
c1tpXS5sZWZ0ICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLnRvcCArICIsICIgKyBzb3J0ZWRSZWN0
c1tpXS53aWR0aCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS5oZWlnaHQgKyAiKSIpOworCWVsZW1l
bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7Cit9
CisKK2xvZ1JlY3RzKCJub3JtYWxGbG93Iik7Citsb2dSZWN0cygiYWJzb2x1dGVDaGlsZENvbnRh
aW5lciIpOworbG9nUmVjdHMoInJlbGF0aXZlQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJv
dmVyaGFuZ2luZ0NvbnRhaW5lciIpOworbG9nUmVjdHMoInRyYW5zZm9ybWVkQ2hpbGRDb250YWlu
ZXIiKTsKK2xvZ1JlY3RzKCJjb250aW51YXRpb24iKTsKKwordmFyIHRlc3RDb250YWluZXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHMiKTsKK3Rlc3RDb250YWluZXIucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdHJhbnNmb3JtZWRDaGlsZCB7
CisJLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZTNkKDAuMiwgMSwgMCwgMzVncmFkKTsKK30KKyNh
YnNvbHV0ZUNoaWxkIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJdG9wOiAzMDBweDsKK30KKyNy
ZWxhdGl2ZUNoaWxkIHsKKwlwb3NpdGlvbjogcmVsYXRpdmU7CisJdG9wOiAyMDBweDsKK30KKyNv
dmVyaGFuZ2luZ0NvbnRhaW5lciB7CisJaGVpZ2h0OiAxMHB4OworfQorI292ZXJoYW5naW5nRmxv
YXRpbmdDaGlsZCB7CisJd2lkdGg6IDEwMHB4OworCWZsb2F0OiBsZWZ0OworfQorI3Rlc3RzIHsK
Kwlmb250OiAxMHB4IEFoZW07Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPlRoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2
ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJl
ZS4KK1RoZSBvdXRwdXR0ZWQgcmVjdHMgc2hvdWxkIGNvdmVyIHRoZSBoaXQgdGVzdCByZWdpb25z
IG9mIGFsbCB0aGUgbGlzdGVkIGVsZW1lbnRzLjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorCis8ZGl2IGlkPSJ0ZXN0cyI+CisJPGRpdiBpZD0ibm9ybWFsRmxvdyI+CisJCUxvcmVtIGlw
c3VtCisJCTxzcGFuPnN1bTwvc3Bhbj4uCisJPC9kaXY+CisJPGRpdiBpZD0iYWJzb2x1dGVDaGls
ZENvbnRhaW5lciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlkPSJhYnNvbHV0ZUNoaWxkIj5B
YnNvbHV0ZSBjaGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJyZWxhdGl2ZUNoaWxkQ29u
dGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9InJlbGF0aXZlQ2hpbGQiPlJlbGF0
aXZlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9Im92ZXJoYW5naW5nQ29udGFpbmVy
Ij4KKwkJPGRpdiBpZD0ib3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIj5PdmVyaGFuZ2luZyBmbG9h
dCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdDwv
ZGl2PgorCTwvZGl2PgorCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGRDb250YWluZXIiPgorCQk8
ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxkIj5UcmFuc2Zvcm1lZDwvZGl2PgorCTwvZGl2PgorCTxk
aXY+CisJCTxiIGlkPSJjb250aW51YXRpb24iPlRoaXMgYiB0YWcKKwkJPGRpdj5jYXVzZXMgYTwv
ZGl2PgorCQljb250aW51YXRpb248L2I+CisJPC9kaXY+Cis8L2Rpdj4KKzxzY3JpcHQ+CitpZiAo
IXdpbmRvdy50ZXN0UnVubmVyKQorCXJldHVybjsKKword2luZG93LnRlc3RSdW5uZXIuZHVtcEFz
VGV4dCgpOworCitmdW5jdGlvbiBsaXN0ZW5lcigpIHsgfQorCitmdW5jdGlvbiBsb2cobXNnKSB7
CisJdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisJZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICBzcGFuLmlu
bmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBzb3J0UmVjdHMoYSwgYikg
eworCXJldHVybiBhLnRvcCAtIGIudG9wOworfQorCitmdW5jdGlvbiBsb2dSZWN0cyhpZCkgewor
CWVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisJZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNlKTsKKwlyZWN0cyA9IHdpbmRv
dy5pbnRlcm5hbHMudG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKGRvY3VtZW50KTsKKwl2YXIg
c29ydGVkUmVjdHMgPSBuZXcgQXJyYXkoKTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxl
bmd0aDsgKytpKQorCQlzb3J0ZWRSZWN0c1tpXSA9IHJlY3RzW2ldOworCXNvcnRlZFJlY3RzLnNv
cnQoc29ydFJlY3RzKTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgKytpKQor
CQlsb2coaWQgKyAiWyIgKyBpICsgIl06ICgiICsgc29ydGVkUmVjdHNbaV0ubGVmdCArICIsICIg
KyBzb3J0ZWRSZWN0c1tpXS50b3AgKyAiLCAiICsgc29ydGVkUmVjdHNbaV0ud2lkdGggKyAiLCAi
ICsgc29ydGVkUmVjdHNbaV0uaGVpZ2h0ICsgIikiKTsKKwllbGVtZW50LnJlbW92ZUV2ZW50TGlz
dGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2UpOworfQorCitsb2dSZWN0cygibm9y
bWFsRmxvdyIpOworbG9nUmVjdHMoImFic29sdXRlQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3Rz
KCJyZWxhdGl2ZUNoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygib3ZlcmhhbmdpbmdDb250YWlu
ZXIiKTsKK2xvZ1JlY3RzKCJ0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygi
Y29udGludWF0aW9uIik7CisKK3ZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRlc3RzIik7Cit0ZXN0Q29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVz
dENvbnRhaW5lcik7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179565</attachid>
            <date>2012-12-14 17:30:36 -0800</date>
            <delta_ts>2012-12-16 19:08:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103914-20121214172755.patch</filename>
            <type>text/plain</type>
            <size>41835</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDEyLTEyLTE0ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
dHJhY2tpbmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rp
b24gaW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGluZyBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCB0YXJnZXQg
cmVnaW9ucyBmb3IgdGhlIHB1cnBvc2Ugb2YgcGVyZm9ybWluZyBpbml0aWFsIGhpdCB0ZXN0aW5n
CisgICAgICAgIGluIHRoZSBjb21wb3NpdG9yIHRvIGF2b2lkIGJsb2NraW5nIHNjcm9sbGluZyBv
biB0aGUgbWFpbiB0aHJlYWQgd2hpbGUgd2FpdGluZyB0byBoaXQgdGVzdCBldmVudHMgdGhhdAor
ICAgICAgICBhcmVuJ3Qgb2NjdXJpbmcgaW4gcmVnaW9ucyB3aXRoIGhhbmRsZXJzLiBUaGlzIGlz
IGluaXRpYWxseSBiZWluZyBkb25lIHRvIGF2b2lkIGhhdmluZyB0byBnbyB0byB0aGUgbWFpbgor
ICAgICAgICB0aHJlYWQgd2hlbiBzY3JvbGxpbmcgYnkgZmxpY2tpbmcgb24gdG91Y2ggZGV2aWNl
cyB3aGVuIHRoZSBmbGljayBvY2N1cnMgb3V0c2lkZSBhIHRyYWNrZWQgdG91Y2ggZXZlbnQKKyAg
ICAgICAgcmVnaW9uLiBUaGlzIHBhdGNoIGluY2x1ZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byB0
dXJuIHRoaXMgb24gaW4gQ2hyb21pdW0uCisKKyAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzIGdv
YWwsIERvY3VtZW50IHdpbGwgbm93IGtlZXAgYSBjb3VudGVkIGhhc2ggc2V0IG9mIG5vZGVzIHdp
dGggdG91Y2ggZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgaW5zdGVhZCBvZiBvbmx5IGFuIHVuc2ln
bmVkIGludGVnZXIgb2YgdGhlIHRvdGFsIGNvdW50LiBTY3JvbGxpbmdDb29yZGluYXRvciB0aGVu
IHVwZGF0ZXMgdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgd2hlbiBuZXcgdG91Y2ggZXZlbnQgaGFu
ZGxlcnMgYXJlIHJlZ2lzdGVyZWQgb3IgcmVtb3ZlZCwgb3IgYWZ0ZXIgbGF5b3V0IG11Y2ggbGlr
ZSBob3cKKyAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25zIGFyZSBjdXJyZW50bHkgdHJh
Y2tlZC4KKworICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIHdpbGwgbm90IHByb3Blcmx5IHVw
ZGF0ZSB0aGUgaGl0IHRlc3QgcmVjdHMgd2hlbiB0aGUgcmVuZGVyZXJzIGFyZSBpbnNpZGUgYSBz
dWItCisgICAgICAgIHRyZWUgdGhhdCBzY3JvbGxzLgorCisgICAgICAgIFRoaXMgY2hhbmdlIHdh
cyBpbml0aWFsbHkgcm9sbGVkIG91dCBkdWUgdG8gc3RhbGUgTm9kZSBwb2ludGVycyBpbiBEb2N1
bWVudCdzIHRvdWNoRXZlbnRUYXJnZXRzLiBUaGlzCisgICAgICAgIHBhdGNoIGFkZHMgYSBjYWxs
YmFjayB0byByZW1vdmUgdGhlIE5vZGUgZnJvbSB0aGF0IHN0cnVjdHVyZSB0byBOb2RlJ3MgZGVz
dHJ1Y3Rvci4gVGhpcyBpcyBjb3ZlcmVkCisgICAgICAgIGJ5IHRoZSB0b3VjaC10YXJnZXQtcmVt
b3ZlZC1jcmFzaC5odG1sIHRlc3QgY2FzZSB3aGljaCBpcyBhbHNvIGFkZGVkLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91
Y2gtaGl0LXJlY3RzLmh0bWwKKyAgICAgICAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9l
dmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LXJlbW92ZWQtY3Jhc2guaHRtbAorCisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6
IEFkZGVkIGEgSGFzaENvdW50ZWRTZXQgb2YgdG91Y2ggdGFyZ2V0IG5vZGVzLiBOb3RlOiBET01X
aW5kb3cgdGFyZ2V0cworICAgICAgICBhcmUgc3RvcmVkIGFzIHRoZSBEb2N1bWVudCB0aGV5IHBv
aW50IHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5k
bGVyKTogQ2hhbmdlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBoYW5kbGVyIGluc3RlYWQgb2YgYSBj
b3VudCwgYW5kCisgICAgICAgIHRvIHVwZGF0ZSB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3Igd2l0
aCB0aGUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKTogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6aGFzVG91Y2hFdmVudEhhbmRsZXJzKTogSXQncyBubyBsb25n
ZXIgTygxKSB0byBnZXQgdGhlIGNvdW50IG9mIHRvdWNoIGhhbmRsZXJzLCBzbworICAgICAgICBl
eHBvc2Ugd2hldGhlciB0aGVyZSBhcmUgYW55IG9yIG5vdC4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp0b3VjaEV2ZW50VGFyZ2V0cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6dHJ5QWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjp0cnlSZW1vdmVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lQmFzZTo6cmVzdG9yZSk6CisgICAgICAgICogaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
On5IVE1MSW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OnVwZGF0ZVR5cGUpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6IEFkZCB0aGUgRG9jdW1lbnQgdG8g
dGhlIHRvdWNoIHRhcmdldCBzZXQgaW5zdGVhZCBvZiBET01XaW5kb3cuCisgICAgICAgIChXZWJD
b3JlOjpET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91
Y2hFdmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6c2V0RG9jdW1lbnQpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpj
b21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMpOiBXYWxrIHRoZSByZW5kZXJlcnMg
Zm9yIGV2ZW50IGhhbmRsZXIKKyAgICAgICAgbm9kZXMgYW5kIGdlbmVyYXRlIHRoZSBhYnNvbHV0
ZSBoaXQgdGVzdGluZyByZWN0cy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNl
dFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQpOiBIb29rIHRvIHBhc3MgYWxvbmcgdGhlIGhp
dCB0ZXN0IHJlY3RzIHRvCisgICAgICAgIHRoZSBzY3JvbGxpbmcgdHJlZS9jb21wb3NpdG9yLgor
ICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5n
L2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRU
b3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5oOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNvdW50KTogQ2hhbmdlZCB0byBkbyB0aGUg
d29yayB0byBjYWxjdWxhdGUgdGhlIGFjdHVhbCBjb3VudCBzaW5jZQorICAgICAgICBpdCdzIG5v
IGxvbmdlciBzdG9yZWQgYXMgYW4gaW50IGluIERvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjp0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMpOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmg6CisgICAgICAgIChJbnRlcm5hbHMpOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmlkbDoKKwogMjAxMi0xMi0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMzc2MDcpOiBDYW5ub3QgZG93bmxv
YWQgZmlsZXMsIHN0dWNrIGluICJQcmVwYXJpbmcgdG8gZG93bmxvYWQiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw5ICs0OTgsNiBAQCBEb2N1bWVudDo6
RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAgICAgLCBtX3dyaXRlUmVjdXJzaW9uSXNU
b29EZWVwKGZhbHNlKQogICAgICwgbV93cml0ZVJlY3Vyc2lvbkRlcHRoKDApCiAgICAgLCBtX3do
ZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICwg
bV90b3VjaEV2ZW50SGFuZGxlckNvdW50KDApCi0jZW5kaWYKICAgICAsIG1fcGVuZGluZ1Rhc2tz
VGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5nVGFza3NUaW1lckZpcmVkKQogICAgICwgbV9z
Y2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fdmlzdWFsVXBkYXRlc0Fs
bG93ZWQodHJ1ZSkKQEAgLTU1OTksMzYgKzU1OTYsNjggQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVt
b3ZlV2hlZWxFdmVudEhhbmRsZQogICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKHRo
aXMpOwogfQogCi12b2lkIERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpCit2b2lk
IERvY3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKiBoYW5kbGVyKQogewogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgKyttX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7Ci0g
ICAgaWYgKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCA+IDEpCisgICAgaWYgKCFtX3RvdWNoRXZl
bnRUYXJnZXRzLmdldCgpKQorICAgICAgICBtX3RvdWNoRXZlbnRUYXJnZXRzID0gYWRvcHRQdHIo
bmV3IFRvdWNoRXZlbnRUYXJnZXRTZXQpOworICAgIG1fdG91Y2hFdmVudFRhcmdldHMtPmFkZCho
YW5kbGVyKTsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpIHsK
KyAgICAgICAgcGFyZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAg
cmV0dXJuOwotICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKQotICAgICAgICBwYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVlKTsKKyAgICB9CisgICAg
aWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpIHsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRf
VFJBQ0tJTkcpCisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPnRvdWNoRXZlbnRUYXJnZXRSZWN0c0RpZENoYW5nZSh0aGlzKTsK
KyNlbmRpZgorICAgICAgICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpID09IDEpCisg
ICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5lZWRUb3VjaEV2ZW50cyh0cnVl
KTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKICNlbmRpZgogfQog
Ci12b2lkIERvY3VtZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpCit2b2lkIERvY3Vt
ZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihOb2RlKiBoYW5kbGVyKQogewogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCi0gICAgQVNTRVJUKG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudCk7
Ci0gICAgLS1tX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQ7Ci0gICAgaWYgKG1fdG91Y2hFdmVudEhh
bmRsZXJDb3VudCkKKyAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQobV90b3VjaEV2ZW50VGFyZ2V0cy0+Y29udGFpbnMoaGFuZGxl
cikpOworICAgIG1fdG91Y2hFdmVudFRhcmdldHMtPnJlbW92ZShoYW5kbGVyKTsKKyAgICBpZiAo
RG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICByZXR1cm47CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIGlmIChTY3Jv
bGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdD
b29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+dG91Y2hFdmVudFRh
cmdldFJlY3RzRGlkQ2hhbmdlKHRoaXMpOworI2VuZGlmCisgICAgaWYgKG1fdG91Y2hFdmVudFRh
cmdldHMtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGZvciAoY29uc3QgRnJhbWUqIGZy
YW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+
ZG9jdW1lbnQoKS0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICAgICBpZiAoZnJhbWUt
PmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPmhhc1RvdWNoRXZlbnRIYW5kbGVycygp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPm5lZWRUb3VjaEV2ZW50cyhmYWxzZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShoYW5k
bGVyKTsKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQordm9p
ZCBEb2N1bWVudDo6ZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2RlKE5vZGUqIGhhbmRsZXIpCit7Cisg
ICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMuZ2V0KCkpCisgICAgICAgIG1fdG91Y2hFdmVudFRh
cmdldHMtPnJlbW92ZUFsbChoYW5kbGVyKTsKK30KKyNlbmRpZgorCiBIVE1MSUZyYW1lRWxlbWVu
dCogRG9jdW1lbnQ6OnNlYW1sZXNzUGFyZW50SUZyYW1lKCkgY29uc3QKIHsKICAgICBpZiAoIXNo
b3VsZERpc3BsYXlTZWFtbGVzc2x5V2l0aFBhcmVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHJldmlzaW9uIDEzNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDcsNiArMjA3LDggQEAgZW51bSBOb2RlTGlzdEludmFsaWRhdGlv
blR5cGUgewogfTsKIGNvbnN0IGludCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzID0gSW52
YWxpZGF0ZU9uQW55QXR0ckNoYW5nZSArIDE7CiAKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Tm9k
ZSo+IFRvdWNoRXZlbnRUYXJnZXRTZXQ7CisKIGNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRh
aW5lck5vZGUsIHB1YmxpYyBUcmVlU2NvcGUsIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlKEZyYW1l
KiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQpAQCAtMTExOCwxMyArMTEyMCwyMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKLSAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OyB9CisgICAgYm9vbCBoYXNUb3VjaEV2
ZW50SGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiAobV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkg
PyBtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkgOiBmYWxzZTsgfQogI2Vsc2UKLSAgICB1bnNp
Z25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGJv
b2wgaGFzVG91Y2hFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRp
ZgorCisgICAgdm9pZCBkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisgICAgdm9pZCBk
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihOb2RlKik7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRfVFJBQ0tJTkcpCisgICAgdm9pZCBkaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoTm9kZSopOwog
I2VuZGlmCiAKLSAgICB2b2lkIGRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7Ci0gICAgdm9pZCBk
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisg
ICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdG91Y2hFdmVudFRhcmdldHMoKSBjb25zdCB7
IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpOyB9CisjZWxzZQorICAgIGNvbnN0IFRv
dWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gMDsg
fQorI2VuZGlmCiAKICAgICBib29sIHZpc3VhbFVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgeyByZXR1
cm4gbV92aXN1YWxVcGRhdGVzQWxsb3dlZDsgfQogCkBAIC0xNTAzLDcgKzE1MTUsNyBAQCBwcml2
YXRlOgogICAgIAogICAgIHVuc2lnbmVkIG1fd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHVuc2lnbmVkIG1fdG91Y2hFdmVudEhhbmRsZXJDb3Vu
dDsKKyAgICBPd25QdHI8VG91Y2hFdmVudFRhcmdldFNldD4gbV90b3VjaEV2ZW50VGFyZ2V0czsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkocmV2aXNpb24gMTM3NzYzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsOCArNDEyLDEzIEBAIE5vZGU6On5Ob2RlKCkKICAg
ICBpZiAoaGFzUmFyZURhdGEoKSkKICAgICAgICAgY2xlYXJSYXJlRGF0YSgpOwogCi0gICAgaWYg
KGhhc0V2ZW50VGFyZ2V0RGF0YSgpKQorICAgIGlmIChoYXNFdmVudFRhcmdldERhdGEoKSkgewor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQp
CisgICAgICAgICAgICBtX2RvY3VtZW50LT5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUodGhpcyk7
CisjZW5kaWYKICAgICAgICAgY2xlYXJFdmVudFRhcmdldERhdGEoKTsKKyAgICB9CiAKICAgICBp
ZiAocmVuZGVyZXIoKSkKICAgICAgICAgZGV0YWNoKCk7CkBAIC0yMTI1LDggKzIxMzAsOCBAQCB2
b2lkIE5vZGU6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB0b3VjaEV2ZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3Qg
RXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gZ2V0RXZlbnRMaXN0ZW5lcnModG91Y2hF
dmVudE5hbWVzW2ldKTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBsaXN0ZW5lcnMu
c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2
ZW50SGFuZGxlcigpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoKTsKKyAgICAgICAgICAgIG9sZERvY3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcih0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5k
bGVyKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTU1LDcgKzIxNjAsNyBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgdHJ5QWRkRXZlbnRMaXN0ZW5lcihOCiAgICAgICAgIGlmIChldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50
LT5kaWRBZGRXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVz
KCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRp
ZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91
Y2hFdmVudEhhbmRsZXIodGFyZ2V0Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0yMTc3LDcgKzIxODIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5UmVtb3ZlRXZlbnRMaXN0
ZW5lCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVu
dCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwog
ICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUp
KQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7Cisg
ICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGFyZ2V0Tm9k
ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L0NhY2hlZEZyYW1lLmNwcAkocmV2aXNpb24gMTM3NzYzKQorKysgU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9DYWNoZWRGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2
b2lkIENhY2hlZEZyYW1lQmFzZTo6cmVzdG9yZSgpCiAgICAgbV9kb2N1bWVudC0+ZW5xdWV1ZVBv
cHN0YXRlRXZlbnQoaGlzdG9yeUl0ZW0gJiYgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgPyBo
aXN0b3J5SXRlbS0+c3RhdGVPYmplY3QoKSA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZh
bHVlKCkpOwogICAgIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fZG9jdW1l
bnQtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+aGFzVG91
Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5uZWVkVG91Y2hFdmVudHModHJ1ZSk7CiAjZW5kaWYKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzc3NjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjMsNyArMTYzLDcgQEAgSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQog
ICAgICAgICBkb2N1bWVudCgpLT5mb3JtQ29udHJvbGxlcigpLT5jaGVja2VkUmFkaW9CdXR0b25z
KCkucmVtb3ZlQnV0dG9uKHRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgaWYg
KG1faGFzVG91Y2hFdmVudEhhbmRsZXIpCi0gICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRv
dWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIGRvY3VtZW50KCktPmRpZFJlbW92ZVRvdWNoRXZl
bnRIYW5kbGVyKHRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTQ4OSw5ICs0ODksOSBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRs
ZXIgPSBtX2lucHV0VHlwZS0+aGFzVG91Y2hFdmVudEhhbmRsZXIoKTsKICAgICBpZiAoaGFzVG91
Y2hFdmVudEhhbmRsZXIgIT0gbV9oYXNUb3VjaEV2ZW50SGFuZGxlcikgewogICAgICAgaWYgKGhh
c1RvdWNoRXZlbnRIYW5kbGVyKQotICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50
SGFuZGxlcigpOworICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcih0
aGlzKTsKICAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVu
dEhhbmRsZXIoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRs
ZXIodGhpcyk7CiAgICAgICBtX2hhc1RvdWNoRXZlbnRIYW5kbGVyID0gaGFzVG91Y2hFdmVudEhh
bmRsZXI7CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShy
ZXZpc2lvbiAxMzc3NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0Miw2ICs0NDIsMTAgQEAgRE9NV2luZG93Ojp+RE9NV2luZG93KCkK
IAogICAgIHJlbW92ZUFsbFVubG9hZEV2ZW50TGlzdGVuZXJzKHRoaXMpOwogICAgIHJlbW92ZUFs
bEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJzKHRoaXMpOworI2lmIEVOQUJMRShUT1VDSF9FVkVO
VF9UUkFDS0lORykKKyAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZShkb2N1bWVudCk7
CisjZW5kaWYKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBET01XaW5kb3c6OmludGVyZmFjZU5h
bWUoKSBjb25zdApAQCAtMTU4MSw3ICsxNTg1LDcgQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2ZW50
TGlzdGVuZXIoY29uc3QgQQogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5t
b3VzZXdoZWVsRXZlbnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhh
bmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUo
ZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxl
cigpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKGRvY3Vt
ZW50KTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zdG9yYWdl
RXZlbnQpCiAgICAgICAgICAgICBkaWRBZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcih0aGlzKTsKICAg
ICB9CkBAIC0xNjEyLDcgKzE2MTYsNyBAQCBib29sIERPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihjb25zCiAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hl
ZWxFdmVudCkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxl
cigpOwogICAgICAgICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVu
dFR5cGUpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVy
KCk7CisgICAgICAgICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoZG9j
dW1lbnQpOwogICAgIH0KIAogICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnVubG9h
ZEV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24g
MTM3NzYzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzY5LDcgKzM3NjksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91
Y2hFdmVudChjb25zCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWRvYykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghZG9jLT50b3VjaEV2ZW50SGFu
ZGxlckNvdW50KCkpCisgICAgICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJz
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBtX29yaWdpbmF0aW5n
VG91Y2hQb2ludFRhcmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5vZGUpOwogICAgICAg
ICAgICAgdG91Y2hUYXJnZXQgPSBub2RlOwpAQCAtMzc5NCw3ICszNzk0LDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29ucwogICAgICAgICBEb2N1bWVudCogZG9jID0g
dG91Y2hUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICBpZiAoIWRvYykKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJD
b3VudCgpKQorICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gZG9jLT5mcmFt
ZSgpOwogICAgICAgICBpZiAoIXRhcmdldEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJ
KHJldmlzaW9uIDEzNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBGcmFtZTo6c2V0RG9jdW1lbnQoUGFz
c1JlZlB0cjxEb2N1bQogICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKSA9PSB0
aGlzKSB7CiAgICAgICAgIG5vdGlmeUNocm9tZUNsaWVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnRD
aGFuZ2VkKCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAgICAgaWYgKG1fZG9jICYm
IG1fZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlmIChtX2RvYyAmJiBt
X2RvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBtX3BhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTM3NzYzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTE3Niw2ICsxNzcsNTcgQEAgUmVnaW9uIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRgogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbjsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKK3N0YXRpYyB2
b2lkIGFjY3VtdWxhdGVSZW5kZXJlclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIC8vIEZJWE1F
OiBUaGlzIG1ldGhvZCBpcyBPKE5eMikgYXMgaXQgd2Fsa3MgdGhlIHRyZWUgdG8gdGhlIHJvb3Qg
Zm9yIGV2ZXJ5IHJlbmRlcmVyLiBSZW5kZXJHZW9tZXRyeU1hcCB3b3VsZCBmaXggdGhpcy4KKyAg
ICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlci0+Y2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoMCkpKTsKKyAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkg
eworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRl
cmVyKTsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gYmxvY2stPmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBh
Y2N1bXVsYXRlUmVuZGVyZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMocmVjdHMsIGNoaWxkKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVEb2N1bWVudEV2ZW50VGFyZ2V0UmVjdHMo
VmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAg
IEFTU0VSVChkb2N1bWVudCk7CisgICAgaWYgKCFkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdGFy
Z2V0cyA9IGRvY3VtZW50LT50b3VjaEV2ZW50VGFyZ2V0cygpOworICAgIGZvciAoVG91Y2hFdmVu
dFRhcmdldFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRhcmdldHMtPmJlZ2luKCk7IGl0ZXIg
IT0gdGFyZ2V0cy0+ZW5kKCk7ICsraXRlcikgeworICAgICAgICBjb25zdCBOb2RlKiB0b3VjaFRh
cmdldCA9IGl0ZXItPmtleTsKKyAgICAgICAgaWYgKCF0b3VjaFRhcmdldC0+aW5Eb2N1bWVudCgp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHRvdWNoVGFyZ2V0ID09IGRv
Y3VtZW50KSB7CisgICAgICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5y
ZW5kZXJWaWV3KCkpCisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJl
Y3Qodmlldy0+Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoMCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b3VjaFRhcmdldC0+aXNEb2N1bWVu
dE5vZGUoKSAmJiB0b3VjaFRhcmdldCAhPSBkb2N1bWVudCkgeworICAgICAgICAgICAgYWNjdW11
bGF0ZURvY3VtZW50RXZlbnRUYXJnZXRSZWN0cyhyZWN0cywgc3RhdGljX2Nhc3Q8Y29uc3QgRG9j
dW1lbnQqPih0b3VjaFRhcmdldCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRvdWNoVGFyZ2V0LT5yZW5k
ZXJlcigpKQorICAgICAgICAgICAgYWNjdW11bGF0ZVJlbmRlcmVyVG91Y2hFdmVudFRhcmdldFJl
Y3RzKHJlY3RzLCByZW5kZXJlcik7CisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpjb21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQoreworICAgIEFTU0VSVChkb2N1bWVu
dCk7CisgICAgaWYgKCFkb2N1bWVudC0+dmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRTogVGhlc2UgcmVjdHMgd29uJ3QgYmUgcHJvcGVybHkgdXBkYXRlZCBpZiB0aGUgcmVu
ZGVyZXJzIGFyZSBpbiBhIHN1Yi10cmVlIHRoYXQgc2Nyb2xscy4KKyAgICBhY2N1bXVsYXRlRG9j
dW1lbnRFdmVudFRhcmdldFJlY3RzKHJlY3RzLCBkb2N1bWVudCk7Cit9CisjZW5kaWYKKwogdW5z
aWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRs
ZXJDb3VudCgpCiB7CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgog
I2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgpAQCAtNTAsNiArNTEsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGlu
Z05vZGVJRDsKIAogZW51bSBTY3JvbGxpbmdOb2RlVHlwZSB7IFNjcm9sbGluZ05vZGUsIEZpeGVk
Tm9kZSB9OwogCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3
OwogY2xhc3MgR3JhcGhpY3NMYXllcjsKQEAgLTE0OSw2ICsxNTEsMTEgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFi
bGVBcmVhKiwgR3JhcGhpY3NMYXllciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklz
Q29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhp
Y3NMYXllciosIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50VGFyZ2V0UmVj
dHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1lbnQqKSB7IH0KKworI2lmIEVOQUJMRShUT1VDSF9FVkVO
VF9UUkFDS0lORykKKyAgICB2b2lkIGNvbXB1dGVBYnNvbHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0
cyhjb25zdCBEb2N1bWVudCosIFZlY3RvcjxJbnRSZWN0PiYpOworI2VuZGlmCiAKICAgICBzdGF0
aWMgU3RyaW5nIG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zQXNUZXh0KE1haW5UaHJlYWRTY3Jv
bGxpbmdSZWFzb25zKTsKICAgICBTdHJpbmcgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnNBc1Rl
eHQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVt
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiAxMzc3NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE1LDYgKzExNSwzMCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06
OmZyYW1lCiAgICAgLy8gZnJhbWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVwZGF0ZWQgaXMgbm90
IHRoZSBtYWluIGZyYW1lLgogICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IGNv
bXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQb2lu
dCgpKTsKICAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIFZlY3RvcjxJbnRS
ZWN0PiB0b3VjaEV2ZW50VGFyZ2V0UmVjdHM7CisgICAgY29tcHV0ZUFic29sdXRlVG91Y2hFdmVu
dFRhcmdldFJlY3RzKG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCksIHRvdWNoRXZlbnRU
YXJnZXRSZWN0cyk7CisgICAgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKHRvdWNoRXZlbnRUYXJn
ZXRSZWN0cyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
Ojp0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICAvLyBXYWl0IHVudGls
IGFmdGVyIGxheW91dCB0byB1cGRhdGUuCisgICAgaWYgKG1fcGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugd29uJ3Qg
bmVjZXNzYXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwg
c28gZ3JhYiB0aGUgcm9vdCBvdXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5
ZXJGb3JGcmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CisgICAgaWYgKG1f
cHJpdmF0ZS0+c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICBWZWN0b3I8SW50UmVjdD4gdG91Y2hF
dmVudFRhcmdldFJlY3RzOworICAgICAgICBjb21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0
UmVjdHMoZG9jdW1lbnQsIHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisgICAgICAgIHNldFRvdWNo
RXZlbnRUYXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOworICAgIH0KKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcq
IGZyYW1lVmlldykKQEAgLTIwOSw2ICsyMzMsMTggQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtOjpzZXRObwogICAgIH0KIH0KIAordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtOjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBh
YnNvbHV0ZUhpdFRlc3RSZWN0cykKK3sKKyAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQg
YSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290
IG91cnNlbHZlcy4KKyAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmlldyht
X3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsKKyAgICBpZiAobV9wcml2YXRlLT5zY3JvbGxM
YXllcigpKSB7CisgICAgICAgIFdlYlZlY3RvcjxXZWJSZWN0PiB3ZWJSZWN0cyhhYnNvbHV0ZUhp
dFRlc3RSZWN0cy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29s
dXRlSGl0VGVzdFJlY3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgd2ViUmVjdHNbaV0gPSBh
YnNvbHV0ZUhpdFRlc3RSZWN0c1tpXTsKKyAgICAgICAgbV9wcml2YXRlLT5zY3JvbGxMYXllcigp
LT5zZXRUb3VjaEV2ZW50SGFuZGxlclJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
dW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNl
c3NhcmlseSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBn
cmFiIHRoZSByb290IG91cnNlbHZlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmgJKHJldmlzaW9uIDEzNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsMTIgKzY4LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2Fs
bGVkIHdoZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFy
ZWEgY2hhbmdlcy4KICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRp
ZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3Vs
ZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92
ZWQsIG9yIG1vdmVkLgorICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRD
aGFuZ2UoY29uc3QgRG9jdW1lbnQqKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZp
ZXcqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CiAKICAgICB2b2lkIHNl
dFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYpOworICAgIHZvaWQgc2V0VG91Y2hFdmVudFRhcmdldFJl
Y3RzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRs
ZXJDb3VudCh1bnNpZ25lZCk7CiAgICAgUGFzc093blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhckxh
eWVyPiBjcmVhdGVTY3JvbGxiYXJMYXllcihTY3JvbGxiYXIqLCBXZWJLaXQ6OldlYkxheWVyKiBz
Y3JvbGxMYXllciwgR3JhcGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVW
aWV3Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9u
IDEzNzc2MykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIK
ICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVn
aXN0cnkuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNl
bGVjdFJ1bGVGZWF0dXJlU2V0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTEyMDAsOCArMTIwMSwzOCBAQCB1bnNpZ25lZCBJ
bnRlcm5hbHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIHJldHVybiBkb2N1bWVudC0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpOworICAgIGNv
bnN0IFRvdWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoSGFuZGxlcnMgPSBkb2N1bWVudC0+dG91Y2hF
dmVudFRhcmdldHMoKTsKKyAgICBpZiAoIXRvdWNoSGFuZGxlcnMpCisgICAgICAgIHJldHVybiAw
OworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdldFNl
dDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRvdWNoSGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIgIT0g
dG91Y2hIYW5kbGVycy0+ZW5kKCk7ICsraXRlcikKKyAgICAgICAgY291bnQgKz0gaXRlci0+dmFs
dWU7CisgICAgcmV0dXJuIGNvdW50OworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNL
SU5HKQorUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gSW50ZXJuYWxzOjp0b3VjaEV2ZW50VGFy
Z2V0Q2xpZW50UmVjdHMoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpIHx8ICFkb2N1bWVudC0+cGFn
ZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgaWYgKCFkb2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRv
cigpKQorICAgICAgICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZSgpOworCisgICAgZG9j
dW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgVmVj
dG9yPEludFJlY3Q+IGFic29sdXRlUmVjdHM7CisgICAgZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKS0+Y29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRv
Y3VtZW50LCBhYnNvbHV0ZVJlY3RzKTsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVF1
YWRzKGFic29sdXRlUmVjdHMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YWJzb2x1dGVSZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgYWJzb2x1dGVRdWFkc1tpXSA9IEZs
b2F0UXVhZChhYnNvbHV0ZVJlY3RzW2ldKTsKKworICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6
Y3JlYXRlKGFic29sdXRlUXVhZHMpOwogfQorI2VuZGlmCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
IEludGVybmFsczo6bm9kZXNGcm9tUmVjdChEb2N1bWVudCogZG9jdW1lbnQsIGludCB4LCBpbnQg
eSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgIHVuc2ln
bmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBw
aW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDEzNzc2MykKKysrIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2
ICsxNzEsOSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50
KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5k
bGVyQ291bnQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UX1RSQUNLSU5HKQorICAgIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IHRvdWNoRXZlbnRU
YXJnZXRDbGllbnRSZWN0cyhEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgogCiAg
ICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVjdChEb2N1bWVudCosIGludCB4LCBp
bnQgeSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgICAg
ICB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25v
cmVDbGlwcGluZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDEzNzc2
MykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMTM5LDYgKzEzOSw5IEBACiAKICAgICB1bnNpZ25lZCBsb25nIHdoZWVsRXZlbnRIYW5k
bGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAg
ICB1bnNpZ25lZCBsb25nIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1l
bnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9FVkVO
VF9UUkFDS0lORykgJiYgRU5BQkxFX1RPVUNIX0VWRU5UX1RSQUNLSU5HCisgICAgQ2xpZW50UmVj
dExpc3QgdG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKGluIERvY3VtZW50IGRvY3VtZW50KSBy
YWlzZXMgKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKIAogICAgIE5vZGVMaXN0IG5vZGVzRnJvbVJl
Y3QoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGxvbmcgeCwgaW4gbG9uZyB5LAogICAgICAgICBp
biB1bnNpZ25lZCBsb25nIHRvcFBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgcmlnaHRQYWRkaW5n
LCBpbiB1bnNpZ25lZCBsb25nIGJvdHRvbVBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgbGVmdFBh
ZGRpbmcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NzYzKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNyBAQAorMjAxMi0xMi0xNCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJlY3Rhbmds
ZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGluZyB0b3Vj
aCBldmVudCB0YXJnZXQgcmVnaW9uIHRyYWNraW5nLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lw
aToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcXVlc3RUb3VjaEV2ZW50VHlwZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWlu
ZXJJbXBsKToKKwogMjAxMi0xMi0xNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBn
bWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNzU3MC4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDEzNzc2MykKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MTE2LDYgKzExNiw3IEBACiAgICAgICAnRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MScsCiAgICAg
ICAnRU5BQkxFX1RPVUNIX0VWRU5UUz08KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAgICdF
TkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTwoZW5hYmxlX3RvdWNoX2ljb25fbG9hZGluZyknLAor
ICAgICAgJ0VOQUJMRV9UT1VDSF9FVkVOVF9UUkFDS0lORz08KGVuYWJsZV90b3VjaF9ldmVudHMp
JywKICAgICAgICdFTkFCTEVfVE9VQ0hfU0xJREVSPTEnLAogICAgICAgJ0VOQUJMRV9VU0VSX1RJ
TUlORz0xJywKICAgICAgICdFTkFCTEVfVjhfU0NSSVBUX0RFQlVHX1NFUlZFUj0xJywKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5l
ckltcGwuY3BwCShyZXZpc2lvbiAxMzc3NjMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDkgKzUy
Nyw5IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVxdWVzdFRvdWMKICAgICAgICAg
cmV0dXJuOwogICAgIG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7CiAgICAg
aWYgKG1fdG91Y2hFdmVudFJlcXVlc3RUeXBlICE9IFRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUp
Ci0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIo
KTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxl
cihtX2VsZW1lbnQpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5k
aWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiB9CiAKIHZvaWQgV2Vi
UGx1Z2luQ29udGFpbmVySW1wbDo6c2V0V2FudHNXaGVlbEV2ZW50cyhib29sIHdhbnRzV2hlZWxF
dmVudHMpCkBAIC02NzIsNyArNjcyLDcgQEAgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6V2ViUGx1
Z2luQ29udGFpbgogV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBsdWdpbkNvbnRhaW5lcklt
cGwoKQogewogICAgIGlmIChtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSAhPSBUb3VjaEV2ZW50UmVx
dWVzdFR5cGVOb25lKQotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJlbW92ZVRv
dWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkUmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIobV9lbGVtZW50KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBtX3BsdWdp
bkxvYWRPYnNlcnZlcnNbaV0tPmNsZWFyUGx1Z2luQ29udGFpbmVyKCk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzc3NjMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMi0xMi0xNCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJlY3Rh
bmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVu
dHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LXJlbW92
ZWQtY3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtcmVtb3ZlZC1jcmFzaC5odG1sOiBBZGRl
ZC4KKwogMjAxMi0xMi0xNCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTWFya2luZyB0aGVzZSB0ZXN0cyBhcyBmYWlsdXJlIGZvciBub3cuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1oYW5kbGVyLWNvdW50Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtaGFuZGxlci1jb3VudC5o
dG1sCShyZXZpc2lvbiAxMzc3NjMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90
b3VjaC1oYW5kbGVyLWNvdW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw1ICsyMDQsMzQg
QEAgZGVidWcoIlRlc3Qgc2V0dGluZyB0b3VjaCBoYW5kbGVycyBvbiBhIAogICAgIHNob3VsZEJl
KCd3aW5kb3cuaW50ZXJuYWxzLnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoZG9jdW1lbnQpJywgJzAn
KTsKIH0pKCk7CiAKK2RlYnVnKCJUZXN0IHJlbW92aW5nIHRoZSBlbGVtZW50IHdpdGggbGlzdGVu
ZXJzIGZyb20gdGhlIGRvY3VtZW50LiIpOworKGZ1bmN0aW9uKCkgeworICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICB2YXIgdG91Y2h0YXJnZXQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndG91Y2h0YXJnZXQnKTsKKworICAgIHNob3VsZEJlKCd3aW5k
b3cuaW50ZXJuYWxzLnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoZG9jdW1lbnQpJywgJzAnKTsKKwor
ICAgIGRpdi5vbnRvdWNoc3RhcnQgPSBmdW5jdGlvbigpIHsgfQorICAgIGRpdi5vbnRvdWNobW92
ZSA9IGZ1bmN0aW9uKCkgeyB9CisgICAgc2hvdWxkQmUoJ3dpbmRvdy5pbnRlcm5hbHMudG91Y2hF
dmVudEhhbmRsZXJDb3VudChkb2N1bWVudCknLCAnMicpOworCisgICAgdG91Y2h0YXJnZXQuYXBw
ZW5kQ2hpbGQoZGl2KTsKKyAgICBzaG91bGRCZSgnd2luZG93LmludGVybmFscy50b3VjaEV2ZW50
SGFuZGxlckNvdW50KGRvY3VtZW50KScsICcyJyk7CisKKyAgICBkaXYub250b3VjaGVuZCA9IGZ1
bmN0aW9uKCkgeyB9CisgICAgc2hvdWxkQmUoJ3dpbmRvdy5pbnRlcm5hbHMudG91Y2hFdmVudEhh
bmRsZXJDb3VudChkb2N1bWVudCknLCAnMycpOworCisgICAgZGl2Lm9udG91Y2hzdGFydCA9IG51
bGw7CisgICAgc2hvdWxkQmUoJ3dpbmRvdy5pbnRlcm5hbHMudG91Y2hFdmVudEhhbmRsZXJDb3Vu
dChkb2N1bWVudCknLCAnMicpOworCisgICAgdG91Y2h0YXJnZXQucmVtb3ZlQ2hpbGQoZGl2KTsK
KyAgICBzaG91bGRCZSgnd2luZG93LmludGVybmFscy50b3VjaEV2ZW50SGFuZGxlckNvdW50KGRv
Y3VtZW50KScsICcyJyk7CisKKyAgICBkaXYgPSAwOworICAgIGlmICh3aW5kb3cuR0NDb250cm9s
bGVyKQorICAgICAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworICAgIHNob3VsZEJlKCd3aW5k
b3cuaW50ZXJuYWxzLnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoZG9jdW1lbnQpJywgJzAnKTsKK30p
KCk7CisKIDwvc2NyaXB0PgogPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qv
ZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3Rv
dWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NiBAQAorVGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0IHRlc3QgcmVnaW9u
cyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVuIGluIER1bXBSZW5k
ZXJUcmVlLiBUaGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRlc3QgcmVn
aW9ucyBvZiBhbGwgdGhlIGxpc3RlZCBlbGVtZW50cy4KKworbm9ybWFsRmxvd1swXTogKDgsIDcy
LCA3ODQsIDEwKQorbm9ybWFsRmxvd1sxXTogKDgsIDcyLCA3ODQsIDEwKQorbm9ybWFsRmxvd1sy
XTogKDEyOCwgNzIsIDMwLCAxMCkKK25vcm1hbEZsb3dbM106ICg4LCA3MiwgNzg0LCAxMCkKK2Fi
c29sdXRlQ2hpbGRDb250YWluZXJbMF06ICg4LCAxNjIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxk
Q29udGFpbmVyWzFdOiAoOCwgMTYyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclsy
XTogKDgsIDE2MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbM106ICgxMTgsIDMw
MCwgMTQwLCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbNF06ICgxMTgsIDMwMCwgMTQwLCAx
MCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMF06ICg4LCAyNzIsIDc4NCwgMTApCityZWxhdGl2
ZUNoaWxkQ29udGFpbmVyWzFdOiAoOCwgMjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRh
aW5lclsyXTogKDgsIDI3MiwgNzg0LCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbM106ICgx
MjgsIDQ3MiwgMTQwLCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzBdOiAoOCwgMzYyLCA3ODQs
IDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMV06ICg4LCAzNjIsIDExMCwgODApCitvdmVyaGFu
Z2luZ0NvbnRhaW5lclsyXTogKDgsIDM2MiwgMTEwLCA4MCkKK3RyYW5zZm9ybWVkQ2hpbGRDb250
YWluZXJbMF06ICg2MiwgNDIxLCA2NjEsIDMyKQordHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lclsx
XTogKDYyLCA0MjEsIDY2MSwgMzIpCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzJdOiAoOCwg
NDMyLCA3NjksIDEwKQorY29udGludWF0aW9uWzBdOiAoMTA4LCA1MDIsIDEwMCwgMTApCisKK1Ro
aXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBv
c2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJlZS4gVGhlIG91dHB1dHRl
ZCByZWN0cyBzaG91bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0
ZWQgZWxlbWVudHMuCisKK25vcm1hbEZsb3dbMF06ICg4LCA3MiwgNzg0LCAxMCkKK25vcm1hbEZs
b3dbMV06ICg4LCA3MiwgNzg0LCAxMCkKK25vcm1hbEZsb3dbMl06ICgxMjgsIDcyLCAzMCwgMTAp
Citub3JtYWxGbG93WzNdOiAoOCwgNzIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxkQ29udGFpbmVy
WzBdOiAoOCwgMTYyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclsxXTogKDgsIDE2
MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hpbGRDb250YWluZXJbMl06ICg4LCAxNjIsIDc4NCwgMTAp
CithYnNvbHV0ZUNoaWxkQ29udGFpbmVyWzNdOiAoMTE4LCAzMDAsIDE0MCwgMTApCithYnNvbHV0
ZUNoaWxkQ29udGFpbmVyWzRdOiAoMTE4LCAzMDAsIDE0MCwgMTApCityZWxhdGl2ZUNoaWxkQ29u
dGFpbmVyWzBdOiAoOCwgMjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclsxXTog
KDgsIDI3MiwgNzg0LCAxMCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMl06ICg4LCAyNzIsIDc4
NCwgMTApCityZWxhdGl2ZUNoaWxkQ29udGFpbmVyWzNdOiAoMTI4LCA0NzIsIDE0MCwgMTApCitv
dmVyaGFuZ2luZ0NvbnRhaW5lclswXTogKDgsIDM2MiwgNzg0LCAxMCkKK292ZXJoYW5naW5nQ29u
dGFpbmVyWzFdOiAoOCwgMzYyLCAxMTAsIDgwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMl06ICg4
LCAzNjIsIDExMCwgODApCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzBdOiAoNjIsIDQyMSwg
NjYxLCAzMikKK3RyYW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMV06ICg2MiwgNDIxLCA2NjEsIDMy
KQordHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lclsyXTogKDgsIDQzMiwgNzY5LCAxMCkKK2NvbnRp
bnVhdGlvblswXTogKDEwOCwgNTAyLCAxMDAsIDEwKQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qv
ZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21w
b3NpdG9yLXRvdWNoLWhpdC1yZWN0cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3RyYW5zZm9ybWVk
Q2hpbGQgeworCS13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUzZCgwLjIsIDEsIDAsIDM1Z3JhZCk7
Cit9CisjYWJzb2x1dGVDaGlsZCB7CisJcG9zaXRpb246IGFic29sdXRlOworCXRvcDogMzAwcHg7
Cit9CisjcmVsYXRpdmVDaGlsZCB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCXRvcDogMjAwcHg7
Cit9Cisjb3ZlcmhhbmdpbmdDb250YWluZXIgeworCWhlaWdodDogMTBweDsKK30KKyNvdmVyaGFu
Z2luZ0Zsb2F0aW5nQ2hpbGQgeworCXdpZHRoOiAxMDBweDsKKwlmbG9hdDogbGVmdDsKK30KKyN0
ZXN0cyB7CisJZm9udDogMTBweCBBaGVtOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3RzIHZlcmlmaWVzIHRoZSBoaXQgdGVzdCByZWdp
b25zIGdpdmVuIHRvIHRoZSBjb21wb3NpdG9yLiBJdCBjYW4gb25seSBiZSBydW4gaW4gRHVtcFJl
bmRlclRyZWUuCitUaGUgb3V0cHV0dGVkIHJlY3RzIHNob3VsZCBjb3ZlciB0aGUgaGl0IHRlc3Qg
cmVnaW9ucyBvZiBhbGwgdGhlIGxpc3RlZCBlbGVtZW50cy48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKworPGRpdiBpZD0idGVzdHMiPgorCTxkaXYgaWQ9Im5vcm1hbEZsb3ciPgorCQlM
b3JlbSBpcHN1bQorCQk8c3Bhbj5zdW08L3NwYW4+LgorCTwvZGl2PgorCTxkaXYgaWQ9ImFic29s
dXRlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0iYWJzb2x1dGVD
aGlsZCI+QWJzb2x1dGUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0icmVsYXRpdmVD
aGlsZENvbnRhaW5lciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlkPSJyZWxhdGl2ZUNoaWxk
Ij5SZWxhdGl2ZSBjaGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0Nv
bnRhaW5lciI+CisJCTxkaXYgaWQ9Im92ZXJoYW5naW5nRmxvYXRpbmdDaGlsZCI+T3Zlcmhhbmdp
bmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQgb3ZlcmhhbmdpbmcgZmxvYXQgb3Zlcmhhbmdpbmcg
ZmxvYXQ8L2Rpdj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVy
Ij4KKwkJPGRpdiBpZD0idHJhbnNmb3JtZWRDaGlsZCI+VHJhbnNmb3JtZWQ8L2Rpdj4KKwk8L2Rp
dj4KKwk8ZGl2PgorCQk8YiBpZD0iY29udGludWF0aW9uIj5UaGlzIGIgdGFnCisJCTxkaXY+Y2F1
c2VzIGE8L2Rpdj4KKwkJY29udGludWF0aW9uPC9iPgorCTwvZGl2PgorPC9kaXY+Cis8c2NyaXB0
PgoraWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKKwlyZXR1cm47CisKK3dpbmRvdy50ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbGlzdGVuZXIoKSB7IH0KKworZnVuY3Rpb24gbG9n
KG1zZykgeworCXZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCWRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7CisgICAg
c3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24gc29ydFJlY3Rz
KGEsIGIpIHsKKwlyZXR1cm4gYS50b3AgLSBiLnRvcDsKK30KKworZnVuY3Rpb24gbG9nUmVjdHMo
aWQpIHsKKwllbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCWVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7CisJcmVjdHMg
PSB3aW5kb3cuaW50ZXJuYWxzLnRvdWNoRXZlbnRUYXJnZXRDbGllbnRSZWN0cyhkb2N1bWVudCk7
CisJdmFyIHNvcnRlZFJlY3RzID0gbmV3IEFycmF5KCk7CisJZm9yICh2YXIgaSA9IDA7IGkgPCBy
ZWN0cy5sZW5ndGg7ICsraSkKKwkJc29ydGVkUmVjdHNbaV0gPSByZWN0c1tpXTsKKwlzb3J0ZWRS
ZWN0cy5zb3J0KHNvcnRSZWN0cyk7CisJZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7
ICsraSkKKwkJbG9nKGlkICsgIlsiICsgaSArICJdOiAoIiArIHNvcnRlZFJlY3RzW2ldLmxlZnQg
KyAiLCAiICsgc29ydGVkUmVjdHNbaV0udG9wICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLndpZHRo
ICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLmhlaWdodCArICIpIik7CisJZWxlbWVudC5yZW1vdmVF
dmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNlKTsKK30KKworbG9nUmVj
dHMoIm5vcm1hbEZsb3ciKTsKK2xvZ1JlY3RzKCJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIik7Cits
b2dSZWN0cygicmVsYXRpdmVDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoIm92ZXJoYW5naW5n
Q29udGFpbmVyIik7Citsb2dSZWN0cygidHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lciIpOworbG9n
UmVjdHMoImNvbnRpbnVhdGlvbiIpOworCit2YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXN0cyIpOwordGVzdENvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKHRlc3RDb250YWluZXIpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyN0cmFuc2Zvcm1lZENoaWxkIHsKKwktd2Via2l0
LXRyYW5zZm9ybTogcm90YXRlM2QoMC4yLCAxLCAwLCAzNWdyYWQpOworfQorI2Fic29sdXRlQ2hp
bGQgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl0b3A6IDMwMHB4OworfQorI3JlbGF0aXZlQ2hp
bGQgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwl0b3A6IDIwMHB4OworfQorI292ZXJoYW5naW5n
Q29udGFpbmVyIHsKKwloZWlnaHQ6IDEwcHg7Cit9Cisjb3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxk
IHsKKwl3aWR0aDogMTAwcHg7CisJZmxvYXQ6IGxlZnQ7Cit9CisjdGVzdHMgeworCWZvbnQ6IDEw
cHggQWhlbTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+VGhpcyB0ZXN0cyB2ZXJpZmllcyB0aGUgaGl0IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUg
Y29tcG9zaXRvci4gSXQgY2FuIG9ubHkgYmUgcnVuIGluIER1bXBSZW5kZXJUcmVlLgorVGhlIG91
dHB1dHRlZCByZWN0cyBzaG91bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRo
ZSBsaXN0ZWQgZWxlbWVudHMuPC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYg
aWQ9InRlc3RzIj4KKwk8ZGl2IGlkPSJub3JtYWxGbG93Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNw
YW4+c3VtPC9zcGFuPi4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJhYnNvbHV0ZUNoaWxkQ29udGFpbmVy
Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9ImFic29sdXRlQ2hpbGQiPkFic29sdXRlIGNo
aWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9InJlbGF0aXZlQ2hpbGRDb250YWluZXIiPgor
CQlMb3JlbSBpcHN1bQorCQk8c3BhbiBpZD0icmVsYXRpdmVDaGlsZCI+UmVsYXRpdmUgY2hpbGQ8
L3NwYW4+CisJPC9kaXY+CisJPGRpdiBpZD0ib3ZlcmhhbmdpbmdDb250YWluZXIiPgorCQk8ZGl2
IGlkPSJvdmVyaGFuZ2luZ0Zsb2F0aW5nQ2hpbGQiPk92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5n
aW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0PC9kaXY+CisJPC9k
aXY+CisJPGRpdiBpZD0idHJhbnNmb3JtZWRDaGlsZENvbnRhaW5lciI+CisJCTxkaXYgaWQ9InRy
YW5zZm9ybWVkQ2hpbGQiPlRyYW5zZm9ybWVkPC9kaXY+CisJPC9kaXY+CisJPGRpdj4KKwkJPGIg
aWQ9ImNvbnRpbnVhdGlvbiI+VGhpcyBiIHRhZworCQk8ZGl2PmNhdXNlcyBhPC9kaXY+CisJCWNv
bnRpbnVhdGlvbjwvYj4KKwk8L2Rpdj4KKzwvZGl2PgorPHNjcmlwdD4KK2lmICghd2luZG93LnRl
c3RSdW5uZXIpCisJcmV0dXJuOworCit3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisK
K2Z1bmN0aW9uIGxpc3RlbmVyKCkgeyB9CisKK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKwl2YXIgc3Bh
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwlkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOworICAgIHNwYW4uaW5uZXJIVE1MID0g
bXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9uIHNvcnRSZWN0cyhhLCBiKSB7CisJcmV0dXJu
IGEudG9wIC0gYi50b3A7Cit9CisKK2Z1bmN0aW9uIGxvZ1JlY3RzKGlkKSB7CisJZWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKwllbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
J3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2UpOworCXJlY3RzID0gd2luZG93LmludGVybmFs
cy50b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMoZG9jdW1lbnQpOworCXZhciBzb3J0ZWRSZWN0
cyA9IG5ldyBBcnJheSgpOworCWZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kp
CisJCXNvcnRlZFJlY3RzW2ldID0gcmVjdHNbaV07CisJc29ydGVkUmVjdHMuc29ydChzb3J0UmVj
dHMpOworCWZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCWxvZyhpZCAr
ICJbIiArIGkgKyAiXTogKCIgKyBzb3J0ZWRSZWN0c1tpXS5sZWZ0ICsgIiwgIiArIHNvcnRlZFJl
Y3RzW2ldLnRvcCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS53aWR0aCArICIsICIgKyBzb3J0ZWRS
ZWN0c1tpXS5oZWlnaHQgKyAiKSIpOworCWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91
Y2hzdGFydCcsIGxpc3RlbmVyLCBmYWxzZSk7Cit9CisKK2xvZ1JlY3RzKCJub3JtYWxGbG93Iik7
Citsb2dSZWN0cygiYWJzb2x1dGVDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoInJlbGF0aXZl
Q2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJvdmVyaGFuZ2luZ0NvbnRhaW5lciIpOworbG9n
UmVjdHMoInRyYW5zZm9ybWVkQ2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJjb250aW51YXRp
b24iKTsKKwordmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVz
dHMiKTsKK3Rlc3RDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVy
KTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtcmVtb3ZlZC1jcmFzaC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9l
dmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LXJlbW92ZWQtY3Jhc2gtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91
Y2gvdG91Y2gtdGFyZ2V0LXJlbW92ZWQtY3Jhc2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxIEBACitUZXN0IHBhc3NlcyBpZiBubyBjcmFzaC4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1yZW1vdmVk
LWNyYXNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
ZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LXJlbW92ZWQtY3Jhc2guaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLXRhcmdldC1yZW1vdmVkLWNyYXNoLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+VGVzdCBwYXNzZXMgaWYgbm8gY3Jhc2guPC9wPgorPHNjcmlwdD4KK2lmICghd2luZG93LnRl
c3RSdW5uZXIpCisJcmV0dXJuOworCit3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisK
K2Z1bmN0aW9uIGNyYXNoKCkgeworCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKKwlkaXYub250b3VjaHN0YXJ0ID0gZnVuY3Rpb24oKSB7IH07CisJZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChkaXYpOworICAgIHdpbmRvdy5pbnRlcm5hbHMudG91Y2hFdmVudEhhbmRs
ZXJDb3VudChkb2N1bWVudCk7CisgICAgZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KTsK
KyAgICBkaXYgPSAwOworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICBHQ0Nv
bnRyb2xsZXIuY29sbGVjdCgpOworICAgIHdpbmRvdy5pbnRlcm5hbHMudG91Y2hFdmVudEhhbmRs
ZXJDb3VudChkb2N1bWVudCk7Cit9CisKK2NyYXNoKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
</data>
<flag name="commit-queue"
          id="196500"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179682</attachid>
            <date>2012-12-16 19:08:10 -0800</date>
            <delta_ts>2012-12-17 13:43:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>40489</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDEyLTEyLTE2ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
dHJhY2tpbmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rp
b24gaW4gdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMzkxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGluZyBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCB0YXJnZXQg
cmVnaW9ucyBmb3IgdGhlIHB1cnBvc2Ugb2YgcGVyZm9ybWluZyBpbml0aWFsIGhpdCB0ZXN0aW5n
CisgICAgICAgIGluIHRoZSBjb21wb3NpdG9yIHRvIGF2b2lkIGJsb2NraW5nIHNjcm9sbGluZyBv
biB0aGUgbWFpbiB0aHJlYWQgd2hpbGUgd2FpdGluZyB0byBoaXQgdGVzdCBldmVudHMgdGhhdAor
ICAgICAgICBhcmVuJ3Qgb2NjdXJpbmcgaW4gcmVnaW9ucyB3aXRoIGhhbmRsZXJzLiBUaGlzIGlz
IGluaXRpYWxseSBiZWluZyBkb25lIHRvIGF2b2lkIGhhdmluZyB0byBnbyB0byB0aGUgbWFpbgor
ICAgICAgICB0aHJlYWQgd2hlbiBzY3JvbGxpbmcgYnkgZmxpY2tpbmcgb24gdG91Y2ggZGV2aWNl
cyB3aGVuIHRoZSBmbGljayBvY2N1cnMgb3V0c2lkZSBhIHRyYWNrZWQgdG91Y2ggZXZlbnQKKyAg
ICAgICAgcmVnaW9uLiBUaGlzIHBhdGNoIGluY2x1ZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byB0
dXJuIHRoaXMgb24gaW4gQ2hyb21pdW0uCisKKyAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzIGdv
YWwsIERvY3VtZW50IHdpbGwgbm93IGtlZXAgYSBjb3VudGVkIGhhc2ggc2V0IG9mIG5vZGVzIHdp
dGggdG91Y2ggZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgaW5zdGVhZCBvZiBvbmx5IGFuIHVuc2ln
bmVkIGludGVnZXIgb2YgdGhlIHRvdGFsIGNvdW50LiBTY3JvbGxpbmdDb29yZGluYXRvciB0aGVu
IHVwZGF0ZXMgdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgd2hlbiBuZXcgdG91Y2ggZXZlbnQgaGFu
ZGxlcnMgYXJlIHJlZ2lzdGVyZWQgb3IgcmVtb3ZlZCwgb3IgYWZ0ZXIgbGF5b3V0IG11Y2ggbGlr
ZSBob3cKKyAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb25zIGFyZSBjdXJyZW50bHkgdHJh
Y2tlZC4KKworICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIHdpbGwgbm90IHByb3Blcmx5IHVw
ZGF0ZSB0aGUgaGl0IHRlc3QgcmVjdHMgd2hlbiB0aGUgcmVuZGVyZXJzIGFyZSBpbnNpZGUgYSBz
dWItCisgICAgICAgIHRyZWUgdGhhdCBzY3JvbGxzLgorCisgICAgICAgIFRoaXMgY2hhbmdlIHdh
cyBpbml0aWFsbHkgcm9sbGVkIG91dCBkdWUgdG8gc3RhbGUgTm9kZSBwb2ludGVycyBpbiBEb2N1
bWVudCdzIHRvdWNoRXZlbnRUYXJnZXRzLiBUaGlzCisgICAgICAgIHBhdGNoIGFkZHMgYSBjYWxs
YmFjayB0byByZW1vdmUgdGhlIE5vZGUgZnJvbSB0aGF0IHN0cnVjdHVyZSB0byBOb2RlJ3MgZGVz
dHJ1Y3Rvci4gVGhpcyBpcyBjb3ZlcmVkCisgICAgICAgIGJ5IHRoZSB0b3VjaC10YXJnZXQtcmVt
b3ZlZC1jcmFzaC5odG1sIHRlc3QgY2FzZSB3aGljaCBpcyBhbHNvIGFkZGVkLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91
Y2gtaGl0LXJlY3RzLmh0bWwKKyAgICAgICAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9l
dmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LXJlbW92ZWQtY3Jhc2guaHRtbAorCisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6
IEFkZGVkIGEgSGFzaENvdW50ZWRTZXQgb2YgdG91Y2ggdGFyZ2V0IG5vZGVzLiBOb3RlOiBET01X
aW5kb3cgdGFyZ2V0cworICAgICAgICBhcmUgc3RvcmVkIGFzIHRoZSBEb2N1bWVudCB0aGV5IHBv
aW50IHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5k
bGVyKTogQ2hhbmdlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBoYW5kbGVyIGluc3RlYWQgb2YgYSBj
b3VudCwgYW5kCisgICAgICAgIHRvIHVwZGF0ZSB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3Igd2l0
aCB0aGUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKTogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6aGFzVG91Y2hFdmVudEhhbmRsZXJzKTogSXQncyBubyBsb25n
ZXIgTygxKSB0byBnZXQgdGhlIGNvdW50IG9mIHRvdWNoIGhhbmRsZXJzLCBzbworICAgICAgICBl
eHBvc2Ugd2hldGhlciB0aGVyZSBhcmUgYW55IG9yIG5vdC4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp0b3VjaEV2ZW50VGFyZ2V0cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6dHJ5QWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjp0cnlSZW1vdmVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lQmFzZTo6cmVzdG9yZSk6CisgICAgICAgICogaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
On5IVE1MSW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OnVwZGF0ZVR5cGUpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6IEFkZCB0aGUgRG9jdW1lbnQgdG8g
dGhlIHRvdWNoIHRhcmdldCBzZXQgaW5zdGVhZCBvZiBET01XaW5kb3cuCisgICAgICAgIChXZWJD
b3JlOjpET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91
Y2hFdmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6c2V0RG9jdW1lbnQpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpj
b21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMpOiBXYWxrIHRoZSByZW5kZXJlcnMg
Zm9yIGV2ZW50IGhhbmRsZXIKKyAgICAgICAgbm9kZXMgYW5kIGdlbmVyYXRlIHRoZSBhYnNvbHV0
ZSBoaXQgdGVzdGluZyByZWN0cy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNl
dFRvdWNoRXZlbnRUYXJnZXRSZWN0c0NoYW5nZWQpOiBIb29rIHRvIHBhc3MgYWxvbmcgdGhlIGhp
dCB0ZXN0IHJlY3RzIHRvCisgICAgICAgIHRoZSBzY3JvbGxpbmcgdHJlZS9jb21wb3NpdG9yLgor
ICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5n
L2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRU
b3VjaEV2ZW50VGFyZ2V0UmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5oOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJv
bWl1bSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNvdW50KTogQ2hhbmdlZCB0byBkbyB0aGUg
d29yayB0byBjYWxjdWxhdGUgdGhlIGFjdHVhbCBjb3VudCBzaW5jZQorICAgICAgICBpdCdzIG5v
IGxvbmdlciBzdG9yZWQgYXMgYW4gaW50IGluIERvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjp0b3VjaEV2ZW50VGFyZ2V0Q2xpZW50UmVjdHMpOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmg6CisgICAgICAgIChJbnRlcm5hbHMpOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmlkbDoKKwogMjAxMi0xMi0xNiAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUHVzaCBwaXhlbCBzbmFwcGluZyBsb2dpYyBpbnRvIFRyYW5z
Zm9ybVN0YXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNzg2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
OCw5ICs0OTgsNiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAg
ICAgLCBtX3dyaXRlUmVjdXJzaW9uSXNUb29EZWVwKGZhbHNlKQogICAgICwgbV93cml0ZVJlY3Vy
c2lvbkRlcHRoKDApCiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKLSNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgICwgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50KDApCi0jZW5k
aWYKICAgICAsIG1fcGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5nVGFz
a3NUaW1lckZpcmVkKQogICAgICwgbV9zY2hlZHVsZWRUYXNrc0FyZVN1c3BlbmRlZChmYWxzZSkK
ICAgICAsIG1fdmlzdWFsVXBkYXRlc0FsbG93ZWQodHJ1ZSkKQEAgLTYxMyw2ICs2MTAsMTAgQEAg
RG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgQVNTRVJUKCFtX3BhcmVudFRyZWVTY29wZSk7CiAg
ICAgQVNTRVJUKCFtX2d1YXJkUmVmQ291bnQpOwogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RS
QUNLSU5HKQorICAgIGlmIChEb2N1bWVudCogb3duZXJEb2N1bWVudCA9IHRoaXMtPm93bmVyRG9j
dW1lbnQoKSkKKyAgICAgICAgb3duZXJEb2N1bWVudC0+ZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2Rl
KHRoaXMpOworI2VuZGlmCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSByZXNldCBtX2RvbVdpbmRv
dyB3aGVuIHdlIGRldGFjaCBmcm9tIHRoZSBGcmFtZT8KICAgICBpZiAobV9kb21XaW5kb3cpCiAg
ICAgICAgIG1fZG9tV2luZG93LT5yZXNldFVubGVzc1N1c3BlbmRlZEZvclBhZ2VDYWNoZSgpOwpA
QCAtNTU5OSwzNiArNTYwMCw2OCBAQCB2b2lkIERvY3VtZW50OjpkaWRSZW1vdmVXaGVlbEV2ZW50
SGFuZGxlCiAgICAgd2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQodGhpcyk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCkKK3ZvaWQgRG9jdW1lbnQ6OmRp
ZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqIGhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKLSAgICArK21fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsKLSAgICBpZiAobV90b3Vj
aEV2ZW50SGFuZGxlckNvdW50ID4gMSkKKyAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuZ2V0
KCkpCisgICAgICAgIG1fdG91Y2hFdmVudFRhcmdldHMgPSBhZG9wdFB0cihuZXcgVG91Y2hFdmVu
dFRhcmdldFNldCk7CisgICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+YWRkKGhhbmRsZXIpOworICAg
IGlmIChEb2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgeworICAgICAgICBwYXJl
bnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgICByZXR1cm47Ci0gICAg
aWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOworICAgIH0KKyAgICBpZiAoUGFnZSogcGFn
ZSA9IHRoaXMtPnBhZ2UoKSkgeworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAg
ICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGlu
YXRvci0+dG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdlKHRoaXMpOworI2VuZGlmCisgICAg
ICAgIGlmIChtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHBh
Z2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOworICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCiB9CiAKLXZvaWQgRG9jdW1l
bnQ6OmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCkKK3ZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92
ZVRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqIGhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKLSAgICBBU1NFUlQobV90b3VjaEV2ZW50SGFuZGxlckNvdW50KTsKLSAgICAtLW1fdG91
Y2hFdmVudEhhbmRsZXJDb3VudDsKLSAgICBpZiAobV90b3VjaEV2ZW50SGFuZGxlckNvdW50KQor
ICAgIGlmICghbV90b3VjaEV2ZW50VGFyZ2V0cy5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEFTU0VSVChtX3RvdWNoRXZlbnRUYXJnZXRzLT5jb250YWlucyhoYW5kbGVyKSk7CisgICAgbV90
b3VjaEV2ZW50VGFyZ2V0cy0+cmVtb3ZlKGhhbmRsZXIpOworICAgIGlmIChEb2N1bWVudCogcGFy
ZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgeworICAgICAgICBwYXJlbnQtPmRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgUGFnZSog
cGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT50b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRD
aGFuZ2UodGhpcyk7CisjZW5kaWYKKyAgICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgp
KQorICAgICAgICByZXR1cm47CiAgICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSBwYWdlLT5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT50
b3VjaEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAm
JiBmcmFtZS0+ZG9jdW1lbnQoKS0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNo
RXZlbnRzKGZhbHNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlm
CiB9CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCit2b2lkIERvY3VtZW50Ojpk
aWRSZW1vdmVFdmVudFRhcmdldE5vZGUoTm9kZSogaGFuZGxlcikKK3sKKyAgICBpZiAobV90b3Vj
aEV2ZW50VGFyZ2V0cy5nZXQoKSkKKyAgICAgICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+cmVtb3Zl
QWxsKGhhbmRsZXIpOworfQorI2VuZGlmCisKIEhUTUxJRnJhbWVFbGVtZW50KiBEb2N1bWVudDo6
c2VhbWxlc3NQYXJlbnRJRnJhbWUoKSBjb25zdAogewogICAgIGlmICghc2hvdWxkRGlzcGxheVNl
YW1sZXNzbHlXaXRoUGFyZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24g
MTM3ODY1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwNyw2ICsyMDcsOCBAQCBlbnVtIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB7CiB9Owog
Y29uc3QgaW50IG51bU5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZXMgPSBJbnZhbGlkYXRlT25BbnlB
dHRyQ2hhbmdlICsgMTsKIAordHlwZWRlZiBIYXNoQ291bnRlZFNldDxOb2RlKj4gVG91Y2hFdmVu
dFRhcmdldFNldDsKKwogY2xhc3MgRG9jdW1lbnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSwgcHVi
bGljIFRyZWVTY29wZSwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25z
dCBLVVJMJiB1cmwpCkBAIC0xMTE4LDEzICsxMTIwLDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRp
ZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQot
ICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3Rv
dWNoRXZlbnRIYW5kbGVyQ291bnQ7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygp
IGNvbnN0IHsgcmV0dXJuIChtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpKSA/IG1fdG91Y2hFdmVu
dFRhcmdldHMtPnNpemUoKSA6IGZhbHNlOyB9CiAjZWxzZQotICAgIHVuc2lnbmVkIHRvdWNoRXZl
bnRIYW5kbGVyQ291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBoYXNUb3VjaEV2
ZW50SGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKKyAgICB2b2lk
IGRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUqKTsKKyAgICB2b2lkIGRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKE5vZGUqKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykK
KyAgICB2b2lkIGRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZShOb2RlKik7CiAjZW5kaWYKIAotICAg
IHZvaWQgZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKLSAgICB2b2lkIGRpZFJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKCk7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBjb25zdCBUb3Vj
aEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdG91
Y2hFdmVudFRhcmdldHMuZ2V0KCk7IH0KKyNlbHNlCisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdl
dFNldCogdG91Y2hFdmVudFRhcmdldHMoKSBjb25zdCB7IHJldHVybiAwOyB9CisjZW5kaWYKIAog
ICAgIGJvb2wgdmlzdWFsVXBkYXRlc0FsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX3Zpc3VhbFVw
ZGF0ZXNBbGxvd2VkOyB9CiAKQEAgLTE1MDMsNyArMTUxNSw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdW5zaWduZWQgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50OwogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCi0gICAgdW5zaWduZWQgbV90b3VjaEV2ZW50SGFuZGxlckNvdW50OworICAgIE93blB0
cjxUb3VjaEV2ZW50VGFyZ2V0U2V0PiBtX3RvdWNoRXZlbnRUYXJnZXRzOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShy
ZXZpc2lvbiAxMzc4NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxMiw4ICs0MTIsMTMgQEAgTm9kZTo6fk5vZGUoKQogICAgIGlmIChoYXNSYXJl
RGF0YSgpKQogICAgICAgICBjbGVhclJhcmVEYXRhKCk7CiAKLSAgICBpZiAoaGFzRXZlbnRUYXJn
ZXREYXRhKCkpCisgICAgaWYgKGhhc0V2ZW50VGFyZ2V0RGF0YSgpKSB7CisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UX1RSQUNLSU5HKQorICAgICAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgICAg
IG1fZG9jdW1lbnQtPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSh0aGlzKTsKKyNlbmRpZgogICAg
ICAgICBjbGVhckV2ZW50VGFyZ2V0RGF0YSgpOworICAgIH0KIAogICAgIGlmIChyZW5kZXJlcigp
KQogICAgICAgICBkZXRhY2goKTsKQEAgLTIxMjUsOCArMjEzMCw4IEBAIHZvaWQgTm9kZTo6ZGlk
TW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRv
dWNoRXZlbnROYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBFdmVudExpc3RlbmVy
VmVjdG9yJiBsaXN0ZW5lcnMgPSBnZXRFdmVudExpc3RlbmVycyh0b3VjaEV2ZW50TmFtZXNbaV0p
OwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxpc3RlbmVycy5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgb2xkRG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7
Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAg
ICAgICAgICAgb2xkRG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwor
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIodGhpcyk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTIxNTUsNyArMjE2MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCB0cnlBZGRFdmVudExpc3RlbmVyKE4KICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVs
RXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZl
bnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVu
dEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxl
cih0YXJnZXROb2RlKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNzcsNyArMjE4
Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0cnlSZW1vdmVFdmVudExpc3RlbmUKICAgICAgICAg
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQogICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2Ug
aWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkpCi0gICAgICAgICAg
ICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0YXJnZXROb2RlKTsKICAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUu
Y3BwCShyZXZpc2lvbiAxMzc4NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgQ2FjaGVkRnJh
bWVCYXNlOjpyZXN0b3JlKCkKICAgICBtX2RvY3VtZW50LT5lbnF1ZXVlUG9wc3RhdGVFdmVudCho
aXN0b3J5SXRlbSAmJiBoaXN0b3J5SXRlbS0+c3RhdGVPYmplY3QoKSA/IGhpc3RvcnlJdGVtLT5z
dGF0ZU9iamVjdCgpIDogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CiAgICAg
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAobV9kb2N1bWVudC0+dG91Y2hFdmVu
dEhhbmRsZXJDb3VudCgpKQorICAgIGlmIChtX2RvY3VtZW50LT5oYXNUb3VjaEV2ZW50SGFuZGxl
cnMoKSkKICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPm5l
ZWRUb3VjaEV2ZW50cyh0cnVlKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzg2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMs
NyBAQCBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiAgICAgICAgIGRvY3Vt
ZW50KCktPmZvcm1Db250cm9sbGVyKCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0
b24odGhpcyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9oYXNUb3VjaEV2
ZW50SGFuZGxlcikKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRs
ZXIoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIodGhp
cyk7CiAjZW5kaWYKIH0KIApAQCAtNDg5LDkgKzQ4OSw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6dXBkYXRlVHlwZSgpCiAgICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlciA9IG1faW5wdXRU
eXBlLT5oYXNUb3VjaEV2ZW50SGFuZGxlcigpOwogICAgIGlmIChoYXNUb3VjaEV2ZW50SGFuZGxl
ciAhPSBtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKSB7CiAgICAgICBpZiAoaGFzVG91Y2hFdmVudEhh
bmRsZXIpCi0gICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7Cisg
ICAgICAgIGRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKHRoaXMpOwogICAgICAg
ZWxzZQotICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigpOwor
ICAgICAgICBkb2N1bWVudCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcih0aGlzKTsKICAg
ICAgIG1faGFzVG91Y2hFdmVudEhhbmRsZXIgPSBoYXNUb3VjaEV2ZW50SGFuZGxlcjsKICAgICB9
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDEzNzg2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU4Miw3ICsxNTgyLDcgQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQQogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZl
bnQpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKICAg
ICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkK
LSAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigpOworICAgICAg
ICAgICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKGRvY3VtZW50KTsKICAgICAg
ICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQpCiAgICAg
ICAgICAgICBkaWRBZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcih0aGlzKTsKICAgICB9CkBAIC0xNjEz
LDcgKzE2MTMsNyBAQCBib29sIERPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zCiAg
ICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkKICAg
ICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwogICAgICAg
ICBlbHNlIGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQotICAg
ICAgICAgICAgZG9jdW1lbnQtPmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCk7CisgICAgICAg
ICAgICBkb2N1bWVudC0+ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoZG9jdW1lbnQpOwogICAg
IH0KIAogICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTM3ODY1KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NzY5LDcgKzM3NjksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25z
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmICghZG9jLT50b3VjaEV2ZW50SGFuZGxlckNvdW50KCkp
CisgICAgICAgICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRh
cmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5vZGUpOwogICAgICAgICAgICAgdG91Y2hU
YXJnZXQgPSBub2RlOwpAQCAtMzc5NCw3ICszNzk0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6Omhh
bmRsZVRvdWNoRXZlbnQoY29ucwogICAgICAgICBEb2N1bWVudCogZG9jID0gdG91Y2hUYXJnZXQt
PnRvTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICBpZiAoIWRvYykKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoIWRvYy0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpKQorICAg
ICAgICBpZiAoIWRvYy0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gZG9jLT5mcmFtZSgpOwogICAgICAg
ICBpZiAoIXRhcmdldEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEz
Nzg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDksNyArMzA5LDcgQEAgdm9pZCBGcmFtZTo6c2V0RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1
bQogICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKSA9PSB0aGlzKSB7CiAgICAg
ICAgIG5vdGlmeUNocm9tZUNsaWVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKCk7CiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAgICAgaWYgKG1fZG9jICYmIG1fZG9jLT50b3Vj
aEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+aGFzVG91
Y2hFdmVudEhhbmRsZXJzKCkpCiAgICAgICAgICAgICBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwogI2VuZGlmCiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cAkocmV2aXNpb24gMTM3ODY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXIuaCIKQEAgLTE3Nyw2ICsxNzgsNTcgQEAgUmVnaW9uIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpjb21wdXRlTm9uRgogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bjsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKK3N0YXRpYyB2b2lkIGFj
Y3VtdWxhdGVSZW5kZXJlclRvdWNoRXZlbnRUYXJnZXRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyBPKE5eMikgYXMgaXQgd2Fsa3MgdGhlIHRyZWUgdG8gdGhlIHJvb3QgZm9yIGV2
ZXJ5IHJlbmRlcmVyLiBSZW5kZXJHZW9tZXRyeU1hcCB3b3VsZCBmaXggdGhpcy4KKyAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlci0+Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoMCkpKTsKKyAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkgeworICAg
ICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKTsK
KyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gYmxvY2stPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBhY2N1bXVs
YXRlUmVuZGVyZXJUb3VjaEV2ZW50VGFyZ2V0UmVjdHMocmVjdHMsIGNoaWxkKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIGFjY3VtdWxhdGVEb2N1bWVudEV2ZW50VGFyZ2V0UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VS
VChkb2N1bWVudCk7CisgICAgaWYgKCFkb2N1bWVudC0+dG91Y2hFdmVudFRhcmdldHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVG91Y2hFdmVudFRhcmdldFNldCogdGFyZ2V0cyA9
IGRvY3VtZW50LT50b3VjaEV2ZW50VGFyZ2V0cygpOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdl
dFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRhcmdldHMtPmJlZ2luKCk7IGl0ZXIgIT0gdGFy
Z2V0cy0+ZW5kKCk7ICsraXRlcikgeworICAgICAgICBjb25zdCBOb2RlKiB0b3VjaFRhcmdldCA9
IGl0ZXItPmtleTsKKyAgICAgICAgaWYgKCF0b3VjaFRhcmdldC0+aW5Eb2N1bWVudCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHRvdWNoVGFyZ2V0ID09IGRvY3VtZW50
KSB7CisgICAgICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJW
aWV3KCkpCisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3Qodmll
dy0+Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoMCkpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b3VjaFRhcmdldC0+aXNEb2N1bWVudE5vZGUo
KSAmJiB0b3VjaFRhcmdldCAhPSBkb2N1bWVudCkgeworICAgICAgICAgICAgYWNjdW11bGF0ZURv
Y3VtZW50RXZlbnRUYXJnZXRSZWN0cyhyZWN0cywgc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnQq
Pih0b3VjaFRhcmdldCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRvdWNoVGFyZ2V0LT5yZW5kZXJlcigp
KQorICAgICAgICAgICAgYWNjdW11bGF0ZVJlbmRlcmVyVG91Y2hFdmVudFRhcmdldFJlY3RzKHJl
Y3RzLCByZW5kZXJlcik7CisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpj
b21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQoreworICAgIEFTU0VSVChkb2N1bWVudCk7Cisg
ICAgaWYgKCFkb2N1bWVudC0+dmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogVGhlc2UgcmVjdHMgd29uJ3QgYmUgcHJvcGVybHkgdXBkYXRlZCBpZiB0aGUgcmVuZGVyZXJz
IGFyZSBpbiBhIHN1Yi10cmVlIHRoYXQgc2Nyb2xscy4KKyAgICBhY2N1bXVsYXRlRG9jdW1lbnRF
dmVudFRhcmdldFJlY3RzKHJlY3RzLCBkb2N1bWVudCk7Cit9CisjZW5kaWYKKwogdW5zaWduZWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCgpCiB7CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmgJKHJldmlzaW9uIDEzNzg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1
ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgpAQCAtNTAsNiArNTEsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJ
RDsKIAogZW51bSBTY3JvbGxpbmdOb2RlVHlwZSB7IFNjcm9sbGluZ05vZGUsIEZpeGVkTm9kZSB9
OwogCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xh
c3MgR3JhcGhpY3NMYXllcjsKQEAgLTE0OSw2ICsxNTEsMTEgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVh
KiwgR3JhcGhpY3NMYXllciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklzQ29udGFp
bmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXll
ciosIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRD
aGFuZ2UoY29uc3QgRG9jdW1lbnQqKSB7IH0KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFD
S0lORykKKyAgICB2b2lkIGNvbXB1dGVBYnNvbHV0ZVRvdWNoRXZlbnRUYXJnZXRSZWN0cyhjb25z
dCBEb2N1bWVudCosIFZlY3RvcjxJbnRSZWN0PiYpOworI2VuZGlmCiAKICAgICBzdGF0aWMgU3Ry
aW5nIG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zQXNUZXh0KE1haW5UaHJlYWRTY3JvbGxpbmdS
ZWFzb25zKTsKICAgICBTdHJpbmcgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnNBc1RleHQoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiAxMzc4NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJv
bWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDYgKzExNSwzMCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OmZyYW1l
CiAgICAgLy8gZnJhbWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBt
YWluIGZyYW1lLgogICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVO
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsK
ICAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQorICAgIFZlY3RvcjxJbnRSZWN0PiB0
b3VjaEV2ZW50VGFyZ2V0UmVjdHM7CisgICAgY29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdl
dFJlY3RzKG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCksIHRvdWNoRXZlbnRUYXJnZXRS
ZWN0cyk7CisgICAgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKHRvdWNoRXZlbnRUYXJnZXRSZWN0
cyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjp0b3Vj
aEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2UoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorewor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVF9UUkFDS0lORykKKyAgICAvLyBXYWl0IHVudGlsIGFmdGVy
IGxheW91dCB0byB1cGRhdGUuCisgICAgaWYgKG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+
bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugd29uJ3QgbmVjZXNz
YXJpbHkgZ2V0IGEgc2V0U2Nyb2xsTGF5ZXIoKSBjYWxsIGJlZm9yZSB0aGlzIG9uZSwgc28gZ3Jh
YiB0aGUgcm9vdCBvdXJzZWx2ZXMuCisgICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JG
cmFtZVZpZXcobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSk7CisgICAgaWYgKG1fcHJpdmF0
ZS0+c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICBWZWN0b3I8SW50UmVjdD4gdG91Y2hFdmVudFRh
cmdldFJlY3RzOworICAgICAgICBjb21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50VGFyZ2V0UmVjdHMo
ZG9jdW1lbnQsIHRvdWNoRXZlbnRUYXJnZXRSZWN0cyk7CisgICAgICAgIHNldFRvdWNoRXZlbnRU
YXJnZXRSZWN0cyh0b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOworICAgIH0KKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1l
VmlldykKQEAgLTIwOSw2ICsyMzMsMTggQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtOjpzZXRObwogICAgIH0KIH0KIAordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
OjpzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHMoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBhYnNvbHV0
ZUhpdFRlc3RSZWN0cykKK3sKKyAgICAvLyBXZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBzZXRT
Y3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRoZSByb290IG91cnNl
bHZlcy4KKyAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmlldyhtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT52aWV3KCkpKTsKKyAgICBpZiAobV9wcml2YXRlLT5zY3JvbGxMYXllcigp
KSB7CisgICAgICAgIFdlYlZlY3RvcjxXZWJSZWN0PiB3ZWJSZWN0cyhhYnNvbHV0ZUhpdFRlc3RS
ZWN0cy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlSGl0
VGVzdFJlY3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgd2ViUmVjdHNbaV0gPSBhYnNvbHV0
ZUhpdFRlc3RSZWN0c1tpXTsKKyAgICAgICAgbV9wcml2YXRlLT5zY3JvbGxMYXllcigpLT5zZXRU
b3VjaEV2ZW50SGFuZGxlclJlZ2lvbih3ZWJSZWN0cyk7CisgICAgfQorfQorCiB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWdu
ZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKIHsKICAgICAvLyBXZSB3b24ndCBuZWNlc3Nhcmls
eSBnZXQgYSBzZXRTY3JvbGxMYXllcigpIGNhbGwgYmVmb3JlIHRoaXMgb25lLCBzbyBncmFiIHRo
ZSByb290IG91cnNlbHZlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2No
cm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmgJKHJldmlzaW9uIDEzNzg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkod29ya2luZyBjb3B5
KQpAQCAtNjgsMTIgKzY4LDE2IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdo
ZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsIGFyZWEgY2hh
bmdlcy4KICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5n
ZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5ZXIqKTsKIAorICAgIC8vIFNob3VsZCBiZSBj
YWxsZWQgd2hlbmV2ZXIgdG91Y2ggaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQsIHJlbW92ZWQsIG9y
IG1vdmVkLgorICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHNEaWRDaGFuZ2Uo
Y29uc3QgRG9jdW1lbnQqKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CiAKICAgICB2b2lkIHNldFNjcm9s
bExheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKGNvbnN0IFJlZ2lvbiYpOworICAgIHZvaWQgc2V0VG91Y2hFdmVudFRhcmdldFJlY3RzKGNv
bnN0IFZlY3RvcjxJbnRSZWN0PiYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCh1bnNpZ25lZCk7CiAgICAgUGFzc093blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhckxheWVyPiBj
cmVhdGVTY3JvbGxiYXJMYXllcihTY3JvbGxiYXIqLCBXZWJLaXQ6OldlYkxheWVyKiBzY3JvbGxM
YXllciwgR3JhcGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgRnJhbWVWaWV3Kik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDEzNzg2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlbGVjdFJ1
bGVGZWF0dXJlU2V0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKQEAgLTEyMDAsOCArMTIwMSwzOCBAQCB1bnNpZ25lZCBJbnRlcm5h
bHM6OnRvdWNoRXZlbnRIYW5kbGVyQ291CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IHJldHVybiBkb2N1bWVudC0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpOworICAgIGNvbnN0IFRv
dWNoRXZlbnRUYXJnZXRTZXQqIHRvdWNoSGFuZGxlcnMgPSBkb2N1bWVudC0+dG91Y2hFdmVudFRh
cmdldHMoKTsKKyAgICBpZiAoIXRvdWNoSGFuZGxlcnMpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGZvciAoVG91Y2hFdmVudFRhcmdldFNldDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IHRvdWNoSGFuZGxlcnMtPmJlZ2luKCk7IGl0ZXIgIT0gdG91Y2hI
YW5kbGVycy0+ZW5kKCk7ICsraXRlcikKKyAgICAgICAgY291bnQgKz0gaXRlci0+dmFsdWU7Cisg
ICAgcmV0dXJuIGNvdW50OworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RSQUNLSU5HKQor
UGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gSW50ZXJuYWxzOjp0b3VjaEV2ZW50VGFyZ2V0Q2xp
ZW50UmVjdHMoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBp
ZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpIHx8ICFkb2N1bWVudC0+cGFnZSgpKSB7
CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgaWYgKCFkb2N1bWVudC0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQor
ICAgICAgICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZSgpOworCisgICAgZG9jdW1lbnQt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgVmVjdG9yPElu
dFJlY3Q+IGFic29sdXRlUmVjdHM7CisgICAgZG9jdW1lbnQtPnBhZ2UoKS0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKS0+Y29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50
LCBhYnNvbHV0ZVJlY3RzKTsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVF1YWRzKGFi
c29sdXRlUmVjdHMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1
dGVSZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgYWJzb2x1dGVRdWFkc1tpXSA9IEZsb2F0UXVh
ZChhYnNvbHV0ZVJlY3RzW2ldKTsKKworICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRl
KGFic29sdXRlUXVhZHMpOwogfQorI2VuZGlmCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEludGVy
bmFsczo6bm9kZXNGcm9tUmVjdChEb2N1bWVudCogZG9jdW1lbnQsIGludCB4LCBpbnQgeSwgdW5z
aWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgIHVuc2lnbmVkIGJv
dHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nLCBi
b29sIGFsbG93U2hhZG93Q29udGVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDEzNzg2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEs
OSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KERvY3Vt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291
bnQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UX1RS
QUNLSU5HKQorICAgIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IHRvdWNoRXZlbnRUYXJnZXRD
bGllbnRSZWN0cyhEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgogCiAgICAgUGFz
c1JlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVjdChEb2N1bWVudCosIGludCB4LCBpbnQgeSwg
dW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgICAgICB1bnNp
Z25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlw
cGluZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDEzNzg2NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MTM5LDYgKzEzOSw5IEBACiAKICAgICB1bnNpZ25lZCBsb25nIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICB1bnNp
Z25lZCBsb25nIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJh
aXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9FVkVOVF9UUkFD
S0lORykgJiYgRU5BQkxFX1RPVUNIX0VWRU5UX1RSQUNLSU5HCisgICAgQ2xpZW50UmVjdExpc3Qg
dG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMg
KERPTUV4Y2VwdGlvbik7CisjZW5kaWYKIAogICAgIE5vZGVMaXN0IG5vZGVzRnJvbVJlY3QoaW4g
RG9jdW1lbnQgZG9jdW1lbnQsIGluIGxvbmcgeCwgaW4gbG9uZyB5LAogICAgICAgICBpbiB1bnNp
Z25lZCBsb25nIHRvcFBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgcmlnaHRQYWRkaW5nLCBpbiB1
bnNpZ25lZCBsb25nIGJvdHRvbVBhZGRpbmcsIGluIHVuc2lnbmVkIGxvbmcgbGVmdFBhZGRpbmcs
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3ODY1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMi0xMi0xNiAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8g
ZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MTQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGluZyB0b3VjaCBldmVu
dCB0YXJnZXQgcmVnaW9uIHRyYWNraW5nLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKyAg
ICAgICAgKiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcXVlc3RUb3VjaEV2ZW50VHlwZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWluZXJJbXBs
KToKKwogMjAxMi0xMi0xNiAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUHVzaCBwaXhlbCBzbmFwcGluZyBsb2dpYyBpbnRvIFRyYW5zZm9ybVN0YXRlCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShyZXZpc2lvbiAxMzc4NjUpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTExNiw2ICsxMTYsNyBAQAogICAgICAgJ0VOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEnLAogICAg
ICAgJ0VOQUJMRV9UT1VDSF9FVkVOVFM9PChlbmFibGVfdG91Y2hfZXZlbnRzKScsCiAgICAgICAn
RU5BQkxFX1RPVUNIX0lDT05fTE9BRElORz08KGVuYWJsZV90b3VjaF9pY29uX2xvYWRpbmcpJywK
KyAgICAgICdFTkFCTEVfVE9VQ0hfRVZFTlRfVFJBQ0tJTkc9PChlbmFibGVfdG91Y2hfZXZlbnRz
KScsCiAgICAgICAnRU5BQkxFX1RPVUNIX1NMSURFUj0xJywKICAgICAgICdFTkFCTEVfVVNFUl9U
SU1JTkc9MScsCiAgICAgICAnRU5BQkxFX1Y4X1NDUklQVF9ERUJVR19TRVJWRVI9MScsCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWlu
ZXJJbXBsLmNwcAkocmV2aXNpb24gMTM3ODY1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNyw5ICs1
MjcsOSBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcXVlc3RUb3VjCiAgICAgICAg
IHJldHVybjsKICAgICBtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOwogICAg
IGlmIChtX3RvdWNoRXZlbnRSZXF1ZXN0VHlwZSAhPSBUb3VjaEV2ZW50UmVxdWVzdFR5cGVOb25l
KQotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVy
KCk7CisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZGlkQWRkVG91Y2hFdmVudEhhbmRs
ZXIobV9lbGVtZW50KTsKICAgICBlbHNlCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcihtX2VsZW1lbnQpOwogfQogCiB2b2lkIFdl
YlBsdWdpbkNvbnRhaW5lckltcGw6OnNldFdhbnRzV2hlZWxFdmVudHMoYm9vbCB3YW50c1doZWVs
RXZlbnRzKQpAQCAtNjcyLDcgKzY3Miw3IEBAIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OldlYlBs
dWdpbkNvbnRhaW4KIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWluZXJJ
bXBsKCkKIHsKICAgICBpZiAobV90b3VjaEV2ZW50UmVxdWVzdFR5cGUgIT0gVG91Y2hFdmVudFJl
cXVlc3RUeXBlTm9uZSkKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kaWRSZW1vdmVU
b3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRpZFJl
bW92ZVRvdWNoRXZlbnRIYW5kbGVyKG1fZWxlbWVudCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fcGx1Z2luTG9hZE9ic2VydmVycy5zaXplKCk7ICsraSkKICAgICAgICAgbV9wbHVn
aW5Mb2FkT2JzZXJ2ZXJzW2ldLT5jbGVhclBsdWdpbkNvbnRhaW5lcigpOwpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTM3ODY1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTItMTItMTYgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0cmFja2luZyBoaXQgdGVzdCByZWN0
YW5nbGVzIHRvIGVuYWJsZSBmYXN0IGV2ZW50IHJlamVjdGlvbiBpbiB0aGUgY29tcG9zaXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTE0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZl
bnRzL3RvdWNoL2NvbXBvc2l0b3ItdG91Y2gtaGl0LXJlY3RzLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1yZW1v
dmVkLWNyYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LXJlbW92ZWQtY3Jhc2guaHRtbDogQWRk
ZWQuCisKIDIwMTItMTItMTYgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQuIFJlYmFzZWxpbmVkIHZpcnR1YWwvZ3B1L2NvbXBvc2l0ZWRz
Y3JvbGxpbmcvc2Nyb2xsYmFycy9zY3JvbGxiYXItb3JpZW50YXRpb24uaHRtbC4KSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2NvbXBvc2l0b3It
dG91Y2gtaGl0LXJlY3RzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1y
ZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1yZWN0cy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKK1RoaXMgdGVzdHMgdmVyaWZp
ZXMgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBv
bmx5IGJlIHJ1biBpbiBEdW1wUmVuZGVyVHJlZS4gVGhlIG91dHB1dHRlZCByZWN0cyBzaG91bGQg
Y292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMuCisK
K25vcm1hbEZsb3dbMF06ICg4LCA3MiwgNzg0LCAxMCkKK25vcm1hbEZsb3dbMV06ICg4LCA3Miwg
Nzg0LCAxMCkKK25vcm1hbEZsb3dbMl06ICgxMjgsIDcyLCAzMCwgMTApCitub3JtYWxGbG93WzNd
OiAoOCwgNzIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxkQ29udGFpbmVyWzBdOiAoOCwgMTYyLCA3
ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclsxXTogKDgsIDE2MiwgNzg0LCAxMCkKK2Fi
c29sdXRlQ2hpbGRDb250YWluZXJbMl06ICg4LCAxNjIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxk
Q29udGFpbmVyWzNdOiAoMTE4LCAzMDAsIDE0MCwgMTApCithYnNvbHV0ZUNoaWxkQ29udGFpbmVy
WzRdOiAoMTE4LCAzMDAsIDE0MCwgMTApCityZWxhdGl2ZUNoaWxkQ29udGFpbmVyWzBdOiAoOCwg
MjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclsxXTogKDgsIDI3MiwgNzg0LCAx
MCkKK3JlbGF0aXZlQ2hpbGRDb250YWluZXJbMl06ICg4LCAyNzIsIDc4NCwgMTApCityZWxhdGl2
ZUNoaWxkQ29udGFpbmVyWzNdOiAoMTI4LCA0NzIsIDE0MCwgMTApCitvdmVyaGFuZ2luZ0NvbnRh
aW5lclswXTogKDgsIDM2MiwgNzg0LCAxMCkKK292ZXJoYW5naW5nQ29udGFpbmVyWzFdOiAoOCwg
MzYyLCAxMTAsIDgwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMl06ICg4LCAzNjIsIDExMCwgODAp
Cit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyWzBdOiAoNjIsIDQyMSwgNjYxLCAzMikKK3RyYW5z
Zm9ybWVkQ2hpbGRDb250YWluZXJbMV06ICg2MiwgNDIxLCA2NjEsIDMyKQordHJhbnNmb3JtZWRD
aGlsZENvbnRhaW5lclsyXTogKDgsIDQzMiwgNzY5LCAxMCkKK2NvbnRpbnVhdGlvblswXTogKDEw
OCwgNTAyLCAxMDAsIDEwKQorCitUaGlzIHRlc3RzIHZlcmlmaWVzIHRoZSBoaXQgdGVzdCByZWdp
b25zIGdpdmVuIHRvIHRoZSBjb21wb3NpdG9yLiBJdCBjYW4gb25seSBiZSBydW4gaW4gRHVtcFJl
bmRlclRyZWUuIFRoZSBvdXRwdXR0ZWQgcmVjdHMgc2hvdWxkIGNvdmVyIHRoZSBoaXQgdGVzdCBy
ZWdpb25zIG9mIGFsbCB0aGUgbGlzdGVkIGVsZW1lbnRzLgorCitub3JtYWxGbG93WzBdOiAoOCwg
NzIsIDc4NCwgMTApCitub3JtYWxGbG93WzFdOiAoOCwgNzIsIDc4NCwgMTApCitub3JtYWxGbG93
WzJdOiAoMTI4LCA3MiwgMzAsIDEwKQorbm9ybWFsRmxvd1szXTogKDgsIDcyLCA3ODQsIDEwKQor
YWJzb2x1dGVDaGlsZENvbnRhaW5lclswXTogKDgsIDE2MiwgNzg0LCAxMCkKK2Fic29sdXRlQ2hp
bGRDb250YWluZXJbMV06ICg4LCAxNjIsIDc4NCwgMTApCithYnNvbHV0ZUNoaWxkQ29udGFpbmVy
WzJdOiAoOCwgMTYyLCA3ODQsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lclszXTogKDExOCwg
MzAwLCAxNDAsIDEwKQorYWJzb2x1dGVDaGlsZENvbnRhaW5lcls0XTogKDExOCwgMzAwLCAxNDAs
IDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclswXTogKDgsIDI3MiwgNzg0LCAxMCkKK3JlbGF0
aXZlQ2hpbGRDb250YWluZXJbMV06ICg4LCAyNzIsIDc4NCwgMTApCityZWxhdGl2ZUNoaWxkQ29u
dGFpbmVyWzJdOiAoOCwgMjcyLCA3ODQsIDEwKQorcmVsYXRpdmVDaGlsZENvbnRhaW5lclszXTog
KDEyOCwgNDcyLCAxNDAsIDEwKQorb3ZlcmhhbmdpbmdDb250YWluZXJbMF06ICg4LCAzNjIsIDc4
NCwgMTApCitvdmVyaGFuZ2luZ0NvbnRhaW5lclsxXTogKDgsIDM2MiwgMTEwLCA4MCkKK292ZXJo
YW5naW5nQ29udGFpbmVyWzJdOiAoOCwgMzYyLCAxMTAsIDgwKQordHJhbnNmb3JtZWRDaGlsZENv
bnRhaW5lclswXTogKDYyLCA0MjEsIDY2MSwgMzIpCit0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVy
WzFdOiAoNjIsIDQyMSwgNjYxLCAzMikKK3RyYW5zZm9ybWVkQ2hpbGRDb250YWluZXJbMl06ICg4
LCA0MzIsIDc2OSwgMTApCitjb250aW51YXRpb25bMF06ICgxMDgsIDUwMiwgMTAwLCAxMCkKKwpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvY29t
cG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9jb21wb3NpdG9yLXRvdWNoLWhpdC1y
ZWN0cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
ZmFzdC9ldmVudHMvdG91Y2gvY29tcG9zaXRvci10b3VjaC1oaXQtcmVjdHMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzdHlsZT4KKyN0cmFuc2Zvcm1lZENoaWxkIHsKKwktd2Via2l0LXRyYW5zZm9ybTogcm90YXRl
M2QoMC4yLCAxLCAwLCAzNWdyYWQpOworfQorI2Fic29sdXRlQ2hpbGQgeworCXBvc2l0aW9uOiBh
YnNvbHV0ZTsKKwl0b3A6IDMwMHB4OworfQorI3JlbGF0aXZlQ2hpbGQgeworCXBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKwl0b3A6IDIwMHB4OworfQorI292ZXJoYW5naW5nQ29udGFpbmVyIHsKKwloZWln
aHQ6IDEwcHg7Cit9Cisjb3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIHsKKwl3aWR0aDogMTAwcHg7
CisJZmxvYXQ6IGxlZnQ7Cit9CisjdGVzdHMgeworCWZvbnQ6IDEwcHggQWhlbTsKK30KKzwvc3R5
bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0cyB2ZXJp
ZmllcyB0aGUgaGl0IHRlc3QgcmVnaW9ucyBnaXZlbiB0byB0aGUgY29tcG9zaXRvci4gSXQgY2Fu
IG9ubHkgYmUgcnVuIGluIER1bXBSZW5kZXJUcmVlLgorVGhlIG91dHB1dHRlZCByZWN0cyBzaG91
bGQgY292ZXIgdGhlIGhpdCB0ZXN0IHJlZ2lvbnMgb2YgYWxsIHRoZSBsaXN0ZWQgZWxlbWVudHMu
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InRlc3RzIj4KKwk8ZGl2
IGlkPSJub3JtYWxGbG93Ij4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4+c3VtPC9zcGFuPi4KKwk8
L2Rpdj4KKwk8ZGl2IGlkPSJhYnNvbHV0ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0K
KwkJPHNwYW4gaWQ9ImFic29sdXRlQ2hpbGQiPkFic29sdXRlIGNoaWxkPC9zcGFuPgorCTwvZGl2
PgorCTxkaXYgaWQ9InJlbGF0aXZlQ2hpbGRDb250YWluZXIiPgorCQlMb3JlbSBpcHN1bQorCQk8
c3BhbiBpZD0icmVsYXRpdmVDaGlsZCI+UmVsYXRpdmUgY2hpbGQ8L3NwYW4+CisJPC9kaXY+CisJ
PGRpdiBpZD0ib3ZlcmhhbmdpbmdDb250YWluZXIiPgorCQk8ZGl2IGlkPSJvdmVyaGFuZ2luZ0Zs
b2F0aW5nQ2hpbGQiPk92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0IG92ZXJoYW5n
aW5nIGZsb2F0IG92ZXJoYW5naW5nIGZsb2F0PC9kaXY+CisJPC9kaXY+CisJPGRpdiBpZD0idHJh
bnNmb3JtZWRDaGlsZENvbnRhaW5lciI+CisJCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGQiPlRy
YW5zZm9ybWVkPC9kaXY+CisJPC9kaXY+CisJPGRpdj4KKwkJPGIgaWQ9ImNvbnRpbnVhdGlvbiI+
VGhpcyBiIHRhZworCQk8ZGl2PmNhdXNlcyBhPC9kaXY+CisJCWNvbnRpbnVhdGlvbjwvYj4KKwk8
L2Rpdj4KKzwvZGl2PgorPHNjcmlwdD4KK2lmICghd2luZG93LnRlc3RSdW5uZXIpCisJcmV0dXJu
OworCit3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxpc3RlbmVy
KCkgeyB9CisKK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKwl2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFw
cGVuZENoaWxkKHNwYW4pOworICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9
CisKK2Z1bmN0aW9uIHNvcnRSZWN0cyhhLCBiKSB7CisJcmV0dXJuIGEudG9wIC0gYi50b3A7Cit9
CisKK2Z1bmN0aW9uIGxvZ1JlY3RzKGlkKSB7CisJZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTsKKwllbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0
ZW5lciwgZmFsc2UpOworCXJlY3RzID0gd2luZG93LmludGVybmFscy50b3VjaEV2ZW50VGFyZ2V0
Q2xpZW50UmVjdHMoZG9jdW1lbnQpOworCXZhciBzb3J0ZWRSZWN0cyA9IG5ldyBBcnJheSgpOwor
CWZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCXNvcnRlZFJlY3RzW2ld
ID0gcmVjdHNbaV07CisJc29ydGVkUmVjdHMuc29ydChzb3J0UmVjdHMpOworCWZvciAodmFyIGkg
PSAwOyBpIDwgcmVjdHMubGVuZ3RoOyArK2kpCisJCWxvZyhpZCArICJbIiArIGkgKyAiXTogKCIg
KyBzb3J0ZWRSZWN0c1tpXS5sZWZ0ICsgIiwgIiArIHNvcnRlZFJlY3RzW2ldLnRvcCArICIsICIg
KyBzb3J0ZWRSZWN0c1tpXS53aWR0aCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS5oZWlnaHQgKyAi
KSIpOworCWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxpc3RlbmVy
LCBmYWxzZSk7Cit9CisKK2xvZ1JlY3RzKCJub3JtYWxGbG93Iik7Citsb2dSZWN0cygiYWJzb2x1
dGVDaGlsZENvbnRhaW5lciIpOworbG9nUmVjdHMoInJlbGF0aXZlQ2hpbGRDb250YWluZXIiKTsK
K2xvZ1JlY3RzKCJvdmVyaGFuZ2luZ0NvbnRhaW5lciIpOworbG9nUmVjdHMoInRyYW5zZm9ybWVk
Q2hpbGRDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJjb250aW51YXRpb24iKTsKKwordmFyIHRlc3RD
b250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHMiKTsKK3Rlc3RDb250YWlu
ZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdHJhbnNm
b3JtZWRDaGlsZCB7CisJLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZTNkKDAuMiwgMSwgMCwgMzVn
cmFkKTsKK30KKyNhYnNvbHV0ZUNoaWxkIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJdG9wOiAz
MDBweDsKK30KKyNyZWxhdGl2ZUNoaWxkIHsKKwlwb3NpdGlvbjogcmVsYXRpdmU7CisJdG9wOiAy
MDBweDsKK30KKyNvdmVyaGFuZ2luZ0NvbnRhaW5lciB7CisJaGVpZ2h0OiAxMHB4OworfQorI292
ZXJoYW5naW5nRmxvYXRpbmdDaGlsZCB7CisJd2lkdGg6IDEwMHB4OworCWZsb2F0OiBsZWZ0Owor
fQorI3Rlc3RzIHsKKwlmb250OiAxMHB4IEFoZW07Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRoaXMgdGVzdHMgdmVyaWZpZXMgdGhlIGhpdCB0ZXN0
IHJlZ2lvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBvc2l0b3IuIEl0IGNhbiBvbmx5IGJlIHJ1biBpbiBE
dW1wUmVuZGVyVHJlZS4KK1RoZSBvdXRwdXR0ZWQgcmVjdHMgc2hvdWxkIGNvdmVyIHRoZSBoaXQg
dGVzdCByZWdpb25zIG9mIGFsbCB0aGUgbGlzdGVkIGVsZW1lbnRzLjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJ0ZXN0cyI+CisJPGRpdiBpZD0ibm9ybWFsRmxvdyI+
CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuPnN1bTwvc3Bhbj4uCisJPC9kaXY+CisJPGRpdiBpZD0i
YWJzb2x1dGVDaGlsZENvbnRhaW5lciI+CisJCUxvcmVtIGlwc3VtCisJCTxzcGFuIGlkPSJhYnNv
bHV0ZUNoaWxkIj5BYnNvbHV0ZSBjaGlsZDwvc3Bhbj4KKwk8L2Rpdj4KKwk8ZGl2IGlkPSJyZWxh
dGl2ZUNoaWxkQ29udGFpbmVyIj4KKwkJTG9yZW0gaXBzdW0KKwkJPHNwYW4gaWQ9InJlbGF0aXZl
Q2hpbGQiPlJlbGF0aXZlIGNoaWxkPC9zcGFuPgorCTwvZGl2PgorCTxkaXYgaWQ9Im92ZXJoYW5n
aW5nQ29udGFpbmVyIj4KKwkJPGRpdiBpZD0ib3ZlcmhhbmdpbmdGbG9hdGluZ0NoaWxkIj5PdmVy
aGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFuZ2luZyBmbG9hdCBvdmVyaGFu
Z2luZyBmbG9hdDwvZGl2PgorCTwvZGl2PgorCTxkaXYgaWQ9InRyYW5zZm9ybWVkQ2hpbGRDb250
YWluZXIiPgorCQk8ZGl2IGlkPSJ0cmFuc2Zvcm1lZENoaWxkIj5UcmFuc2Zvcm1lZDwvZGl2Pgor
CTwvZGl2PgorCTxkaXY+CisJCTxiIGlkPSJjb250aW51YXRpb24iPlRoaXMgYiB0YWcKKwkJPGRp
dj5jYXVzZXMgYTwvZGl2PgorCQljb250aW51YXRpb248L2I+CisJPC9kaXY+Cis8L2Rpdj4KKzxz
Y3JpcHQ+CitpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQorCXJldHVybjsKKword2luZG93LnRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsaXN0ZW5lcigpIHsgfQorCitmdW5jdGlv
biBsb2cobXNnKSB7CisJdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
CisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsK
KyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBzb3J0
UmVjdHMoYSwgYikgeworCXJldHVybiBhLnRvcCAtIGIudG9wOworfQorCitmdW5jdGlvbiBsb2dS
ZWN0cyhpZCkgeworCWVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisJZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbGlzdGVuZXIsIGZhbHNlKTsKKwly
ZWN0cyA9IHdpbmRvdy5pbnRlcm5hbHMudG91Y2hFdmVudFRhcmdldENsaWVudFJlY3RzKGRvY3Vt
ZW50KTsKKwl2YXIgc29ydGVkUmVjdHMgPSBuZXcgQXJyYXkoKTsKKwlmb3IgKHZhciBpID0gMDsg
aSA8IHJlY3RzLmxlbmd0aDsgKytpKQorCQlzb3J0ZWRSZWN0c1tpXSA9IHJlY3RzW2ldOworCXNv
cnRlZFJlY3RzLnNvcnQoc29ydFJlY3RzKTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxl
bmd0aDsgKytpKQorCQlsb2coaWQgKyAiWyIgKyBpICsgIl06ICgiICsgc29ydGVkUmVjdHNbaV0u
bGVmdCArICIsICIgKyBzb3J0ZWRSZWN0c1tpXS50b3AgKyAiLCAiICsgc29ydGVkUmVjdHNbaV0u
d2lkdGggKyAiLCAiICsgc29ydGVkUmVjdHNbaV0uaGVpZ2h0ICsgIikiKTsKKwllbGVtZW50LnJl
bW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lciwgZmFsc2UpOworfQorCits
b2dSZWN0cygibm9ybWFsRmxvdyIpOworbG9nUmVjdHMoImFic29sdXRlQ2hpbGRDb250YWluZXIi
KTsKK2xvZ1JlY3RzKCJyZWxhdGl2ZUNoaWxkQ29udGFpbmVyIik7Citsb2dSZWN0cygib3Zlcmhh
bmdpbmdDb250YWluZXIiKTsKK2xvZ1JlY3RzKCJ0cmFuc2Zvcm1lZENoaWxkQ29udGFpbmVyIik7
Citsb2dSZWN0cygiY29udGludWF0aW9uIik7CisKK3ZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RzIik7Cit0ZXN0Q29udGFpbmVyLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0
LXJlbW92ZWQtY3Jhc2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1yZW1vdmVkLWNy
YXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1yZW1vdmVkLWNyYXNoLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorVGVzdCBwYXNzZXMgaWYgbm8gY3Jh
c2guCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3Vj
aC90b3VjaC10YXJnZXQtcmVtb3ZlZC1jcmFzaC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1yZW1v
dmVkLWNyYXNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtcmVtb3ZlZC1jcmFzaC5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRlc3QgcGFzc2VzIGlmIG5vIGNyYXNoLjwvcD4KKzxz
Y3JpcHQ+CitpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQorCXJldHVybjsKKword2luZG93LnRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBjcmFzaCgpIHsKKwl2YXIgZGl2ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisJZGl2Lm9udG91Y2hzdGFydCA9IGZ1bmN0aW9u
KCkgeyB9OworCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoZG9jdW1lbnQpOworICAgIGRpdi5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGRpdik7CisgICAgZGl2ID0gMDsKKyAgICBpZiAod2luZG93LkdDQ29u
dHJvbGxlcikKKyAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoZG9jdW1lbnQpOworfQorCitjcmFzaCgpOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>