<?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>74147</bug_id>
          
          <creation_ts>2011-12-08 17:27:05 -0800</creation_ts>
          <short_desc>[chromium] layer-&gt;clipRect() is not initialized for layers that create a renderSurface</short_desc>
          <delta_ts>2012-03-28 13:42:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>80806</dependson>
          <blocked>80622</blocked>
    
    <blocked>81227</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>517967</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-08 17:27:05 -0800</bug_when>
    <thetext>In calculateDrawTransformsAndVisibility, the clipRect is assumed to be in the space of the target render surface.  However, the clipRect is not being transformed when it propagates to the descendant target surface.

It is possible this is the root cause of some of our reasonable assumptions being violated, for example https://bugs.webkit.org/show_bug.cgi?id=74037

The first thing to do is demonstrate a reduced test case that proves this is actually a problem.
If so, then we can resume with our original assumptions after fixing this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519099</commentid>
    <comment_count>1</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-12 03:22:04 -0800</bug_when>
    <thetext>Changed the bug title to reflect the problem, now that the problem is figured out exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571119</commentid>
    <comment_count>2</comment_count>
      <attachid>130217</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-05 15:53:28 -0800</bug_when>
    <thetext>Created attachment 130217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571120</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-05 15:54:27 -0800</bug_when>
    <thetext>The patch just uploaded does the following:

(1a) Properly initializes layer-&gt;clipRect() when the layer has a renderSurface.

(1b) Moves the masksToBounds code so that it applies to all layers, rather than just layers without renderSurfaces.

(2) Renames &quot;layerOriginTransform&quot; to &quot;surfaceOriginTransform&quot;, though both are technically correct, the comment added for (1a) makes more sense when transforming between renderSurfaces.

(3) Extends a unit test to cover this change.

As per Enne&apos;s preference, this patch does not remove our fix for https://bugs.webkit.org/show_bug.cgi?id=74037 (refer to comment #11).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571934</commentid>
    <comment_count>4</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-06 09:57:21 -0800</bug_when>
    <thetext>Enne, when you have a chance, could you please review this?  Thanks in advance!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573122</commentid>
    <comment_count>5</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-07 12:36:17 -0800</bug_when>
    <thetext>Wait, doesn&apos;t http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp#L445 set the clip rect for all non-root render surface-creating layers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573138</commentid>
    <comment_count>6</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-07 12:47:55 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Wait, doesn&apos;t http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp#L445 set the clip rect for all non-root render surface-creating layers?

No it doesnt - this sets the clipRect after recursion bubbles back up.  By that time, things were already incorrectly added to layerLists when the clipRect was still un-initialized.   So that&apos;s why I put a fixme and a bug url on this patch, related to that exact line of code.

The actual bug being fixed here is that clipRect is un-initialized before/during recursion, for layers that own a renderSurface.


If it helps, here&apos;s a reminder of the entire situation:
1. Uninitialized clipRect caused the crasher bug https://bugs.webkit.org/show_bug.cgi?id=74037
2. At that time, we opted for the safer quick fix, post-removing surfaces that we knew shouldn&apos;t exist.
3. But really, the correct fix is to initialize clipRect correctly, so they are not added in the first place.  That&apos;s what this patch does.
4. We opted to keep the &quot;safe fix&quot; anyway. I adjusted it so that the assert triggers for us, but for user-facing code, the safe fix remains there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573140</commentid>
    <comment_count>7</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-07 12:50:49 -0800</bug_when>
    <thetext>btw, it may help to refer to comments #10 and #11 on that old crasher bug https://bugs.webkit.org/show_bug.cgi?id=74037   =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573201</commentid>
    <comment_count>8</comment_count>
      <attachid>130217</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-07 13:46:51 -0800</bug_when>
    <thetext>Comment on attachment 130217
Patch

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

Ah, thanks for the context.  :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:324
&gt; +        TransformationMatrix inverseOriginTransform = surfaceOriginTransform.inverse();
&gt; +        layer-&gt;setClipRect(enclosingIntRect(inverseOriginTransform.mapRect(FloatRect(renderSurface-&gt;clipRect()))));

How does setUsesLayerClipping interact here? You set the clip rect in this patch, but don&apos;t call setUsesLayerClipping.  Previously, the layer wasn&apos;t setting its own clip rect until later, but did call setUsesLayerClipping(false) on line 271.  It seems like ew check this value prior to using clipRect everywhere in this function, so I&apos;m curious where clipRect is getting misused without a check to whether a layer uses layer clipping or not?

Forgive my skepticism, but I do not think this code will work in all cases.  If the matrix does not have an inverse, then the clip rect will be empty.  It&apos;s also possible that due to floating point or enclosingIntRect issues, we could have a child layer that doesn&apos;t get clipped on the way down, but does get clipped on the way back up when we recalculate the clip rect, causing the same issue, just in fewer cases.

I think I&apos;d prefer a simpler solution: leave the while loop as-is, skip an unnecessary matrix inverse, and only set the clip rect when we know what its value will be.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:456
&gt; +        // FIXME: this initialization of clipRect is redundant, and should be
&gt; +        //        double-checked while cleaning up drawableContentRect logic.
&gt; +        //        https://bugs.webkit.org/show_bug.cgi?id=80331
&gt;          layer-&gt;setClipRect(layer-&gt;drawableContentRect());

This is only redundant if the layer masks to bounds.  If not, this is a more accurate clip rect, since it will be exactly the size of the render surface, and not just the inverse projection of some potentially more loose parent clip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573898</commentid>
    <comment_count>9</comment_count>
      <attachid>130217</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-08 10:05:16 -0800</bug_when>
    <thetext>Comment on attachment 130217
Patch

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

Replying to some offline discussion from Shawn.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:324
&gt;&gt; +        layer-&gt;setClipRect(enclosingIntRect(inverseOriginTransform.mapRect(FloatRect(renderSurface-&gt;clipRect()))));
&gt; 
&gt; How does setUsesLayerClipping interact here? You set the clip rect in this patch, but don&apos;t call setUsesLayerClipping.  Previously, the layer wasn&apos;t setting its own clip rect until later, but did call setUsesLayerClipping(false) on line 271.  It seems like ew check this value prior to using clipRect everywhere in this function, so I&apos;m curious where clipRect is getting misused without a check to whether a layer uses layer clipping or not?
&gt; 
&gt; Forgive my skepticism, but I do not think this code will work in all cases.  If the matrix does not have an inverse, then the clip rect will be empty.  It&apos;s also possible that due to floating point or enclosingIntRect issues, we could have a child layer that doesn&apos;t get clipped on the way down, but does get clipped on the way back up when we recalculate the clip rect, causing the same issue, just in fewer cases.
&gt; 
&gt; I think I&apos;d prefer a simpler solution: leave the while loop as-is, skip an unnecessary matrix inverse, and only set the clip rect when we know what its value will be.

Ok.  I looked at this more, and by setting this here, this will end up making a more accurate content rect on the layer for a surface, which will end up resulting in a tighter visible content rect for a surface, because drawable content rects for child layers will be smaller or empty because they&apos;ll inherit this clip.  I still think this shouldn&apos;t be necessary for correctness, but maybe this will end up having a performance benefit by making clipped surfaces smaller.

It also looks like we we make a lot of assumptions elsewhere about transforms being invertible (see: RenderLayer::paintLayer, LayerRendererChromium::drawTileQuad, CCLayerTreeHostCommon::calculateVisibleRect), where we just don&apos;t draw anything if the transform doesn&apos;t have an inverse.  If the transform has no inverse, then the clip rect will end up empty, and that&apos;s fine.  So, maybe that&apos;s ok.

Although, if now every layer has a clip rect, then maybe we don&apos;t need this usesLayerClipping flag anymore...

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:456
&gt;&gt;          layer-&gt;setClipRect(layer-&gt;drawableContentRect());
&gt; 
&gt; This is only redundant if the layer masks to bounds.  If not, this is a more accurate clip rect, since it will be exactly the size of the render surface, and not just the inverse projection of some potentially more loose parent clip.

On second thought, maybe this should be the intersection of the drawable content rect and the previously calculated clip rect?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:574
&gt; +    // Case 2: Contaminate the grandChild and greatGrandChild&apos;s clipRect to reproduce the

Can you put separate tests in separate TEST blocks? When things fail, it makes it a lot more clear where the problem from the logs is if they&apos;re broken up.

Can you also write a test case that more thoroughly tests that the new clip rect you&apos;ve calculated is correct, more than just verifying that the assert no longer fires?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573967</commentid>
    <comment_count>10</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-08 11:07:52 -0800</bug_when>
    <thetext>Thanks for the additional feedback!

(In reply to comment #9)
&gt; 
&gt; Ok.  I looked at this more, and by setting this here, this will end up making a more accurate content rect on the layer for a surface, which will end up resulting in a tighter visible content rect for a surface, because drawable content rects for child layers will be smaller or empty because they&apos;ll inherit this clip.  I still think this shouldn&apos;t be necessary for correctness, but maybe this will end up having a performance benefit by making clipped surfaces smaller.
&gt; 

Small bikeshed: I insist it is a correctness issue; even though the end-to-end rendering results might remain correct. The code is adding renderSurfaces to the renderSurfaceLayerList that should not be there, which is contrary to the semantics we intend for calcDrawTransforms.

&gt; 
&gt; Although, if now every layer has a clip rect, then maybe we don&apos;t need this usesLayerClipping flag anymore...
&gt; 

If we do that we have to be very careful about the use of clipRect.isEmpty(), which is currently being used to detect clipping in at least one other place (the culling code).  So we should do this in a separate bug.
For now, we do need to properly inherit usesLayerClipping - without this, my first patch here is wrong.

&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:574
&gt; &gt; +    // Case 2: Contaminate the grandChild and greatGrandChild&apos;s clipRect to reproduce the
&gt; 
&gt; Can you put separate tests in separate TEST blocks? When things fail, it makes it a lot more clear where the problem from the logs is if they&apos;re broken up.
&gt; 
&gt; Can you also write a test case that more thoroughly tests that the new clip rect you&apos;ve calculated is correct, more than just verifying that the assert no longer fires?

OK, I&apos;ll separate the tests =)

Can you please elaborate what more needs to be tested?  The test case that I added in this patch does not trigger any assertion, it really shows that surfaces still get incorrectly added to the renderSurfaceLayerList despite our earlier fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574027</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-08 11:51:03 -0800</bug_when>
    <thetext>(In reply to comment #10)

&gt; Small bikeshed: I insist it is a correctness issue; even though the end-to-end rendering results might remain correct. The code is adding renderSurfaces to the renderSurfaceLayerList that should not be there, which is contrary to the semantics we intend for calcDrawTransforms.

What is correctness other than end-to-end rendering results? ;)

I don&apos;t find it terrible to add surfaces to a list that we remove later once we have more information.  We still have to process all those child layers, so it&apos;s not like we save any recursion.  It&apos;s just an intermediate state that nothing else but this function sees.

Besides, with your patch, we&apos;re *still* adding layers to the list that ultimately don&apos;t end up needing to be there--the only difference is that they get removed one at a time instead of as a group.

/me paints the bikeshed a nice periwinkle color.

&gt; Can you please elaborate what more needs to be tested?  The test case that I added in this patch does not trigger any assertion, it really shows that surfaces still get incorrectly added to the renderSurfaceLayerList despite our earlier fix.

Your test is loose--your code adds a new clip rect calculation, but that clip rect could be incorrect and the test could still pass.  I want to better check that the clip rect is being set to the right value.

I&apos;ll suggest the following tests:

(1) Have a transformed layer that creates a surface but doesn&apos;t mask to bounds.  Make sure that the clip rect that it ends up with is correct by testing its value explicitly.

(2) Same, but with a layer that does mask to bounds.

(3) Compare a transformed layer that creates a surface and is partially clipped to an otherwise identical layer that doesn&apos;t create a surface.  Verify that their clip rects are identical.  You could do this with a filter to force the creation of a surface or something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574049</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-08 12:02:39 -0800</bug_when>
    <thetext>&gt; &gt; Can you please elaborate what more needs to be tested?  The test case that I added in this patch does not trigger any assertion, it really shows that surfaces still get incorrectly added to the renderSurfaceLayerList despite our earlier fix.
&gt; 
&gt; Your test is loose--your code adds a new clip rect calculation, but that clip rect could be incorrect and the test could still pass.  I want to better check that the clip rect is being set to the right value.
&gt; 

Very good point, I should have seen that =)  I&apos;ll come back with a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575913</commentid>
    <comment_count>13</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-11 20:48:55 -0700</bug_when>
    <thetext>I have had the patch ready to submit, but its failing one test case, and I believe it is related to the problem of trying to un-project onto a surface that is behind the projection camera.

So, unfortunately, this has to be blocked until that issue is solved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579204</commentid>
    <comment_count>14</comment_count>
      <attachid>130217</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-03-15 01:51:43 -0700</bug_when>
    <thetext>Comment on attachment 130217
Patch

Clearing r? to shorten the pending review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588418</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-26 18:19:35 -0700</bug_when>
    <thetext>Is the failing test compositing/reflections/nested-reflection-on-overflow.html? 

That&apos;s what fails for me with this CL. But with 2 minor adjustments it passes.

1) Use projectRect instead of mapRect like we discussed
2) Intersect with the layer&apos;s original clipRect instead of throwing it away.


However, then one of my occlusion tracker unit tests crashes, but that&apos;s probably my fault. Looking into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588471</commentid>
    <comment_count>16</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-26 19:05:06 -0700</bug_when>
    <thetext>Argh, so intersecting with the layer&apos;s original clipRect is actually just setting the layer clipRect to IntRect(). It&apos;s not the answer but maybe it&apos;ll help you debug..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588493</commentid>
    <comment_count>17</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-26 19:40:48 -0700</bug_when>
    <thetext>Wait(In reply to comment #13)
&gt; I have had the patch ready to submit, but its failing one test case, and I 

Wait if the test case is compositing/reflections/nested-reflection-on-overflow.html then I think we are now passing the test. The &quot;expected&quot; image for chromium has no text, but the mac expectation does have text. I think your CL as posted (with s/mapRect/projectQuad/) does what we want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588535</commentid>
    <comment_count>18</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-26 20:52:11 -0700</bug_when>
    <thetext>*** Bug 82270 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588556</commentid>
    <comment_count>19</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-26 21:58:43 -0700</bug_when>
    <thetext>We should push this for landing because of http://code.google.com/p/chromium/issues/detail?id=119121 (see comment #14)

I have addressed Enne&apos;s comments, and for now I added an if-statement (with a FIXME and bug url) that does not try to use the inverse transform if there is a perspective transform.  In that case it uses the entire layer as the clipRect.

Patch is coming in a moment.  =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588563</commentid>
    <comment_count>20</comment_count>
      <attachid>133974</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-26 22:12:48 -0700</bug_when>
    <thetext>Created attachment 133974
Patch

passes unit tests and layout tests on mac with no obvious regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588565</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-26 22:16:26 -0700</bug_when>
    <thetext>Attachment 133974 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
LayoutTests/platform/chromium/test_expectations.txt:4367:  Path does not exist. fast/eventsource/eventsource-url-attribute.html  [test/expectations] [5]
Total errors found: 1 in 7 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>589109</commentid>
    <comment_count>22</comment_count>
      <attachid>133974</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-27 11:57:20 -0700</bug_when>
    <thetext>Comment on attachment 133974
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:398
&gt; +            layer-&gt;setClipRect(transformedLayerRect);

This rect is in the surface&apos;s space but it should be in the target space? transformedLayerRect is a bit misleading here! It is the rect after drawTransform when the layer doesn&apos;t own a transform. Should we apply surfaceOriginTransform to the transformedLayerRect when a layer owns a surface? This is impacting the code below also.. or argue for why it&apos;s correct as is?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:434
&gt; +        IntRect clipRect = transformedLayerRect;

This is just the bounds of the rendersurface when the layer owns a surface, is that right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589116</commentid>
    <comment_count>23</comment_count>
      <attachid>133974</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-27 12:03:18 -0700</bug_when>
    <thetext>Comment on attachment 133974
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:398
&gt;&gt; +            layer-&gt;setClipRect(transformedLayerRect);
&gt; 
&gt; This rect is in the surface&apos;s space but it should be in the target space? transformedLayerRect is a bit misleading here! It is the rect after drawTransform when the layer doesn&apos;t own a transform. Should we apply surfaceOriginTransform to the transformedLayerRect when a layer owns a surface? This is impacting the code below also.. or argue for why it&apos;s correct as is?

Ah ok, sorry for the confusion and smoke. I see what this is meaning to do. But it is assuming that the surface bounds are the same as the layer bounds which isn&apos;t really right. Maybe this is better than having it set to IntRect(0, 0, 0, 0), but this doesn&apos;t fix the origin of the clipRect when perspective is in play? Is this just not something we can do atm?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:434
&gt;&gt; +        IntRect clipRect = transformedLayerRect;
&gt; 
&gt; This is just the bounds of the rendersurface when the layer owns a surface, is that right?

Take this comment back, it lgtm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589136</commentid>
    <comment_count>24</comment_count>
      <attachid>134115</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-27 12:23:56 -0700</bug_when>
    <thetext>Created attachment 134115
Same patch updated to tip of tree

I think the style issue is a false alarm. Updated to tip of tree; also retested, still no obvious regressions.  Fun fact - this bug number is a palindrome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589141</commentid>
    <comment_count>25</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-27 12:30:50 -0700</bug_when>
    <thetext>Thanks for looking at this.  =)

(In reply to comment #23)
&gt; (From update of attachment 133974 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133974&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:398
&gt; &gt;&gt; +            layer-&gt;setClipRect(transformedLayerRect);
&gt; &gt; 
&gt; &gt; This rect is in the surface&apos;s space but it should be in the target space? transformedLayerRect is a bit misleading here! It is the rect after drawTransform when the layer doesn&apos;t own a transform. Should we apply surfaceOriginTransform to the transformedLayerRect when a layer owns a surface? This is impacting the code below also.. or argue for why it&apos;s correct as is?
&gt; 
&gt; Ah ok, sorry for the confusion and smoke. I see what this is meaning to do. But it is assuming that the surface bounds are the same as the layer bounds which isn&apos;t really right. Maybe this is better than having it set to IntRect(0, 0, 0, 0), but this doesn&apos;t fix the origin of the clipRect when perspective is in play? Is this just not something we can do atm?

The clipRect of both the layer and surface get further adjusted below.  I&apos;m pretty sure, however, that the origin of the surface and origin of the layer that owns that surface will always be the same point, so setting the clipRect this way should be fully correct even though its not &quot;optimal&quot;.

&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:434
&gt; &gt;&gt; +        IntRect clipRect = transformedLayerRect;
&gt; &gt; 
&gt; &gt; This is just the bounds of the rendersurface when the layer owns a surface, is that right?
&gt; 
&gt; Take this comment back, it lgtm.

But your comments do point to the fact that &quot;transformedLayerRect&quot; should probably be re-named to &quot;layerRectInTargetSpace&quot; or something like that.  Let me know if you would like me to do that on this patch =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589143</commentid>
    <comment_count>26</comment_count>
      <attachid>133974</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-27 12:33:06 -0700</bug_when>
    <thetext>Comment on attachment 133974
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:398
&gt;&gt;&gt;&gt; +            layer-&gt;setClipRect(transformedLayerRect);
&gt;&gt;&gt; 
&gt;&gt;&gt; This rect is in the surface&apos;s space but it should be in the target space? transformedLayerRect is a bit misleading here! It is the rect after drawTransform when the layer doesn&apos;t own a transform. Should we apply surfaceOriginTransform to the transformedLayerRect when a layer owns a surface? This is impacting the code below also.. or argue for why it&apos;s correct as is?
&gt;&gt; 
&gt;&gt; Ah ok, sorry for the confusion and smoke. I see what this is meaning to do. But it is assuming that the surface bounds are the same as the layer bounds which isn&apos;t really right. Maybe this is better than having it set to IntRect(0, 0, 0, 0), but this doesn&apos;t fix the origin of the clipRect when perspective is in play? Is this just not something we can do atm?
&gt; 
&gt; The clipRect of both the layer and surface get further adjusted below.  I&apos;m pretty sure, however, that the origin of the surface and origin of the layer that owns that surface will always be the same point, so setting the clipRect this way should be fully correct even though its not &quot;optimal&quot;.

It&apos;s actually not in compositing/reflections/nested-reflection-on-overflow.html. The origin is negative in both axes.

But perhaps adding a width/height here is strictly better than not having one at all?

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:434
&gt;&gt;&gt;&gt; +        IntRect clipRect = transformedLayerRect;
&gt;&gt;&gt; 
&gt;&gt;&gt; This is just the bounds of the rendersurface when the layer owns a surface, is that right?
&gt;&gt; 
&gt;&gt; Take this comment back, it lgtm.
&gt; 
&gt; But your comments do point to the fact that &quot;transformedLayerRect&quot; should probably be re-named to &quot;layerRectInTargetSpace&quot; or something like that.  Let me know if you would like me to do that on this patch =)

i&apos;d say followup :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589161</commentid>
    <comment_count>27</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-27 12:41:45 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=133974&amp;action=review

Sorry for all the comments, but changing calcDrawEtc and transforms always seems to create a lot of bugs.  I need to feel more convinced that these changes are correct.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:398
&gt; +        if (surfaceOriginTransform.hasPerspective())
&gt; +            layer-&gt;setClipRect(transformedLayerRect);

This doesn&apos;t seem correct to me.  If the parent uses layer clipping, then transformedLayerRect could be more restrictive than the projection of the clip rect onto this surface.  This could cause children of this layer to inherit this clip rect and possibly clip more than they otherwise would, since this is essentially saying &quot;this layer masks to bounds&quot;.  It seems better to set usesLayerClipping to false here and (optionally) initialize the clip rect to empty.

I&apos;d feel better with a test that involved a surface with a perspective transform.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:407
&gt; +        //
&gt; +        // FIXME: it is possible the usesLayerClipping logic can eventually be removed
&gt; +        //        entirely: https://bugs.webkit.org/show_bug.cgi?id=80622

(Maybe this is just personal bias, but I think you&apos;ve gone overboard with FIXMEs in this patch.  I think a FIXME is more for &quot;this code doesn&apos;t handle some particular case&quot; either for performance or for correctness, and not just &quot;I&apos;d like to make this better in the future.&quot;)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:543
&gt; +        // FIXME: the final clipRect could probably be more optimal as the intersection of
&gt; +        //        the existing clipRect and drawableContentRect. https://bugs.webkit.org/show_bug.cgi?id=80331
&gt;          layer-&gt;setClipRect(layer-&gt;drawableContentRect());

Can you just do that here? That seems like a one line change.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:-561
&gt; +            // In theory it should be a valid assumption that the current layer is the
&gt; +            // last one on the list, and the while-loop should be unnecessary. However,
&gt; +            // in https://bugs.webkit.org/show_bug.cgi?id=74037 we opted to keep the
&gt; +            // while-loop to avoid user-facing bugs, while the ASSERT will still trigger
&gt; +            // in debug mode.
&gt; +            ASSERT(renderSurfaceLayerList.last() == layer);
&gt;              while (renderSurfaceLayerList.last() != layer) {
&gt;                  renderSurfaceLayerList.last()-&gt;clearRenderSurface();
&gt;                  renderSurfaceLayerList.removeLast();
&gt;              }
&gt; -            ASSERT(renderSurfaceLayerList.last() == layer);

I think this assert is wrong, given that perspective transforms are being ignored on surfaces with respect to clip rects? Couldn&apos;t some particular combination of transforms still trigger this?

I continue to feel similarly to what I said in https://bugs.webkit.org/show_bug.cgi?id=74037#c11.  I think just removing the last layer was always too clever of a solution and looping through all the layers is not problematic.  I&apos;d prefer to remove both the assert and giant comment.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:929
&gt; +    IntRect clipRect1 = grandChild1-&gt;clipRect();
&gt; +    IntRect clipRect2 = grandChild2-&gt;clipRect();
&gt; +    IntRect clipRect3 = grandChild3-&gt;clipRect();
&gt; +    IntRect clipRect4 = grandChild4-&gt;clipRect();

Is there a need for all these intermediate variables?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:1017
&gt; +    // because grandChild4 is entirely clipped, it is not expected to have a renderSurface.

EXPECT_FALSE?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589246</commentid>
    <comment_count>28</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-27 14:02:14 -0700</bug_when>
    <thetext>Thanks for all the comments.  Here&apos;s my rebuttal =)

(1) Talked with Dana offline.  The comment about negative origin was a misunderstanding and does not apply here.  Her comment about changing from empty clipRect to full clipRect was actually a concern because some code might be using if (clipRect().isEmpty()) in the code, and those would then become wrong.   I agree with that, and I think that only happens in one place in the code, and I&apos;ll submit a new patch to fix that.

(2) my response to Enne&apos;s comments are inlined below.

(In reply to comment #27)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133974&amp;action=review
&gt; 
&gt; Sorry for all the comments, but changing calcDrawEtc and transforms always seems to create a lot of bugs.  I need to feel more convinced that these changes are correct.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:398
&gt; &gt; +        if (surfaceOriginTransform.hasPerspective())
&gt; &gt; +            layer-&gt;setClipRect(transformedLayerRect);
&gt; 
&gt; This doesn&apos;t seem correct to me.  If the parent uses layer clipping, then transformedLayerRect could be more restrictive than the projection of the clip rect onto this surface.  This could cause children of this layer to inherit this clip rect and possibly clip more than they otherwise would, since this is essentially saying &quot;this layer masks to bounds&quot;.  It seems better to set usesLayerClipping to false here and (optionally) initialize the clip rect to empty.

Yeah I agree.  Good catch about usesLayerclipping().

For now I can set the clipRect to empty, too, just to hold us over.  If that&apos;s true, then there is one other piece of logic to fix; where masksToBounds is true, we should not intersect the parent&apos;s clipRect unless usesLayerClipping is true.  I&apos;ll go ahead and make that change, too.

&gt; 
&gt; I&apos;d feel better with a test that involved a surface with a perspective transform.
&gt; 

OK, I&apos;ll do that.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:407
&gt; &gt; +        //
&gt; &gt; +        // FIXME: it is possible the usesLayerClipping logic can eventually be removed
&gt; &gt; +        //        entirely: https://bugs.webkit.org/show_bug.cgi?id=80622
&gt; 
&gt; (Maybe this is just personal bias, but I think you&apos;ve gone overboard with FIXMEs in this patch.  I think a FIXME is more for &quot;this code doesn&apos;t handle some particular case&quot; either for performance or for correctness, and not just &quot;I&apos;d like to make this better in the future.&quot;)

I just didn&apos;t want you to think I ignored your previous feedback, even though those changes should not happen in this patch. =)


&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:543
&gt; &gt; +        // FIXME: the final clipRect could probably be more optimal as the intersection of
&gt; &gt; +        //        the existing clipRect and drawableContentRect. https://bugs.webkit.org/show_bug.cgi?id=80331
&gt; &gt;          layer-&gt;setClipRect(layer-&gt;drawableContentRect());
&gt; 
&gt; Can you just do that here? That seems like a one line change.

I feel uncomfortable changing this in this patch.  It is technically not part of the bugfix, but it could have unintended consequences that we couldn&apos;t foresee because of the tangle between clipRect and drawableContentRect... I would prefer to do that as part of my incremental refactoring strategy.  This patch will need to be merged back to m19, and I feel this drive-by cleanup is too risky for that. 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:-561
&gt; &gt; +            // In theory it should be a valid assumption that the current layer is the
&gt; &gt; +            // last one on the list, and the while-loop should be unnecessary. However,
&gt; &gt; +            // in https://bugs.webkit.org/show_bug.cgi?id=74037 we opted to keep the
&gt; &gt; +            // while-loop to avoid user-facing bugs, while the ASSERT will still trigger
&gt; &gt; +            // in debug mode.
&gt; &gt; +            ASSERT(renderSurfaceLayerList.last() == layer);
&gt; &gt;              while (renderSurfaceLayerList.last() != layer) {
&gt; &gt;                  renderSurfaceLayerList.last()-&gt;clearRenderSurface();
&gt; &gt;                  renderSurfaceLayerList.removeLast();
&gt; &gt;              }
&gt; &gt; -            ASSERT(renderSurfaceLayerList.last() == layer);
&gt; 
&gt; I think this assert is wrong, given that perspective transforms are being ignored on surfaces with respect to clip rects? Couldn&apos;t some particular combination of transforms still trigger this?
&gt; 
&gt; I continue to feel similarly to what I said in https://bugs.webkit.org/show_bug.cgi?id=74037#c11.  I think just removing the last layer was always too clever of a solution and looping through all the layers is not problematic.  I&apos;d prefer to remove both the assert and giant comment.
&gt; 

tl;dr As a compromise I&apos;ll remove the change in this patch and leave the code unchanged for now.  This change isn&apos;t really part of the bugfix either.

Personally I dont think this code should get so cozy and comfortable here.  I would like to see it eventually removed.  It should be easily possible to remove this code by restructuring things so that surfaces are added to the renderSurfaceLayerList only after we know that they draw content.

To me, removing layers like this as a post-adjustment is a hack that adds to logic complexity and the cognitive load of doing anything in this function.  It requires us to make assumptions about how we arranged the schedule of renderSurfaces with respect to the structure of the tree, these are not reasonable assumptions (for example, when we fix layer sorting across multiple renderSurfaces that have preserves3D, this assumption might break).  At the time, we added this post-fix because we were not willing to restructure the logic in that way.  But I really think we should put a strong effort to removing this logic, and I&apos;m not aware of any significant reason that we can&apos;t accomplish that.

(As a side note, in comment 11 you mentioned that we remove layers later on, too, but I don&apos;t see where in the code do we remove more surfaces/layers from the list ?)

&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:929
&gt; &gt; +    IntRect clipRect1 = grandChild1-&gt;clipRect();
&gt; &gt; +    IntRect clipRect2 = grandChild2-&gt;clipRect();
&gt; &gt; +    IntRect clipRect3 = grandChild3-&gt;clipRect();
&gt; &gt; +    IntRect clipRect4 = grandChild4-&gt;clipRect();
&gt; 
&gt; Is there a need for all these intermediate variables?
&gt; 

probably not =) will remove them.

&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:1017
&gt; &gt; +    // because grandChild4 is entirely clipped, it is not expected to have a renderSurface.
&gt; 
&gt; EXPECT_FALSE?

OK sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589291</commentid>
    <comment_count>29</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-27 14:29:16 -0700</bug_when>
    <thetext>(In reply to comment #28)

Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:543
&gt; &gt; &gt; +        // FIXME: the final clipRect could probably be more optimal as the intersection of
&gt; &gt; &gt; +        //        the existing clipRect and drawableContentRect. https://bugs.webkit.org/show_bug.cgi?id=80331
&gt; &gt; &gt;          layer-&gt;setClipRect(layer-&gt;drawableContentRect());
&gt; &gt; 
&gt; &gt; Can you just do that here? That seems like a one line change.
&gt; 
&gt; I feel uncomfortable changing this in this patch.  It is technically not part of the bugfix, but it could have unintended consequences that we couldn&apos;t foresee because of the tangle between clipRect and drawableContentRect... I would prefer to do that as part of my incremental refactoring strategy.  This patch will need to be merged back to m19, and I feel this drive-by cleanup is too risky for that.

The smallest, least risky patch would be to just disable the clip rect for all layers that create surfaces on the way down.

My worry here is that you are setting the clip rect to one thing on the way down and then something else entirely after you&apos;ve come back up.  If there&apos;s an error in the new clip rect you are calculating, layers will get dropped--in my opinion, that&apos;s the risky part of this patch.  It seems really tricky to try to solve that sort of bug post-hoc if clip rects get a final value that is potentially more loose than the clip rect that we used when determining which layers were visible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589293</commentid>
    <comment_count>30</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-27 14:34:04 -0700</bug_when>
    <thetext>
&gt; The smallest, least risky patch would be to just disable the clip rect for all layers that create surfaces on the way down.

Yeah I was just coming across that solution as I was addressing your feedback.  Next patch should reflect that =)

&gt; 
&gt; My worry here is that you are setting the clip rect to one thing on the way down and then something else entirely after you&apos;ve come back up.  If there&apos;s an error in the new clip rect you are calculating, layers will get dropped--in my opinion, that&apos;s the risky part of this patch.  It seems really tricky to try to solve that sort of bug post-hoc if clip rects get a final value that is potentially more loose than the clip rect that we used when determining which layers were visible.


I&apos;m not changing anything about the behavior of how clipRect is set on the way back up...  And yes I agree that is questionable stuff.  https://bugs.webkit.org/show_bug.cgi?id=80331  ... sorry I didn&apos;t cc you on that earlier =)


Anyway, the next patch should be far more comfortable.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589392</commentid>
    <comment_count>31</comment_count>
      <attachid>134158</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-27 16:00:54 -0700</bug_when>
    <thetext>Created attachment 134158
Much simpler fix, addressed reviewer feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589408</commentid>
    <comment_count>32</comment_count>
      <attachid>134158</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-27 16:17:29 -0700</bug_when>
    <thetext>Comment on attachment 134158
Much simpler fix, addressed reviewer feedback

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:371
&gt;          renderSurface-&gt;setClipRect(layer-&gt;parent() ? layer-&gt;parent()-&gt;clipRect() : layer-&gt;clipRect());

Sorry for the possible backtracking, but I think that this still going to be empty for parents with usesLayerClipping() == false?

I see the test verifyClipRectIsPropagatedCorrectlyToSurfaces checks explicitly for when the parent-&gt;usesLayerClipping() == true. Should code always guard using a surface clipRect on this and otherwise use its parents entire bounds? Or can this be set for surfaces with parents without usesLayerClipping() later, when the clipRect for the owning layer is set? Wondering what your thinking is in this regard..

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:415
&gt; +    if (layer-&gt;masksToBounds()) {

random question: why is this only conditional on masksToBounds() but later we clip the drawableContentRect conditional on masksToBounds() || maskLayer()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589549</commentid>
    <comment_count>33</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-27 18:37:01 -0700</bug_when>
    <thetext>
(In reply to comment #32)
&gt; (From update of attachment 134158 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134158&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:371
&gt; &gt;          renderSurface-&gt;setClipRect(layer-&gt;parent() ? layer-&gt;parent()-&gt;clipRect() : layer-&gt;clipRect());
&gt; 
&gt; Sorry for the possible backtracking, but I think that this still going to be empty for parents with usesLayerClipping() == false?


OK... I have combed through all instances of clipRect in platform/graphics/chromium and platform/graphics/chromium/cc again, just to make everything clear:

(1) for Quads: sharedQuadState clipRect is empty by convention when it should not be used.  With this convention it looks like all the drawing code works as desired.

(2) for Layers: with this patch, there is only one place in the code that the layer&apos;s clipRect is being used without checking usesLayerClipping, and that&apos;s int the culling code.  I forgot to change that and need to submit a new patch for this bug.

before this patch, layers were accidentally using clipRect without checking usesLayerClipping; it was very subtle, but it was right under our noses in the masksToBounds condition.

(3) for surfaces: in calcDrawTransformsAndVisibility, when there is a replica, the surface clipRect is being used... if it is NOT empty.  so we&apos;re OK in that case.   in the case where the surface clipRect is used to compute the scissor, it is protected by the ancestor layer&apos;s usesLayerClipping(), which is also correct.

So yeah, that was a really good question and I&apos;m glad to have combed through everything again, but I do feel it is correct.   I also agree that this confusion is just another strong indicator that we need to clean it up, and the appropriate bugs already exist to do that soon.

&gt; 
&gt; I see the test verifyClipRectIsPropagatedCorrectlyToSurfaces checks explicitly for when the parent-&gt;usesLayerClipping() == true. Should code always guard using a surface clipRect on this and otherwise use its parents entire bounds? Or can this be set for surfaces with parents without usesLayerClipping() later, when the clipRect for the owning layer is set? Wondering what your thinking is in this regard..
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:415
&gt; &gt; +    if (layer-&gt;masksToBounds()) {
&gt; 
&gt; random question: why is this only conditional on masksToBounds() but later we clip the drawableContentRect conditional on masksToBounds() || maskLayer()?

I think its precarious (as usual) but correct:

drawableContentRect can be affected by layer-&gt;maskLayer, if we assume that everything outside the bounds of the mask are masked out anyway, then we can shrink the drawable area to just the mask.

I don&apos;t think we can do the same for clipRect, because it is inherited by other layers that may be in some completely different position outside of the layer&apos;s bounds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589571</commentid>
    <comment_count>34</comment_count>
      <attachid>134198</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-27 19:01:07 -0700</bug_when>
    <thetext>Created attachment 134198
Same patch but including the occlusion tracker fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589986</commentid>
    <comment_count>35</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-28 08:33:27 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (From update of attachment 134158 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134158&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:371
&gt; &gt; &gt;          renderSurface-&gt;setClipRect(layer-&gt;parent() ? layer-&gt;parent()-&gt;clipRect() : layer-&gt;clipRect());
&gt; &gt; 
&gt; &gt; Sorry for the possible backtracking, but I think that this still going to be empty for parents with usesLayerClipping() == false?
&gt; 
&gt; 
&gt; OK... I have combed through all instances of clipRect in platform/graphics/chromium and platform/graphics/chromium/cc again, just to make everything clear:
&gt; 
&gt; (1) for Quads: sharedQuadState clipRect is empty by convention when it should not be used.  With this convention it looks like all the drawing code works as desired.

k. So quad-&gt;clipRect() use should be guarded by checking isEmpty().

&gt; (2) for Layers: with this patch, there is only one place in the code that the layer&apos;s clipRect is being used without checking usesLayerClipping, and that&apos;s int the culling code.  I forgot to change that and need to submit a new patch for this bug.

Ok, so all layer-&gt;clipRect() use should be guarded by layer-&gt;usesLayerClipping().

&gt; before this patch, layers were accidentally using clipRect without checking usesLayerClipping; it was very subtle, but it was right under our noses in the masksToBounds condition.
&gt; 
&gt; (3) for surfaces: in calcDrawTransformsAndVisibility, when there is a replica, the surface clipRect is being used... if it is NOT empty.  so we&apos;re OK in that case.   in the case where the surface clipRect is used to compute the scissor, it is protected by the ancestor layer&apos;s usesLayerClipping(), which is also correct.

ok, so all surface-&gt;clipRect() use should be guarded by surface-&gt;owningLayer-&gt;parent-&gt;usesLayerClipping().

&gt; So yeah, that was a really good question and I&apos;m glad to have combed through everything again, but I do feel it is correct.   I also agree that this confusion is just another strong indicator that we need to clean it up, and the appropriate bugs already exist to do that soon.

Thanks for doing that. Can we stick a comment on each of the clipRect() functions stating what check must be done to guard its use?

&gt; &gt; I see the test verifyClipRectIsPropagatedCorrectlyToSurfaces checks explicitly for when the parent-&gt;usesLayerClipping() == true. Should code always guard using a surface clipRect on this and otherwise use its parents entire bounds? Or can this be set for surfaces with parents without usesLayerClipping() later, when the clipRect for the owning layer is set? Wondering what your thinking is in this regard..
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:415
&gt; &gt; &gt; +    if (layer-&gt;masksToBounds()) {
&gt; &gt; 
&gt; &gt; random question: why is this only conditional on masksToBounds() but later we clip the drawableContentRect conditional on masksToBounds() || maskLayer()?
&gt; 
&gt; I think its precarious (as usual) but correct:
&gt; 
&gt; drawableContentRect can be affected by layer-&gt;maskLayer, if we assume that everything outside the bounds of the mask are masked out anyway, then we can shrink the drawable area to just the mask.
&gt; 
&gt; I don&apos;t think we can do the same for clipRect, because it is inherited by other layers that may be in some completely different position outside of the layer&apos;s bounds.

I don&apos;t think that I understand the distinction here. AIUI the mask should affect its subtree, so being in a different position should cause them to be clipped.

http://www.webkit.org/blog/181/css-masks/ is pretty explicit: &quot;The mask will therefore overlay the child and all of its descendants, and at a minimum will knock out everything outside the border box of the object.&quot;

Also svg masks seem similar. More links:

http://developer.apple.com/library/safari/#documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Masks/Masks.html
http://www.w3.org/TR/2000/03/WD-SVG-20000303/masking.html#Masking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590152</commentid>
    <comment_count>36</comment_count>
      <attachid>134339</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-28 11:07:20 -0700</bug_when>
    <thetext>Created attachment 134339
added comments about clipRect usage

Dana and I discussed offline, it felt acceptable to put these comments in .h files, rather than instrumenting every new location where clipRect is used</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590167</commentid>
    <comment_count>37</comment_count>
      <attachid>134342</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-28 11:14:39 -0700</bug_when>
    <thetext>Created attachment 134342
added comments about clipRect usage

Dana and I discussed offline, it felt acceptable to put these comments in .h files, rather than instrumenting every new location where clipRect is used</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590173</commentid>
    <comment_count>38</comment_count>
      <attachid>134342</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-28 11:17:31 -0700</bug_when>
    <thetext>Comment on attachment 134342
added comments about clipRect usage

Thanks for the comments :) I&apos;m happy with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590194</commentid>
    <comment_count>39</comment_count>
      <attachid>134342</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-28 11:32:28 -0700</bug_when>
    <thetext>Comment on attachment 134342
added comments about clipRect usage

Can you rebaseline this patch so EWS can take a look at it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590235</commentid>
    <comment_count>40</comment_count>
      <attachid>134362</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-28 12:08:28 -0700</bug_when>
    <thetext>Created attachment 134362
updated to tip of tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590298</commentid>
    <comment_count>41</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-28 12:46:53 -0700</bug_when>
    <thetext>re-ran unit and layout tests once more, just for good measure.  still no obvious regressions =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590346</commentid>
    <comment_count>42</comment_count>
      <attachid>134362</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-28 13:27:08 -0700</bug_when>
    <thetext>Comment on attachment 134362
updated to tip of tree

Ok, sure.  Please watch this carefully on landing.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590368</commentid>
    <comment_count>43</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-28 13:42:47 -0700</bug_when>
    <thetext>Committed r112436: &lt;http://trac.webkit.org/changeset/112436&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130217</attachid>
            <date>2012-03-05 15:53:28 -0800</date>
            <delta_ts>2012-03-26 22:12:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74147-20120305155327.patch</filename>
            <type>text/plain</type>
            <size>10851</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM5NjgwYWEyYTI3ZjY2
NGIxNTAyODcwZjIwNTM5Y2ZmNGVmZTAyMC4uOWMyN2E3ZjU2YWE4NWYzOWZiMzc2YWQ4MDYwMWU4
OTA5ZDQ3NzdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTA1ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
bGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVh
dGUgYSByZW5kZXJTdXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVuaXQgdGVzdCB1cGRhdGVkIGluIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBwcm9wZXIgY2xpcFJlY3QgaW5pdGlhbGl6
YXRpb24gZm9yIGxheWVycyB0aGF0CisgICAgICAgIGNyZWF0ZSBhIHJlbmRlclN1cmZhY2UuIFRo
ZSBmYWlsaW5nIGNhc2UgdGhhdCBpcyBmaXhlZCBieSB0aGlzCisgICAgICAgIHBhdGNoIGlzIHJl
cHJvZHVjZWQgaW4gdGhlIHVuaXQgdGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisKIDIwMTIt
MDMtMDUgIEFsZXhhbmRlciBGw6Zyw7h5ICA8YWxleGFuZGVyLmZhZXJveUBub2tpYS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIHBvaW50ZXIgdG8gdGltZXIgYW5kIHVzZSB0aGUgdGltZXJzIGRpcmVj
dGx5IGluIHRoZSB0aWxlZCBiYWNraW5nIHN0b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDUyOWUyMzMxYzVhNDYxY2NmMjRmMDJmNjI4NzFkZjFiZjkyNzM5ZmEuLjc3NTkyZWMxZDFh
NDljZWYyMDViZmZlOThjZDkwNzg3NzhjOWIzNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDMtMDUgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBsYXllci0+Y2xpcFJlY3QoKSBpcyBu
b3QgaW5pdGlhbGl6ZWQgZm9yIGxheWVycyB0aGF0IGNyZWF0ZSBhIHJlbmRlclN1cmZhY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0ZW5kZWQgdGhl
IHVuaXQgdGVzdCB0aGF0IGNvdmVycyBjbGlwUmVjdCBpbml0aWFsaXphdGlvbi4KKworICAgICAg
ICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VEVTVCk6CisKIDIwMTItMDMtMDIgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBBZGQgaW5zdHJ1bWVudGF0aW9uIGZvciBmcmFtZSBzdGFydC9lbmQg
b24gdGltZWxpbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApp
bmRleCBjODZkNzRkODYxZGFmNGU2ZTMyNWQxYzUzZmQ0N2Y0OTg2NGY4NmE5Li5iZmRlOGYzM2I0
MTk0NTRjY2Y5N2YyNDA1OWY4OWMzMmQ2MzA1M2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTI4OCwxMiArMjg4LDEyIEBAIHN0YXRpYyBib29sIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5
ZXIsIExheWVyCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdPcGFjaXR5KGRyYXdPcGFj
aXR5KTsKICAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogCi0gICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gY29tYmluZWRUcmFuc2Zvcm07
Ci0gICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMu
d2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIHJlbmRlclN1cmZh
Y2UtPnNldE9yaWdpblRyYW5zZm9ybShsYXllck9yaWdpblRyYW5zZm9ybSk7CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5z
Zm9ybTsKKyAgICAgICAgc3VyZmFjZU9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICog
Ym91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOworICAgICAgICByZW5k
ZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0oc3VyZmFjZU9yaWdpblRyYW5zZm9ybSk7CiAK
ICAgICAgICAgLy8gVXBkYXRlIHRoZSBhZ2dyZWdhdGUgaGllcmFyY2h5IG1hdHJpeCB0byBpbmNs
dWRlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIG5ld2x5IGNyZWF0ZWQgUmVuZGVyU3VyZmFjZS4KLSAg
ICAgICAgbmV4dEhpZXJhcmNoeU1hdHJpeC5tdWx0aXBseShsYXllck9yaWdpblRyYW5zZm9ybSk7
CisgICAgICAgIG5leHRIaWVyYXJjaHlNYXRyaXgubXVsdGlwbHkoc3VyZmFjZU9yaWdpblRyYW5z
Zm9ybSk7CiAKICAgICAgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIGNsaXBSZWN0IGNvbnRyaWJ1
dGVzIHRvIHRoZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVkcyB0bwogICAgICAgICAvLyBiZSBhcHBs
aWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5n
CkBAIC0zMTUsNiArMzE1LDEzIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgICAgIHJl
bmRlclN1cmZhY2UtPnNldE5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyhuZWFyZXN0QW5j
ZXN0b3JUaGF0TW92ZXNQaXhlbHMpOwogCiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKGxheWVyKTsKKworICAgICAgICAvLyBUaGUgY2xpcFJlY3QgZm9yIHRoaXMgbGF5ZXIn
cyByZW5kZXJTdXJmYWNlIChjb21wdXRlZCBhYm92ZSkgaXMgZGVzY3JpYmVkIGluCisgICAgICAg
IC8vIHRoZSBhbmNlc3RvciBzdXJmYWNlJ3Mgc3BhY2UuIFRvIHNldCB0aGUgbGF5ZXIgY2xpcFJl
Y3QsIHdlIG5lZWQgdG8gY29tcHV0ZQorICAgICAgICAvLyB0aGF0IGNsaXBSZWN0IHdpdGggcmVz
cGVjdCB0byB0aGUgY3VycmVudCByZW5kZXIgc3VyZmFjZSdzIHNwYWNlLCB3aGljaAorICAgICAg
ICAvLyByZXF1aXJlcyB0aGUgaW52ZXJzZSBzdXJmYWNlT3JpZ2luVHJhbnNmb3JtLgorICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlT3JpZ2luVHJhbnNmb3JtID0gc3VyZmFjZU9y
aWdpblRyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChlbmNs
b3NpbmdJbnRSZWN0KGludmVyc2VPcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QocmVu
ZGVyU3VyZmFjZS0+Y2xpcFJlY3QoKSkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbGF5ZXIt
PnNldERyYXdUcmFuc2Zvcm0oY29tYmluZWRUcmFuc2Zvcm0pOwogICAgICAgICB0cmFuc2Zvcm1l
ZExheWVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBS
ZWN0KGxheWVyUmVjdCkpOwpAQCAtMzMzLDEzICszNDAsMTMgQEAgc3RhdGljIGJvb2wgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwg
TGF5ZXIKICAgICAgICAgICAgIC8vIExheWVycyB3aXRob3V0IHRoZWlyIG93biByZW5kZXJTdXJm
YWNlIHdpbGwgcmVuZGVyIGludG8gdGhlIG5lYXJlc3QgYW5jZXN0b3Igc3VyZmFjZS4KICAgICAg
ICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobGF5
ZXItPm1hc2tzVG9Cb3VuZHMoKSkgewotICAgICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IHRy
YW5zZm9ybWVkTGF5ZXJSZWN0OwotICAgICAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGxheWVy
LT5jbGlwUmVjdCgpKTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7
Ci0gICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyQ2xpcHBpbmcodHJ1ZSk7Ci0gICAgICAg
IH0KKyAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgeworICAgICAgICBJbnRSZWN0IGNs
aXBSZWN0ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgICAgIGNsaXBSZWN0LmludGVyc2Vj
dChsYXllci0+Y2xpcFJlY3QoKSk7CisgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChjbGlwUmVj
dCk7CisgICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKTsKICAgICB9CiAK
ICAgICAvLyBOb3RlIHRoYXQgYXQgdGhpcyBwb2ludCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSBp
cyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgbG9jYWwgdmFyaWFibGUgZHJhd1RyYW5zZm9y
bS4KQEAgLTQ0Miw2ICs0NDksMTAgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKIAogICAgICAg
ICAvLyBTaW5jZSB0aGUgbGF5ZXIgc3RhcnRzIGEgbmV3IHJlbmRlciBzdXJmYWNlIHdlIG5lZWQg
dG8gYWRqdXN0IGl0cwogICAgICAgICAvLyBjbGlwUmVjdCB0byBiZSBleHByZXNzZWQgaW4gdGhl
IG5ldyBzdXJmYWNlJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCisKKyAgICAgICAgLy8gRklYTUU6IHRo
aXMgaW5pdGlhbGl6YXRpb24gb2YgY2xpcFJlY3QgaXMgcmVkdW5kYW50LCBhbmQgc2hvdWxkIGJl
CisgICAgICAgIC8vICAgICAgICBkb3VibGUtY2hlY2tlZCB3aGlsZSBjbGVhbmluZyB1cCBkcmF3
YWJsZUNvbnRlbnRSZWN0IGxvZ2ljLgorICAgICAgICAvLyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMzMxCiAgICAgICAgIGxheWVyLT5zZXRDbGlwUmVj
dChsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKIAogICAgICAgICAvLyBBZGp1c3QgdGhl
IG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtIHRvIGJlIHRoZSBjZW50ZXIgb2YgdGhlIHJlbmRlciBz
dXJmYWNlLgpAQCAtNDYxLDE2ICs0NzIsMTYgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKIAog
ICAgICAgICAvLyBJZiBhIHJlbmRlciBzdXJmYWNlIGhhcyBubyBsYXllciBsaXN0LCB0aGVuIGl0
IGFuZCBub25lIG9mIGl0cyBjaGlsZHJlbiBuZWVkZWQgdG8gZ2V0IGRyYXduLgogICAgICAgICBp
ZiAoIWxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IE9yaWdpbmFsbHkgd2UgYXNzZXJ0ZWQgdGhhdCB0aGlzIGxheWVyIHdh
cyBhbHJlYWR5IGF0IHRoZSBlbmQgb2YgdGhlCi0gICAgICAgICAgICAvLyAgICAgICAgbGlzdCwg
YW5kIG9ubHkgbmVlZGVkIHRvIHJlbW92ZSB0aGF0IGxheWVyLiBGb3Igbm93LCB3ZSByZW1vdmUg
dGhlCi0gICAgICAgICAgICAvLyAgICAgICAgZW50aXJlIHN1YnRyZWUgb2Ygc3VyZmFjZXMgdG8g
Zml4IGEgY3Jhc2ggYnVnLiBUaGUgcm9vdCBjYXVzZSBpcwotICAgICAgICAgICAgLy8gICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE0NyBhbmQgd2Ugc2hv
dWxkIGJlIGFibGUKLSAgICAgICAgICAgIC8vICAgICAgICB0byBwdXQgdGhlIG9yaWdpbmFsIGFz
c2VydCBhZnRlciBmaXhpbmcgdGhhdC4KKyAgICAgICAgICAgIC8vIEluIHRoZW9yeSBpdCBzaG91
bGQgYmUgYSB2YWxpZCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdGhlCisg
ICAgICAgICAgICAvLyBsYXN0IG9uZSBvbiB0aGUgbGlzdCwgYW5kIHRoZSB3aGlsZS1sb29wIHNo
b3VsZCBiZSB1bm5lY2Vzc2FyeS4gSG93ZXZlciwKKyAgICAgICAgICAgIC8vIGluIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDAzNyB3ZSBvcHRlZCB0byBrZWVwIHRo
ZQorICAgICAgICAgICAgLy8gd2hpbGUtbG9vcCB0byBhdm9pZCB1c2VyLWZhY2luZyBidWdzLCB3
aGlsZSB0aGUgQVNTRVJUIHdpbGwgc3RpbGwgdHJpZ2dlcgorICAgICAgICAgICAgLy8gaW4gZGVi
dWcgbW9kZS4KKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Lmxhc3Qo
KSA9PSBsYXllcik7CiAgICAgICAgICAgICB3aGlsZSAocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5s
YXN0KCkgIT0gbGF5ZXIpIHsKICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
Lmxhc3QoKS0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgICAgICAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBB
U1NFUlQocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5sYXN0KCkgPT0gbGF5ZXIpOwogICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBsYXll
ci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcAppbmRleCBlNjIwNmNjNThmOTAzM2I1ZmZjYWE2OWVlYjRkMjkwZjM1MWVk
M2YzLi4xOWIwNjM3YWE2ZDMwNzJmMWQ3NTE2OWQ1MDA3NzRmYTAwYTk0ZWU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAKQEAgLTU1NCwyNSArNTU0LDM4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogICAgIGdyYW5kQ2hp
bGQtPnNldE9wYWNpdHkoMC41KTsKICAgICBncmVhdEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40
KTsKIAotICAgIC8vIENvbnRhbWluYXRlIHRoZSBncmFuZENoaWxkIGFuZCBncmVhdEdyYW5kQ2hp
bGQncyBjbGlwUmVjdCB0byByZXByb2R1Y2UgdGhlIGNyYXNoCi0gICAgLy8gYnVnIGZvdW5kIGlu
IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNjcz
NC4gSW4gdGhpcwotICAgIC8vIGJ1ZywgdGhlIGNsaXBSZWN0IHdhcyBub3QgcmUtY29tcHV0ZWQg
Zm9yIGxheWVycyB0aGF0IGNyZWF0ZSBSZW5kZXJTdXJmYWNlcywgYW5kCi0gICAgLy8gdGhlcmVm
b3JlIGxlYWZOb2RlMiB0aGlua3MgaXQgc2hvdWxkIGRyYXcgaXRzZWxmLiBBcyBhIHJlc3VsdCwg
YW4gZXh0cmEKLSAgICAvLyByZW5kZXJTdXJmYWNlIHJlbWFpbnMgb24gdGhlIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHdoaWNoIHZpb2xhdGVzIHRoZSBhc3N1bXB0aW9uCi0gICAgLy8gdGhhdCBh
biBlbXB0eSByZW5kZXJTdXJmYWNlIHdpbGwgYWx3YXlzIGJlIHRoZSBsYXN0IGl0ZW0gb24gdGhl
IGxpc3QsIHdoaWNoCi0gICAgLy8gdWx0aW1hdGVseSBjYXVzZWQgdGhlIGNyYXNoLgotICAgIC8v
Ci0gICAgLy8gRklYTUU6IGl0IGlzIGFsc28gdXNlZnVsIHRvIHRlc3Qgd2l0aCB0aGlzIGNvbW1l
bnRlZCBvdXQuIEV2ZW50dWFsbHkgd2Ugc2hvdWxkCi0gICAgLy8gY3JlYXRlIHNldmVyYWwgdGVz
dCBjYXNlcyB0aGF0IHRlc3QgY2xpcFJlY3QvZHJhd2FibGVDb250ZW50UmVjdCBjb21wdXRhdGlv
bi4KLSAgICBjaGlsZC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRT
aXplKDIwLCAyMCkpKTsKLSAgICBncmVhdEdyYW5kQ2hpbGQtPnNldENsaXBSZWN0KEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMjM0LCAxMjM0KSkpOwotCiAgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1h
eFRleHR1cmVTaXplID0gNTEyOwogCisgICAgLy8gQ2FzZSAxOiBjaGVjayB0aGF0IGdyYW5kQ2hp
bGQgYW5kIGdyZWF0R3JhbmRDaGlsZCBhcmUgbm90IGFkZGVkIHRvIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuCisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVj
aWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZp
eCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChwYXJlbnQuZ2V0KCkpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQVNTRVJUX0VR
KDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHBhcmVu
dC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7CisgICAgRVhQRUNUX0VR
KGNoaWxkLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsKKworCisgICAg
Ly8gQ2FzZSAyOiBDb250YW1pbmF0ZSB0aGUgZ3JhbmRDaGlsZCBhbmQgZ3JlYXRHcmFuZENoaWxk
J3MgY2xpcFJlY3QgdG8gcmVwcm9kdWNlIHRoZQorICAgIC8vIGNyYXNoIGJ1ZyBmb3VuZCBpbiBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDY3MzQu
IEluCisgICAgLy8gdGhpcyBidWcsIHRoZSBjbGlwUmVjdCB3YXMgbm90IHJlLWNvbXB1dGVkIGZv
ciBsYXllcnMgdGhhdCBjcmVhdGUgUmVuZGVyU3VyZmFjZXMsCisgICAgLy8gbGVhdmluZyB0aGUg
b2xkIHZhbHVlIGluIGl0cyBwbGFjZSwgYW5kIHRoZXJlZm9yZSBsZWFmTm9kZTIgdGhpbmtzIGl0
IHNob3VsZCBkcmF3CisgICAgLy8gaXRzZWxmLiBBcyBhIHJlc3VsdCwgYW4gZXh0cmEgcmVuZGVy
U3VyZmFjZSByZW1haW5zIG9uIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LAorICAgIC8vIHdo
aWNoIHZpb2xhdGVzIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW4gZW1wdHkgcmVuZGVyU3VyZmFjZSB3
aWxsIGFsd2F5cyBiZSB0aGUgbGFzdAorICAgIC8vIGl0ZW0gb24gdGhlIGxpc3QsIHdoaWNoIHVs
dGltYXRlbHkgY2F1c2VkIHRoZSBjcmFzaC4KKyAgICAvLworICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuY2xlYXIoKTsKKyAgICBjaGlsZC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBJbnRTaXplKDIwLCAyMCkpKTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldENsaXBS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMjM0LCAxMjM0KSkpOworCiAg
ICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBi
ZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwg
dG9vLgogICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5
ZXJMaXN0KCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgp
KTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133974</attachid>
            <date>2012-03-26 22:12:48 -0700</date>
            <delta_ts>2012-03-27 12:33:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74147-20120326221247.patch</filename>
            <type>text/plain</type>
            <size>26206</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY1Mzc5NGM5Mjk1MWEy
NTJkZDY4YzIwNmQwZmZlOWU3OWFlZmJjMi4uMDZhNDRiYTg5MTUxZTRjYjc4MzRjMDFjMzg3NmZj
M2U1MzIyZmEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTI2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
bGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVh
dGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCAzIGFkZGl0aW9uYWwgdW5pdCB0ZXN0czsgTW9kaWZpZWQgZXhpc3Rp
bmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFRoZSBsYXllcidzIGNs
aXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZyBpbmZvcm1hdGlvbiB3YXMgbm90CisgICAgICAg
IGJlaW5nIGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGVkIGEgcmVuZGVyU3VyZmFj
ZS4gKEl0CisgICAgICAgIHdhcywgaG93ZXZlciwgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoZSBy
ZW5kZXJTdXJmYWNlIGl0c2VsZi4pCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHVuaXQgdGVz
dCB0aGF0IHJlcHJvZHVjZXMgdGhhdCB0aGlzIGlzIGFuIGVycm9yLAorICAgICAgICBvdGhlciB1
bml0IHRlc3RzIHRvIHRpZ2h0bHkgdGVzdCB0aGUgdmFsdWUgb2YgY2xpcFJlY3QgYmVpbmcKKyAg
ICAgICAgaW5pdGlhbGl6ZWQsIGFuZCBhZGRzIHRoZSBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFs
aXplIHRoZQorICAgICAgICBjbGlwUmVjdC4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwg
dGhpcyBidWcgd2FzIGNhdXNpbmcgZmxhc2hpbmcgb24gdGFiLXN3aXRjaCBvbgorICAgICAgICB0
aGUgYXBwbGUgaXBob25lIHBhZ2UuIEV2ZW4gd29yc2UsIHdpdGggcGFydGlhbCBzd2FwIGVuYWJs
ZWQsIHRoZQorICAgICAgICBsYXllcnMgd291bGQgc2ltcGx5IGRpc2FwcGVhciwgYmVjYXVzZSB0
aGUgZmlyc3QgZnJhbWUgdGhlCisgICAgICAgIGNsaXBSZWN0IGlzIHVuaW5pdGlhbGl6ZWQgYW5k
IHRoZSBsYXllciBpcyBub3QgZHJhd24sIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIGZyYW1lIG9u
d2FyZHMsIHRoZSBkYW1hZ2UgdHJhY2tlciBjb3JyZWN0bHkgdGhpbmdzIG5vdGhpbmcKKyAgICAg
ICAgaXMgZGFtYWdlZCwgc28gaXQgZG9lc24ndCBkcmF3IHRoYXQgbGF5ZXIgYWdhaW4gdW50aWwg
b3RoZXIgZGFtYWdlCisgICAgICAgIGNhdXNlcyBpdCB0byBiZSByZWRyYXduLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKToKKwogMjAxMi0wMy0yNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFNpbXBsaWZ5IHNldHRpbmcgbG9hZGluZyBzdGF0ZSBpbiBEb2N1bWVu
dExvYWRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwN2E5YzA0MmU1M2RlMDBjZGVi
OWI2Yjk5YjE2YmNmODFiM2EwODU5Li5jMjk1NTMzNjcwMmZkMGE2MmM4MzM3ZTNhODU1NWRhMWUz
OTYyNDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEy
LTAzLTI2ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gbGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXll
cnMgdGhhdCBjcmVhdGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCAzIG1vcmUgdW5pdCB0ZXN0cy4gT25lIHJlcHJv
ZHVjZXMgdGhlIGNsaXBSZWN0IHByb2JsZW0gaW4gYW4KKyAgICAgICAgaW50ZWdyYXRlZCBtYW5u
ZXIsIHRoZSBvdGhlciB0d28gZGlyZWN0bHkgdGVzdCB0aGF0IGNsaXBSZWN0cyBhcmUKKyAgICAg
ICAgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmg6CisgICAgICAg
IChXZWJLaXRUZXN0cyk6CisKIDIwMTItMDMtMjYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBTY3JvbGxhYmxlIHBsdWdpbnMgbm90IHJlZ2lzdGVyZWQg
cHJvcGVybHkgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGJkMjIxNTRiOTE4YTdkZTYyOGMzYzk4NDYxZTA2NzJk
NDgxZmJmMjkuLjBhNjlmZWFkYmU5MjM4MjczZTBlMzdkMWUxNDAwMTZmNzBjMGJkNWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMzg1LDYgKzM4NSwy
OCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRl
cm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRO
ZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMobmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4
ZWxzKTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChsYXllcik7CisK
KyAgICAgICAgLy8gVGhlIGNsaXBSZWN0IGZvciB0aGlzIGxheWVyJ3MgcmVuZGVyU3VyZmFjZSAo
Y29tcHV0ZWQgYWJvdmUpIGlzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyB0aGUgYW5jZXN0b3Ig
c3VyZmFjZSdzIHNwYWNlLiBUbyBzZXQgdGhlIGxheWVyIGNsaXBSZWN0LCB3ZSBuZWVkIHRvIGNv
bXB1dGUKKyAgICAgICAgLy8gdGhhdCBjbGlwUmVjdCB3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJl
bnQgcmVuZGVyIHN1cmZhY2UncyBzcGFjZSwgd2hpY2gKKyAgICAgICAgLy8gcmVxdWlyZXMgdGhl
IGludmVyc2Ugc3VyZmFjZU9yaWdpblRyYW5zZm9ybS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
RklYTUU6IGZvciBub3csIHRoZSBpbnZlcnNlIHRyYW5zZm9ybSB3aWxsIG5vdCBiZWhhdmUgb24g
cGVyc3BlY3RpdmUgdHJhbnNmb3JtLgorICAgICAgICAvLyAgICAgICAgc28gaWYgdGhlcmUgaXMg
YW55IHBlcnNwZWN0aXZlIHRvIHRoZSB0cmFuc2Zvcm0sIHdlIGp1c3QgbWFrZSB0aGUgZW50aXJl
CisgICAgICAgIC8vICAgICAgICBsYXllciB0aGUgY2xpcFJlY3QuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDgwNgorICAgICAgICBpZiAoc3VyZmFjZU9yaWdpblRy
YW5zZm9ybS5oYXNQZXJzcGVjdGl2ZSgpKQorICAgICAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0
KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlT3JpZ2luVHJhbnNmb3JtID0gc3VyZmFjZU9yaWdpblRy
YW5zZm9ybS5pbnZlcnNlKCk7CisgICAgICAgICAgICBsYXllci0+c2V0Q2xpcFJlY3QoaW52ZXJz
ZU9yaWdpblRyYW5zZm9ybS5wcm9qZWN0UXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KHJlbmRlclN1
cmZhY2UtPmNsaXBSZWN0KCkpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBFYWNoIGxheWVyIGluIHRoZSBsYXllciB0cmVlIGFsc28gbmVlZHMgdG8g
Y29ycmVjdGx5IGluaGVyaXQgdXNlc0xheWVyQ2xpcHBpbmcuCisgICAgICAgIC8vCisgICAgICAg
IC8vIEZJWE1FOiBpdCBpcyBwb3NzaWJsZSB0aGUgdXNlc0xheWVyQ2xpcHBpbmcgbG9naWMgY2Fu
IGV2ZW50dWFsbHkgYmUgcmVtb3ZlZAorICAgICAgICAvLyAgICAgICAgZW50aXJlbHk6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDYyMgorICAgICAgICBpZiAobGF5
ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAg
ICAgICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7CiAg
ICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcobGF5ZXJJc0luQW5pbWF0
aW5nU3VidHJlZUZvclN1cmZhY2UpOwpAQCAtNDA2LDEzICs0MjgsMTMgQEAgc3RhdGljIGJvb2wg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBs
YXllciwgTGF5ZXIKICAgICAgICAgICAgIC8vIExheWVycyB3aXRob3V0IHRoZWlyIG93biByZW5k
ZXJTdXJmYWNlIHdpbGwgcmVuZGVyIGludG8gdGhlIG5lYXJlc3QgYW5jZXN0b3Igc3VyZmFjZS4K
ICAgICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQo
KS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBp
ZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgewotICAgICAgICAgICAgSW50UmVjdCBjbGlwUmVj
dCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwotICAgICAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0
KGxheWVyLT5jbGlwUmVjdCgpKTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChjbGlw
UmVjdCk7Ci0gICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyQ2xpcHBpbmcodHJ1ZSk7Ci0g
ICAgICAgIH0KKyAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgeworICAgICAgICBJbnRS
ZWN0IGNsaXBSZWN0ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgICAgIGNsaXBSZWN0Lmlu
dGVyc2VjdChsYXllci0+Y2xpcFJlY3QoKSk7CisgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChj
bGlwUmVjdCk7CisgICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKTsKICAg
ICB9CiAKICAgICAvLyBOb3RlIHRoYXQgYXQgdGhpcyBwb2ludCwgbGF5ZXItPmRyYXdUcmFuc2Zv
cm0oKSBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgbG9jYWwgdmFyaWFibGUgZHJhd1Ry
YW5zZm9ybS4KQEAgLTUxNSw2ICs1MzcsOSBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogCiAg
ICAgICAgIC8vIFNpbmNlIHRoZSBsYXllciBzdGFydHMgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2Ug
bmVlZCB0byBhZGp1c3QgaXRzCiAgICAgICAgIC8vIGNsaXBSZWN0IHRvIGJlIGV4cHJlc3NlZCBp
biB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KKworICAgICAgICAvLyBGSVhN
RTogdGhlIGZpbmFsIGNsaXBSZWN0IGNvdWxkIHByb2JhYmx5IGJlIG1vcmUgb3B0aW1hbCBhcyB0
aGUgaW50ZXJzZWN0aW9uIG9mCisgICAgICAgIC8vICAgICAgICB0aGUgZXhpc3RpbmcgY2xpcFJl
Y3QgYW5kIGRyYXdhYmxlQ29udGVudFJlY3QuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MDMzMQogICAgICAgICBsYXllci0+c2V0Q2xpcFJlY3QobGF5ZXItPmRyYXdh
YmxlQ29udGVudFJlY3QoKSk7CiAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhl
IHRyYW5zZm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KQEAgLTU0
OSwxNiArNTc0LDE2IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAKICAgICAgICAgLy8gSWYg
YSByZW5kZXIgc3VyZmFjZSBoYXMgbm8gbGF5ZXIgbGlzdCwgdGhlbiBpdCBhbmQgbm9uZSBvZiBp
dHMgY2hpbGRyZW4gbmVlZGVkIHRvIGdldCBkcmF3bi4KICAgICAgICAgaWYgKCFsYXllci0+cmVu
ZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBPcmlnaW5hbGx5IHdlIGFzc2VydGVkIHRoYXQgdGhpcyBsYXllciB3YXMgYWxyZWFkeSBhdCB0
aGUgZW5kIG9mIHRoZQotICAgICAgICAgICAgLy8gICAgICAgIGxpc3QsIGFuZCBvbmx5IG5lZWRl
ZCB0byByZW1vdmUgdGhhdCBsYXllci4gRm9yIG5vdywgd2UgcmVtb3ZlIHRoZQotICAgICAgICAg
ICAgLy8gICAgICAgIGVudGlyZSBzdWJ0cmVlIG9mIHN1cmZhY2VzIHRvIGZpeCBhIGNyYXNoIGJ1
Zy4gVGhlIHJvb3QgY2F1c2UgaXMKLSAgICAgICAgICAgIC8vICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNDcgYW5kIHdlIHNob3VsZCBiZSBhYmxlCi0g
ICAgICAgICAgICAvLyAgICAgICAgdG8gcHV0IHRoZSBvcmlnaW5hbCBhc3NlcnQgYWZ0ZXIgZml4
aW5nIHRoYXQuCisgICAgICAgICAgICAvLyBJbiB0aGVvcnkgaXQgc2hvdWxkIGJlIGEgdmFsaWQg
YXNzdW1wdGlvbiB0aGF0IHRoZSBjdXJyZW50IGxheWVyIGlzIHRoZQorICAgICAgICAgICAgLy8g
bGFzdCBvbmUgb24gdGhlIGxpc3QsIGFuZCB0aGUgd2hpbGUtbG9vcCBzaG91bGQgYmUgdW5uZWNl
c3NhcnkuIEhvd2V2ZXIsCisgICAgICAgICAgICAvLyBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzQwMzcgd2Ugb3B0ZWQgdG8ga2VlcCB0aGUKKyAgICAgICAgICAg
IC8vIHdoaWxlLWxvb3AgdG8gYXZvaWQgdXNlci1mYWNpbmcgYnVncywgd2hpbGUgdGhlIEFTU0VS
VCB3aWxsIHN0aWxsIHRyaWdnZXIKKyAgICAgICAgICAgIC8vIGluIGRlYnVnIG1vZGUuCisgICAg
ICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5sYXN0KCkgPT0gbGF5ZXIpOwog
ICAgICAgICAgICAgd2hpbGUgKHJlbmRlclN1cmZhY2VMYXllckxpc3QubGFzdCgpICE9IGxheWVy
KSB7CiAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5sYXN0KCktPmNsZWFy
UmVuZGVyU3VyZmFjZSgpOwogICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
cmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKHJlbmRlclN1
cmZhY2VMYXllckxpc3QubGFzdCgpID09IGxheWVyKTsKICAgICAgICAgICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgbGF5ZXItPmNsZWFyUmVuZGVy
U3VyZmFjZSgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAK
aW5kZXggOWVmZGRmOWZiMWE3ODI1MmEwODA4MGUzN2Q0NWY3YWFiZjhlM2UzNy4uNTE4YmI3MGNm
ZDk5NjQ5NGIxOGQ3MDg3MTc3NzlkZDc3ZTQwZmIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBA
IC02MjMsNiArNjIzLDU1IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNpdHko
MC41KTsKICAgICBncmVhdEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40KTsKIAorICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlz
ICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3
ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnNldENsaXBSZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CisKKyAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7
CisKKyAgICBBU1NFUlRfRVEoMlUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEocGFyZW50LT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5pZCgp
KTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMV0t
PmlkKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBS
ZWN0Q3VsbHNSZW5kZXJTdXJmYWNlc0NyYXNoUmVwcm8pCit7CisgICAgLy8gVGhpcyBpcyBhIHNp
bWlsYXIgc2l0dWF0aW9uIGFzIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcywgZXhj
ZXB0IHRoYXQKKyAgICAvLyBpdCByZXByb2R1Y2VzIGEgY3Jhc2ggYnVnIGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNjczNC4KKworICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBncmVhdEdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+
IGxlYWZOb2RlMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+
IGxlYWZOb2RlMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQt
PmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisgICAg
Z3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFuZENoaWxkKTsKKworICAgIC8vIGxlYWZOb2Rl
MSBlbnN1cmVzIHRoYXQgcGFyZW50IGFuZCBjaGlsZCBhcmUga2VwdCBvbiB0aGUgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwKKyAgICAvLyBldmVuIHRob3VnaCBncmFuZENoaWxkIGFuZCBncmVhdEdy
YW5kQ2hpbGQgc2hvdWxkIGJlIGNsaXBwZWQuCisgICAgY2hpbGQtPmFkZENoaWxkKGxlYWZOb2Rl
MSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5hZGRDaGlsZChsZWFmTm9kZTIpOworCisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNo
aWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDQ1LCA0NSksIElu
dFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Z3JlYXRHcmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAsIDEwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUxLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhsZWFmTm9kZTIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApLCBm
YWxzZSk7CisKKyAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBjaGlsZC0+
c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC41KTsKKyAgICBn
cmVhdEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40KTsKKwogICAgIC8vIENvbnRhbWluYXRlIHRo
ZSBncmFuZENoaWxkIGFuZCBncmVhdEdyYW5kQ2hpbGQncyBjbGlwUmVjdCB0byByZXByb2R1Y2Ug
dGhlIGNyYXNoCiAgICAgLy8gYnVnIGZvdW5kIGluIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9j
aHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNjczNC4gSW4gdGhpcwogICAgIC8vIGJ1ZywgdGhl
IGNsaXBSZWN0IHdhcyBub3QgcmUtY29tcHV0ZWQgZm9yIGxheWVycyB0aGF0IGNyZWF0ZSBSZW5k
ZXJTdXJmYWNlcywgYW5kCkBAIC02MzAsOSArNjc5LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAgICAgLy8gcmVu
ZGVyU3VyZmFjZSByZW1haW5zIG9uIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCB3aGljaCB2
aW9sYXRlcyB0aGUgYXNzdW1wdGlvbgogICAgIC8vIHRoYXQgYW4gZW1wdHkgcmVuZGVyU3VyZmFj
ZSB3aWxsIGFsd2F5cyBiZSB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0LCB3aGljaAogICAgIC8v
IHVsdGltYXRlbHkgY2F1c2VkIHRoZSBjcmFzaC4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBpdCBp
cyBhbHNvIHVzZWZ1bCB0byB0ZXN0IHdpdGggdGhpcyBjb21tZW50ZWQgb3V0LiBFdmVudHVhbGx5
IHdlIHNob3VsZAotICAgIC8vIGNyZWF0ZSBzZXZlcmFsIHRlc3QgY2FzZXMgdGhhdCB0ZXN0IGNs
aXBSZWN0L2RyYXdhYmxlQ29udGVudFJlY3QgY29tcHV0YXRpb24uCiAgICAgY2hpbGQtPnNldENs
aXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwgMjApKSk7CiAgICAg
Z3JlYXRHcmFuZENoaWxkLT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIElu
dFNpemUoMTIzNCwgMTIzNCkpKTsKIApAQCAtODIxLDYgKzg2NywxNzUgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlBbmltYXRpb25zRm9yUmVuZGVyU3VyZmFjZUhpZXJh
cmNoeSkKICAgICBFWFBFQ1RfRkxPQVRfRVEoNS4wLCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkubTQyKCkpOwogfQogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9MYXllcnMpCit7CisgICAg
Ly8gVmVyaWZ5IHRoYXQgbGF5ZXJzIGdldCB0aGUgYXBwcm9wcmlhdGUgY2xpcFJlY3RzIHdoZW4g
dGhlaXIgcGFyZW50IG1hc2tzVG9Cb3VuZHMgaXMgdHJ1ZS4KKyAgICAvLworICAgIC8vICAgZ3Jh
bmRDaGlsZDEgLSBjb21wbGV0ZWx5IGluc2lkZSB0aGUgcmVnaW9uOyBjbGlwUmVjdCBzaG91bGQg
YmUgdGhlIG1hc2sgcmVnaW9uIChsYXJnZXIgdGhhbiB0aGlzIGxheWVyJ3MgYm91bmRzKS4KKyAg
ICAvLyAgIGdyYW5kQ2hpbGQyIC0gcGFydGlhbGx5IGNsaXBwZWQgYnV0IE5PVCBtYXNrc1RvQm91
bmRzOyB0aGUgY2xpcFJlY3Qgc2hvdWxkIGJlIHRoZSBwYXJlbnQncyBjbGlwUmVjdCByZWdhcmRs
ZXNzIG9mIHRoZSBsYXllcidzIGJvdW5kcy4KKyAgICAvLyAgIGdyYW5kQ2hpbGQzIC0gcGFydGlh
bGx5IGNsaXBwZWQgYW5kIG1hc2tzVG9Cb3VuZHM7IHRoZSBjbGlwUmVjdCB3aWxsIGJlIHRoZSBp
bnRlcnNlY3Rpb24gb2YgbGF5ZXJCb3VuZHMgYW5kIHRoZSBtYXNrIHJlZ2lvbi4KKyAgICAvLyAg
IGdyYW5kQ2hpbGQ0IC0gb3V0c2lkZSBwYXJlbnQncyBjbGlwUmVjdCwgYW5kIG1hc2tzVG9Cb3Vu
ZHM7IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgZW1wdHkuCisgICAgLy8KKyAgICAvLyBGSVhNRTog
RXZlbnR1YWxseSB0aGlzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBsYXJnZSBudW1iZXIgb2YgdGVz
dHMgdGhhdCB2ZXJpZnkgdGhlCisgICAgLy8gICAgICAgIGZpbmFsIHZpc2libGVMYXllclJlY3Qs
IHdoaWxlIHRoZSBjbGlwUmVjdCB3aWxsIGJlY29tZSBhbiBpbmFjY2Vzc2libGUKKyAgICAvLyAg
ICAgICAgdGVtcG9yYXJ5IHZhcmlhYmxlIGZvciBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkoKS4KKworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDEgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGls
ZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Z3JhbmRDaGlsZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gZ3JhbmRDaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIHBh
cmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQp
OworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMSk7CisgICAgY2hpbGQtPmFkZENoaWxk
KGdyYW5kQ2hpbGQyKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworICAgIGNo
aWxkLT5hZGRDaGlsZChncmFuZENoaWxkNCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgyMCwgMjApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhncmFuZENoaWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDUsIDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQyLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMTUsIDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMy5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDE1LCAxNSksIEludFNpemUoMTAs
IDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGls
ZDQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCg0NSwgNDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKworICAgIGNo
aWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIGdyYW5kQ2hpbGQzLT5zZXRNYXNrc1Rv
Qm91bmRzKHRydWUpOworICAgIGdyYW5kQ2hpbGQ0LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwor
CisgICAgLy8gRm9yY2UgZXZlcnlvbmUgdG8gYmUgYSByZW5kZXIgc3VyZmFjZS4KKyAgICBjaGls
ZC0+c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuNSk7Cisg
ICAgZ3JhbmRDaGlsZDItPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkMy0+c2V0T3Bh
Y2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQ0LT5zZXRPcGFjaXR5KDAuNSk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhp
cyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwg
d2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOworCisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworCisgICAgSW50UmVjdCBjbGlwUmVjdDEgPSBncmFuZENoaWxkMS0+Y2xpcFJlY3QoKTsKKyAg
ICBJbnRSZWN0IGNsaXBSZWN0MiA9IGdyYW5kQ2hpbGQyLT5jbGlwUmVjdCgpOworICAgIEludFJl
Y3QgY2xpcFJlY3QzID0gZ3JhbmRDaGlsZDMtPmNsaXBSZWN0KCk7CisgICAgSW50UmVjdCBjbGlw
UmVjdDQgPSBncmFuZENoaWxkNC0+Y2xpcFJlY3QoKTsKKworICAgIEVYUEVDVF9JTlRfUkVDVF9F
UShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGNsaXBSZWN0MSk7
CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZSgyMCwgMjApKSwgY2xpcFJlY3QyKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJ
bnRQb2ludCgxNSwgMTUpLCBJbnRTaXplKDUsIDUpKSwgY2xpcFJlY3QzKTsKKyAgICBFWFBFQ1Rf
VFJVRShjbGlwUmVjdDQuaXNFbXB0eSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvU3VyZmFjZXMpCit7
CisgICAgLy8gVmVyaWZ5IHRoYXQgcmVuZGVyU3VyZmFjZXMgKGFuZCB0aGVpciBsYXllcnMpIGdl
dCB0aGUgYXBwcm9wcmlhdGUgY2xpcFJlY3RzIHdoZW4gdGhlaXIgcGFyZW50IG1hc2tzVG9Cb3Vu
ZHMgaXMgdHJ1ZS4KKyAgICAvLworICAgIC8vICAgZ3JhbmRDaGlsZDEgLSBjb21wbGV0ZWx5IGlu
c2lkZSB0aGUgcmVnaW9uOyBjbGlwUmVjdCBzaG91bGQgYmUgdGhlIG1hc2sgcmVnaW9uCisgICAg
Ly8gICAgICAgICAgICAgICAgIChsYXJnZXIgdGhhbiB0aGlzIGxheWVyJ3MgYm91bmRzKS4KKyAg
ICAvLyAgIGdyYW5kQ2hpbGQyIC0gcGFydGlhbGx5IGNsaXBwZWQgYnV0IE5PVCBtYXNrc1RvQm91
bmRzOyB0aGUgY2xpcFJlY3Qgc2hvdWxkIGJlIHRoZQorICAgIC8vICAgICAgICAgICAgICAgICBw
YXJlbnQncyBjbGlwUmVjdCByZWdhcmRsZXNzIG9mIHRoZSBsYXllcidzIGJvdW5kcy4KKyAgICAv
LyAgIGdyYW5kQ2hpbGQzIC0gcGFydGlhbGx5IGNsaXBwZWQgYW5kIG1hc2tzVG9Cb3VuZHM7IHRo
ZSBjbGlwUmVjdCB3aWxsIGJlIHRoZQorICAgIC8vICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rp
b24gb2YgbGF5ZXJCb3VuZHMgYW5kIHRoZSBtYXNrIHJlZ2lvbi4KKyAgICAvLyAgIGdyYW5kQ2hp
bGQ0IC0gb3V0c2lkZSBwYXJlbnQncyBjbGlwUmVjdCwgYW5kIG1hc2tzVG9Cb3VuZHM7IHRoZSBj
bGlwUmVjdCBzaG91bGQKKyAgICAvLyAgICAgICAgICAgICAgICAgYmUgZW1wdHkuCisgICAgLy8K
KyAgICAvLyAgIFRoZSByZXNwZWN0aXZlIGxheWVycyBmb3IgdGhlc2Ugc3VyZmFjZXMgd2lsbCBo
YXZlIGNsaXBSZWN0IHRoYXQgaXMgYWxzbyBjbGFtcGVkCisgICAgLy8gICBieSBkcmF3YWJsZUNv
bnRlbnRSZWN0LCBhbmQgdHJhbnNmb3JtZWQgdG8gdGhlaXIgbG9jYWwgdGFyZ2V0IHN1cmZhY2Ug
c3BhY2UuCisgICAgLy8KKyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0aGlzIHdpbGwgYmUgcmVw
bGFjZWQgYnkgYSBsYXJnZSBudW1iZXIgb2YgdGVzdHMgdGhhdCB2ZXJpZnkgdGhlCisgICAgLy8g
ICAgICAgIGZpbmFsIHZpc2libGVMYXllclJlY3QsIHdoaWxlIHRoZSBjbGlwUmVjdCB3aWxsIGJl
Y29tZSBhbiBpbmFjY2Vzc2libGUKKyAgICAvLyAgICAgICAgdGVtcG9yYXJ5IHZhcmlhYmxlIGZv
ciBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoKS4KKworICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDMgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxlYWZOb2RlMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxlYWZOb2RlMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxlYWZOb2RlMyA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxlYWZOb2RlNCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFu
ZENoaWxkMSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQyKTsKKyAgICBjaGlsZC0+
YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkNCk7
CisKKyAgICAvLyB0aGUgbGVhZiBub2RlcyBlbnN1cmUgdGhhdCB0aGVzZSBncmFuZENoaWxkcmVu
IGJlY29tZSByZW5kZXJTdXJmYWNlcyBmb3IgdGhpcyB0ZXN0LgorICAgIGdyYW5kQ2hpbGQxLT5h
ZGRDaGlsZChsZWFmTm9kZTEpOworICAgIGdyYW5kQ2hpbGQyLT5hZGRDaGlsZChsZWFmTm9kZTIp
OworICAgIGdyYW5kQ2hpbGQzLT5hZGRDaGlsZChsZWFmTm9kZTMpOworICAgIGdyYW5kQ2hpbGQ0
LT5hZGRDaGlsZChsZWFmTm9kZTQpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMjAsIDIwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Z3JhbmRDaGlsZDEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCg1LCA1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMi5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDE1
LCAxNSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoZ3JhbmRDaGlsZDMuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxNSwgMTUpLCBJbnRTaXplKDEwLCAxMCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQ0Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoNDUsIDQ1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgx
MCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9k
ZTIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTMuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFm
Tm9kZTQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisKKyAgICBj
aGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBncmFuZENoaWxkMy0+c2V0TWFza3NU
b0JvdW5kcyh0cnVlKTsKKyAgICBncmFuZENoaWxkNC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsK
KworICAgIC8vIEZvcmNlIGV2ZXJ5b25lIHRvIGJlIGEgcmVuZGVyIHN1cmZhY2UuCisgICAgY2hp
bGQtPnNldE9wYWNpdHkoMC40KTsKKyAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOwor
ICAgIGdyYW5kQ2hpbGQyLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZ3JhbmRDaGlsZDMtPnNldE9w
YWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkNC0+c2V0T3BhY2l0eSgwLjUpOworCisgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBk
dW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRo
aXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3Qs
IHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKKworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9U
UlVFKGdyYW5kQ2hpbGQzLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIC8vIGJlY2F1c2UgZ3JhbmRD
aGlsZDQgaXMgZW50aXJlbHkgY2xpcHBlZCwgaXQgaXMgbm90IGV4cGVjdGVkIHRvIGhhdmUgYSBy
ZW5kZXJTdXJmYWNlLgorCisgICAgSW50UmVjdCBzdXJmYWNlQ2xpcDEgPSBncmFuZENoaWxkMS0+
cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpOworICAgIEludFJlY3Qgc3VyZmFjZUNsaXAyID0g
Z3JhbmRDaGlsZDItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKTsKKyAgICBJbnRSZWN0IHN1
cmZhY2VDbGlwMyA9IGdyYW5kQ2hpbGQzLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCk7Cisg
ICAgSW50UmVjdCBsYXllckNsaXAxID0gZ3JhbmRDaGlsZDEtPmNsaXBSZWN0KCk7CisgICAgSW50
UmVjdCBsYXllckNsaXAyID0gZ3JhbmRDaGlsZDItPmNsaXBSZWN0KCk7CisgICAgSW50UmVjdCBs
YXllckNsaXAzID0gZ3JhbmRDaGlsZDMtPmNsaXBSZWN0KCk7CisgICAgSW50UmVjdCBsYXllckNs
aXA0ID0gZ3JhbmRDaGlsZDQtPmNsaXBSZWN0KCk7CisKKyAgICAvLyBTdXJmYWNlcyBhcmUgY2xp
cHBlZCBieSB0aGVpciBwYXJlbnQsIGJ1dCB1bi1hZmZlY3RlZCBieSB0aGUgb3duaW5nIGxheWVy
J3MgbWFza3NUb0JvdW5kcy4KKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApKSwgc3VyZmFjZUNsaXAxKTsKKyAgICBFWFBFQ1RfSU5U
X1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApKSwgc3VyZmFj
ZUNsaXAyKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwg
SW50U2l6ZSgyMCwgMjApKSwgc3VyZmFjZUNsaXAzKTsKKworICAgIC8vIExheWVycyBhcmUgY2xp
cHBlZCwgYW5kIGFsc28gcmVkdWNlZCB0byBkcmF3YWJsZUNvbnRlbnRTaXplICh3aGljaCBpcyAx
MHgxMCBkdWUgdG8gbGVhZk5vZGVzKS4KKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwLCAxMCkpLCBsYXllckNsaXAxKTsKKyAgICBFWFBF
Q1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDUsIDUpKSwg
bGF5ZXJDbGlwMik7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgSW50U2l6ZSg1LCA1KSksIGxheWVyQ2xpcDMpOworICAgIEVYUEVDVF9UUlVFKGxheWVy
Q2xpcDQuaXNFbXB0eSgpKTsKK30KKwogLy8gRklYTUU6CiAvLyBjb250aW51ZSB3b3JraW5nIG9u
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODk0MgogLy8gIC0gYWRk
IGEgdGVzdCB0byB2ZXJpZnkgY2xpcHBpbmcgdGhhdCBjaGFuZ2VzIHRoZSAiY2VudGVyIHBvaW50
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZVRl
c3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0
Q29tbW9uLmgKaW5kZXggMGI4M2RhY2FiYTNjZmUwMWNhY2EzYWJhNTliZjc4NzY0YTdkZDFhMC4u
NzVlNDg3YTRhN2VmNDZlNzNiNjI4M2MzZmY0NTBhNWU0NWNhODYwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oCkBAIC0y
NywxMyArMjcsMTkgQEAKIAogbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKIAotLy8gVGhpcyBpcyBh
IG1hY3JvIGluc3RlYWQgb2YgZnVuY3Rpb24gc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUgbnVt
YmVycyB3aGVyZSBhIHRlc3QgZmFpbGVkLgorLy8gVGhlc2UgYXJlIG1hY3JvcyBpbnN0ZWFkIG9m
IGZ1bmN0aW9ucyBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGluZSBudW1iZXJzIHdoZXJlIGEgdGVz
dCBmYWlsZWQuCiAjZGVmaW5lIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwp
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubG9jYXRpb24oKS54KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueCgpKTsgXAogICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueSgpLCAoYWN0dWFsKS5sb2NhdGlvbigp
LnkoKSk7IFwKICAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5zaXplKCkud2lkdGgoKSwg
KGFjdHVhbCkuc2l6ZSgpLndpZHRoKCkpOyBcCiAgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkuc2l6ZSgpLmhlaWdodCgpLCAoYWN0dWFsKS5zaXplKCkuaGVpZ2h0KCkpCiAKKyNkZWZpbmUg
RVhQRUNUX0lOVF9SRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBFWFBFQ1RfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLngoKSwgKGFjdHVh
bCkubG9jYXRpb24oKS54KCkpOyAgICAgIFwKKyAgICBFWFBFQ1RfRVEoKGV4cGVjdGVkKS5sb2Nh
dGlvbigpLnkoKSwgKGFjdHVhbCkubG9jYXRpb24oKS55KCkpOyAgICAgIFwKKyAgICBFWFBFQ1Rf
RVEoKGV4cGVjdGVkKS5zaXplKCkud2lkdGgoKSwgKGFjdHVhbCkuc2l6ZSgpLndpZHRoKCkpOyAg
ICAgIFwKKyAgICBFWFBFQ1RfRVEoKGV4cGVjdGVkKS5zaXplKCkuaGVpZ2h0KCksIChhY3R1YWwp
LnNpemUoKS5oZWlnaHQoKSkKKwogLy8gVGhpcyBpcyBhIG1hY3JvIGluc3RlYWQgb2YgYSBmdW5j
dGlvbiBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGluZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWls
ZWQuCiAvLyBFdmVuIHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRvdWJs
ZSBwcmVjaXNpb24sIHRoZXJlIGFyZSBtYW55IG90aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB1
c2VkIHRoYXQgYWZmZWN0CiAvLyB0aGUgdHJhbnNmb3JtcywgYW5kIHNvIHdlIG9ubHkgZXhwZWN0
IHRoZW0gdG8gYmUgYWNjdXJhdGUgdXAgdG8gZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDQ2NTZjMDljY2UxMzU3YzBhYWVmYmZhNjUxYWY3MmYxYmM2MjM4NjUuLjBiYWNjZGZkOWUw
ZTUxNzY5ZDllYjM5MTU2NDcyMzQ1ZjY4ZjU3YzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAx
Mi0wMy0yNiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIGxheWVyLT5jbGlwUmVjdCgpIGlzIG5vdCBpbml0aWFsaXplZCBmb3IgbGF5
ZXJzIHRoYXQgY3JlYXRlIGEgcmVuZGVyU3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQ6IG1hcmtlZCB0ZXN0IGFzIG5lZWRpbmcgcmViYXNlbGluaW5nCisKIDIwMTItMDMt
MjUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAg
IEdyZWVrIHNpZ21hIGlzIGhhbmRsZWQgd3JvbmcgaW4gY2FzZSBpbmRlcGVuZGVudCByZWdleHAu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKaW5kZXggM2U4NjI0NGUxOTk5OWQ5MTkwNjk4ZmJhOWY3MTJmY2RmMmU4MDQxNy4uYjRi
YWIyMTI4MjZiZGI1YTQwZjVmZTdmOGE5NjI5NmRlODlmZjVkMCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtNDI3Nyw2
ICs0Mjc3LDEwIEBAIEJVR1dLNzg0MTIgTUFDIFdJTiA6IGZhc3QvcmVwYWludC9zY3JvbGwtaW5z
aWRlLXRhYmxlLWNlbGwuaHRtbCA9IElNQUdFCiBCVUdXSzc4NDEyIE1BQyBXSU4gOiBmYXN0L3Jl
cGFpbnQvc2Nyb2xsLXJlbGF0aXZlLXRhYmxlLWluc2lkZS10YWJsZS1jZWxsLmh0bWwgPSBJTUFH
RQogQlVHV0s3ODQxMiBNQUMgV0lOIDogZmFzdC90YWJsZS9jZWxsLXByZWYtd2lkdGgtaW52YWxp
ZGF0aW9uLmh0bWwgPSBURVhUCiAKKy8vIE5lZWRzIHJlYmFzZWxpbmluZyBhZnRlciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNDcuCisvLyBJdCBpcyBjb3JyZWN0
IGZvciB0aGUgcmVmbGVjdGVkIHRleHQgdG8gYmUgdmlzaWJsZS4KK0JVR1dLNzQxNDcgOiBjb21w
b3NpdGluZy9yZWZsZWN0aW9ucy9uZXN0ZWQtcmVmbGVjdGlvbi1vbi1vdmVyZmxvdy5odG1sID0g
SU1BR0UKKwogLy8gTmVlZCByZWJhc2VsaW5pbmcuCiBCVUdXSzM3MjQ0IDogdGFibGVzL21vemls
bGEvYnVncy9idWcyNzAzOC0xLmh0bWwgPSBJTUFHRStURVhUCiBCVUdXSzM3MjQ0IDogdGFibGVz
L21vemlsbGEvYnVncy9idWcyNzAzOC0yLmh0bWwgPSBJTUFHRStURVhUCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134115</attachid>
            <date>2012-03-27 12:23:56 -0700</date>
            <delta_ts>2012-03-27 16:00:49 -0700</delta_ts>
            <desc>Same patch updated to tip of tree</desc>
            <filename>bug-74147-20120327122355.patch</filename>
            <type>text/plain</type>
            <size>26264</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE5MzE4YmE1NGY1YWE4
ZTg5MDVhNGUwMWRlYzE2ODM4NWMwMDMzZi4uOTQ2MmUxZDBhMjY0ZGExMTJiZWZiMjFhMWIyZGU4
MTE4ZjM1YTBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTI2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
bGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVh
dGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCAzIGFkZGl0aW9uYWwgdW5pdCB0ZXN0czsgTW9kaWZpZWQgZXhpc3Rp
bmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFRoZSBsYXllcidzIGNs
aXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZyBpbmZvcm1hdGlvbiB3YXMgbm90CisgICAgICAg
IGJlaW5nIGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGVkIGEgcmVuZGVyU3VyZmFj
ZS4gKEl0CisgICAgICAgIHdhcywgaG93ZXZlciwgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoZSBy
ZW5kZXJTdXJmYWNlIGl0c2VsZi4pCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHVuaXQgdGVz
dCB0aGF0IHJlcHJvZHVjZXMgdGhhdCB0aGlzIGlzIGFuIGVycm9yLAorICAgICAgICBvdGhlciB1
bml0IHRlc3RzIHRvIHRpZ2h0bHkgdGVzdCB0aGUgdmFsdWUgb2YgY2xpcFJlY3QgYmVpbmcKKyAg
ICAgICAgaW5pdGlhbGl6ZWQsIGFuZCBhZGRzIHRoZSBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFs
aXplIHRoZQorICAgICAgICBjbGlwUmVjdC4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwg
dGhpcyBidWcgd2FzIGNhdXNpbmcgZmxhc2hpbmcgb24gdGFiLXN3aXRjaCBvbgorICAgICAgICB0
aGUgYXBwbGUgaXBob25lIHBhZ2UuIEV2ZW4gd29yc2UsIHdpdGggcGFydGlhbCBzd2FwIGVuYWJs
ZWQsIHRoZQorICAgICAgICBsYXllcnMgd291bGQgc2ltcGx5IGRpc2FwcGVhciwgYmVjYXVzZSB0
aGUgZmlyc3QgZnJhbWUgdGhlCisgICAgICAgIGNsaXBSZWN0IGlzIHVuaW5pdGlhbGl6ZWQgYW5k
IHRoZSBsYXllciBpcyBub3QgZHJhd24sIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIGZyYW1lIG9u
d2FyZHMsIHRoZSBkYW1hZ2UgdHJhY2tlciBjb3JyZWN0bHkgdGhpbmdzIG5vdGhpbmcKKyAgICAg
ICAgaXMgZGFtYWdlZCwgc28gaXQgZG9lc24ndCBkcmF3IHRoYXQgbGF5ZXIgYWdhaW4gdW50aWwg
b3RoZXIgZGFtYWdlCisgICAgICAgIGNhdXNlcyBpdCB0byBiZSByZWRyYXduLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKToKKwogMjAxMi0wMy0yNyAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEZpeCBmaWx0ZXIgY29udGV4dCBjcmVh
dGlvbiB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggYzAzYzIxMjFjMzJkNmRhZjU3MmU4OTA1NTIwM2VkZGE1ZjE0OGY0OC4uYTRhYzc5YWU3ODky
ODhhOThlNmY3NmZjMGQxYTM3MTBjMzU3OTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMy0yNiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIGxheWVyLT5jbGlwUmVjdCgpIGlzIG5v
dCBpbml0aWFsaXplZCBmb3IgbGF5ZXJzIHRoYXQgY3JlYXRlIGEgcmVuZGVyU3VyZmFjZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgMyBtb3Jl
IHVuaXQgdGVzdHMuIE9uZSByZXByb2R1Y2VzIHRoZSBjbGlwUmVjdCBwcm9ibGVtIGluIGFuCisg
ICAgICAgIGludGVncmF0ZWQgbWFubmVyLCB0aGUgb3RoZXIgdHdvIGRpcmVjdGx5IHRlc3QgdGhh
dCBjbGlwUmVjdHMgYXJlCisgICAgICAgIHByb3Blcmx5IGluaXRpYWxpemVkLgorCisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVl
VGVzdENvbW1vbi5oOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorCiAyMDEyLTAzLTI3ICBTdGVw
aGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gRml4IGZpbHRlciBjb250ZXh0IHVzYWdlIGluIHdlYmtpdF91bml0X3Rlc3RzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggYmQyMjE1NGI5MThhN2Rl
NjI4YzNjOTg0NjFlMDY3MmQ0ODFmYmYyOS4uMGE2OWZlYWRiZTkyMzgyNzNlMGUzN2QxZTE0MDAx
NmY3MGMwYmQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CkBAIC0zODUsNiArMzg1LDI4IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgICAgIHJl
bmRlclN1cmZhY2UtPnNldE5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyhuZWFyZXN0QW5j
ZXN0b3JUaGF0TW92ZXNQaXhlbHMpOwogCiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKGxheWVyKTsKKworICAgICAgICAvLyBUaGUgY2xpcFJlY3QgZm9yIHRoaXMgbGF5ZXIn
cyByZW5kZXJTdXJmYWNlIChjb21wdXRlZCBhYm92ZSkgaXMgZGVzY3JpYmVkIGluCisgICAgICAg
IC8vIHRoZSBhbmNlc3RvciBzdXJmYWNlJ3Mgc3BhY2UuIFRvIHNldCB0aGUgbGF5ZXIgY2xpcFJl
Y3QsIHdlIG5lZWQgdG8gY29tcHV0ZQorICAgICAgICAvLyB0aGF0IGNsaXBSZWN0IHdpdGggcmVz
cGVjdCB0byB0aGUgY3VycmVudCByZW5kZXIgc3VyZmFjZSdzIHNwYWNlLCB3aGljaAorICAgICAg
ICAvLyByZXF1aXJlcyB0aGUgaW52ZXJzZSBzdXJmYWNlT3JpZ2luVHJhbnNmb3JtLgorICAgICAg
ICAvLworICAgICAgICAvLyBGSVhNRTogZm9yIG5vdywgdGhlIGludmVyc2UgdHJhbnNmb3JtIHdp
bGwgbm90IGJlaGF2ZSBvbiBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm0uCisgICAgICAgIC8vICAgICAg
ICBzbyBpZiB0aGVyZSBpcyBhbnkgcGVyc3BlY3RpdmUgdG8gdGhlIHRyYW5zZm9ybSwgd2UganVz
dCBtYWtlIHRoZSBlbnRpcmUKKyAgICAgICAgLy8gICAgICAgIGxheWVyIHRoZSBjbGlwUmVjdC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwODA2CisgICAgICAgIGlm
IChzdXJmYWNlT3JpZ2luVHJhbnNmb3JtLmhhc1BlcnNwZWN0aXZlKCkpCisgICAgICAgICAgICBs
YXllci0+c2V0Q2xpcFJlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VPcmlnaW5UcmFuc2Zvcm0g
PSBzdXJmYWNlT3JpZ2luVHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICAgICAgICAgIGxheWVyLT5z
ZXRDbGlwUmVjdChpbnZlcnNlT3JpZ2luVHJhbnNmb3JtLnByb2plY3RRdWFkKEZsb2F0UXVhZChG
bG9hdFJlY3QocmVuZGVyU3VyZmFjZS0+Y2xpcFJlY3QoKSkpKS5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEVhY2ggbGF5ZXIgaW4gdGhlIGxheWVyIHRy
ZWUgYWxzbyBuZWVkcyB0byBjb3JyZWN0bHkgaW5oZXJpdCB1c2VzTGF5ZXJDbGlwcGluZy4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gRklYTUU6IGl0IGlzIHBvc3NpYmxlIHRoZSB1c2VzTGF5ZXJD
bGlwcGluZyBsb2dpYyBjYW4gZXZlbnR1YWxseSBiZSByZW1vdmVkCisgICAgICAgIC8vICAgICAg
ICBlbnRpcmVseTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjIy
CisgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT51c2VzTGF5
ZXJDbGlwcGluZygpKQorICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRy
dWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJp
bmVkVHJhbnNmb3JtKTsKICAgICAgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm1Jc0FuaW1hdGlu
ZyhsYXllcklzSW5BbmltYXRpbmdTdWJ0cmVlRm9yU3VyZmFjZSk7CkBAIC00MDYsMTMgKzQyOCwx
MyBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRl
cm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgICAgICAgICAgLy8gTGF5ZXJzIHdpdGhv
dXQgdGhlaXIgb3duIHJlbmRlclN1cmZhY2Ugd2lsbCByZW5kZXIgaW50byB0aGUgbmVhcmVzdCBh
bmNlc3RvciBzdXJmYWNlLgogICAgICAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZh
Y2UobGF5ZXItPnBhcmVudCgpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9Cisg
ICAgfQogCi0gICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7Ci0gICAgICAgICAg
ICBJbnRSZWN0IGNsaXBSZWN0ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7Ci0gICAgICAgICAgICBj
bGlwUmVjdC5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0KCkpOwotICAgICAgICAgICAgbGF5ZXIt
PnNldENsaXBSZWN0KGNsaXBSZWN0KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJD
bGlwcGluZyh0cnVlKTsKLSAgICAgICAgfQorICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygp
KSB7CisgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAg
ICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKKyAgICAgICAgbGF5
ZXItPnNldENsaXBSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllckNs
aXBwaW5nKHRydWUpOwogICAgIH0KIAogICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCBs
YXllci0+ZHJhd1RyYW5zZm9ybSgpIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBsb2Nh
bCB2YXJpYWJsZSBkcmF3VHJhbnNmb3JtLgpAQCAtNTE1LDYgKzUzNyw5IEBAIHN0YXRpYyBib29s
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSog
bGF5ZXIsIExheWVyCiAKICAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyBy
ZW5kZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKICAgICAgICAgLy8gY2xpcFJlY3Qg
dG8gYmUgZXhwcmVzc2VkIGluIHRoZSBuZXcgc3VyZmFjZSdzIGNvb3JkaW5hdGUgc3lzdGVtLgor
CisgICAgICAgIC8vIEZJWE1FOiB0aGUgZmluYWwgY2xpcFJlY3QgY291bGQgcHJvYmFibHkgYmUg
bW9yZSBvcHRpbWFsIGFzIHRoZSBpbnRlcnNlY3Rpb24gb2YKKyAgICAgICAgLy8gICAgICAgIHRo
ZSBleGlzdGluZyBjbGlwUmVjdCBhbmQgZHJhd2FibGVDb250ZW50UmVjdC4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMzMxCiAgICAgICAgIGxheWVyLT5zZXRDbGlw
UmVjdChsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKIAogICAgICAgICAvLyBBZGp1c3Qg
dGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtIHRvIGJlIHRoZSBjZW50ZXIgb2YgdGhlIHJlbmRl
ciBzdXJmYWNlLgpAQCAtNTQ5LDE2ICs1NzQsMTYgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIK
IAogICAgICAgICAvLyBJZiBhIHJlbmRlciBzdXJmYWNlIGhhcyBubyBsYXllciBsaXN0LCB0aGVu
IGl0IGFuZCBub25lIG9mIGl0cyBjaGlsZHJlbiBuZWVkZWQgdG8gZ2V0IGRyYXduLgogICAgICAg
ICBpZiAoIWxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IE9yaWdpbmFsbHkgd2UgYXNzZXJ0ZWQgdGhhdCB0aGlzIGxheWVy
IHdhcyBhbHJlYWR5IGF0IHRoZSBlbmQgb2YgdGhlCi0gICAgICAgICAgICAvLyAgICAgICAgbGlz
dCwgYW5kIG9ubHkgbmVlZGVkIHRvIHJlbW92ZSB0aGF0IGxheWVyLiBGb3Igbm93LCB3ZSByZW1v
dmUgdGhlCi0gICAgICAgICAgICAvLyAgICAgICAgZW50aXJlIHN1YnRyZWUgb2Ygc3VyZmFjZXMg
dG8gZml4IGEgY3Jhc2ggYnVnLiBUaGUgcm9vdCBjYXVzZSBpcwotICAgICAgICAgICAgLy8gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE0NyBhbmQgd2Ug
c2hvdWxkIGJlIGFibGUKLSAgICAgICAgICAgIC8vICAgICAgICB0byBwdXQgdGhlIG9yaWdpbmFs
IGFzc2VydCBhZnRlciBmaXhpbmcgdGhhdC4KKyAgICAgICAgICAgIC8vIEluIHRoZW9yeSBpdCBz
aG91bGQgYmUgYSB2YWxpZCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgdGhl
CisgICAgICAgICAgICAvLyBsYXN0IG9uZSBvbiB0aGUgbGlzdCwgYW5kIHRoZSB3aGlsZS1sb29w
IHNob3VsZCBiZSB1bm5lY2Vzc2FyeS4gSG93ZXZlciwKKyAgICAgICAgICAgIC8vIGluIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDAzNyB3ZSBvcHRlZCB0byBrZWVw
IHRoZQorICAgICAgICAgICAgLy8gd2hpbGUtbG9vcCB0byBhdm9pZCB1c2VyLWZhY2luZyBidWdz
LCB3aGlsZSB0aGUgQVNTRVJUIHdpbGwgc3RpbGwgdHJpZ2dlcgorICAgICAgICAgICAgLy8gaW4g
ZGVidWcgbW9kZS4KKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Lmxh
c3QoKSA9PSBsYXllcik7CiAgICAgICAgICAgICB3aGlsZSAocmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5sYXN0KCkgIT0gbGF5ZXIpIHsKICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0Lmxhc3QoKS0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBBU1NFUlQocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5sYXN0KCkgPT0gbGF5ZXIpOwogICAgICAg
ICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBs
YXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcAppbmRleCA5ZWZkZGY5ZmIxYTc4MjUyYTA4MDgwZTM3ZDQ1ZjdhYWJm
OGUzZTM3Li41MThiYjcwY2ZkOTk2NDk0YjE4ZDcwODcxNzc3OWRkNzdlNDBmYjEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAKQEAgLTYyMyw2ICs2MjMsNTUgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAgICAgZ3JhbmRD
aGlsZC0+c2V0T3BhY2l0eSgwLjUpOwogICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgw
LjQpOwogCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6
IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBD
Q0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBh
cmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsK
KworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKworICAgIEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5zaXplKCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZhY2VM
YXllckxpc3RbMF0tPmlkKCkpOworICAgIEVYUEVDVF9FUShjaGlsZC0+aWQoKSwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdFsxXS0+aWQoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzQ3Jhc2hSZXBybykKK3sKKyAg
ICAvLyBUaGlzIGlzIGEgc2ltaWxhciBzaXR1YXRpb24gYXMgdmVyaWZ5Q2xpcFJlY3RDdWxsc1Jl
bmRlclN1cmZhY2VzLCBleGNlcHQgdGhhdAorICAgIC8vIGl0IHJlcHJvZHVjZXMgYSBjcmFzaCBi
dWcgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA2
NzM0LgorCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyZWF0R3JhbmRDaGlsZCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUxID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChn
cmFuZENoaWxkKTsKKyAgICBncmFuZENoaWxkLT5hZGRDaGlsZChncmVhdEdyYW5kQ2hpbGQpOwor
CisgICAgLy8gbGVhZk5vZGUxIGVuc3VyZXMgdGhhdCBwYXJlbnQgYW5kIGNoaWxkIGFyZSBrZXB0
IG9uIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LAorICAgIC8vIGV2ZW4gdGhvdWdoIGdyYW5k
Q2hpbGQgYW5kIGdyZWF0R3JhbmRDaGlsZCBzaG91bGQgYmUgY2xpcHBlZC4KKyAgICBjaGlsZC0+
YWRkQ2hpbGQobGVhZk5vZGUxKTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPmFkZENoaWxkKGxlYWZO
b2RlMik7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApLCBm
YWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoNDUsIDQ1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmVhdEdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFm
Tm9kZTEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2RlMi5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDIwLCAyMCksIGZhbHNlKTsKKworICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRy
dWUpOworICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CisgICAgZ3JhbmRDaGlsZC0+c2V0T3Bh
Y2l0eSgwLjUpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjQpOworCiAgICAg
Ly8gQ29udGFtaW5hdGUgdGhlIGdyYW5kQ2hpbGQgYW5kIGdyZWF0R3JhbmRDaGlsZCdzIGNsaXBS
ZWN0IHRvIHJlcHJvZHVjZSB0aGUgY3Jhc2gKICAgICAvLyBidWcgZm91bmQgaW4gaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA2NzM0LiBJbiB0aGlz
CiAgICAgLy8gYnVnLCB0aGUgY2xpcFJlY3Qgd2FzIG5vdCByZS1jb21wdXRlZCBmb3IgbGF5ZXJz
IHRoYXQgY3JlYXRlIFJlbmRlclN1cmZhY2VzLCBhbmQKQEAgLTYzMCw5ICs2NzksNiBAQCBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJm
YWNlcykKICAgICAvLyByZW5kZXJTdXJmYWNlIHJlbWFpbnMgb24gdGhlIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHdoaWNoIHZpb2xhdGVzIHRoZSBhc3N1bXB0aW9uCiAgICAgLy8gdGhhdCBhbiBl
bXB0eSByZW5kZXJTdXJmYWNlIHdpbGwgYWx3YXlzIGJlIHRoZSBsYXN0IGl0ZW0gb24gdGhlIGxp
c3QsIHdoaWNoCiAgICAgLy8gdWx0aW1hdGVseSBjYXVzZWQgdGhlIGNyYXNoLgotICAgIC8vCi0g
ICAgLy8gRklYTUU6IGl0IGlzIGFsc28gdXNlZnVsIHRvIHRlc3Qgd2l0aCB0aGlzIGNvbW1lbnRl
ZCBvdXQuIEV2ZW50dWFsbHkgd2Ugc2hvdWxkCi0gICAgLy8gY3JlYXRlIHNldmVyYWwgdGVzdCBj
YXNlcyB0aGF0IHRlc3QgY2xpcFJlY3QvZHJhd2FibGVDb250ZW50UmVjdCBjb21wdXRhdGlvbi4K
ICAgICBjaGlsZC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXpl
KDIwLCAyMCkpKTsKICAgICBncmVhdEdyYW5kQ2hpbGQtPnNldENsaXBSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMjM0LCAxMjM0KSkpOwogCkBAIC04MjEsNiArODY3LDE3
NSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUFuaW1hdGlvbnNGb3JS
ZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIEVYUEVDVF9GTE9BVF9FUSg1LjAsIGdyYW5kQ2hp
bGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CiB9CiAKK1RFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlU
b0xheWVycykKK3sKKyAgICAvLyBWZXJpZnkgdGhhdCBsYXllcnMgZ2V0IHRoZSBhcHByb3ByaWF0
ZSBjbGlwUmVjdHMgd2hlbiB0aGVpciBwYXJlbnQgbWFza3NUb0JvdW5kcyBpcyB0cnVlLgorICAg
IC8vCisgICAgLy8gICBncmFuZENoaWxkMSAtIGNvbXBsZXRlbHkgaW5zaWRlIHRoZSByZWdpb247
IGNsaXBSZWN0IHNob3VsZCBiZSB0aGUgbWFzayByZWdpb24gKGxhcmdlciB0aGFuIHRoaXMgbGF5
ZXIncyBib3VuZHMpLgorICAgIC8vICAgZ3JhbmRDaGlsZDIgLSBwYXJ0aWFsbHkgY2xpcHBlZCBi
dXQgTk9UIG1hc2tzVG9Cb3VuZHM7IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgdGhlIHBhcmVudCdz
IGNsaXBSZWN0IHJlZ2FyZGxlc3Mgb2YgdGhlIGxheWVyJ3MgYm91bmRzLgorICAgIC8vICAgZ3Jh
bmRDaGlsZDMgLSBwYXJ0aWFsbHkgY2xpcHBlZCBhbmQgbWFza3NUb0JvdW5kczsgdGhlIGNsaXBS
ZWN0IHdpbGwgYmUgdGhlIGludGVyc2VjdGlvbiBvZiBsYXllckJvdW5kcyBhbmQgdGhlIG1hc2sg
cmVnaW9uLgorICAgIC8vICAgZ3JhbmRDaGlsZDQgLSBvdXRzaWRlIHBhcmVudCdzIGNsaXBSZWN0
LCBhbmQgbWFza3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHNob3VsZCBiZSBlbXB0eS4KKyAgICAv
LworICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHRoaXMgd2lsbCBiZSByZXBsYWNlZCBieSBhIGxh
cmdlIG51bWJlciBvZiB0ZXN0cyB0aGF0IHZlcmlmeSB0aGUKKyAgICAvLyAgICAgICAgZmluYWwg
dmlzaWJsZUxheWVyUmVjdCwgd2hpbGUgdGhlIGNsaXBSZWN0IHdpbGwgYmVjb21lIGFuIGluYWNj
ZXNzaWJsZQorICAgIC8vICAgICAgICB0ZW1wb3JhcnkgdmFyaWFibGUgZm9yIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSgpLgorCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGls
ZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBn
cmFuZENoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBncmFuZENoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkNCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworCisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50
LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQxKTsKKyAg
ICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFu
ZENoaWxkMyk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQ0KTsKKworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
NTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGls
ZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQxLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNSwgNSksIEludFNp
emUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3Jh
bmRDaGlsZDIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgxNSwgMTUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQzLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTUs
IDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhncmFuZENoaWxkNC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDQ1LCA0NSksIEludFNpemUoMTAsIDEwKSwg
ZmFsc2UpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgZ3JhbmRD
aGlsZDMtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgZ3JhbmRDaGlsZDQtPnNldE1hc2tz
VG9Cb3VuZHModHJ1ZSk7CisKKyAgICAvLyBGb3JjZSBldmVyeW9uZSB0byBiZSBhIHJlbmRlciBz
dXJmYWNlLgorICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CisgICAgZ3JhbmRDaGlsZDEtPnNl
dE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkMi0+c2V0T3BhY2l0eSgwLjUpOworICAgIGdy
YW5kQ2hpbGQzLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZ3JhbmRDaGlsZDQtPnNldE9wYWNpdHko
MC41KTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVy
TGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1F
OiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4g
Q0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBw
YXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7
CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBJbnRSZWN0IGNsaXBSZWN0MSA9IGdyYW5kQ2hpbGQx
LT5jbGlwUmVjdCgpOworICAgIEludFJlY3QgY2xpcFJlY3QyID0gZ3JhbmRDaGlsZDItPmNsaXBS
ZWN0KCk7CisgICAgSW50UmVjdCBjbGlwUmVjdDMgPSBncmFuZENoaWxkMy0+Y2xpcFJlY3QoKTsK
KyAgICBJbnRSZWN0IGNsaXBSZWN0NCA9IGdyYW5kQ2hpbGQ0LT5jbGlwUmVjdCgpOworCisgICAg
RVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwg
MjApKSwgY2xpcFJlY3QxKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBjbGlwUmVjdDIpOworICAgIEVYUEVDVF9JTlRf
UkVDVF9FUShJbnRSZWN0KEludFBvaW50KDE1LCAxNSksIEludFNpemUoNSwgNSkpLCBjbGlwUmVj
dDMpOworICAgIEVYUEVDVF9UUlVFKGNsaXBSZWN0NC5pc0VtcHR5KCkpOworfQorCitURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVj
dGx5VG9TdXJmYWNlcykKK3sKKyAgICAvLyBWZXJpZnkgdGhhdCByZW5kZXJTdXJmYWNlcyAoYW5k
IHRoZWlyIGxheWVycykgZ2V0IHRoZSBhcHByb3ByaWF0ZSBjbGlwUmVjdHMgd2hlbiB0aGVpciBw
YXJlbnQgbWFza3NUb0JvdW5kcyBpcyB0cnVlLgorICAgIC8vCisgICAgLy8gICBncmFuZENoaWxk
MSAtIGNvbXBsZXRlbHkgaW5zaWRlIHRoZSByZWdpb247IGNsaXBSZWN0IHNob3VsZCBiZSB0aGUg
bWFzayByZWdpb24KKyAgICAvLyAgICAgICAgICAgICAgICAgKGxhcmdlciB0aGFuIHRoaXMgbGF5
ZXIncyBib3VuZHMpLgorICAgIC8vICAgZ3JhbmRDaGlsZDIgLSBwYXJ0aWFsbHkgY2xpcHBlZCBi
dXQgTk9UIG1hc2tzVG9Cb3VuZHM7IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgdGhlCisgICAgLy8g
ICAgICAgICAgICAgICAgIHBhcmVudCdzIGNsaXBSZWN0IHJlZ2FyZGxlc3Mgb2YgdGhlIGxheWVy
J3MgYm91bmRzLgorICAgIC8vICAgZ3JhbmRDaGlsZDMgLSBwYXJ0aWFsbHkgY2xpcHBlZCBhbmQg
bWFza3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHdpbGwgYmUgdGhlCisgICAgLy8gICAgICAgICAg
ICAgICAgIGludGVyc2VjdGlvbiBvZiBsYXllckJvdW5kcyBhbmQgdGhlIG1hc2sgcmVnaW9uLgor
ICAgIC8vICAgZ3JhbmRDaGlsZDQgLSBvdXRzaWRlIHBhcmVudCdzIGNsaXBSZWN0LCBhbmQgbWFz
a3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHNob3VsZAorICAgIC8vICAgICAgICAgICAgICAgICBi
ZSBlbXB0eS4KKyAgICAvLworICAgIC8vICAgVGhlIHJlc3BlY3RpdmUgbGF5ZXJzIGZvciB0aGVz
ZSBzdXJmYWNlcyB3aWxsIGhhdmUgY2xpcFJlY3QgdGhhdCBpcyBhbHNvIGNsYW1wZWQKKyAgICAv
LyAgIGJ5IGRyYXdhYmxlQ29udGVudFJlY3QsIGFuZCB0cmFuc2Zvcm1lZCB0byB0aGVpciBsb2Nh
bCB0YXJnZXQgc3VyZmFjZSBzcGFjZS4KKyAgICAvLworICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5
IHRoaXMgd2lsbCBiZSByZXBsYWNlZCBieSBhIGxhcmdlIG51bWJlciBvZiB0ZXN0cyB0aGF0IHZl
cmlmeSB0aGUKKyAgICAvLyAgICAgICAgZmluYWwgdmlzaWJsZUxheWVyUmVjdCwgd2hpbGUgdGhl
IGNsaXBSZWN0IHdpbGwgYmVjb21lIGFuIGluYWNjZXNzaWJsZQorICAgIC8vICAgICAgICB0ZW1w
b3JhcnkgdmFyaWFibGUgZm9yIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSgp
LgorCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMSA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMiA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxk
MyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBn
cmFuZENoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUxID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUyID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUzID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGU0ID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworCisgICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hp
bGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQxKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGls
ZDIpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMyk7CisgICAgY2hpbGQtPmFkZENo
aWxkKGdyYW5kQ2hpbGQ0KTsKKworICAgIC8vIHRoZSBsZWFmIG5vZGVzIGVuc3VyZSB0aGF0IHRo
ZXNlIGdyYW5kQ2hpbGRyZW4gYmVjb21lIHJlbmRlclN1cmZhY2VzIGZvciB0aGlzIHRlc3QuCisg
ICAgZ3JhbmRDaGlsZDEtPmFkZENoaWxkKGxlYWZOb2RlMSk7CisgICAgZ3JhbmRDaGlsZDItPmFk
ZENoaWxkKGxlYWZOb2RlMik7CisgICAgZ3JhbmRDaGlsZDMtPmFkZENoaWxkKGxlYWZOb2RlMyk7
CisgICAgZ3JhbmRDaGlsZDQtPmFkZENoaWxkKGxlYWZOb2RlNCk7CisKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwg
NTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDUsIDUpLCBJbnRTaXplKDEw
LCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMy5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDE1LCAxNSks
IEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoZ3JhbmRDaGlsZDQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCg0NSwgNDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2RlMS5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGxlYWZOb2RlMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2RlMy5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxlYWZOb2RlNC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCks
IGZhbHNlKTsKKworICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIGdyYW5k
Q2hpbGQzLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIGdyYW5kQ2hpbGQ0LT5zZXRNYXNr
c1RvQm91bmRzKHRydWUpOworCisgICAgLy8gRm9yY2UgZXZlcnlvbmUgdG8gYmUgYSByZW5kZXIg
c3VyZmFjZS4KKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5kQ2hpbGQxLT5z
ZXRPcGFjaXR5KDAuNSk7CisgICAgZ3JhbmRDaGlsZDItPnNldE9wYWNpdHkoMC41KTsKKyAgICBn
cmFuZENoaWxkMy0+c2V0T3BhY2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQ0LT5zZXRPcGFjaXR5
KDAuNSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXll
ckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhN
RTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGlu
IENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAg
cGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91
bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkp
OworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDEtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDItPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDMtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
Ly8gYmVjYXVzZSBncmFuZENoaWxkNCBpcyBlbnRpcmVseSBjbGlwcGVkLCBpdCBpcyBub3QgZXhw
ZWN0ZWQgdG8gaGF2ZSBhIHJlbmRlclN1cmZhY2UuCisKKyAgICBJbnRSZWN0IHN1cmZhY2VDbGlw
MSA9IGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCk7CisgICAgSW50UmVj
dCBzdXJmYWNlQ2xpcDIgPSBncmFuZENoaWxkMi0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgp
OworICAgIEludFJlY3Qgc3VyZmFjZUNsaXAzID0gZ3JhbmRDaGlsZDMtPnJlbmRlclN1cmZhY2Uo
KS0+Y2xpcFJlY3QoKTsKKyAgICBJbnRSZWN0IGxheWVyQ2xpcDEgPSBncmFuZENoaWxkMS0+Y2xp
cFJlY3QoKTsKKyAgICBJbnRSZWN0IGxheWVyQ2xpcDIgPSBncmFuZENoaWxkMi0+Y2xpcFJlY3Qo
KTsKKyAgICBJbnRSZWN0IGxheWVyQ2xpcDMgPSBncmFuZENoaWxkMy0+Y2xpcFJlY3QoKTsKKyAg
ICBJbnRSZWN0IGxheWVyQ2xpcDQgPSBncmFuZENoaWxkNC0+Y2xpcFJlY3QoKTsKKworICAgIC8v
IFN1cmZhY2VzIGFyZSBjbGlwcGVkIGJ5IHRoZWlyIHBhcmVudCwgYnV0IHVuLWFmZmVjdGVkIGJ5
IHRoZSBvd25pbmcgbGF5ZXIncyBtYXNrc1RvQm91bmRzLgorICAgIEVYUEVDVF9JTlRfUkVDVF9F
UShJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCkpLCBzdXJmYWNlQ2xpcDEp
OworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXpl
KDIwLCAyMCkpLCBzdXJmYWNlQ2xpcDIpOworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0
KEludFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCkpLCBzdXJmYWNlQ2xpcDMpOworCisgICAg
Ly8gTGF5ZXJzIGFyZSBjbGlwcGVkLCBhbmQgYWxzbyByZWR1Y2VkIHRvIGRyYXdhYmxlQ29udGVu
dFNpemUgKHdoaWNoIGlzIDEweDEwIGR1ZSB0byBsZWFmTm9kZXMpLgorICAgIEVYUEVDVF9JTlRf
UkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSksIGxheWVy
Q2xpcDEpOworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IEludFNpemUoNSwgNSkpLCBsYXllckNsaXAyKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDUsIDUpKSwgbGF5ZXJDbGlwMyk7CisgICAg
RVhQRUNUX1RSVUUobGF5ZXJDbGlwNC5pc0VtcHR5KCkpOworfQorCiAvLyBGSVhNRToKIC8vIGNv
bnRpbnVlIHdvcmtpbmcgb24gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY4OTQyCiAvLyAgLSBhZGQgYSB0ZXN0IHRvIHZlcmlmeSBjbGlwcGluZyB0aGF0IGNoYW5nZXMg
dGhlICJjZW50ZXIgcG9pbnQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaAppbmRleCAwYjgzZGFjYWJhM2NmZTAxY2FjYTNhYmE1
OWJmNzg3NjRhN2RkMWEwLi43NWU0ODdhNGE3ZWY0NmU3M2I2MjgzYzNmZjQ1MGE1ZTQ1Y2E4NjBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVz
dENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVU
ZXN0Q29tbW9uLmgKQEAgLTI3LDEzICsyNywxOSBAQAogCiBuYW1lc3BhY2UgV2ViS2l0VGVzdHMg
ewogCi0vLyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBmdW5jdGlvbiBzbyB0aGF0IHdlIGdl
dCB1c2VmdWwgbGluZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWlsZWQuCisvLyBUaGVzZSBhcmUg
bWFjcm9zIGluc3RlYWQgb2YgZnVuY3Rpb25zIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51
bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KICNkZWZpbmUgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
ZXhwZWN0ZWQsIGFjdHVhbCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLngoKSwgKGFjdHVhbCkubG9jYXRpb24oKS54
KCkpOyBcCiAgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubG9jYXRpb24oKS55KCksIChh
Y3R1YWwpLmxvY2F0aW9uKCkueSgpKTsgXAogICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
LnNpemUoKS53aWR0aCgpLCAoYWN0dWFsKS5zaXplKCkud2lkdGgoKSk7IFwKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5zaXplKCkuaGVpZ2h0KCksIChhY3R1YWwpLnNpemUoKS5oZWln
aHQoKSkKIAorI2RlZmluZSBFWFBFQ1RfSU5UX1JFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVhbCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLmxvY2F0
aW9uKCkueCgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLngoKSk7ICAgICAgXAorICAgIEVYUEVDVF9F
USgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueSgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLnkoKSk7ICAg
ICAgXAorICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS53aWR0aCgpLCAoYWN0dWFsKS5z
aXplKCkud2lkdGgoKSk7ICAgICAgXAorICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS5o
ZWlnaHQoKSwgKGFjdHVhbCkuc2l6ZSgpLmhlaWdodCgpKQorCiAvLyBUaGlzIGlzIGEgbWFjcm8g
aW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51bWJlcnMg
d2hlcmUgYSB0ZXN0IGZhaWxlZC4KIC8vIEV2ZW4gdGhvdWdoIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHZhbHVlcyBhcmUgZG91YmxlIHByZWNpc2lvbiwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgZmxvYXRp
bmctcG9pbnQgdmFsdWVzIHVzZWQgdGhhdCBhZmZlY3QKIC8vIHRoZSB0cmFuc2Zvcm1zLCBhbmQg
c28gd2Ugb25seSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGluZy1wb2lu
dCBwcmVjaXNpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDFhZTI0OWY1ZTZiZmUyNTllN2I5YzBkMTdjMzlmYzQ0NzA1
ZDY3OC4uZWU1ZjFmZGIwNmQwYWYxMzc1YTBlZjQwYWU5ZjdkNGE4ZGNjZDgyMSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDEyLTAzLTI2ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gbGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGlu
aXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDogbWFya2VkIHRlc3QgYXMgbmVlZGluZyByZWJhc2Vs
aW5pbmcKKwogMjAxMi0wMy0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZXN0U291cmNlTWFwQ291bGROb3RCZUxv
YWRlZCBsb2dzIGRpZmZlcmVudCBlcnJvciBtZXNzYWdlcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1z
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3Rh
dGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0CmluZGV4IDIxZmZhNDg5NDUxZjExYWY2YTQwMGUzN2RhNzljYTIyZjUxYTEzZGIuLjRk
Mzc5NjRjYmMwMjQxOGViNWVlOWJlMmU3NDU4MjdjZDhmNTEwYmEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTQxOTks
NiArNDE5OSwxMCBAQCBCVUdXSzc4NDEyIE1BQyBXSU4gOiBmYXN0L3JlcGFpbnQvc2Nyb2xsLWlu
c2lkZS10YWJsZS1jZWxsLmh0bWwgPSBJTUFHRQogQlVHV0s3ODQxMiBNQUMgV0lOIDogZmFzdC9y
ZXBhaW50L3Njcm9sbC1yZWxhdGl2ZS10YWJsZS1pbnNpZGUtdGFibGUtY2VsbC5odG1sID0gSU1B
R0UKIEJVR1dLNzg0MTIgTUFDIFdJTiA6IGZhc3QvdGFibGUvY2VsbC1wcmVmLXdpZHRoLWludmFs
aWRhdGlvbi5odG1sID0gVEVYVAogCisvLyBOZWVkcyByZWJhc2VsaW5pbmcgYWZ0ZXIgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3LgorLy8gSXQgaXMgY29ycmVj
dCBmb3IgdGhlIHJlZmxlY3RlZCB0ZXh0IHRvIGJlIHZpc2libGUuCitCVUdXSzc0MTQ3IDogY29t
cG9zaXRpbmcvcmVmbGVjdGlvbnMvbmVzdGVkLXJlZmxlY3Rpb24tb24tb3ZlcmZsb3cuaHRtbCA9
IElNQUdFCisKIC8vIE5lZWQgcmViYXNlbGluaW5nLgogQlVHV0szNzI0NCA6IHRhYmxlcy9tb3pp
bGxhL2J1Z3MvYnVnMjcwMzgtMS5odG1sID0gSU1BR0UrVEVYVAogQlVHV0szNzI0NCA6IHRhYmxl
cy9tb3ppbGxhL2J1Z3MvYnVnMjcwMzgtMi5odG1sID0gSU1BR0UrVEVYVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134158</attachid>
            <date>2012-03-27 16:00:54 -0700</date>
            <delta_ts>2012-03-27 19:00:59 -0700</delta_ts>
            <desc>Much simpler fix, addressed reviewer feedback</desc>
            <filename>bug-74147-20120327160053.patch</filename>
            <type>text/plain</type>
            <size>21647</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE5MzE4YmE1NGY1YWE4
ZTg5MDVhNGUwMWRlYzE2ODM4NWMwMDMzZi4uOTQ2MmUxZDBhMjY0ZGExMTJiZWZiMjFhMWIyZGU4
MTE4ZjM1YTBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTI2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
bGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVh
dGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCAzIGFkZGl0aW9uYWwgdW5pdCB0ZXN0czsgTW9kaWZpZWQgZXhpc3Rp
bmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFRoZSBsYXllcidzIGNs
aXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZyBpbmZvcm1hdGlvbiB3YXMgbm90CisgICAgICAg
IGJlaW5nIGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGVkIGEgcmVuZGVyU3VyZmFj
ZS4gKEl0CisgICAgICAgIHdhcywgaG93ZXZlciwgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoZSBy
ZW5kZXJTdXJmYWNlIGl0c2VsZi4pCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHVuaXQgdGVz
dCB0aGF0IHJlcHJvZHVjZXMgdGhhdCB0aGlzIGlzIGFuIGVycm9yLAorICAgICAgICBvdGhlciB1
bml0IHRlc3RzIHRvIHRpZ2h0bHkgdGVzdCB0aGUgdmFsdWUgb2YgY2xpcFJlY3QgYmVpbmcKKyAg
ICAgICAgaW5pdGlhbGl6ZWQsIGFuZCBhZGRzIHRoZSBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFs
aXplIHRoZQorICAgICAgICBjbGlwUmVjdC4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwg
dGhpcyBidWcgd2FzIGNhdXNpbmcgZmxhc2hpbmcgb24gdGFiLXN3aXRjaCBvbgorICAgICAgICB0
aGUgYXBwbGUgaXBob25lIHBhZ2UuIEV2ZW4gd29yc2UsIHdpdGggcGFydGlhbCBzd2FwIGVuYWJs
ZWQsIHRoZQorICAgICAgICBsYXllcnMgd291bGQgc2ltcGx5IGRpc2FwcGVhciwgYmVjYXVzZSB0
aGUgZmlyc3QgZnJhbWUgdGhlCisgICAgICAgIGNsaXBSZWN0IGlzIHVuaW5pdGlhbGl6ZWQgYW5k
IHRoZSBsYXllciBpcyBub3QgZHJhd24sIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIGZyYW1lIG9u
d2FyZHMsIHRoZSBkYW1hZ2UgdHJhY2tlciBjb3JyZWN0bHkgdGhpbmdzIG5vdGhpbmcKKyAgICAg
ICAgaXMgZGFtYWdlZCwgc28gaXQgZG9lc24ndCBkcmF3IHRoYXQgbGF5ZXIgYWdhaW4gdW50aWwg
b3RoZXIgZGFtYWdlCisgICAgICAgIGNhdXNlcyBpdCB0byBiZSByZWRyYXduLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKToKKwogMjAxMi0wMy0yNyAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEZpeCBmaWx0ZXIgY29udGV4dCBjcmVh
dGlvbiB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggYzAzYzIxMjFjMzJkNmRhZjU3MmU4OTA1NTIwM2VkZGE1ZjE0OGY0OC4uYTRhYzc5YWU3ODky
ODhhOThlNmY3NmZjMGQxYTM3MTBjMzU3OTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMy0yNiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIGxheWVyLT5jbGlwUmVjdCgpIGlzIG5v
dCBpbml0aWFsaXplZCBmb3IgbGF5ZXJzIHRoYXQgY3JlYXRlIGEgcmVuZGVyU3VyZmFjZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgMyBtb3Jl
IHVuaXQgdGVzdHMuIE9uZSByZXByb2R1Y2VzIHRoZSBjbGlwUmVjdCBwcm9ibGVtIGluIGFuCisg
ICAgICAgIGludGVncmF0ZWQgbWFubmVyLCB0aGUgb3RoZXIgdHdvIGRpcmVjdGx5IHRlc3QgdGhh
dCBjbGlwUmVjdHMgYXJlCisgICAgICAgIHByb3Blcmx5IGluaXRpYWxpemVkLgorCisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVl
VGVzdENvbW1vbi5oOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorCiAyMDEyLTAzLTI3ICBTdGVw
aGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gRml4IGZpbHRlciBjb250ZXh0IHVzYWdlIGluIHdlYmtpdF91bml0X3Rlc3RzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggYmQyMjE1NGI5MThhN2Rl
NjI4YzNjOTg0NjFlMDY3MmQ0ODFmYmYyOS4uN2E4OGFlODExNGIwODI0NmU2ZjY0MTAxMTM0YzRm
NGEyODlhMTA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CkBAIC0zNzAsNiArMzcwLDEwIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgICAgIC8v
IHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3Jk
aW5hdGUgc3lzdGVtLgogICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChsYXllci0+
cGFyZW50KCkgPyBsYXllci0+cGFyZW50KCktPmNsaXBSZWN0KCkgOiBsYXllci0+Y2xpcFJlY3Qo
KSk7CiAKKyAgICAgICAgLy8gVGhlIGxheWVyJ3MgY2xpcFJlY3QgY2FuIGJlIHJlc2V0IGhlcmUu
IFRoZSByZW5kZXJTdXJmYWNlIHdpbGwgY29ycmVjdGx5IGNsaXAgdGhlIHN1YnRyZWUuCisgICAg
ICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyhmYWxzZSk7CisgICAgICAgIGxheWVyLT5z
ZXRDbGlwUmVjdChJbnRSZWN0KCkpOworCiAgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkp
IHsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihsYXllci0+bWFza0xh
eWVyKCkpOwogICAgICAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJT
dXJmYWNlKHJlbmRlclN1cmZhY2UpOwpAQCAtNDA2LDEzICs0MTAsMTggQEAgc3RhdGljIGJvb2wg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBs
YXllciwgTGF5ZXIKICAgICAgICAgICAgIC8vIExheWVycyB3aXRob3V0IHRoZWlyIG93biByZW5k
ZXJTdXJmYWNlIHdpbGwgcmVuZGVyIGludG8gdGhlIG5lYXJlc3QgYW5jZXN0b3Igc3VyZmFjZS4K
ICAgICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQo
KS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQorICAgIH0KKworICAgIGlmIChs
YXllci0+bWFza3NUb0JvdW5kcygpKSB7CisgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSB0cmFu
c2Zvcm1lZExheWVyUmVjdDsKIAotICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkg
ewotICAgICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0Owor
ICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgYWxyZWFkeSBpbmhlcml0ZWQgYSBjbGlwUmVjdCwgd2Ug
bmVlZCB0byBpbnRlcnNlY3Qgd2l0aCBpdCBiZWZvcmUKKyAgICAgICAgLy8gb3ZlcnJpZGluZyB0
aGUgbGF5ZXIncyBjbGlwUmVjdCBhbmQgdXNlc0xheWVyQ2xpcHBpbmcuCisgICAgICAgIGlmIChs
YXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKICAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2Vj
dChsYXllci0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0Q2xpcFJlY3QoY2xp
cFJlY3QpOwotICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpOwot
ICAgICAgICB9CisKKyAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGNsaXBSZWN0KTsKKyAgICAg
ICAgbGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpOwogICAgIH0KIAogICAgIC8vIE5v
dGUgdGhhdCBhdCB0aGlzIHBvaW50LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpIGlzIG5vdCBuZWNl
c3NhcmlseSB0aGUgc2FtZSBhcyBsb2NhbCB2YXJpYWJsZSBkcmF3VHJhbnNmb3JtLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAKaW5kZXggOWVmZGRmOWZiMWE3ODI1MmEwODA4MGUzN2Q0NWY3YWFiZjhlM2Uz
Ny4uNWUyY2M3ZDg0MmI5ODE2ZTA2ZjY5NzJhODc2YTdhZTM4ZTljYjU3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QuY3BwCkBAIC02MjMsNiArNjIzLDU1IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogICAgIGdyYW5kQ2hpbGQt
PnNldE9wYWNpdHkoMC41KTsKICAgICBncmVhdEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40KTsK
IAorICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsK
KyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVu
IHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXll
clRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQt
PnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkp
OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CisKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisKKyAgICBBU1NFUlRfRVEoMlUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0WzBdLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQtPmlkKCksIHJlbmRlclN1cmZhY2VM
YXllckxpc3RbMV0tPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlc0NyYXNoUmVwcm8pCit7CisgICAgLy8g
VGhpcyBpcyBhIHNpbWlsYXIgc2l0dWF0aW9uIGFzIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJT
dXJmYWNlcywgZXhjZXB0IHRoYXQKKyAgICAvLyBpdCByZXByb2R1Y2VzIGEgY3Jhc2ggYnVnIGh0
dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNjczNC4K
KworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmVhdEdyYW5kQ2hpbGQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxlYWZOb2RlMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxlYWZOb2RlMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZCk7CisgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFuZENoaWxkKTsKKworICAg
IC8vIGxlYWZOb2RlMSBlbnN1cmVzIHRoYXQgcGFyZW50IGFuZCBjaGlsZCBhcmUga2VwdCBvbiB0
aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwKKyAgICAvLyBldmVuIHRob3VnaCBncmFuZENoaWxk
IGFuZCBncmVhdEdyYW5kQ2hpbGQgc2hvdWxkIGJlIGNsaXBwZWQuCisgICAgY2hpbGQtPmFkZENo
aWxkKGxlYWZOb2RlMSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5hZGRDaGlsZChsZWFmTm9kZTIp
OworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDQ1LCA0NSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoZ3JlYXRHcmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAs
IDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUx
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSgyMCwgMjApLCBmYWxzZSk7CisKKyAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsK
KyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNpdHko
MC41KTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40KTsKKwogICAgIC8vIENv
bnRhbWluYXRlIHRoZSBncmFuZENoaWxkIGFuZCBncmVhdEdyYW5kQ2hpbGQncyBjbGlwUmVjdCB0
byByZXByb2R1Y2UgdGhlIGNyYXNoCiAgICAgLy8gYnVnIGZvdW5kIGluIGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNjczNC4gSW4gdGhpcwogICAg
IC8vIGJ1ZywgdGhlIGNsaXBSZWN0IHdhcyBub3QgcmUtY29tcHV0ZWQgZm9yIGxheWVycyB0aGF0
IGNyZWF0ZSBSZW5kZXJTdXJmYWNlcywgYW5kCkBAIC02MzAsOSArNjc5LDYgQEAgVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMp
CiAgICAgLy8gcmVuZGVyU3VyZmFjZSByZW1haW5zIG9uIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCB3aGljaCB2aW9sYXRlcyB0aGUgYXNzdW1wdGlvbgogICAgIC8vIHRoYXQgYW4gZW1wdHkg
cmVuZGVyU3VyZmFjZSB3aWxsIGFsd2F5cyBiZSB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0LCB3
aGljaAogICAgIC8vIHVsdGltYXRlbHkgY2F1c2VkIHRoZSBjcmFzaC4KLSAgICAvLwotICAgIC8v
IEZJWE1FOiBpdCBpcyBhbHNvIHVzZWZ1bCB0byB0ZXN0IHdpdGggdGhpcyBjb21tZW50ZWQgb3V0
LiBFdmVudHVhbGx5IHdlIHNob3VsZAotICAgIC8vIGNyZWF0ZSBzZXZlcmFsIHRlc3QgY2FzZXMg
dGhhdCB0ZXN0IGNsaXBSZWN0L2RyYXdhYmxlQ29udGVudFJlY3QgY29tcHV0YXRpb24uCiAgICAg
Y2hpbGQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgyMCwg
MjApKSk7CiAgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIEludFNpemUoMTIzNCwgMTIzNCkpKTsKIApAQCAtNjUxLDYgKzY5NywxNDggQEAg
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVy
U3VyZmFjZXMpCiAgICAgRVhQRUNUX0VRKGNoaWxkLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0WzFdLT5pZCgpKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvTGF5ZXJzKQoreworICAgIC8vIFZlcmlm
eSB0aGF0IGxheWVycyBnZXQgdGhlIGFwcHJvcHJpYXRlIGNsaXBSZWN0cyB3aGVuIHRoZWlyIHBh
cmVudCBtYXNrc1RvQm91bmRzIGlzIHRydWUuCisgICAgLy8KKyAgICAvLyAgIGdyYW5kQ2hpbGQx
IC0gY29tcGxldGVseSBpbnNpZGUgdGhlIHJlZ2lvbjsgY2xpcFJlY3Qgc2hvdWxkIGJlIHRoZSBt
YXNrIHJlZ2lvbiAobGFyZ2VyIHRoYW4gdGhpcyBsYXllcidzIGJvdW5kcykuCisgICAgLy8gICBn
cmFuZENoaWxkMiAtIHBhcnRpYWxseSBjbGlwcGVkIGJ1dCBOT1QgbWFza3NUb0JvdW5kczsgdGhl
IGNsaXBSZWN0IHNob3VsZCBiZSB0aGUgcGFyZW50J3MgY2xpcFJlY3QgcmVnYXJkbGVzcyBvZiB0
aGUgbGF5ZXIncyBib3VuZHMuCisgICAgLy8gICBncmFuZENoaWxkMyAtIHBhcnRpYWxseSBjbGlw
cGVkIGFuZCBtYXNrc1RvQm91bmRzOyB0aGUgY2xpcFJlY3Qgd2lsbCBiZSB0aGUgaW50ZXJzZWN0
aW9uIG9mIGxheWVyQm91bmRzIGFuZCB0aGUgbWFzayByZWdpb24uCisgICAgLy8gICBncmFuZENo
aWxkNCAtIG91dHNpZGUgcGFyZW50J3MgY2xpcFJlY3QsIGFuZCBtYXNrc1RvQm91bmRzOyB0aGUg
Y2xpcFJlY3Qgc2hvdWxkIGJlIGVtcHR5LgorICAgIC8vCisKKyAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGdyYW5kQ2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQ0ID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBw
YXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEp
OworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMik7CisgICAgY2hpbGQtPmFkZENoaWxk
KGdyYW5kQ2hpbGQzKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDQpOworCisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDEuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCg1LCA1KSwg
SW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhncmFuZENoaWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDE1LCAxNSksIEludFNpemUoMTAsIDEwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDMuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgxNSwgMTUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQ0LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNDUsIDQ1KSwgSW50U2l6ZSgxMCwg
MTApLCBmYWxzZSk7CisKKyAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBn
cmFuZENoaWxkMy0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBncmFuZENoaWxkNC0+c2V0
TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIC8vIEZvcmNlIGV2ZXJ5b25lIHRvIGJlIGEgcmVu
ZGVyIHN1cmZhY2UuCisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC40KTsKKyAgICBncmFuZENoaWxk
MS0+c2V0T3BhY2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRPcGFjaXR5KDAuNSk7Cisg
ICAgZ3JhbmRDaGlsZDMtPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkNC0+c2V0T3Bh
Y2l0eSgwLjUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1
cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15
TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8g
RklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlv
ciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgor
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50Lmdl
dCgpKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQxLT5jbGlwUmVj
dCgpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJ
bnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMi0+Y2xpcFJlY3QoKSk7CisgICAgRVhQRUNUX0lO
VF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSg1LCA1KSksIGdyYW5k
Q2hpbGQzLT5jbGlwUmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxkNC0+Y2xpcFJl
Y3QoKS5pc0VtcHR5KCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKK3sKKyAgICAvLyBW
ZXJpZnkgdGhhdCByZW5kZXJTdXJmYWNlcyAoYW5kIHRoZWlyIGxheWVycykgZ2V0IHRoZSBhcHBy
b3ByaWF0ZSBjbGlwUmVjdHMgd2hlbiB0aGVpciBwYXJlbnQgbWFza3NUb0JvdW5kcyBpcyB0cnVl
LgorICAgIC8vCisgICAgLy8gTGF5ZXJzIHRoYXQgb3duIHJlbmRlclN1cmZhY2VzIChhdCBsZWFz
dCBmb3Igbm93KSBkbyBub3QgaW5oZXJpdCBhbnkgY2xpcFJlY3Q7CisgICAgLy8gaW5zdGVhZCB0
aGUgc3VyZmFjZSB3aWxsIGVuZm9yY2UgdGhlIGNsaXAgZm9yIHRoZSBlbnRpcmUgc3VidHJlZS4g
VGhleSBtYXkgc3RpbGwKKyAgICAvLyBoYXZlIGEgY2xpcFJlY3Qgb2YgdGhlaXIgb3duIGxheWVy
IGJvdW5kcywgaG93ZXZlciwgaWYgbWFza3NUb0JvdW5kcyB3YXMgdHJ1ZS4KKyAgICAvLworCisg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMiA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMyA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENo
aWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUxID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUyID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUzID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGU0ID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworCisgICAgcGFyZW50LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFk
ZENoaWxkKGdyYW5kQ2hpbGQxKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIpOwor
ICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMyk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdy
YW5kQ2hpbGQ0KTsKKworICAgIC8vIHRoZSBsZWFmIG5vZGVzIGVuc3VyZSB0aGF0IHRoZXNlIGdy
YW5kQ2hpbGRyZW4gYmVjb21lIHJlbmRlclN1cmZhY2VzIGZvciB0aGlzIHRlc3QuCisgICAgZ3Jh
bmRDaGlsZDEtPmFkZENoaWxkKGxlYWZOb2RlMSk7CisgICAgZ3JhbmRDaGlsZDItPmFkZENoaWxk
KGxlYWZOb2RlMik7CisgICAgZ3JhbmRDaGlsZDMtPmFkZENoaWxkKGxlYWZOb2RlMyk7CisgICAg
Z3JhbmRDaGlsZDQtPmFkZENoaWxkKGxlYWZOb2RlNCk7CisKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhncmFuZENoaWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDUsIDUpLCBJbnRTaXplKDEwLCAxMCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQyLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMy5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDE1LCAxNSksIEludFNp
emUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3Jh
bmRDaGlsZDQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCg0NSwgNDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2RlMS5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGxlYWZOb2RlMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2RlMy5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGxlYWZOb2RlNC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNl
KTsKKworICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIGdyYW5kQ2hpbGQz
LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIGdyYW5kQ2hpbGQ0LT5zZXRNYXNrc1RvQm91
bmRzKHRydWUpOworCisgICAgLy8gRm9yY2UgZXZlcnlvbmUgdG8gYmUgYSByZW5kZXIgc3VyZmFj
ZS4KKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRPcGFj
aXR5KDAuNSk7CisgICAgZ3JhbmRDaGlsZDItPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENo
aWxkMy0+c2V0T3BhY2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQ0LT5zZXRPcGFjaXR5KDAuNSk7
CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7
CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hl
biB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5
ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50
LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOworCisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOworCisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDMtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGdyYW5kQ2hpbGQ0LT5yZW5kZXJTdXJmYWNlKCkpOyAvLyBCZWNhdXNlIGdyYW5kQ2hp
bGQ0IGlzIGVudGlyZWx5IGNsaXBwZWQsIGl0IGlzIGV4cGVjdGVkIHRvIG5vdCBoYXZlIGEgcmVu
ZGVyU3VyZmFjZS4KKworICAgIC8vIFN1cmZhY2VzIGFyZSBjbGlwcGVkIGJ5IHRoZWlyIHBhcmVu
dCwgYnV0IHVuLWFmZmVjdGVkIGJ5IHRoZSBvd25pbmcgbGF5ZXIncyBtYXNrc1RvQm91bmRzLgor
ICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDIw
LCAyMCkpLCBncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpKTsKKyAgICBF
WFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjAp
KSwgZ3JhbmRDaGlsZDItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSk7CisgICAgRVhQRUNU
X0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSksIGdy
YW5kQ2hpbGQzLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCkpOworCisgICAgLy8gTGF5ZXJz
IGRvIG5vdCBpbmhlcml0IHRoZSBjbGlwUmVjdCBmcm9tIHRoZWlyIG93bmVkIHN1cmZhY2VzLCBi
dXQgaWYgbWFza3NUb0JvdW5kcyBpcyB0cnVlLCB0aGV5IGRvIGNyZWF0ZSB0aGVpciBvd24gY2xp
cFJlY3QuCisgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQxLT51c2VzTGF5ZXJDbGlwcGluZygp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDItPnVzZXNMYXllckNsaXBwaW5nKCkpOwor
ICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGQzLT51c2VzTGF5ZXJDbGlwcGluZygpKTsKKyAgICBF
WFBFQ1RfVFJVRShncmFuZENoaWxkNC0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Cit9CisKIHN0YXRp
YyBpbnQgYWRkT3BhY2l0eUFuaW1hdGlvblRvTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGZs
b2F0IHN0YXJ0VmFsdWUsIGZsb2F0IGVuZFZhbHVlLCBkb3VibGUgZHVyYXRpb24pCiB7CiAgICAg
c3RhdGljIGludCBpZCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaAppbmRleCAwYjgzZGFjYWJhM2NmZTAxY2FjYTNhYmE1
OWJmNzg3NjRhN2RkMWEwLi43NWU0ODdhNGE3ZWY0NmU3M2I2MjgzYzNmZjQ1MGE1ZTQ1Y2E4NjBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVz
dENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVU
ZXN0Q29tbW9uLmgKQEAgLTI3LDEzICsyNywxOSBAQAogCiBuYW1lc3BhY2UgV2ViS2l0VGVzdHMg
ewogCi0vLyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBmdW5jdGlvbiBzbyB0aGF0IHdlIGdl
dCB1c2VmdWwgbGluZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWlsZWQuCisvLyBUaGVzZSBhcmUg
bWFjcm9zIGluc3RlYWQgb2YgZnVuY3Rpb25zIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51
bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KICNkZWZpbmUgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
ZXhwZWN0ZWQsIGFjdHVhbCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLngoKSwgKGFjdHVhbCkubG9jYXRpb24oKS54
KCkpOyBcCiAgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubG9jYXRpb24oKS55KCksIChh
Y3R1YWwpLmxvY2F0aW9uKCkueSgpKTsgXAogICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
LnNpemUoKS53aWR0aCgpLCAoYWN0dWFsKS5zaXplKCkud2lkdGgoKSk7IFwKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5zaXplKCkuaGVpZ2h0KCksIChhY3R1YWwpLnNpemUoKS5oZWln
aHQoKSkKIAorI2RlZmluZSBFWFBFQ1RfSU5UX1JFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVhbCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLmxvY2F0
aW9uKCkueCgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLngoKSk7ICAgICAgXAorICAgIEVYUEVDVF9F
USgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueSgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLnkoKSk7ICAg
ICAgXAorICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS53aWR0aCgpLCAoYWN0dWFsKS5z
aXplKCkud2lkdGgoKSk7ICAgICAgXAorICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS5o
ZWlnaHQoKSwgKGFjdHVhbCkuc2l6ZSgpLmhlaWdodCgpKQorCiAvLyBUaGlzIGlzIGEgbWFjcm8g
aW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51bWJlcnMg
d2hlcmUgYSB0ZXN0IGZhaWxlZC4KIC8vIEV2ZW4gdGhvdWdoIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHZhbHVlcyBhcmUgZG91YmxlIHByZWNpc2lvbiwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgZmxvYXRp
bmctcG9pbnQgdmFsdWVzIHVzZWQgdGhhdCBhZmZlY3QKIC8vIHRoZSB0cmFuc2Zvcm1zLCBhbmQg
c28gd2Ugb25seSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGluZy1wb2lu
dCBwcmVjaXNpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDFhZTI0OWY1ZTZiZmUyNTllN2I5YzBkMTdjMzlmYzQ0NzA1
ZDY3OC4uZWU1ZjFmZGIwNmQwYWYxMzc1YTBlZjQwYWU5ZjdkNGE4ZGNjZDgyMSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDEyLTAzLTI2ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gbGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGlu
aXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDogbWFya2VkIHRlc3QgYXMgbmVlZGluZyByZWJhc2Vs
aW5pbmcKKwogMjAxMi0wMy0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZXN0U291cmNlTWFwQ291bGROb3RCZUxv
YWRlZCBsb2dzIGRpZmZlcmVudCBlcnJvciBtZXNzYWdlcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1z
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3Rh
dGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0CmluZGV4IDIxZmZhNDg5NDUxZjExYWY2YTQwMGUzN2RhNzljYTIyZjUxYTEzZGIuLjRk
Mzc5NjRjYmMwMjQxOGViNWVlOWJlMmU3NDU4MjdjZDhmNTEwYmEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTQxOTks
NiArNDE5OSwxMCBAQCBCVUdXSzc4NDEyIE1BQyBXSU4gOiBmYXN0L3JlcGFpbnQvc2Nyb2xsLWlu
c2lkZS10YWJsZS1jZWxsLmh0bWwgPSBJTUFHRQogQlVHV0s3ODQxMiBNQUMgV0lOIDogZmFzdC9y
ZXBhaW50L3Njcm9sbC1yZWxhdGl2ZS10YWJsZS1pbnNpZGUtdGFibGUtY2VsbC5odG1sID0gSU1B
R0UKIEJVR1dLNzg0MTIgTUFDIFdJTiA6IGZhc3QvdGFibGUvY2VsbC1wcmVmLXdpZHRoLWludmFs
aWRhdGlvbi5odG1sID0gVEVYVAogCisvLyBOZWVkcyByZWJhc2VsaW5pbmcgYWZ0ZXIgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3LgorLy8gSXQgaXMgY29ycmVj
dCBmb3IgdGhlIHJlZmxlY3RlZCB0ZXh0IHRvIGJlIHZpc2libGUuCitCVUdXSzc0MTQ3IDogY29t
cG9zaXRpbmcvcmVmbGVjdGlvbnMvbmVzdGVkLXJlZmxlY3Rpb24tb24tb3ZlcmZsb3cuaHRtbCA9
IElNQUdFCisKIC8vIE5lZWQgcmViYXNlbGluaW5nLgogQlVHV0szNzI0NCA6IHRhYmxlcy9tb3pp
bGxhL2J1Z3MvYnVnMjcwMzgtMS5odG1sID0gSU1BR0UrVEVYVAogQlVHV0szNzI0NCA6IHRhYmxl
cy9tb3ppbGxhL2J1Z3MvYnVnMjcwMzgtMi5odG1sID0gSU1BR0UrVEVYVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134198</attachid>
            <date>2012-03-27 19:01:07 -0700</date>
            <delta_ts>2012-03-28 11:07:14 -0700</delta_ts>
            <desc>Same patch but including the occlusion tracker fix</desc>
            <filename>bug-74147-20120327190106.patch</filename>
            <type>text/plain</type>
            <size>22574</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE5MzE4YmE1NGY1YWE4
ZTg5MDVhNGUwMWRlYzE2ODM4NWMwMDMzZi4uOTQ2MmUxZDBhMjY0ZGExMTJiZWZiMjFhMWIyZGU4
MTE4ZjM1YTBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTI2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
bGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVh
dGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCAzIGFkZGl0aW9uYWwgdW5pdCB0ZXN0czsgTW9kaWZpZWQgZXhpc3Rp
bmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFRoZSBsYXllcidzIGNs
aXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZyBpbmZvcm1hdGlvbiB3YXMgbm90CisgICAgICAg
IGJlaW5nIGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGVkIGEgcmVuZGVyU3VyZmFj
ZS4gKEl0CisgICAgICAgIHdhcywgaG93ZXZlciwgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoZSBy
ZW5kZXJTdXJmYWNlIGl0c2VsZi4pCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHVuaXQgdGVz
dCB0aGF0IHJlcHJvZHVjZXMgdGhhdCB0aGlzIGlzIGFuIGVycm9yLAorICAgICAgICBvdGhlciB1
bml0IHRlc3RzIHRvIHRpZ2h0bHkgdGVzdCB0aGUgdmFsdWUgb2YgY2xpcFJlY3QgYmVpbmcKKyAg
ICAgICAgaW5pdGlhbGl6ZWQsIGFuZCBhZGRzIHRoZSBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFs
aXplIHRoZQorICAgICAgICBjbGlwUmVjdC4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwg
dGhpcyBidWcgd2FzIGNhdXNpbmcgZmxhc2hpbmcgb24gdGFiLXN3aXRjaCBvbgorICAgICAgICB0
aGUgYXBwbGUgaXBob25lIHBhZ2UuIEV2ZW4gd29yc2UsIHdpdGggcGFydGlhbCBzd2FwIGVuYWJs
ZWQsIHRoZQorICAgICAgICBsYXllcnMgd291bGQgc2ltcGx5IGRpc2FwcGVhciwgYmVjYXVzZSB0
aGUgZmlyc3QgZnJhbWUgdGhlCisgICAgICAgIGNsaXBSZWN0IGlzIHVuaW5pdGlhbGl6ZWQgYW5k
IHRoZSBsYXllciBpcyBub3QgZHJhd24sIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIGZyYW1lIG9u
d2FyZHMsIHRoZSBkYW1hZ2UgdHJhY2tlciBjb3JyZWN0bHkgdGhpbmdzIG5vdGhpbmcKKyAgICAg
ICAgaXMgZGFtYWdlZCwgc28gaXQgZG9lc24ndCBkcmF3IHRoYXQgbGF5ZXIgYWdhaW4gdW50aWwg
b3RoZXIgZGFtYWdlCisgICAgICAgIGNhdXNlcyBpdCB0byBiZSByZWRyYXduLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKToKKwogMjAxMi0wMy0yNyAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEZpeCBmaWx0ZXIgY29udGV4dCBjcmVh
dGlvbiB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggYzAzYzIxMjFjMzJkNmRhZjU3MmU4OTA1NTIwM2VkZGE1ZjE0OGY0OC4uYTRhYzc5YWU3ODky
ODhhOThlNmY3NmZjMGQxYTM3MTBjMzU3OTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMy0yNiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIGxheWVyLT5jbGlwUmVjdCgpIGlzIG5v
dCBpbml0aWFsaXplZCBmb3IgbGF5ZXJzIHRoYXQgY3JlYXRlIGEgcmVuZGVyU3VyZmFjZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgMyBtb3Jl
IHVuaXQgdGVzdHMuIE9uZSByZXByb2R1Y2VzIHRoZSBjbGlwUmVjdCBwcm9ibGVtIGluIGFuCisg
ICAgICAgIGludGVncmF0ZWQgbWFubmVyLCB0aGUgb3RoZXIgdHdvIGRpcmVjdGx5IHRlc3QgdGhh
dCBjbGlwUmVjdHMgYXJlCisgICAgICAgIHByb3Blcmx5IGluaXRpYWxpemVkLgorCisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVl
VGVzdENvbW1vbi5oOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorCiAyMDEyLTAzLTI3ICBTdGVw
aGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gRml4IGZpbHRlciBjb250ZXh0IHVzYWdlIGluIHdlYmtpdF91bml0X3Rlc3RzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggYmQyMjE1NGI5MThhN2Rl
NjI4YzNjOTg0NjFlMDY3MmQ0ODFmYmYyOS4uN2E4OGFlODExNGIwODI0NmU2ZjY0MTAxMTM0YzRm
NGEyODlhMTA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CkBAIC0zNzAsNiArMzcwLDEwIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgICAgIC8v
IHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3Jk
aW5hdGUgc3lzdGVtLgogICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRDbGlwUmVjdChsYXllci0+
cGFyZW50KCkgPyBsYXllci0+cGFyZW50KCktPmNsaXBSZWN0KCkgOiBsYXllci0+Y2xpcFJlY3Qo
KSk7CiAKKyAgICAgICAgLy8gVGhlIGxheWVyJ3MgY2xpcFJlY3QgY2FuIGJlIHJlc2V0IGhlcmUu
IFRoZSByZW5kZXJTdXJmYWNlIHdpbGwgY29ycmVjdGx5IGNsaXAgdGhlIHN1YnRyZWUuCisgICAg
ICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyhmYWxzZSk7CisgICAgICAgIGxheWVyLT5z
ZXRDbGlwUmVjdChJbnRSZWN0KCkpOworCiAgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkp
IHsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihsYXllci0+bWFza0xh
eWVyKCkpOwogICAgICAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJT
dXJmYWNlKHJlbmRlclN1cmZhY2UpOwpAQCAtNDA2LDEzICs0MTAsMTggQEAgc3RhdGljIGJvb2wg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBs
YXllciwgTGF5ZXIKICAgICAgICAgICAgIC8vIExheWVycyB3aXRob3V0IHRoZWlyIG93biByZW5k
ZXJTdXJmYWNlIHdpbGwgcmVuZGVyIGludG8gdGhlIG5lYXJlc3QgYW5jZXN0b3Igc3VyZmFjZS4K
ICAgICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQo
KS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQorICAgIH0KKworICAgIGlmIChs
YXllci0+bWFza3NUb0JvdW5kcygpKSB7CisgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSB0cmFu
c2Zvcm1lZExheWVyUmVjdDsKIAotICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkg
ewotICAgICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0Owor
ICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgYWxyZWFkeSBpbmhlcml0ZWQgYSBjbGlwUmVjdCwgd2Ug
bmVlZCB0byBpbnRlcnNlY3Qgd2l0aCBpdCBiZWZvcmUKKyAgICAgICAgLy8gb3ZlcnJpZGluZyB0
aGUgbGF5ZXIncyBjbGlwUmVjdCBhbmQgdXNlc0xheWVyQ2xpcHBpbmcuCisgICAgICAgIGlmIChs
YXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKICAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2Vj
dChsYXllci0+Y2xpcFJlY3QoKSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0Q2xpcFJlY3QoY2xp
cFJlY3QpOwotICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpOwot
ICAgICAgICB9CisKKyAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGNsaXBSZWN0KTsKKyAgICAg
ICAgbGF5ZXItPnNldFVzZXNMYXllckNsaXBwaW5nKHRydWUpOwogICAgIH0KIAogICAgIC8vIE5v
dGUgdGhhdCBhdCB0aGlzIHBvaW50LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpIGlzIG5vdCBuZWNl
c3NhcmlseSB0aGUgc2FtZSBhcyBsb2NhbCB2YXJpYWJsZSBkcmF3VHJhbnNmb3JtLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2Ns
dXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKaW5kZXggYzQwODJmZTk2YWUxYTAxM2VlNDYw
NzBkODkwZDI4Y2E5ZTY3Yjk3Ny4uZjRiMjM0OTA2M2QzM2YxYzA5OGMxY2JlYzYzYTQ4YThmN2Rl
ZmUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCkBAIC0zNDAsOCAr
MzQwLDcgQEAgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVy
U3VyZmFjZVR5cGU+OjpsYXllclNjaXNzb3JSZWN0SW4KIHsKICAgICBjb25zdCBSZW5kZXJTdXJm
YWNlVHlwZSogdGFyZ2V0U3VyZmFjZSA9IG1fc3RhY2subGFzdCgpLnN1cmZhY2U7CiAgICAgRmxv
YXRSZWN0IHRvdGFsU2Npc3NvciA9IHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAg
Ly8gRklYTUU6IGxheWVyLT5jbGlwUmVjdCgpIGFuZCBsYXllci0+dXNlc0xheWVyQ2xpcHBpbmco
KSBpcyBjaGFuZ2luZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgw
NjIyCi0gICAgaWYgKCFsYXllci0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkpCisgICAgaWYgKGxheWVy
LT51c2VzTGF5ZXJDbGlwcGluZygpKQogICAgICAgICB0b3RhbFNjaXNzb3IuaW50ZXJzZWN0KGxh
eWVyLT5jbGlwUmVjdCgpKTsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0b3RhbFNjaXNz
b3IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggOWVmZGRmOWZiMWE3ODI1MmEwODA4MGUz
N2Q0NWY3YWFiZjhlM2UzNy4uNWUyY2M3ZDg0MmI5ODE2ZTA2ZjY5NzJhODc2YTdhZTM4ZTljYjU3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC02MjMsNiArNjIzLDU1IEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQog
ICAgIGdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC41KTsKICAgICBncmVhdEdyYW5kQ2hpbGQtPnNl
dE9wYWNpdHkoMC40KTsKIAorICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAg
IC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVo
YXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRv
by4KKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dC5nZXQoKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBBU1NFUlRfRVEoMlUsIHJlbmRlclN1
cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5pZCgpLCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoY2hpbGQtPmlkKCks
IHJlbmRlclN1cmZhY2VMYXllckxpc3RbMV0tPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlc0NyYXNoUmVw
cm8pCit7CisgICAgLy8gVGhpcyBpcyBhIHNpbWlsYXIgc2l0dWF0aW9uIGFzIHZlcmlmeUNsaXBS
ZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcywgZXhjZXB0IHRoYXQKKyAgICAvLyBpdCByZXByb2R1Y2Vz
IGEgY3Jhc2ggYnVnIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0
YWlsP2lkPTEwNjczNC4KKworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmVhdEdy
YW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMSA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMiA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+
YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFu
ZENoaWxkKTsKKworICAgIC8vIGxlYWZOb2RlMSBlbnN1cmVzIHRoYXQgcGFyZW50IGFuZCBjaGls
ZCBhcmUga2VwdCBvbiB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwKKyAgICAvLyBldmVuIHRo
b3VnaCBncmFuZENoaWxkIGFuZCBncmVhdEdyYW5kQ2hpbGQgc2hvdWxkIGJlIGNsaXBwZWQuCisg
ICAgY2hpbGQtPmFkZENoaWxkKGxlYWZOb2RlMSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5hZGRD
aGlsZChsZWFmTm9kZTIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
MjAsIDIwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRD
aGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDQ1LCA0NSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JlYXRHcmFuZENoaWxkLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGVhZk5vZGUxLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApLCBmYWxzZSk7CisKKyAgICBjaGlsZC0+c2V0TWFza3NU
b0JvdW5kcyh0cnVlKTsKKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5kQ2hp
bGQtPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmVhdEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40
KTsKKwogICAgIC8vIENvbnRhbWluYXRlIHRoZSBncmFuZENoaWxkIGFuZCBncmVhdEdyYW5kQ2hp
bGQncyBjbGlwUmVjdCB0byByZXByb2R1Y2UgdGhlIGNyYXNoCiAgICAgLy8gYnVnIGZvdW5kIGlu
IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNjcz
NC4gSW4gdGhpcwogICAgIC8vIGJ1ZywgdGhlIGNsaXBSZWN0IHdhcyBub3QgcmUtY29tcHV0ZWQg
Zm9yIGxheWVycyB0aGF0IGNyZWF0ZSBSZW5kZXJTdXJmYWNlcywgYW5kCkBAIC02MzAsOSArNjc5
LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxz
UmVuZGVyU3VyZmFjZXMpCiAgICAgLy8gcmVuZGVyU3VyZmFjZSByZW1haW5zIG9uIHRoZSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCB3aGljaCB2aW9sYXRlcyB0aGUgYXNzdW1wdGlvbgogICAgIC8v
IHRoYXQgYW4gZW1wdHkgcmVuZGVyU3VyZmFjZSB3aWxsIGFsd2F5cyBiZSB0aGUgbGFzdCBpdGVt
IG9uIHRoZSBsaXN0LCB3aGljaAogICAgIC8vIHVsdGltYXRlbHkgY2F1c2VkIHRoZSBjcmFzaC4K
LSAgICAvLwotICAgIC8vIEZJWE1FOiBpdCBpcyBhbHNvIHVzZWZ1bCB0byB0ZXN0IHdpdGggdGhp
cyBjb21tZW50ZWQgb3V0LiBFdmVudHVhbGx5IHdlIHNob3VsZAotICAgIC8vIGNyZWF0ZSBzZXZl
cmFsIHRlc3QgY2FzZXMgdGhhdCB0ZXN0IGNsaXBSZWN0L2RyYXdhYmxlQ29udGVudFJlY3QgY29t
cHV0YXRpb24uCiAgICAgY2hpbGQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZSgyMCwgMjApKSk7CiAgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRDbGlwUmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTIzNCwgMTIzNCkpKTsKIApAQCAtNjUx
LDYgKzY5NywxNDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlw
UmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAgICAgRVhQRUNUX0VRKGNoaWxkLT5pZCgpLCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvTGF5ZXJzKQor
eworICAgIC8vIFZlcmlmeSB0aGF0IGxheWVycyBnZXQgdGhlIGFwcHJvcHJpYXRlIGNsaXBSZWN0
cyB3aGVuIHRoZWlyIHBhcmVudCBtYXNrc1RvQm91bmRzIGlzIHRydWUuCisgICAgLy8KKyAgICAv
LyAgIGdyYW5kQ2hpbGQxIC0gY29tcGxldGVseSBpbnNpZGUgdGhlIHJlZ2lvbjsgY2xpcFJlY3Qg
c2hvdWxkIGJlIHRoZSBtYXNrIHJlZ2lvbiAobGFyZ2VyIHRoYW4gdGhpcyBsYXllcidzIGJvdW5k
cykuCisgICAgLy8gICBncmFuZENoaWxkMiAtIHBhcnRpYWxseSBjbGlwcGVkIGJ1dCBOT1QgbWFz
a3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHNob3VsZCBiZSB0aGUgcGFyZW50J3MgY2xpcFJlY3Qg
cmVnYXJkbGVzcyBvZiB0aGUgbGF5ZXIncyBib3VuZHMuCisgICAgLy8gICBncmFuZENoaWxkMyAt
IHBhcnRpYWxseSBjbGlwcGVkIGFuZCBtYXNrc1RvQm91bmRzOyB0aGUgY2xpcFJlY3Qgd2lsbCBi
ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIGxheWVyQm91bmRzIGFuZCB0aGUgbWFzayByZWdpb24uCisg
ICAgLy8gICBncmFuZENoaWxkNCAtIG91dHNpZGUgcGFyZW50J3MgY2xpcFJlY3QsIGFuZCBtYXNr
c1RvQm91bmRzOyB0aGUgY2xpcFJlY3Qgc2hvdWxkIGJlIGVtcHR5LgorICAgIC8vCisKKyAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQzID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQ0
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hp
bGQoZ3JhbmRDaGlsZDEpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMik7CisgICAg
Y2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQzKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZDQpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDEuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCg1LCA1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDE1LCAxNSksIEludFNpemUo
MTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRD
aGlsZDMuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgxNSwgMTUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQ0LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNDUsIDQ1
KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisKKyAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5k
cyh0cnVlKTsKKyAgICBncmFuZENoaWxkMy0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBn
cmFuZENoaWxkNC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIC8vIEZvcmNlIGV2ZXJ5
b25lIHRvIGJlIGEgcmVuZGVyIHN1cmZhY2UuCisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC40KTsK
KyAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRP
cGFjaXR5KDAuNSk7CisgICAgZ3JhbmRDaGlsZDMtPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFu
ZENoaWxkNC0+c2V0T3BhY2l0eSgwLjUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lh
bCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXgg
aXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocGFyZW50LmdldCgpKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIEVYUEVDVF9JTlRf
UkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGdyYW5k
Q2hpbGQxLT5jbGlwUmVjdCgpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMi0+Y2xpcFJlY3QoKSk7
CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMTUsIDE1KSwgSW50U2l6
ZSg1LCA1KSksIGdyYW5kQ2hpbGQzLT5jbGlwUmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRShncmFu
ZENoaWxkNC0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNl
cykKK3sKKyAgICAvLyBWZXJpZnkgdGhhdCByZW5kZXJTdXJmYWNlcyAoYW5kIHRoZWlyIGxheWVy
cykgZ2V0IHRoZSBhcHByb3ByaWF0ZSBjbGlwUmVjdHMgd2hlbiB0aGVpciBwYXJlbnQgbWFza3NU
b0JvdW5kcyBpcyB0cnVlLgorICAgIC8vCisgICAgLy8gTGF5ZXJzIHRoYXQgb3duIHJlbmRlclN1
cmZhY2VzIChhdCBsZWFzdCBmb3Igbm93KSBkbyBub3QgaW5oZXJpdCBhbnkgY2xpcFJlY3Q7Cisg
ICAgLy8gaW5zdGVhZCB0aGUgc3VyZmFjZSB3aWxsIGVuZm9yY2UgdGhlIGNsaXAgZm9yIHRoZSBl
bnRpcmUgc3VidHJlZS4gVGhleSBtYXkgc3RpbGwKKyAgICAvLyBoYXZlIGEgY2xpcFJlY3Qgb2Yg
dGhlaXIgb3duIGxheWVyIGJvdW5kcywgaG93ZXZlciwgaWYgbWFza3NUb0JvdW5kcyB3YXMgdHJ1
ZS4KKyAgICAvLworCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMSA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxk
MiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBn
cmFuZENoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBncmFuZENoaWxkNCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUxID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUyID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGUzID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5vZGU0ID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworCisgICAgcGFy
ZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7
CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQxKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQo
Z3JhbmRDaGlsZDIpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMyk7CisgICAgY2hp
bGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQ0KTsKKworICAgIC8vIHRoZSBsZWFmIG5vZGVzIGVuc3Vy
ZSB0aGF0IHRoZXNlIGdyYW5kQ2hpbGRyZW4gYmVjb21lIHJlbmRlclN1cmZhY2VzIGZvciB0aGlz
IHRlc3QuCisgICAgZ3JhbmRDaGlsZDEtPmFkZENoaWxkKGxlYWZOb2RlMSk7CisgICAgZ3JhbmRD
aGlsZDItPmFkZENoaWxkKGxlYWZOb2RlMik7CisgICAgZ3JhbmRDaGlsZDMtPmFkZENoaWxkKGxl
YWZOb2RlMyk7CisgICAgZ3JhbmRDaGlsZDQtPmFkZENoaWxkKGxlYWZOb2RlNCk7CisKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Y2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDUsIDUpLCBJ
bnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGdyYW5kQ2hpbGQyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMy5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDE1LCAxNSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCg0NSwgNDUpLCBJbnRTaXplKDEwLCAx
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2RlMS5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2RlMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEw
LCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2Rl
My5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2RlNC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDEwLCAxMCksIGZhbHNlKTsKKworICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwor
ICAgIGdyYW5kQ2hpbGQzLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIGdyYW5kQ2hpbGQ0
LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgLy8gRm9yY2UgZXZlcnlvbmUgdG8gYmUg
YSByZW5kZXIgc3VyZmFjZS4KKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5k
Q2hpbGQxLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZ3JhbmRDaGlsZDItPnNldE9wYWNpdHkoMC41
KTsKKyAgICBncmFuZENoaWxkMy0+c2V0T3BhY2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQ0LT5z
ZXRPcGFjaXR5KDAuNSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
ZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAg
ICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJl
aGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0
b28uCisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBh
cmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJl
bnQuZ2V0KCkpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGls
ZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDItPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDMtPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQ0LT5yZW5kZXJTdXJmYWNlKCkpOyAvLyBC
ZWNhdXNlIGdyYW5kQ2hpbGQ0IGlzIGVudGlyZWx5IGNsaXBwZWQsIGl0IGlzIGV4cGVjdGVkIHRv
IG5vdCBoYXZlIGEgcmVuZGVyU3VyZmFjZS4KKworICAgIC8vIFN1cmZhY2VzIGFyZSBjbGlwcGVk
IGJ5IHRoZWlyIHBhcmVudCwgYnV0IHVuLWFmZmVjdGVkIGJ5IHRoZSBvd25pbmcgbGF5ZXIncyBt
YXNrc1RvQm91bmRzLgorICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDAs
IDApLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5jbGlw
UmVjdCgpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwg
SW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDItPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3Qo
KSk7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNp
emUoMjAsIDIwKSksIGdyYW5kQ2hpbGQzLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCkpOwor
CisgICAgLy8gTGF5ZXJzIGRvIG5vdCBpbmhlcml0IHRoZSBjbGlwUmVjdCBmcm9tIHRoZWlyIG93
bmVkIHN1cmZhY2VzLCBidXQgaWYgbWFza3NUb0JvdW5kcyBpcyB0cnVlLCB0aGV5IGRvIGNyZWF0
ZSB0aGVpciBvd24gY2xpcFJlY3QuCisgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQxLT51c2Vz
TGF5ZXJDbGlwcGluZygpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDItPnVzZXNMYXll
ckNsaXBwaW5nKCkpOworICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGQzLT51c2VzTGF5ZXJDbGlw
cGluZygpKTsKKyAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxkNC0+dXNlc0xheWVyQ2xpcHBpbmco
KSk7Cit9CisKIHN0YXRpYyBpbnQgYWRkT3BhY2l0eUFuaW1hdGlvblRvTGF5ZXIoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIGZsb2F0IHN0YXJ0VmFsdWUsIGZsb2F0IGVuZFZhbHVlLCBkb3VibGUgZHVy
YXRpb24pCiB7CiAgICAgc3RhdGljIGludCBpZCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaAppbmRleCAwYjgzZGFjYWJh
M2NmZTAxY2FjYTNhYmE1OWJmNzg3NjRhN2RkMWEwLi43NWU0ODdhNGE3ZWY0NmU3M2I2MjgzYzNm
ZjQ1MGE1ZTQ1Y2E4NjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgKQEAgLTI3LDEzICsyNywxOSBAQAogCiBuYW1lc3Bh
Y2UgV2ViS2l0VGVzdHMgewogCi0vLyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBmdW5jdGlv
biBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGluZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWlsZWQu
CisvLyBUaGVzZSBhcmUgbWFjcm9zIGluc3RlYWQgb2YgZnVuY3Rpb25zIHNvIHRoYXQgd2UgZ2V0
IHVzZWZ1bCBsaW5lIG51bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KICNkZWZpbmUgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVhbCkgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLngoKSwgKGFjdHVh
bCkubG9jYXRpb24oKS54KCkpOyBcCiAgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubG9j
YXRpb24oKS55KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueSgpKTsgXAogICAgIEVYUEVDVF9GTE9B
VF9FUSgoZXhwZWN0ZWQpLnNpemUoKS53aWR0aCgpLCAoYWN0dWFsKS5zaXplKCkud2lkdGgoKSk7
IFwKICAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5zaXplKCkuaGVpZ2h0KCksIChhY3R1
YWwpLnNpemUoKS5oZWlnaHQoKSkKIAorI2RlZmluZSBFWFBFQ1RfSU5UX1JFQ1RfRVEoZXhwZWN0
ZWQsIGFjdHVhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVYUEVDVF9FUSgo
ZXhwZWN0ZWQpLmxvY2F0aW9uKCkueCgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLngoKSk7ICAgICAg
XAorICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueSgpLCAoYWN0dWFsKS5sb2Nh
dGlvbigpLnkoKSk7ICAgICAgXAorICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS53aWR0
aCgpLCAoYWN0dWFsKS5zaXplKCkud2lkdGgoKSk7ICAgICAgXAorICAgIEVYUEVDVF9FUSgoZXhw
ZWN0ZWQpLnNpemUoKS5oZWlnaHQoKSwgKGFjdHVhbCkuc2l6ZSgpLmhlaWdodCgpKQorCiAvLyBU
aGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1
bCBsaW5lIG51bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KIC8vIEV2ZW4gdGhvdWdoIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHZhbHVlcyBhcmUgZG91YmxlIHByZWNpc2lvbiwgdGhlcmUgYXJlIG1h
bnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQgdGhhdCBhZmZlY3QKIC8vIHRoZSB0
cmFuc2Zvcm1zLCBhbmQgc28gd2Ugb25seSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0
byBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDFhZTI0OWY1ZTZiZmUyNTllN2I5
YzBkMTdjMzlmYzQ0NzA1ZDY3OC4uZWU1ZjFmZGIwNmQwYWYxMzc1YTBlZjQwYWU5ZjdkNGE4ZGNj
ZDgyMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAzLTI2ICBTaGF3biBTaW5naCAgPHNo
YXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gbGF5ZXItPmNsaXBS
ZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGUgYSByZW5kZXJT
dXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDogbWFya2VkIHRlc3QgYXMg
bmVlZGluZyByZWJhc2VsaW5pbmcKKwogMjAxMi0wMy0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9k
aXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZXN0U291cmNl
TWFwQ291bGROb3RCZUxvYWRlZCBsb2dzIGRpZmZlcmVudCBlcnJvciBtZXNzYWdlcyBvbiBkaWZm
ZXJlbnQgcGxhdGZvcm1zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IDIxZmZhNDg5NDUxZjExYWY2YTQwMGUzN2RhNzlj
YTIyZjUxYTEzZGIuLjRkMzc5NjRjYmMwMjQxOGViNWVlOWJlMmU3NDU4MjdjZDhmNTEwYmEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKQEAgLTQxOTksNiArNDE5OSwxMCBAQCBCVUdXSzc4NDEyIE1BQyBXSU4gOiBmYXN0L3Jl
cGFpbnQvc2Nyb2xsLWluc2lkZS10YWJsZS1jZWxsLmh0bWwgPSBJTUFHRQogQlVHV0s3ODQxMiBN
QUMgV0lOIDogZmFzdC9yZXBhaW50L3Njcm9sbC1yZWxhdGl2ZS10YWJsZS1pbnNpZGUtdGFibGUt
Y2VsbC5odG1sID0gSU1BR0UKIEJVR1dLNzg0MTIgTUFDIFdJTiA6IGZhc3QvdGFibGUvY2VsbC1w
cmVmLXdpZHRoLWludmFsaWRhdGlvbi5odG1sID0gVEVYVAogCisvLyBOZWVkcyByZWJhc2VsaW5p
bmcgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3Lgor
Ly8gSXQgaXMgY29ycmVjdCBmb3IgdGhlIHJlZmxlY3RlZCB0ZXh0IHRvIGJlIHZpc2libGUuCitC
VUdXSzc0MTQ3IDogY29tcG9zaXRpbmcvcmVmbGVjdGlvbnMvbmVzdGVkLXJlZmxlY3Rpb24tb24t
b3ZlcmZsb3cuaHRtbCA9IElNQUdFCisKIC8vIE5lZWQgcmViYXNlbGluaW5nLgogQlVHV0szNzI0
NCA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnMjcwMzgtMS5odG1sID0gSU1BR0UrVEVYVAogQlVH
V0szNzI0NCA6IHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVnMjcwMzgtMi5odG1sID0gSU1BR0UrVEVY
VAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134339</attachid>
            <date>2012-03-28 11:07:20 -0700</date>
            <delta_ts>2012-03-28 11:14:35 -0700</delta_ts>
            <desc>added comments about clipRect usage</desc>
            <filename>bug-74147-20120328110719.patch</filename>
            <type>text/plain</type>
            <size>25128</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE5MzE4YmE1NGY1YWE4
ZTg5MDVhNGUwMWRlYzE2ODM4NWMwMDMzZi4uOTQ2MmUxZDBhMjY0ZGExMTJiZWZiMjFhMWIyZGU4
MTE4ZjM1YTBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTI2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
bGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVh
dGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCAzIGFkZGl0aW9uYWwgdW5pdCB0ZXN0czsgTW9kaWZpZWQgZXhpc3Rp
bmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFRoZSBsYXllcidzIGNs
aXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZyBpbmZvcm1hdGlvbiB3YXMgbm90CisgICAgICAg
IGJlaW5nIGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGVkIGEgcmVuZGVyU3VyZmFj
ZS4gKEl0CisgICAgICAgIHdhcywgaG93ZXZlciwgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoZSBy
ZW5kZXJTdXJmYWNlIGl0c2VsZi4pCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHVuaXQgdGVz
dCB0aGF0IHJlcHJvZHVjZXMgdGhhdCB0aGlzIGlzIGFuIGVycm9yLAorICAgICAgICBvdGhlciB1
bml0IHRlc3RzIHRvIHRpZ2h0bHkgdGVzdCB0aGUgdmFsdWUgb2YgY2xpcFJlY3QgYmVpbmcKKyAg
ICAgICAgaW5pdGlhbGl6ZWQsIGFuZCBhZGRzIHRoZSBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFs
aXplIHRoZQorICAgICAgICBjbGlwUmVjdC4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwg
dGhpcyBidWcgd2FzIGNhdXNpbmcgZmxhc2hpbmcgb24gdGFiLXN3aXRjaCBvbgorICAgICAgICB0
aGUgYXBwbGUgaXBob25lIHBhZ2UuIEV2ZW4gd29yc2UsIHdpdGggcGFydGlhbCBzd2FwIGVuYWJs
ZWQsIHRoZQorICAgICAgICBsYXllcnMgd291bGQgc2ltcGx5IGRpc2FwcGVhciwgYmVjYXVzZSB0
aGUgZmlyc3QgZnJhbWUgdGhlCisgICAgICAgIGNsaXBSZWN0IGlzIHVuaW5pdGlhbGl6ZWQgYW5k
IHRoZSBsYXllciBpcyBub3QgZHJhd24sIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIGZyYW1lIG9u
d2FyZHMsIHRoZSBkYW1hZ2UgdHJhY2tlciBjb3JyZWN0bHkgdGhpbmdzIG5vdGhpbmcKKyAgICAg
ICAgaXMgZGFtYWdlZCwgc28gaXQgZG9lc24ndCBkcmF3IHRoYXQgbGF5ZXIgYWdhaW4gdW50aWwg
b3RoZXIgZGFtYWdlCisgICAgICAgIGNhdXNlcyBpdCB0byBiZSByZWRyYXduLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKToKKwogMjAxMi0wMy0yNyAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEZpeCBmaWx0ZXIgY29udGV4dCBjcmVh
dGlvbiB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggYzAzYzIxMjFjMzJkNmRhZjU3MmU4OTA1NTIwM2VkZGE1ZjE0OGY0OC4uYTRhYzc5YWU3ODky
ODhhOThlNmY3NmZjMGQxYTM3MTBjMzU3OTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMy0yNiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIGxheWVyLT5jbGlwUmVjdCgpIGlzIG5v
dCBpbml0aWFsaXplZCBmb3IgbGF5ZXJzIHRoYXQgY3JlYXRlIGEgcmVuZGVyU3VyZmFjZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgMyBtb3Jl
IHVuaXQgdGVzdHMuIE9uZSByZXByb2R1Y2VzIHRoZSBjbGlwUmVjdCBwcm9ibGVtIGluIGFuCisg
ICAgICAgIGludGVncmF0ZWQgbWFubmVyLCB0aGUgb3RoZXIgdHdvIGRpcmVjdGx5IHRlc3QgdGhh
dCBjbGlwUmVjdHMgYXJlCisgICAgICAgIHByb3Blcmx5IGluaXRpYWxpemVkLgorCisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVl
VGVzdENvbW1vbi5oOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorCiAyMDEyLTAzLTI3ICBTdGVw
aGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gRml4IGZpbHRlciBjb250ZXh0IHVzYWdlIGluIHdlYmtpdF91bml0X3Rlc3RzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKaW5kZXggNzRhMDM5ZWZiMGU0M2E5MGRhNzI2MTUyMWYwYTAzODM3NWM5MWZj
OC4uMTY3OTgwYzdlNzZkNzIyYTJmNThmMDBmODI3YjU3ZDRkYmQ1NTJmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oCkBAIC0xNTgsNiArMTU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgZHJhd09wYWNp
dHlJc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsg
fQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNB
bmltYXRpbmcpIHsgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1h
dGluZzsgfQogCisgICAgLy8gVXNhZ2U6IGlmIHRoaXMtPnVzZXNMYXllckNsaXBwaW5nKCkgaXMg
ZmFsc2UsIHRoZW4gdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCiAgICAgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAgICAgdm9p
ZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fY2xpcFJlY3QgPSByZWN0OyB9
CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1
cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcAppbmRleCBiZDIyMTU0YjkxOGE3ZGU2MjhjM2M5ODQ2MWUwNjcyZDQ4MWZi
ZjI5Li43YTg4YWU4MTE0YjA4MjQ2ZTZmNjQxMDExMzRjNGY0YTI4OWExMDVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTM3MCw2ICszNzAsMTAgQEAg
c3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICAgICAgLy8gc3VyZmFjZSBhbmQgaXMgdGhlcmVm
b3JlIGV4cHJlc3NlZCBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgICAg
IHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KGxheWVyLT5wYXJlbnQoKSA/IGxheWVyLT5wYXJl
bnQoKS0+Y2xpcFJlY3QoKSA6IGxheWVyLT5jbGlwUmVjdCgpKTsKIAorICAgICAgICAvLyBUaGUg
bGF5ZXIncyBjbGlwUmVjdCBjYW4gYmUgcmVzZXQgaGVyZS4gVGhlIHJlbmRlclN1cmZhY2Ugd2ls
bCBjb3JyZWN0bHkgY2xpcCB0aGUgc3VidHJlZS4KKyAgICAgICAgbGF5ZXItPnNldFVzZXNMYXll
ckNsaXBwaW5nKGZhbHNlKTsKKyAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KEludFJlY3QoKSk7
CisKICAgICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZS0+c2V0TWFza0xheWVyKGxheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgICAgICAgICBs
YXllci0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7
CkBAIC00MDYsMTMgKzQxMCwxOCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgICAgICAg
ICAgLy8gTGF5ZXJzIHdpdGhvdXQgdGhlaXIgb3duIHJlbmRlclN1cmZhY2Ugd2lsbCByZW5kZXIg
aW50byB0aGUgbmVhcmVzdCBhbmNlc3RvciBzdXJmYWNlLgogICAgICAgICAgICAgbGF5ZXItPnNl
dFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgpLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCkpOwogICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkp
IHsKKyAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwogCi0g
ICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0
IGNsaXBSZWN0ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgICAgIC8vIElmIHRoZSBsYXll
ciBhbHJlYWR5IGluaGVyaXRlZCBhIGNsaXBSZWN0LCB3ZSBuZWVkIHRvIGludGVyc2VjdCB3aXRo
IGl0IGJlZm9yZQorICAgICAgICAvLyBvdmVycmlkaW5nIHRoZSBsYXllcidzIGNsaXBSZWN0IGFu
ZCB1c2VzTGF5ZXJDbGlwcGluZy4KKyAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGlu
ZygpKQogICAgICAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsK
LSAgICAgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgICAgICBs
YXllci0+c2V0VXNlc0xheWVyQ2xpcHBpbmcodHJ1ZSk7Ci0gICAgICAgIH0KKworICAgICAgICBs
YXllci0+c2V0Q2xpcFJlY3QoY2xpcFJlY3QpOworICAgICAgICBsYXllci0+c2V0VXNlc0xheWVy
Q2xpcHBpbmcodHJ1ZSk7CiAgICAgfQogCiAgICAgLy8gTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQs
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIGxv
Y2FsIHZhcmlhYmxlIGRyYXdUcmFuc2Zvcm0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFj
a2VyLmNwcAppbmRleCBjNDA4MmZlOTZhZTFhMDEzZWU0NjA3MGQ4OTBkMjhjYTllNjdiOTc3Li5m
NGIyMzQ5MDYzZDMzZjFjMDk4YzFjYmVjNjNhNDhhOGY3ZGVmZTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKQEAgLTM0MCw4ICszNDAsNyBAQCBJbnRSZWN0IENDT2Nj
bHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmxheWVyU2Np
c3NvclJlY3RJbgogewogICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiB0YXJnZXRTdXJmYWNl
ID0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZTsKICAgICBGbG9hdFJlY3QgdG90YWxTY2lzc29yID0g
dGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKTsKLSAgICAvLyBGSVhNRTogbGF5ZXItPmNsaXBS
ZWN0KCkgYW5kIGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpIGlzIGNoYW5naW5nOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2MjIKLSAgICBpZiAoIWxheWVyLT5j
bGlwUmVjdCgpLmlzRW1wdHkoKSkKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkp
CiAgICAgICAgIHRvdGFsU2Npc3Nvci5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0KCkpOwogICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRvdGFsU2Npc3Nvcik7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCmluZGV4IDlmNzE0YzVjMDgwM2E3M2Y5M2E0M2EyOWYxY2MwNWMwN2QxOTNj
OGQuLjVlYmUxMjdmYjc0YjU2ZWEzZjZlZDRiN2Q5NWRjNGU1NjM0ODY0M2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCkBAIC0xMDMsNiArMTAzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
c2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jl
ZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7IH0KICAgICB2b2lkIHNldFNjcmVlblNwYWNl
VHJhbnNmb3Jtc0FyZUFuaW1hdGluZyhib29sIGFuaW1hdGluZykgeyBtX3NjcmVlblNwYWNlVHJh
bnNmb3Jtc0FyZUFuaW1hdGluZyA9IGFuaW1hdGluZzsgfQogCisgICAgLy8gVXNhZ2U6IGlmIGNs
aXBSZWN0KCkgaXMgZW1wdHksIE9SIGlmIG93bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVy
Q2xpcHBpbmcoKSBpcyBmYWxzZSwgdGhlbiB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNl
ZC4KICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRR
dWFkU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2hhcmVkUXVhZFN0YXRlLmgKaW5kZXggZTc4NTc1N2Y5ZGI5NGIxYjMyMDYxZmQ4ZDhiMjFj
NDBiZWYxZmYwYS4uNDIwNmFhNWMyZGUyYTc1NGM5Y2E5MWY0ZThlODg5MzgyMjExZmYyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aGFyZWRRdWFkU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoK
ICAgICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgbGF5ZXJSZWN0KCkgc2hvdWxkIGJlIHRyYW5zZm9y
bWVkIHdpdGguCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyYW5zZm9ybTsgfQogICAgIGNvbnN0IEludFJlY3Qm
IGxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZWN0OyB9CisgICAgLy8gVXNhZ2U6
IGlmIGNsaXBSZWN0IGlzIGVtcHR5LCB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4K
ICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7
IH0KIAogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QuY3BwCmluZGV4IDllZmRkZjlmYjFhNzgyNTJhMDgwODBlMzdkNDVmN2FhYmY4
ZTNlMzcuLjVlMmNjN2Q4NDJiOTgxNmUwNmY2OTcyYTg3NmE3YWUzOGU5Y2I1N2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcApAQCAtNjIzLDYgKzYyMyw1NSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKICAgICBncmFuZENo
aWxkLT5zZXRPcGFjaXR5KDAuNSk7CiAgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRPcGFjaXR5KDAu
NCk7CiAKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxp
c3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTog
d2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIEND
TGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwor
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworCisgICAgQVNTRVJUX0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdFswXS0+aWQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkLT5pZCgpLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFzaFJlcHJvKQoreworICAg
IC8vIFRoaXMgaXMgYSBzaW1pbGFyIHNpdHVhdGlvbiBhcyB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVu
ZGVyU3VyZmFjZXMsIGV4Y2VwdCB0aGF0CisgICAgLy8gaXQgcmVwcm9kdWNlcyBhIGNyYXNoIGJ1
ZyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDY3
MzQuCisKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JlYXRHcmFuZENoaWxkID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50PiBsZWFmTm9kZTEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50PiBsZWFmTm9kZTIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdy
YW5kQ2hpbGQpOworICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKGdyZWF0R3JhbmRDaGlsZCk7CisK
KyAgICAvLyBsZWFmTm9kZTEgZW5zdXJlcyB0aGF0IHBhcmVudCBhbmQgY2hpbGQgYXJlIGtlcHQg
b24gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QsCisgICAgLy8gZXZlbiB0aG91Z2ggZ3JhbmRD
aGlsZCBhbmQgZ3JlYXRHcmFuZENoaWxkIHNob3VsZCBiZSBjbGlwcGVkLgorICAgIGNoaWxkLT5h
ZGRDaGlsZChsZWFmTm9kZTEpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+YWRkQ2hpbGQobGVhZk5v
ZGUyKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCg0NSwgNDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGdyZWF0R3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZO
b2RlMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUyLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMjAsIDIwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1
ZSk7CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC40KTsKKyAgICBncmFuZENoaWxkLT5zZXRPcGFj
aXR5KDAuNSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CisKICAgICAv
LyBDb250YW1pbmF0ZSB0aGUgZ3JhbmRDaGlsZCBhbmQgZ3JlYXRHcmFuZENoaWxkJ3MgY2xpcFJl
Y3QgdG8gcmVwcm9kdWNlIHRoZSBjcmFzaAogICAgIC8vIGJ1ZyBmb3VuZCBpbiBodHRwOi8vY29k
ZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDY3MzQuIEluIHRoaXMK
ICAgICAvLyBidWcsIHRoZSBjbGlwUmVjdCB3YXMgbm90IHJlLWNvbXB1dGVkIGZvciBsYXllcnMg
dGhhdCBjcmVhdGUgUmVuZGVyU3VyZmFjZXMsIGFuZApAQCAtNjMwLDkgKzY3OSw2IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZh
Y2VzKQogICAgIC8vIHJlbmRlclN1cmZhY2UgcmVtYWlucyBvbiB0aGUgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgd2hpY2ggdmlvbGF0ZXMgdGhlIGFzc3VtcHRpb24KICAgICAvLyB0aGF0IGFuIGVt
cHR5IHJlbmRlclN1cmZhY2Ugd2lsbCBhbHdheXMgYmUgdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlz
dCwgd2hpY2gKICAgICAvLyB1bHRpbWF0ZWx5IGNhdXNlZCB0aGUgY3Jhc2guCi0gICAgLy8KLSAg
ICAvLyBGSVhNRTogaXQgaXMgYWxzbyB1c2VmdWwgdG8gdGVzdCB3aXRoIHRoaXMgY29tbWVudGVk
IG91dC4gRXZlbnR1YWxseSB3ZSBzaG91bGQKLSAgICAvLyBjcmVhdGUgc2V2ZXJhbCB0ZXN0IGNh
c2VzIHRoYXQgdGVzdCBjbGlwUmVjdC9kcmF3YWJsZUNvbnRlbnRSZWN0IGNvbXB1dGF0aW9uLgog
ICAgIGNoaWxkLT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUo
MjAsIDIwKSkpOwogICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBJbnRTaXplKDEyMzQsIDEyMzQpKSk7CiAKQEAgLTY1MSw2ICs2OTcsMTQ4
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1Jl
bmRlclN1cmZhY2VzKQogICAgIEVYUEVDVF9FUShjaGlsZC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdFsxXS0+aWQoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVycykKK3sKKyAgICAvLyBW
ZXJpZnkgdGhhdCBsYXllcnMgZ2V0IHRoZSBhcHByb3ByaWF0ZSBjbGlwUmVjdHMgd2hlbiB0aGVp
ciBwYXJlbnQgbWFza3NUb0JvdW5kcyBpcyB0cnVlLgorICAgIC8vCisgICAgLy8gICBncmFuZENo
aWxkMSAtIGNvbXBsZXRlbHkgaW5zaWRlIHRoZSByZWdpb247IGNsaXBSZWN0IHNob3VsZCBiZSB0
aGUgbWFzayByZWdpb24gKGxhcmdlciB0aGFuIHRoaXMgbGF5ZXIncyBib3VuZHMpLgorICAgIC8v
ICAgZ3JhbmRDaGlsZDIgLSBwYXJ0aWFsbHkgY2xpcHBlZCBidXQgTk9UIG1hc2tzVG9Cb3VuZHM7
IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgdGhlIHBhcmVudCdzIGNsaXBSZWN0IHJlZ2FyZGxlc3Mg
b2YgdGhlIGxheWVyJ3MgYm91bmRzLgorICAgIC8vICAgZ3JhbmRDaGlsZDMgLSBwYXJ0aWFsbHkg
Y2xpcHBlZCBhbmQgbWFza3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHdpbGwgYmUgdGhlIGludGVy
c2VjdGlvbiBvZiBsYXllckJvdW5kcyBhbmQgdGhlIG1hc2sgcmVnaW9uLgorICAgIC8vICAgZ3Jh
bmRDaGlsZDQgLSBvdXRzaWRlIHBhcmVudCdzIGNsaXBSZWN0LCBhbmQgbWFza3NUb0JvdW5kczsg
dGhlIGNsaXBSZWN0IHNob3VsZCBiZSBlbXB0eS4KKyAgICAvLworCisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBncmFuZENoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMyA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkNCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOworCisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hp
bGQxKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIpOworICAgIGNoaWxkLT5hZGRD
aGlsZChncmFuZENoaWxkMyk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQ0KTsKKwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCks
IEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCksIGZhbHNlKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQxLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNSwg
NSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoZ3JhbmRDaGlsZDIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxNSwgMTUpLCBJbnRTaXplKDEwLCAxMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQzLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkNC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDQ1LCA0NSksIEludFNpemUo
MTAsIDEwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Cisg
ICAgZ3JhbmRDaGlsZDMtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgZ3JhbmRDaGlsZDQt
PnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICAvLyBGb3JjZSBldmVyeW9uZSB0byBiZSBh
IHJlbmRlciBzdXJmYWNlLgorICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CisgICAgZ3JhbmRD
aGlsZDEtPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkMi0+c2V0T3BhY2l0eSgwLjUp
OworICAgIGdyYW5kQ2hpbGQzLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZ3JhbmRDaGlsZDQtPnNl
dE9wYWNpdHkoMC41KTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAg
IC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVo
YXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRv
by4KKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dC5nZXQoKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMS0+Y2xp
cFJlY3QoKSk7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDItPmNsaXBSZWN0KCkpOworICAgIEVYUEVD
VF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDE1LCAxNSksIEludFNpemUoNSwgNSkpLCBn
cmFuZENoaWxkMy0+Y2xpcFJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDQtPmNs
aXBSZWN0KCkuaXNFbXB0eSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvU3VyZmFjZXMpCit7CisgICAg
Ly8gVmVyaWZ5IHRoYXQgcmVuZGVyU3VyZmFjZXMgKGFuZCB0aGVpciBsYXllcnMpIGdldCB0aGUg
YXBwcm9wcmlhdGUgY2xpcFJlY3RzIHdoZW4gdGhlaXIgcGFyZW50IG1hc2tzVG9Cb3VuZHMgaXMg
dHJ1ZS4KKyAgICAvLworICAgIC8vIExheWVycyB0aGF0IG93biByZW5kZXJTdXJmYWNlcyAoYXQg
bGVhc3QgZm9yIG5vdykgZG8gbm90IGluaGVyaXQgYW55IGNsaXBSZWN0OworICAgIC8vIGluc3Rl
YWQgdGhlIHN1cmZhY2Ugd2lsbCBlbmZvcmNlIHRoZSBjbGlwIGZvciB0aGUgZW50aXJlIHN1YnRy
ZWUuIFRoZXkgbWF5IHN0aWxsCisgICAgLy8gaGF2ZSBhIGNsaXBSZWN0IG9mIHRoZWlyIG93biBs
YXllciBib3VuZHMsIGhvd2V2ZXIsIGlmIG1hc2tzVG9Cb3VuZHMgd2FzIHRydWUuCisgICAgLy8K
KworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDEgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDIgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDMg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3Jh
bmRDaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMSA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMiA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMyA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlNCA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKworICAgIHBhcmVudC0+Y3JlYXRl
UmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxk
LT5hZGRDaGlsZChncmFuZENoaWxkMSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQy
KTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworICAgIGNoaWxkLT5hZGRDaGls
ZChncmFuZENoaWxkNCk7CisKKyAgICAvLyB0aGUgbGVhZiBub2RlcyBlbnN1cmUgdGhhdCB0aGVz
ZSBncmFuZENoaWxkcmVuIGJlY29tZSByZW5kZXJTdXJmYWNlcyBmb3IgdGhpcyB0ZXN0LgorICAg
IGdyYW5kQ2hpbGQxLT5hZGRDaGlsZChsZWFmTm9kZTEpOworICAgIGdyYW5kQ2hpbGQyLT5hZGRD
aGlsZChsZWFmTm9kZTIpOworICAgIGdyYW5kQ2hpbGQzLT5hZGRDaGlsZChsZWFmTm9kZTMpOwor
ICAgIGdyYW5kQ2hpbGQ0LT5hZGRDaGlsZChsZWFmTm9kZTQpOworCisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCg1LCA1KSwgSW50U2l6ZSgxMCwg
MTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxk
Mi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDE1LCAxNSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDMuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxNSwgMTUpLCBJ
bnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGdyYW5kQ2hpbGQ0LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNDUsIDQ1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTEuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsZWFmTm9kZTIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTMuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhsZWFmTm9kZTQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMCwgMTApLCBm
YWxzZSk7CisKKyAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBncmFuZENo
aWxkMy0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBncmFuZENoaWxkNC0+c2V0TWFza3NU
b0JvdW5kcyh0cnVlKTsKKworICAgIC8vIEZvcmNlIGV2ZXJ5b25lIHRvIGJlIGEgcmVuZGVyIHN1
cmZhY2UuCisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC40KTsKKyAgICBncmFuZENoaWxkMS0+c2V0
T3BhY2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZ3Jh
bmRDaGlsZDMtPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkNC0+c2V0T3BhY2l0eSgw
LjUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6
IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBD
Q0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBh
cmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsK
KworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJT
dXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkp
OworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQzLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVY
UEVDVF9GQUxTRShncmFuZENoaWxkNC0+cmVuZGVyU3VyZmFjZSgpKTsgLy8gQmVjYXVzZSBncmFu
ZENoaWxkNCBpcyBlbnRpcmVseSBjbGlwcGVkLCBpdCBpcyBleHBlY3RlZCB0byBub3QgaGF2ZSBh
IHJlbmRlclN1cmZhY2UuCisKKyAgICAvLyBTdXJmYWNlcyBhcmUgY2xpcHBlZCBieSB0aGVpciBw
YXJlbnQsIGJ1dCB1bi1hZmZlY3RlZCBieSB0aGUgb3duaW5nIGxheWVyJ3MgbWFza3NUb0JvdW5k
cy4KKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6
ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSk7Cisg
ICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoMjAs
IDIwKSksIGdyYW5kQ2hpbGQyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCkpOworICAgIEVY
UEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCkp
LCBncmFuZENoaWxkMy0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpKTsKKworICAgIC8vIExh
eWVycyBkbyBub3QgaW5oZXJpdCB0aGUgY2xpcFJlY3QgZnJvbSB0aGVpciBvd25lZCBzdXJmYWNl
cywgYnV0IGlmIG1hc2tzVG9Cb3VuZHMgaXMgdHJ1ZSwgdGhleSBkbyBjcmVhdGUgdGhlaXIgb3du
IGNsaXBSZWN0LgorICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkMS0+dXNlc0xheWVyQ2xpcHBp
bmcoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQyLT51c2VzTGF5ZXJDbGlwcGluZygp
KTsKKyAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxkMy0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDQtPnVzZXNMYXllckNsaXBwaW5nKCkpOworfQorCiBz
dGF0aWMgaW50IGFkZE9wYWNpdHlBbmltYXRpb25Ub0xheWVyKExheWVyQ2hyb21pdW0qIGxheWVy
LCBmbG9hdCBzdGFydFZhbHVlLCBmbG9hdCBlbmRWYWx1ZSwgZG91YmxlIGR1cmF0aW9uKQogewog
ICAgIHN0YXRpYyBpbnQgaWQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgKaW5kZXggMGI4M2RhY2FiYTNjZmUwMWNhY2Ez
YWJhNTliZjc4NzY0YTdkZDFhMC4uNzVlNDg3YTRhN2VmNDZlNzNiNjI4M2MzZmY0NTBhNWU0NWNh
ODYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZVRlc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlVGVzdENvbW1vbi5oCkBAIC0yNywxMyArMjcsMTkgQEAKIAogbmFtZXNwYWNlIFdlYktpdFRl
c3RzIHsKIAotLy8gVGhpcyBpcyBhIG1hY3JvIGluc3RlYWQgb2YgZnVuY3Rpb24gc28gdGhhdCB3
ZSBnZXQgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVkLgorLy8gVGhlc2Ug
YXJlIG1hY3JvcyBpbnN0ZWFkIG9mIGZ1bmN0aW9ucyBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGlu
ZSBudW1iZXJzIHdoZXJlIGEgdGVzdCBmYWlsZWQuCiAjZGVmaW5lIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKGV4cGVjdGVkLCBhY3R1YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubG9jYXRpb24oKS54KCksIChhY3R1YWwpLmxvY2F0aW9u
KCkueCgpKTsgXAogICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueSgp
LCAoYWN0dWFsKS5sb2NhdGlvbigpLnkoKSk7IFwKICAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5zaXplKCkud2lkdGgoKSwgKGFjdHVhbCkuc2l6ZSgpLndpZHRoKCkpOyBcCiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkuc2l6ZSgpLmhlaWdodCgpLCAoYWN0dWFsKS5zaXplKCku
aGVpZ2h0KCkpCiAKKyNkZWZpbmUgRVhQRUNUX0lOVF9SRUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFWFBFQ1RfRVEoKGV4cGVjdGVkKS5s
b2NhdGlvbigpLngoKSwgKGFjdHVhbCkubG9jYXRpb24oKS54KCkpOyAgICAgIFwKKyAgICBFWFBF
Q1RfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLnkoKSwgKGFjdHVhbCkubG9jYXRpb24oKS55KCkp
OyAgICAgIFwKKyAgICBFWFBFQ1RfRVEoKGV4cGVjdGVkKS5zaXplKCkud2lkdGgoKSwgKGFjdHVh
bCkuc2l6ZSgpLndpZHRoKCkpOyAgICAgIFwKKyAgICBFWFBFQ1RfRVEoKGV4cGVjdGVkKS5zaXpl
KCkuaGVpZ2h0KCksIChhY3R1YWwpLnNpemUoKS5oZWlnaHQoKSkKKwogLy8gVGhpcyBpcyBhIG1h
Y3JvIGluc3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHdlIGdldCB1c2VmdWwgbGluZSBudW1i
ZXJzIHdoZXJlIGEgdGVzdCBmYWlsZWQuCiAvLyBFdmVuIHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB2YWx1ZXMgYXJlIGRvdWJsZSBwcmVjaXNpb24sIHRoZXJlIGFyZSBtYW55IG90aGVyIGZs
b2F0aW5nLXBvaW50IHZhbHVlcyB1c2VkIHRoYXQgYWZmZWN0CiAvLyB0aGUgdHJhbnNmb3Jtcywg
YW5kIHNvIHdlIG9ubHkgZXhwZWN0IHRoZW0gdG8gYmUgYWNjdXJhdGUgdXAgdG8gZmxvYXRpbmct
cG9pbnQgcHJlY2lzaW9uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDAxYWUyNDlmNWU2YmZlMjU5ZTdiOWMwZDE3YzM5ZmM0
NDcwNWQ2NzguLmVlNWYxZmRiMDZkMGFmMTM3NWEwZWY0MGFlOWY3ZDRhOGRjY2Q4MjEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAxMi0wMy0yNiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIGxheWVyLT5jbGlwUmVjdCgpIGlzIG5v
dCBpbml0aWFsaXplZCBmb3IgbGF5ZXJzIHRoYXQgY3JlYXRlIGEgcmVuZGVyU3VyZmFjZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6IG1hcmtlZCB0ZXN0IGFzIG5lZWRpbmcgcmVi
YXNlbGluaW5nCisKIDIwMTItMDMtMjcgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdGVzdFNvdXJjZU1hcENvdWxkTm90
QmVMb2FkZWQgbG9ncyBkaWZmZXJlbnQgZXJyb3IgbWVzc2FnZXMgb24gZGlmZmVyZW50IHBsYXRm
b3Jtcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhw
ZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAppbmRleCAyMWZmYTQ4OTQ1MWYxMWFmNmE0MDBlMzdkYTc5Y2EyMmY1MWExM2Ri
Li40ZDM3OTY0Y2JjMDI0MThlYjVlZTliZTJlNzQ1ODI3Y2Q4ZjUxMGJhIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC00
MTk5LDYgKzQxOTksMTAgQEAgQlVHV0s3ODQxMiBNQUMgV0lOIDogZmFzdC9yZXBhaW50L3Njcm9s
bC1pbnNpZGUtdGFibGUtY2VsbC5odG1sID0gSU1BR0UKIEJVR1dLNzg0MTIgTUFDIFdJTiA6IGZh
c3QvcmVwYWludC9zY3JvbGwtcmVsYXRpdmUtdGFibGUtaW5zaWRlLXRhYmxlLWNlbGwuaHRtbCA9
IElNQUdFCiBCVUdXSzc4NDEyIE1BQyBXSU4gOiBmYXN0L3RhYmxlL2NlbGwtcHJlZi13aWR0aC1p
bnZhbGlkYXRpb24uaHRtbCA9IFRFWFQKIAorLy8gTmVlZHMgcmViYXNlbGluaW5nIGFmdGVyIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE0Ny4KKy8vIEl0IGlzIGNv
cnJlY3QgZm9yIHRoZSByZWZsZWN0ZWQgdGV4dCB0byBiZSB2aXNpYmxlLgorQlVHV0s3NDE0NyA6
IGNvbXBvc2l0aW5nL3JlZmxlY3Rpb25zL25lc3RlZC1yZWZsZWN0aW9uLW9uLW92ZXJmbG93Lmh0
bWwgPSBJTUFHRQorCiAvLyBOZWVkIHJlYmFzZWxpbmluZy4KIEJVR1dLMzcyNDQgOiB0YWJsZXMv
bW96aWxsYS9idWdzL2J1ZzI3MDM4LTEuaHRtbCA9IElNQUdFK1RFWFQKIEJVR1dLMzcyNDQgOiB0
YWJsZXMvbW96aWxsYS9idWdzL2J1ZzI3MDM4LTIuaHRtbCA9IElNQUdFK1RFWFQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134342</attachid>
            <date>2012-03-28 11:14:39 -0700</date>
            <delta_ts>2012-03-28 12:08:23 -0700</delta_ts>
            <desc>added comments about clipRect usage</desc>
            <filename>bug-74147-20120328111438.patch</filename>
            <type>text/plain</type>
            <size>25162</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE5MzE4YmE1NGY1YWE4
ZTg5MDVhNGUwMWRlYzE2ODM4NWMwMDMzZi4uOTQ2MmUxZDBhMjY0ZGExMTJiZWZiMjFhMWIyZGU4
MTE4ZjM1YTBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTI2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
bGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVh
dGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCAzIGFkZGl0aW9uYWwgdW5pdCB0ZXN0czsgTW9kaWZpZWQgZXhpc3Rp
bmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFRoZSBsYXllcidzIGNs
aXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZyBpbmZvcm1hdGlvbiB3YXMgbm90CisgICAgICAg
IGJlaW5nIGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGVkIGEgcmVuZGVyU3VyZmFj
ZS4gKEl0CisgICAgICAgIHdhcywgaG93ZXZlciwgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoZSBy
ZW5kZXJTdXJmYWNlIGl0c2VsZi4pCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHVuaXQgdGVz
dCB0aGF0IHJlcHJvZHVjZXMgdGhhdCB0aGlzIGlzIGFuIGVycm9yLAorICAgICAgICBvdGhlciB1
bml0IHRlc3RzIHRvIHRpZ2h0bHkgdGVzdCB0aGUgdmFsdWUgb2YgY2xpcFJlY3QgYmVpbmcKKyAg
ICAgICAgaW5pdGlhbGl6ZWQsIGFuZCBhZGRzIHRoZSBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFs
aXplIHRoZQorICAgICAgICBjbGlwUmVjdC4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwg
dGhpcyBidWcgd2FzIGNhdXNpbmcgZmxhc2hpbmcgb24gdGFiLXN3aXRjaCBvbgorICAgICAgICB0
aGUgYXBwbGUgaXBob25lIHBhZ2UuIEV2ZW4gd29yc2UsIHdpdGggcGFydGlhbCBzd2FwIGVuYWJs
ZWQsIHRoZQorICAgICAgICBsYXllcnMgd291bGQgc2ltcGx5IGRpc2FwcGVhciwgYmVjYXVzZSB0
aGUgZmlyc3QgZnJhbWUgdGhlCisgICAgICAgIGNsaXBSZWN0IGlzIHVuaW5pdGlhbGl6ZWQgYW5k
IHRoZSBsYXllciBpcyBub3QgZHJhd24sIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIGZyYW1lIG9u
d2FyZHMsIHRoZSBkYW1hZ2UgdHJhY2tlciBjb3JyZWN0bHkgdGhpbmdzIG5vdGhpbmcKKyAgICAg
ICAgaXMgZGFtYWdlZCwgc28gaXQgZG9lc24ndCBkcmF3IHRoYXQgbGF5ZXIgYWdhaW4gdW50aWwg
b3RoZXIgZGFtYWdlCisgICAgICAgIGNhdXNlcyBpdCB0byBiZSByZWRyYXduLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKToKKwogMjAxMi0wMy0yNyAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEZpeCBmaWx0ZXIgY29udGV4dCBjcmVh
dGlvbiB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggYzAzYzIxMjFjMzJkNmRhZjU3MmU4OTA1NTIwM2VkZGE1ZjE0OGY0OC4uYTRhYzc5YWU3ODky
ODhhOThlNmY3NmZjMGQxYTM3MTBjMzU3OTJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMy0yNiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIGxheWVyLT5jbGlwUmVjdCgpIGlzIG5v
dCBpbml0aWFsaXplZCBmb3IgbGF5ZXJzIHRoYXQgY3JlYXRlIGEgcmVuZGVyU3VyZmFjZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQ3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgMyBtb3Jl
IHVuaXQgdGVzdHMuIE9uZSByZXByb2R1Y2VzIHRoZSBjbGlwUmVjdCBwcm9ibGVtIGluIGFuCisg
ICAgICAgIGludGVncmF0ZWQgbWFubmVyLCB0aGUgb3RoZXIgdHdvIGRpcmVjdGx5IHRlc3QgdGhh
dCBjbGlwUmVjdHMgYXJlCisgICAgICAgIHByb3Blcmx5IGluaXRpYWxpemVkLgorCisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVl
VGVzdENvbW1vbi5oOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorCiAyMDEyLTAzLTI3ICBTdGVw
aGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gRml4IGZpbHRlciBjb250ZXh0IHVzYWdlIGluIHdlYmtpdF91bml0X3Rlc3RzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKaW5kZXggNzRhMDM5ZWZiMGU0M2E5MGRhNzI2MTUyMWYwYTAzODM3NWM5MWZj
OC4uMTY3OTgwYzdlNzZkNzIyYTJmNThmMDBmODI3YjU3ZDRkYmQ1NTJmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oCkBAIC0xNTgsNiArMTU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgZHJhd09wYWNp
dHlJc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsg
fQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNB
bmltYXRpbmcpIHsgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1h
dGluZzsgfQogCisgICAgLy8gVXNhZ2U6IGlmIHRoaXMtPnVzZXNMYXllckNsaXBwaW5nKCkgaXMg
ZmFsc2UsIHRoZW4gdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCiAgICAgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAgICAgdm9p
ZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fY2xpcFJlY3QgPSByZWN0OyB9
CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1
cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcAppbmRleCBiZDIyMTU0YjkxOGE3ZGU2MjhjM2M5ODQ2MWUwNjcyZDQ4MWZi
ZjI5Li43YTg4YWU4MTE0YjA4MjQ2ZTZmNjQxMDExMzRjNGY0YTI4OWExMDVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTM3MCw2ICszNzAsMTAgQEAg
c3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICAgICAgLy8gc3VyZmFjZSBhbmQgaXMgdGhlcmVm
b3JlIGV4cHJlc3NlZCBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgICAg
IHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KGxheWVyLT5wYXJlbnQoKSA/IGxheWVyLT5wYXJl
bnQoKS0+Y2xpcFJlY3QoKSA6IGxheWVyLT5jbGlwUmVjdCgpKTsKIAorICAgICAgICAvLyBUaGUg
bGF5ZXIncyBjbGlwUmVjdCBjYW4gYmUgcmVzZXQgaGVyZS4gVGhlIHJlbmRlclN1cmZhY2Ugd2ls
bCBjb3JyZWN0bHkgY2xpcCB0aGUgc3VidHJlZS4KKyAgICAgICAgbGF5ZXItPnNldFVzZXNMYXll
ckNsaXBwaW5nKGZhbHNlKTsKKyAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KEludFJlY3QoKSk7
CisKICAgICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZS0+c2V0TWFza0xheWVyKGxheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgICAgICAgICBs
YXllci0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7
CkBAIC00MDYsMTMgKzQxMCwxOCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgICAgICAg
ICAgLy8gTGF5ZXJzIHdpdGhvdXQgdGhlaXIgb3duIHJlbmRlclN1cmZhY2Ugd2lsbCByZW5kZXIg
aW50byB0aGUgbmVhcmVzdCBhbmNlc3RvciBzdXJmYWNlLgogICAgICAgICAgICAgbGF5ZXItPnNl
dFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgpLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCkpOwogICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkp
IHsKKyAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwogCi0g
ICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0
IGNsaXBSZWN0ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgICAgIC8vIElmIHRoZSBsYXll
ciBhbHJlYWR5IGluaGVyaXRlZCBhIGNsaXBSZWN0LCB3ZSBuZWVkIHRvIGludGVyc2VjdCB3aXRo
IGl0IGJlZm9yZQorICAgICAgICAvLyBvdmVycmlkaW5nIHRoZSBsYXllcidzIGNsaXBSZWN0IGFu
ZCB1c2VzTGF5ZXJDbGlwcGluZy4KKyAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGlu
ZygpKQogICAgICAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsK
LSAgICAgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgICAgICBs
YXllci0+c2V0VXNlc0xheWVyQ2xpcHBpbmcodHJ1ZSk7Ci0gICAgICAgIH0KKworICAgICAgICBs
YXllci0+c2V0Q2xpcFJlY3QoY2xpcFJlY3QpOworICAgICAgICBsYXllci0+c2V0VXNlc0xheWVy
Q2xpcHBpbmcodHJ1ZSk7CiAgICAgfQogCiAgICAgLy8gTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQs
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIGxv
Y2FsIHZhcmlhYmxlIGRyYXdUcmFuc2Zvcm0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFj
a2VyLmNwcAppbmRleCBjNDA4MmZlOTZhZTFhMDEzZWU0NjA3MGQ4OTBkMjhjYTllNjdiOTc3Li5m
NGIyMzQ5MDYzZDMzZjFjMDk4YzFjYmVjNjNhNDhhOGY3ZGVmZTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKQEAgLTM0MCw4ICszNDAsNyBAQCBJbnRSZWN0IENDT2Nj
bHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmxheWVyU2Np
c3NvclJlY3RJbgogewogICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiB0YXJnZXRTdXJmYWNl
ID0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZTsKICAgICBGbG9hdFJlY3QgdG90YWxTY2lzc29yID0g
dGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKTsKLSAgICAvLyBGSVhNRTogbGF5ZXItPmNsaXBS
ZWN0KCkgYW5kIGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpIGlzIGNoYW5naW5nOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2MjIKLSAgICBpZiAoIWxheWVyLT5j
bGlwUmVjdCgpLmlzRW1wdHkoKSkKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkp
CiAgICAgICAgIHRvdGFsU2Npc3Nvci5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0KCkpOwogICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRvdGFsU2Npc3Nvcik7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCmluZGV4IDlmNzE0YzVjMDgwM2E3M2Y5M2E0M2EyOWYxY2MwNWMwN2QxOTNj
OGQuLmFjNDg2NTVhMzk2MmU2N2E0Y2U3ZGJmNGM5MjIxMTdhMzIzNGUyMzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCkBAIC0xMDMsNiArMTAzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
c2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jl
ZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7IH0KICAgICB2b2lkIHNldFNjcmVlblNwYWNl
VHJhbnNmb3Jtc0FyZUFuaW1hdGluZyhib29sIGFuaW1hdGluZykgeyBtX3NjcmVlblNwYWNlVHJh
bnNmb3Jtc0FyZUFuaW1hdGluZyA9IGFuaW1hdGluZzsgfQogCisgICAgLy8gVXNhZ2U6IHRoaXMg
Y2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGlmIG9uZSBvZiB0aGUgdHdvIGNvbmRpdGlvbnMg
aXMgdHJ1ZTogKGEpIGNsaXBSZWN0KCkgaXMgZW1wdHksIG9yIChiKSBvd25pbmdMYXllci0+cGFy
ZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkgaXMgZmFsc2UuCiAgICAgdm9pZCBzZXRDbGlwUmVj
dChjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2NsaXBSZWN0OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCmlu
ZGV4IGU3ODU3NTdmOWRiOTRiMWIzMjA2MWZkOGQ4YjIxYzQwYmVmMWZmMGEuLjQyMDZhYTVjMmRl
MmE3NTRjOWNhOTFmNGU4ZTg4OTM4MjIxMWZmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFk
U3RhdGUuaApAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHRyYW5zZm9ybSB0
aGF0IGxheWVyUmVjdCgpIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB3aXRoLgogICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJUcmFuc2Zvcm07IH0KICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2xheWVyUmVjdDsgfQorICAgIC8vIFVzYWdlOiBpZiBjbGlwUmVjdCBpcyBlbXB0eSwg
dGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQuCiAgICAgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAKICAgICBmbG9hdCBvcGFjaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCA5
ZWZkZGY5ZmIxYTc4MjUyYTA4MDgwZTM3ZDQ1ZjdhYWJmOGUzZTM3Li41ZTJjYzdkODQyYjk4MTZl
MDZmNjk3MmE4NzZhN2FlMzhlOWNiNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTYyMyw2
ICs2MjMsNTUgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVj
dEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAgICAgZ3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjUpOwog
ICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjQpOwogCisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3Qt
bGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwg
aGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwg
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAg
IEFTU0VSVF9FUSgyVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEVYUEVD
VF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlkKCkpOworICAg
IEVYUEVDVF9FUShjaGlsZC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+aWQoKSk7
Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxs
c1JlbmRlclN1cmZhY2VzQ3Jhc2hSZXBybykKK3sKKyAgICAvLyBUaGlzIGlzIGEgc2ltaWxhciBz
aXR1YXRpb24gYXMgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzLCBleGNlcHQgdGhh
dAorICAgIC8vIGl0IHJlcHJvZHVjZXMgYSBjcmFzaCBidWcgaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA2NzM0LgorCisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGdyZWF0R3JhbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5v
ZGUxID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGVhZk5v
ZGUyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkp
OworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hp
bGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkKTsKKyAgICBncmFuZENo
aWxkLT5hZGRDaGlsZChncmVhdEdyYW5kQ2hpbGQpOworCisgICAgLy8gbGVhZk5vZGUxIGVuc3Vy
ZXMgdGhhdCBwYXJlbnQgYW5kIGNoaWxkIGFyZSBrZXB0IG9uIHRoZSByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LAorICAgIC8vIGV2ZW4gdGhvdWdoIGdyYW5kQ2hpbGQgYW5kIGdyZWF0R3JhbmRDaGls
ZCBzaG91bGQgYmUgY2xpcHBlZC4KKyAgICBjaGlsZC0+YWRkQ2hpbGQobGVhZk5vZGUxKTsKKyAg
ICBncmVhdEdyYW5kQ2hpbGQtPmFkZENoaWxkKGxlYWZOb2RlMik7CisKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwg
NTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNDUsIDQ1KSwgSW50U2l6ZSgx
MCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmVhdEdy
YW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTEuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGxlYWZOb2RlMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCksIGZhbHNlKTsK
KworICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIGNoaWxkLT5zZXRPcGFj
aXR5KDAuNCk7CisgICAgZ3JhbmRDaGlsZC0+c2V0T3BhY2l0eSgwLjUpOworICAgIGdyZWF0R3Jh
bmRDaGlsZC0+c2V0T3BhY2l0eSgwLjQpOworCiAgICAgLy8gQ29udGFtaW5hdGUgdGhlIGdyYW5k
Q2hpbGQgYW5kIGdyZWF0R3JhbmRDaGlsZCdzIGNsaXBSZWN0IHRvIHJlcHJvZHVjZSB0aGUgY3Jh
c2gKICAgICAvLyBidWcgZm91bmQgaW4gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVt
L2lzc3Vlcy9kZXRhaWw/aWQ9MTA2NzM0LiBJbiB0aGlzCiAgICAgLy8gYnVnLCB0aGUgY2xpcFJl
Y3Qgd2FzIG5vdCByZS1jb21wdXRlZCBmb3IgbGF5ZXJzIHRoYXQgY3JlYXRlIFJlbmRlclN1cmZh
Y2VzLCBhbmQKQEAgLTYzMCw5ICs2NzksNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKICAgICAvLyByZW5kZXJTdXJm
YWNlIHJlbWFpbnMgb24gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHdoaWNoIHZpb2xhdGVz
IHRoZSBhc3N1bXB0aW9uCiAgICAgLy8gdGhhdCBhbiBlbXB0eSByZW5kZXJTdXJmYWNlIHdpbGwg
YWx3YXlzIGJlIHRoZSBsYXN0IGl0ZW0gb24gdGhlIGxpc3QsIHdoaWNoCiAgICAgLy8gdWx0aW1h
dGVseSBjYXVzZWQgdGhlIGNyYXNoLgotICAgIC8vCi0gICAgLy8gRklYTUU6IGl0IGlzIGFsc28g
dXNlZnVsIHRvIHRlc3Qgd2l0aCB0aGlzIGNvbW1lbnRlZCBvdXQuIEV2ZW50dWFsbHkgd2Ugc2hv
dWxkCi0gICAgLy8gY3JlYXRlIHNldmVyYWwgdGVzdCBjYXNlcyB0aGF0IHRlc3QgY2xpcFJlY3Qv
ZHJhd2FibGVDb250ZW50UmVjdCBjb21wdXRhdGlvbi4KICAgICBjaGlsZC0+c2V0Q2xpcFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpKTsKICAgICBncmVhdEdy
YW5kQ2hpbGQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgx
MjM0LCAxMjM0KSkpOwogCkBAIC02NTEsNiArNjk3LDE0OCBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKICAgICBFWFBF
Q1RfRVEoY2hpbGQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMV0tPmlkKCkpOwogfQog
CitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdh
dGVkQ29ycmVjdGx5VG9MYXllcnMpCit7CisgICAgLy8gVmVyaWZ5IHRoYXQgbGF5ZXJzIGdldCB0
aGUgYXBwcm9wcmlhdGUgY2xpcFJlY3RzIHdoZW4gdGhlaXIgcGFyZW50IG1hc2tzVG9Cb3VuZHMg
aXMgdHJ1ZS4KKyAgICAvLworICAgIC8vICAgZ3JhbmRDaGlsZDEgLSBjb21wbGV0ZWx5IGluc2lk
ZSB0aGUgcmVnaW9uOyBjbGlwUmVjdCBzaG91bGQgYmUgdGhlIG1hc2sgcmVnaW9uIChsYXJnZXIg
dGhhbiB0aGlzIGxheWVyJ3MgYm91bmRzKS4KKyAgICAvLyAgIGdyYW5kQ2hpbGQyIC0gcGFydGlh
bGx5IGNsaXBwZWQgYnV0IE5PVCBtYXNrc1RvQm91bmRzOyB0aGUgY2xpcFJlY3Qgc2hvdWxkIGJl
IHRoZSBwYXJlbnQncyBjbGlwUmVjdCByZWdhcmRsZXNzIG9mIHRoZSBsYXllcidzIGJvdW5kcy4K
KyAgICAvLyAgIGdyYW5kQ2hpbGQzIC0gcGFydGlhbGx5IGNsaXBwZWQgYW5kIG1hc2tzVG9Cb3Vu
ZHM7IHRoZSBjbGlwUmVjdCB3aWxsIGJlIHRoZSBpbnRlcnNlY3Rpb24gb2YgbGF5ZXJCb3VuZHMg
YW5kIHRoZSBtYXNrIHJlZ2lvbi4KKyAgICAvLyAgIGdyYW5kQ2hpbGQ0IC0gb3V0c2lkZSBwYXJl
bnQncyBjbGlwUmVjdCwgYW5kIG1hc2tzVG9Cb3VuZHM7IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUg
ZW1wdHkuCisgICAgLy8KKworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDEgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRD
aGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gZ3JhbmRDaGlsZDMgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hp
bGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMSk7CisgICAgY2hpbGQtPmFkZENo
aWxkKGdyYW5kQ2hpbGQyKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworICAg
IGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkNCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgyMCwgMjApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhncmFuZENoaWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDUsIDUpLCBJbnRTaXplKDEwLCAxMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQyLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMy5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDE1LCAxNSksIEludFNpemUo
MTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRD
aGlsZDQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCg0NSwgNDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKworICAg
IGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIGdyYW5kQ2hpbGQzLT5zZXRNYXNr
c1RvQm91bmRzKHRydWUpOworICAgIGdyYW5kQ2hpbGQ0LT5zZXRNYXNrc1RvQm91bmRzKHRydWUp
OworCisgICAgLy8gRm9yY2UgZXZlcnlvbmUgdG8gYmUgYSByZW5kZXIgc3VyZmFjZS4KKyAgICBj
aGlsZC0+c2V0T3BhY2l0eSgwLjQpOworICAgIGdyYW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuNSk7
CisgICAgZ3JhbmRDaGlsZDItPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkMy0+c2V0
T3BhY2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQ0LT5zZXRPcGFjaXR5KDAuNSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXgg
dGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9z
dCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOworCisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
SW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDEtPmNsaXBSZWN0KCkpOworICAgIEVYUEVDVF9J
TlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAsIDIwKSksIGdy
YW5kQ2hpbGQyLT5jbGlwUmVjdCgpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJ
bnRQb2ludCgxNSwgMTUpLCBJbnRTaXplKDUsIDUpKSwgZ3JhbmRDaGlsZDMtPmNsaXBSZWN0KCkp
OworICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hpbGQ0LT5jbGlwUmVjdCgpLmlzRW1wdHkoKSk7Cit9
CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3Bh
Z2F0ZWRDb3JyZWN0bHlUb1N1cmZhY2VzKQoreworICAgIC8vIFZlcmlmeSB0aGF0IHJlbmRlclN1
cmZhY2VzIChhbmQgdGhlaXIgbGF5ZXJzKSBnZXQgdGhlIGFwcHJvcHJpYXRlIGNsaXBSZWN0cyB3
aGVuIHRoZWlyIHBhcmVudCBtYXNrc1RvQm91bmRzIGlzIHRydWUuCisgICAgLy8KKyAgICAvLyBM
YXllcnMgdGhhdCBvd24gcmVuZGVyU3VyZmFjZXMgKGF0IGxlYXN0IGZvciBub3cpIGRvIG5vdCBp
bmhlcml0IGFueSBjbGlwUmVjdDsKKyAgICAvLyBpbnN0ZWFkIHRoZSBzdXJmYWNlIHdpbGwgZW5m
b3JjZSB0aGUgY2xpcCBmb3IgdGhlIGVudGlyZSBzdWJ0cmVlLiBUaGV5IG1heSBzdGlsbAorICAg
IC8vIGhhdmUgYSBjbGlwUmVjdCBvZiB0aGVpciBvd24gbGF5ZXIgYm91bmRzLCBob3dldmVyLCBp
ZiBtYXNrc1RvQm91bmRzIHdhcyB0cnVlLgorICAgIC8vCisKKyAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGdyYW5kQ2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQzID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQ0ID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBsZWFmTm9kZTEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBsZWFmTm9kZTIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBsZWFmTm9kZTMgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBsZWFmTm9kZTQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBw
YXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEp
OworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMik7CisgICAgY2hpbGQtPmFkZENoaWxk
KGdyYW5kQ2hpbGQzKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDQpOworCisgICAg
Ly8gdGhlIGxlYWYgbm9kZXMgZW5zdXJlIHRoYXQgdGhlc2UgZ3JhbmRDaGlsZHJlbiBiZWNvbWUg
cmVuZGVyU3VyZmFjZXMgZm9yIHRoaXMgdGVzdC4KKyAgICBncmFuZENoaWxkMS0+YWRkQ2hpbGQo
bGVhZk5vZGUxKTsKKyAgICBncmFuZENoaWxkMi0+YWRkQ2hpbGQobGVhZk5vZGUyKTsKKyAgICBn
cmFuZENoaWxkMy0+YWRkQ2hpbGQobGVhZk5vZGUzKTsKKyAgICBncmFuZENoaWxkNC0+YWRkQ2hp
bGQobGVhZk5vZGU0KTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIw
LCAyMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQxLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoNSwgNSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxNSwgMTUpLCBJ
bnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGdyYW5kQ2hpbGQzLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTUsIDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkNC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDQ1LCA0NSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGVhZk5vZGUxLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAsIDEwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUyLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGVhZk5vZGUzLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAsIDEw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGU0Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNl
dE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgZ3JhbmRDaGlsZDMtPnNldE1hc2tzVG9Cb3VuZHMo
dHJ1ZSk7CisgICAgZ3JhbmRDaGlsZDQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICAv
LyBGb3JjZSBldmVyeW9uZSB0byBiZSBhIHJlbmRlciBzdXJmYWNlLgorICAgIGNoaWxkLT5zZXRP
cGFjaXR5KDAuNCk7CisgICAgZ3JhbmRDaGlsZDEtPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFu
ZENoaWxkMi0+c2V0T3BhY2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQzLT5zZXRPcGFjaXR5KDAu
NSk7CisgICAgZ3JhbmRDaGlsZDQtPnNldE9wYWNpdHkoMC41KTsKKworICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290
LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxs
IGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCks
IHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAg
ICBBU1NFUlRfVFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRf
VFJVRShncmFuZENoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfVFJVRShncmFu
ZENoaWxkMy0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZ3JhbmRDaGlsZDQt
PnJlbmRlclN1cmZhY2UoKSk7IC8vIEJlY2F1c2UgZ3JhbmRDaGlsZDQgaXMgZW50aXJlbHkgY2xp
cHBlZCwgaXQgaXMgZXhwZWN0ZWQgdG8gbm90IGhhdmUgYSByZW5kZXJTdXJmYWNlLgorCisgICAg
Ly8gU3VyZmFjZXMgYXJlIGNsaXBwZWQgYnkgdGhlaXIgcGFyZW50LCBidXQgdW4tYWZmZWN0ZWQg
YnkgdGhlIG93bmluZyBsYXllcidzIG1hc2tzVG9Cb3VuZHMuCisgICAgRVhQRUNUX0lOVF9SRUNU
X0VRKEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIwKSksIGdyYW5kQ2hpbGQx
LT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCkpOworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMi0+cmVu
ZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpKTsKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDMtPnJlbmRlclN1
cmZhY2UoKS0+Y2xpcFJlY3QoKSk7CisKKyAgICAvLyBMYXllcnMgZG8gbm90IGluaGVyaXQgdGhl
IGNsaXBSZWN0IGZyb20gdGhlaXIgb3duZWQgc3VyZmFjZXMsIGJ1dCBpZiBtYXNrc1RvQm91bmRz
IGlzIHRydWUsIHRoZXkgZG8gY3JlYXRlIHRoZWlyIG93biBjbGlwUmVjdC4KKyAgICBFWFBFQ1Rf
RkFMU0UoZ3JhbmRDaGlsZDEtPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIEVYUEVDVF9GQUxT
RShncmFuZENoaWxkMi0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAgRVhQRUNUX1RSVUUoZ3Jh
bmRDaGlsZDMtPnVzZXNMYXllckNsaXBwaW5nKCkpOworICAgIEVYUEVDVF9UUlVFKGdyYW5kQ2hp
bGQ0LT51c2VzTGF5ZXJDbGlwcGluZygpKTsKK30KKwogc3RhdGljIGludCBhZGRPcGFjaXR5QW5p
bWF0aW9uVG9MYXllcihMYXllckNocm9taXVtKiBsYXllciwgZmxvYXQgc3RhcnRWYWx1ZSwgZmxv
YXQgZW5kVmFsdWUsIGRvdWJsZSBkdXJhdGlvbikKIHsKICAgICBzdGF0aWMgaW50IGlkID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0
Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENv
bW1vbi5oCmluZGV4IDBiODNkYWNhYmEzY2ZlMDFjYWNhM2FiYTU5YmY3ODc2NGE3ZGQxYTAuLjc1
ZTQ4N2E0YTdlZjQ2ZTczYjYyODNjM2ZmNDUwYTVlNDVjYTg2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaApAQCAtMjcs
MTMgKzI3LDE5IEBACiAKIG5hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CiAKLS8vIFRoaXMgaXMgYSBt
YWNybyBpbnN0ZWFkIG9mIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51bWJl
cnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KKy8vIFRoZXNlIGFyZSBtYWNyb3MgaW5zdGVhZCBvZiBm
dW5jdGlvbnMgc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3Qg
ZmFpbGVkLgogI2RlZmluZSBFWFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZCwgYWN0dWFsKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
LmxvY2F0aW9uKCkueCgpLCAoYWN0dWFsKS5sb2NhdGlvbigpLngoKSk7IFwKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLnkoKSwgKGFjdHVhbCkubG9jYXRpb24oKS55
KCkpOyBcCiAgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkuc2l6ZSgpLndpZHRoKCksIChh
Y3R1YWwpLnNpemUoKS53aWR0aCgpKTsgXAogICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
LnNpemUoKS5oZWlnaHQoKSwgKGFjdHVhbCkuc2l6ZSgpLmhlaWdodCgpKQogCisjZGVmaW5lIEVY
UEVDVF9JTlRfUkVDVF9FUShleHBlY3RlZCwgYWN0dWFsKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgRVhQRUNUX0VRKChleHBlY3RlZCkubG9jYXRpb24oKS54KCksIChhY3R1YWwp
LmxvY2F0aW9uKCkueCgpKTsgICAgICBcCisgICAgRVhQRUNUX0VRKChleHBlY3RlZCkubG9jYXRp
b24oKS55KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueSgpKTsgICAgICBcCisgICAgRVhQRUNUX0VR
KChleHBlY3RlZCkuc2l6ZSgpLndpZHRoKCksIChhY3R1YWwpLnNpemUoKS53aWR0aCgpKTsgICAg
ICBcCisgICAgRVhQRUNUX0VRKChleHBlY3RlZCkuc2l6ZSgpLmhlaWdodCgpLCAoYWN0dWFsKS5z
aXplKCkuaGVpZ2h0KCkpCisKIC8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGEgZnVuY3Rp
b24gc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUgbnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVk
LgogLy8gRXZlbiB0aG91Z2ggVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUg
cHJlY2lzaW9uLCB0aGVyZSBhcmUgbWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdXNl
ZCB0aGF0IGFmZmVjdAogLy8gdGhlIHRyYW5zZm9ybXMsIGFuZCBzbyB3ZSBvbmx5IGV4cGVjdCB0
aGVtIHRvIGJlIGFjY3VyYXRlIHVwIHRvIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAwMWFlMjQ5ZjVlNmJmZTI1OWU3YjljMGQxN2MzOWZjNDQ3MDVkNjc4Li5lZTVmMWZkYjA2ZDBh
ZjEzNzVhMGVmNDBhZTlmN2Q0YThkY2NkODIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTIt
MDMtMjYgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBsYXllci0+Y2xpcFJlY3QoKSBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIGxheWVy
cyB0aGF0IGNyZWF0ZSBhIHJlbmRlclN1cmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0OiBtYXJrZWQgdGVzdCBhcyBuZWVkaW5nIHJlYmFzZWxpbmluZworCiAyMDEyLTAzLTI3
ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IHRlc3RTb3VyY2VNYXBDb3VsZE5vdEJlTG9hZGVkIGxvZ3MgZGlmZmVyZW50
IGVycm9yIG1lc3NhZ2VzIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggMjFmZmE0
ODk0NTFmMTFhZjZhNDAwZTM3ZGE3OWNhMjJmNTFhMTNkYi4uNGQzNzk2NGNiYzAyNDE4ZWI1ZWU5
YmUyZTc0NTgyN2NkOGY1MTBiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtNDE5OSw2ICs0MTk5LDEwIEBAIEJVR1dL
Nzg0MTIgTUFDIFdJTiA6IGZhc3QvcmVwYWludC9zY3JvbGwtaW5zaWRlLXRhYmxlLWNlbGwuaHRt
bCA9IElNQUdFCiBCVUdXSzc4NDEyIE1BQyBXSU4gOiBmYXN0L3JlcGFpbnQvc2Nyb2xsLXJlbGF0
aXZlLXRhYmxlLWluc2lkZS10YWJsZS1jZWxsLmh0bWwgPSBJTUFHRQogQlVHV0s3ODQxMiBNQUMg
V0lOIDogZmFzdC90YWJsZS9jZWxsLXByZWYtd2lkdGgtaW52YWxpZGF0aW9uLmh0bWwgPSBURVhU
CiAKKy8vIE5lZWRzIHJlYmFzZWxpbmluZyBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzQxNDcuCisvLyBJdCBpcyBjb3JyZWN0IGZvciB0aGUgcmVmbGVjdGVk
IHRleHQgdG8gYmUgdmlzaWJsZS4KK0JVR1dLNzQxNDcgOiBjb21wb3NpdGluZy9yZWZsZWN0aW9u
cy9uZXN0ZWQtcmVmbGVjdGlvbi1vbi1vdmVyZmxvdy5odG1sID0gSU1BR0UKKwogLy8gTmVlZCBy
ZWJhc2VsaW5pbmcuCiBCVUdXSzM3MjQ0IDogdGFibGVzL21vemlsbGEvYnVncy9idWcyNzAzOC0x
Lmh0bWwgPSBJTUFHRStURVhUCiBCVUdXSzM3MjQ0IDogdGFibGVzL21vemlsbGEvYnVncy9idWcy
NzAzOC0yLmh0bWwgPSBJTUFHRStURVhUCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134362</attachid>
            <date>2012-03-28 12:08:28 -0700</date>
            <delta_ts>2012-03-28 13:27:07 -0700</delta_ts>
            <desc>updated to tip of tree</desc>
            <filename>bug-74147-20120328120827.patch</filename>
            <type>text/plain</type>
            <size>25150</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGVlMmRjODVkOTY0ZWUw
ODcxNTQ1MTlmOTA4YTc4MjQ5MDkyZTFhYS4uNjU3MDQ5YTg2ZjE1MjI2M2VhZjUyMDhlYjc0Mjk5
YThkZTFkNDViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTI2ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
bGF5ZXItPmNsaXBSZWN0KCkgaXMgbm90IGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVh
dGUgYSByZW5kZXJTdXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzQxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCAzIGFkZGl0aW9uYWwgdW5pdCB0ZXN0czsgTW9kaWZpZWQgZXhpc3Rp
bmcgdW5pdCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFRoZSBsYXllcidzIGNs
aXBSZWN0IGFuZCB1c2VzTGF5ZXJDbGlwcGluZyBpbmZvcm1hdGlvbiB3YXMgbm90CisgICAgICAg
IGJlaW5nIGluaXRpYWxpemVkIGZvciBsYXllcnMgdGhhdCBjcmVhdGVkIGEgcmVuZGVyU3VyZmFj
ZS4gKEl0CisgICAgICAgIHdhcywgaG93ZXZlciwgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoZSBy
ZW5kZXJTdXJmYWNlIGl0c2VsZi4pCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHVuaXQgdGVz
dCB0aGF0IHJlcHJvZHVjZXMgdGhhdCB0aGlzIGlzIGFuIGVycm9yLAorICAgICAgICBvdGhlciB1
bml0IHRlc3RzIHRvIHRpZ2h0bHkgdGVzdCB0aGUgdmFsdWUgb2YgY2xpcFJlY3QgYmVpbmcKKyAg
ICAgICAgaW5pdGlhbGl6ZWQsIGFuZCBhZGRzIHRoZSBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFs
aXplIHRoZQorICAgICAgICBjbGlwUmVjdC4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwg
dGhpcyBidWcgd2FzIGNhdXNpbmcgZmxhc2hpbmcgb24gdGFiLXN3aXRjaCBvbgorICAgICAgICB0
aGUgYXBwbGUgaXBob25lIHBhZ2UuIEV2ZW4gd29yc2UsIHdpdGggcGFydGlhbCBzd2FwIGVuYWJs
ZWQsIHRoZQorICAgICAgICBsYXllcnMgd291bGQgc2ltcGx5IGRpc2FwcGVhciwgYmVjYXVzZSB0
aGUgZmlyc3QgZnJhbWUgdGhlCisgICAgICAgIGNsaXBSZWN0IGlzIHVuaW5pdGlhbGl6ZWQgYW5k
IHRoZSBsYXllciBpcyBub3QgZHJhd24sIGFuZCB0aGUKKyAgICAgICAgc2Vjb25kIGZyYW1lIG9u
d2FyZHMsIHRoZSBkYW1hZ2UgdHJhY2tlciBjb3JyZWN0bHkgdGhpbmdzIG5vdGhpbmcKKyAgICAg
ICAgaXMgZGFtYWdlZCwgc28gaXQgZG9lc24ndCBkcmF3IHRoYXQgbGF5ZXIgYWdhaW4gdW50aWwg
b3RoZXIgZGFtYWdlCisgICAgICAgIGNhdXNlcyBpdCB0byBiZSByZWRyYXduLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKToKKwogMjAxMi0wMy0yOCAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIE1lZGlhU3RyZWFtIEFQSSAoSlNFUCk6IElu
dHJvZHVjaW5nIFdlYlBlZXJDb25uZWN0aW9uMDBIYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDM0NDkxNmZhMDJjZjQ4YmZjYTNhMzZhYWQ4NjI3NjRiYWY5ZThiZDcuLjM5M2E5
ODcyYzM2MDYzMjNhMjdmNWI0MmU5MGRmM2I3M2YyYmYyNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDMtMjYgIFNoYXduIFNpbmdoICA8c2hhd25z
aW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBsYXllci0+Y2xpcFJlY3Qo
KSBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIGxheWVycyB0aGF0IGNyZWF0ZSBhIHJlbmRlclN1cmZh
Y2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE0
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IDMgbW9yZSB1bml0IHRlc3RzLiBPbmUgcmVwcm9kdWNlcyB0aGUgY2xpcFJlY3QgcHJvYmxlbSBp
biBhbgorICAgICAgICBpbnRlZ3JhdGVkIG1hbm5lciwgdGhlIG90aGVyIHR3byBkaXJlY3RseSB0
ZXN0IHRoYXQgY2xpcFJlY3RzIGFyZQorICAgICAgICBwcm9wZXJseSBpbml0aWFsaXplZC4KKwor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZVRlc3RDb21tb24uaDoKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKwogMjAxMi0wMy0y
OCAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hy
b21pdW1dIE1lZGlhU3RyZWFtIEFQSSAoSlNFUCk6IEludHJvZHVjaW5nIFdlYlBlZXJDb25uZWN0
aW9uMDBIYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCAxNTlkNWFjZDgyNjVlNzlhMWQz
MDMxYTFhMTQ1ZTc5NTBjOGU3YjQwLi42Y2I2ZGYwM2MyOWVhZTYwODdlMGY0YTllZTk0MWMzMmI5
OTUwODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE1OCw2ICsxNTgsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3
T3BhY2l0eUlzQW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5n
KGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZykgeyBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmcg
PSBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nOyB9CiAKKyAgICAvLyBVc2FnZTogaWYgdGhpcy0+dXNl
c0xheWVyQ2xpcHBpbmcoKSBpcyBmYWxzZSwgdGhlbiB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3Qg
YmUgdXNlZC4KICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpcFJlY3Q7IH0KICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsg
bV9jbGlwUmVjdCA9IHJlY3Q7IH0KICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1
cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGU4YWE2ODQ1MDliZTZlNWFh
MjQzNGU5MTYwZmM3MzJkMWM3MTEwZWYuLjQxOGRjYTE5MGIzZWJlNjQ0YTI0YWMzZWUyODJiYjVm
NWM5Mjk2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApA
QCAtMzg2LDYgKzM4NiwxMCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgICAgICAvLyBz
dXJmYWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhwcmVzc2VkIGluIHRoZSBwYXJlbnQncyBjb29yZGlu
YXRlIHN5c3RlbS4KICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QobGF5ZXItPnBh
cmVudCgpID8gbGF5ZXItPnBhcmVudCgpLT5jbGlwUmVjdCgpIDogbGF5ZXItPmNsaXBSZWN0KCkp
OwogCisgICAgICAgIC8vIFRoZSBsYXllcidzIGNsaXBSZWN0IGNhbiBiZSByZXNldCBoZXJlLiBU
aGUgcmVuZGVyU3VyZmFjZSB3aWxsIGNvcnJlY3RseSBjbGlwIHRoZSBzdWJ0cmVlLgorICAgICAg
ICBsYXllci0+c2V0VXNlc0xheWVyQ2xpcHBpbmcoZmFsc2UpOworICAgICAgICBsYXllci0+c2V0
Q2xpcFJlY3QoSW50UmVjdCgpKTsKKwogICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKSB7
CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRNYXNrTGF5ZXIobGF5ZXItPm1hc2tMYXll
cigpKTsKICAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3Vy
ZmFjZShyZW5kZXJTdXJmYWNlKTsKQEAgLTQyMiwxMyArNDI2LDE4IEBAIHN0YXRpYyBib29sIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5
ZXIsIExheWVyCiAgICAgICAgICAgICAvLyBMYXllcnMgd2l0aG91dCB0aGVpciBvd24gcmVuZGVy
U3VyZmFjZSB3aWxsIHJlbmRlciBpbnRvIHRoZSBuZWFyZXN0IGFuY2VzdG9yIHN1cmZhY2UuCiAg
ICAgICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cGFyZW50KCkt
PnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobGF5
ZXItPm1hc2tzVG9Cb3VuZHMoKSkgeworICAgICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gdHJhbnNm
b3JtZWRMYXllclJlY3Q7CiAKLSAgICAgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkpIHsK
LSAgICAgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAg
ICAgICAgLy8gSWYgdGhlIGxheWVyIGFscmVhZHkgaW5oZXJpdGVkIGEgY2xpcFJlY3QsIHdlIG5l
ZWQgdG8gaW50ZXJzZWN0IHdpdGggaXQgYmVmb3JlCisgICAgICAgIC8vIG92ZXJyaWRpbmcgdGhl
IGxheWVyJ3MgY2xpcFJlY3QgYW5kIHVzZXNMYXllckNsaXBwaW5nLgorICAgICAgICBpZiAobGF5
ZXItPnVzZXNMYXllckNsaXBwaW5nKCkpCiAgICAgICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3Qo
bGF5ZXItPmNsaXBSZWN0KCkpOwotICAgICAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KGNsaXBS
ZWN0KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKTsKLSAg
ICAgICAgfQorCisgICAgICAgIGxheWVyLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7CisgICAgICAg
IGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyh0cnVlKTsKICAgICB9CiAKICAgICAvLyBOb3Rl
IHRoYXQgYXQgdGhpcyBwb2ludCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSBpcyBub3QgbmVjZXNz
YXJpbHkgdGhlIHNhbWUgYXMgbG9jYWwgdmFyaWFibGUgZHJhd1RyYW5zZm9ybS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVz
aW9uVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCmluZGV4IGQ3MWYyYTY0MWZlMjExOTEzZjE1NjY4
OTc5Nzk3MDI1N2FlZjUwYzIuLjk5Y2Q0ZGQwNjJlMGQwOTZlNDRlOTMwNGZjYmVkOTE5NjRlNjUy
ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcApAQCAtMzQwLDggKzM0
MCw3IEBAIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6bGF5ZXJTY2lzc29yUmVjdEluCiB7CiAgICAgY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIHRhcmdldFN1cmZhY2UgPSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlOwogICAgIEZsb2F0
UmVjdCB0b3RhbFNjaXNzb3IgPSB0YXJnZXRTdXJmYWNlLT5jb250ZW50UmVjdCgpOwotICAgIC8v
IEZJWE1FOiBsYXllci0+Y2xpcFJlY3QoKSBhbmQgbGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkg
aXMgY2hhbmdpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDYy
MgotICAgIGlmICghbGF5ZXItPmNsaXBSZWN0KCkuaXNFbXB0eSgpKQorICAgIGlmIChsYXllci0+
dXNlc0xheWVyQ2xpcHBpbmcoKSkKICAgICAgICAgdG90YWxTY2lzc29yLmludGVyc2VjdChsYXll
ci0+Y2xpcFJlY3QoKSk7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodG90YWxTY2lzc29y
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggOWY3MTRjNWMwODAzYTczZjkz
YTQzYTI5ZjFjYzA1YzA3ZDE5M2M4ZC4uYWM0ODY1NWEzOTYyZTY3YTRjZTdkYmY0YzkyMjExN2Ez
MjM0ZTIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTEwMyw2ICsxMDMsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzY3JlZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmcoKSBj
b25zdCB7IHJldHVybiBtX3NjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZzsgfQogICAg
IHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5n
KSB7IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9CiAK
KyAgICAvLyBVc2FnZTogdGhpcyBjbGlwUmVjdCBzaG91bGQgbm90IGJlIHVzZWQgaWYgb25lIG9m
IHRoZSB0d28gY29uZGl0aW9ucyBpcyB0cnVlOiAoYSkgY2xpcFJlY3QoKSBpcyBlbXB0eSwgb3Ig
KGIpIG93bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSBpcyBmYWxzZS4K
ICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFk
U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2hhcmVkUXVhZFN0YXRlLmgKaW5kZXggZTc4NTc1N2Y5ZGI5NGIxYjMyMDYxZmQ4ZDhiMjFjNDBi
ZWYxZmYwYS4uNDIwNmFhNWMyZGUyYTc1NGM5Y2E5MWY0ZThlODg5MzgyMjExZmYyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFy
ZWRRdWFkU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoKICAg
ICAvLyBUaGUgdHJhbnNmb3JtIHRoYXQgbGF5ZXJSZWN0KCkgc2hvdWxkIGJlIHRyYW5zZm9ybWVk
IHdpdGguCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllclRyYW5zZm9ybTsgfQogICAgIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZWN0OyB9CisgICAgLy8gVXNhZ2U6IGlm
IGNsaXBSZWN0IGlzIGVtcHR5LCB0aGlzIGNsaXBSZWN0IHNob3VsZCBub3QgYmUgdXNlZC4KICAg
ICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0K
IAogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QuY3BwCmluZGV4IGQ0ZjRjMjEzOTFlMGYwMzU2ZWY3NjkwNWI4ODFjMGM1MjYyZTA1
YTcuLjRhOTY1OWRkZDE1M2VmZjZlNjc1MmVhMjA3MDZlMjNjN2UxMjRiNjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LmNwcApAQCAtNjI1LDYgKzYyNSw1NSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKICAgICBncmFuZENoaWxk
LT5zZXRPcGFjaXR5KDAuNSk7CiAgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRPcGFjaXR5KDAuNCk7
CiAKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7
CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hl
biB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5
ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50
LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOworCisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOworCisgICAgQVNTRVJUX0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdFswXS0+aWQoKSk7CisgICAgRVhQRUNUX0VRKGNoaWxkLT5pZCgpLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0WzFdLT5pZCgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFzaFJlcHJvKQoreworICAgIC8v
IFRoaXMgaXMgYSBzaW1pbGFyIHNpdHVhdGlvbiBhcyB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVy
U3VyZmFjZXMsIGV4Y2VwdCB0aGF0CisgICAgLy8gaXQgcmVwcm9kdWNlcyBhIGNyYXNoIGJ1ZyBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDY3MzQu
CisKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JlYXRHcmFuZENoaWxkID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBsZWFmTm9kZTEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBsZWFmTm9kZTIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5k
Q2hpbGQpOworICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKGdyZWF0R3JhbmRDaGlsZCk7CisKKyAg
ICAvLyBsZWFmTm9kZTEgZW5zdXJlcyB0aGF0IHBhcmVudCBhbmQgY2hpbGQgYXJlIGtlcHQgb24g
dGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QsCisgICAgLy8gZXZlbiB0aG91Z2ggZ3JhbmRDaGls
ZCBhbmQgZ3JlYXRHcmFuZENoaWxkIHNob3VsZCBiZSBjbGlwcGVkLgorICAgIGNoaWxkLT5hZGRD
aGlsZChsZWFmTm9kZTEpOworICAgIGdyZWF0R3JhbmRDaGlsZC0+YWRkQ2hpbGQobGVhZk5vZGUy
KTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCg0NSwgNDUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGdyZWF0R3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEw
LCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxlYWZOb2Rl
MS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGVhZk5vZGUyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMjAsIDIwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7
CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC40KTsKKyAgICBncmFuZENoaWxkLT5zZXRPcGFjaXR5
KDAuNSk7CisgICAgZ3JlYXRHcmFuZENoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CisKICAgICAvLyBD
b250YW1pbmF0ZSB0aGUgZ3JhbmRDaGlsZCBhbmQgZ3JlYXRHcmFuZENoaWxkJ3MgY2xpcFJlY3Qg
dG8gcmVwcm9kdWNlIHRoZSBjcmFzaAogICAgIC8vIGJ1ZyBmb3VuZCBpbiBodHRwOi8vY29kZS5n
b29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDY3MzQuIEluIHRoaXMKICAg
ICAvLyBidWcsIHRoZSBjbGlwUmVjdCB3YXMgbm90IHJlLWNvbXB1dGVkIGZvciBsYXllcnMgdGhh
dCBjcmVhdGUgUmVuZGVyU3VyZmFjZXMsIGFuZApAQCAtNjMyLDkgKzY4MSw2IEBAIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2Vz
KQogICAgIC8vIHJlbmRlclN1cmZhY2UgcmVtYWlucyBvbiB0aGUgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgd2hpY2ggdmlvbGF0ZXMgdGhlIGFzc3VtcHRpb24KICAgICAvLyB0aGF0IGFuIGVtcHR5
IHJlbmRlclN1cmZhY2Ugd2lsbCBhbHdheXMgYmUgdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCwg
d2hpY2gKICAgICAvLyB1bHRpbWF0ZWx5IGNhdXNlZCB0aGUgY3Jhc2guCi0gICAgLy8KLSAgICAv
LyBGSVhNRTogaXQgaXMgYWxzbyB1c2VmdWwgdG8gdGVzdCB3aXRoIHRoaXMgY29tbWVudGVkIG91
dC4gRXZlbnR1YWxseSB3ZSBzaG91bGQKLSAgICAvLyBjcmVhdGUgc2V2ZXJhbCB0ZXN0IGNhc2Vz
IHRoYXQgdGVzdCBjbGlwUmVjdC9kcmF3YWJsZUNvbnRlbnRSZWN0IGNvbXB1dGF0aW9uLgogICAg
IGNoaWxkLT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMjAs
IDIwKSkpOwogICAgIGdyZWF0R3JhbmRDaGlsZC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBJbnRTaXplKDEyMzQsIDEyMzQpKSk7CiAKQEAgLTY1Myw2ICs2OTksMTQ4IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRl
clN1cmZhY2VzKQogICAgIEVYUEVDVF9FUShjaGlsZC0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdFsxXS0+aWQoKSk7CiB9CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xheWVycykKK3sKKyAgICAvLyBWZXJp
ZnkgdGhhdCBsYXllcnMgZ2V0IHRoZSBhcHByb3ByaWF0ZSBjbGlwUmVjdHMgd2hlbiB0aGVpciBw
YXJlbnQgbWFza3NUb0JvdW5kcyBpcyB0cnVlLgorICAgIC8vCisgICAgLy8gICBncmFuZENoaWxk
MSAtIGNvbXBsZXRlbHkgaW5zaWRlIHRoZSByZWdpb247IGNsaXBSZWN0IHNob3VsZCBiZSB0aGUg
bWFzayByZWdpb24gKGxhcmdlciB0aGFuIHRoaXMgbGF5ZXIncyBib3VuZHMpLgorICAgIC8vICAg
Z3JhbmRDaGlsZDIgLSBwYXJ0aWFsbHkgY2xpcHBlZCBidXQgTk9UIG1hc2tzVG9Cb3VuZHM7IHRo
ZSBjbGlwUmVjdCBzaG91bGQgYmUgdGhlIHBhcmVudCdzIGNsaXBSZWN0IHJlZ2FyZGxlc3Mgb2Yg
dGhlIGxheWVyJ3MgYm91bmRzLgorICAgIC8vICAgZ3JhbmRDaGlsZDMgLSBwYXJ0aWFsbHkgY2xp
cHBlZCBhbmQgbWFza3NUb0JvdW5kczsgdGhlIGNsaXBSZWN0IHdpbGwgYmUgdGhlIGludGVyc2Vj
dGlvbiBvZiBsYXllckJvdW5kcyBhbmQgdGhlIG1hc2sgcmVnaW9uLgorICAgIC8vICAgZ3JhbmRD
aGlsZDQgLSBvdXRzaWRlIHBhcmVudCdzIGNsaXBSZWN0LCBhbmQgbWFza3NUb0JvdW5kczsgdGhl
IGNsaXBSZWN0IHNob3VsZCBiZSBlbXB0eS4KKyAgICAvLworCisgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBncmFuZENoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBncmFuZENoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMyA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkNCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworCisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAg
cGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQx
KTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIpOworICAgIGNoaWxkLT5hZGRDaGls
ZChncmFuZENoaWxkMyk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQ0KTsKKworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCksIGZhbHNlKTsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQxLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNSwgNSks
IEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoZ3JhbmRDaGlsZDIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxNSwgMTUpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQzLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMTUsIDE1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhncmFuZENoaWxkNC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDQ1LCA0NSksIEludFNpemUoMTAs
IDEwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAg
Z3JhbmRDaGlsZDMtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgZ3JhbmRDaGlsZDQtPnNl
dE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICAvLyBGb3JjZSBldmVyeW9uZSB0byBiZSBhIHJl
bmRlciBzdXJmYWNlLgorICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNCk7CisgICAgZ3JhbmRDaGls
ZDEtPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkMi0+c2V0T3BhY2l0eSgwLjUpOwor
ICAgIGdyYW5kQ2hpbGQzLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZ3JhbmRDaGlsZDQtPnNldE9w
YWNpdHkoMC41KTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1t
eUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8v
IEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZp
b3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4K
KyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5n
ZXQoKSk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDIwLCAyMCkpLCBncmFuZENoaWxkMS0+Y2xpcFJl
Y3QoKSk7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
SW50U2l6ZSgyMCwgMjApKSwgZ3JhbmRDaGlsZDItPmNsaXBSZWN0KCkpOworICAgIEVYUEVDVF9J
TlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDE1LCAxNSksIEludFNpemUoNSwgNSkpLCBncmFu
ZENoaWxkMy0+Y2xpcFJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDQtPmNsaXBS
ZWN0KCkuaXNFbXB0eSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvU3VyZmFjZXMpCit7CisgICAgLy8g
VmVyaWZ5IHRoYXQgcmVuZGVyU3VyZmFjZXMgKGFuZCB0aGVpciBsYXllcnMpIGdldCB0aGUgYXBw
cm9wcmlhdGUgY2xpcFJlY3RzIHdoZW4gdGhlaXIgcGFyZW50IG1hc2tzVG9Cb3VuZHMgaXMgdHJ1
ZS4KKyAgICAvLworICAgIC8vIExheWVycyB0aGF0IG93biByZW5kZXJTdXJmYWNlcyAoYXQgbGVh
c3QgZm9yIG5vdykgZG8gbm90IGluaGVyaXQgYW55IGNsaXBSZWN0OworICAgIC8vIGluc3RlYWQg
dGhlIHN1cmZhY2Ugd2lsbCBlbmZvcmNlIHRoZSBjbGlwIGZvciB0aGUgZW50aXJlIHN1YnRyZWUu
IFRoZXkgbWF5IHN0aWxsCisgICAgLy8gaGF2ZSBhIGNsaXBSZWN0IG9mIHRoZWlyIG93biBsYXll
ciBib3VuZHMsIGhvd2V2ZXIsIGlmIG1hc2tzVG9Cb3VuZHMgd2FzIHRydWUuCisgICAgLy8KKwor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZDMgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRD
aGlsZDQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMSA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMiA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMyA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlNCA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKworICAgIHBhcmVudC0+Y3JlYXRlUmVu
ZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5h
ZGRDaGlsZChncmFuZENoaWxkMSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQyKTsK
KyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDMpOworICAgIGNoaWxkLT5hZGRDaGlsZChn
cmFuZENoaWxkNCk7CisKKyAgICAvLyB0aGUgbGVhZiBub2RlcyBlbnN1cmUgdGhhdCB0aGVzZSBn
cmFuZENoaWxkcmVuIGJlY29tZSByZW5kZXJTdXJmYWNlcyBmb3IgdGhpcyB0ZXN0LgorICAgIGdy
YW5kQ2hpbGQxLT5hZGRDaGlsZChsZWFmTm9kZTEpOworICAgIGdyYW5kQ2hpbGQyLT5hZGRDaGls
ZChsZWFmTm9kZTIpOworICAgIGdyYW5kQ2hpbGQzLT5hZGRDaGlsZChsZWFmTm9kZTMpOworICAg
IGdyYW5kQ2hpbGQ0LT5hZGRDaGlsZChsZWFmTm9kZTQpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUwMCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoMjAsIDIwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCg1LCA1KSwgSW50U2l6ZSgxMCwgMTAp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMi5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDE1LCAxNSksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDMuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxNSwgMTUpLCBJbnRT
aXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdy
YW5kQ2hpbGQ0LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoNDUsIDQ1KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTEuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhsZWFmTm9kZTIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsZWFmTm9kZTMuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsZWFmTm9kZTQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxz
ZSk7CisKKyAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBncmFuZENoaWxk
My0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBncmFuZENoaWxkNC0+c2V0TWFza3NUb0Jv
dW5kcyh0cnVlKTsKKworICAgIC8vIEZvcmNlIGV2ZXJ5b25lIHRvIGJlIGEgcmVuZGVyIHN1cmZh
Y2UuCisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC40KTsKKyAgICBncmFuZENoaWxkMS0+c2V0T3Bh
Y2l0eSgwLjUpOworICAgIGdyYW5kQ2hpbGQyLT5zZXRPcGFjaXR5KDAuNSk7CisgICAgZ3JhbmRD
aGlsZDMtPnNldE9wYWNpdHkoMC41KTsKKyAgICBncmFuZENoaWxkNC0+c2V0T3BhY2l0eSgwLjUp
OworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0
OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdo
ZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xh
eWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVu
dC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygp
KSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKKwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKKworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQzLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVD
VF9GQUxTRShncmFuZENoaWxkNC0+cmVuZGVyU3VyZmFjZSgpKTsgLy8gQmVjYXVzZSBncmFuZENo
aWxkNCBpcyBlbnRpcmVseSBjbGlwcGVkLCBpdCBpcyBleHBlY3RlZCB0byBub3QgaGF2ZSBhIHJl
bmRlclN1cmZhY2UuCisKKyAgICAvLyBTdXJmYWNlcyBhcmUgY2xpcHBlZCBieSB0aGVpciBwYXJl
bnQsIGJ1dCB1bi1hZmZlY3RlZCBieSB0aGUgb3duaW5nIGxheWVyJ3MgbWFza3NUb0JvdW5kcy4K
KyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgy
MCwgMjApKSwgZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y2xpcFJlY3QoKSk7CisgICAg
RVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoMjAsIDIw
KSksIGdyYW5kQ2hpbGQyLT5yZW5kZXJTdXJmYWNlKCktPmNsaXBSZWN0KCkpOworICAgIEVYUEVD
VF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDIwLCAyMCkpLCBn
cmFuZENoaWxkMy0+cmVuZGVyU3VyZmFjZSgpLT5jbGlwUmVjdCgpKTsKKworICAgIC8vIExheWVy
cyBkbyBub3QgaW5oZXJpdCB0aGUgY2xpcFJlY3QgZnJvbSB0aGVpciBvd25lZCBzdXJmYWNlcywg
YnV0IGlmIG1hc2tzVG9Cb3VuZHMgaXMgdHJ1ZSwgdGhleSBkbyBjcmVhdGUgdGhlaXIgb3duIGNs
aXBSZWN0LgorICAgIEVYUEVDVF9GQUxTRShncmFuZENoaWxkMS0+dXNlc0xheWVyQ2xpcHBpbmco
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGdyYW5kQ2hpbGQyLT51c2VzTGF5ZXJDbGlwcGluZygpKTsK
KyAgICBFWFBFQ1RfVFJVRShncmFuZENoaWxkMy0+dXNlc0xheWVyQ2xpcHBpbmcoKSk7CisgICAg
RVhQRUNUX1RSVUUoZ3JhbmRDaGlsZDQtPnVzZXNMYXllckNsaXBwaW5nKCkpOworfQorCiBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUFuaW1hdGlvbnNGb3JSZW5kZXJTdXJm
YWNlSGllcmFyY2h5KQogewogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oCmluZGV4IDBiODNkYWNhYmEzY2ZlMDFjYWNhM2Fi
YTU5YmY3ODc2NGE3ZGQxYTAuLjc1ZTQ4N2E0YTdlZjQ2ZTczYjYyODNjM2ZmNDUwYTVlNDVjYTg2
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVU
ZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZVRlc3RDb21tb24uaApAQCAtMjcsMTMgKzI3LDE5IEBACiAKIG5hbWVzcGFjZSBXZWJLaXRUZXN0
cyB7CiAKLS8vIFRoaXMgaXMgYSBtYWNybyBpbnN0ZWFkIG9mIGZ1bmN0aW9uIHNvIHRoYXQgd2Ug
Z2V0IHVzZWZ1bCBsaW5lIG51bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxlZC4KKy8vIFRoZXNlIGFy
ZSBtYWNyb3MgaW5zdGVhZCBvZiBmdW5jdGlvbnMgc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUg
bnVtYmVycyB3aGVyZSBhIHRlc3QgZmFpbGVkLgogI2RlZmluZSBFWFBFQ1RfRkxPQVRfUkVDVF9F
UShleHBlY3RlZCwgYWN0dWFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLmxvY2F0aW9uKCkueCgpLCAoYWN0dWFsKS5sb2NhdGlvbigp
LngoKSk7IFwKICAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5sb2NhdGlvbigpLnkoKSwg
KGFjdHVhbCkubG9jYXRpb24oKS55KCkpOyBcCiAgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkuc2l6ZSgpLndpZHRoKCksIChhY3R1YWwpLnNpemUoKS53aWR0aCgpKTsgXAogICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS5oZWlnaHQoKSwgKGFjdHVhbCkuc2l6ZSgpLmhl
aWdodCgpKQogCisjZGVmaW5lIEVYUEVDVF9JTlRfUkVDVF9FUShleHBlY3RlZCwgYWN0dWFsKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRVhQRUNUX0VRKChleHBlY3RlZCkubG9j
YXRpb24oKS54KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueCgpKTsgICAgICBcCisgICAgRVhQRUNU
X0VRKChleHBlY3RlZCkubG9jYXRpb24oKS55KCksIChhY3R1YWwpLmxvY2F0aW9uKCkueSgpKTsg
ICAgICBcCisgICAgRVhQRUNUX0VRKChleHBlY3RlZCkuc2l6ZSgpLndpZHRoKCksIChhY3R1YWwp
LnNpemUoKS53aWR0aCgpKTsgICAgICBcCisgICAgRVhQRUNUX0VRKChleHBlY3RlZCkuc2l6ZSgp
LmhlaWdodCgpLCAoYWN0dWFsKS5zaXplKCkuaGVpZ2h0KCkpCisKIC8vIFRoaXMgaXMgYSBtYWNy
byBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gc28gdGhhdCB3ZSBnZXQgdXNlZnVsIGxpbmUgbnVtYmVy
cyB3aGVyZSBhIHRlc3QgZmFpbGVkLgogLy8gRXZlbiB0aG91Z2ggVHJhbnNmb3JtYXRpb25NYXRy
aXggdmFsdWVzIGFyZSBkb3VibGUgcHJlY2lzaW9uLCB0aGVyZSBhcmUgbWFueSBvdGhlciBmbG9h
dGluZy1wb2ludCB2YWx1ZXMgdXNlZCB0aGF0IGFmZmVjdAogLy8gdGhlIHRyYW5zZm9ybXMsIGFu
ZCBzbyB3ZSBvbmx5IGV4cGVjdCB0aGVtIHRvIGJlIGFjY3VyYXRlIHVwIHRvIGZsb2F0aW5nLXBv
aW50IHByZWNpc2lvbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyZWJjYjk0NjI0YWI3MzRiNWUyNzRkNjFhNzZiYmI4MDkw
M2UwNTQ3Li4yMmVkZmMzOGYxZGQzYWEwMTFiMGIzOGU2NTBiMmY5YjUzZGM1ZmRlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMTItMDMtMjYgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBsYXllci0+Y2xpcFJlY3QoKSBpcyBub3Qg
aW5pdGlhbGl6ZWQgZm9yIGxheWVycyB0aGF0IGNyZWF0ZSBhIHJlbmRlclN1cmZhY2UuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE0NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OiBtYXJrZWQgdGVzdCBhcyBuZWVkaW5nIHJlYmFz
ZWxpbmluZworCiAyMDEyLTAzLTI4ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHNraXBwaW5nIDMgdGVzdHMgdGltaW5nIG91
dCBhZnRlciB0aGUgbGlic291cCB1cGdyYWRlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggNWJmMTE4MWJhYjQwNzlmZGM1
NjEyZWQ4NDIyOTA2NjE4YjM1ZjMwYy4uNjU5YzBjY2NmZTliZDg1ZDgzNzhhYWY4MWQyZGExNGY0
YmE5ZDI5MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dApAQCAtNDEyMyw2ICs0MTIzLDEwIEBAIEJVR1dLNzg0MTIgTUFDIFdJ
TiA6IGZhc3QvcmVwYWludC9zY3JvbGwtaW5zaWRlLXRhYmxlLWNlbGwuaHRtbCA9IElNQUdFCiBC
VUdXSzc4NDEyIE1BQyBXSU4gOiBmYXN0L3JlcGFpbnQvc2Nyb2xsLXJlbGF0aXZlLXRhYmxlLWlu
c2lkZS10YWJsZS1jZWxsLmh0bWwgPSBJTUFHRQogQlVHV0s3ODQxMiBNQUMgV0lOIDogZmFzdC90
YWJsZS9jZWxsLXByZWYtd2lkdGgtaW52YWxpZGF0aW9uLmh0bWwgPSBURVhUCiAKKy8vIE5lZWRz
IHJlYmFzZWxpbmluZyBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzQxNDcuCisvLyBJdCBpcyBjb3JyZWN0IGZvciB0aGUgcmVmbGVjdGVkIHRleHQgdG8gYmUg
dmlzaWJsZS4KK0JVR1dLNzQxNDcgOiBjb21wb3NpdGluZy9yZWZsZWN0aW9ucy9uZXN0ZWQtcmVm
bGVjdGlvbi1vbi1vdmVyZmxvdy5odG1sID0gSU1BR0UKKwogLy8gTmVlZCByZWJhc2VsaW5pbmcu
CiBCVUdXSzM3MjQ0IDogdGFibGVzL21vemlsbGEvYnVncy9idWcyNzAzOC0xLmh0bWwgPSBJTUFH
RStURVhUCiBCVUdXSzM3MjQ0IDogdGFibGVzL21vemlsbGEvYnVncy9idWcyNzAzOC0yLmh0bWwg
PSBJTUFHRStURVhUCg==
</data>
<flag name="review"
          id="138591"
          type_id="1"
          status="+"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>