<?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>76858</bug_id>
          
          <creation_ts>2012-01-23 13:41:50 -0800</creation_ts>
          <short_desc>[chromium] Compute occlusion during paint loop</short_desc>
          <delta_ts>2012-01-31 13:15:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>76015</dependson>
    
    <dependson>77406</dependson>
          <blocked>76838</blocked>
    
    <blocked>77386</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>540799</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-23 13:41:50 -0800</bug_when>
    <thetext>[chromium] Compute occlusion during paint loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540805</commentid>
    <comment_count>1</comment_count>
      <attachid>123613</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-23 13:46:22 -0800</bug_when>
    <thetext>Created attachment 123613
Patch

For @enne review.

- Computes occluded region in screen space during paint process.
- Adds unit test to ensure layers contribute to the occluded region nicely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541408</commentid>
    <comment_count>2</comment_count>
      <attachid>123613</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-24 09:50:50 -0800</bug_when>
    <thetext>Comment on attachment 123613
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:520
&gt; +    if (opaque()) {

Don&apos;t you need an opacity check here too? Also, how do you handle the fact that that a layer might have an opacity of 1 but is drawn into a render surface with an opacity != 1? Can you add a test for that?

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:525
&gt; +        if (screenSpaceQuad.isRectilinear() &amp;&amp; screenSpaceQuad.boundingBox().isExpressibleAsIntRect())

Isn&apos;t the first check enough if you&apos;re going to use enclosedIntRect?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:461
&gt; +static IntRect enclosedIntRect(const FloatRect&amp; rect)

Can you not duplicate this function? Either put it in FloatRect or make it a helper on LayerChromium?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:475
&gt; +    if (opaque()) {

Opacity here, as above?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:482
&gt; +    if (!screenSpaceQuad.isRectilinear() || !screenSpaceQuad.boundingBox().isExpressibleAsIntRect())

No need for the isExpressibleAsIntRect, as above?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:491
&gt; +    for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler-&gt;tiles().begin(); iter != m_tiler-&gt;tiles().end(); ++iter) {
&gt; +        UpdatableTile* tile = static_cast&lt;UpdatableTile*&gt;(iter-&gt;second.get());
&gt; +        tileRegion.unite(tile-&gt;m_opaqueRect);
&gt; +    }

Hash maps can get large.  If you&apos;re going to intersect with the visibleLayerRect later, can you just iterate through the tiles that intersect with the visibleLayerRect?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:427
&gt; +        paintContentsIfDirty(renderSurfaceLayer-&gt;maskLayer(), paintType, occludedScreenSpace);

I think this is wrong.  Any surface with a mask is opaque at a given pixel iff the layers drawing into that pixel are opaque, the opacity on the surface is 1, and the mask&apos;s alpha value is 1.  I think you&apos;re only checking the last condition, but I&apos;m not sure that you can check the first.  Can you add a test?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:432
&gt; +        paintContentsIfDirty(replicaLayer, paintType, occludedScreenSpace);

Er, is the right transform being applied here for replica layers? Replica layers are the same layer as the layer they&apos;re replicating, but use the replica draw transform in CCRenderSurface. Can you write a test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543247</commentid>
    <comment_count>3</comment_count>
      <attachid>124139</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-26 10:33:44 -0800</bug_when>
    <thetext>Created attachment 124139
Patch

Reworked this. Occlusion is computed into a single RS target at a time. I&apos;ll worry about crossing between RenderSurfaces in another CL.
This should be pretty straight-forward as visibleLayerRect will handle clipping up to the target RenderSurface.

Comments addressed:
- added logic about opacity() == 1
- changed how enclosedIntRect() works so that we can avoid isExpressibleAsIntRect()
- pushed enclosedIntRect() out to FloatRect.cpp
- only add occlusion from tiles that touch the visibleLayerRect
- don&apos;t do anything with replica/mask layers, since RS do not contribute to occlusion now (it&apos;s reset when you start painting in a new RS).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543295</commentid>
    <comment_count>4</comment_count>
      <attachid>124150</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-26 11:04:51 -0800</bug_when>
    <thetext>Created attachment 124150
Patch

s/occludedScreenSpace/occludedTargetSpace/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543340</commentid>
    <comment_count>5</comment_count>
      <attachid>124150</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-26 11:50:25 -0800</bug_when>
    <thetext>Comment on attachment 124150
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:199
&gt; +    virtual void addSelfToOccludedRegion(Region* occludedTargetSpace);

Please use a reference here instead of a pointer unless passing NULL to this function is valid behavior.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:472
&gt; +    // contained within each tile&apos;s screen-space opaque rect.

Merging the tiles might help a bit here but it doesn&apos;t really solve the problem. You&apos;re still going to have rectangles that touch each other. How about we limit occlusion to layers that pass the isExpressibleAsIntRect() check just like what we&apos;re doing to determine if a layer needs anti-aliasing? And we can use a follow up patch to improve this. I don&apos;t think a FloatRegion is the solution here. The complexity of such thing would be even more unpredictable than a Region.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543345</commentid>
    <comment_count>6</comment_count>
      <attachid>124150</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-26 11:56:33 -0800</bug_when>
    <thetext>Comment on attachment 124150
Patch

Attachment 124150 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11163431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543348</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-26 12:00:30 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=124150&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:199
&gt;&gt; +    virtual void addSelfToOccludedRegion(Region* occludedTargetSpace);
&gt; 
&gt; Please use a reference here instead of a pointer unless passing NULL to this function is valid behavior.

k

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:472
&gt;&gt; +    // contained within each tile&apos;s screen-space opaque rect.
&gt; 
&gt; Merging the tiles might help a bit here but it doesn&apos;t really solve the problem. You&apos;re still going to have rectangles that touch each other. How about we limit occlusion to layers that pass the isExpressibleAsIntRect() check just like what we&apos;re doing to determine if a layer needs anti-aliasing? And we can use a follow up patch to improve this. I don&apos;t think a FloatRegion is the solution here. The complexity of such thing would be even more unpredictable than a Region.

it&apos;s not rotations that are the problem I am trying to address here, it is scaling where the resulting tile rects have partial pixels in it. if tile boundaries are mid-pixel, then if we take each tile separately, we have to shrink each tile down to drop the partial pixels when deciding what&apos;s opaque. and that leaves the pixel shared by the two tiles as marked non-opaque in the end.

this solution isn&apos;t perfect but at least when you scale a layer you don&apos;t get little 1-pixel lines at all tile boundaries which would greatly degrade the usefulness of the occlusion to the layers below.

aside: I don&apos;t know why a FloatRect would have worse complexity than an IntRect if you comparisons taking numeric_limit::epsilon into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543355</commentid>
    <comment_count>8</comment_count>
      <attachid>124150</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-26 12:03:37 -0800</bug_when>
    <thetext>Comment on attachment 124150
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:510
&gt; +    if (drawOpacity() != 1 || !isPaintedAxisAlignedInTarget())
&gt; +        return;
&gt; +
&gt; +    if (opaque()) {
&gt; +        FloatRect targetRect = contentToTargetSpaceTransform().mapRect(FloatRect(visibleLayerRect()));
&gt; +        occludedTargetSpace-&gt;unite(enclosedIntRect(targetRect));
&gt; +    }

nit: put opaque() in the first conditional.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:473
&gt; +    // FIXME: Create/Use a FloatRegion instead of a Region based on ints to avoid this step and get better accuracy in screen space.

How would that help? Aren&apos;t the opaque rects on tiles necessarily IntRects?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:449
&gt; +            occludedTargetSpace = Region();

This looks like if you ever come along something that draws a render surface as a texture, then you reset the occlusion? Why not just not add anything for that surface?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:451
&gt; +            // Mask and replica layers are not occluded by layers in the surface

Just so I understand, this is a FIXME and not a hard constraint, right? It seems like mask and replica layers could be skipped entirely by culling.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:633
&gt; +    EXPECT_EQ_RECT(IntRect(30, 30, 70, 70), occluded.bounds());

nit: Region::bounds() is not necessarily fully covered by the rects in a region unless you also verify that there&apos;s only one rect.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:734
&gt; +    // FIXME: when we fix this &quot;root-layer special case&quot; behavior in CCLayerTreeHost, we will have to fix it here, too.

I don&apos;t know that I agree with this FIXME. The viewport has to be set *somewhere*, I think.

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:426
&gt; +    // But a non-axis-aligned transform does not get considered for occlusion.

nit: This feels like testing the code rather than testing behavior.  We could theoretically support an enclosedIntRect(FloatQuad&amp;) function in the future?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543374</commentid>
    <comment_count>9</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-26 12:21:01 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:472
&gt; &gt;&gt; +    // contained within each tile&apos;s screen-space opaque rect.
&gt; &gt; 
&gt; &gt; Merging the tiles might help a bit here but it doesn&apos;t really solve the problem. You&apos;re still going to have rectangles that touch each other. How about we limit occlusion to layers that pass the isExpressibleAsIntRect() check just like what we&apos;re doing to determine if a layer needs anti-aliasing? And we can use a follow up patch to improve this. I don&apos;t think a FloatRegion is the solution here. The complexity of such thing would be even more unpredictable than a Region.
&gt; 
&gt; it&apos;s not rotations that are the problem I am trying to address here, it is scaling where the resulting tile rects have partial pixels in it. if tile boundaries are mid-pixel, then if we take each tile separately, we have to shrink each tile down to drop the partial pixels when deciding what&apos;s opaque. and that leaves the pixel shared by the two tiles as marked non-opaque in the end.
&gt; 
&gt; this solution isn&apos;t perfect but at least when you scale a layer you don&apos;t get little 1-pixel lines at all tile boundaries which would greatly degrade the usefulness of the occlusion to the layers below.

I understand. It takes care of the scale and floating point translation cases when all tiles are opaque. If all tiles are not opaque you can still get a bunch of 1-pixel lines at tile boundaries. Maybe we should only use this optimization when we know that all tiles are opaque? And not bother with the union..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543394</commentid>
    <comment_count>10</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-26 12:41:29 -0800</bug_when>
    <thetext>Thanks for review!

(In reply to comment #8)
&gt; (From update of attachment 124150 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124150&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:510
&gt; &gt; +    if (drawOpacity() != 1 || !isPaintedAxisAlignedInTarget())
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    if (opaque()) {
&gt; &gt; +        FloatRect targetRect = contentToTargetSpaceTransform().mapRect(FloatRect(visibleLayerRect()));
&gt; &gt; +        occludedTargetSpace-&gt;unite(enclosedIntRect(targetRect));
&gt; &gt; +    }
&gt; 
&gt; nit: put opaque() in the first conditional.

done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:473
&gt; &gt; +    // FIXME: Create/Use a FloatRegion instead of a Region based on ints to avoid this step and get better accuracy in screen space.
&gt; 
&gt; How would that help? Aren&apos;t the opaque rects on tiles necessarily IntRects?

It&apos;s the occludedTargetSpace Region I&apos;m talking about here not the one joining the tile rects. The latter could just go away. Made comment more clear.

Tile rects translated to the space of the occlusion Region are now FloatRects and may have boundaries inside pixels (rather than between pixels). My comment to Revemen tried to explain what is wrong with the current Int-Region approach if you consider each tile independently. The same problem exists between layers and a Float-Region would resolve that.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:449
&gt; &gt; +            occludedTargetSpace = Region();
&gt; 
&gt; This looks like if you ever come along something that draws a render surface as a texture, then you reset the occlusion? Why not just not add anything for that surface?

When you reach a target RS then you are going to paint the target and your target surface will become different for the next painted layer. For now I build occlusion within each target RenderSurface independently, don&apos;t consider contributing RenderSurfaces, and start over for a new target.

In future:
- layers with a contributing RS can bring that RS&apos;s occlusion along for the current target.
- A RS that is in front of, but not contributing to, a target can occlude the current target.
But these are not part of this CL.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:451
&gt; &gt; +            // Mask and replica layers are not occluded by layers in the surface
&gt; 
&gt; Just so I understand, this is a FIXME and not a hard constraint, right? It seems like mask and replica layers could be skipped entirely by culling.

Yeh. What it says is true IIUC. Layers within a target surface don&apos;t occlude the mask/replica since they are applied to those layers. But as you say, other RenderSurfaces could occlude the mask/replica, something not considered for now. I will clarify in comment.

&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:633
&gt; &gt; +    EXPECT_EQ_RECT(IntRect(30, 30, 70, 70), occluded.bounds());
&gt; 
&gt; nit: Region::bounds() is not necessarily fully covered by the rects in a region unless you also verify that there&apos;s only one rect.

Yeh, I thought it was a safe assumption here, but adding checks for it.

&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:734
&gt; &gt; +    // FIXME: when we fix this &quot;root-layer special case&quot; behavior in CCLayerTreeHost, we will have to fix it here, too.
&gt; 
&gt; I don&apos;t know that I agree with this FIXME. The viewport has to be set *somewhere*, I think.

Me either, I just copied it from the test above. Want me to reword them all?

&gt; &gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:426
&gt; &gt; +    // But a non-axis-aligned transform does not get considered for occlusion.
&gt; 
&gt; nit: This feels like testing the code rather than testing behavior.  We could theoretically support an enclosedIntRect(FloatQuad&amp;) function in the future?

You&apos;re right, I thought about it and wasn&apos;t sure what to test though. I have added a FIXME here to justify changing it in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543395</commentid>
    <comment_count>11</comment_count>
      <attachid>124164</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-26 12:42:07 -0800</bug_when>
    <thetext>Created attachment 124164
Patch

comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543403</commentid>
    <comment_count>12</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-26 12:50:32 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I understand. It takes care of the scale and floating point translation cases when all tiles are opaque. If all tiles are not opaque you can still get a bunch of 1-pixel lines at tile boundaries. Maybe we should only use this optimization when we know that all tiles are opaque? And not bother with the union..

I think this gets the most important cases (fully opaque, opaque interior), and don&apos;t want to do anything less effective than that for now.  And we definitely will look to improve this in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543416</commentid>
    <comment_count>13</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-26 13:06:56 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9)
&gt; &gt; I understand. It takes care of the scale and floating point translation cases when all tiles are opaque. If all tiles are not opaque you can still get a bunch of 1-pixel lines at tile boundaries. Maybe we should only use this optimization when we know that all tiles are opaque? And not bother with the union..
&gt; 
&gt; I think this gets the most important cases (fully opaque, opaque interior), and don&apos;t want to do anything less effective than that for now.  And we definitely will look to improve this in the future.

Fine with me if others don&apos;t mind. I wish we could review and land patch-sets instead of patches as if someone goes back and looks at this change. It won&apos;t be obvious that it&apos;s a valid change without that optimization.

Btw, regarding using a FloatRegion. The computational complexity wont get worse. It&apos;s still N^2 for most region operations. The unpredictability of N is the problem when using a Region. I could theoretically create a page that causes N to be page-width * page-height. If we use a FloatRegion, then I could create a page where N=page-width/numeric_limit::epsilon * page-height/numeric_limit::epsilon. I find that uncomfortable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543598</commentid>
    <comment_count>14</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-26 15:50:10 -0800</bug_when>
    <thetext>(In reply to comment #10)

&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:449
&gt; &gt; &gt; +            occludedTargetSpace = Region();
&gt; &gt; 
&gt; &gt; This looks like if you ever come along something that draws a render surface as a texture, then you reset the occlusion? Why not just not add anything for that surface?
&gt; 
&gt; When you reach a target RS then you are going to paint the target and your target surface will become different for the next painted layer. For now I build occlusion within each target RenderSurface independently, don&apos;t consider contributing RenderSurfaces, and start over for a new target.

Ah, gotcha.  The iterator is going front-to-back, not by render surface.

I know that *any* paint culling is better than no paint culling, but it&apos;s kind of unfortunate that if you had a RS in the middle of your layer list that you might lose the ability to cull a lot of layers.  Does it make any sense to switch the iterator type here?

&gt; &gt; &gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:426
&gt; &gt; &gt; +    // But a non-axis-aligned transform does not get considered for occlusion.
&gt; &gt; 
&gt; &gt; nit: This feels like testing the code rather than testing behavior.  We could theoretically support an enclosedIntRect(FloatQuad&amp;) function in the future?
&gt; 
&gt; You&apos;re right, I thought about it and wasn&apos;t sure what to test though. I have added a FIXME here to justify changing it in the future.

I don&apos;t really know either.  At best you could add a rotated quad and make sure that it doesn&apos;t occlude some other quad that&apos;s adjacent/nearby but not overlapping? A FIXME is fine for now.  If it gets changed, that test can just get removed in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543626</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-26 16:15:39 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; When you reach a target RS then you are going to paint the target and your target surface will become different for the next painted layer. For now I build occlusion within each target RenderSurface independently, don&apos;t consider contributing RenderSurfaces, and start over for a new target.
&gt; 
&gt; Ah, gotcha.  The iterator is going front-to-back, not by render surface.
&gt; 
&gt; I know that *any* paint culling is better than no paint culling, but it&apos;s kind of unfortunate that if you had a RS in the middle of your layer list that you might lose the ability to cull a lot of layers.  Does it make any sense to switch the iterator type here?

Ah I see what you mean. We can just track the occluded Region on the target RenderSurface. I was going to have to do this in the future anyway for including contributing RenderSurfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543634</commentid>
    <comment_count>16</comment_count>
      <attachid>124209</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-26 16:22:57 -0800</bug_when>
    <thetext>Created attachment 124209
Patch

track occlusion in the target surface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544327</commentid>
    <comment_count>17</comment_count>
      <attachid>124361</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-27 13:48:41 -0800</bug_when>
    <thetext>Created attachment 124361
Patch

- dropped all new state from the RenderSurfaceChromium.
- using a stack in the CCLayerTreeHost::paintLayerContents() method to track occlusion in a way that respects clipping from RenderSurfaces
- more unit tests in CCLayerTreeHostTest.cpp for this stack approach.
- added the occluded Region to paintContentsIfDirty() for the new unit tests. it is not used anywhere except in tests in this CL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544358</commentid>
    <comment_count>18</comment_count>
      <attachid>124361</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-27 14:19:02 -0800</bug_when>
    <thetext>Comment on attachment 124361
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:432
&gt; +        paintContentsIfDirty(replicaLayer, paintType, noOcclusion);

Wouldn&apos;t this include occluders from the mask? Do you need a new local &quot;Region noOcclusion&quot; within each of these three conditional blocks?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:461
&gt; +static void popAndPushTargetRenderSurfaceRegion(Vector&lt;RenderSurfaceRegion&gt;&amp; stack, RenderSurfaceChromium* surface)

This function name is really opaque to me (pun not intended).  Sorry to bikeshed, but can you name these based on how they should be used and not the internal details of how they work? They&apos;re really &quot;start processing new render surface&quot; and &quot;finished processing render surface&quot;, yeah?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:472
&gt; +        // Replace the top of the stack with the new pushed surface. Copy the occluded region to the top.
&gt; +        stack.last().surface = surface;

When does this case happen?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:504
&gt; +            pushTargetRenderSurfaceRegion(targetSurfaceStack, it-&gt;targetRenderSurface());

Mostly asking out of curiosity, but why is this needed here? Shouldn&apos;t the it.representsTargetRenderSurface() case above catch this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544364</commentid>
    <comment_count>19</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-27 14:24:51 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 124361 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124361&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:432
&gt; &gt; +        paintContentsIfDirty(replicaLayer, paintType, noOcclusion);
&gt; 
&gt; Wouldn&apos;t this include occluders from the mask? Do you need a new local &quot;Region noOcclusion&quot; within each of these three conditional blocks?

The occlusion isnt modified in paintContentsIfDirty. It&apos;s a 1-way thing. You get occlusion back from a layer through addSelfToOccludedScreenSpace().

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:461
&gt; &gt; +static void popAndPushTargetRenderSurfaceRegion(Vector&lt;RenderSurfaceRegion&gt;&amp; stack, RenderSurfaceChromium* surface)
&gt; 
&gt; This function name is really opaque to me (pun not intended).  Sorry to bikeshed, but can you name these based on how they should be used and not the internal details of how they work? They&apos;re really &quot;start processing new render surface&quot; and &quot;finished processing render surface&quot;, yeah?

Yeh. First is &quot;start b&quot;, second is &quot;switch from b to a&quot;. Will fix them up.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:472
&gt; &gt; +        // Replace the top of the stack with the new pushed surface. Copy the occluded region to the top.
&gt; &gt; +        stack.last().surface = surface;
&gt; 
&gt; When does this case happen?

When the layer with contributing surface is the front-most layer in a target surface. Then the target surface won&apos;t be on the stack yet. Conceptually this is:
- save Region from top of stack
- pop top of stack
- push new target to top of stack if not there
- merge saved Region.

since we know it&apos;s not on the stack in this case, merging the region is just a copy, and we can just replace the surface pointer instead.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:504
&gt; &gt; +            pushTargetRenderSurfaceRegion(targetSurfaceStack, it-&gt;targetRenderSurface());
&gt; 
&gt; Mostly asking out of curiosity, but why is this needed here? Shouldn&apos;t the it.representsTargetRenderSurface() case above catch this?

It is FrontToBack, so representsTargetRenderSurface happens last for a given target. This one will always happen before it, if the surface has any layers at all. The reason it is in the it.representsTargetRenderSurface() at all is in the case the surface has no layers in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544402</commentid>
    <comment_count>20</comment_count>
      <attachid>124375</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-27 14:55:13 -0800</bug_when>
    <thetext>Created attachment 124375
Patch

- renamed methods to enterTargetRenderSurface() and leaveTargetRenderSurface()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544676</commentid>
    <comment_count>21</comment_count>
      <attachid>124375</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-28 12:43:24 -0800</bug_when>
    <thetext>Comment on attachment 124375
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:63
&gt; +    virtual void paintContentsIfDirty(const Region&amp; occludedScreenSpace);
&gt;      virtual void idlePaintContentsIfDirty();

shouldn&apos;t we also have the occluded region for idlePaint as well?

the fact that we need to duplicate this too makes me wonder if having parallel functions is the best way to do paint / idle paint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544678</commentid>
    <comment_count>22</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-28 13:05:40 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 124375 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124375&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:63
&gt; &gt; +    virtual void paintContentsIfDirty(const Region&amp; occludedScreenSpace);
&gt; &gt;      virtual void idlePaintContentsIfDirty();
&gt; 
&gt; shouldn&apos;t we also have the occluded region for idlePaint as well?

Yes, the next CL to do the culling adds it to idle function.

This CL doesn&apos;t actually use the region, but I needed to add it just to be able to subclass for testing purposes in CCLayerTreeHostTest.cpp

&gt; the fact that we need to duplicate this too makes me wonder if having parallel functions is the best way to do paint / idle paint

It&apos;s maybe nice to have separate functions for the logic of choosing what tiles to paint in TiledLayerChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545388</commentid>
    <comment_count>23</comment_count>
      <attachid>124594</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-30 13:56:07 -0800</bug_when>
    <thetext>Created attachment 124594
Patch

Was discarding occlusion in a RenderSurface subtree when the RS had a mask, but need to consider drawOpacity() also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545389</commentid>
    <comment_count>24</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-30 13:56:38 -0800</bug_when>
    <thetext>Some algorithmic overview for this CL.


- Each layer&apos;s occlusion is added to a Region which tracks in screen space.
- A RenderSurface subtree accumulates occlusion. When leaving a subtree, the occlusion is either kept or tossed away.


What is considered when adding a Layer to the accumulated occlusion?
 - The Layer&apos;s transform into its target.
 - All RS transforms from the Layer to the screen.
 - The Layer&apos;s opacity.
This is because we track occlusion in screen space only.


What is NOT considered when adding a Layer to the accumulated occlusion?
 - The RS drawOpacity.
 - The RS mask.
 - The RS skipsDraw (this is never true for RSChromium).
Instead, when we leave a RS subtree, if the RS mask/opacity change the subtree&apos;s occlusion, we discard any contribution the subtree had made to the accumulated occlusion.


If a RS is NOT opaque (opacity &lt; 1 or mask):
 - Layers within the RS subtree can still occlude other layers in the RS subtree.
 - Layers from outside the RS subtree can occlude inside the RS subtree.

If a RS IS opaque (opacity == 1 and !mask):
 - Layers within the RS subtree will also occlude Layers outside the RS subtree.


Picture:

RS1
ABCDE
 |  \
 |   \
 RS2  \
 FGHIJ \
       |
       RS3
       KLMNO

If RS2 has a mask and all layers are rectilinear:
 - J may occlude F. (in the same RS2 subtree)
 - J may NOT occlude D. (RS2&apos;s mask discards RS2 occlusion outside the RS2 subtree)
 - M may occluded J and D. (RS3 occlusion is kept outside the RS3 subtree)

====

Why this approach?
 - The primary goal is to catch occlusion in Aura layers which are almost entirely obscured. In the current Aura WM these layers are all rectilinear on the screen. So optimization for rotation is not a priority.

====

Some next steps for future CLs:
 - Allow occlusion in a RS subtree ignoring the RS transforms.
 - Allow the mask to modify the RS subtree&apos;s occlusion rather than simply discarding it.
 - Replicas are simply ignored. They do not see nor contribute to occlusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545592</commentid>
    <comment_count>25</comment_count>
      <attachid>124628</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-30 16:38:49 -0800</bug_when>
    <thetext>Created attachment 124628
Patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545593</commentid>
    <comment_count>26</comment_count>
      <attachid>124594</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-30 16:39:01 -0800</bug_when>
    <thetext>Comment on attachment 124594
Patch

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

OK, I think I get it now.  There&apos;s so much indirection now with the layer iterators and all that I find it really difficult to mentally step through what the actual iteration here is doing.

It seems really easy to end up with lots of Regions with lots of spans and segments here and copy them around a lot. Every time we have to resize the targetSurfaceStack vector, for instance, we&apos;ll have to copy each intermediate Region, which means copying a pair of Vector&lt;&gt;s on each of those, etc. I suspect that it&apos;ll still be pretty fast but it&apos;s a cost that can creep up pretty easily and will be hard to notice. Have you looked into what sorts of inline capacities might make sense for these, Dana?

R=me but please get a clean EWS run before landing and be sure to run all the compositing tests locally with pixel testing on. You don&apos;t need to lose my r+ to get EWS.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:478
&gt; +    // FIXME: Create/Use a FloatRegion for the occludedScreenSpace, instead of a Region based on ints, to avoid this step and get better accuracy between layers in target space.

like David I&apos;m not totally sure this FIXME is the right way to go - if we want to refine this I think we&apos;ll be a lot better off tracking occlusion in render surface space as we go rather than trying to do floating point regions

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1232
&gt; +#define EXPECT_EQ_RECT(a, b) \

aside: i think gmock matchers would be a good way to avoid having to write a bunch of custom comparators like this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545594</commentid>
    <comment_count>27</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-30 16:39:20 -0800</bug_when>
    <thetext>Argh bugzilla ate my review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545744</commentid>
    <comment_count>28</comment_count>
      <attachid>124628</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 20:03:15 -0800</bug_when>
    <thetext>Comment on attachment 124628
Patch

Clearing flags on attachment: 124628

Committed r106324: &lt;http://trac.webkit.org/changeset/106324&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545745</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 20:03:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545789</commentid>
    <comment_count>30</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-30 22:20:40 -0800</bug_when>
    <thetext>Messed up the unit test when i added the opacity. Should be s/setDrawOpacity/setOpacity/. Thought I ran the unit tests but guess I didn&apos;t. Fixed CL incoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545792</commentid>
    <comment_count>31</comment_count>
      <attachid>124671</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-30 22:24:56 -0800</bug_when>
    <thetext>Created attachment 124671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546099</commentid>
    <comment_count>32</comment_count>
      <attachid>124671</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 08:46:10 -0800</bug_when>
    <thetext>Comment on attachment 124671
Patch

Rejecting attachment 124671 from commit-queue.

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

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

Full output: http://queues.webkit.org/results/11366998</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546102</commentid>
    <comment_count>33</comment_count>
      <attachid>124743</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-31 08:48:48 -0800</bug_when>
    <thetext>Created attachment 124743
Patch

adding reviewer for cq</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546110</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 08:54:04 -0800</bug_when>
    <thetext>Attachment 124743 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546131</commentid>
    <comment_count>35</comment_count>
      <attachid>124751</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-31 09:07:44 -0800</bug_when>
    <thetext>Created attachment 124751
Patch

rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546141</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 09:10:31 -0800</bug_when>
    <thetext>Attachment 124751 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
	M	Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h
	M	Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp
	M	Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h
	M	Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
	M	Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h
	M	Source/WebKit2/ChangeLog
r106362 = ab43d00719700a5da4bc2b60d447b2153c0dbe70 (refs/remotes/origin/master)
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546418</commentid>
    <comment_count>37</comment_count>
      <attachid>124751</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 13:15:41 -0800</bug_when>
    <thetext>Comment on attachment 124751
Patch

Clearing flags on attachment: 124751

Committed r106383: &lt;http://trac.webkit.org/changeset/106383&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546419</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 13:15:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123613</attachid>
            <date>2012-01-23 13:46:22 -0800</date>
            <delta_ts>2012-01-26 10:33:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120123164620.patch</filename>
            <type>text/plain</type>
            <size>19933</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIyZWNlNThjNTA4OGY1
NzU5N2ZiOGZkNzA0NjNjODJkODFjMTliYy4uMTQwZGFiOTBlNDBmNWZjYmZhMDMyOGY0NGQxOTE4
MWEyYzYxNWY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAxLTIzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y29udGVudFRv
TGF5ZXJTcGFjZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpj
b250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Nl
ZEludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2Nj
bHVkZWRSZWdpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zZWRJbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRSZWdp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRN
YXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorCiAyMDEyLTAxLTIwICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVXNlIHJl
Z2lvbiByZXBvcnRlZCBwYWludGVkIG9wYXF1ZSBmb3IgZHJhdyBjdWxsaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDg1NDJlN2EwMzJiYzI0YTllMWQzY2RkMWFmYTc5ZDRlYjJkMDQw
ZGQuLjAzMzhlY2IyODc4NTc4NWM4Y2YxOGZkYzkwMDg1OTgzNzgwYmJjY2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMjMgIERhbmEgSmFuc2Vu
cyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb21wdXRlIG9j
Y2x1c2lvbiBkdXJpbmcgcGFpbnQgbG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAg
ICAgICAoV1RGOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2V0T3BhcXVlUGFpbnRSZWN0KToK
KyAgICAgICAgKFdURjo6RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6
CisgICAgICAgIChXVEY6OlRFU1QpOgorCiAyMDEyLTAxLTIwICBEYW5hIEphbnNlbnMgIDxkYW5h
a2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVXNlIHJlZ2lvbiByZXBvcnRl
ZCBwYWludGVkIG9wYXF1ZSBmb3IgZHJhdyBjdWxsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDRjNjNkZmQ3ZDI2ODI4N2I1Zjg1YTc3YmM0MDQyNWYwNjBhOGE1ODIuLjE0OWI2ZGE5N2Ix
NDljN2I2MWFiZjU3ZDgxNTIyOTgyMzk3YzQzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2VuZGlmCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2lu
Y2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgpAQCAtNDgxLDYgKzQ4Miw1MSBAQCB2
b2lkIExheWVyQ2hyb21pdW06OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgY29udGVudHNTY2FsZSkK
ICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAorVHJhbnNmb3JtYXRpb25NYXRyaXggTGF5ZXJD
aHJvbWl1bTo6Y29udGVudFRvTGF5ZXJTcGFjZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIEludFNpemUgYm91bmRzSW5MYXllclNw
YWNlID0gYm91bmRzKCk7CisgICAgSW50U2l6ZSBib3VuZHNJbkNvbnRlbnRTcGFjZSA9IGNvbnRl
bnRCb3VuZHMoKTsKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJT
cGFjZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53
aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFj
ZS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVp
Z2h0KCkpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0Cit7
CisgICAgLy8gc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBnb2VzIGZyb20gbGF5ZXIgdG8gc2NyZWVu
IHNwYWNlLiBTbyB3ZSBtYXkgbmVlZCB0byBzY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5
ZXIgc3BhY2UgYXMgd2VsbC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBz
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpOworICAgIEludFNpemUgYm91bmRzSW5MYXllclNwYWNlID0g
Ym91bmRzKCk7CisgICAgSW50U2l6ZSBib3VuZHNJbkNvbnRlbnRTcGFjZSA9IGNvbnRlbnRCb3Vu
ZHMoKTsKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFjZS53
aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0aCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5oZWln
aHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0KCkp
KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCitzdGF0aWMgSW50UmVjdCBlbmNsb3NlZElu
dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGZsb2F0IHggPSBjZWlsZihyZWN0
LngoKSk7CisgICAgZmxvYXQgeSA9IGNlaWxmKHJlY3QueSgpKTsKKyAgICAvLyBBIHJlY3Qgb2Yg
d2lkdGggMCBzaG91bGQgbm90IGJlY29tZSBhIHJlY3Qgb2Ygd2lkdGggLTEuCisgICAgZmxvYXQg
d2lkdGggPSBtYXg8ZmxvYXQ+KGZsb29yZihyZWN0Lm1heFgoKSkgLSB4LCAwKTsKKyAgICBmbG9h
dCBoZWlnaHQgPSBtYXg8ZmxvYXQ+KGZsb29yZihyZWN0Lm1heFkoKSkgLSB5LCAwKTsKKworICAg
IHJldHVybiBJbnRSZWN0KGNsYW1wVG9JbnRlZ2VyKHgpLCBjbGFtcFRvSW50ZWdlcih5KSwKKyAg
ICAgICAgICAgICAgICAgICBjbGFtcFRvSW50ZWdlcih3aWR0aCksIGNsYW1wVG9JbnRlZ2VyKGhl
aWdodCkpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9u
KFJlZ2lvbiogb2NjbHVkZWRTY3JlZW5TcGFjZSkKK3sKKyAgICBpZiAob3BhcXVlKCkpIHsKKyAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVuU3BhY2UgPSBjb250ZW50
VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworCisgICAgICAgIC8vIEVuc3VyZSBJbnRSZWN0cyBp
biBjb250ZW50IHNwYWNlIHdpbGwgYmUgSW50UmVjdHMgaW4gc2NyZWVuIHNwYWNlIGFzIHdlbGwu
CisgICAgICAgIEZsb2F0UXVhZCBzY3JlZW5TcGFjZVF1YWQgPSBjb250ZW50VG9TY3JlZW5TcGFj
ZS5tYXBRdWFkKEZsb2F0UXVhZCh2aXNpYmxlTGF5ZXJSZWN0KCkpKTsKKyAgICAgICAgaWYgKHNj
cmVlblNwYWNlUXVhZC5pc1JlY3RpbGluZWFyKCkgJiYgc2NyZWVuU3BhY2VRdWFkLmJvdW5kaW5n
Qm94KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKQorICAgICAgICAgICAgb2NjbHVkZWRTY3Jl
ZW5TcGFjZS0+dW5pdGUoZW5jbG9zZWRJbnRSZWN0KHNjcmVlblNwYWNlUXVhZC5ib3VuZGluZ0Jv
eCgpKSk7CisgICAgfQorfQorCiB2b2lkIExheWVyQ2hyb21pdW06OmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKQogewogICAgIEFTU0VSVCghbV9yZW5kZXJTdXJmYWNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApp
bmRleCAwNGRkMWU2NjJhZjc0MDBlOTljMjZmYWViNWQ0ZTgzM2Q4MmIyZmVlLi44YmMxM2I5ZDlh
N2RkNmMyM2VlNzhlMDc0ZmI4YjM3ZDNmYjJhY2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01
NSw2ICs1NSw3IEBAIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0Owog
Y2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3Mg
UmVnaW9uOwogCiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBs
YXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNsYXNzLgpAQCAtMTkxLDYgKzE5
MiwxMiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudHNTY2FsZTsgfQogICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9MYXllclNwYWNlVHJhbnNmb3JtKCkg
Y29uc3Q7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSBjb25zdDsKKworICAgIC8vIEFkZHMgYW55IG9wYXF1ZSB2aXNpYmxlIHBpeGVscyB0
byB0aGUgb2NjbHVkZWQgcmVnaW9uLgorICAgIHZpcnR1YWwgdm9pZCBhZGRTZWxmVG9PY2NsdWRl
ZFJlZ2lvbihSZWdpb24qIG9jY2x1ZGVkU2NyZWVuU3BhY2UpOworCiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNjZW5kYW50cyBoYXMgY29udGVudCB0byBkcmF3
LgogICAgIGJvb2wgZGVzY2VuZGFudERyYXdzQ29udGVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBj
b250ZW50Q2hhbmdlZCgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
YjVjNjUwY2RhYjQzYWU2ZDM4NmM2ZjNkMGU5ZDA2YTk0ZDY2MDk2Ni4uZDRmNGQ0ZjkzNzIxZmVk
MWRlNjhlZmRiOGZjMTEzYjM0Njg5NmU2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCkBAIC00NTgsNiArNDU4LDUxIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJl
VG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQKICAgICB9CiB9
CiAKK3N0YXRpYyBJbnRSZWN0IGVuY2xvc2VkSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgZmxvYXQgeCA9IGNlaWxmKHJlY3QueCgpKTsKKyAgICBmbG9hdCB5ID0gY2VpbGYo
cmVjdC55KCkpOworICAgIC8vIEEgcmVjdCBvZiB3aWR0aCAwIHNob3VsZCBub3QgYmVjb21lIGEg
cmVjdCBvZiB3aWR0aCAtMS4KKyAgICBmbG9hdCB3aWR0aCA9IG1heDxmbG9hdD4oZmxvb3JmKHJl
Y3QubWF4WCgpKSAtIHgsIDApOworICAgIGZsb2F0IGhlaWdodCA9IG1heDxmbG9hdD4oZmxvb3Jm
KHJlY3QubWF4WSgpKSAtIHksIDApOworCisgICAgcmV0dXJuIEludFJlY3QoY2xhbXBUb0ludGVn
ZXIoeCksIGNsYW1wVG9JbnRlZ2VyKHkpLAorICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRl
Z2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Cit9CisKK3ZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjphZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihSZWdpb24qIG9jY2x1ZGVkU2NyZWVu
U3BhY2UpCit7CisgICAgaWYgKG9wYXF1ZSgpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW06OmFk
ZFNlbGZUb09jY2x1ZGVkUmVnaW9uKG9jY2x1ZGVkU2NyZWVuU3BhY2UpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRW5zdXJlIEludFJlY3RzIGluIGNvbnRlbnQgc3BhY2Ugd2ls
bCBiZSBJbnRSZWN0cyBpbiBzY3JlZW4gc3BhY2UgYXMgd2VsbC4KKyAgICBGbG9hdFF1YWQgc2Ny
ZWVuU3BhY2VRdWFkID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBRdWFkKEZs
b2F0UXVhZCh2aXNpYmxlTGF5ZXJSZWN0KCkpKTsKKyAgICBpZiAoIXNjcmVlblNwYWNlUXVhZC5p
c1JlY3RpbGluZWFyKCkgfHwgIXNjcmVlblNwYWNlUXVhZC5ib3VuZGluZ0JveCgpLmlzRXhwcmVz
c2libGVBc0ludFJlY3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXNlIGEgUmVnaW9u
IHRvIG1lcmdlIHRpbGVzIHRvZ2V0aGVyIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlbS4KKyAgICAv
LyBGSVhNRTogQ3JlYXRlL1VzZSBhIEZsb2F0UmVnaW9uIGluc3RlYWQgb2YgYSBSZWdpb24gYmFz
ZWQgb24gaW50cyB0byBhdm9pZCB0aGlzIHN0ZXAgYW5kIGdldCBiZXR0ZXIgYWNjdXJhY3kgaW4g
c2NyZWVuIHNwYWNlLgorICAgIFJlZ2lvbiB0aWxlUmVnaW9uOworICAgIGZvciAoQ0NMYXllclRp
bGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygp
LmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRl
ci0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgdGlsZVJlZ2lvbi51bml0ZSh0aWxlLT5tX29wYXF1
ZVJlY3QpOworICAgIH0KKyAgICBWZWN0b3I8SW50UmVjdD4gdGlsZVJlY3RzID0gdGlsZVJlZ2lv
bi5yZWN0cygpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvTGF5ZXJTcGFj
ZSA9IGNvbnRlbnRUb0xheWVyU3BhY2VUcmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBsYXllclRvU2NyZWVuU3BhY2UgPSBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworICAgIEZs
b2F0UmVjdCB2aXNpYmxlUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBmb3IgKFZlY3Rv
cjxJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRpbGVSZWN0cy5iZWdpbigpOyBpdGVy
ICE9IHRpbGVSZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxl
T3BhcXVlUmVjdCA9IGNvbnRlbnRUb0xheWVyU3BhY2UubWFwUmVjdChGbG9hdFJlY3QoKml0ZXIp
KTsKKyAgICAgICAgdmlzaWJsZU9wYXF1ZVJlY3QuaW50ZXJzZWN0KHZpc2libGVSZWN0KTsKKwor
ICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuU3BhY2VPcGFxdWVSZWN0ID0gbGF5ZXJUb1NjcmVlblNw
YWNlLm1hcFJlY3QodmlzaWJsZU9wYXF1ZVJlY3QpOworICAgICAgICBvY2NsdWRlZFNjcmVlblNw
YWNlLT51bml0ZShlbmNsb3NlZEludFJlY3Qoc2NyZWVuU3BhY2VPcGFxdWVSZWN0KSk7CisgICAg
fQorCit9CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCBj
MTJlOTFhYTRmODI2OWJiYzU5MjUzYWYzNmUxYmE2ZTI3NGQwMDhjLi4xY2QyN2U1ZjYyMzA4ZjU0
NWQ0M2FhMWZiMjVkNjU0MTE0YTU5OTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApA
QCAtMzUsNiArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllclRleHR1
cmVVcGRhdGVyOworY2xhc3MgUmVnaW9uOwogY2xhc3MgVXBkYXRhYmxlVGlsZTsKIAogY2xhc3Mg
VGlsZWRMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewpAQCAtNjEsNiArNjIs
OCBAQCBwdWJsaWM6CiAgICAgLy8gcmVjeWNsZWQgYnkgdGhlIHRleHR1cmUgbWFuYWdlci4KICAg
ICB2b2lkIHByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KTsKIAor
ICAgIHZpcnR1YWwgdm9pZCBhZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihSZWdpb24qIG9jY2x1ZGVk
U2NyZWVuU3BhY2UpOworCiBwcm90ZWN0ZWQ6CiAgICAgVGlsZWRMYXllckNocm9taXVtKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGEyZmI4MjJjNTZiZGIzNWZjY2Qz
Yjk5YTRkMTRkZWVhOGQ5MTMyOGIuLmY2ZmNiMjAxYTNlNDIwZTFjZWRiMjBkZTQyMjc3ZDE1MjYx
ZjBjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJl
Z2lvbi5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25p
emVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCkBAIC00MDIsNyArNDAzLDcg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290
TGF5ZXIpCiB9CiAKIC8vIHN0YXRpYwotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVu
dHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBQYWludFR5cGUgcGFpbnRUeXBlKQordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxh
eWVyLCBQYWludFR5cGUgcGFpbnRUeXBlLCBSZWdpb24qIG9jY2x1ZGVkU2NyZWVuU3BhY2UpCiB7
CiAgICAgQVNTRVJUKGxheWVyKTsKICAgICBBU1NFUlQoUGFpbnRWaXNpYmxlID09IHBhaW50VHlw
ZSB8fCBQYWludElkbGUgPT0gcGFpbnRUeXBlKTsKQEAgLTQxMCw5ICs0MTEsMTIgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVy
LCBQYWludFR5cGUgcGFpbnQKICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7
CiAgICAgZWxzZQogICAgICAgICBsYXllci0+aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CisK
KyAgICAvLyBBZGQgdGhlIGxheWVyJ3Mgb2NjbHVzaW9uIHRvIHRoZSBhY2N1bXVsYXRlZCByZWdp
b24gZm9yIHRoZSBuZXh0IGxheWVyIHRvIGJlIGFibGUgdG8gdXNlIGZvciBjdWxsaW5nLgorICAg
IGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2NsdWRlZFNjcmVlblNwYWNlKTsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJm
YWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciwgUGFpbnRUeXBlIHBhaW50VHlw
ZSkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3Vy
ZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIsIFBhaW50VHlwZSBwYWludFR5
cGUsIFJlZ2lvbiogb2NjbHVkZWRTY3JlZW5TcGFjZSkKIHsKICAgICAvLyBOb3RlOiBNYXNrcyBh
bmQgcmVwbGljYXMgb25seSBleGlzdCBmb3IgbGF5ZXJzIHRoYXQgb3duIHJlbmRlciBzdXJmYWNl
cy4gSWYgd2UgcmVhY2ggdGhpcyBwb2ludAogICAgIC8vIGluIGNvZGUsIHdlIGFscmVhZHkga25v
dyB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyB3aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIg
c3VyZmFjZSwgc28gdGhlCkBAIC00MjAsMTYgKzQyNCwxNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVu
ZGVyUwogCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpIHsKICAgICAg
ICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJ
bnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7
Ci0gICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xh
eWVyKCksIHBhaW50VHlwZSk7CisgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1
cmZhY2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSwgb2NjbHVkZWRTY3JlZW5TcGFjZSk7
CiAgICAgfQogCiAgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3VyZmFj
ZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAgICBpZiAocmVwbGljYUxheWVyKSB7Ci0gICAgICAg
IHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlKTsKKyAgICAgICAg
cGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCBwYWludFR5cGUsIG9jY2x1ZGVkU2Ny
ZWVuU3BhY2UpOwogCiAgICAgICAgIGlmIChyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7CiAg
ICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29udGVudEJv
dW5kcygpKSk7Ci0gICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIt
Pm1hc2tMYXllcigpLCBwYWludFR5cGUpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlLCBvY2NsdWRlZFNjcmVlblNw
YWNlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQzOCwxNSArNDQyLDE2IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0CiB7CiAgICAgLy8gVXNlIEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0
ZXN0aW5nIG9jY2x1c2lvbiBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3
YWxrLgogICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5
ZXJJdGVyYXRvclR5cGU7CisgICAgUmVnaW9uIG9jY2x1ZGVkU2NyZWVuU3BhY2U7CiAKICAgICBD
Q0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NM
YXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNl
KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0
eSgpKTsKLSAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKCpp
dCwgcGFpbnRUeXBlKTsKKyAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJT
dXJmYWNlKCppdCwgcGFpbnRUeXBlLCAmb2NjbHVkZWRTY3JlZW5TcGFjZSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0
LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHko
Kml0LCBwYWludFR5cGUpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkoKml0LCBw
YWludFR5cGUsICZvY2NsdWRlZFNjcmVlblNwYWNlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZDkyYWRjMTY2YWU2N2UzYWYwNTQyOTUxMGM5
N2QzZmUzNjgzNTA5Zi4uMjY4NDlkZWE5MDNiMTdmYWFiY2Q0YjMyNzBlMjc5ZWIwNTI4ZjU1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgQ0NM
YXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKIGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgUmVnaW9uOwog
Y2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogCkBAIC0yMDUs
OSArMjA2LDkgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8TWFuYWdlZFRl
eHR1cmU+ID4gVGV4dHVyZUxpc3Q7CiAKICAgICBlbnVtIFBhaW50VHlwZSB7IFBhaW50VmlzaWJs
ZSwgUGFpbnRJZGxlIH07Ci0gICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5
ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lm
RGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSwgUmVnaW9uKiBvY2NsdWRlZFNjcmVlblNw
YWNlKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmLCBQYWlu
dFR5cGUpOwotICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5
ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9y
UmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlLCBSZWdpb24qIG9jY2x1ZGVk
U2NyZWVuU3BhY2UpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwog
ICAgIHZvaWQgY2xlYXJQZW5kaW5nVXBkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAwZGFjM2Fh
ZjhjNjdiZmRhYTEwZmUxYTFiNmJkZDJkNzc1OTQyYjI0Li41ZGE4NWQzYmZmNjMwMzFkZjJhYTZk
MDQ3YzliOWFhMDg0MTU1ZGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVw
ZGF0ZXIuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5o
IgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIgLy8gRm9yIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZAogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKQEAgLTY3LDE3
ICs2OCwyMCBAQCBwdWJsaWM6CiAgICAgaW50IHByZXBhcmVDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlcGFyZUNvdW50OyB9CiAgICAgdm9pZCBjbGVhclByZXBhcmVDb3VudCgpIHsgbV9wcmVw
YXJlQ291bnQgPSAwOyB9CiAKKyAgICB2b2lkIHNldE9wYXF1ZVBhaW50UmVjdChjb25zdCBJbnRS
ZWN0JiBvcGFxdWVQYWludFJlY3QpIHsgbV9vcGFxdWVQYWludFJlY3QgPSBvcGFxdWVQYWludFJl
Y3Q7IH0KKwogICAgIC8vIExhc3QgcmVjdCBwYXNzZWQgdG8gcHJlcGFyZVRvVXBkYXRlKCkuCiAg
ICAgY29uc3QgSW50UmVjdCYgbGFzdFVwZGF0ZVJlY3QoKSAgY29uc3QgeyByZXR1cm4gbV9sYXN0
VXBkYXRlUmVjdDsgfQogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikp
KTsgfQogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSkgeyByZXR1cm4gU2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQotICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IElu
dFNpemUmLCBpbnQsIGZsb2F0LCBJbnRSZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGludCwg
ZmxvYXQsIEludFJlY3QqIHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogCiBwcml2YXRlOgogICAgIGlu
dCBtX3ByZXBhcmVDb3VudDsKICAgICBJbnRSZWN0IG1fcmVjdFRvSW52YWxpZGF0ZTsKICAgICBJ
bnRSZWN0IG1fbGFzdFVwZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX29wYXF1ZVBhaW50UmVjdDsK
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKIH07CiAKQEAgLTE1
OCw3ICsxNjIsNyBAQCB2b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0CiAgICAgICAgIG1fcmVjdFRvSW52
YWxpZGF0ZSA9IEludFJlY3QoKTsKICAgICAgICAgbV9sYXllciA9IDA7CiAgICAgfQotICAgICpy
ZXN1bHRpbmdPcGFxdWVSZWN0ID0gSW50UmVjdCgpOworICAgICpyZXN1bHRpbmdPcGFxdWVSZWN0
ID0gbV9vcGFxdWVQYWludFJlY3Q7CiB9CiAKIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaERpcnR5VGlsZXMpCkBAIC0zMzksNCArMzQzLDc5IEBAIFRFU1QoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQogICAgIEVYUEVDVF9FUSgxLCBsYXllci0+
ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZUNvdW50KCkpOwogfQogCitURVNUKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uKQorewor
ICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CisgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2Nh
dG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0
dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhp
cyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzIGluIHZhcmlvdXMgd2F5cy4K
KworICAgIFJlZ2lvbiBvY2NsdWRlZDsKKyAgICBJbnRSZWN0IGNvbnRlbnRCb3VuZHMgPSBJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKTsKKyAgICBJbnRSZWN0IHZpc2libGVCb3VuZHMgPSBJbnRSZWN0
KDAsIDAsIDEwMCwgMTUwKTsKKworICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcy5z
aXplKCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVCb3VuZHMpOwor
CisgICAgLy8gSWYgdGhlIGxheWVyIGlzIG9wYXF1ZSB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24g
c2hvdWxkIGJlIHRoZSB3aG9sZSBsYXllcidzIHZpc2libGUgcmVnaW9uLgorICAgIGxheWVyLT5z
ZXRPcGFxdWUodHJ1ZSk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMp
OworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBvY2Ns
dWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbigmb2Nj
bHVkZWQpOworICAgIEVYUEVDVF9FUSh2aXNpYmxlQm91bmRzLCBvY2NsdWRlZC5ib3VuZHMoKSk7
CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgbm90IG9wYXF1ZSB0aGVuIHRoZSBvY2NsdWRlZCBy
ZWdpb24gc2hvdWxkIGJlIGVtcHR5LgorICAgIGxheWVyLT5zZXRPcGFxdWUoZmFsc2UpOworICAg
IGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+cHJlcGFy
ZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAg
ICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oJm9jY2x1ZGVkKTsKKyAgICBFWFBFQ1Rf
RVEoSW50UmVjdCgpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIg
cGFpbnRzIG9wYXF1ZSBjb250ZW50LCB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIG1h
dGNoIHRoZSB2aXNpYmxlIG9wYXF1ZSBjb250ZW50LgorICAgIEludFJlY3Qgb3BhcXVlUGFpbnRS
ZWN0ID0gSW50UmVjdCgxMCwgMTAsIDkwLCAxOTApOworICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3Qob3BhcXVlUGFpbnRSZWN0KTsKKyAgICBs
YXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVU
b1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAg
bGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VR
KGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpLCBvY2NsdWRlZC5i
b3VuZHMoKSk7CisKKyAgICAvLyBJZiB3ZSBwYWludCBhZ2FpbiB3aXRob3V0IGludmFsaWRhdGlu
ZywgdGhlIHNhbWUgc3R1ZmYgc2hvdWxkIGJlIG9jY2x1ZGVkLgorICAgIGxheWVyLT5mYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKKyAgICBs
YXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBS
ZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oJm9jY2x1ZGVkKTsK
KyAgICBFWFBFQ1RfRVEoaW50ZXJzZWN0aW9uKG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5k
cyksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKworICAgIC8vIElmIHRoZSBsYXllciBpcyB0cmFuc2Zv
cm1lZCB0aGVuIHRoZSByZXN1bHRpbmcgb2NjbHVzZWQgYXJlYSBuZWVkcyB0byBiZSB0cmFuc2Zv
cm1lZCB0byBzY3JlZW4gc3BhY2UuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3Jt
OworICAgIHRyYW5zZm9ybS5zY2FsZSgyKTsKKyAgICB0cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAg
ICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+
cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24o
KTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oJm9jY2x1ZGVkKTsKKyAgICBF
WFBFQ1RfRVEodHJhbnNmb3JtLm1hcFJlY3QoaW50ZXJzZWN0aW9uKG9wYXF1ZVBhaW50UmVjdCwg
dmlzaWJsZUJvdW5kcykpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisKKyAgICAvLyBCdXQgYSBub24t
YXhpcy1hbGlnbmVkIHRyYW5zZm9ybSBkb2VzIG5vdCBnZXQgY29uc2lkZXJlZCBmb3Igb2NjbHVz
aW9uLgorICAgIHRyYW5zZm9ybS5yb3RhdGUoNSk7CisgICAgbGF5ZXItPnNldFNjcmVlblNwYWNl
VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50
Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZU
b09jY2x1ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRKEludFJlY3QoKSwgb2Nj
bHVkZWQuYm91bmRzKCkpOworCit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124139</attachid>
            <date>2012-01-26 10:33:44 -0800</date>
            <delta_ts>2012-01-26 11:04:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120126133343.patch</filename>
            <type>text/plain</type>
            <size>30786</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIyZWNlNThjNTA4OGY1
NzU5N2ZiOGZkNzA0NjNjODJkODFjMTliYy4uNDE1ODdjYWQzYjA2Y2VhNzU1NmYyM2NhMmJkYmMy
ZTk3Njg0ZTdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAxLTI2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgVGlsZWRMYXllckNocm9taXVt
VGVzdC5jcHAgYW5kIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9z
ZWRJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNvbnRlbnRUb1RhcmdldFNwYWNlVHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVk
UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlzUGFpbnRlZEF4aXNB
bGlnbmVkSW5UYXJnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjphZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwOgorCiAyMDEyLTAxLTIwICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
VXNlIHJlZ2lvbiByZXBvcnRlZCBwYWludGVkIG9wYXF1ZSBmb3IgZHJhdyBjdWxsaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDg1NDJlN2EwMzJiYzI0YTllMWQzY2RkMWFmYTc5ZDRl
YjJkMDQwZGQuLmJiMzc3ODY5OTZmZWM5YjhjM2RhYjQzYzFjMzM3MjIxMzU0MTA0ZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDEtMjYgIERhbmEg
SmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb21w
dXRlIG9jY2x1c2lvbiBkdXJpbmcgcGFpbnQgbG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVVcGRhdGVy
OjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAoV1RGOjpGYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdURjo6VEVTVCk6CisKIDIwMTItMDEt
MjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVlIGZvciBkcmF3IGN1bGxpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCmluZGV4
IDE3YmQ4YjFmZjRkY2JmMWQ3MWM2NWQzMTNlZjcwZDQxNThkMzU5ZDMuLjVjZGUwMmE3YjJlZWY3
ZmZjZDA0NzE0MTBlMjU5NTUxYTE0MTAyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE4LDYgKzIxOCwxOSBAQCBJbnRSZWN0IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgICAgICAg
IGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7CiB9CiAKK0lu
dFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpbnQg
eCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7CisgICAgaW50IHkgPSBjbGFtcFRv
SW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOworICAgIGZsb2F0IG1heFggPSBjbGFtcFRvSW50ZWdl
cihmbG9vcmYocmVjdC5tYXhYKCkpKTsKKyAgICBmbG9hdCBtYXhZID0gY2xhbXBUb0ludGVnZXIo
Zmxvb3JmKHJlY3QubWF4WSgpKSk7CisgICAgLy8gQSByZWN0IG9mIHdpZHRoIDAgc2hvdWxkIG5v
dCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWlsL2Zsb29yLgorICAgIGludCB3
aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDApOworICAgIGludCBoZWlnaHQg
PSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKKworICAgIHJldHVybiBJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCiBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCkKIHsKICAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAgfHwgc3JjUmVjdC5oZWlnaHQo
KSA9PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApp
bmRleCAxNDA5MDcxYjExOTg4M2QzYjA4NjI3MGFhNGNmNzg4NGY0ZmJhNjJjLi4yMmMxNzFjNWFi
NGQxODg5NjBlODJmZTdiZTAyMThlNDFjZjhhNWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjcwLDYgKzI3MCw5IEBAIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCiAKIElu
dFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorLy8gUmV0dXJucyBh
IHZhbGlkIEludFJlY3QgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2ZW4gRmxvYXRSZWN0LgorSW50
UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKIC8vIE1hcCByZWN0IHIg
ZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBkZXN0UmVjdC4KIEZsb2F0UmVj
dCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA0
YzYzZGZkN2QyNjgyODdiNWY4NWE3N2JjNDA0MjVmMDYwYThhNTgyLi4xNzk2ODUyMmRhOTEwYWVj
YzdhY2UwNzNiN2MzMzljZWYyZjI0YWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRl
ICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTQ4MSw2ICs0ODIsNDAgQEAgdm9pZCBM
YXllckNocm9taXVtOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IGNvbnRlbnRzU2NhbGUpCiAgICAg
c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4IExheWVyQ2hyb21p
dW06OmNvbnRlbnRUb1RhcmdldFNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBJbnRTaXpl
IGJvdW5kc0luTGF5ZXJTcGFjZSA9IGJvdW5kcygpOworICAgIEludFNpemUgYm91bmRzSW5Db250
ZW50U3BhY2UgPSBjb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQg
c3BhY2UgdG8gbGF5ZXIgc3BhY2UKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5k
c0luTGF5ZXJTcGFjZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRl
bnRTcGFjZS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0lu
TGF5ZXJTcGFjZS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50
U3BhY2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIE1vdmUgdGhlIG9yaWdpbiB0byB0aGUgY2VudGVy
CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSAv
IDIuMCwgLWJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJldHVy
biB0cmFuc2Zvcm07Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRS
ZWdpb24oUmVnaW9uKiBvY2NsdWRlZFRhcmdldFNwYWNlKQoreworICAgIGlmIChkcmF3T3BhY2l0
eSgpICE9IDEgfHwgIWlzUGFpbnRlZEF4aXNBbGlnbmVkSW5UYXJnZXQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG9wYXF1ZSgpKSB7CisgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0
ID0gY29udGVudFRvVGFyZ2V0U3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNp
YmxlTGF5ZXJSZWN0KCkpKTsKKyAgICAgICAgb2NjbHVkZWRUYXJnZXRTcGFjZS0+dW5pdGUoZW5j
bG9zZWRJbnRSZWN0KHRhcmdldFJlY3QpKTsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1
bTo6aXNQYWludGVkQXhpc0FsaWduZWRJblRhcmdldCgpIGNvbnN0Cit7CisgICAgRmxvYXRRdWFk
IHF1YWQgPSBjb250ZW50VG9UYXJnZXRTcGFjZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFk
KHZpc2libGVMYXllclJlY3QoKSkpOworICAgIHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKTsK
K30KKwogdm9pZCBMYXllckNocm9taXVtOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKIHsKICAgICBB
U1NFUlQoIW1fcmVuZGVyU3VyZmFjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggMDRkZDFlNjYy
YWY3NDAwZTk5YzI2ZmFlYjVkNGU4MzNkODJiMmZlZS4uMjk2YTUyYmQ3NTI2YzQwMjNiZDNiNDUz
NTViMmJmNmY3YmI3ZTQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNTUsNiArNTUsNyBAQCBj
bGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVy
ZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8g
QmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJl
IGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFzcy4KQEAgLTE5MSw2ICsxOTIsMTIgQEAgcHVibGlj
OgogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nh
bGU7IH0KICAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwogCisgICAgLy8gVHJhbnNm
b3JtcyBmcm9tIHRoZSBjb250ZW50IHNwYWNlIG9mIHRoZSBsYXllciB0byB0aGUgY29udGVudCBz
cGFjZSBvZiB0aGUgdGFyZ2V0IFJlbmRlclN1cmZhY2UuCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29udGVudFRvVGFyZ2V0U3BhY2VUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIC8vIEFkZHMg
YW55IG9wYXF1ZSB2aXNpYmxlIHBpeGVscyB0byB0aGUgb2NjbHVkZWQgcmVnaW9uIGluIHRoZSBj
b29yZGluYXRlIHNwYWNlIG9mIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQg
YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oUmVnaW9uKiBvY2NsdWRlZFRhcmdldFNwYWNlKTsKKwog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFz
IGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKSB7IH0KQEAgLTIwNiw2ICsyMTMsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBjb250ZXh0LWRlcGVuZGVudCByZXNvdXJjZXMgc3VjaCBh
cyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogCisgICAg
Ym9vbCBpc1BhaW50ZWRBeGlzQWxpZ25lZEluVGFyZ2V0KCkgY29uc3Q7CisKICAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0KCk7CiAKICAgICAvLyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gbGF5ZXIgbmVl
ZCByZXBhaW50aW5nL3VwZGF0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggYjVjNjUwY2RhYjQzYWU2ZDM4NmM2ZjNkMGU5ZDA2YTk0ZDY2MDk2Ni4uOGY4MGNhNmI2Zjcx
MTZkNzI1ZWM0YzA0ZTE3MDBlZDFlODBiNjVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC00NTgsNiArNDU4LDM5IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVw
YXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQKICAgICB9
CiB9CiAKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjphZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihS
ZWdpb24qIG9jY2x1ZGVkVGFyZ2V0U3BhY2UpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IGRy
YXdPcGFjaXR5KCkgIT0gMSB8fCAhaXNQYWludGVkQXhpc0FsaWduZWRJblRhcmdldCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAob3BhcXVlKCkpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1
bTo6YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24ob2NjbHVkZWRUYXJnZXRTcGFjZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVc2UgYSBSZWdpb24gdG8gbWVyZ2UgdGlsZXMgdG9n
ZXRoZXIgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGVtIHRvIGF2b2lkIGdhcHMgYmV0d2VlbiB0aGUg
dGlsZXMgaW4gc2NyZWVuIHNwYWNlIGZyb20gdXNpbmcgSW50UmVjdHMKKyAgICAvLyBjb250YWlu
ZWQgd2l0aGluIGVhY2ggdGlsZSdzIHNjcmVlbi1zcGFjZSBvcGFxdWUgcmVjdC4KKyAgICAvLyBG
SVhNRTogQ3JlYXRlL1VzZSBhIEZsb2F0UmVnaW9uIGluc3RlYWQgb2YgYSBSZWdpb24gYmFzZWQg
b24gaW50cyB0byBhdm9pZCB0aGlzIHN0ZXAgYW5kIGdldCBiZXR0ZXIgYWNjdXJhY3kgaW4gc2Ny
ZWVuIHNwYWNlLgorICAgIFJlZ2lvbiB0aWxlUmVnaW9uOworICAgIGludCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b207CisgICAgbV90aWxlci0+bGF5ZXJSZWN0VG9UaWxlSW5kaWNlcyh2aXNpYmxl
TGF5ZXJSZWN0KCksIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9
IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8
PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0
KGksIGopOworICAgICAgICAgICAgaWYgKHRpbGUpCisgICAgICAgICAgICAgICAgdGlsZVJlZ2lv
bi51bml0ZSh0aWxlLT5tX29wYXF1ZVJlY3QpOworICAgICAgICB9CisgICAgfQorICAgIFZlY3Rv
cjxJbnRSZWN0PiB0aWxlUmVjdHMgPSB0aWxlUmVnaW9uLnJlY3RzKCk7CisKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTcGFjZSA9IGNvbnRlbnRUb1RhcmdldFNwYWNl
VHJhbnNmb3JtKCk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpc2libGVMYXllclJlY3Qo
KTsKKyAgICBmb3IgKFZlY3RvcjxJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRpbGVS
ZWN0cy5iZWdpbigpOyBpdGVyICE9IHRpbGVSZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IEludFJlY3QgdmlzaWJsZVRpbGVPcGFxdWVSZWN0ID0gaW50ZXJzZWN0aW9uKHZpc2libGVSZWN0
LCAqaXRlcik7CisgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gY29udGVudFRvVGFyZ2V0
U3BhY2UubWFwUmVjdChGbG9hdFJlY3QodmlzaWJsZVRpbGVPcGFxdWVSZWN0KSk7CisgICAgICAg
IG9jY2x1ZGVkVGFyZ2V0U3BhY2UtPnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0YXJnZXRSZWN0KSk7
CisgICAgfQorfQogCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNv
bnN0IEludFJlY3QmIGxheWVyUmVjdCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5k
ZXggYzEyZTkxYWE0ZjgyNjliYmM1OTI1M2FmMzZlMWJhNmUyNzRkMDA4Yy4uMWNkMjdlNWY2MjMw
OGY1NDVkNDNhYTFmYjI1ZDY1NDExNGE1OTkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmgKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJU
ZXh0dXJlVXBkYXRlcjsKK2NsYXNzIFJlZ2lvbjsKIGNsYXNzIFVwZGF0YWJsZVRpbGU7CiAKIGNs
YXNzIFRpbGVkTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKQEAgLTYxLDYg
KzYyLDggQEAgcHVibGljOgogICAgIC8vIHJlY3ljbGVkIGJ5IHRoZSB0ZXh0dXJlIG1hbmFnZXIu
CiAgICAgdm9pZCBwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCk7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oUmVnaW9uKiBvY2Ns
dWRlZFNjcmVlblNwYWNlKTsKKwogcHJvdGVjdGVkOgogICAgIFRpbGVkTGF5ZXJDaHJvbWl1bSgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBhMmZiODIyYzU2YmRiMzVm
Y2NkM2I5OWE0ZDE0ZGVlYThkOTEzMjhiLi45YTU1Nzk0OGIyZjJkNDRjMWVmNmM0Yjg3NTJkYjgw
MTEzYjU3NDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNo
cm9uaXplci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgpAQCAtNDM4LDE1ICs0
MzksMjMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKIHsKICAgICAvLyBVc2UgRnJvbnRUb0Jh
Y2sgdG8gYWxsb3cgZm9yIHRlc3Rpbmcgb2NjbHVzaW9uIGFuZCBwZXJmb3JtaW5nIGN1bGxpbmcg
ZHVyaW5nIHRoZSB0cmVlIHdhbGsuCiAgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpG
cm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKyAgICBSZWdpb24gb2NjbHVkZWRUYXJn
ZXRTcGFjZTsKIAogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9y
VHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBmb3IgKENDTGF5ZXJJdGVy
YXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQucmVwcmVzZW50c1Rh
cmdldFJlbmRlclN1cmZhY2UoKSkgewogICAgICAgICAgICAgQVNTRVJUKGl0LT5yZW5kZXJTdXJm
YWNlKCktPmRyYXdPcGFjaXR5KCkpOworCisgICAgICAgICAgICBvY2NsdWRlZFRhcmdldFNwYWNl
ID0gUmVnaW9uKCk7CisKKyAgICAgICAgICAgIC8vIE1hc2sgYW5kIHJlcGxpY2EgbGF5ZXJzIGFy
ZSBub3Qgb2NjbHVkZWQgYnkgbGF5ZXJzIGluIHRoZSBzdXJmYWNlCiAgICAgICAgICAgICBwYWlu
dE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSgqaXQsIHBhaW50VHlwZSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
IWl0LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkoKml0LCBwYWludFR5cGUpOworCisgICAgICAgICAgICAvLyBBZGQgdGhlIGxheWVyJ3Mgb2Nj
bHVzaW9uIHRvIHRoZSByZWdpb24gZm9yIHRoZSBuZXh0IGxheWVyIHRvIGJlIGFibGUgdG8gdXNl
IGZvciBjdWxsaW5nLgorICAgICAgICAgICAgaXQtPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZv
Y2NsdWRlZFRhcmdldFNwYWNlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKaW5kZXggZDkyYWRjMTY2YWU2N2UzYWYwNTQyOTUxMGM5N2QzZmUzNjgzNTA5
Zi4uM2Q2ZmU0YWZkMDFmY2RmMWZiODFiYjE0OWQ1MTUxM2VhZDc1ZTUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0
SW1wbDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
IGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgUmVnaW9uOwogY2xhc3MgVGV4dHVy
ZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVy
LmNwcAppbmRleCA3NzEwMDMyZTA1YzZhZmFhNDMxNzlkOWE3OTI5YTA4MWYzZTBmYjBlLi45OWZl
YjIxNzBkZmU5ODM4N2I5ZGM4ODIxMmUwN2RhOTc0ZDI5ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1
bGxlci5jcHAKQEAgLTYyLDE4ICs2Miw2IEBAIHN0YXRpYyBib29sIHJlZ2lvbkNvbnRhaW5zUmVj
dChjb25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICByZXR1cm4g
cmVjdFJlZ2lvbi5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGVuY2xvc2VkSW50UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZmxvYXQgeCA9IGNlaWxmKHJlY3QueCgp
KTsKLSAgICBmbG9hdCB5ID0gY2VpbGYocmVjdC55KCkpOwotICAgIC8vIEEgcmVjdCBvZiB3aWR0
aCAwIHNob3VsZCBub3QgYmVjb21lIGEgcmVjdCBvZiB3aWR0aCAtMS4KLSAgICBmbG9hdCB3aWR0
aCA9IG1heDxmbG9hdD4oZmxvb3JmKHJlY3QubWF4WCgpKSAtIHgsIDApOwotICAgIGZsb2F0IGhl
aWdodCA9IG1heDxmbG9hdD4oZmxvb3JmKHJlY3QubWF4WSgpKSAtIHksIDApOwotCi0gICAgcmV0
dXJuIEludFJlY3QoY2xhbXBUb0ludGVnZXIoeCksIGNsYW1wVG9JbnRlZ2VyKHkpLAotICAgICAg
ICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0
KSk7Ci19Ci0KIHZvaWQgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhDQ1F1YWRMaXN0
JiBxdWFkTGlzdCkKIHsKICAgICBpZiAoIXF1YWRMaXN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwCmluZGV4IGQyZTFjZmVmOTNlMjgyMTY2ZGE4NTEyNTZjOTVjMGU2NTEyYzY5YmEuLjg1ZWJk
MzI1NWZhYmJhYjMwYmI0MmE2MmNhYTRlNWUxMTYzNWUwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgi
CiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgpA
QCAtMzUsNiArMzYsMTIgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKyNkZWZpbmUg
RVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisg
ICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBi
LndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCiBu
YW1lc3BhY2UgewogCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91
bmRzLCBib29sIHByZXNlcnZlczNEKQpAQCAtNTk1LDQgKzYwMiwxNzAgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAv
LyAgLSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uCiAv
LwogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1
ZGVkUmVnaW9uKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3Jt
cyBhcmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwg
MTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXIt
PnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKwor
ICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIg
YmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUs
IHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVk
ZWRSZWdpb24oJm9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwg
NzAsIDcwKSwgb2NjbHVkZWQuYm91bmRzKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQorewor
ICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNl
ZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAg
cGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXll
clRyYW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAg
IGxheWVyVHJhbnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRl
KC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1
MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXgg
dGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9z
dCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9u
KCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygp
KTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9P
Y2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQg
dGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVk
OworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBh
cmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJU
cmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwg
MzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0
cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVy
TGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1F
OiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4g
Q0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2Nj
bHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oJm9j
Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2Nj
bHVkZWQuYm91bmRzKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxh
eWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQoreworICAgIC8v
IFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAg
ICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFy
ZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGxheWVyKTsKKworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAg
ICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwg
MTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0
KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUw
MCwgNTAwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Cisg
ICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNp
YWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4
IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2Vs
ZlRvT2NjbHVkZWRSZWdpb24oJm9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwLCA0MzAsIDYwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKworICAgIC8qIEp1c3RpZmlj
YXRpb24gZm9yIHRoZSBhYm92ZSBvcGFxdWUgcmVjdCBmcm9tIHxsYXllcnw6CisgICAgICAgICAg
ICAgICAxMDAKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnwgaW4gfGNo
aWxkfDogLy8vLy8KKyAgICAgIHwgICAgMzAgICAgICAgICAgICAgICB8ICAgICAgICAgICByb3Rh
dGUoOTApICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCAz
MCArIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAg
IHwgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIDEwMCB8ICAgIHwg
IDEwICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgID09PiAgICAgfCAg
ICAgfCAgICAgICAgICAgICAgIHwxMCAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgfDEwKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICB8ICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgfAorICAgICAgfCAgICB8ICB8ICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8v
Ly8vLy8vLy8vLy98ICAgICA0MjAgICAgICB8ICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8v
Ly8vLy8vL3w2MCAgICAgICAgICAgIHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8v
Ly8vfCAgICAgICAgICAgICAgfCAgfAorICAgICAgKy0tLS18LS18LS0tLS0tLS0tLS0tLSsgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICstLXwtLXwtLS0tLS0tLS0tLS0tLS0r
ICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgIDIwfDEwfCAgICAgNzAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgfDUwMCAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8
ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAg
ICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAor
ICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAg
ICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAg
ICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAg
ICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwxMHwKKyAgICAgICAg
ICAgKy0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgICAgICAgICAgICAgICAg
ICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tKworICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgIDQ5MCAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1MDAKKyAgICAgKi8KK30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDBk
YWMzYWFmOGM2N2JmZGFhMTBmZTFhMWI2YmRkMmQ3NzU5NDJiMjQuLjEzZTAxNGIzMWQ1ZDI1NjA1
YmQ1YWYwZmJlYzhkOTAzZjczZWQwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIiAvLyBGb3IgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgpAQCAt
MzYsNiArMzcsMTIgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNl
IFdURjsKIAorI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCisgICAgRVhQRUNUX0VRKGEu
eCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAorICAgIEVYUEVD
VF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwg
Yi5oZWlnaHQoKSk7CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEZha2VUZXh0dXJlQWxsb2NhdG9y
IDogcHVibGljIFRleHR1cmVBbGxvY2F0b3IgewpAQCAtNjcsMTcgKzc0LDIwIEBAIHB1YmxpYzoK
ICAgICBpbnQgcHJlcGFyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wcmVwYXJlQ291bnQ7IH0K
ICAgICB2b2lkIGNsZWFyUHJlcGFyZUNvdW50KCkgeyBtX3ByZXBhcmVDb3VudCA9IDA7IH0KIAor
ICAgIHZvaWQgc2V0T3BhcXVlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIG9wYXF1ZVBhaW50UmVj
dCkgeyBtX29wYXF1ZVBhaW50UmVjdCA9IG9wYXF1ZVBhaW50UmVjdDsgfQorCiAgICAgLy8gTGFz
dCByZWN0IHBhc3NlZCB0byBwcmVwYXJlVG9VcGRhdGUoKS4KICAgICBjb25zdCBJbnRSZWN0JiBs
YXN0VXBkYXRlUmVjdCgpICBjb25zdCB7IHJldHVybiBtX2xhc3RVcGRhdGVSZWN0OyB9CiAKICAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRl
VGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRl
eHR1cmUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOyB9CiAgICAgdmlydHVhbCBT
YW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtKSB7IHJldHVybiBT
YW1wbGVkVGV4ZWxGb3JtYXRSR0JBOyB9Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGludCwgZmxvYXQs
IEludFJlY3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwgaW50LCBmbG9hdCwgSW50UmVjdCogcmVz
dWx0aW5nT3BhcXVlUmVjdCk7CiAKIHByaXZhdGU6CiAgICAgaW50IG1fcHJlcGFyZUNvdW50Owog
ICAgIEludFJlY3QgbV9yZWN0VG9JbnZhbGlkYXRlOwogICAgIEludFJlY3QgbV9sYXN0VXBkYXRl
UmVjdDsKKyAgICBJbnRSZWN0IG1fb3BhcXVlUGFpbnRSZWN0OwogICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBtX2xheWVyOwogfTsKIApAQCAtMTU4LDcgKzE2OCw3IEBAIHZvaWQg
RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QKICAgICAgICAgbV9yZWN0VG9JbnZhbGlkYXRlID0gSW50UmVjdCgp
OwogICAgICAgICBtX2xheWVyID0gMDsKICAgICB9Ci0gICAgKnJlc3VsdGluZ09wYXF1ZVJlY3Qg
PSBJbnRSZWN0KCk7CisgICAgKnJlc3VsdGluZ09wYXF1ZVJlY3QgPSBtX29wYXF1ZVBhaW50UmVj
dDsKIH0KIAogVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKQEAg
LTMzOSw0ICszNDksOTIgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRl
RnJvbVByZXBhcmUpCiAgICAgRVhQRUNUX0VRKDEsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5wcmVwYXJlQ291bnQoKSk7CiB9CiAKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdpb24pCit7CisgICAgT3duUHRyPFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRv
cjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisg
ICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0
aGVuIHBhaW50cyB0d28gdGlsZXMgaW4gdmFyaW91cyB3YXlzLgorCisgICAgUmVnaW9uIG9jY2x1
ZGVkOworICAgIEludFJlY3QgY29udGVudEJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
OworICAgIEludFJlY3QgdmlzaWJsZUJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAxNTApOwor
CisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzLnNpemUoKSk7CisgICAgbGF5ZXIt
PnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUJvdW5kcyk7CisgICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KDEpOworCisgICAgLy8gVGhlIGRyYXdUcmFuc2Zvcm0gaXMgdmVyaWZpZWQgaW4gQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdHMKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJh
bnNmb3JtOworICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgo
KSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgbGF5ZXItPnNldERy
YXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgb3Bh
cXVlIHRoZW4gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgYmUgdGhlIHdob2xlIGxheWVyJ3Mg
dmlzaWJsZSByZWdpb24uCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKyAgICBsYXllci0+
aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0
ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXIt
PmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
dmlzaWJsZUJvdW5kcywgb2NjbHVkZWQuYm91bmRzKCkpOworCisgICAgLy8gSWYgdGhlIGxheWVy
IGlzIG5vdCBvcGFxdWUgdGhlbiB0aGUgb2NjbHVkZWQgcmVnaW9uIHNob3VsZCBiZSBlbXB0eS4K
KyAgICBsYXllci0+c2V0T3BhcXVlKGZhbHNlKTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3Qo
Y29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRz
KTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1
ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2Ns
dWRlZC5ib3VuZHMoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgcGFpbnRzIG9wYXF1ZSBjb250
ZW50LCB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIG1hdGNoIHRoZSB2aXNpYmxlIG9w
YXF1ZSBjb250ZW50LgorICAgIEludFJlY3Qgb3BhcXVlUGFpbnRSZWN0ID0gSW50UmVjdCgxMCwg
MTAsIDkwLCAxOTApOworICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRP
cGFxdWVQYWludFJlY3Qob3BhcXVlUGFpbnRSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJl
Y3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91
bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09j
Y2x1ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9u
KG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKwor
ICAgIC8vIElmIHdlIHBhaW50IGFnYWluIHdpdGhvdXQgaW52YWxpZGF0aW5nLCB0aGUgc2FtZSBz
dHVmZiBzaG91bGQgYmUgb2NjbHVkZWQuCisgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRSZWN0KCkpOworICAgIGxheWVyLT5wcmVwYXJl
VG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAg
IGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbigmb2NjbHVkZWQpOworICAgIEVYUEVDVF9F
UV9SRUNUKGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpLCBvY2Ns
dWRlZC5ib3VuZHMoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgdHJhbnNmb3JtZWQgdGhl
biB0aGUgcmVzdWx0aW5nIG9jY2x1ZGVkIGFyZWEgbmVlZHMgdG8gYmUgdHJhbnNmb3JtZWQgdG8g
aXRzIHRhcmdldCBzcGFjZS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Cisg
ICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRl
bnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHRyYW5zZm9ybS5yb3RhdGUoOTApOworICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRl
bnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoMTAsIDEw
KTsKKyAgICBkcmF3VHJhbnNmb3JtID0gdHJhbnNmb3JtOworICAgIGRyYXdUcmFuc2Zvcm0udHJh
bnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWlnaHQo
KSAvIDIuMCk7CisgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7Cisg
ICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVk
ID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZvY2NsdWRl
ZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QodHJhbnNmb3JtLm1hcFJlY3QoaW50ZXJzZWN0aW9uKG9w
YXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcykpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisKKyAg
ICAvLyBCdXQgYSBub24tYXhpcy1hbGlnbmVkIHRyYW5zZm9ybSBkb2VzIG5vdCBnZXQgY29uc2lk
ZXJlZCBmb3Igb2NjbHVzaW9uLgorICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5k
cy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICB0cmFu
c2Zvcm0ucm90YXRlKDUpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMu
d2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGRyYXdU
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUoY29udGVu
dEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAg
ICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKyAgICBsYXllci0+cHJl
cGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsK
KyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oJm9jY2x1ZGVkKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124150</attachid>
            <date>2012-01-26 11:04:51 -0800</date>
            <delta_ts>2012-01-26 12:42:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120126140450.patch</filename>
            <type>text/plain</type>
            <size>30786</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIyZWNlNThjNTA4OGY1
NzU5N2ZiOGZkNzA0NjNjODJkODFjMTliYy4uNDE1ODdjYWQzYjA2Y2VhNzU1NmYyM2NhMmJkYmMy
ZTk3Njg0ZTdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAxLTI2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgVGlsZWRMYXllckNocm9taXVt
VGVzdC5jcHAgYW5kIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9z
ZWRJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNvbnRlbnRUb1RhcmdldFNwYWNlVHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVk
UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlzUGFpbnRlZEF4aXNB
bGlnbmVkSW5UYXJnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjphZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwOgorCiAyMDEyLTAxLTIwICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
VXNlIHJlZ2lvbiByZXBvcnRlZCBwYWludGVkIG9wYXF1ZSBmb3IgZHJhdyBjdWxsaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDg1NDJlN2EwMzJiYzI0YTllMWQzY2RkMWFmYTc5ZDRl
YjJkMDQwZGQuLmJiMzc3ODY5OTZmZWM5YjhjM2RhYjQzYzFjMzM3MjIxMzU0MTA0ZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDEtMjYgIERhbmEg
SmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb21w
dXRlIG9jY2x1c2lvbiBkdXJpbmcgcGFpbnQgbG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVVcGRhdGVy
OjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAoV1RGOjpGYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdURjo6VEVTVCk6CisKIDIwMTItMDEt
MjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVlIGZvciBkcmF3IGN1bGxpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCmluZGV4
IDE3YmQ4YjFmZjRkY2JmMWQ3MWM2NWQzMTNlZjcwZDQxNThkMzU5ZDMuLjVjZGUwMmE3YjJlZWY3
ZmZjZDA0NzE0MTBlMjU5NTUxYTE0MTAyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE4LDYgKzIxOCwxOSBAQCBJbnRSZWN0IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgICAgICAg
IGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7CiB9CiAKK0lu
dFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpbnQg
eCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7CisgICAgaW50IHkgPSBjbGFtcFRv
SW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOworICAgIGZsb2F0IG1heFggPSBjbGFtcFRvSW50ZWdl
cihmbG9vcmYocmVjdC5tYXhYKCkpKTsKKyAgICBmbG9hdCBtYXhZID0gY2xhbXBUb0ludGVnZXIo
Zmxvb3JmKHJlY3QubWF4WSgpKSk7CisgICAgLy8gQSByZWN0IG9mIHdpZHRoIDAgc2hvdWxkIG5v
dCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWlsL2Zsb29yLgorICAgIGludCB3
aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDApOworICAgIGludCBoZWlnaHQg
PSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKKworICAgIHJldHVybiBJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCiBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCkKIHsKICAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAgfHwgc3JjUmVjdC5oZWlnaHQo
KSA9PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApp
bmRleCAxNDA5MDcxYjExOTg4M2QzYjA4NjI3MGFhNGNmNzg4NGY0ZmJhNjJjLi4yMmMxNzFjNWFi
NGQxODg5NjBlODJmZTdiZTAyMThlNDFjZjhhNWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjcwLDYgKzI3MCw5IEBAIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCiAKIElu
dFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorLy8gUmV0dXJucyBh
IHZhbGlkIEludFJlY3QgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2ZW4gRmxvYXRSZWN0LgorSW50
UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKIC8vIE1hcCByZWN0IHIg
ZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBkZXN0UmVjdC4KIEZsb2F0UmVj
dCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA0
YzYzZGZkN2QyNjgyODdiNWY4NWE3N2JjNDA0MjVmMDYwYThhNTgyLi4xNzk2ODUyMmRhOTEwYWVj
YzdhY2UwNzNiN2MzMzljZWYyZjI0YWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRl
ICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTQ4MSw2ICs0ODIsNDAgQEAgdm9pZCBM
YXllckNocm9taXVtOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IGNvbnRlbnRzU2NhbGUpCiAgICAg
c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4IExheWVyQ2hyb21p
dW06OmNvbnRlbnRUb1RhcmdldFNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBJbnRTaXpl
IGJvdW5kc0luTGF5ZXJTcGFjZSA9IGJvdW5kcygpOworICAgIEludFNpemUgYm91bmRzSW5Db250
ZW50U3BhY2UgPSBjb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQg
c3BhY2UgdG8gbGF5ZXIgc3BhY2UKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5k
c0luTGF5ZXJTcGFjZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRl
bnRTcGFjZS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0lu
TGF5ZXJTcGFjZS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50
U3BhY2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIE1vdmUgdGhlIG9yaWdpbiB0byB0aGUgY2VudGVy
CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSAv
IDIuMCwgLWJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJldHVy
biB0cmFuc2Zvcm07Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRS
ZWdpb24oUmVnaW9uKiBvY2NsdWRlZFRhcmdldFNwYWNlKQoreworICAgIGlmIChkcmF3T3BhY2l0
eSgpICE9IDEgfHwgIWlzUGFpbnRlZEF4aXNBbGlnbmVkSW5UYXJnZXQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG9wYXF1ZSgpKSB7CisgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0
ID0gY29udGVudFRvVGFyZ2V0U3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNp
YmxlTGF5ZXJSZWN0KCkpKTsKKyAgICAgICAgb2NjbHVkZWRUYXJnZXRTcGFjZS0+dW5pdGUoZW5j
bG9zZWRJbnRSZWN0KHRhcmdldFJlY3QpKTsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1
bTo6aXNQYWludGVkQXhpc0FsaWduZWRJblRhcmdldCgpIGNvbnN0Cit7CisgICAgRmxvYXRRdWFk
IHF1YWQgPSBjb250ZW50VG9UYXJnZXRTcGFjZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFk
KHZpc2libGVMYXllclJlY3QoKSkpOworICAgIHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKTsK
K30KKwogdm9pZCBMYXllckNocm9taXVtOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKIHsKICAgICBB
U1NFUlQoIW1fcmVuZGVyU3VyZmFjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggMDRkZDFlNjYy
YWY3NDAwZTk5YzI2ZmFlYjVkNGU4MzNkODJiMmZlZS4uMjk2YTUyYmQ3NTI2YzQwMjNiZDNiNDUz
NTViMmJmNmY3YmI3ZTQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNTUsNiArNTUsNyBAQCBj
bGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVy
ZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8g
QmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJl
IGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFzcy4KQEAgLTE5MSw2ICsxOTIsMTIgQEAgcHVibGlj
OgogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nh
bGU7IH0KICAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwogCisgICAgLy8gVHJhbnNm
b3JtcyBmcm9tIHRoZSBjb250ZW50IHNwYWNlIG9mIHRoZSBsYXllciB0byB0aGUgY29udGVudCBz
cGFjZSBvZiB0aGUgdGFyZ2V0IFJlbmRlclN1cmZhY2UuCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29udGVudFRvVGFyZ2V0U3BhY2VUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIC8vIEFkZHMg
YW55IG9wYXF1ZSB2aXNpYmxlIHBpeGVscyB0byB0aGUgb2NjbHVkZWQgcmVnaW9uIGluIHRoZSBj
b29yZGluYXRlIHNwYWNlIG9mIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQg
YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oUmVnaW9uKiBvY2NsdWRlZFRhcmdldFNwYWNlKTsKKwog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFz
IGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKSB7IH0KQEAgLTIwNiw2ICsyMTMsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBjb250ZXh0LWRlcGVuZGVudCByZXNvdXJjZXMgc3VjaCBh
cyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogCisgICAg
Ym9vbCBpc1BhaW50ZWRBeGlzQWxpZ25lZEluVGFyZ2V0KCkgY29uc3Q7CisKICAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0KCk7CiAKICAgICAvLyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gbGF5ZXIgbmVl
ZCByZXBhaW50aW5nL3VwZGF0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggYjVjNjUwY2RhYjQzYWU2ZDM4NmM2ZjNkMGU5ZDA2YTk0ZDY2MDk2Ni4uOGY4MGNhNmI2Zjcx
MTZkNzI1ZWM0YzA0ZTE3MDBlZDFlODBiNjVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC00NTgsNiArNDU4LDM5IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVw
YXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQKICAgICB9
CiB9CiAKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjphZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihS
ZWdpb24qIG9jY2x1ZGVkVGFyZ2V0U3BhY2UpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IGRy
YXdPcGFjaXR5KCkgIT0gMSB8fCAhaXNQYWludGVkQXhpc0FsaWduZWRJblRhcmdldCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAob3BhcXVlKCkpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1
bTo6YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24ob2NjbHVkZWRUYXJnZXRTcGFjZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVc2UgYSBSZWdpb24gdG8gbWVyZ2UgdGlsZXMgdG9n
ZXRoZXIgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGVtIHRvIGF2b2lkIGdhcHMgYmV0d2VlbiB0aGUg
dGlsZXMgaW4gc2NyZWVuIHNwYWNlIGZyb20gdXNpbmcgSW50UmVjdHMKKyAgICAvLyBjb250YWlu
ZWQgd2l0aGluIGVhY2ggdGlsZSdzIHNjcmVlbi1zcGFjZSBvcGFxdWUgcmVjdC4KKyAgICAvLyBG
SVhNRTogQ3JlYXRlL1VzZSBhIEZsb2F0UmVnaW9uIGluc3RlYWQgb2YgYSBSZWdpb24gYmFzZWQg
b24gaW50cyB0byBhdm9pZCB0aGlzIHN0ZXAgYW5kIGdldCBiZXR0ZXIgYWNjdXJhY3kgaW4gc2Ny
ZWVuIHNwYWNlLgorICAgIFJlZ2lvbiB0aWxlUmVnaW9uOworICAgIGludCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b207CisgICAgbV90aWxlci0+bGF5ZXJSZWN0VG9UaWxlSW5kaWNlcyh2aXNpYmxl
TGF5ZXJSZWN0KCksIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9
IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8
PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0
KGksIGopOworICAgICAgICAgICAgaWYgKHRpbGUpCisgICAgICAgICAgICAgICAgdGlsZVJlZ2lv
bi51bml0ZSh0aWxlLT5tX29wYXF1ZVJlY3QpOworICAgICAgICB9CisgICAgfQorICAgIFZlY3Rv
cjxJbnRSZWN0PiB0aWxlUmVjdHMgPSB0aWxlUmVnaW9uLnJlY3RzKCk7CisKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTcGFjZSA9IGNvbnRlbnRUb1RhcmdldFNwYWNl
VHJhbnNmb3JtKCk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpc2libGVMYXllclJlY3Qo
KTsKKyAgICBmb3IgKFZlY3RvcjxJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRpbGVS
ZWN0cy5iZWdpbigpOyBpdGVyICE9IHRpbGVSZWN0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IEludFJlY3QgdmlzaWJsZVRpbGVPcGFxdWVSZWN0ID0gaW50ZXJzZWN0aW9uKHZpc2libGVSZWN0
LCAqaXRlcik7CisgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gY29udGVudFRvVGFyZ2V0
U3BhY2UubWFwUmVjdChGbG9hdFJlY3QodmlzaWJsZVRpbGVPcGFxdWVSZWN0KSk7CisgICAgICAg
IG9jY2x1ZGVkVGFyZ2V0U3BhY2UtPnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0YXJnZXRSZWN0KSk7
CisgICAgfQorfQogCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNv
bnN0IEludFJlY3QmIGxheWVyUmVjdCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5k
ZXggYzEyZTkxYWE0ZjgyNjliYmM1OTI1M2FmMzZlMWJhNmUyNzRkMDA4Yy4uNzk2YzA2NmQ1ODkx
ZDZiYzBiOGU2NjY5ZmM0NjYxZTlkOGYyZjJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmgKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJU
ZXh0dXJlVXBkYXRlcjsKK2NsYXNzIFJlZ2lvbjsKIGNsYXNzIFVwZGF0YWJsZVRpbGU7CiAKIGNs
YXNzIFRpbGVkTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKQEAgLTYxLDYg
KzYyLDggQEAgcHVibGljOgogICAgIC8vIHJlY3ljbGVkIGJ5IHRoZSB0ZXh0dXJlIG1hbmFnZXIu
CiAgICAgdm9pZCBwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCk7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oUmVnaW9uKiBvY2Ns
dWRlZFRhcmdldFNwYWNlKTsKKwogcHJvdGVjdGVkOgogICAgIFRpbGVkTGF5ZXJDaHJvbWl1bSgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBhMmZiODIyYzU2YmRiMzVm
Y2NkM2I5OWE0ZDE0ZGVlYThkOTEzMjhiLi45YTU1Nzk0OGIyZjJkNDRjMWVmNmM0Yjg3NTJkYjgw
MTEzYjU3NDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNo
cm9uaXplci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgpAQCAtNDM4LDE1ICs0
MzksMjMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKIHsKICAgICAvLyBVc2UgRnJvbnRUb0Jh
Y2sgdG8gYWxsb3cgZm9yIHRlc3Rpbmcgb2NjbHVzaW9uIGFuZCBwZXJmb3JtaW5nIGN1bGxpbmcg
ZHVyaW5nIHRoZSB0cmVlIHdhbGsuCiAgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpG
cm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKyAgICBSZWdpb24gb2NjbHVkZWRUYXJn
ZXRTcGFjZTsKIAogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9y
VHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBmb3IgKENDTGF5ZXJJdGVy
YXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQucmVwcmVzZW50c1Rh
cmdldFJlbmRlclN1cmZhY2UoKSkgewogICAgICAgICAgICAgQVNTRVJUKGl0LT5yZW5kZXJTdXJm
YWNlKCktPmRyYXdPcGFjaXR5KCkpOworCisgICAgICAgICAgICBvY2NsdWRlZFRhcmdldFNwYWNl
ID0gUmVnaW9uKCk7CisKKyAgICAgICAgICAgIC8vIE1hc2sgYW5kIHJlcGxpY2EgbGF5ZXJzIGFy
ZSBub3Qgb2NjbHVkZWQgYnkgbGF5ZXJzIGluIHRoZSBzdXJmYWNlCiAgICAgICAgICAgICBwYWlu
dE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSgqaXQsIHBhaW50VHlwZSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
IWl0LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkoKml0LCBwYWludFR5cGUpOworCisgICAgICAgICAgICAvLyBBZGQgdGhlIGxheWVyJ3Mgb2Nj
bHVzaW9uIHRvIHRoZSByZWdpb24gZm9yIHRoZSBuZXh0IGxheWVyIHRvIGJlIGFibGUgdG8gdXNl
IGZvciBjdWxsaW5nLgorICAgICAgICAgICAgaXQtPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZv
Y2NsdWRlZFRhcmdldFNwYWNlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKaW5kZXggZDkyYWRjMTY2YWU2N2UzYWYwNTQyOTUxMGM5N2QzZmUzNjgzNTA5
Zi4uM2Q2ZmU0YWZkMDFmY2RmMWZiODFiYjE0OWQ1MTUxM2VhZDc1ZTUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0
SW1wbDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
IGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgUmVnaW9uOwogY2xhc3MgVGV4dHVy
ZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVy
LmNwcAppbmRleCA3NzEwMDMyZTA1YzZhZmFhNDMxNzlkOWE3OTI5YTA4MWYzZTBmYjBlLi45OWZl
YjIxNzBkZmU5ODM4N2I5ZGM4ODIxMmUwN2RhOTc0ZDI5ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1
bGxlci5jcHAKQEAgLTYyLDE4ICs2Miw2IEBAIHN0YXRpYyBib29sIHJlZ2lvbkNvbnRhaW5zUmVj
dChjb25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICByZXR1cm4g
cmVjdFJlZ2lvbi5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGVuY2xvc2VkSW50UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZmxvYXQgeCA9IGNlaWxmKHJlY3QueCgp
KTsKLSAgICBmbG9hdCB5ID0gY2VpbGYocmVjdC55KCkpOwotICAgIC8vIEEgcmVjdCBvZiB3aWR0
aCAwIHNob3VsZCBub3QgYmVjb21lIGEgcmVjdCBvZiB3aWR0aCAtMS4KLSAgICBmbG9hdCB3aWR0
aCA9IG1heDxmbG9hdD4oZmxvb3JmKHJlY3QubWF4WCgpKSAtIHgsIDApOwotICAgIGZsb2F0IGhl
aWdodCA9IG1heDxmbG9hdD4oZmxvb3JmKHJlY3QubWF4WSgpKSAtIHksIDApOwotCi0gICAgcmV0
dXJuIEludFJlY3QoY2xhbXBUb0ludGVnZXIoeCksIGNsYW1wVG9JbnRlZ2VyKHkpLAotICAgICAg
ICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0
KSk7Ci19Ci0KIHZvaWQgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhDQ1F1YWRMaXN0
JiBxdWFkTGlzdCkKIHsKICAgICBpZiAoIXF1YWRMaXN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwCmluZGV4IGQyZTFjZmVmOTNlMjgyMTY2ZGE4NTEyNTZjOTVjMGU2NTEyYzY5YmEuLjg1ZWJk
MzI1NWZhYmJhYjMwYmI0MmE2MmNhYTRlNWUxMTYzNWUwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgi
CiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgpA
QCAtMzUsNiArMzYsMTIgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKyNkZWZpbmUg
RVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisg
ICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBi
LndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCiBu
YW1lc3BhY2UgewogCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91
bmRzLCBib29sIHByZXNlcnZlczNEKQpAQCAtNTk1LDQgKzYwMiwxNzAgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAv
LyAgLSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uCiAv
LwogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1
ZGVkUmVnaW9uKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3Jt
cyBhcmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwg
MTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXIt
PnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKwor
ICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIg
YmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUs
IHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVk
ZWRSZWdpb24oJm9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwg
NzAsIDcwKSwgb2NjbHVkZWQuYm91bmRzKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQorewor
ICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNl
ZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAg
cGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXll
clRyYW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAg
IGxheWVyVHJhbnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRl
KC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1
MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXgg
dGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9z
dCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9u
KCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygp
KTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9P
Y2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQg
dGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVk
OworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBh
cmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJU
cmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwg
MzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0
cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVy
TGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1F
OiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4g
Q0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2Nj
bHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oJm9j
Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2Nj
bHVkZWQuYm91bmRzKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxh
eWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQoreworICAgIC8v
IFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAg
ICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFy
ZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGxheWVyKTsKKworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAg
ICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwg
MTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0
KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUw
MCwgNTAwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Cisg
ICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNp
YWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4
IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2Vs
ZlRvT2NjbHVkZWRSZWdpb24oJm9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwLCA0MzAsIDYwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKworICAgIC8qIEp1c3RpZmlj
YXRpb24gZm9yIHRoZSBhYm92ZSBvcGFxdWUgcmVjdCBmcm9tIHxsYXllcnw6CisgICAgICAgICAg
ICAgICAxMDAKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnwgaW4gfGNo
aWxkfDogLy8vLy8KKyAgICAgIHwgICAgMzAgICAgICAgICAgICAgICB8ICAgICAgICAgICByb3Rh
dGUoOTApICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCAz
MCArIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAg
IHwgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIDEwMCB8ICAgIHwg
IDEwICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgID09PiAgICAgfCAg
ICAgfCAgICAgICAgICAgICAgIHwxMCAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgfDEwKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICB8ICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgfAorICAgICAgfCAgICB8ICB8ICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8v
Ly8vLy8vLy8vLy98ICAgICA0MjAgICAgICB8ICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8v
Ly8vLy8vL3w2MCAgICAgICAgICAgIHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8v
Ly8vfCAgICAgICAgICAgICAgfCAgfAorICAgICAgKy0tLS18LS18LS0tLS0tLS0tLS0tLSsgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICstLXwtLXwtLS0tLS0tLS0tLS0tLS0r
ICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgIDIwfDEwfCAgICAgNzAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgfDUwMCAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8
ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAg
ICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAor
ICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAg
ICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAg
ICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAg
ICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwxMHwKKyAgICAgICAg
ICAgKy0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgICAgICAgICAgICAgICAg
ICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tKworICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgIDQ5MCAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1MDAKKyAgICAgKi8KK30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDBk
YWMzYWFmOGM2N2JmZGFhMTBmZTFhMWI2YmRkMmQ3NzU5NDJiMjQuLjEzZTAxNGIzMWQ1ZDI1NjA1
YmQ1YWYwZmJlYzhkOTAzZjczZWQwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIiAvLyBGb3IgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgpAQCAt
MzYsNiArMzcsMTIgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNl
IFdURjsKIAorI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCisgICAgRVhQRUNUX0VRKGEu
eCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAorICAgIEVYUEVD
VF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwg
Yi5oZWlnaHQoKSk7CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEZha2VUZXh0dXJlQWxsb2NhdG9y
IDogcHVibGljIFRleHR1cmVBbGxvY2F0b3IgewpAQCAtNjcsMTcgKzc0LDIwIEBAIHB1YmxpYzoK
ICAgICBpbnQgcHJlcGFyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wcmVwYXJlQ291bnQ7IH0K
ICAgICB2b2lkIGNsZWFyUHJlcGFyZUNvdW50KCkgeyBtX3ByZXBhcmVDb3VudCA9IDA7IH0KIAor
ICAgIHZvaWQgc2V0T3BhcXVlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIG9wYXF1ZVBhaW50UmVj
dCkgeyBtX29wYXF1ZVBhaW50UmVjdCA9IG9wYXF1ZVBhaW50UmVjdDsgfQorCiAgICAgLy8gTGFz
dCByZWN0IHBhc3NlZCB0byBwcmVwYXJlVG9VcGRhdGUoKS4KICAgICBjb25zdCBJbnRSZWN0JiBs
YXN0VXBkYXRlUmVjdCgpICBjb25zdCB7IHJldHVybiBtX2xhc3RVcGRhdGVSZWN0OyB9CiAKICAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRl
VGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRl
eHR1cmUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOyB9CiAgICAgdmlydHVhbCBT
YW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtKSB7IHJldHVybiBT
YW1wbGVkVGV4ZWxGb3JtYXRSR0JBOyB9Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGludCwgZmxvYXQs
IEludFJlY3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwgaW50LCBmbG9hdCwgSW50UmVjdCogcmVz
dWx0aW5nT3BhcXVlUmVjdCk7CiAKIHByaXZhdGU6CiAgICAgaW50IG1fcHJlcGFyZUNvdW50Owog
ICAgIEludFJlY3QgbV9yZWN0VG9JbnZhbGlkYXRlOwogICAgIEludFJlY3QgbV9sYXN0VXBkYXRl
UmVjdDsKKyAgICBJbnRSZWN0IG1fb3BhcXVlUGFpbnRSZWN0OwogICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBtX2xheWVyOwogfTsKIApAQCAtMTU4LDcgKzE2OCw3IEBAIHZvaWQg
RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QKICAgICAgICAgbV9yZWN0VG9JbnZhbGlkYXRlID0gSW50UmVjdCgp
OwogICAgICAgICBtX2xheWVyID0gMDsKICAgICB9Ci0gICAgKnJlc3VsdGluZ09wYXF1ZVJlY3Qg
PSBJbnRSZWN0KCk7CisgICAgKnJlc3VsdGluZ09wYXF1ZVJlY3QgPSBtX29wYXF1ZVBhaW50UmVj
dDsKIH0KIAogVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKQEAg
LTMzOSw0ICszNDksOTIgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRl
RnJvbVByZXBhcmUpCiAgICAgRVhQRUNUX0VRKDEsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5wcmVwYXJlQ291bnQoKSk7CiB9CiAKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdpb24pCit7CisgICAgT3duUHRyPFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRv
cjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisg
ICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0
aGVuIHBhaW50cyB0d28gdGlsZXMgaW4gdmFyaW91cyB3YXlzLgorCisgICAgUmVnaW9uIG9jY2x1
ZGVkOworICAgIEludFJlY3QgY29udGVudEJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
OworICAgIEludFJlY3QgdmlzaWJsZUJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAxNTApOwor
CisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzLnNpemUoKSk7CisgICAgbGF5ZXIt
PnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUJvdW5kcyk7CisgICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KDEpOworCisgICAgLy8gVGhlIGRyYXdUcmFuc2Zvcm0gaXMgdmVyaWZpZWQgaW4gQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdHMKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJh
bnNmb3JtOworICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgo
KSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgbGF5ZXItPnNldERy
YXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgb3Bh
cXVlIHRoZW4gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgYmUgdGhlIHdob2xlIGxheWVyJ3Mg
dmlzaWJsZSByZWdpb24uCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKyAgICBsYXllci0+
aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0
ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXIt
PmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
dmlzaWJsZUJvdW5kcywgb2NjbHVkZWQuYm91bmRzKCkpOworCisgICAgLy8gSWYgdGhlIGxheWVy
IGlzIG5vdCBvcGFxdWUgdGhlbiB0aGUgb2NjbHVkZWQgcmVnaW9uIHNob3VsZCBiZSBlbXB0eS4K
KyAgICBsYXllci0+c2V0T3BhcXVlKGZhbHNlKTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3Qo
Y29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRz
KTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1
ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2Ns
dWRlZC5ib3VuZHMoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgcGFpbnRzIG9wYXF1ZSBjb250
ZW50LCB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIG1hdGNoIHRoZSB2aXNpYmxlIG9w
YXF1ZSBjb250ZW50LgorICAgIEludFJlY3Qgb3BhcXVlUGFpbnRSZWN0ID0gSW50UmVjdCgxMCwg
MTAsIDkwLCAxOTApOworICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRP
cGFxdWVQYWludFJlY3Qob3BhcXVlUGFpbnRSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJl
Y3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91
bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09j
Y2x1ZGVkUmVnaW9uKCZvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9u
KG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKwor
ICAgIC8vIElmIHdlIHBhaW50IGFnYWluIHdpdGhvdXQgaW52YWxpZGF0aW5nLCB0aGUgc2FtZSBz
dHVmZiBzaG91bGQgYmUgb2NjbHVkZWQuCisgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRSZWN0KCkpOworICAgIGxheWVyLT5wcmVwYXJl
VG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAg
IGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbigmb2NjbHVkZWQpOworICAgIEVYUEVDVF9F
UV9SRUNUKGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpLCBvY2Ns
dWRlZC5ib3VuZHMoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgdHJhbnNmb3JtZWQgdGhl
biB0aGUgcmVzdWx0aW5nIG9jY2x1ZGVkIGFyZWEgbmVlZHMgdG8gYmUgdHJhbnNmb3JtZWQgdG8g
aXRzIHRhcmdldCBzcGFjZS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Cisg
ICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRl
bnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHRyYW5zZm9ybS5yb3RhdGUoOTApOworICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRl
bnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoMTAsIDEw
KTsKKyAgICBkcmF3VHJhbnNmb3JtID0gdHJhbnNmb3JtOworICAgIGRyYXdUcmFuc2Zvcm0udHJh
bnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWlnaHQo
KSAvIDIuMCk7CisgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7Cisg
ICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVk
ID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKCZvY2NsdWRl
ZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QodHJhbnNmb3JtLm1hcFJlY3QoaW50ZXJzZWN0aW9uKG9w
YXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcykpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisKKyAg
ICAvLyBCdXQgYSBub24tYXhpcy1hbGlnbmVkIHRyYW5zZm9ybSBkb2VzIG5vdCBnZXQgY29uc2lk
ZXJlZCBmb3Igb2NjbHVzaW9uLgorICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5k
cy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICB0cmFu
c2Zvcm0ucm90YXRlKDUpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMu
d2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGRyYXdU
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUoY29udGVu
dEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAg
ICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKyAgICBsYXllci0+cHJl
cGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsK
KyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24oJm9jY2x1ZGVkKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124164</attachid>
            <date>2012-01-26 12:42:07 -0800</date>
            <delta_ts>2012-01-26 16:22:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120126154206.patch</filename>
            <type>text/plain</type>
            <size>31434</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIyZWNlNThjNTA4OGY1
NzU5N2ZiOGZkNzA0NjNjODJkODFjMTliYy4uNDE1ODdjYWQzYjA2Y2VhNzU1NmYyM2NhMmJkYmMy
ZTk3Njg0ZTdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAxLTI2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgVGlsZWRMYXllckNocm9taXVt
VGVzdC5jcHAgYW5kIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9z
ZWRJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNvbnRlbnRUb1RhcmdldFNwYWNlVHJhbnNm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVk
UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlzUGFpbnRlZEF4aXNB
bGlnbmVkSW5UYXJnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjphZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwOgorCiAyMDEyLTAxLTIwICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
VXNlIHJlZ2lvbiByZXBvcnRlZCBwYWludGVkIG9wYXF1ZSBmb3IgZHJhdyBjdWxsaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDg1NDJlN2EwMzJiYzI0YTllMWQzY2RkMWFmYTc5ZDRl
YjJkMDQwZGQuLmJiMzc3ODY5OTZmZWM5YjhjM2RhYjQzYzFjMzM3MjIxMzU0MTA0ZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDEtMjYgIERhbmEg
SmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb21w
dXRlIG9jY2x1c2lvbiBkdXJpbmcgcGFpbnQgbG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVVcGRhdGVy
OjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAoV1RGOjpGYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdURjo6VEVTVCk6CisKIDIwMTItMDEt
MjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVlIGZvciBkcmF3IGN1bGxpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCmluZGV4
IDE3YmQ4YjFmZjRkY2JmMWQ3MWM2NWQzMTNlZjcwZDQxNThkMzU5ZDMuLjVjZGUwMmE3YjJlZWY3
ZmZjZDA0NzE0MTBlMjU5NTUxYTE0MTAyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE4LDYgKzIxOCwxOSBAQCBJbnRSZWN0IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgICAgICAg
IGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7CiB9CiAKK0lu
dFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpbnQg
eCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7CisgICAgaW50IHkgPSBjbGFtcFRv
SW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOworICAgIGZsb2F0IG1heFggPSBjbGFtcFRvSW50ZWdl
cihmbG9vcmYocmVjdC5tYXhYKCkpKTsKKyAgICBmbG9hdCBtYXhZID0gY2xhbXBUb0ludGVnZXIo
Zmxvb3JmKHJlY3QubWF4WSgpKSk7CisgICAgLy8gQSByZWN0IG9mIHdpZHRoIDAgc2hvdWxkIG5v
dCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWlsL2Zsb29yLgorICAgIGludCB3
aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDApOworICAgIGludCBoZWlnaHQg
PSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKKworICAgIHJldHVybiBJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCiBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCkKIHsKICAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAgfHwgc3JjUmVjdC5oZWlnaHQo
KSA9PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApp
bmRleCAxNDA5MDcxYjExOTg4M2QzYjA4NjI3MGFhNGNmNzg4NGY0ZmJhNjJjLi4yMmMxNzFjNWFi
NGQxODg5NjBlODJmZTdiZTAyMThlNDFjZjhhNWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjcwLDYgKzI3MCw5IEBAIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCiAKIElu
dFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorLy8gUmV0dXJucyBh
IHZhbGlkIEludFJlY3QgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2ZW4gRmxvYXRSZWN0LgorSW50
UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKIC8vIE1hcCByZWN0IHIg
ZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBkZXN0UmVjdC4KIEZsb2F0UmVj
dCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA0
YzYzZGZkN2QyNjgyODdiNWY4NWE3N2JjNDA0MjVmMDYwYThhNTgyLi41NTRjZTM2MTRmMWU2ODNh
YmMwYzEyNGU3ZTI2ODhmOTZhYjhmNjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRl
ICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTQ4MSw2ICs0ODIsMzggQEAgdm9pZCBM
YXllckNocm9taXVtOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IGNvbnRlbnRzU2NhbGUpCiAgICAg
c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4IExheWVyQ2hyb21p
dW06OmNvbnRlbnRUb1RhcmdldFNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBJbnRTaXpl
IGJvdW5kc0luTGF5ZXJTcGFjZSA9IGJvdW5kcygpOworICAgIEludFNpemUgYm91bmRzSW5Db250
ZW50U3BhY2UgPSBjb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQg
c3BhY2UgdG8gbGF5ZXIgc3BhY2UKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5k
c0luTGF5ZXJTcGFjZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRl
bnRTcGFjZS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0lu
TGF5ZXJTcGFjZS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50
U3BhY2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIE1vdmUgdGhlIG9yaWdpbiB0byB0aGUgY2VudGVy
CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSAv
IDIuMCwgLWJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJldHVy
biB0cmFuc2Zvcm07Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRS
ZWdpb24oUmVnaW9uJiBvY2NsdWRlZFRhcmdldFNwYWNlKQoreworICAgIGlmICghb3BhcXVlKCkg
fHwgZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFpc1BhaW50ZWRBeGlzQWxpZ25lZEluVGFyZ2V0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gY29udGVudFRv
VGFyZ2V0U3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlTGF5ZXJSZWN0
KCkpKTsKKyAgICBvY2NsdWRlZFRhcmdldFNwYWNlLnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0YXJn
ZXRSZWN0KSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aXNQYWludGVkQXhpc0FsaWduZWRJ
blRhcmdldCgpIGNvbnN0Cit7CisgICAgRmxvYXRRdWFkIHF1YWQgPSBjb250ZW50VG9UYXJnZXRT
cGFjZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKHZpc2libGVMYXllclJlY3QoKSkpOwor
ICAgIHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVt
OjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKIHsKICAgICBBU1NFUlQoIW1fcmVuZGVyU3VyZmFjZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKaW5kZXggMDRkZDFlNjYyYWY3NDAwZTk5YzI2ZmFlYjVkNGU4MzNk
ODJiMmZlZS4uMWVkZmVmODZiMDJhNjliMDE2MTI0NGFmZjEyOGU5NjliM2E2YzJiMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNz
IENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRl
ZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBj
bGFzcy4KQEAgLTE5MSw2ICsxOTIsMTIgQEAgcHVibGljOgogICAgIGZsb2F0IGNvbnRlbnRzU2Nh
bGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2NhbGU7IH0KICAgICB2b2lkIHNldENvbnRl
bnRzU2NhbGUoZmxvYXQpOwogCisgICAgLy8gVHJhbnNmb3JtcyBmcm9tIHRoZSBjb250ZW50IHNw
YWNlIG9mIHRoZSBsYXllciB0byB0aGUgY29udGVudCBzcGFjZSBvZiB0aGUgdGFyZ2V0IFJlbmRl
clN1cmZhY2UuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3BhY2VU
cmFuc2Zvcm0oKSBjb25zdDsKKworICAgIC8vIEFkZHMgYW55IG9wYXF1ZSB2aXNpYmxlIHBpeGVs
cyB0byB0aGUgb2NjbHVkZWQgcmVnaW9uIGluIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSB0
YXJnZXQgc3VyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgYWRkU2VsZlRvT2NjbHVkZWRSZWdpb24o
UmVnaW9uJiBvY2NsdWRlZFRhcmdldFNwYWNlKTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBh
bnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBi
b29sIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENo
YW5nZWQoKSB7IH0KQEAgLTIwNiw2ICsyMTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBj
b250ZXh0LWRlcGVuZGVudCByZXNvdXJjZXMgc3VjaCBhcyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFs
IHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogCisgICAgYm9vbCBpc1BhaW50ZWRBeGlzQWxpZ25l
ZEluVGFyZ2V0KCkgY29uc3Q7CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKICAgICAv
LyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gbGF5ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjVjNjUwY2RhYjQzYWU2ZDM4NmM2
ZjNkMGU5ZDA2YTk0ZDY2MDk2Ni4uNDVhNDNkZjQyN2ZmZGJiMWMwMDMwMTA2YmQ3MjVjYmM4Nzcw
NDAwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC00NTgsNiArNDU4LDM5
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlk
bGUsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQKICAgICB9CiB9CiAKK3ZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjphZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihSZWdpb24mIG9jY2x1ZGVkVGFyZ2V0U3Bh
Y2UpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IGRyYXdPcGFjaXR5KCkgIT0gMSB8fCAhaXNQ
YWludGVkQXhpc0FsaWduZWRJblRhcmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
b3BhcXVlKCkpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRSZWdp
b24ob2NjbHVkZWRUYXJnZXRTcGFjZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBVc2UgYSBSZWdpb24gdG8gbWVyZ2UgdGlsZXMgdG9nZXRoZXIgYmVmb3JlIHRyYW5zZm9ybWlu
ZyB0aGVtIHRvIGF2b2lkIGdhcHMgYmV0d2VlbiB0aGUgdGlsZXMgaW4gc2NyZWVuIHNwYWNlIGZy
b20gdXNpbmcgSW50UmVjdHMKKyAgICAvLyBjb250YWluZWQgd2l0aGluIGVhY2ggdGlsZSdzIHNj
cmVlbi1zcGFjZSBvcGFxdWUgcmVjdC4KKyAgICAvLyBGSVhNRTogQ3JlYXRlL1VzZSBhIEZsb2F0
UmVnaW9uIGZvciB0aGUgb2NjbHVkZWRUYXJnZXRTcGFjZSwgaW5zdGVhZCBvZiBhIFJlZ2lvbiBi
YXNlZCBvbiBpbnRzLCB0byBhdm9pZCB0aGlzIHN0ZXAgYW5kIGdldCBiZXR0ZXIgYWNjdXJhY3kg
YmV0d2VlbiBsYXllcnMgaW4gdGFyZ2V0IHNwYWNlLgorICAgIFJlZ2lvbiB0aWxlUmVnaW9uOwor
ICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+bGF5ZXJSZWN0
VG9UaWxlSW5kaWNlcyh2aXNpYmxlTGF5ZXJSZWN0KCksIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRv
bSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBm
b3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFi
bGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYgKHRpbGUpCisgICAg
ICAgICAgICAgICAgdGlsZVJlZ2lvbi51bml0ZSh0aWxlLT5tX29wYXF1ZVJlY3QpOworICAgICAg
ICB9CisgICAgfQorICAgIFZlY3RvcjxJbnRSZWN0PiB0aWxlUmVjdHMgPSB0aWxlUmVnaW9uLnJl
Y3RzKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTcGFjZSA9
IGNvbnRlbnRUb1RhcmdldFNwYWNlVHJhbnNmb3JtKCk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVj
dCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBmb3IgKFZlY3RvcjxJbnRSZWN0Pjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IHRpbGVSZWN0cy5iZWdpbigpOyBpdGVyICE9IHRpbGVSZWN0cy5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgIEludFJlY3QgdmlzaWJsZVRpbGVPcGFxdWVSZWN0ID0gaW50
ZXJzZWN0aW9uKHZpc2libGVSZWN0LCAqaXRlcik7CisgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRS
ZWN0ID0gY29udGVudFRvVGFyZ2V0U3BhY2UubWFwUmVjdChGbG9hdFJlY3QodmlzaWJsZVRpbGVP
cGFxdWVSZWN0KSk7CisgICAgICAgIG9jY2x1ZGVkVGFyZ2V0U3BhY2UudW5pdGUoZW5jbG9zZWRJ
bnRSZWN0KHRhcmdldFJlY3QpKTsKKyAgICB9Cit9CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uaAppbmRleCBjMTJlOTFhYTRmODI2OWJiYzU5MjUzYWYzNmUxYmE2ZTI3
NGQwMDhjLi44ZWMzMGRjZjM5NDg2MDhiODA0MWViZGQ2ZDI5Zjg2MjZmN2YxYjFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtMzUsNiArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOworY2xhc3MgUmVnaW9uOwogY2xhc3Mg
VXBkYXRhYmxlVGlsZTsKIAogY2xhc3MgVGlsZWRMYXllckNocm9taXVtIDogcHVibGljIExheWVy
Q2hyb21pdW0gewpAQCAtNjEsNiArNjIsOCBAQCBwdWJsaWM6CiAgICAgLy8gcmVjeWNsZWQgYnkg
dGhlIHRleHR1cmUgbWFuYWdlci4KICAgICB2b2lkIHByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRTZWxmVG9PY2NsdWRl
ZFJlZ2lvbihSZWdpb24mIG9jY2x1ZGVkVGFyZ2V0U3BhY2UpOworCiBwcm90ZWN0ZWQ6CiAgICAg
VGlsZWRMYXllckNocm9taXVtKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmlu
ZGV4IGEyZmI4MjJjNTZiZGIzNWZjY2QzYjk5YTRkMTRkZWVhOGQ5MTMyOGIuLjRkOGE4NzY3MDBm
MGQxNTY4YWU0YjM1N2NkMmFjM2IwZmE1YTAyMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIK
ICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJh
dG9yLmgiCkBAIC00MzgsMTUgKzQzOSwyMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogewog
ICAgIC8vIFVzZSBGcm9udFRvQmFjayB0byBhbGxvdyBmb3IgdGVzdGluZyBvY2NsdXNpb24gYW5k
IHBlcmZvcm1pbmcgY3VsbGluZyBkdXJpbmcgdGhlIHRyZWUgd2Fsay4KICAgICB0eXBlZGVmIEND
TGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIENDTGF5
ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBlOworICAg
IFJlZ2lvbiBvY2NsdWRlZFRhcmdldFNwYWNlOwogCiAgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBl
bmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwog
ICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJl
Z2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IGlmIChpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgICAgICBB
U1NFUlQoaXQtPnJlbmRlclN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSk7CisKKyAgICAgICAgICAg
IG9jY2x1ZGVkVGFyZ2V0U3BhY2UgPSBSZWdpb24oKTsKKworICAgICAgICAgICAgLy8gRklYTUU6
IE1hc2sgYW5kIHJlcGxpY2EgbGF5ZXJzIGFyZSBub3Qgb2NjbHVkZWQgYnkgbGF5ZXJzIGluIHRo
ZSBjdXJyZW50IHN1cmZhY2UsIGJ1dCBjYW4gYmUgb2NjbHVkZWQgYnkgb3RoZXIgc3VyZmFjZXMu
CiAgICAgICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSgqaXQsIHBh
aW50VHlwZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoIWl0LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
cGFpbnRDb250ZW50c0lmRGlydHkoKml0LCBwYWludFR5cGUpOworCisgICAgICAgICAgICAvLyBB
ZGQgdGhlIGxheWVyJ3Mgb2NjbHVzaW9uIHRvIHRoZSByZWdpb24gZm9yIHRoZSBuZXh0IGxheWVy
IHRvIGJlIGFibGUgdG8gdXNlIGZvciBjdWxsaW5nLgorICAgICAgICAgICAgaXQtPmFkZFNlbGZU
b09jY2x1ZGVkUmVnaW9uKG9jY2x1ZGVkVGFyZ2V0U3BhY2UpOwogICAgICAgICB9CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBkOTJhZGMxNjZhZTY3ZTNhZjA1NDI5
NTEwYzk3ZDNmZTM2ODM1MDlmLi4zZDZmZTRhZmQwMWZjZGYxZmI4MWJiMTQ5ZDUxNTEzZWFkNzVl
NTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNDgsNiArNDgsNyBAQCBjbGFz
cyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CitjbGFzcyBSZWdp
b247CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgVGV4dHVyZU1hbmFnZXI7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UXVhZEN1bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCmluZGV4IDc3MTAwMzJlMDVjNmFmYWE0MzE3OWQ5YTc5Mjlh
MDgxZjNlMGZiMGUuLjk5ZmViMjE3MGRmZTk4Mzg3YjlkYzg4MjEyZTA3ZGE5NzRkMjllNjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UXVhZEN1bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApAQCAtNjIsMTggKzYyLDYgQEAgc3RhdGljIGJvb2wg
cmVnaW9uQ29udGFpbnNSZWN0KGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogICAgIHJldHVybiByZWN0UmVnaW9uLmlzRW1wdHkoKTsKIH0KIAotc3RhdGljIEludFJl
Y3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBmbG9hdCB4
ID0gY2VpbGYocmVjdC54KCkpOwotICAgIGZsb2F0IHkgPSBjZWlsZihyZWN0LnkoKSk7Ci0gICAg
Ly8gQSByZWN0IG9mIHdpZHRoIDAgc2hvdWxkIG5vdCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0x
LgotICAgIGZsb2F0IHdpZHRoID0gbWF4PGZsb2F0PihmbG9vcmYocmVjdC5tYXhYKCkpIC0geCwg
MCk7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gbWF4PGZsb2F0PihmbG9vcmYocmVjdC5tYXhZKCkpIC0g
eSwgMCk7Ci0KLSAgICByZXR1cm4gSW50UmVjdChjbGFtcFRvSW50ZWdlcih4KSwgY2xhbXBUb0lu
dGVnZXIoeSksCi0gICAgICAgICAgICAgICAgICAgY2xhbXBUb0ludGVnZXIod2lkdGgpLCBjbGFt
cFRvSW50ZWdlcihoZWlnaHQpKTsKLX0KLQogdm9pZCBDQ1F1YWRDdWxsZXI6OmN1bGxPY2NsdWRl
ZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0KQogewogICAgIGlmICghcXVhZExpc3Quc2l6ZSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggZDJlMWNmZWY5M2UyODIxNjZkYTg1MTI1NmM5NWMw
ZTY1MTJjNjliYS4uNDg2YTNlYjEwZDQ0OGI3ZGNiOWVhZjRmMjE3OGIxNTlmOGMyM2VlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDQ0xheWVy
VHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAi
UmVnaW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUg
PGdtb2NrL2dtb2NrLmg+CkBAIC0zNSw2ICszNiwxMiBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAorI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCisgICAgRVhQRUNUX0VRKGEu
eCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAorICAgIEVYUEVD
VF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwg
Yi5oZWlnaHQoKSk7CisKIG5hbWVzcGFjZSB7CiAKIHZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCkBAIC01OTUsNCArNjAyLDE3
NCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNS
ZW5kZXJTdXJmYWNlcykKIC8vICAtIHRlc3QgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBDQ0xheWVy
VHJlZUhvc3RDb21tb24KIC8vCiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5
ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRo
ZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFJlZ2lvbiBvY2NsdWRlZDsK
KyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJl
bnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsK
KworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxz
ZSk7CisKKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5
ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2
ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7
CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVy
LT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlvbikK
K3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5n
IHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsK
KyAgICBsYXllclRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5z
bGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNp
emUoNTAwLCA1MDApLCBmYWxzZSk7CisKKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworCisg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAg
IGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2Ug
Zml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJl
ZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBh
cmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdWRlZCA9IFJl
Z2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2NsdWRlZCk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5k
cygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKwor
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJl
Z2lvbldpdGhUcmFuc2xhdGlvbikKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0
IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3
IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0u
dHJhbnNsYXRlKDIwLCAyMCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRT
aXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKwor
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdl
IGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRy
ZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJl
bmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
ZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBS
ZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24ob2NjbHVkZWQpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUwLCA1MCwgNTApLCBvY2NsdWRlZC5ib3Vu
ZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Cit9CisK
K1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRS
ZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSBy
aWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFJlZ2lvbiBvY2NsdWRlZDsKKyAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJl
bnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsK
KyAgICBjaGlsZC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Y2hpbGRUcmFuc2Zvcm07CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsK
KyAgICBjaGlsZFRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5z
bGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNp
emUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhs
YXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisKKyAg
ICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBsYXllci0+c2V0T3BhcXVlKHRy
dWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6
IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBD
Q0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2Ns
dWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2Ns
dWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApLCBvY2Ns
dWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUo
KSk7CisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb3BhcXVlIHJlY3QgZnJv
bSB8bGF5ZXJ8OgorICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfDMwICBWaXNpYmxlIHJl
Z2lvbiBvZiB8bGF5ZXJ8IGluIHxjaGlsZHw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICA9PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAg
ICB8CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAg
ICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwK
KyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAg
ICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAg
ICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAg
ICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8
ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAg
ICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0t
fC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAr
LS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwx
MHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAg
fAorICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAg
ICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKIH0gLy8gbmFtZXNwYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hy
b21pdW1UZXN0LmNwcAppbmRleCAwZGFjM2FhZjhjNjdiZmRhYTEwZmUxYTFiNmJkZDJkNzc1OTQy
YjI0Li41YjkyMjVlMmU0MjQ2M2JiNGJiMmU0ZDA1ZWNjMjYyZTcyZjIxYjk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVz
dC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIK
IAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFk
UHJveHkuaCIgLy8gRm9yIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZAogI2luY2x1ZGUgImNjL0ND
VGV4dHVyZVVwZGF0ZXIuaCIKQEAgLTM2LDYgKzM3LDEyIEBACiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwg
YikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VRKGEueSgp
LCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCisgICAg
RVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCiBuYW1lc3BhY2UgewogCiBjbGFz
cyBGYWtlVGV4dHVyZUFsbG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKQEAgLTY3
LDE3ICs3NCwyMCBAQCBwdWJsaWM6CiAgICAgaW50IHByZXBhcmVDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlcGFyZUNvdW50OyB9CiAgICAgdm9pZCBjbGVhclByZXBhcmVDb3VudCgpIHsgbV9w
cmVwYXJlQ291bnQgPSAwOyB9CiAKKyAgICB2b2lkIHNldE9wYXF1ZVBhaW50UmVjdChjb25zdCBJ
bnRSZWN0JiBvcGFxdWVQYWludFJlY3QpIHsgbV9vcGFxdWVQYWludFJlY3QgPSBvcGFxdWVQYWlu
dFJlY3Q7IH0KKwogICAgIC8vIExhc3QgcmVjdCBwYXNzZWQgdG8gcHJlcGFyZVRvVXBkYXRlKCku
CiAgICAgY29uc3QgSW50UmVjdCYgbGFzdFVwZGF0ZVJlY3QoKSAgY29uc3QgeyByZXR1cm4gbV9s
YXN0VXBkYXRlUmVjdDsgfQogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdl
cikpKTsgfQogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1h
dChHQzNEZW51bSkgeyByZXR1cm4gU2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQotICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IEludFNpemUmLCBpbnQsIGZsb2F0LCBJbnRSZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIHByZXBh
cmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGlu
dCwgZmxvYXQsIEludFJlY3QqIHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogCiBwcml2YXRlOgogICAg
IGludCBtX3ByZXBhcmVDb3VudDsKICAgICBJbnRSZWN0IG1fcmVjdFRvSW52YWxpZGF0ZTsKICAg
ICBJbnRSZWN0IG1fbGFzdFVwZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX29wYXF1ZVBhaW50UmVj
dDsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKIH07CiAKQEAg
LTE1OCw3ICsxNjgsNyBAQCB2b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9V
cGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0CiAgICAgICAgIG1fcmVjdFRv
SW52YWxpZGF0ZSA9IEludFJlY3QoKTsKICAgICAgICAgbV9sYXllciA9IDA7CiAgICAgfQotICAg
ICpyZXN1bHRpbmdPcGFxdWVSZWN0ID0gSW50UmVjdCgpOworICAgICpyZXN1bHRpbmdPcGFxdWVS
ZWN0ID0gbV9vcGFxdWVQYWludFJlY3Q7CiB9CiAKIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcHVzaERpcnR5VGlsZXMpCkBAIC0zMzksNCArMzQ5LDEwMCBAQCBURVNUKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIGludmFsaWRhdGVGcm9tUHJlcGFyZSkKICAgICBFWFBFQ1RfRVEoMSwgbGF5
ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVDb3VudCgpKTsKIH0KIAorVEVT
VChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbikK
K3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIFJlZlB0
cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRM
YXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisKKyAgICBGYWtlVGV4dHVyZUFs
bG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigm
dGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNv
IHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcyBpbiB2YXJpb3VzIHdh
eXMuCisKKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgSW50UmVjdCBjb250ZW50Qm91bmRzID0g
SW50UmVjdCgwLCAwLCAxMDAsIDIwMCk7CisgICAgSW50UmVjdCB2aXNpYmxlQm91bmRzID0gSW50
UmVjdCgwLCAwLCAxMDAsIDE1MCk7CisKKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3Vu
ZHMuc2l6ZSgpKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlQm91bmRz
KTsKKyAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CisKKyAgICAvLyBUaGUgZHJhd1RyYW5z
Zm9ybSBpcyB2ZXJpZmllZCBpbiBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0cworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07CisgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xh
dGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8g
Mi4wKTsKKyAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKworICAg
IC8vIElmIHRoZSBsYXllciBpcyBvcGFxdWUgdGhlbiB0aGUgb2NjbHVkZWQgcmVnaW9uIHNob3Vs
ZCBiZSB0aGUgd2hvbGUgbGF5ZXIncyB2aXNpYmxlIHJlZ2lvbi4KKyAgICBsYXllci0+c2V0T3Bh
cXVlKHRydWUpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91bmRzKTsKKyAg
ICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQg
PSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24ob2NjbHVkZWQp
OworICAgIEVYUEVDVF9FUV9SRUNUKHZpc2libGVCb3VuZHMsIG9jY2x1ZGVkLmJvdW5kcygpKTsK
KyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElm
IHRoZSBsYXllciBpcyBub3Qgb3BhcXVlIHRoZW4gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQg
YmUgZW1wdHkuCisgICAgbGF5ZXItPnNldE9wYXF1ZShmYWxzZSk7CisgICAgbGF5ZXItPmludmFs
aWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29u
dGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRT
ZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0
cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgcGFpbnRzIG9wYXF1ZSBjb250ZW50
LCB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIG1hdGNoIHRoZSB2aXNpYmxlIG9wYXF1
ZSBjb250ZW50LgorICAgIEludFJlY3Qgb3BhcXVlUGFpbnRSZWN0ID0gSW50UmVjdCgxMCwgMTAs
IDkwLCAxOTApOworICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFx
dWVQYWludFJlY3Qob3BhcXVlUGFpbnRSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3Qo
Y29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRz
KTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1
ZGVkUmVnaW9uKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24ob3Bh
cXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVY
UEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gSWYgd2UgcGFp
bnQgYWdhaW4gd2l0aG91dCBpbnZhbGlkYXRpbmcsIHRoZSBzYW1lIHN0dWZmIHNob3VsZCBiZSBv
Y2NsdWRlZC4KKyAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVl
UGFpbnRSZWN0KEludFJlY3QoKSk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50
Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZU
b09jY2x1ZGVkUmVnaW9uKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rp
b24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSwgb2NjbHVkZWQuYm91bmRzKCkpOwor
ICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gSWYg
dGhlIGxheWVyIGlzIHRyYW5zZm9ybWVkIHRoZW4gdGhlIHJlc3VsdGluZyBvY2NsdWRlZCBhcmVh
IG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIGl0cyB0YXJnZXQgc3BhY2UuCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVu
dEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAg
ICB0cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50
Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAxMCk7CisgICAgZHJhd1RyYW5zZm9ybSA9IHRyYW5z
Zm9ybTsKKyAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkg
LyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGxheWVyLT5zZXREcmF3
VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29u
dGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRT
ZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QodHJhbnNm
b3JtLm1hcFJlY3QoaW50ZXJzZWN0aW9uKG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcykp
LCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygp
LnNpemUoKSk7CisKKyAgICAvLyBCdXQgYSBub24tYXhpcy1hbGlnbmVkIHRyYW5zZm9ybSBkb2Vz
IG5vdCBnZXQgY29uc2lkZXJlZCBmb3Igb2NjbHVzaW9uLgorICAgIHRyYW5zZm9ybS50cmFuc2xh
dGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8g
Mi4wKTsKKyAgICB0cmFuc2Zvcm0ucm90YXRlKDUpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
LWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAy
LjApOworICAgIGRyYXdUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisgICAgZHJhd1RyYW5zZm9ybS50
cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdo
dCgpIC8gMi4wKTsKKyAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsK
KyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVk
ZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24ob2NjbHVk
ZWQpOworICAgIC8vIEZJWE1FOiBJZiB3ZSBmaW5kIGFuIG9wYXF1ZSByZWN0IGNvbnRhaW5lZCBp
biB0aGUgcm90YXRlZCBub24tYXhpcy1hbGlnbmVkIHJlY3QsIHRoZW4KKyAgICAvLyB0aGlzIHdv
bid0IGJlIGFuIGVtcHR5IHJlc3VsdC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIG9j
Y2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6
ZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124209</attachid>
            <date>2012-01-26 16:22:57 -0800</date>
            <delta_ts>2012-01-27 13:48:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120126192256.patch</filename>
            <type>text/plain</type>
            <size>34998</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRmZDZjMmE2YmMyNjEx
MTdiMzk1MDcwNmE3M2E2MTU2MjhjMDQyNC4uOTEwNzhiOWFhNmU5OTVkZDY3ZDVhODY3NTU4ZTEx
ZjI4OTAyNzVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAxLTI2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAgYW5kIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5j
bG9zZWRJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpjb250ZW50VG9UYXJnZXRTcGFjZVRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZUb09j
Y2x1ZGVkUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlzUGFpbnRl
ZEF4aXNBbGlnbmVkSW5UYXJnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1
bTo6YWRkTGF5ZXJUb09jY2x1ZGVkUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpjbGVhck9jY2x1ZGVkUmVnaW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmNsZWFyUGFpbnRPY2NsdWRlZFJlZ2lvbnMpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250
ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcDoKKwogMjAxMi0wMS0y
MCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21p
dW1dIFVzZSByZWdpb24gcmVwb3J0ZWQgcGFpbnRlZCBvcGFxdWUgZm9yIGRyYXcgY3VsbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5MmQxMjQzZThmN2UzN2UyNDVlMTUwZjc3OTNk
MmMxYzExOWU3NjRlLi4wOTI2YWM5N2E3YTkzMzMxYTNlMWViZjFmYmQzMTk4YTcxZDk4NjBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAxLTI2ICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q29tcHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6
OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAo
RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV1RGOjpGYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdURjo6VEVTVCk6CisgICAgICAg
IChXVEYpOgorCiAyMDEyLTAxLTIwICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtjaHJvbWl1bV0gVXNlIHJlZ2lvbiByZXBvcnRlZCBwYWludGVkIG9wYXF1
ZSBmb3IgZHJhdyBjdWxsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0LmNwcAppbmRleCA0NmZjYTZjMjdlOWU5M2U2Mzk0NjgyNzVmMzc1OTU5NGY1Yzky
Yjc3Li41OTVhZjJhMzIzYTNlZTVhYTQ4ZjY4MDg1YjY2NjZhN2Q5ZDQ5NGY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAgLTIxOCw2ICsy
MTgsMTkgQEAgSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICAgICAgICAgICAgICAgICBjbGFtcFRvSW50ZWdlcih3aWR0aCksIGNsYW1wVG9JbnRlZ2Vy
KGhlaWdodCkpOwogfQogCitJbnRSZWN0IGVuY2xvc2VkSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgaW50IHggPSBjbGFtcFRvSW50ZWdlcihjZWlsZihyZWN0LngoKSkpOwor
ICAgIGludCB5ID0gY2xhbXBUb0ludGVnZXIoY2VpbGYocmVjdC55KCkpKTsKKyAgICBmbG9hdCBt
YXhYID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHJlY3QubWF4WCgpKSk7CisgICAgZmxvYXQgbWF4
WSA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZihyZWN0Lm1heFkoKSkpOworICAgIC8vIEEgcmVjdCBv
ZiB3aWR0aCAwIHNob3VsZCBub3QgYmVjb21lIGEgcmVjdCBvZiB3aWR0aCAtMSBkdWUgdG8gY2Vp
bC9mbG9vci4KKyAgICBpbnQgd2lkdGggPSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WCAtIHgpLCAw
KTsKKyAgICBpbnQgaGVpZ2h0ID0gbWF4KGNsYW1wVG9JbnRlZ2VyKG1heFkgLSB5KSwgMCk7CisK
KyAgICByZXR1cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwogRmxvYXRSZWN0
IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKHNyY1JlY3Qud2lkdGgoKSA9PSAw
IHx8IHNyY1JlY3QuaGVpZ2h0KCkgPT0gMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggMTQwOTA3MWIxMTk4ODNkM2IwODYyNzBhYTRjZjc4ODRm
NGZiYTYyYy4uMjJjMTcxYzVhYjRkMTg4OTYwZTgyZmU3YmUwMjE4ZTQxY2Y4YTVmOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTI3MCw2ICsy
NzAsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0UmVjdCYgYSwgY29uc3Qg
RmxvYXRSZWN0JiBiKQogCiBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CiAKKy8vIFJldHVybnMgYSB2YWxpZCBJbnRSZWN0IGNvbnRhaW5lZCB3aXRoaW4gdGhlIGdp
dmVuIEZsb2F0UmVjdC4KK0ludFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OworCiAvLyBNYXAgcmVjdCByIGZyb20gc3JjUmVjdCB0byBhbiBlcXVpdmFsZW50IHJlY3QgaW4g
ZGVzdFJlY3QuCiBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggNGM2M2RmZDdkMjY4Mjg3YjVmODVhNzdiYzQwNDI1ZjA2MGE4YTU4
Mi4uNTU0Y2UzNjE0ZjFlNjgzYWJjMGMxMjRlN2UyNjg4Zjk2YWI4ZjYyMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJS
ZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJUZXh0
U3RyZWFtLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCkBAIC00ODEs
NiArNDgyLDM4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBj
b250ZW50c1NjYWxlKQogICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCitUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBMYXllckNocm9taXVtOjpjb250ZW50VG9UYXJnZXRTcGFjZVRyYW5zZm9ybSgpIGNv
bnN0Cit7CisgICAgSW50U2l6ZSBib3VuZHNJbkxheWVyU3BhY2UgPSBib3VuZHMoKTsKKyAgICBJ
bnRTaXplIGJvdW5kc0luQ29udGVudFNwYWNlID0gY29udGVudEJvdW5kcygpOworCisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOworCisgICAgLy8g
U2NhbGUgZnJvbSBjb250ZW50IHNwYWNlIHRvIGxheWVyIHNwYWNlCisgICAgdHJhbnNmb3JtLnNj
YWxlTm9uVW5pZm9ybShib3VuZHNJbkxheWVyU3BhY2Uud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3VuZHNJbkxheWVyU3BhY2UuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpKSk7CisKKyAgICAvLyBNb3ZlIHRoZSBv
cmlnaW4gdG8gdGhlIGNlbnRlcgorICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWJvdW5kc0luQ29u
dGVudFNwYWNlLndpZHRoKCkgLyAyLjAsIC1ib3VuZHNJbkNvbnRlbnRTcGFjZS5oZWlnaHQoKSAv
IDIuMCk7CisKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCit2b2lkIExheWVyQ2hyb21pdW06
OmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKFJlZ2lvbiYgb2NjbHVkZWRUYXJnZXRTcGFjZSkKK3sK
KyAgICBpZiAoIW9wYXF1ZSgpIHx8IGRyYXdPcGFjaXR5KCkgIT0gMSB8fCAhaXNQYWludGVkQXhp
c0FsaWduZWRJblRhcmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgdGFy
Z2V0UmVjdCA9IGNvbnRlbnRUb1RhcmdldFNwYWNlVHJhbnNmb3JtKCkubWFwUmVjdChGbG9hdFJl
Y3QodmlzaWJsZUxheWVyUmVjdCgpKSk7CisgICAgb2NjbHVkZWRUYXJnZXRTcGFjZS51bml0ZShl
bmNsb3NlZEludFJlY3QodGFyZ2V0UmVjdCkpOworfQorCitib29sIExheWVyQ2hyb21pdW06Omlz
UGFpbnRlZEF4aXNBbGlnbmVkSW5UYXJnZXQoKSBjb25zdAoreworICAgIEZsb2F0UXVhZCBxdWFk
ID0gY29udGVudFRvVGFyZ2V0U3BhY2VUcmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZCh2aXNp
YmxlTGF5ZXJSZWN0KCkpKTsKKyAgICByZXR1cm4gcXVhZC5pc1JlY3RpbGluZWFyKCk7Cit9CisK
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCiB7CiAgICAgQVNTRVJU
KCFtX3JlbmRlclN1cmZhY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGM1Zjg4ZjEzMjZlOGQy
MjdhNTExNzAwN2FkMGVlMmM0OTNmNjIyODUuLmE5ZWE2MDZmNTU5OGY3ODA3YmYyM2MxNTRiYmJh
MDUwZjk0Y2RjOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTU1LDYgKzU1LDcgQEAgY2xhc3Mg
Q0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRh
dGVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBSZWdpb247CiAKIC8vIEJhc2Ug
Y2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJp
dmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCkBAIC0xOTEsNiArMTkyLDEyIEBAIHB1YmxpYzoKICAg
ICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1NjYWxlOyB9
CiAgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKIAorICAgIC8vIFRyYW5zZm9ybXMg
ZnJvbSB0aGUgY29udGVudCBzcGFjZSBvZiB0aGUgbGF5ZXIgdG8gdGhlIGNvbnRlbnQgc3BhY2Ug
b2YgdGhlIHRhcmdldCBSZW5kZXJTdXJmYWNlLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNv
bnRlbnRUb1RhcmdldFNwYWNlVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICAvLyBBZGRzIGFueSBv
cGFxdWUgdmlzaWJsZSBwaXhlbHMgdG8gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBpbiB0aGUgY29vcmRp
bmF0ZSBzcGFjZSBvZiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgdmlydHVhbCB2b2lkIGFkZFNl
bGZUb09jY2x1ZGVkUmVnaW9uKFJlZ2lvbiYgb2NjbHVkZWRUYXJnZXRTcGFjZSk7CisKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250
ZW50IHRvIGRyYXcuCiAgICAgYm9vbCBkZXNjZW5kYW50RHJhd3NDb250ZW50KCk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCkgeyB9CkBAIC0yMDYsNiArMjEzLDggQEAgcHJvdGVj
dGVkOgogICAgIC8vIGhvbGQgY29udGV4dC1kZXBlbmRlbnQgcmVzb3VyY2VzIHN1Y2ggYXMgdGV4
dHVyZXMuCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKIAorICAgIGJvb2wg
aXNQYWludGVkQXhpc0FsaWduZWRJblRhcmdldCgpIGNvbnN0OworCiAgICAgdm9pZCBzZXROZWVk
c0NvbW1pdCgpOwogCiAgICAgLy8gVGhpcyBmbGFnIGlzIHNldCB3aGVuIGxheWVyIG5lZWQgcmVw
YWludGluZy91cGRhdGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCmlu
ZGV4IDczZjNhYjI3YTlhNTkxYzJlNjBiNWQ1ZTI3ZTliYTIxOGRmMWYzMTYuLmJhNjk3Y2E5MjE2
NDE3NTkyNTQ3MzMzODg0NWNiMjgwMDBkMzQ2NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmNwcApAQCAtNTksNSArNTksMTUgQEAgRmxvYXRSZWN0IFJlbmRlclN1cmZhY2VD
aHJvbWl1bTo6ZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIGRyYXdhYmxl
Q29udGVudFJlY3Q7CiB9CiAKK3ZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjphZGRMYXllclRv
T2NjbHVkZWRSZWdpb24oTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgbGF5ZXItPmFkZFNl
bGZUb09jY2x1ZGVkUmVnaW9uKG1fb2NjbHVkZWRJbk93blN1cmZhY2VTcGFjZSk7Cit9CisKK3Zv
aWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpjbGVhck9jY2x1ZGVkUmVnaW9uKCkKK3sKKyAgICBt
X29jY2x1ZGVkSW5Pd25TdXJmYWNlU3BhY2UgPSBSZWdpb24oKTsKK30KKwogfQogI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmgKaW5kZXggNGUxODIyYjMxOGM1ZTFkMjU3YTkwOGU0MmE0ZGMyODg0NmI1YjJhNi4uYTA2
NmU2MzkxYWQ4Mzg5ODg1ZDEyMTIzMGJiYzFlYThmNjIzOTI2NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVy
U3VyZmFjZUNocm9taXVtLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAg
LTgzLDYgKzg0LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoTGF5ZXJDaHJv
bWl1bSogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVyOyB9CiAKKyAgICB2b2lk
IGFkZExheWVyVG9PY2NsdWRlZFJlZ2lvbihMYXllckNocm9taXVtKik7CisgICAgdm9pZCBjbGVh
ck9jY2x1ZGVkUmVnaW9uKCk7CisKIHByaXZhdGU6CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9vd25p
bmdMYXllcjsKICAgICBMYXllckNocm9taXVtKiBtX21hc2tMYXllcjsKQEAgLTk2LDYgKzEwMCw3
IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07
CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiBtX2xheWVyTGlzdDsKKyAgICBSZWdpb24gbV9vY2NsdWRlZEluT3duU3VyZmFjZVNwYWNl
OwogCiAgICAgLy8gRm9yIENDTGF5ZXJJdGVyYXRvckFjdGlvbnMKICAgICBpbnQgbV90YXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcAppbmRleCBkZGVkNTU0YjMyMTE5M2I0MWNmODg0OTc1MjMzOWNjMGFlOWEwMjRjLi5kZmRm
NTNkYmRjYWIzZjBlYmJmZDJmM2ViZmNjZGJmMzNhMjc1NGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2Miw2ICs0NjIsMzkgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKGJvb2wgaWRsZSwgaW50IGxlZnQsIGludCB0b3AsIGlu
dAogICAgIH0KIH0KIAordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVk
UmVnaW9uKFJlZ2lvbiYgb2NjbHVkZWRUYXJnZXRTcGFjZSkKK3sKKyAgICBpZiAobV9za2lwc0Ry
YXcgfHwgZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFpc1BhaW50ZWRBeGlzQWxpZ25lZEluVGFyZ2V0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChvcGFxdWUoKSkgeworICAgICAgICBMYXll
ckNocm9taXVtOjphZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2NsdWRlZFRhcmdldFNwYWNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFVzZSBhIFJlZ2lvbiB0byBtZXJnZSB0
aWxlcyB0b2dldGhlciBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZW0gdG8gYXZvaWQgZ2FwcyBiZXR3
ZWVuIHRoZSB0aWxlcyBpbiBzY3JlZW4gc3BhY2UgZnJvbSB1c2luZyBJbnRSZWN0cworICAgIC8v
IGNvbnRhaW5lZCB3aXRoaW4gZWFjaCB0aWxlJ3Mgc2NyZWVuLXNwYWNlIG9wYXF1ZSByZWN0Lgor
ICAgIC8vIEZJWE1FOiBDcmVhdGUvVXNlIGEgRmxvYXRSZWdpb24gZm9yIHRoZSBvY2NsdWRlZFRh
cmdldFNwYWNlLCBpbnN0ZWFkIG9mIGEgUmVnaW9uIGJhc2VkIG9uIGludHMsIHRvIGF2b2lkIHRo
aXMgc3RlcCBhbmQgZ2V0IGJldHRlciBhY2N1cmFjeSBiZXR3ZWVuIGxheWVycyBpbiB0YXJnZXQg
c3BhY2UuCisgICAgUmVnaW9uIHRpbGVSZWdpb247CisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbTsKKyAgICBtX3RpbGVyLT5sYXllclJlY3RUb1RpbGVJbmRpY2VzKHZpc2libGVMYXll
clJlY3QoKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9w
OyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJp
Z2h0OyArK2kpIHsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwg
aik7CisgICAgICAgICAgICBpZiAodGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlUmVnaW9uLnVu
aXRlKHRpbGUtPm1fb3BhcXVlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVjdG9yPElu
dFJlY3Q+IHRpbGVSZWN0cyA9IHRpbGVSZWdpb24ucmVjdHMoKTsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGNvbnRlbnRUb1RhcmdldFNwYWNlID0gY29udGVudFRvVGFyZ2V0U3BhY2VUcmFu
c2Zvcm0oKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOwor
ICAgIGZvciAoVmVjdG9yPEludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdGlsZVJlY3Rz
LmJlZ2luKCk7IGl0ZXIgIT0gdGlsZVJlY3RzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgSW50
UmVjdCB2aXNpYmxlVGlsZU9wYXF1ZVJlY3QgPSBpbnRlcnNlY3Rpb24odmlzaWJsZVJlY3QsICpp
dGVyKTsKKyAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBjb250ZW50VG9UYXJnZXRTcGFj
ZS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlVGlsZU9wYXF1ZVJlY3QpKTsKKyAgICAgICAgb2Nj
bHVkZWRUYXJnZXRTcGFjZS51bml0ZShlbmNsb3NlZEludFJlY3QodGFyZ2V0UmVjdCkpOworICAg
IH0KK30KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDFm
OWY2OTU5MzQ2Mjc1NDNhODUwOTYyOTY3ZjYzOTYyZDM3ZGZjODUuLmJlNDAyODhjZDZkMDMxMzE5
OTJiMDRmNmJkMjVjOGFmNWVhNzFlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBA
IC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGV4dHVy
ZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiBjbGFzcyBVcGRhdGFibGVUaWxlOwogCiBjbGFzcyBU
aWxlZExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC02MSw2ICs2Miw4
IEBAIHB1YmxpYzoKICAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgogICAg
IHZvaWQgcHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpOwogCisg
ICAgdmlydHVhbCB2b2lkIGFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKFJlZ2lvbiYgb2NjbHVkZWRU
YXJnZXRTcGFjZSk7CisKIHByb3RlY3RlZDoKICAgICBUaWxlZExheWVyQ2hyb21pdW0oKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggYTJmYjgyMmM1NmJkYjM1ZmNjZDNi
OTlhNGQxNGRlZWE4ZDkxMzI4Yi4uZDI1Y2IzMGU1ZDBmMGVlODE4M2ExMDNhNTVkZTAzYzNiZWQx
N2QzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVn
aW9uLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKQEAgLTQzNCwxOSArNDM1LDM4
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3Vy
ZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAgICAgfQogfQogCit2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6Y2xlYXJQYWludE9jY2x1ZGVkUmVnaW9ucyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpCit7CisgICAgLy8gVXNlIEJhY2tUb0Zyb250IHNpbmNlIGl0IGlzIGNo
ZWFwIGFuZCBvcmRlciBkb2VzIG5vdCBtYXR0ZXIuCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0
b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJ
dGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRl
cmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBpZiAoaXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkKKyAg
ICAgICAgICAgIGl0LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNsZWFyT2NjbHVkZWRSZWdpb24o
KTsKKyAgICB9Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMo
Y29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRU
eXBlKQogewogICAgIC8vIFVzZSBGcm9udFRvQmFjayB0byBhbGxvdyBmb3IgdGVzdGluZyBvY2Ns
dXNpb24gYW5kIHBlcmZvcm1pbmcgY3VsbGluZyBkdXJpbmcgdGhlIHRyZWUgd2Fsay4KICAgICB0
eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JU
eXBlOwogCisgICAgY2xlYXJQYWludE9jY2x1ZGVkUmVnaW9ucyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKKwogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlw
ZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBmb3IgKENDTGF5ZXJJdGVyYXRv
clR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQucmVwcmVzZW50c1Rhcmdl
dFJlbmRlclN1cmZhY2UoKSkgewogICAgICAgICAgICAgQVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNl
KCktPmRyYXdPcGFjaXR5KCkpOworCisgICAgICAgICAgICAvLyBGSVhNRTogTWFzayBhbmQgcmVw
bGljYSBsYXllcnMgYXJlIG5vdCBvY2NsdWRlZCBieSBsYXllcnMgaW4gdGhlIGN1cnJlbnQgc3Vy
ZmFjZSwgYnV0IGNhbiBiZSBvY2NsdWRlZCBieSBvdGhlciBzdXJmYWNlcy4KICAgICAgICAgICAg
IHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKCppdCwgcGFpbnRUeXBlKTsKICAg
ICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpIHsKICAgICAgICAgICAgIEFT
U0VSVCghaXQtPmJvdW5kcygpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBwYWludENvbnRlbnRz
SWZEaXJ0eSgqaXQsIHBhaW50VHlwZSk7CisKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgbGF5ZXIn
cyBvY2NsdXNpb24gdG8gdGhlIHJlZ2lvbiBmb3IgdGhlIG5leHQgbGF5ZXIgdG8gYmUgYWJsZSB0
byB1c2UgZm9yIGN1bGxpbmcuCisgICAgICAgICAgICBpdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
LT5hZGRMYXllclRvT2NjbHVkZWRSZWdpb24oKml0KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZDkyYWRjMTY2YWU2N2UzYWYwNTQyOTUxMGM5
N2QzZmUzNjgzNTA5Zi4uZjdjNDgzYzQyYWI1Y2FhM2RiYTYwMmYwYTBkMWQzOTc1MWY4MDVhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgQ0NM
YXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKIGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgUmVnaW9uOwog
Y2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogCkBAIC0yMDgs
NiArMjA5LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0
eShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50
cyhjb25zdCBMYXllckxpc3QmLCBQYWludFR5cGUpOwogICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVw
bGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgdm9p
ZCBjbGVhclBhaW50T2NjbHVkZWRSZWdpb25zKGNvbnN0IExheWVyTGlzdCYpOwogCiAgICAgdm9p
ZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgY2xlYXJQZW5kaW5nVXBk
YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcAppbmRleCA3NzEwMDMyZTA1YzZhZmFhNDMx
NzlkOWE3OTI5YTA4MWYzZTBmYjBlLi45OWZlYjIxNzBkZmU5ODM4N2I5ZGM4ODIxMmUwN2RhOTc0
ZDI5ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKQEAgLTYyLDE4ICs2Miw2IEBAIHN0
YXRpYyBib29sIHJlZ2lvbkNvbnRhaW5zUmVjdChjb25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKICAgICByZXR1cm4gcmVjdFJlZ2lvbi5pc0VtcHR5KCk7CiB9CiAKLXN0
YXRpYyBJbnRSZWN0IGVuY2xvc2VkSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgZmxvYXQgeCA9IGNlaWxmKHJlY3QueCgpKTsKLSAgICBmbG9hdCB5ID0gY2VpbGYocmVjdC55
KCkpOwotICAgIC8vIEEgcmVjdCBvZiB3aWR0aCAwIHNob3VsZCBub3QgYmVjb21lIGEgcmVjdCBv
ZiB3aWR0aCAtMS4KLSAgICBmbG9hdCB3aWR0aCA9IG1heDxmbG9hdD4oZmxvb3JmKHJlY3QubWF4
WCgpKSAtIHgsIDApOwotICAgIGZsb2F0IGhlaWdodCA9IG1heDxmbG9hdD4oZmxvb3JmKHJlY3Qu
bWF4WSgpKSAtIHksIDApOwotCi0gICAgcmV0dXJuIEludFJlY3QoY2xhbXBUb0ludGVnZXIoeCks
IGNsYW1wVG9JbnRlZ2VyKHkpLAotICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdp
ZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Ci19Ci0KIHZvaWQgQ0NRdWFkQ3VsbGVyOjpj
dWxsT2NjbHVkZWRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCkKIHsKICAgICBpZiAoIXF1YWRM
aXN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGQyZTFjZmVmOTNlMjgyMTY2ZGE4
NTEyNTZjOTVjMGU2NTEyYzY5YmEuLjQ4NmEzZWIxMGQ0NDhiN2RjYjllYWY0ZjIxNzhiMTU5Zjhj
MjNlZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAK
ICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgpAQCAtMzUsNiArMzYsMTIgQEAKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVY
UEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwK
KyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEu
aGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCiBuYW1lc3BhY2UgewogCiB2b2lkIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXll
clRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQpAQCAtNTk1
LDQgKzYwMiwxNzQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlw
UmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAvLyAgLSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnMg
aW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uCiAvLwogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uKQoreworICAgIC8vIFRoaXMgdGVz
dHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24g
b2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7
CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGls
ZChsYXllcik7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9h
dFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwg
NTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlz
ICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3
ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJv
dW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVu
ZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsK
KyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24ob2NjbHVkZWQpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2NsdWRlZC5ib3VuZHMoKSk7Cisg
ICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Cit9CisKK1RFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdpb25XaXRo
Um90YXRpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1z
IGFyZSBiZWluZyB1c2VkLgorICAgIFJlZ2lvbiBvY2NsdWRlZDsKKyAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgy
NTAsIDI1MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBsYXllclRyYW5z
Zm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwg
MzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0
cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVy
TGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1F
OiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4g
Q0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2Nj
bHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24ob2Nj
bHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2Ns
dWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUo
KSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRv
T2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0
IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFJlZ2lvbiBvY2NsdWRl
ZDsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBw
YXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVy
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVy
VHJhbnNmb3JtLnRyYW5zbGF0ZSgyMCwgMjApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRy
YW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAs
IDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGxheWVyLT5zZXRPcGFxdWUo
dHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXll
ckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhN
RTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGlu
IENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAg
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9j
Y2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKG9j
Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2Nj
bHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXpl
KCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZU
b09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQoreworICAgIC8vIFRoaXMgdGVzdHMg
dGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2Nj
bHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7
CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGls
ZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgy
NTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwg
MzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFs
c2UpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgbGF5ZXItPnNl
dE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAg
IC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVo
YXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRv
by4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRS
ZWdpb24ob2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwgNjAs
IDcwKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVj
dHMoKS5zaXplKCkpOworCisgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9wYXF1
ZSByZWN0IGZyb20gfGxheWVyfDoKKyAgICAgICAgICAgICAgIDEwMAorICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwzMCAg
VmlzaWJsZSByZWdpb24gb2YgfGxheWVyfCBpbiB8Y2hpbGR8OiAvLy8vLworICAgICAgfCAgICAz
MCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHJvdGF0ZSg5MCkgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8IDMwICsgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSsKKyAgMTAwIHwgICAgfCAgMTAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgPT0+ICAgICB8ICAgICB8ICAgICAgICAgICAgICAgfDEwICAg
ICAgICAgICAgICAgfAorICAgICAgfCAgICB8MTArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKyAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0rICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgIDQyMCAgICAg
IHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfDYwICAgICAgICAgICAgfCAg
fAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98ICAgICAgICAgICAgICB8ICB8Cisg
ICAgICArLS0tLXwtLXwtLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgKy0tfC0tfC0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgIHwgIHwKKyAgICAg
ICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgMjB8MTB8ICAgICA3MCAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8NTAwICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfDEwfAorICAgICAgICAgICArLS18LS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS18LS0rCisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgNDkwICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMAorICAgICAqLworfQorCiB9IC8v
IG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxl
ZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGls
ZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggYjg1MGY4MjQxY2MwODAxNDEzOGUzODA4YzA2
MTRjYTYxMDRlNjMyMS4uZTEyYjNlODhiNGRmOTg5YmNhYWZmOTBkMGFkMTgzOTA4MGI4ZjhlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ0NMYXllclRyZWVU
ZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2lu
Y2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNs
dWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiIC8vIEZvciBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQKQEAgLTM5LDYgKzQwLDEyIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CiAKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVY
UEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwK
KyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEu
aGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCiBuYW1lc3BhY2UgewogCiBjbGFzcyBGYWtlVGV4dHVy
ZUFsbG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKQEAgLTcwLDE3ICs3NywyMCBA
QCBwdWJsaWM6CiAgICAgaW50IHByZXBhcmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlcGFy
ZUNvdW50OyB9CiAgICAgdm9pZCBjbGVhclByZXBhcmVDb3VudCgpIHsgbV9wcmVwYXJlQ291bnQg
PSAwOyB9CiAKKyAgICB2b2lkIHNldE9wYXF1ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBvcGFx
dWVQYWludFJlY3QpIHsgbV9vcGFxdWVQYWludFJlY3QgPSBvcGFxdWVQYWludFJlY3Q7IH0KKwog
ICAgIC8vIExhc3QgcmVjdCBwYXNzZWQgdG8gcHJlcGFyZVRvVXBkYXRlKCkuCiAgICAgY29uc3Qg
SW50UmVjdCYgbGFzdFVwZGF0ZVJlY3QoKSAgY29uc3QgeyByZXR1cm4gbV9sYXN0VXBkYXRlUmVj
dDsgfQogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsgfQogICAg
IHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSkg
eyByZXR1cm4gU2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmLCBp
bnQsIGZsb2F0LCBJbnRSZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGludCwgZmxvYXQsIElu
dFJlY3QqIHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogCiBwcml2YXRlOgogICAgIGludCBtX3ByZXBh
cmVDb3VudDsKICAgICBJbnRSZWN0IG1fcmVjdFRvSW52YWxpZGF0ZTsKICAgICBJbnRSZWN0IG1f
bGFzdFVwZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX29wYXF1ZVBhaW50UmVjdDsKICAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKIH07CiAKQEAgLTE4Nyw3ICsxOTcs
NyBAQCB2b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0CiAgICAgICAgIG1fcmVjdFRvSW52YWxpZGF0ZSA9
IEludFJlY3QoKTsKICAgICAgICAgbV9sYXllciA9IDA7CiAgICAgfQotICAgICpyZXN1bHRpbmdP
cGFxdWVSZWN0ID0gSW50UmVjdCgpOworICAgICpyZXN1bHRpbmdPcGFxdWVSZWN0ID0gbV9vcGFx
dWVQYWludFJlY3Q7CiB9CiAKIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5
VGlsZXMpCkBAIC00NjAsNCArNDcwLDk3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
c2tpcHNEcmF3R2V0c1Jlc2V0KQogICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24o
KTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBsYXllckFkZHNTZWxmVG9PY2Ns
dWRlZFJlZ2lvbikKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQp
OworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisKKyAgICAv
LyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4g
cGFpbnRzIHR3byB0aWxlcyBpbiB2YXJpb3VzIHdheXMuCisKKyAgICBSZWdpb24gb2NjbHVkZWQ7
CisgICAgSW50UmVjdCBjb250ZW50Qm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDIwMCk7Cisg
ICAgSW50UmVjdCB2aXNpYmxlQm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDE1MCk7CisKKyAg
ICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMuc2l6ZSgpKTsKKyAgICBsYXllci0+c2V0
VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlQm91bmRzKTsKKyAgICBsYXllci0+c2V0RHJhd09wYWNp
dHkoMSk7CisKKyAgICAvLyBUaGUgZHJhd1RyYW5zZm9ybSBpcyB2ZXJpZmllZCBpbiBDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0cworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zv
cm07CisgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8g
Mi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICBsYXllci0+c2V0RHJhd1Ry
YW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKworICAgIC8vIElmIHRoZSBsYXllciBpcyBvcGFxdWUg
dGhlbiB0aGUgb2NjbHVkZWQgcmVnaW9uIHNob3VsZCBiZSB0aGUgd2hvbGUgbGF5ZXIncyB2aXNp
YmxlIHJlZ2lvbi4KKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworICAgIGxheWVyLT5pbnZh
bGlkYXRlUmVjdChjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNv
bnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRk
U2VsZlRvT2NjbHVkZWRSZWdpb24ob2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKHZpc2li
bGVCb3VuZHMsIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVk
LnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElmIHRoZSBsYXllciBpcyBub3Qgb3BhcXVlIHRo
ZW4gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgYmUgZW1wdHkuCisgICAgbGF5ZXItPnNldE9w
YXF1ZShmYWxzZSk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMpOwor
ICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRl
ZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2NsdWRl
ZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdWRlZC5ib3VuZHMoKSk7Cisg
ICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB0
aGUgbGF5ZXIgcGFpbnRzIG9wYXF1ZSBjb250ZW50LCB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24g
c2hvdWxkIG1hdGNoIHRoZSB2aXNpYmxlIG9wYXF1ZSBjb250ZW50LgorICAgIEludFJlY3Qgb3Bh
cXVlUGFpbnRSZWN0ID0gSW50UmVjdCgxMCwgMTAsIDkwLCAxOTApOworICAgIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3Qob3BhcXVlUGFpbnRSZWN0
KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXIt
PnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9u
KCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKG9jY2x1ZGVkKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRz
KSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMo
KS5zaXplKCkpOworCisgICAgLy8gSWYgd2UgcGFpbnQgYWdhaW4gd2l0aG91dCBpbnZhbGlkYXRp
bmcsIHRoZSBzYW1lIHN0dWZmIHNob3VsZCBiZSBvY2NsdWRlZC4KKyAgICBsYXllci0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CisgICAg
bGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0g
UmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkUmVnaW9uKG9jY2x1ZGVkKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxl
Qm91bmRzKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQu
cmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gSWYgdGhlIGxheWVyIGlzIHRyYW5zZm9ybWVkIHRo
ZW4gdGhlIHJlc3VsdGluZyBvY2NsdWRlZCBhcmVhIG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIHRv
IGl0cyB0YXJnZXQgc3BhY2UuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwor
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250
ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICB0cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250
ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAx
MCk7CisgICAgZHJhd1RyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBkcmF3VHJhbnNmb3JtLnRy
YW5zbGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0
KCkgLyAyLjApOworICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOwor
ICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRl
ZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFJlZ2lvbihvY2NsdWRl
ZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QodHJhbnNmb3JtLm1hcFJlY3QoaW50ZXJzZWN0aW9uKG9w
YXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcykpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAg
RVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBCdXQgYSBu
b24tYXhpcy1hbGlnbmVkIHRyYW5zZm9ybSBkb2VzIG5vdCBnZXQgY29uc2lkZXJlZCBmb3Igb2Nj
bHVzaW9uLgorICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8g
Mi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICB0cmFuc2Zvcm0ucm90YXRl
KDUpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIu
MCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGRyYXdUcmFuc2Zvcm0gPSB0
cmFuc2Zvcm07CisgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0
aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICBsYXllci0+c2V0
RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRl
KGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+
YWRkU2VsZlRvT2NjbHVkZWRSZWdpb24ob2NjbHVkZWQpOworICAgIC8vIEZJWE1FOiBJZiB3ZSBm
aW5kIGFuIG9wYXF1ZSByZWN0IGNvbnRhaW5lZCBpbiB0aGUgcm90YXRlZCBub24tYXhpcy1hbGln
bmVkIHJlY3QsIHRoZW4KKyAgICAvLyB0aGlzIHdvbid0IGJlIGFuIGVtcHR5IHJlc3VsdC4KKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMHUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124361</attachid>
            <date>2012-01-27 13:48:41 -0800</date>
            <delta_ts>2012-01-27 14:55:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120127164839.patch</filename>
            <type>text/plain</type>
            <size>58608</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRmZDZjMmE2YmMyNjEx
MTdiMzk1MDcwNmE3M2E2MTU2MjhjMDQyNC4uMzJiNDAwYWM5NThjMTY5ZDY1YmYwNmE5NzY0MDQ2
YTMxNDM1ZDBmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTI3ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAsIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwLCBDQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2VkSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKEltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
aXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2Nj
bHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6cG9wQW5kUHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6CisKIDIwMTIt
MDEtMjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVlIGZvciBkcmF3IGN1bGxp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTJkMTI0M2U4ZjdlMzdlMjQ1ZTE1MGY3
NzkzZDJjMWMxMTllNzY0ZS4uOThhZmJjYjkyYWQ1YzFjZTliMDMwOWZjMTE2ZmFlOTliNWIxNjJl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wMS0y
NyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENvbXB1dGUgb2NjbHVzaW9uIGR1cmluZyBwYWludCBsb29wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg1OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RG
OjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cGFpbnRDb250ZW50c0lm
RGlydHkpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFRlc3RMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdURjo6VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRl
c3RMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OlRl
c3RMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJD
aHJvbWl1bTo6b2NjbHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNo
cm9taXVtOjpjbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV1RGOjpUZXN0TGF5
ZXJDaHJvbWl1bTo6VGVzdExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV1RGOjpzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9j
Y2x1c2lvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lv
bjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb246OmFmdGVyVGVzdCk6CisgICAgICAg
ICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0OjpmdWxsTGlmZWN5Y2xlVGVzdCk6CisgICAgICAg
ICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VM
YXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAoRmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVt
OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVV
cGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV1RGOjpURVNUKToKKyAgICAgICAg
KFdURik6CisKIDIwMTItMDEtMjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVl
IGZvciBkcmF3IGN1bGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuY3BwCmluZGV4IDQ2ZmNhNmMyN2U5ZTkzZTYzOTQ2ODI3NWYzNzU5NTk0ZjVjOTJi
NzcuLjU5NWFmMmEzMjNhM2VlNWFhNDhmNjgwODViNjY2NmE3ZDlkNDk0ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE4LDYgKzIx
OCwxOSBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIo
aGVpZ2h0KSk7CiB9CiAKK0ludFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpbnQgeCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7Cisg
ICAgaW50IHkgPSBjbGFtcFRvSW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOworICAgIGZsb2F0IG1h
eFggPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYocmVjdC5tYXhYKCkpKTsKKyAgICBmbG9hdCBtYXhZ
ID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHJlY3QubWF4WSgpKSk7CisgICAgLy8gQSByZWN0IG9m
IHdpZHRoIDAgc2hvdWxkIG5vdCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWls
L2Zsb29yLgorICAgIGludCB3aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDAp
OworICAgIGludCBoZWlnaHQgPSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKKwor
ICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCiBGbG9hdFJlY3Qg
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAg
fHwgc3JjUmVjdC5oZWlnaHQoKSA9PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaAppbmRleCAxNDA5MDcxYjExOTg4M2QzYjA4NjI3MGFhNGNmNzg4NGY0
ZmJhNjJjLi4yMmMxNzFjNWFiNGQxODg5NjBlODJmZTdiZTAyMThlNDFjZjhhNWY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjcwLDYgKzI3
MCw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBG
bG9hdFJlY3QmIGIpCiAKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKIAorLy8gUmV0dXJucyBhIHZhbGlkIEludFJlY3QgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2
ZW4gRmxvYXRSZWN0LgorSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisKIC8vIE1hcCByZWN0IHIgZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBk
ZXN0UmVjdC4KIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTUwNWFkYWMyNDNlMDc2NjVkMmRkYWIy
OGY0NzAzZmY4ZWY1Yjk0My4uMDkwNTQ3NDE4NmVmYzJjNDBhN2FkYTQ1ODU5NWUwYmY4M2YzNjhj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC05MSw3ICs5MSw3
IEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogICAg
ICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0K
IAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3Zv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdp
b24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiB7CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAppbmRl
eCA4MzYxNWExZjIyMzU2MTY0NjJlYjFmOGQ0MTIyZTFhZDhlNThjOTIyLi4wODRjNjdkZDJjNDJi
Mjg1MDliZWVmMTEwZWYwNGRhODlhZWQ2NDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvbnRl
bnRDaGFuZ2VkKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRl
eHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcAppbmRleCA1MjlmY2UwMzY0YTgyODU1YWE0MDYzOTcxNTZlMGZiYjRlM2E5NTBlLi4zNDMw
MzExMGZhOWNhZmRmMjZjYTliY2ZlZDZlMjRjNGY0MDJmMmFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgQ29udGVudExheWVyQ2hy
b21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAgICAgcmV0dXJuIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6ZHJhd3NDb250ZW50KCkgJiYgbV9kZWxlZ2F0ZTsKIH0KIAotdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiAvKiBvY2NsdWRlZFNjcmVlblNw
YWNlICovKQogewogICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDQyNjY3OWNhZmFiYjczOTRjMDJlNzkwMWJl
MzMyZDdiY2I1ZTA4MWEuLjc5M2QwZjgzMTU5ZTJmYmE2MTQxODljNTllNjNmZGM2N2I5ZjFiNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTgsNyArNTgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjbGVhckRlbGVnYXRlKCkgeyBtX2RlbGVnYXRlID0gMDsgfQogCiAgICAg
dmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0
eShjb25zdCBSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwogICAgIHZpcnR1YWwgdm9pZCBp
ZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUo
Ym9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCAwMTU0ZmIyODMxNGYz
ZTZjOTI0MDQ3YmI0ODM2NzM2OTJkZmNmYWI3Li44MzFjYmU4MDk2M2EzYTgwMGI4YWE0NmE2OTk0
OGY0ZmM3ZjVlYzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE1OCw3
ICsxNTgsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNv
bnRlbnRzKQogICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lkIEltYWdlTGF5ZXJDaHJv
bWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3JlZW5TcGFjZSAq
LykKIHsKICAgICBpZiAobV9uZWVkc0Rpc3BsYXkpIHsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRl
ci0+dXBkYXRlRnJvbUltYWdlKG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCBkNzEyOTI0NTFjMzU1NWVhZjBj
MTZjZjlmMmMzZjM5NWJlMDc1MzA0Li5kNTM1N2M2NmJmZDZmYmMyMjc5NGQ4Y2E4MmI4NGQxY2Yx
NGI0MzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNTMsNyArNTMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+SW1hZ2VMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVu
dHNJZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0
IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSk7CiAgICAgdmlydHVhbCBib29sIG5lZWRzQ29u
dGVudHNTY2FsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA0YzYzZGZkN2QyNjgyODdiNWY4NWE3N2JjNDA0
MjVmMDYwYThhNTgyLi5jYzFkMGVjZjExZTZhZWE2OGIxYjhhY2I0NTdlNmJhYmMxYzhiYTIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5hdGl2
ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgor
I2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2lu
Y2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMu
aCIKQEAgLTQ4MSw2ICs0ODIsMzUgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRDb250ZW50c1Nj
YWxlKGZsb2F0IGNvbnRlbnRzU2NhbGUpCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4IExheWVyQ2hyb21pdW06OmNvbnRlbnRUb1NjcmVlblNwYWNlVHJh
bnNmb3JtKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGJvdW5kc0luTGF5ZXJTcGFjZSA9IGJvdW5k
cygpOworICAgIEludFNpemUgYm91bmRzSW5Db250ZW50U3BhY2UgPSBjb250ZW50Qm91bmRzKCk7
CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpOworCisgICAgLy8gU2NhbGUgZnJvbSBjb250ZW50IHNwYWNlIHRvIGxheWVyIHNwYWNl
CisgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHNJbkxheWVyU3BhY2Uud2lkdGgo
KSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHNJbkxheWVyU3BhY2UuaGVpZ2h0KCkg
LyBzdGF0aWNfY2FzdDxkb3VibGU+KGJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpKSk7CisK
KyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKQoreworICAg
IGlmICghb3BhcXVlKCkgfHwgZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFpc1BhaW50ZWRBeGlzQWxp
Z25lZEluU2NyZWVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRS
ZWN0ID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh2
aXNpYmxlTGF5ZXJSZWN0KCkpKTsKKyAgICBvY2NsdWRlZFNjcmVlblNwYWNlLnVuaXRlKGVuY2xv
c2VkSW50UmVjdCh0YXJnZXRSZWN0KSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aXNQYWlu
dGVkQXhpc0FsaWduZWRJblNjcmVlbigpIGNvbnN0Cit7CisgICAgRmxvYXRRdWFkIHF1YWQgPSBj
b250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKHZpc2libGVM
YXllclJlY3QoKSkpOworICAgIHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKTsKK30KKwogdm9p
ZCBMYXllckNocm9taXVtOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKIHsKICAgICBBU1NFUlQoIW1f
cmVuZGVyU3VyZmFjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYzVmODhmMTMyNmU4ZDIyN2E1
MTE3MDA3YWQwZWUyYzQ5M2Y2MjI4NS4uZDlmMDZiODBkY2ZhZGQwYzFmNGVkMTBlMmIxOWE2MWUz
M2I3MmJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBDQ0xh
eWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQmFzZSBjbGFz
cyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQg
ZnJvbQogLy8gdGhpcyBjbGFzcy4KQEAgLTE1Myw3ICsxNTQsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2
ZWQgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pc0RyYXdhYmxlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lv
biYgLyogb2NjbHVkZWRTY3JlZW5TcGFjZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGlkbGVQ
YWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCkgeyB9CkBAIC0xODIsOCArMTgzLDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7
IG1fY2xpcFJlY3QgPSBjbGlwUmVjdDsgfQogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFy
Z2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsg
fQogICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQorICAgIC8vIFRo
aXMgbW92ZXMgZnJvbSBsYXllciBzcGFjZSwgd2l0aCBvcmlnaW4gaW4gdGhlIGNlbnRlciB0byB0
YXJnZXQgc3BhY2Ugd2l0aCBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFu
c2Zvcm07IH0KICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkgeyBtX2RyYXdUcmFuc2Zvcm0gPSBtYXRyaXg7IH0KKyAgICAvLyBUaGlz
IG1vdmVzIGZyb20gbGF5ZXIgc3BhY2UsIHdpdGggb3JpZ2luIHRoZSB0b3AgbGVmdCB0byBzY3Jl
ZW4gc3BhY2Ugd2l0aCBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jl
ZW5TcGFjZVRyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgeyBtX3NjcmVlblNwYWNlVHJhbnNmb3Jt
ID0gbWF0cml4OyB9CiAgICAgY29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd2FibGVDb250ZW50UmVjdDsgfQpAQCAtMTkxLDYgKzE5NCwxMSBA
QCBwdWJsaWM6CiAgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNTY2FsZTsgfQogICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0
OworCisgICAgLy8gQWRkcyBhbnkgb3BhcXVlIHZpc2libGUgcGl4ZWxzIHRvIHRoZSBvY2NsdWRl
ZCByZWdpb24uCisgICAgdmlydHVhbCB2b2lkIGFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uo
UmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBh
bnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBi
b29sIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENo
YW5nZWQoKSB7IH0KQEAgLTIwNiw2ICsyMTQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBj
b250ZXh0LWRlcGVuZGVudCByZXNvdXJjZXMgc3VjaCBhcyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFs
IHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogCisgICAgYm9vbCBpc1BhaW50ZWRBeGlzQWxpZ25l
ZEluU2NyZWVuKCkgY29uc3Q7CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKICAgICAv
LyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gbGF5ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAppbmRleCA0ZTE4MjJiMzE4YzVlMWQyNTdh
OTA4ZTQyYTRkYzI4ODQ2YjViMmE2Li5jZDA3MDA0MDM5MjgyYzE3MjEzNTMzMDg1NmE4ZGE2OTk3
YjRiNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNo
YWRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpAQCAtNjMsNiArNjQsOCBAQCBwdWJsaWM6CiAgICAgZmxv
YXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAgICAgdm9p
ZCBzZXREcmF3T3BhY2l0eShmbG9hdCBkcmF3T3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gZHJh
d09wYWNpdHk7IH0KIAorICAgIC8vIFRoaXMgZ29lcyBmcm9tIGNvbnRlbnQgc3BhY2Ugd2l0aCB0
aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIgb2YgdGhlIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQgdG8g
dGhlIHRhcmdldCBzcGFjZSB3aXRoIHRoZSBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZQor
ICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQuIFBvc2l0aW9uIHRoZSByZWN0IHNvIHRoYXQg
dGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVyIG9mIGl0IGJlZm9yZSBhcHBseWluZyB0aGlzIHRy
YW5zZm9ybS4KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1RyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgeyBtX2RyYXdU
cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGRkZWQ1NTRiMzIxMTkzYjQxY2Y4ODQ5NzUyMzM5Y2MwYWU5YTAyNGMuLmM5YTIy
MWI2OWEwN2ZkNDdhZjU0ZTM0ODczZWIzZTk5YWI2ZDE5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcApAQCAtNDYyLDYgKzQ2MiwzNCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6cHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50
CiAgICAgfQogfQogCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRT
Y3JlZW5TcGFjZShSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpCit7CisgICAgaWYgKG1fc2tp
cHNEcmF3IHx8IGRyYXdPcGFjaXR5KCkgIT0gMSB8fCAhaXNQYWludGVkQXhpc0FsaWduZWRJblNj
cmVlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAob3BhcXVlKCkpIHsKKyAgICAgICAg
TGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZFNjcmVl
blNwYWNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVu
dFRyYW5zZm9ybSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisKKyAgICAvLyBG
SVhNRTogQ3JlYXRlL1VzZSBhIEZsb2F0UmVnaW9uIGZvciB0aGUgb2NjbHVkZWRTY3JlZW5TcGFj
ZSwgaW5zdGVhZCBvZiBhIFJlZ2lvbiBiYXNlZCBvbiBpbnRzLCB0byBhdm9pZCB0aGlzIHN0ZXAg
YW5kIGdldCBiZXR0ZXIgYWNjdXJhY3kgYmV0d2VlbiBsYXllcnMgaW4gdGFyZ2V0IHNwYWNlLgor
ICAgIFJlZ2lvbiB0aWxlUmVnaW9uOworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207
CisgICAgbV90aWxlci0+bGF5ZXJSZWN0VG9UaWxlSW5kaWNlcyh2aXNpYmxlTGF5ZXJSZWN0KCks
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBi
b3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytp
KSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAg
ICAgICAgICAgaWYgKHRpbGUpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVUaWxl
T3BhcXVlUmVjdCA9IGludGVyc2VjdGlvbih2aXNpYmxlUmVjdCwgdGlsZS0+bV9vcGFxdWVSZWN0
KTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuUmVjdCA9IGNvbnRlbnRUcmFuc2Zv
cm0ubWFwUmVjdChGbG9hdFJlY3QodmlzaWJsZVRpbGVPcGFxdWVSZWN0KSk7CisgICAgICAgICAg
ICAgICAgb2NjbHVkZWRTY3JlZW5TcGFjZS51bml0ZShlbmNsb3NlZEludFJlY3Qoc2NyZWVuUmVj
dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQogCiB2b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggMWY5ZjY5NTkzNDYyNzU0M2E4NTA5NjI5
NjdmNjM5NjJkMzdkZmM4NS4uNTY2ZjM0NjY5MGVjYzY3MzljMTc2ZmE0YTJiZjgzN2I3MDIwYjVk
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKK2NsYXNzIFJlZ2lv
bjsKIGNsYXNzIFVwZGF0YWJsZVRpbGU7CiAKIGNsYXNzIFRpbGVkTGF5ZXJDaHJvbWl1bSA6IHB1
YmxpYyBMYXllckNocm9taXVtIHsKQEAgLTYxLDYgKzYyLDggQEAgcHVibGljOgogICAgIC8vIHJl
Y3ljbGVkIGJ5IHRoZSB0ZXh0dXJlIG1hbmFnZXIuCiAgICAgdm9pZCBwcm90ZWN0VGlsZVRleHR1
cmVzKGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkU2Vs
ZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpOworCiBw
cm90ZWN0ZWQ6CiAgICAgVGlsZWRMYXllckNocm9taXVtKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCmluZGV4IGEyZmI4MjJjNTZiZGIzNWZjY2QzYjk5YTRkMTRkZWVhOGQ5MTMy
OGIuLmFjYTczODM0ZmFhMzM4YmIzNGJmYmJkMzE4MmI1ZTA0M2UxMGVkYWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckl0ZXJhdG9yLmgiCkBAIC00MDIsMTIgKzQwMywxMiBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKIH0KIAogLy8g
c3RhdGljCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIsIFBhaW50VHlwZSBwYWludFR5cGUpCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFBhaW50VHlwZSBw
YWludFR5cGUsIGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKIHsKICAgICBBU1NF
UlQobGF5ZXIpOwogICAgIEFTU0VSVChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlIHx8IFBhaW50
SWRsZSA9PSBwYWludFR5cGUpOwogICAgIGlmIChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlKQot
ICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5ZXItPnBh
aW50Q29udGVudHNJZkRpcnR5KG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwogICAgIGVsc2UKICAgICAg
ICAgbGF5ZXItPmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOwogfQpAQCAtNDE4LDM1ICs0MTks
OTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJT
dXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclMKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5
IGtub3cgdGhhdCBhdCBsZWFzdCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVu
ZGVyIHN1cmZhY2UsIHNvIHRoZQogICAgIC8vIG1hc2sgYW5kIHJlcGxpY2Egc2hvdWxkIGJlIHBh
aW50ZWQuCiAKKyAgICAvLyBGSVhNRTogSWYgdGhlIHN1cmZhY2UgaGFzIGEgcmVwbGljYSwgaXQg
c2hvdWxkIGJlIHBhaW50ZWQgd2l0aCBvY2NsdXNpb24gdGhhdCBleGNsdWRlcyB0aGUgY3VycmVu
dCB0YXJnZXQgc3VyZmFjZSBzdWJ0cmVlLgorICAgIFJlZ2lvbiBub09jY2x1c2lvbjsKKwogICAg
IGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgIHJlbmRlclN1
cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwotICAgICAgICBw
YWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBwYWlu
dFR5cGUpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXIt
Pm1hc2tMYXllcigpLCBwYWludFR5cGUsIG5vT2NjbHVzaW9uKTsKICAgICB9CiAKICAgICBMYXll
ckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXll
cigpOwogICAgIGlmIChyZXBsaWNhTGF5ZXIpIHsKLSAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkocmVwbGljYUxheWVyLCBwYWludFR5cGUpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0
eShyZXBsaWNhTGF5ZXIsIHBhaW50VHlwZSwgbm9PY2NsdXNpb24pOwogCiAgICAgICAgIGlmIChy
ZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1h
c2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGlj
YUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICBwYWlu
dENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUpOwor
ICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIo
KSwgcGFpbnRUeXBlLCBub09jY2x1c2lvbik7CiAgICAgICAgIH0KICAgICB9CiB9CiAKK3N0cnVj
dCBSZW5kZXJTdXJmYWNlUmVnaW9uIHsKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZh
Y2U7CisgICAgUmVnaW9uIG9jY2x1ZGVkSW5TY3JlZW47Cit9OworCisvLyBBZGQgdGhlIHN1cmZh
Y2UgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgYW5kIGNvcHkgdGhlIG9jY2x1c2lvbiBmcm9tIHRo
ZSBvbGQgdG9wIG9mIHRoZSBzdGFjayB0byB0aGUgbmV3Lgorc3RhdGljIHZvaWQgcHVzaFRhcmdl
dFJlbmRlclN1cmZhY2VSZWdpb24oVmVjdG9yPFJlbmRlclN1cmZhY2VSZWdpb24+JiBzdGFjaywg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKQoreworICAgIGlmIChzdGFjay5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3RhY2suYXBwZW5kKFJlbmRlclN1cmZhY2VSZWdpb24oKSk7CisgICAg
ICAgIHN0YWNrLmxhc3QoKS5zdXJmYWNlID0gc3VyZmFjZTsKKyAgICB9IGVsc2UgaWYgKHN0YWNr
Lmxhc3QoKS5zdXJmYWNlICE9IHN1cmZhY2UpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyU3VyZmFj
ZVJlZ2lvbiYgcHJldmlvdXMgPSBzdGFjay5sYXN0KCk7CisgICAgICAgIHN0YWNrLmFwcGVuZChS
ZW5kZXJTdXJmYWNlUmVnaW9uKCkpOworICAgICAgICBzdGFjay5sYXN0KCkuc3VyZmFjZSA9IHN1
cmZhY2U7CisgICAgICAgIHN0YWNrLmxhc3QoKS5vY2NsdWRlZEluU2NyZWVuID0gcHJldmlvdXMu
b2NjbHVkZWRJblNjcmVlbjsKKyAgICB9Cit9CisKKy8vIFBvcCB0aGUgdG9wIG9mIHRoZSBzdGFj
ayBvZmYsIHB1c2ggb24gdGhlIG5ldyBzdXJmYWNlLCBhbmQgbWVyZ2UgdGhlIG9sZCB0b3AncyBv
Y2NsdXNpb24gaW50byB0aGUgbmV3IHRvcCBzdXJmYWNlLgorc3RhdGljIHZvaWQgcG9wQW5kUHVz
aFRhcmdldFJlbmRlclN1cmZhY2VSZWdpb24oVmVjdG9yPFJlbmRlclN1cmZhY2VSZWdpb24+JiBz
dGFjaywgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKQoreworICAgIGludCBsYXN0SW5k
ZXggPSBzdGFjay5zaXplKCkgLSAxOworICAgIGJvb2wgc3VyZmFjZVdpbGxCZUF0VG9wQWZ0ZXJQ
b3AgPSBzdGFjay5zaXplKCkgPiAxICYmIHN0YWNrW2xhc3RJbmRleCAtIDFdLnN1cmZhY2UgPT0g
c3VyZmFjZTsKKworICAgIGlmIChzdXJmYWNlV2lsbEJlQXRUb3BBZnRlclBvcCkgeworICAgICAg
ICAvLyBNZXJnZSB0aGUgdG9wIG9mIHRoZSBzdGFjayBkb3duLgorICAgICAgICBzdGFja1tsYXN0
SW5kZXggLSAxXS5vY2NsdWRlZEluU2NyZWVuLnVuaXRlKHN0YWNrW2xhc3RJbmRleF0ub2NjbHVk
ZWRJblNjcmVlbik7CisgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBSZXBsYWNlIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdpdGggdGhlIG5ldyBwdXNo
ZWQgc3VyZmFjZS4gQ29weSB0aGUgb2NjbHVkZWQgcmVnaW9uIHRvIHRoZSB0b3AuCisgICAgICAg
IHN0YWNrLmxhc3QoKS5zdXJmYWNlID0gc3VyZmFjZTsKKyAgICB9Cit9CisKIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRUeXBlKQogewogICAgIC8vIFVzZSBGcm9udFRv
QmFjayB0byBhbGxvdyBmb3IgdGVzdGluZyBvY2NsdXNpb24gYW5kIHBlcmZvcm1pbmcgY3VsbGlu
ZyBkdXJpbmcgdGhlIHRyZWUgd2Fsay4KICAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXll
ckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6
OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBlOwogCisgICAgLy8gVGhlIHN0YWNrIGhv
bGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1YnRyZWVzIGluIHRoZSBSZW5kZXJTdXJmYWNlLUxh
eWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBsZWF2ZSBhIHN1YnRyZWUgd2UgbWF5CisgICAgLy8g
YXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90IHRvIHRoZSBwYXJ0cyBvdXRzaWRlIHRoZSBzdWJ0
cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGEgbmV3IHN1YnRyZWUgdW5kZXIg
YSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdldCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4gVGhp
cyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVwcmVzZW50aW5nIGl0c2VsZiwgb3IgYXMgYSB0YXJn
ZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4gd2UgdmlzaXQgYSB0YXJnZXQgc3VyZmFjZSwgd2Ug
YXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhl
IHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBpdHNl
bGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRvIHRoZSBjdXJyZW50IHN1YnRyZWUsIHdoaWNoIGlz
IGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVy
IHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlLCB0aGUgY3VycmVudCB0YXJnZXQg
d2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRoZSBzdGFjayBzaW5jZSB3ZSBqdXN0IGNhbWUgZnJv
bSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2UuCisgICAgLy8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lv
biBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRoZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBU
aGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRo
ZXJlLgorICAgIFZlY3RvcjxSZW5kZXJTdXJmYWNlUmVnaW9uPiB0YXJnZXRTdXJmYWNlU3RhY2s7
CisKICAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVu
ZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBl
IGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5k
ZXJTdXJmYWNlKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5k
cmF3T3BhY2l0eSgpKTsKKworICAgICAgICAgICAgcHVzaFRhcmdldFJlbmRlclN1cmZhY2VSZWdp
b24odGFyZ2V0U3VyZmFjZVN0YWNrLCBpdC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgICAg
IHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKCppdCwgcGFpbnRUeXBlKTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBhZGQgdGhlIHJlcGxpY2EgbGF5ZXIgdG8gdGhlIGN1cnJlbnQg
b2NjbHVzaW9uCisKKyAgICAgICAgICAgIGlmIChpdC0+bWFza0xheWVyKCkpCisgICAgICAgICAg
ICAgICAgdGFyZ2V0U3VyZmFjZVN0YWNrLmxhc3QoKS5vY2NsdWRlZEluU2NyZWVuID0gUmVnaW9u
KCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoIWl0LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgcGFpbnRD
b250ZW50c0lmRGlydHkoKml0LCBwYWludFR5cGUpOworCisgICAgICAgICAgICBwdXNoVGFyZ2V0
UmVuZGVyU3VyZmFjZVJlZ2lvbih0YXJnZXRTdXJmYWNlU3RhY2ssIGl0LT50YXJnZXRSZW5kZXJT
dXJmYWNlKCkpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkoKml0LCBwYWludFR5
cGUsIHRhcmdldFN1cmZhY2VTdGFjay5sYXN0KCkub2NjbHVkZWRJblNjcmVlbik7CisgICAgICAg
ICAgICBpdC0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZSh0YXJnZXRTdXJmYWNlU3RhY2su
bGFzdCgpLm9jY2x1ZGVkSW5TY3JlZW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cG9wQW5kUHVzaFRhcmdldFJlbmRlclN1cmZhY2VSZWdpb24odGFyZ2V0U3VyZmFjZVN0YWNrLCBp
dC50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAg
fQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZDkyYWRjMTY2YWU2
N2UzYWYwNTQyOTUxMGM5N2QzZmUzNjgzNTA5Zi4uMjgzYzYyZWY5ZGU5M2MwOTFlM2Q2ZjQ4NGEy
ZjNjZjUwZjViYzVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ4LDYgKzQ4
LDcgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwor
Y2xhc3MgUmVnaW9uOwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVNYW5h
Z2VyOwogCkBAIC0yMDUsOSArMjA2LDEwIEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8
T3duUHRyPE1hbmFnZWRUZXh0dXJlPiA+IFRleHR1cmVMaXN0OwogCiAgICAgZW51bSBQYWludFR5
cGUgeyBQYWludFZpc2libGUsIFBhaW50SWRsZSB9OwotICAgIHN0YXRpYyB2b2lkIHBhaW50Q29u
dGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUpOworICAgIHN0YXRpYyB2b2lk
IHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUsIGNvbnN0IFJl
Z2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSk7CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMo
Y29uc3QgTGF5ZXJMaXN0JiwgUGFpbnRUeXBlKTsKICAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUpOworICAgIHZvaWQg
Y2xlYXJQYWludE9jY2x1ZGVkUmVnaW9ucyhjb25zdCBMYXllckxpc3QmKTsKIAogICAgIHZvaWQg
dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKaW5kZXggNzcxMDAzMmUwNWM2YWZhYTQzMTc5
ZDlhNzkyOWEwODFmM2UwZmIwZS4uOTlmZWIyMTcwZGZlOTgzODdiOWRjODgyMTJlMDdkYTk3NGQy
OWU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCkBAIC02MiwxOCArNjIsNiBAQCBzdGF0
aWMgYm9vbCByZWdpb25Db250YWluc1JlY3QoY29uc3QgUmVnaW9uJiByZWdpb24sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIHJlY3RSZWdpb24uaXNFbXB0eSgpOwogfQogCi1zdGF0
aWMgSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAg
IGZsb2F0IHggPSBjZWlsZihyZWN0LngoKSk7Ci0gICAgZmxvYXQgeSA9IGNlaWxmKHJlY3QueSgp
KTsKLSAgICAvLyBBIHJlY3Qgb2Ygd2lkdGggMCBzaG91bGQgbm90IGJlY29tZSBhIHJlY3Qgb2Yg
d2lkdGggLTEuCi0gICAgZmxvYXQgd2lkdGggPSBtYXg8ZmxvYXQ+KGZsb29yZihyZWN0Lm1heFgo
KSkgLSB4LCAwKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBtYXg8ZmxvYXQ+KGZsb29yZihyZWN0Lm1h
eFkoKSkgLSB5LCAwKTsKLQotICAgIHJldHVybiBJbnRSZWN0KGNsYW1wVG9JbnRlZ2VyKHgpLCBj
bGFtcFRvSW50ZWdlcih5KSwKLSAgICAgICAgICAgICAgICAgICBjbGFtcFRvSW50ZWdlcih3aWR0
aCksIGNsYW1wVG9JbnRlZ2VyKGhlaWdodCkpOwotfQotCiB2b2lkIENDUXVhZEN1bGxlcjo6Y3Vs
bE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QpCiB7CiAgICAgaWYgKCFxdWFkTGlz
dC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBkMmUxY2ZlZjkzZTI4MjE2NmRhODUx
MjU2Yzk1YzBlNjUxMmM2OWJhLi5iMWZhNzI5MTg0MDFlMzI0MGU0MWQxM2QyZTBjMjdkMGM1NmFk
N2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAj
aW5jbHVkZSA8Z21vY2svZ21vY2suaD4KQEAgLTM1LDYgKzM2LDEyIEBACiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEsIGIpIFwKKyAgICBFWFBF
Q1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9FUShhLnkoKSwgYi55KCkpOyBcCisg
ICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAorICAgIEVYUEVDVF9FUShhLmhl
aWdodCgpLCBiLmhlaWdodCgpKTsKKwogbmFtZXNwYWNlIHsKIAogdm9pZCBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2ZXMzRCkKQEAgLTU5NSw0
ICs2MDIsMTc0IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJl
Y3RDdWxsc1JlbmRlclN1cmZhY2VzKQogLy8gIC0gdGVzdCB0aGUgb3RoZXIgZnVuY3Rpb25zIGlu
IENDTGF5ZXJUcmVlSG9zdENvbW1vbgogLy8KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbikKK3sKKyAgICAvLyBUaGlzIHRlc3Rz
IHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9j
Y2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVy
ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwor
ICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQo
bGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIGZhbHNlKTsKKworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15
TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAi
cm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ug
d2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNl
KCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7Cisg
ICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2NsdWRlZC5ib3VuZHMoKSk7
CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Cit9CisKK1RFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdpb25X
aXRoUm90YXRpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zv
cm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFJlZ2lvbiBvY2NsdWRlZDsKKyAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0
ZSgyNTAsIDI1MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBsYXllclRy
YW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVy
VHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNldE9wYXF1
ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxh
eWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJ
WE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3Ig
aW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAg
ICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAg
b2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5T
cGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3
MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3Rz
KCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFk
ZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKK3sKKyAgICAvLyBUaGlzIHRl
c3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9u
IG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxh
eWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkp
OworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hp
bGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07Cisg
ICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCks
IGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNl
dE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAg
IC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVo
YXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRv
by4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRT
Y3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAs
IDUwLCA1MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVk
LnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBs
YXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKK3sKKyAgICAv
LyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisg
ICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50
aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7Cisg
ICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAs
IDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1
MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwor
ICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVj
aWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZp
eCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBh
cmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNl
bGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMzAsIDQwLCA3MCwgNjApLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZv
ciB0aGUgYWJvdmUgb3BhcXVlIHJlY3QgZnJvbSB8bGF5ZXJ8OgorICAgICAgICAgICAgICAgMTAw
CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgfDMwICBWaXNpYmxlIHJlZ2lvbiBvZiB8bGF5ZXJ8OiAvLy8vLworICAgICAg
fCAgICAzMCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHJvdGF0ZSg5MCkgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8IDMwICsgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgMTAwIHwgICAgfCAgMTAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgPT0+ICAgICB8ICAgICB8ICAgICAgICAgICAgICAg
fDEwICAgICAgICAgICAgICAgfAorICAgICAgfCAgICB8MTArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0rICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgIDQy
MCAgICAgIHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfDYwICAgICAgICAg
ICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwg
fCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98ICAgICAgICAgICAgICB8
ICB8CisgICAgICArLS0tLXwtLXwtLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgfCB8ICAg
ICAgICAgICAgICAgICAgKy0tfC0tfC0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgIHwgIHwK
KyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAg
ICAgICAgICAgICAgMjB8MTB8ICAgICA3MCAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAg
ICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAg
ICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAg
ICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8NTAwICAgICAgICAgICAg
ICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfDEwfAorICAgICAgICAgICArLS18LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0rCisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
NDkwICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMAorICAgICAqLworfQor
CiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMjgwZTNhZjNmMWMyYjg0NDNjNzJkZjUzZTE0
MTNjZDg3YTA5YzliNi4uYzg2OTg0MjQyYzc5MmVmMTlhNGJlZGU3NzFmYjI1MDE2NzY2YmI3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCkBAIC05OTUsOSArOTk1LDkgQEAgcHVibGljOgogICAgIGludCB1cGRhdGVDb3Vu
dCgpIHsgcmV0dXJuIG1fdXBkYXRlQ291bnQ7IH0KICAgICB2b2lkIHJlc2V0VXBkYXRlQ291bnQo
KSB7IG1fdXBkYXRlQ291bnQgPSAwOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50
c0lmRGlydHkoKQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBS
ZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpCiAgICAgewotICAgICAgICBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgQ29udGVudExheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwogICAgICAg
ICBtX3BhaW50Q29udGVudHNDb3VudCsrOwogICAgIH0KIApAQCAtMTIxOCw0ICsxMjE4LDE5NiBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdEF0b21pY0NvbW1pdCwgcnVuTXVsdGlUaHJlYWQp
CiAgICAgcnVuVGVzdCh0cnVlKTsKIH0KIAorI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBc
CisgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIu
eSgpKTsgXAorICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBF
Q1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CisKK2NsYXNzIFRlc3RMYXllckNocm9taXVt
IDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRlc3RMYXllckNocm9taXVtPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGVzdExh
eWVyQ2hyb21pdW0oKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0
eShjb25zdCBSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpCisgICAgeworICAgICAgICBtX29j
Y2x1ZGVkU2NyZWVuU3BhY2UgPSBvY2NsdWRlZFNjcmVlblNwYWNlOworICAgIH0KKworICAgIHZp
cnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBj
b25zdCBSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29jY2x1
ZGVkU2NyZWVuU3BhY2U7IH0KKyAgICB2b2lkIGNsZWFyT2NjbHVkZWRTY3JlZW5TcGFjZSgpIHsg
bV9vY2NsdWRlZFNjcmVlblNwYWNlID0gUmVnaW9uKCk7IH0KKworcHJpdmF0ZToKKyAgICBUZXN0
TGF5ZXJDaHJvbWl1bSgpIDogTGF5ZXJDaHJvbWl1bSgpIHsgfQorCisgICAgUmVnaW9uIG1fb2Nj
bHVkZWRTY3JlZW5TcGFjZTsKK307CisKK3N0YXRpYyB2b2lkIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoVGVzdExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVtKiBwYXJlbnQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IGFuY2hvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5k
cywgYm9vbCBvcGFxdWUpCit7CisgICAgbGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAg
aWYgKHBhcmVudCkKKyAgICAgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisgICAgbGF5ZXIt
PnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChhbmNo
b3IpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEJv
dW5kcyhib3VuZHMpOworICAgIGxheWVyLT5zZXRPcGFxdWUob3BhcXVlKTsKKyAgICBsYXllci0+
Y2xlYXJPY2NsdWRlZFNjcmVlblNwYWNlKCk7Cit9CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRl
c3RMYXllck9jY2x1c2lvbiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoK
KyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb24oKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9t
aXVtPiByb290TGF5ZXIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJl
ZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CisgICAgICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gVGVzdExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGdy
YW5kQ2hpbGQgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxU
ZXN0TGF5ZXJDaHJvbWl1bT4gbWFzayA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKwor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisgICAgICAgIGNoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7
CisgICAgICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgICAg
ICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgICAgICAvLyBTZWUgQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC5sYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3Rh
dGVkU3VyZmFjZSBmb3IgYSBuaWNlIHZpc3VhbCBvZiB0aGVzZSBsYXllcnMgYW5kIGhvdyB0aGV5
IGVuZCB1cAorICAgICAgICAvLyBwb3NpdGlvbmVkIG9uIHRoZSBzY3JlZW4uCisKKyAgICAgICAg
Ly8gVGhlIGNoaWxkIGxheWVyIGlzIHJvdGF0ZWQgYW5kIHRoZSBncmFuZENoaWxkIGlzIG9wYXF1
ZSwgYnV0IGNsaXBwZWQgdG8gdGhlIGNoaWxkIGFuZCByb290TGF5ZXIKKyAgICAgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwg
dHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCks
IHJvb3RMYXllci5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICAgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6
ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExh
eWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXpl
KHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxh
eWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAg
ICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVl
blNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9j
Y2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5T
cGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgz
MCwgNDAsIDcwLCA2MCksIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGxheWVyIGlzIG9w
YXF1ZSwgdGhlbiBpdCBhZGRzIHRvIHRoZSBvY2NsdXNpb24gc2VlbiBieSB0aGUgcm9vdExheWVy
LgorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwg
MCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhjaGlsZC5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7
CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwg
Y2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDEwLCAxMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldFZpZXdwb3J0U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRD
b21wbGV0ZSgpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGls
ZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1
LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAg
ICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1
ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQt
Pm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVu
U3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIEFkZCBhIHNl
Y29uZCBjaGlsZCB0byB0aGUgcm9vdCBsYXllciBhbmQgdGhlIHJlZ2lvbnMgc2hvdWxkIG1lcmdl
CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdExheWVyLmdldCgpLCAw
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGNoaWxkMi5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCg3MCwgMjApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7
CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RM
YXllci5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwg
NTAwKSwgdHJ1ZSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9v
dExheWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExh
eWVyLT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCksIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRz
KCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwg
NzAsIDcwKSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMXUsIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMjAsIDcwLCA4MCksIHJv
b3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDJ1LCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisKKyAgICAgICAgLy8gTW92ZSB0aGUgc2Vjb25kIGNoaWxkIHRvIGJlIHN1cmUuCisgICAgICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdExheWVyLmdldCgpLCAwLCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAs
IDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxk
Mi5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgxMCwgNzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQo
KSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1
ZSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsK
KyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3Vu
ZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KCksIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwg
NDAsIDcwLCA2MCksIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwg
Y2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMXUsIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMzAsIDkwLCA3MCksIHJvb3RMYXllci0+
b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBy
b290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAg
ICAgLy8gSWYgdGhlIGNoaWxkIGxheWVyIGhhcyBhIG1hc2sgb24gaXQsIHRoZW4gaXQgc2hvdWxk
bid0IGNvbnRyaWJ1dGUgdG8gb2NjbHVzaW9uIG9uIHN0dWZmIGJlbG93IGl0CisgICAgICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdExheWVyLmdldCgpLCAwLCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEw
MCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMi5n
ZXQoKSwgcm9vdExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgxMCwgNzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwg
Y2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7
CisKKyAgICAgICAgY2hpbGQtPnNldE1hc2tMYXllcihtYXNrLmdldCgpKTsKKworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwg
Z3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDB1LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hp
bGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgx
dSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCku
Ym91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5T
cGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgx
MCwgNzAsIDkwLCAzMCksIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGxheWVyIHdpdGgg
YSBtYXNrIGlzIGJlbG93IGNoaWxkMiwgdGhlbiBjaGlsZDIgc2hvdWxkIGNvbnRyaWJ1dGUgdG8g
b2NjbHVzaW9uIG9uIGV2ZXJ5dGhpbmcsIGFuZCBjaGlsZCBzaG91bGRuJ3QgY29udHJpYnV0ZSB0
byB0aGUgcm9vdExheWVyCisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9v
dExheWVyLmdldCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJh
bnNmb3JtLCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAw
LCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFu
ZENoaWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgcm9vdExheWVyLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgNzAp
LCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3
cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUo
KTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjaGlsZDItPm9j
Y2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMTAsIDcwLCA5MCwgMzApLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNw
YWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGdyYW5kQ2hpbGQtPm9jY2x1
ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAsIDQwLCA5MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJv
dW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwg
NzAsIDkwLCAzMCksIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsK
KyAgICAgICAgRVhQRUNUX0VRKDF1LCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gS2lsbCB0aGUgbGF5ZXJUcmVlSG9zdCBpbW1l
ZGlhdGVseS4KKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOworCisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKKworU0lO
R0xFX0FORF9NVUxUSV9USFJFQURfVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1
c2lvbikKKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGYwYjVjNDEx
YjY1NmFlZGU3NTk1NzEwZTRkOGNmZDdkMjRkYjUzM2MuLmNlNThlOGY2ZWM4NDkyYmFhMjQzYmRh
ZTg0ZGYzY2MyZjBlYTAzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMTM4LDcgKzEzOCw4
IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBjYW52YXMtPmNvbnRlbnRDaGFuZ2VkKCk7CiAgICAg
ICAgIEVYUEVDVF9UUlVFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOwotICAgICAgICBjYW52YXMt
PnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIFJlZ2lvbiBvY2NsdWRlZFNjcmVlblNw
YWNlOworICAgICAgICBjYW52YXMtPnBhaW50Q29udGVudHNJZkRpcnR5KG9jY2x1ZGVkU2NyZWVu
U3BhY2UpOwogICAgICAgICBFWFBFQ1RfRkFMU0UoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBs
VGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRM
YXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggYjg1MGY4MjQxY2MwODAxNDEzOGUzODA4YzA2MTRj
YTYxMDRlNjMyMS4uYjAzNTBkYjQ5NWZiNTYyYjM1ODE0MDg3ZWY2NDEwZDc2MTk1YmE3NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1U
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0
Q29tbW9uLmgiCiAjaW5jbHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2luY2x1
ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRl
ICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRl
ICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiIC8vIEZvciBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQKQEAgLTM5LDYgKzQwLDEyIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVD
VF9FUShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAg
ICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVp
Z2h0KCksIGIuaGVpZ2h0KCkpOworCiBuYW1lc3BhY2UgewogCiBjbGFzcyBGYWtlVGV4dHVyZUFs
bG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKQEAgLTcwLDE3ICs3NywyMCBAQCBw
dWJsaWM6CiAgICAgaW50IHByZXBhcmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlcGFyZUNv
dW50OyB9CiAgICAgdm9pZCBjbGVhclByZXBhcmVDb3VudCgpIHsgbV9wcmVwYXJlQ291bnQgPSAw
OyB9CiAKKyAgICB2b2lkIHNldE9wYXF1ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBvcGFxdWVQ
YWludFJlY3QpIHsgbV9vcGFxdWVQYWludFJlY3QgPSBvcGFxdWVQYWludFJlY3Q7IH0KKwogICAg
IC8vIExhc3QgcmVjdCBwYXNzZWQgdG8gcHJlcGFyZVRvVXBkYXRlKCkuCiAgICAgY29uc3QgSW50
UmVjdCYgbGFzdFVwZGF0ZVJlY3QoKSAgY29uc3QgeyByZXR1cm4gbV9sYXN0VXBkYXRlUmVjdDsg
fQogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBUZXh0dXJlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsgfQogICAgIHZp
cnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSkgeyBy
ZXR1cm4gU2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmLCBpbnQs
IGZsb2F0LCBJbnRSZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGludCwgZmxvYXQsIEludFJl
Y3QqIHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogCiBwcml2YXRlOgogICAgIGludCBtX3ByZXBhcmVD
b3VudDsKICAgICBJbnRSZWN0IG1fcmVjdFRvSW52YWxpZGF0ZTsKICAgICBJbnRSZWN0IG1fbGFz
dFVwZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX29wYXF1ZVBhaW50UmVjdDsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKIH07CiAKQEAgLTEzOSw3ICsxNDksNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3JlZW5TcGFjZSAqLykKICAgICB7CiAgICAg
ICAgIHByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlTGF5ZXJSZWN0KCkpOwogICAgIH0KQEAgLTE4Nyw3
ICsxOTcsNyBAQCB2b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0CiAgICAgICAgIG1fcmVjdFRvSW52YWxp
ZGF0ZSA9IEludFJlY3QoKTsKICAgICAgICAgbV9sYXllciA9IDA7CiAgICAgfQotICAgICpyZXN1
bHRpbmdPcGFxdWVSZWN0ID0gSW50UmVjdCgpOworICAgICpyZXN1bHRpbmdPcGFxdWVSZWN0ID0g
bV9vcGFxdWVQYWludFJlY3Q7CiB9CiAKIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aERpcnR5VGlsZXMpCkBAIC00NjAsNCArNDcwLDk4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1
dGRvd24oKTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBsYXllckFkZHNTZWxm
VG9PY2NsdWRlZFJlZ2lvbikKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQs
IDEwMjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisK
KyAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5k
IHRoZW4gcGFpbnRzIHR3byB0aWxlcyBpbiB2YXJpb3VzIHdheXMuCisKKyAgICBSZWdpb24gb2Nj
bHVkZWQ7CisgICAgSW50UmVjdCBjb250ZW50Qm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCk7CisgICAgSW50UmVjdCB2aXNpYmxlQm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDE1MCk7
CisKKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMuc2l6ZSgpKTsKKyAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlQm91bmRzKTsKKyAgICBsYXllci0+c2V0RHJh
d09wYWNpdHkoMSk7CisKKyAgICAvLyBUaGUgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gaXMgdmVyaWZp
ZWQgaW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdHMKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBzY3JlZW5TcGFjZVRyYW5zZm9ybTsKKyAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zv
cm0oc2NyZWVuU3BhY2VUcmFuc2Zvcm0pOworCisgICAgLy8gSWYgdGhlIGxheWVyIGlzIG9wYXF1
ZSB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIGJlIHRoZSB3aG9sZSBsYXllcidzIHZp
c2libGUgcmVnaW9uLgorICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisgICAgbGF5ZXItPmlu
dmFsaWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUo
Y29udGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5h
ZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VCh2aXNpYmxlQm91bmRzLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgbm90IG9w
YXF1ZSB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIGJlIGVtcHR5LgorICAgIGxheWVy
LT5zZXRPcGFxdWUoZmFsc2UpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91
bmRzKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAg
b2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5T
cGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdWRlZC5i
b3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisK
KyAgICAvLyBJZiB0aGUgbGF5ZXIgcGFpbnRzIG9wYXF1ZSBjb250ZW50LCB0aGVuIHRoZSBvY2Ns
dWRlZCByZWdpb24gc2hvdWxkIG1hdGNoIHRoZSB2aXNpYmxlIG9wYXF1ZSBjb250ZW50LgorICAg
IEludFJlY3Qgb3BhcXVlUGFpbnRSZWN0ID0gSW50UmVjdCgxMCwgMTAsIDkwLCAxOTApOworICAg
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3Qob3Bh
cXVlUGFpbnRSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7
CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1
ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uo
b2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihvcGFxdWVQYWludFJl
Y3QsIHZpc2libGVCb3VuZHMpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1
LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB3ZSBwYWludCBhZ2FpbiB3
aXRob3V0IGludmFsaWRhdGluZywgdGhlIHNhbWUgc3R1ZmYgc2hvdWxkIGJlIG9jY2x1ZGVkLgor
ICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3Qo
SW50UmVjdCgpKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOwor
CisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRT
Y3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9uKG9w
YXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBF
WFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElmIHRoZSBs
YXllciBpcyB0cmFuc2Zvcm1lZCB0aGVuIHRoZSByZXN1bHRpbmcgb2NjbHVkZWQgYXJlYSBuZWVk
cyB0byBiZSB0cmFuc2Zvcm1lZCB0byBpdHMgdGFyZ2V0IHNwYWNlLgorICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGNvbnRlbnRCb3Vu
ZHMud2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgdHJh
bnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5k
cy53aWR0aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSgxMCwgMTApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5z
bGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkg
LyAyLjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtICo9IHRyYW5zZm9ybTsKKyAgICBzY3Jl
ZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwg
LWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGxheWVyLT5zZXRTY3JlZW5TcGFj
ZVRyYW5zZm9ybShzY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnByZXBhcmVUb1Vw
ZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5
ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVYUEVDVF9F
UV9SRUNUKHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3QoaW50ZXJzZWN0aW9uKG9wYXF1ZVBh
aW50UmVjdCwgdmlzaWJsZUJvdW5kcykpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBCdXQgYSBub24tYXhp
cy1hbGlnbmVkIHRyYW5zZm9ybSBkb2VzIG5vdCBnZXQgY29uc2lkZXJlZCBmb3Igb2NjbHVzaW9u
LgorICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBj
b250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICB0cmFuc2Zvcm0ucm90YXRlKDUpOwor
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNv
bnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRy
YW5zbGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0
KCkgLyAyLjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtICo9IHRyYW5zZm9ybTsKKyAgICBz
Y3JlZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIu
MCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGxheWVyLT5zZXRTY3JlZW5T
cGFjZVRyYW5zZm9ybShzY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnByZXBhcmVU
b1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAg
bGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIC8vIEZJ
WE1FOiBJZiB3ZSBmaW5kIGFuIG9wYXF1ZSByZWN0IGNvbnRhaW5lZCBpbiB0aGUgcm90YXRlZCBu
b24tYXhpcy1hbGlnbmVkIHJlY3QsIHRoZW4KKyAgICAvLyB0aGlzIHdvbid0IGJlIGFuIGVtcHR5
IHJlc3VsdC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIG9jY2x1ZGVkLmJvdW5kcygp
KTsKKyAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124375</attachid>
            <date>2012-01-27 14:55:13 -0800</date>
            <delta_ts>2012-01-30 13:56:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120127175511.patch</filename>
            <type>text/plain</type>
            <size>59275</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRmZDZjMmE2YmMyNjEx
MTdiMzk1MDcwNmE3M2E2MTU2MjhjMDQyNC4uMzJiNDAwYWM5NThjMTY5ZDY1YmYwNmE5NzY0MDQ2
YTMxNDM1ZDBmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTI3ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAsIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwLCBDQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2VkSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKEltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
aXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2Nj
bHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6cG9wQW5kUHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6CisKIDIwMTIt
MDEtMjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVlIGZvciBkcmF3IGN1bGxp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTJkMTI0M2U4ZjdlMzdlMjQ1ZTE1MGY3
NzkzZDJjMWMxMTllNzY0ZS4uOThhZmJjYjkyYWQ1YzFjZTliMDMwOWZjMTE2ZmFlOTliNWIxNjJl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wMS0y
NyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENvbXB1dGUgb2NjbHVzaW9uIGR1cmluZyBwYWludCBsb29wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg1OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RG
OjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cGFpbnRDb250ZW50c0lm
RGlydHkpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFRlc3RMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdURjo6VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRl
c3RMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OlRl
c3RMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJD
aHJvbWl1bTo6b2NjbHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNo
cm9taXVtOjpjbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV1RGOjpUZXN0TGF5
ZXJDaHJvbWl1bTo6VGVzdExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV1RGOjpzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9j
Y2x1c2lvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lv
bjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb246OmFmdGVyVGVzdCk6CisgICAgICAg
ICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0OjpmdWxsTGlmZWN5Y2xlVGVzdCk6CisgICAgICAg
ICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VM
YXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAoRmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVt
OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVV
cGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV1RGOjpURVNUKToKKyAgICAgICAg
KFdURik6CisKIDIwMTItMDEtMjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVl
IGZvciBkcmF3IGN1bGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuY3BwCmluZGV4IDQ2ZmNhNmMyN2U5ZTkzZTYzOTQ2ODI3NWYzNzU5NTk0ZjVjOTJi
NzcuLjU5NWFmMmEzMjNhM2VlNWFhNDhmNjgwODViNjY2NmE3ZDlkNDk0ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE4LDYgKzIx
OCwxOSBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIo
aGVpZ2h0KSk7CiB9CiAKK0ludFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpbnQgeCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7Cisg
ICAgaW50IHkgPSBjbGFtcFRvSW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOworICAgIGZsb2F0IG1h
eFggPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYocmVjdC5tYXhYKCkpKTsKKyAgICBmbG9hdCBtYXhZ
ID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHJlY3QubWF4WSgpKSk7CisgICAgLy8gQSByZWN0IG9m
IHdpZHRoIDAgc2hvdWxkIG5vdCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWls
L2Zsb29yLgorICAgIGludCB3aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDAp
OworICAgIGludCBoZWlnaHQgPSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKKwor
ICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCiBGbG9hdFJlY3Qg
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAg
fHwgc3JjUmVjdC5oZWlnaHQoKSA9PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaAppbmRleCAxNDA5MDcxYjExOTg4M2QzYjA4NjI3MGFhNGNmNzg4NGY0
ZmJhNjJjLi4yMmMxNzFjNWFiNGQxODg5NjBlODJmZTdiZTAyMThlNDFjZjhhNWY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjcwLDYgKzI3
MCw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBG
bG9hdFJlY3QmIGIpCiAKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKIAorLy8gUmV0dXJucyBhIHZhbGlkIEludFJlY3QgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2
ZW4gRmxvYXRSZWN0LgorSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisKIC8vIE1hcCByZWN0IHIgZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBk
ZXN0UmVjdC4KIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTUwNWFkYWMyNDNlMDc2NjVkMmRkYWIy
OGY0NzAzZmY4ZWY1Yjk0My4uMDkwNTQ3NDE4NmVmYzJjNDBhN2FkYTQ1ODU5NWUwYmY4M2YzNjhj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC05MSw3ICs5MSw3
IEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogICAg
ICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0K
IAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3Zv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdp
b24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiB7CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAppbmRl
eCA4MzYxNWExZjIyMzU2MTY0NjJlYjFmOGQ0MTIyZTFhZDhlNThjOTIyLi5lY2JhOTBmNGVkMTYy
YzY4ZGM0ZjA4ZTYxMGJkZDRmNzJkOWIzMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaApAQCAtNDAsNiArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQSBsYXllciBjb250YWluaW5n
IGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcwogY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtIDog
cHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0gewpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJh
d3NDb250ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYg
b2NjbHVkZWRTY3JlZW5TcGFjZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCA1MjlmY2UwMzY0YTgyODU1YWE0MDYzOTcx
NTZlMGZiYjRlM2E5NTBlLi4zNDMwMzExMGZhOWNhZmRmMjZjYTliY2ZlZDZlMjRjNGY0MDJmMmFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC05Myw3ICs5Myw3IEBA
IGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAgICAgcmV0
dXJuIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgJiYgbV9kZWxlZ2F0ZTsKIH0K
IAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9u
JiAvKiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogewogICAgIHVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDQyNjY3
OWNhZmFiYjczOTRjMDJlNzkwMWJlMzMyZDdiY2I1ZTA4MWEuLjVlZmY2YTNkNjBhMTJkMTIwZWI3
MjAwMGQzNTBiMWZiNTgzOGVhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApA
QCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGlsZXJD
aHJvbWl1bTsKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiAKIGNs
YXNzIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJEZWxlZ2F0ZSgpIHsgbV9kZWxlZ2F0ZSA9IDA7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQg
aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVl
KGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDE1NGZiMjgzMTRm
M2U2YzkyNDA0N2JiNDgzNjczNjkyZGZjZmFiNy4uODMxY2JlODA5NjNhM2E4MDBiOGFhNDZhNjk5
NDhmNGZjN2Y1ZWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNTgs
NyArMTU4LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBj
b250ZW50cykKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpw
YWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdpb24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2Ug
Ki8pCiB7CiAgICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0
ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5kZXggZDcxMjkyNDUxYzM1NTVlYWYw
YzE2Y2Y5ZjJjM2YzOTViZTA3NTMwNC4uYWI1YzFiMjdiMmM3NWE3NWFlMzQzNzkzY2E1Mzg3OWYy
NTUxZGQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdlTGF5ZXJUZXh0
dXJlVXBkYXRlcjsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIG9u
bHkgYW4gSW1hZ2UgZWxlbWVudC4KIGNsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBU
aWxlZExheWVyQ2hyb21pdW0gewpAQCAtNTMsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SW1hZ2VMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRT
Y3JlZW5TcGFjZSk7CiAgICAgdmlydHVhbCBib29sIG5lZWRzQ29udGVudHNTY2FsZSgpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAppbmRleCA0YzYzZGZkN2QyNjgyODdiNWY4NWE3N2JjNDA0MjVmMDYwYThhNTgyLi5jYzFk
MGVjZjExZTZhZWE2OGIxYjhhY2I0NTdlNmJhYmMxYzhiYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgorI2luY2x1ZGUgIlJlZ2lvbi5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTQ4MSw2ICs0ODIs
MzUgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IGNvbnRlbnRz
U2NhbGUpCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4
IExheWVyQ2hyb21pdW06OmNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sK
KyAgICBJbnRTaXplIGJvdW5kc0luTGF5ZXJTcGFjZSA9IGJvdW5kcygpOworICAgIEludFNpemUg
Ym91bmRzSW5Db250ZW50U3BhY2UgPSBjb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworCisgICAgLy8g
U2NhbGUgZnJvbSBjb250ZW50IHNwYWNlIHRvIGxheWVyIHNwYWNlCisgICAgdHJhbnNmb3JtLnNj
YWxlTm9uVW5pZm9ybShib3VuZHNJbkxheWVyU3BhY2Uud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3VuZHNJbkxheWVyU3BhY2UuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gdHJhbnNm
b3JtOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3Bh
Y2UoUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKQoreworICAgIGlmICghb3BhcXVlKCkgfHwg
ZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFpc1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gY29udGVudFRvU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlTGF5ZXJSZWN0KCkp
KTsKKyAgICBvY2NsdWRlZFNjcmVlblNwYWNlLnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0YXJnZXRS
ZWN0KSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aXNQYWludGVkQXhpc0FsaWduZWRJblNj
cmVlbigpIGNvbnN0Cit7CisgICAgRmxvYXRRdWFkIHF1YWQgPSBjb250ZW50VG9TY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKHZpc2libGVMYXllclJlY3QoKSkpOworICAg
IHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpj
cmVhdGVSZW5kZXJTdXJmYWNlKCkKIHsKICAgICBBU1NFUlQoIW1fcmVuZGVyU3VyZmFjZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKaW5kZXggYzVmODhmMTMyNmU4ZDIyN2E1MTE3MDA3YWQwZWUyYzQ5M2Y2
MjI4NS4uZDlmMDZiODBkY2ZhZGQwYzFmNGVkMTBlMmIxOWE2MWUzM2I3MmJhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEND
TGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBs
YXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFz
cy4KQEAgLTE1Myw3ICsxNTQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHR5
cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2
aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0RyYXdhYmxlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3Jl
ZW5TcGFjZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0
eSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJc01hc2soYm9vbCkgeyB9CkBAIC0xODIsOCArMTgzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3QgPSBjbGlw
UmVjdDsgfQogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90YXJn
ZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQorICAgIC8vIFRoaXMgbW92ZXMgZnJvbSBsYXll
ciBzcGFjZSwgd2l0aCBvcmlnaW4gaW4gdGhlIGNlbnRlciB0byB0YXJnZXQgc3BhY2Ugd2l0aCBv
cmlnaW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KICAgICB2b2lk
IHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgeyBt
X2RyYXdUcmFuc2Zvcm0gPSBtYXRyaXg7IH0KKyAgICAvLyBUaGlzIG1vdmVzIGZyb20gbGF5ZXIg
c3BhY2UsIHdpdGggb3JpZ2luIHRoZSB0b3AgbGVmdCB0byBzY3JlZW4gc3BhY2Ugd2l0aCBvcmln
aW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVl
blNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsg
fQogICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkgeyBtX3NjcmVlblNwYWNlVHJhbnNmb3JtID0gbWF0cml4OyB9CiAgICAg
Y29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJh
d2FibGVDb250ZW50UmVjdDsgfQpAQCAtMTkxLDYgKzE5NCwxMSBAQCBwdWJsaWM6CiAgICAgZmxv
YXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY2FsZTsgfQogICAg
IHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgLy8gQWRkcyBh
bnkgb3BhcXVlIHZpc2libGUgcGl4ZWxzIHRvIHRoZSBvY2NsdWRlZCByZWdpb24uCisgICAgdmly
dHVhbCB2b2lkIGFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBvY2NsdWRlZFNj
cmVlblNwYWNlKTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3Mg
ZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRlc2NlbmRhbnREcmF3
c0NvbnRlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKSB7IH0KQEAgLTIw
Niw2ICsyMTQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBjb250ZXh0LWRlcGVuZGVudCBy
ZXNvdXJjZXMgc3VjaCBhcyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291
cmNlcygpOwogCisgICAgYm9vbCBpc1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkgY29uc3Q7
CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKICAgICAvLyBUaGlzIGZsYWcgaXMgc2V0
IHdoZW4gbGF5ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaAppbmRleCA0ZTE4MjJiMzE4YzVlMWQyNTdhOTA4ZTQyYTRkYzI4ODQ2YjVi
MmE2Li5iZjQ5ODhjMjUzNzljZTIzYTQwMTJhODE0NmRiNWE4NjJkMDM5ZjIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAg
ZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAgICAg
dm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBkcmF3T3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0g
ZHJhd09wYWNpdHk7IH0KIAorICAgIC8vIFRoaXMgZ29lcyBmcm9tIGNvbnRlbnQgc3BhY2Ugd2l0
aCB0aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIgb2YgdGhlIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQg
dG8gdGhlIHRhcmdldCBzcGFjZSB3aXRoIHRoZSBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0IG9mIHRo
ZQorICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQuIFBvc2l0aW9uIHRoZSByZWN0IHNvIHRo
YXQgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVyIG9mIGl0IGJlZm9yZSBhcHBseWluZyB0aGlz
IHRyYW5zZm9ybS4KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1Ry
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgeyBtX2Ry
YXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IGRkZWQ1NTRiMzIxMTkzYjQxY2Y4ODQ5NzUyMzM5Y2MwYWU5YTAyNGMuLmM5
YTIyMWI2OWEwN2ZkNDdhZjU0ZTM0ODczZWIzZTk5YWI2ZDE5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcApAQCAtNDYyLDYgKzQ2MiwzNCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwg
aW50CiAgICAgfQogfQogCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVk
ZWRTY3JlZW5TcGFjZShSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpCit7CisgICAgaWYgKG1f
c2tpcHNEcmF3IHx8IGRyYXdPcGFjaXR5KCkgIT0gMSB8fCAhaXNQYWludGVkQXhpc0FsaWduZWRJ
blNjcmVlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAob3BhcXVlKCkpIHsKKyAgICAg
ICAgTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZFNj
cmVlblNwYWNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgdmlzaWJs
ZVJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29u
dGVudFRyYW5zZm9ybSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisKKyAgICAv
LyBGSVhNRTogQ3JlYXRlL1VzZSBhIEZsb2F0UmVnaW9uIGZvciB0aGUgb2NjbHVkZWRTY3JlZW5T
cGFjZSwgaW5zdGVhZCBvZiBhIFJlZ2lvbiBiYXNlZCBvbiBpbnRzLCB0byBhdm9pZCB0aGlzIHN0
ZXAgYW5kIGdldCBiZXR0ZXIgYWNjdXJhY3kgYmV0d2VlbiBsYXllcnMgaW4gdGFyZ2V0IHNwYWNl
LgorICAgIFJlZ2lvbiB0aWxlUmVnaW9uOworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b207CisgICAgbV90aWxlci0+bGF5ZXJSZWN0VG9UaWxlSW5kaWNlcyh2aXNpYmxlTGF5ZXJSZWN0
KCksIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8
PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsg
KytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwor
ICAgICAgICAgICAgaWYgKHRpbGUpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVU
aWxlT3BhcXVlUmVjdCA9IGludGVyc2VjdGlvbih2aXNpYmxlUmVjdCwgdGlsZS0+bV9vcGFxdWVS
ZWN0KTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuUmVjdCA9IGNvbnRlbnRUcmFu
c2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QodmlzaWJsZVRpbGVPcGFxdWVSZWN0KSk7CisgICAgICAg
ICAgICAgICAgb2NjbHVkZWRTY3JlZW5TcGFjZS51bml0ZShlbmNsb3NlZEludFJlY3Qoc2NyZWVu
UmVjdCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQogCiB2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggMWY5ZjY5NTkzNDYyNzU0M2E4NTA5
NjI5NjdmNjM5NjJkMzdkZmM4NS4uNTY2ZjM0NjY5MGVjYzY3MzljMTc2ZmE0YTJiZjgzN2I3MDIw
YjVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTM1LDYgKzM1LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKK2NsYXNzIFJl
Z2lvbjsKIGNsYXNzIFVwZGF0YWJsZVRpbGU7CiAKIGNsYXNzIFRpbGVkTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBMYXllckNocm9taXVtIHsKQEAgLTYxLDYgKzYyLDggQEAgcHVibGljOgogICAgIC8v
IHJlY3ljbGVkIGJ5IHRoZSB0ZXh0dXJlIG1hbmFnZXIuCiAgICAgdm9pZCBwcm90ZWN0VGlsZVRl
eHR1cmVzKGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
U2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwor
CiBwcm90ZWN0ZWQ6CiAgICAgVGlsZWRMYXllckNocm9taXVtKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCmluZGV4IGEyZmI4MjJjNTZiZGIzNWZjY2QzYjk5YTRkMTRkZWVhOGQ5
MTMyOGIuLjlhOWQ0MTBkZWQ5Y2QzNzk3NjJmNjUxMTUyMTM2OTZiM2Y5MjEzNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1
ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCkBAIC00MDIsMTIgKzQwMywxMiBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKIH0KIAog
Ly8gc3RhdGljCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIsIFBhaW50VHlwZSBwYWludFR5cGUpCit2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFBhaW50VHlw
ZSBwYWludFR5cGUsIGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKIHsKICAgICBB
U1NFUlQobGF5ZXIpOwogICAgIEFTU0VSVChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlIHx8IFBh
aW50SWRsZSA9PSBwYWludFR5cGUpOwogICAgIGlmIChQYWludFZpc2libGUgPT0gcGFpbnRUeXBl
KQotICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5ZXIt
PnBhaW50Q29udGVudHNJZkRpcnR5KG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwogICAgIGVsc2UKICAg
ICAgICAgbGF5ZXItPmlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOwogfQpAQCAtNDE4LDM1ICs0
MTksOTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5k
ZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclMKICAgICAvLyBpbiBjb2RlLCB3ZSBhbHJl
YWR5IGtub3cgdGhhdCBhdCBsZWFzdCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMg
cmVuZGVyIHN1cmZhY2UsIHNvIHRoZQogICAgIC8vIG1hc2sgYW5kIHJlcGxpY2Egc2hvdWxkIGJl
IHBhaW50ZWQuCiAKKyAgICAvLyBGSVhNRTogSWYgdGhlIHN1cmZhY2UgaGFzIGEgcmVwbGljYSwg
aXQgc2hvdWxkIGJlIHBhaW50ZWQgd2l0aCBvY2NsdXNpb24gdGhhdCBleGNsdWRlcyB0aGUgY3Vy
cmVudCB0YXJnZXQgc3VyZmFjZSBzdWJ0cmVlLgorICAgIFJlZ2lvbiBub09jY2x1c2lvbjsKKwog
ICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgIHJlbmRl
clN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwotICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBw
YWludFR5cGUpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5
ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUsIG5vT2NjbHVzaW9uKTsKICAgICB9CiAKICAgICBM
YXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FM
YXllcigpOwogICAgIGlmIChyZXBsaWNhTGF5ZXIpIHsKLSAgICAgICAgcGFpbnRDb250ZW50c0lm
RGlydHkocmVwbGljYUxheWVyLCBwYWludFR5cGUpOworICAgICAgICBwYWludENvbnRlbnRzSWZE
aXJ0eShyZXBsaWNhTGF5ZXIsIHBhaW50VHlwZSwgbm9PY2NsdXNpb24pOwogCiAgICAgICAgIGlm
IChyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXIt
Pm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVw
bGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICBw
YWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUp
OworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLT5tYXNrTGF5
ZXIoKSwgcGFpbnRUeXBlLCBub09jY2x1c2lvbik7CiAgICAgICAgIH0KICAgICB9CiB9CiAKK3N0
cnVjdCBSZW5kZXJTdXJmYWNlUmVnaW9uIHsKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1
cmZhY2U7CisgICAgUmVnaW9uIG9jY2x1ZGVkSW5TY3JlZW47Cit9OworCisvLyBBZGQgdGhlIHN1
cmZhY2UgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgYW5kIGNvcHkgdGhlIG9jY2x1c2lvbiBmcm9t
IHRoZSBvbGQgdG9wIG9mIHRoZSBzdGFjayB0byB0aGUgbmV3Lgorc3RhdGljIHZvaWQgZW50ZXJU
YXJnZXRSZW5kZXJTdXJmYWNlKFZlY3RvcjxSZW5kZXJTdXJmYWNlUmVnaW9uPiYgc3RhY2ssIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogbmV3VGFyZ2V0KQoreworICAgIGlmIChzdGFjay5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3RhY2suYXBwZW5kKFJlbmRlclN1cmZhY2VSZWdpb24oKSk7CisgICAg
ICAgIHN0YWNrLmxhc3QoKS5zdXJmYWNlID0gbmV3VGFyZ2V0OworICAgIH0gZWxzZSBpZiAoc3Rh
Y2subGFzdCgpLnN1cmZhY2UgIT0gbmV3VGFyZ2V0KSB7CisgICAgICAgIGNvbnN0IFJlbmRlclN1
cmZhY2VSZWdpb24mIHByZXZpb3VzID0gc3RhY2subGFzdCgpOworICAgICAgICBzdGFjay5hcHBl
bmQoUmVuZGVyU3VyZmFjZVJlZ2lvbigpKTsKKyAgICAgICAgc3RhY2subGFzdCgpLnN1cmZhY2Ug
PSBuZXdUYXJnZXQ7CisgICAgICAgIHN0YWNrLmxhc3QoKS5vY2NsdWRlZEluU2NyZWVuID0gcHJl
dmlvdXMub2NjbHVkZWRJblNjcmVlbjsKKyAgICB9Cit9CisKKy8vIFBvcCB0aGUgdG9wIG9mIHRo
ZSBzdGFjayBvZmYsIHB1c2ggb24gdGhlIG5ldyBzdXJmYWNlLCBhbmQgbWVyZ2UgdGhlIG9sZCB0
b3AncyBvY2NsdXNpb24gaW50byB0aGUgbmV3IHRvcCBzdXJmYWNlLgorc3RhdGljIHZvaWQgbGVh
dmVUYXJnZXRSZW5kZXJTdXJmYWNlKFZlY3RvcjxSZW5kZXJTdXJmYWNlUmVnaW9uPiYgc3RhY2ss
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbmV3VGFyZ2V0KQoreworICAgIGludCBsYXN0SW5kZXgg
PSBzdGFjay5zaXplKCkgLSAxOworICAgIGJvb2wgc3VyZmFjZVdpbGxCZUF0VG9wQWZ0ZXJQb3Ag
PSBzdGFjay5zaXplKCkgPiAxICYmIHN0YWNrW2xhc3RJbmRleCAtIDFdLnN1cmZhY2UgPT0gbmV3
VGFyZ2V0OworCisgICAgaWYgKHN1cmZhY2VXaWxsQmVBdFRvcEFmdGVyUG9wKSB7CisgICAgICAg
IC8vIE1lcmdlIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGRvd24uCisgICAgICAgIHN0YWNrW2xhc3RJ
bmRleCAtIDFdLm9jY2x1ZGVkSW5TY3JlZW4udW5pdGUoc3RhY2tbbGFzdEluZGV4XS5vY2NsdWRl
ZEluU2NyZWVuKTsKKyAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIFJlcGxhY2UgdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2l0aCB0aGUgbmV3IHB1c2hl
ZCBzdXJmYWNlLiBDb3B5IHRoZSBvY2NsdWRlZCByZWdpb24gdG8gdGhlIHRvcC4KKyAgICAgICAg
c3RhY2subGFzdCgpLnN1cmZhY2UgPSBuZXdUYXJnZXQ7CisgICAgfQorfQorCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKICAgICAvLyBVc2UgRnJvbnRU
b0JhY2sgdG8gYWxsb3cgZm9yIHRlc3Rpbmcgb2NjbHVzaW9uIGFuZCBwZXJmb3JtaW5nIGN1bGxp
bmcgZHVyaW5nIHRoZSB0cmVlIHdhbGsuCiAgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8TGF5
ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpGcm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKIAorICAgIC8vIFRoZSBzdGFjayBo
b2xkcyBvY2NsdWRlZCByZWdpb25zIGZvciBzdWJ0cmVlcyBpbiB0aGUgUmVuZGVyU3VyZmFjZS1M
YXllciB0cmVlLCBzbyB0aGF0IHdoZW4gd2UgbGVhdmUgYSBzdWJ0cmVlIHdlIG1heQorICAgIC8v
IGFwcGx5IGEgbWFzayB0byBpdCwgYnV0IG5vdCB0byB0aGUgcGFydHMgb3V0c2lkZSB0aGUgc3Vi
dHJlZS4KKyAgICAvLyAtIFRoZSBmaXJzdCB0aW1lIHdlIHNlZSBhIG5ldyBzdWJ0cmVlIHVuZGVy
IGEgdGFyZ2V0LCB3ZSBhZGQgdGhhdCB0YXJnZXQgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2suIFRo
aXMgY2FuIGhhcHBlbiBhcyBhIGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIG9yIGFzIGEgdGFy
Z2V0IHN1cmZhY2UuCisgICAgLy8gLSBXaGVuIHdlIHZpc2l0IGEgdGFyZ2V0IHN1cmZhY2UsIHdl
IGFwcGx5IGl0cyBtYXNrIHRvIGl0cyBzdWJ0cmVlLCB3aGljaCBpcyBhdCB0aGUgdG9wIG9mIHRo
ZSBzdGFjay4KKyAgICAvLyAtIFdoZW4gd2UgdmlzaXQgYSBsYXllciByZXByZXNlbnRpbmcgaXRz
ZWxmLCB3ZSBhZGQgaXRzIG9jY2x1c2lvbiB0byB0aGUgY3VycmVudCBzdWJ0cmVlLCB3aGljaCBp
cyBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKyAgICAvLyAtIFdoZW4gd2UgdmlzaXQgYSBsYXll
ciByZXByZXNlbnRpbmcgYSBjb250cmlidXRpbmcgc3VyZmFjZSwgdGhlIGN1cnJlbnQgdGFyZ2V0
IHdpbGwgbmV2ZXIgYmUgdGhlIHRvcCBvZiB0aGUgc3RhY2sgc2luY2Ugd2UganVzdCBjYW1lIGZy
b20gdGhlIGNvbnRyaWJ1dGluZyBzdXJmYWNlLgorICAgIC8vIFdlIG1lcmdlIHRoZSBvY2NsdXNp
b24gYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2l0aCB0aGUgbmV3IGN1cnJlbnQgc3VidHJlZS4g
VGhpcyBuZXcgdGFyZ2V0IGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjayBpZiBub3QgYWxyZWFkeSB0
aGVyZS4KKyAgICBWZWN0b3I8UmVuZGVyU3VyZmFjZVJlZ2lvbj4gdGFyZ2V0U3VyZmFjZVN0YWNr
OworCiAgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpl
bmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlw
ZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC5yZXByZXNlbnRzVGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXQtPnJlbmRlclN1cmZhY2UoKS0+
ZHJhd09wYWNpdHkoKSk7CisKKyAgICAgICAgICAgIGVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZSh0
YXJnZXRTdXJmYWNlU3RhY2ssIGl0LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICAgICAgcGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoKml0LCBwYWludFR5cGUpOworICAgICAg
ICAgICAgLy8gRklYTUU6IGFkZCB0aGUgcmVwbGljYSBsYXllciB0byB0aGUgY3VycmVudCBvY2Ns
dXNpb24KKworICAgICAgICAgICAgaWYgKGl0LT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgICAg
ICB0YXJnZXRTdXJmYWNlU3RhY2subGFzdCgpLm9jY2x1ZGVkSW5TY3JlZW4gPSBSZWdpb24oKTsK
ICAgICAgICAgfSBlbHNlIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpIHsKICAgICAgICAgICAg
IEFTU0VSVCghaXQtPmJvdW5kcygpLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBwYWludENvbnRl
bnRzSWZEaXJ0eSgqaXQsIHBhaW50VHlwZSk7CisKKyAgICAgICAgICAgIGVudGVyVGFyZ2V0UmVu
ZGVyU3VyZmFjZSh0YXJnZXRTdXJmYWNlU3RhY2ssIGl0LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkp
OworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkoKml0LCBwYWludFR5cGUsIHRhcmdl
dFN1cmZhY2VTdGFjay5sYXN0KCkub2NjbHVkZWRJblNjcmVlbik7CisgICAgICAgICAgICBpdC0+
YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZSh0YXJnZXRTdXJmYWNlU3RhY2subGFzdCgpLm9j
Y2x1ZGVkSW5TY3JlZW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVhdmVUYXJn
ZXRSZW5kZXJTdXJmYWNlKHRhcmdldFN1cmZhY2VTdGFjaywgaXQudGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyKCktPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGQ5MmFkYzE2NmFlNjdlM2FmMDU0Mjk1MTBjOTdkM2Zl
MzY4MzUwOWYuLjA2NzUxMjFhNjlmOWRiMWMwMDAwZmZkM2U1YTY1YTZkN2VjMzA3NWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIENDTGF5ZXJU
cmVlSG9zdEltcGw7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7CiBjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKK2NsYXNzIFJlZ2lvbjsKIGNsYXNz
IFRleHR1cmVBbGxvY2F0b3I7CiBjbGFzcyBUZXh0dXJlTWFuYWdlcjsKIApAQCAtMjA1LDcgKzIw
Niw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8T3duUHRyPE1hbmFnZWRUZXh0dXJl
PiA+IFRleHR1cmVMaXN0OwogCiAgICAgZW51bSBQYWludFR5cGUgeyBQYWludFZpc2libGUsIFBh
aW50SWRsZSB9OwotICAgIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hy
b21pdW0qLCBQYWludFR5cGUpOworICAgIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KExheWVyQ2hyb21pdW0qLCBQYWludFR5cGUsIGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5T
cGFjZSk7CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiwgUGFp
bnRUeXBlKTsKICAgICB2b2lkIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExh
eWVyQ2hyb21pdW0qLCBQYWludFR5cGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcAppbmRl
eCA3NzEwMDMyZTA1YzZhZmFhNDMxNzlkOWE3OTI5YTA4MWYzZTBmYjBlLi45OWZlYjIxNzBkZmU5
ODM4N2I5ZGM4ODIxMmUwN2RhOTc0ZDI5ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAK
QEAgLTYyLDE4ICs2Miw2IEBAIHN0YXRpYyBib29sIHJlZ2lvbkNvbnRhaW5zUmVjdChjb25zdCBS
ZWdpb24mIHJlZ2lvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICByZXR1cm4gcmVjdFJlZ2lv
bi5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGVuY2xvc2VkSW50UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZmxvYXQgeCA9IGNlaWxmKHJlY3QueCgpKTsKLSAgICBm
bG9hdCB5ID0gY2VpbGYocmVjdC55KCkpOwotICAgIC8vIEEgcmVjdCBvZiB3aWR0aCAwIHNob3Vs
ZCBub3QgYmVjb21lIGEgcmVjdCBvZiB3aWR0aCAtMS4KLSAgICBmbG9hdCB3aWR0aCA9IG1heDxm
bG9hdD4oZmxvb3JmKHJlY3QubWF4WCgpKSAtIHgsIDApOwotICAgIGZsb2F0IGhlaWdodCA9IG1h
eDxmbG9hdD4oZmxvb3JmKHJlY3QubWF4WSgpKSAtIHksIDApOwotCi0gICAgcmV0dXJuIEludFJl
Y3QoY2xhbXBUb0ludGVnZXIoeCksIGNsYW1wVG9JbnRlZ2VyKHkpLAotICAgICAgICAgICAgICAg
ICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Ci19Ci0K
IHZvaWQgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlz
dCkKIHsKICAgICBpZiAoIXF1YWRMaXN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4
IGQyZTFjZmVmOTNlMjgyMTY2ZGE4NTEyNTZjOTVjMGU2NTEyYzY5YmEuLmIxZmE3MjkxODQwMWUz
MjQwZTQxZDEzZDJlMGMyN2QwYzU2YWQ3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVk
ZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgpAQCAtMzUsNiAr
MzYsMTIgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKyNkZWZpbmUgRVhQRUNUX0VR
X1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNU
X0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkp
OyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCiBuYW1lc3BhY2Ug
ewogCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5
ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9y
LCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29s
IHByZXNlcnZlczNEKQpAQCAtNTk1LDQgKzYwMiwxNzQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAvLyAgLSB0ZXN0
IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uCiAvLwogCitURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9u
KQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVp
bmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNldE9wYXF1
ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxh
eWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJ
WE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3Ig
aW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAg
ICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAg
b2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5T
cGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3
MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3Rz
KCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFk
ZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlvbikKK3sKKyAgICAvLyBUaGlzIHRlc3Rz
IHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9j
Y2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVy
ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwor
ICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQo
bGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAg
bGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICBsYXllclRyYW5zZm9ybS5y
b3RhdGUoOTApOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCks
IEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7
CisKKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIg
c3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0
byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5h
ZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVD
VF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0
aW9uKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUg
YmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoMjAsIDIw
KTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBm
YWxzZSk7CisKKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3Qt
bGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwg
aGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxh
eWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAg
IEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworfQorCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJv
dGF0ZWRTdXJmYWNlKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNm
b3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVS
ZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQt
PmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNm
b3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRU
cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwg
LTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNl
dE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBp
bnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZp
eCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVI
b3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJl
bnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdp
b24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1ZGVkLmJv
dW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKwor
ICAgIC8qIEp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92ZSBvcGFxdWUgcmVjdCBmcm9tIHxsYXll
cnw6CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8MzAgIFZpc2libGUgcmVnaW9uIG9m
IHxsYXllcnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAgICAgICAgfCAgICAgICAgICAg
cm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
IHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAg
ICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAg
ICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICA9PT4gICAg
IHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgIHwx
MCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgfCAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAgICAgIHwgICAgfCAgfCAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8
Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8v
Ly8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8v
Ly8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0tfC0tfC0tLS0tLS0tLS0tLS0r
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICArLS18LS18LS0tLS0tLS0tLS0t
LS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwxMHwgICAgIDcwICAgICAgICAg
ICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8
ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAg
ICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAor
ICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAg
ICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MTB8CisgICAg
ICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgICAg
ICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLSsKKyAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNTAwCisgICAgICovCit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAyODBl
M2FmM2YxYzJiODQ0M2M3MmRmNTNlMTQxM2NkODdhMDljOWI2Li5jZTI5MzM4OGFjOWUxOTA5ZmYz
YzE2MjZhNGRkYmQ5ZTgwZTRiYjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24u
aCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3Iu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAgLTk5NSw5ICs5OTYsOSBAQCBwdWJsaWM6CiAgICAg
aW50IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRhdGVDb3VudDsgfQogICAgIHZvaWQgcmVz
ZXRVcGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9IDA7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJ
ZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKICAgICB7Ci0gICAgICAg
IENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVkZWRTY3JlZW5T
cGFjZSk7CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0NvdW50Kys7CiAgICAgfQogCkBAIC0xMjE4
LDQgKzEyMTksMTk2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0QXRvbWljQ29tbWl0LCBy
dW5NdWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCisjZGVmaW5lIEVYUEVDVF9F
UV9SRUNUKGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVD
VF9FUShhLnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgp
KTsgXAorICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKKworY2xhc3MgVGVz
dExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUZXN0TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKKyAgICB7
CisgICAgICAgIG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IG9jY2x1ZGVkU2NyZWVuU3BhY2U7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb2NjbHVkZWRTY3JlZW5TcGFjZTsgfQorICAgIHZvaWQgY2xlYXJPY2NsdWRlZFNj
cmVlblNwYWNlKCkgeyBtX29jY2x1ZGVkU2NyZWVuU3BhY2UgPSBSZWdpb24oKTsgfQorCitwcml2
YXRlOgorICAgIFRlc3RMYXllckNocm9taXVtKCkgOiBMYXllckNocm9taXVtKCkgeyB9CisKKyAg
ICBSZWdpb24gbV9vY2NsdWRlZFNjcmVlblNwYWNlOworfTsKKworc3RhdGljIHZvaWQgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hy
b21pdW0qIHBhcmVudCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3Qg
SW50U2l6ZSYgYm91bmRzLCBib29sIG9wYXF1ZSkKK3sKKyAgICBsYXllci0+cmVtb3ZlQWxsQ2hp
bGRyZW4oKTsKKyAgICBpZiAocGFyZW50KQorICAgICAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVy
KTsKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEFu
Y2hvclBvaW50KGFuY2hvcik7CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAg
ICBsYXllci0+c2V0Qm91bmRzKGJvdW5kcyk7CisgICAgbGF5ZXItPnNldE9wYXF1ZShvcGFxdWUp
OworICAgIGxheWVyLT5jbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UoKTsKK30KKworY2xhc3MgQ0NM
YXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRl
c3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbigpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBSZWZQdHI8
VGVzdExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBjaGlsZCA9IFRlc3RMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBjaGls
ZDIgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxUZXN0TGF5
ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBtYXNrID0gVGVzdExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICAgICAg
Y2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICAgICAgY2hpbGRUcmFuc2Zv
cm0ucm90YXRlKDkwKTsKKyAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0y
NTApOworCisgICAgICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgICAg
IC8vIFNlZSBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmxheWVyQWRkc1NlbGZUb09jY2x1ZGVk
UmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlIGZvciBhIG5pY2UgdmlzdWFsIG9mIHRoZXNlIGxheWVy
cyBhbmQgaG93IHRoZXkgZW5kIHVwCisgICAgICAgIC8vIHBvc2l0aW9uZWQgb24gdGhlIHNjcmVl
bi4KKworICAgICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIgaXMgcm90YXRlZCBhbmQgdGhlIGdyYW5k
Q2hpbGQgaXMgb3BhcXVlLCBidXQgY2xpcHBlZCB0byB0aGUgY2hpbGQgYW5kIHJvb3RMYXllcgor
ICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwgMCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZC5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOwor
ICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNo
aWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgx
MCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29t
cGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGdyYW5kQ2hpbGQt
Pm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwg
Z3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIGNoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGNoaWxkLT5v
Y2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNw
YWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVk
ZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hp
bGQgbGF5ZXIgaXMgb3BhcXVlLCB0aGVuIGl0IGFkZHMgdG8gdGhlIG9jY2x1c2lvbiBzZWVuIGJ5
IHRoZSByb290TGF5ZXIuCisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9v
dExheWVyLmdldCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJh
bnNmb3JtLCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAw
LCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFu
ZENoaWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjAp
LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIHJvb3RMYXllci0+
b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBy
b290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAg
ICAgLy8gQWRkIGEgc2Vjb25kIGNoaWxkIHRvIHRoZSByb290IGxheWVyIGFuZCB0aGUgcmVnaW9u
cyBzaG91bGQgbWVyZ2UKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290
TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDcwLCAyMCksIEludFNpemUoNTAw
LCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGls
ZC5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCks
IEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNl
dFJvb3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdw
b3J0U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51
cGRhdGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgp
OworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVk
ZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENo
aWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVu
U3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVk
U2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMzAsIDMwLCA3MCwgNzApLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAy
MCwgNzAsIDgwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMnUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBNb3ZlIHRoZSBzZWNvbmQgY2hpbGQgdG8gYmUg
c3VyZS4KKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0
KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0
cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwg
cm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUo
NTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXll
cihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShy
b290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXll
cnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAg
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5T
cGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENoaWxkLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5i
b3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3Bh
Y2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAs
IDMwLCA3MCwgNzApLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMo
KS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAzMCwgOTAsIDcw
KSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBF
WFBFQ1RfRVEoMnUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQgbGF5ZXIgaGFzIGEgbWFzayBvbiBpdCwg
dGhlbiBpdCBzaG91bGRuJ3QgY29udHJpYnV0ZSB0byBvY2NsdXNpb24gb24gc3R1ZmYgYmVsb3cg
aXQKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCks
IDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVl
KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9v
dExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAw
LCA1MDApLCB0cnVlKTsKKworICAgICAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2suZ2V0KCkp
OworCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRz
KCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQw
LCA3MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVk
U2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5v
Y2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNw
YWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVk
ZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hp
bGQgbGF5ZXIgd2l0aCBhIG1hc2sgaXMgYmVsb3cgY2hpbGQyLCB0aGVuIGNoaWxkMiBzaG91bGQg
Y29udHJpYnV0ZSB0byBvY2NsdXNpb24gb24gZXZlcnl0aGluZywgYW5kIGNoaWxkIHNob3VsZG4n
dCBjb250cmlidXRlIHRvIHRoZSByb290TGF5ZXIKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAg
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5n
ZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMw
KSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwg
dHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgp
LCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9h
dFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5j
b21taXRDb21wbGV0ZSgpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgY2hp
bGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MHUsIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNzAsIDkwLCAzMCksIGdyYW5kQ2hpbGQtPm9j
Y2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgZ3Jh
bmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDAsIDkwLCA2MCksIGNoaWxkLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMnUsIGNoaWxkLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBLaWxsIHRoZSBsYXll
clRyZWVIb3N0IGltbWVkaWF0ZWx5LgorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RM
YXllcigwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CisKKyAgICAgICAgZW5k
VGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICB9Cit9OworCitTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9URVNUX0YoQ0NMYXllclRyZWVIb3N0
VGVzdExheWVyT2NjbHVzaW9uKQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAK
aW5kZXggZjBiNWM0MTFiNjU2YWVkZTc1OTU3MTBlNGQ4Y2ZkN2QyNGRiNTMzYy4uMWRmMjdjMDEx
MTliMjY1N2U4MmUyYTA3OTdiMWMwMWI1MGQzMDVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgiCiAjaW5j
bHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1h
bmFnZXIuaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNj
L0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKQEAgLTEzOCw3ICsxMzksOCBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICAgICAgY2FudmFzLT5jb250ZW50Q2hhbmdlZCgpOwogICAgICAgICBFWFBFQ1RfVFJVRShj
YW52YXMtPm5lZWRzRGlzcGxheSgpKTsKLSAgICAgICAgY2FudmFzLT5wYWludENvbnRlbnRzSWZE
aXJ0eSgpOworICAgICAgICBSZWdpb24gb2NjbHVkZWRTY3JlZW5TcGFjZTsKKyAgICAgICAgY2Fu
dmFzLT5wYWludENvbnRlbnRzSWZEaXJ0eShvY2NsdWRlZFNjcmVlblNwYWNlKTsKICAgICAgICAg
RVhQRUNUX0ZBTFNFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOwogICAgICAgICB7CiAgICAgICAg
ICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwCmluZGV4IGI4NTBmODI0MWNjMDgwMTQxMzhlMzgwOGMwNjE0Y2E2MTA0ZTYzMjEuLmIwMzUw
ZGI0OTVmYjU2MmIzNTgxNDA4N2VmNjQxMGQ3NjE5NWJhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1
ZGUgIkZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVV
cGRhdGVyLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIu
aCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oIiAvLyBGb3IgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkCkBAIC0zOSw2ICs0MCwx
MiBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCisj
ZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgp
KTsgXAorICAgIEVYUEVDVF9FUShhLnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEud2lk
dGgoKSwgYi53aWR0aCgpKTsgXAorICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgp
KTsKKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgRmFrZVRleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMg
VGV4dHVyZUFsbG9jYXRvciB7CkBAIC03MCwxNyArNzcsMjAgQEAgcHVibGljOgogICAgIGludCBw
cmVwYXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3ByZXBhcmVDb3VudDsgfQogICAgIHZvaWQg
Y2xlYXJQcmVwYXJlQ291bnQoKSB7IG1fcHJlcGFyZUNvdW50ID0gMDsgfQogCisgICAgdm9pZCBz
ZXRPcGFxdWVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgb3BhcXVlUGFpbnRSZWN0KSB7IG1fb3Bh
cXVlUGFpbnRSZWN0ID0gb3BhcXVlUGFpbnRSZWN0OyB9CisKICAgICAvLyBMYXN0IHJlY3QgcGFz
c2VkIHRvIHByZXBhcmVUb1VwZGF0ZSgpLgogICAgIGNvbnN0IEludFJlY3QmIGxhc3RVcGRhdGVS
ZWN0KCkgIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFVwZGF0ZVJlY3Q7IH0KIAogICAgIHZpcnR1YWwg
UGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRl
eHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZShNYW5h
Z2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7IH0KICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhl
bEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0pIHsgcmV0dXJuIFNhbXBsZWRUZXhl
bEZvcm1hdFJHQkE7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwgaW50LCBmbG9hdCwgSW50UmVjdCop
OworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IEludFNpemUmLCBpbnQsIGZsb2F0LCBJbnRSZWN0KiByZXN1bHRpbmdPcGFx
dWVSZWN0KTsKIAogcHJpdmF0ZToKICAgICBpbnQgbV9wcmVwYXJlQ291bnQ7CiAgICAgSW50UmVj
dCBtX3JlY3RUb0ludmFsaWRhdGU7CiAgICAgSW50UmVjdCBtX2xhc3RVcGRhdGVSZWN0OworICAg
IEludFJlY3QgbV9vcGFxdWVQYWludFJlY3Q7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IG1fbGF5ZXI7CiB9OwogCkBAIC0xMzksNyArMTQ5LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBt
X3RleHR1cmVNYW5hZ2VyOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoKQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdpb24m
IC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiAgICAgewogICAgICAgICBwcmVwYXJlVG9VcGRh
dGUodmlzaWJsZUxheWVyUmVjdCgpKTsKICAgICB9CkBAIC0xODcsNyArMTk3LDcgQEAgdm9pZCBG
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdAogICAgICAgICBtX3JlY3RUb0ludmFsaWRhdGUgPSBJbnRSZWN0KCk7
CiAgICAgICAgIG1fbGF5ZXIgPSAwOwogICAgIH0KLSAgICAqcmVzdWx0aW5nT3BhcXVlUmVjdCA9
IEludFJlY3QoKTsKKyAgICAqcmVzdWx0aW5nT3BhcXVlUmVjdCA9IG1fb3BhcXVlUGFpbnRSZWN0
OwogfQogCiBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQpAQCAt
NDYwLDQgKzQ3MCw5OCBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHNraXBzRHJhd0dl
dHNSZXNldCkKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKK1RF
U1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdpb24p
Cit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworCisgICAgLy8gVGhlIHRpbGUg
c2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28g
dGlsZXMgaW4gdmFyaW91cyB3YXlzLgorCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIEludFJl
Y3QgY29udGVudEJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAyMDApOworICAgIEludFJlY3Qg
dmlzaWJsZUJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAxNTApOworCisgICAgbGF5ZXItPnNl
dEJvdW5kcyhjb250ZW50Qm91bmRzLnNpemUoKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXll
clJlY3QodmlzaWJsZUJvdW5kcyk7CisgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOworCisg
ICAgLy8gVGhlIHNjcmVlblNwYWNlVHJhbnNmb3JtIGlzIHZlcmlmaWVkIGluIENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3RzCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFu
c2Zvcm07CisgICAgbGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKHNjcmVlblNwYWNlVHJh
bnNmb3JtKTsKKworICAgIC8vIElmIHRoZSBsYXllciBpcyBvcGFxdWUgdGhlbiB0aGUgb2NjbHVk
ZWQgcmVnaW9uIHNob3VsZCBiZSB0aGUgd2hvbGUgbGF5ZXIncyB2aXNpYmxlIHJlZ2lvbi4KKyAg
ICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250
ZW50Qm91bmRzKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOwor
CisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRT
Y3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QodmlzaWJsZUJvdW5kcywg
b2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5z
aXplKCkpOworCisgICAgLy8gSWYgdGhlIGxheWVyIGlzIG5vdCBvcGFxdWUgdGhlbiB0aGUgb2Nj
bHVkZWQgcmVnaW9uIHNob3VsZCBiZSBlbXB0eS4KKyAgICBsYXllci0+c2V0T3BhcXVlKGZhbHNl
KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXIt
PnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9u
KCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVY
UEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gSWYgdGhlIGxh
eWVyIHBhaW50cyBvcGFxdWUgY29udGVudCwgdGhlbiB0aGUgb2NjbHVkZWQgcmVnaW9uIHNob3Vs
ZCBtYXRjaCB0aGUgdmlzaWJsZSBvcGFxdWUgY29udGVudC4KKyAgICBJbnRSZWN0IG9wYXF1ZVBh
aW50UmVjdCA9IEludFJlY3QoMTAsIDEwLCA5MCwgMTkwKTsKKyAgICBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KG9wYXF1ZVBhaW50UmVjdCk7Cisg
ICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5wcmVw
YXJlVG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOwor
ICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRz
KSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMo
KS5zaXplKCkpOworCisgICAgLy8gSWYgd2UgcGFpbnQgYWdhaW4gd2l0aG91dCBpbnZhbGlkYXRp
bmcsIHRoZSBzYW1lIHN0dWZmIHNob3VsZCBiZSBvY2NsdWRlZC4KKyAgICBsYXllci0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CisgICAg
bGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0g
UmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVk
ZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3QsIHZp
c2libGVCb3VuZHMpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2Ns
dWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgdHJhbnNmb3Jt
ZWQgdGhlbiB0aGUgcmVzdWx0aW5nIG9jY2x1ZGVkIGFyZWEgbmVlZHMgdG8gYmUgdHJhbnNmb3Jt
ZWQgdG8gaXRzIHRhcmdldCBzcGFjZS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAs
IGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHRyYW5zZm9ybS5yb3RhdGUoOTAp
OworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwg
LWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
MTAsIDEwKTsKKyAgICBzY3JlZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5k
cy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICBzY3Jl
ZW5TcGFjZVRyYW5zZm9ybSAqPSB0cmFuc2Zvcm07CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zvcm0u
dHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhl
aWdodCgpIC8gMi4wKTsKKyAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oc2NyZWVu
U3BhY2VUcmFuc2Zvcm0pOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJvdW5k
cyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2Ns
dWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChzY3JlZW5TcGFj
ZVRyYW5zZm9ybS5tYXBSZWN0KGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3QsIHZpc2libGVC
b3VuZHMpKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQu
cmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gQnV0IGEgbm9uLWF4aXMtYWxpZ25lZCB0cmFuc2Zv
cm0gZG9lcyBub3QgZ2V0IGNvbnNpZGVyZWQgZm9yIG9jY2x1c2lvbi4KKyAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWln
aHQoKSAvIDIuMCk7CisgICAgdHJhbnNmb3JtLnJvdGF0ZSg1KTsKKyAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdo
dCgpIC8gMi4wKTsKKyAgICBzY3JlZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJv
dW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICBz
Y3JlZW5TcGFjZVRyYW5zZm9ybSAqPSB0cmFuc2Zvcm07CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zv
cm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRz
LmhlaWdodCgpIC8gMi4wKTsKKyAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0pOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJv
dW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9P
Y2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICAvLyBGSVhNRTogSWYgd2UgZmluZCBh
biBvcGFxdWUgcmVjdCBjb250YWluZWQgaW4gdGhlIHJvdGF0ZWQgbm9uLWF4aXMtYWxpZ25lZCBy
ZWN0LCB0aGVuCisgICAgLy8gdGhpcyB3b24ndCBiZSBhbiBlbXB0eSByZXN1bHQuCisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VR
KDB1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124594</attachid>
            <date>2012-01-30 13:56:07 -0800</date>
            <delta_ts>2012-01-30 16:39:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120130165606.patch</filename>
            <type>text/plain</type>
            <size>62659</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJjODEzN2Q1ODY0NTNh
ZDAwOGJlMGJjYWFiNDlhYjY2NjE1OGFiNC4uYWM0MzgxZDBmNDEyOWQ1ODhhMDc3NjRiMjNlNTkx
Y2U3YTQyZDhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTI3ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAsIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwLCBDQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2VkSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKEltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
aXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2Nj
bHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6cG9wQW5kUHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6CisKIDIwMTIt
MDEtMzAgIFBhcmFnIFJhZGtlICA8bnJxdjYzQG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OIChyODI1ODApOiBSZXByb2R1Y2libGUgY3Jhc2ggaW4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNvbXB1dGVMZW5ndGhEb3VibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzA4ODBh
NDE2Y2MxODE3OTc4NGQ2MDNhYWQ0MWM0MjI0NWFhNjE1ZS4uZjU2OGY4ODJlMjU3OWIzY2YyNDli
NGQ3ZTVmNmQ4Zjc0ZWI5OWZmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzOCBAQAorMjAxMi0wMS0yNyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIENvbXB1dGUgb2NjbHVzaW9uIGR1cmluZyBwYWludCBsb29w
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg1OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2lu
Zzo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFRlc3RM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdURjo6VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OlRlc3RMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6
CisgICAgICAgIChXVEY6OlRlc3RMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAg
ICAoV1RGOjpUZXN0TGF5ZXJDaHJvbWl1bTo6b2NjbHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAg
IChXVEY6OlRlc3RMYXllckNocm9taXVtOjpjbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAg
ICAgICAoV1RGOjpUZXN0TGF5ZXJDaHJvbWl1bTo6VGVzdExheWVyQ2hyb21pdW0pOgorICAgICAg
ICAoV1RGOjpzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RMYXllck9jY2x1c2lvbjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uKToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uOjpiZWdpblRl
c3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb246OmFm
dGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0OjpmdWxsTGlmZWN5
Y2xlVGVzdCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6Cisg
ICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFxdWVQYWludFJlY3Qp
OgorICAgICAgICAoRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV1RGOjpGYWtl
VGlsZWRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6
OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV1RG
OjpURVNUKToKKyAgICAgICAgKFdURik6CisKIDIwMTItMDEtMzAgIEpvY2hlbiBFaXNpbmdlciAg
PGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSByZW1vdmUgZXhpdCB0
aW1lIGRlc3RydWN0b3JzIGZyb20gVGV4dHVyZU1hbmFnZXJUZXN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCA0NmZjYTZjMjdlOWU5M2U2
Mzk0NjgyNzVmMzc1OTU5NGY1YzkyYjc3Li41OTVhZjJhMzIzYTNlZTVhYTQ4ZjY4MDg1YjY2NjZh
N2Q5ZDQ5NGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5jcHAKQEAgLTIxOCw2ICsyMTgsMTkgQEAgSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgICAgICAgICAgICBjbGFtcFRvSW50ZWdlcih3
aWR0aCksIGNsYW1wVG9JbnRlZ2VyKGhlaWdodCkpOwogfQogCitJbnRSZWN0IGVuY2xvc2VkSW50
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaW50IHggPSBjbGFtcFRvSW50ZWdl
cihjZWlsZihyZWN0LngoKSkpOworICAgIGludCB5ID0gY2xhbXBUb0ludGVnZXIoY2VpbGYocmVj
dC55KCkpKTsKKyAgICBmbG9hdCBtYXhYID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHJlY3QubWF4
WCgpKSk7CisgICAgZmxvYXQgbWF4WSA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZihyZWN0Lm1heFko
KSkpOworICAgIC8vIEEgcmVjdCBvZiB3aWR0aCAwIHNob3VsZCBub3QgYmVjb21lIGEgcmVjdCBv
ZiB3aWR0aCAtMSBkdWUgdG8gY2VpbC9mbG9vci4KKyAgICBpbnQgd2lkdGggPSBtYXgoY2xhbXBU
b0ludGVnZXIobWF4WCAtIHgpLCAwKTsKKyAgICBpbnQgaGVpZ2h0ID0gbWF4KGNsYW1wVG9JbnRl
Z2VyKG1heFkgLSB5KSwgMCk7CisKKyAgICByZXR1cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKK30KKwogRmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYg
KHNyY1JlY3Qud2lkdGgoKSA9PSAwIHx8IHNyY1JlY3QuaGVpZ2h0KCkgPT0gMCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggMTQwOTA3MWIxMTk4
ODNkM2IwODYyNzBhYTRjZjc4ODRmNGZiYTYyYy4uMjJjMTcxYzVhYjRkMTg4OTYwZTgyZmU3YmUw
MjE4ZTQxY2Y4YTVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmgKQEAgLTI3MCw2ICsyNzAsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEZsb2F0UmVjdCYgYSwgY29uc3QgRmxvYXRSZWN0JiBiKQogCiBJbnRSZWN0IGVuY2xvc2luZ0lu
dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKKy8vIFJldHVybnMgYSB2YWxpZCBJbnRSZWN0IGNv
bnRhaW5lZCB3aXRoaW4gdGhlIGdpdmVuIEZsb2F0UmVjdC4KK0ludFJlY3QgZW5jbG9zZWRJbnRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworCiAvLyBNYXAgcmVjdCByIGZyb20gc3JjUmVjdCB0byBh
biBlcXVpdmFsZW50IHJlY3QgaW4gZGVzdFJlY3QuCiBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBG
bG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDE1
MDVhZGFjMjQzZTA3NjY1ZDJkZGFiMjhmNDcwM2ZmOGVmNWI5NDMuLjA5MDU0NzQxODZlZmMyYzQw
YTdhZGE0NTg1OTVlMGJmODNmMzY4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9t
aXVtLmNwcApAQCAtOTEsNyArOTEsNyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KCkgY29uc3QKICAgICAgICAgJiYgbV9jb250ZXh0ICYmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUik7CiB9CiAKLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSgpCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250
ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiAvKiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogewog
ICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmgKaW5kZXggODM2MTVhMWYyMjM1NjE2NDYyZWIxZjhkNDEyMmUxYWQ4
ZTU4YzkyMi4uZWNiYTkwZjRlZDE2MmM2OGRjNGYwOGU2MTBiZGQ0ZjcyZDliMzM5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKQEAgLTQwLDYgKzQwLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBSZWdpb247CiAK
IC8vIEEgbGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKIGNsYXNzIENh
bnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKQEAgLTUy
LDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgpOwog
CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
SWZEaXJ0eShjb25zdCBSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwogCiAgICAgdmlydHVh
bCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Kik7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1
cmVVcGRhdGVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTI5
ZmNlMDM2NGE4Mjg1NWFhNDA2Mzk3MTU2ZTBmYmI0ZTNhOTUwZS4uMzQzMDMxMTBmYTljYWZkZjI2
Y2E5YmNmZWQ2ZTI0YzRmNDAyZjJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcApAQCAtOTMsNyArOTMsNyBAQCBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0Nv
bnRlbnQoKSBjb25zdAogICAgIHJldHVybiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVu
dCgpICYmIG1fZGVsZWdhdGU7CiB9CiAKLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3JlZW5TcGFjZSAqLykKIHsKICAg
ICB1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uaAppbmRleCA0MjY2NzljYWZhYmI3Mzk0YzAyZTc5MDFiZTMzMmQ3YmNiNWUwODFh
Li41ZWZmNmEzZDYwYTEyZDEyMGViNzIwMDBkMzUwYjFmYjU4MzhlYTgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmgKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVy
OworY2xhc3MgUmVnaW9uOwogCiBjbGFzcyBDb250ZW50TGF5ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6
CkBAIC01OCw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyRGVsZWdhdGUoKSB7IG1f
ZGVsZWdhdGUgPSAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFj
ZSk7CiAgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCiAgICAg
dmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDAxNTRmYjI4MzE0ZjNlNmM5MjQwNDdiYjQ4MzY3MzY5MmRmY2ZhYjcuLjgzMWNi
ZTgwOTYzYTNhODAwYjhhYTQ2YTY5OTQ4ZjRmYzdmNWVjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVt
OjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9
CiAKLXZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCit2b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiAv
KiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogewogICAgIGlmIChtX25lZWRzRGlzcGxheSkgewog
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IGQ3MTI5MjQ1MWMzNTU1ZWFmMGMxNmNmOWYyYzNmMzk1YmUwNzUzMDQuLmFiNWMxYjI3YjJj
NzVhNzVhZTM0Mzc5M2NhNTM4NzlmMjU1MWRkMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2U7
CiBjbGFzcyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiAKIC8vIEEg
TGF5ZXIgdGhhdCBjb250YWlucyBvbmx5IGFuIEltYWdlIGVsZW1lbnQuCiBjbGFzcyBJbWFnZUxh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgVGlsZWRMYXllckNocm9taXVtIHsKQEAgLTUzLDcgKzU0LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfkltYWdlTGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmly
dHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShj
b25zdCBSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwogICAgIHZpcnR1YWwgYm9vbCBuZWVk
c0NvbnRlbnRzU2NhbGUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0Q29udGVudHMoSW1hZ2UqIGlt
YWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzMxYTg2MGJjN2IzMzJmYzcwZjk4YzVk
YTBmZDJhZjJjOTkyYTA3OS4uN2Y1ZWE4ZGQ2MzBmMDlmMmYzNzUyOTQ0NTNkYTEwNzUxMjBiYTc1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJO
YXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjZW5k
aWYKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIK
ICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2Fu
dmFzLmgiCkBAIC00NjgsNiArNDY5LDM1IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHNTY2FsZShmbG9hdCBjb250ZW50c1NjYWxlKQogICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQog
CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBib3VuZHNJbkxheWVyU3BhY2UgPSBi
b3VuZHMoKTsKKyAgICBJbnRTaXplIGJvdW5kc0luQ29udGVudFNwYWNlID0gY29udGVudEJvdW5k
cygpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gc2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKTsKKworICAgIC8vIFNjYWxlIGZyb20gY29udGVudCBzcGFjZSB0byBsYXllciBz
cGFjZQorICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzSW5MYXllclNwYWNlLndp
ZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGJvdW5kc0luQ29udGVudFNwYWNlLndpZHRoKCkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzSW5MYXllclNwYWNlLmhlaWdo
dCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS5oZWlnaHQoKSkp
OworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjphZGRT
ZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKK3sK
KyAgICBpZiAoIW9wYXF1ZSgpIHx8IGRyYXdPcGFjaXR5KCkgIT0gMSB8fCAhaXNQYWludGVkQXhp
c0FsaWduZWRJblNjcmVlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgdGFy
Z2V0UmVjdCA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUmVjdChGbG9hdFJl
Y3QodmlzaWJsZUxheWVyUmVjdCgpKSk7CisgICAgb2NjbHVkZWRTY3JlZW5TcGFjZS51bml0ZShl
bmNsb3NlZEludFJlY3QodGFyZ2V0UmVjdCkpOworfQorCitib29sIExheWVyQ2hyb21pdW06Omlz
UGFpbnRlZEF4aXNBbGlnbmVkSW5TY3JlZW4oKSBjb25zdAoreworICAgIEZsb2F0UXVhZCBxdWFk
ID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZCh2aXNp
YmxlTGF5ZXJSZWN0KCkpKTsKKyAgICByZXR1cm4gcXVhZC5pc1JlY3RpbGluZWFyKCk7Cit9CisK
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCiB7CiAgICAgQVNTRVJU
KCFtX3JlbmRlclN1cmZhY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDY4NWRlMGMwMzRiOTdl
MDMxMGVjYWU5NDdlMWRkMTU5Nzk0YjZkZDQuLjIyMTgwNDk3NTAzZWI4YjZmYmRhYjE0OWFmODE1
ODgyZTU3YjJlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTU1LDYgKzU1LDcgQEAgY2xhc3Mg
Q0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRh
dGVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBSZWdpb247CiAKIC8vIEJhc2Ug
Y2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJp
dmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCkBAIC0xNTMsNyArMTU0LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gVGhlc2UgbWV0aG9kcyB0eXBpY2FsbHkgbmVlZCB0byBiZSBvdmVyd3JpdHRlbiBieSBk
ZXJpdmVkIGNsYXNzZXMuCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNEcmF3YWJsZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZE
aXJ0eSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBS
ZWdpb24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBp
ZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHsgfQpAQCAtMTgyLDggKzE4Mywx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkgeyBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7IH0KICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZh
Y2U7IH0KICAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9t
aXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KKyAgICAv
LyBUaGlzIG1vdmVzIGZyb20gbGF5ZXIgc3BhY2UsIHdpdGggb3JpZ2luIGluIHRoZSBjZW50ZXIg
dG8gdGFyZ2V0IHNwYWNlIHdpdGggb3JpZ2luIGluIHRoZSB0b3AgbGVmdAogICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3
VHJhbnNmb3JtOyB9CiAgICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9kcmF3VHJhbnNmb3JtID0gbWF0cml4OyB9CisgICAgLy8g
VGhpcyBtb3ZlcyBmcm9tIGxheWVyIHNwYWNlLCB3aXRoIG9yaWdpbiB0aGUgdG9wIGxlZnQgdG8g
c2NyZWVuIHNwYWNlIHdpdGggb3JpZ2luIGluIHRoZSB0b3AgbGVmdAogICAgIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KICAgICB2b2lkIHNldFNjcmVlblNwYWNlVHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9zY3JlZW5TcGFjZVRyYW5z
Zm9ybSA9IG1hdHJpeDsgfQogICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVudFJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KQEAgLTE5MSw2ICsxOTQs
MTEgQEAgcHVibGljOgogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzU2NhbGU7IH0KICAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwogCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBj
b25zdDsKKworICAgIC8vIEFkZHMgYW55IG9wYXF1ZSB2aXNpYmxlIHBpeGVscyB0byB0aGUgb2Nj
bHVkZWQgcmVnaW9uLgorICAgIHZpcnR1YWwgdm9pZCBhZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNw
YWNlKFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSk7CisKICAgICAvLyBSZXR1cm5zIHRydWUg
aWYgYW55IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCiAg
ICAgYm9vbCBkZXNjZW5kYW50RHJhd3NDb250ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRl
bnRDaGFuZ2VkKCkgeyB9CkBAIC0yMDUsNiArMjEzLDggQEAgcHJvdGVjdGVkOgogICAgIC8vIGhv
bGQgY29udGV4dC1kZXBlbmRlbnQgcmVzb3VyY2VzIHN1Y2ggYXMgdGV4dHVyZXMuCiAgICAgdmly
dHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKIAorICAgIGJvb2wgaXNQYWludGVkQXhpc0Fs
aWduZWRJblNjcmVlbigpIGNvbnN0OworCiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwogCiAg
ICAgLy8gVGhpcyBmbGFnIGlzIHNldCB3aGVuIGxheWVyIG5lZWQgcmVwYWludGluZy91cGRhdGlu
Zy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggNGUxODIyYjMxOGM1ZTFk
MjU3YTkwOGU0MmE0ZGMyODg0NmI1YjJhNi4uYmY0OTg4YzI1Mzc5Y2UyM2E0MDEyYTgxNDZkYjVh
ODYyZDAzOWYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTYzLDYg
KzYzLDggQEAgcHVibGljOgogICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3T3BhY2l0eTsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgZHJhd09wYWNp
dHkpIHsgbV9kcmF3T3BhY2l0eSA9IGRyYXdPcGFjaXR5OyB9CiAKKyAgICAvLyBUaGlzIGdvZXMg
ZnJvbSBjb250ZW50IHNwYWNlIHdpdGggdGhlIG9yaWdpbiBpbiB0aGUgY2VudGVyIG9mIHRoZSBy
ZWN0IGJlaW5nIHRyYW5zZm9ybWVkIHRvIHRoZSB0YXJnZXQgc3BhY2Ugd2l0aCB0aGUgb3JpZ2lu
IGluIHRoZSB0b3AgbGVmdCBvZiB0aGUKKyAgICAvLyByZWN0IGJlaW5nIHRyYW5zZm9ybWVkLiBQ
b3NpdGlvbiB0aGUgcmVjdCBzbyB0aGF0IHRoZSBvcmlnaW4gaXMgaW4gdGhlIGNlbnRlciBvZiBp
dCBiZWZvcmUgYXBwbHlpbmcgdGhpcyB0cmFuc2Zvcm0uCiAgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07
IH0KICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRyYXdUcmFuc2Zvcm0pIHsgbV9kcmF3VHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybTsgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAyMmM4MjgyYzZmODJkZWExNzk4NGI2
MmQ5ZWNlOThkY2NjZDY5NWUxLi45YmEwZWE4OGIxYTY2N2NkYmY3ZWViYzU5OTIzZDI5MTkyNDY0
YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2Miw2ICs0NjIsMzQg
QEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKGJvb2wgaWRs
ZSwgaW50IGxlZnQsIGludCB0b3AsIGludAogICAgIH0KIH0KIAordm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBvY2NsdWRlZFNjcmVl
blNwYWNlKQoreworICAgIGlmIChtX3NraXBzRHJhdyB8fCBkcmF3T3BhY2l0eSgpICE9IDEgfHwg
IWlzUGFpbnRlZEF4aXNBbGlnbmVkSW5TY3JlZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG9wYXF1ZSgpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVk
U2NyZWVuU3BhY2Uob2NjbHVkZWRTY3JlZW5TcGFjZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUcmFuc2Zvcm0gPSBjb250ZW50VG9TY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpOworCisgICAgLy8gRklYTUU6IENyZWF0ZS9Vc2UgYSBGbG9hdFJlZ2lvbiBm
b3IgdGhlIG9jY2x1ZGVkU2NyZWVuU3BhY2UsIGluc3RlYWQgb2YgYSBSZWdpb24gYmFzZWQgb24g
aW50cywgdG8gYXZvaWQgdGhpcyBzdGVwIGFuZCBnZXQgYmV0dGVyIGFjY3VyYWN5IGJldHdlZW4g
bGF5ZXJzIGluIHRhcmdldCBzcGFjZS4KKyAgICBSZWdpb24gdGlsZVJlZ2lvbjsKKyAgICBpbnQg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmxheWVyUmVjdFRvVGlsZUlu
ZGljZXModmlzaWJsZUxheWVyUmVjdCgpLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAg
IGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSog
dGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICh0aWxlKSB7CisgICAgICAgICAg
ICAgICAgSW50UmVjdCB2aXNpYmxlVGlsZU9wYXF1ZVJlY3QgPSBpbnRlcnNlY3Rpb24odmlzaWJs
ZVJlY3QsIHRpbGUtPm1fb3BhcXVlUmVjdCk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHNj
cmVlblJlY3QgPSBjb250ZW50VHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KHZpc2libGVUaWxl
T3BhcXVlUmVjdCkpOworICAgICAgICAgICAgICAgIG9jY2x1ZGVkU2NyZWVuU3BhY2UudW5pdGUo
ZW5jbG9zZWRJbnRSZWN0KHNjcmVlblJlY3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBsYXllclJlY3QpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4
IDFmOWY2OTU5MzQ2Mjc1NDNhODUwOTYyOTY3ZjYzOTYyZDM3ZGZjODUuLjU2NmYzNDY2OTBlY2M2
NzM5YzE3NmZhNGEyYmY4MzdiNzAyMGI1ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
CkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGV4
dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiBjbGFzcyBVcGRhdGFibGVUaWxlOwogCiBjbGFz
cyBUaWxlZExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC02MSw2ICs2
Miw4IEBAIHB1YmxpYzoKICAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgog
ICAgIHZvaWQgcHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpOwog
CisgICAgdmlydHVhbCB2b2lkIGFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBv
Y2NsdWRlZFNjcmVlblNwYWNlKTsKKwogcHJvdGVjdGVkOgogICAgIFRpbGVkTGF5ZXJDaHJvbWl1
bSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBiOTkyMzYwMmJjOTlh
ZDQ1ZDBhYjU5ZjEzYjYxY2JhZDhhNzFhNjg1Li5lZWFhNTFkNTRhZTE1ZjRhYWExNjAxZjg4MjZm
MjYwZThiN2VhNDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWlu
dGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5
bmNocm9uaXplci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgpAQCAtMzk4LDEy
ICszOTksMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9t
aXVtKiByb290TGF5ZXIpCiB9CiAKIC8vIHN0YXRpYwotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBh
aW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBQYWludFR5cGUgcGFpbnRU
eXBlKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hy
b21pdW0qIGxheWVyLCBQYWludFR5cGUgcGFpbnRUeXBlLCBjb25zdCBSZWdpb24mIG9jY2x1ZGVk
U2NyZWVuU3BhY2UpCiB7CiAgICAgQVNTRVJUKGxheWVyKTsKICAgICBBU1NFUlQoUGFpbnRWaXNp
YmxlID09IHBhaW50VHlwZSB8fCBQYWludElkbGUgPT0gcGFpbnRUeXBlKTsKICAgICBpZiAoUGFp
bnRWaXNpYmxlID09IHBhaW50VHlwZSkKLSAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRp
cnR5KCk7CisgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eShvY2NsdWRlZFNjcmVl
blNwYWNlKTsKICAgICBlbHNlCiAgICAgICAgIGxheWVyLT5pZGxlUGFpbnRDb250ZW50c0lmRGly
dHkoKTsKIH0KQEAgLTQxNCwzNSArNDE1LDkzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWlu
dE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAg
ICAgLy8gaW4gY29kZSwgd2UgYWxyZWFkeSBrbm93IHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIHdp
bGwgYmUgZHJhd24gaW50byB0aGlzIHJlbmRlciBzdXJmYWNlLCBzbyB0aGUKICAgICAvLyBtYXNr
IGFuZCByZXBsaWNhIHNob3VsZCBiZSBwYWludGVkLgogCisgICAgLy8gRklYTUU6IElmIHRoZSBz
dXJmYWNlIGhhcyBhIHJlcGxpY2EsIGl0IHNob3VsZCBiZSBwYWludGVkIHdpdGggb2NjbHVzaW9u
IHRoYXQgZXhjbHVkZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2Ugc3VidHJlZS4KKyAgICBS
ZWdpb24gbm9PY2NsdXNpb247CisKICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5
ZXIoKSkgewogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250
ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVuZGVyU3VyZmFj
ZUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlKTsKKyAgICAgICAgcGFpbnRDb250ZW50c0lm
RGlydHkocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlLCBub09jY2x1
c2lvbik7CiAgICAgfQogCiAgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVy
U3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAgICBpZiAocmVwbGljYUxheWVyKSB7Ci0g
ICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlKTsKKyAg
ICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCBwYWludFR5cGUsIG5vT2Nj
bHVzaW9uKTsKIAogICAgICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAg
ICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VmlzaWJsZUxheWVyUmVjdChJ
bnRSZWN0KEludFBvaW50KCksIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPmNvbnRlbnRCb3Vu
ZHMoKSkpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLT5t
YXNrTGF5ZXIoKSwgcGFpbnRUeXBlKTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5
KHJlcGxpY2FMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSwgbm9PY2NsdXNpb24pOwogICAg
ICAgICB9CiAgICAgfQogfQogCitzdHJ1Y3QgUmVuZGVyU3VyZmFjZVJlZ2lvbiB7CisgICAgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlOworICAgIFJlZ2lvbiBvY2NsdWRlZEluU2NyZWVu
OworfTsKKworLy8gQWRkIHRoZSBzdXJmYWNlIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGFuZCBj
b3B5IHRoZSBvY2NsdXNpb24gZnJvbSB0aGUgb2xkIHRvcCBvZiB0aGUgc3RhY2sgdG8gdGhlIG5l
dy4KK3N0YXRpYyB2b2lkIGVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShWZWN0b3I8UmVuZGVyU3Vy
ZmFjZVJlZ2lvbj4mIHN0YWNrLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCkKK3sK
KyAgICBpZiAoc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YWNrLmFwcGVuZChSZW5kZXJT
dXJmYWNlUmVnaW9uKCkpOworICAgICAgICBzdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1Rhcmdl
dDsKKyAgICB9IGVsc2UgaWYgKHN0YWNrLmxhc3QoKS5zdXJmYWNlICE9IG5ld1RhcmdldCkgewor
ICAgICAgICBjb25zdCBSZW5kZXJTdXJmYWNlUmVnaW9uJiBwcmV2aW91cyA9IHN0YWNrLmxhc3Qo
KTsKKyAgICAgICAgc3RhY2suYXBwZW5kKFJlbmRlclN1cmZhY2VSZWdpb24oKSk7CisgICAgICAg
IHN0YWNrLmxhc3QoKS5zdXJmYWNlID0gbmV3VGFyZ2V0OworICAgICAgICBzdGFjay5sYXN0KCku
b2NjbHVkZWRJblNjcmVlbiA9IHByZXZpb3VzLm9jY2x1ZGVkSW5TY3JlZW47CisgICAgfQorfQor
CisvLyBQb3AgdGhlIHRvcCBvZiB0aGUgc3RhY2sgb2ZmLCBwdXNoIG9uIHRoZSBuZXcgc3VyZmFj
ZSwgYW5kIG1lcmdlIHRoZSBvbGQgdG9wJ3Mgb2NjbHVzaW9uIGludG8gdGhlIG5ldyB0b3Agc3Vy
ZmFjZS4KK3N0YXRpYyB2b2lkIGxlYXZlVGFyZ2V0UmVuZGVyU3VyZmFjZShWZWN0b3I8UmVuZGVy
U3VyZmFjZVJlZ2lvbj4mIHN0YWNrLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCkK
K3sKKyAgICBpbnQgbGFzdEluZGV4ID0gc3RhY2suc2l6ZSgpIC0gMTsKKyAgICBib29sIHN1cmZh
Y2VXaWxsQmVBdFRvcEFmdGVyUG9wID0gc3RhY2suc2l6ZSgpID4gMSAmJiBzdGFja1tsYXN0SW5k
ZXggLSAxXS5zdXJmYWNlID09IG5ld1RhcmdldDsKKworICAgIGlmIChzdXJmYWNlV2lsbEJlQXRU
b3BBZnRlclBvcCkgeworICAgICAgICAvLyBNZXJnZSB0aGUgdG9wIG9mIHRoZSBzdGFjayBkb3du
LgorICAgICAgICBzdGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdWRlZEluU2NyZWVuLnVuaXRlKHN0
YWNrW2xhc3RJbmRleF0ub2NjbHVkZWRJblNjcmVlbik7CisgICAgICAgIHN0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSZXBsYWNlIHRoZSB0b3Agb2YgdGhlIHN0
YWNrIHdpdGggdGhlIG5ldyBwdXNoZWQgc3VyZmFjZS4gQ29weSB0aGUgb2NjbHVkZWQgcmVnaW9u
IHRvIHRoZSB0b3AuCisgICAgICAgIHN0YWNrLmxhc3QoKS5zdXJmYWNlID0gbmV3VGFyZ2V0Owor
ICAgIH0KK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25z
dCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFBhaW50VHlwZSBwYWludFR5cGUp
CiB7CiAgICAgLy8gVXNlIEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0ZXN0aW5nIG9jY2x1c2lv
biBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxrLgogICAgIHR5cGVk
ZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwg
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7
CiAKKyAgICAvLyBUaGUgc3RhY2sgaG9sZHMgb2NjbHVkZWQgcmVnaW9ucyBmb3Igc3VidHJlZXMg
aW4gdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZSwgc28gdGhhdCB3aGVuIHdlIGxlYXZlIGEg
c3VidHJlZSB3ZSBtYXkKKyAgICAvLyBhcHBseSBhIG1hc2sgdG8gaXQsIGJ1dCBub3QgdG8gdGhl
IHBhcnRzIG91dHNpZGUgdGhlIHN1YnRyZWUuCisgICAgLy8gLSBUaGUgZmlyc3QgdGltZSB3ZSBz
ZWUgYSBuZXcgc3VidHJlZSB1bmRlciBhIHRhcmdldCwgd2UgYWRkIHRoYXQgdGFyZ2V0IHRvIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLiBUaGlzIGNhbiBoYXBwZW4gYXMgYSBsYXllciByZXByZXNlbnRp
bmcgaXRzZWxmLCBvciBhcyBhIHRhcmdldCBzdXJmYWNlLgorICAgIC8vIC0gV2hlbiB3ZSB2aXNp
dCBhIHRhcmdldCBzdXJmYWNlLCB3ZSBhcHBseSBpdHMgbWFzayB0byBpdHMgc3VidHJlZSwgd2hp
Y2ggaXMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisgICAgLy8gLSBXaGVuIHdlIHZpc2l0IGEg
bGF5ZXIgcmVwcmVzZW50aW5nIGl0c2VsZiwgd2UgYWRkIGl0cyBvY2NsdXNpb24gdG8gdGhlIGN1
cnJlbnQgc3VidHJlZSwgd2hpY2ggaXMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisgICAgLy8g
LSBXaGVuIHdlIHZpc2l0IGEgbGF5ZXIgcmVwcmVzZW50aW5nIGEgY29udHJpYnV0aW5nIHN1cmZh
Y2UsIHRoZSBjdXJyZW50IHRhcmdldCB3aWxsIG5ldmVyIGJlIHRoZSB0b3Agb2YgdGhlIHN0YWNr
IHNpbmNlIHdlIGp1c3QgY2FtZSBmcm9tIHRoZSBjb250cmlidXRpbmcgc3VyZmFjZS4KKyAgICAv
LyBXZSBtZXJnZSB0aGUgb2NjbHVzaW9uIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdpdGggdGhl
IG5ldyBjdXJyZW50IHN1YnRyZWUuIFRoaXMgbmV3IHRhcmdldCBpcyBwdXNoZWQgb250byB0aGUg
c3RhY2sgaWYgbm90IGFscmVhZHkgdGhlcmUuCisgICAgVmVjdG9yPFJlbmRlclN1cmZhY2VSZWdp
b24+IHRhcmdldFN1cmZhY2VTdGFjazsKKwogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0g
Q0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBm
b3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigm
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAo
aXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgewogICAgICAgICAgICAgQVNTRVJU
KGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOworCisgICAgICAgICAgICBlbnRl
clRhcmdldFJlbmRlclN1cmZhY2UodGFyZ2V0U3VyZmFjZVN0YWNrLCBpdC0+cmVuZGVyU3VyZmFj
ZSgpKTsKICAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKCpp
dCwgcGFpbnRUeXBlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgdGhlIHJlcGxpY2EgbGF5
ZXIgdG8gdGhlIGN1cnJlbnQgb2NjbHVzaW9uCisKKyAgICAgICAgICAgIGlmIChpdC0+bWFza0xh
eWVyKCkgfHwgaXQtPnJlbmRlclN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSA8IDEpCisgICAgICAg
ICAgICAgICAgdGFyZ2V0U3VyZmFjZVN0YWNrLmxhc3QoKS5vY2NsdWRlZEluU2NyZWVuID0gUmVn
aW9uKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoIWl0LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgcGFp
bnRDb250ZW50c0lmRGlydHkoKml0LCBwYWludFR5cGUpOworCisgICAgICAgICAgICBlbnRlclRh
cmdldFJlbmRlclN1cmZhY2UodGFyZ2V0U3VyZmFjZVN0YWNrLCBpdC0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KCppdCwgcGFpbnRUeXBl
LCB0YXJnZXRTdXJmYWNlU3RhY2subGFzdCgpLm9jY2x1ZGVkSW5TY3JlZW4pOworICAgICAgICAg
ICAgaXQtPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UodGFyZ2V0U3VyZmFjZVN0YWNrLmxh
c3QoKS5vY2NsdWRlZEluU2NyZWVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxl
YXZlVGFyZ2V0UmVuZGVyU3VyZmFjZSh0YXJnZXRTdXJmYWNlU3RhY2ssIGl0LnRhcmdldFJlbmRl
clN1cmZhY2VMYXllcigpLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBkOTJhZGMxNjZhZTY3ZTNhZjA1NDI5NTEw
Yzk3ZDNmZTM2ODM1MDlmLi4wNjc1MTIxYTY5ZjlkYjFjMDAwMGZmZDNlNWE2NWE2ZDdlYzMwNzVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CitjbGFzcyBSZWdpb247
CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgVGV4dHVyZU1hbmFnZXI7CiAKQEAgLTIw
NSw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxNYW5hZ2Vk
VGV4dHVyZT4gPiBUZXh0dXJlTGlzdDsKIAogICAgIGVudW0gUGFpbnRUeXBlIHsgUGFpbnRWaXNp
YmxlLCBQYWludElkbGUgfTsKLSAgICBzdGF0aWMgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShM
YXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKKyAgICBzdGF0aWMgdm9pZCBwYWludENvbnRlbnRz
SWZEaXJ0eShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlLCBjb25zdCBSZWdpb24mIG9jY2x1ZGVk
U2NyZWVuU3BhY2UpOwogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlz
dCYsIFBhaW50VHlwZSk7CiAgICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3Vy
ZmFjZShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5j
cHAKaW5kZXggYmE5YzY2ZTg3NDkyMDYyNTc1ZjU1MGViMGY1ZWVmMzZkNTVjZjQ2YS4uYzhiZDli
MGYzNjMyNGFmNmU4YTRiYzFmYjVhMjQwOGZmMDMxNDU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxs
ZXIuY3BwCkBAIC03NSwxOCArNzUsNiBAQCBzdGF0aWMgSW50UmVjdCByZWN0U3VidHJhY3RSZWdp
b24oY29uc3QgUmVnaW9uJiByZWdpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgcmV0dXJu
IHJlY3Q7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGVuY2xvc2VkSW50UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgZmxvYXQgeCA9IGNlaWxmKHJlY3QueCgpKTsKLSAgICBmbG9hdCB5
ID0gY2VpbGYocmVjdC55KCkpOwotICAgIC8vIEEgcmVjdCBvZiB3aWR0aCAwIHNob3VsZCBub3Qg
YmVjb21lIGEgcmVjdCBvZiB3aWR0aCAtMS4KLSAgICBmbG9hdCB3aWR0aCA9IG1heDxmbG9hdD4o
Zmxvb3JmKHJlY3QubWF4WCgpKSAtIHgsIDApOwotICAgIGZsb2F0IGhlaWdodCA9IG1heDxmbG9h
dD4oZmxvb3JmKHJlY3QubWF4WSgpKSAtIHksIDApOwotCi0gICAgcmV0dXJuIEludFJlY3QoY2xh
bXBUb0ludGVnZXIoeCksIGNsYW1wVG9JbnRlZ2VyKHkpLAotICAgICAgICAgICAgICAgICAgIGNs
YW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Ci19Ci0KIHZvaWQg
Q0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCkKIHsK
ICAgICBpZiAoIXF1YWRMaXN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGQyZTFj
ZmVmOTNlMjgyMTY2ZGE4NTEyNTZjOTVjMGU2NTEyYzY5YmEuLmIxZmE3MjkxODQwMWUzMjQwZTQx
ZDEzZDJlMGMyN2QwYzU2YWQ3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgpAQCAtMzUsNiArMzYsMTIg
QEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1Qo
YSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VRKGEu
eSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCisg
ICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCiBuYW1lc3BhY2UgewogCiB2
b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNl
cnZlczNEKQpAQCAtNTk1LDQgKzYwMiwxNzQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAvLyAgLSB0ZXN0IHRoZSBv
dGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uCiAvLwogCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uKQorewor
ICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNl
ZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAg
cGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzAp
LCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVl
KTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlz
dDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3
aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NM
YXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVk
ZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShv
Y2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9j
Y2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6
ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxm
VG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlvbikKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQg
dGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVk
OworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBh
cmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJU
cmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICBsYXllclRyYW5zZm9ybS5yb3RhdGUo
OTApOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhs
YXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisKKyAg
ICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lh
bCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXgg
aXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJl
bnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxm
VG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgx
dSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQor
eworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcg
dXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBs
YXllclRyYW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoMjAsIDIwKTsKKwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCks
IEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7
CisKKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIg
c3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0
byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5h
ZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVD
VF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRT
dXJmYWNlKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBh
cmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENo
aWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOwor
ICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zv
cm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7
CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgx
MCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgY2hpbGQtPnNldE1hc2tz
VG9Cb3VuZHModHJ1ZSk7CisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlz
ICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3
ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJv
dW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVu
ZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsK
KyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1ZGVkLmJvdW5kcygp
KTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8q
IEp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92ZSBvcGFxdWUgcmVjdCBmcm9tIHxsYXllcnw6Cisg
ICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXll
cnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAgICAgICAgfCAgICAgICAgICAgcm90YXRl
KDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgMzAg
KyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICB8
ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAgICB8ICAx
MCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICA9PT4gICAgIHwgICAg
IHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgIHwxMCstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgfCAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8v
Ly8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8v
Ly8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8v
L3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAgICAg
ICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0tKyAg
ICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwxMHwgICAgIDcwICAgICAgICAgICAgICAg
ICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAg
ICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8
CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAg
ICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAg
ICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAg
ICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAg
ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAg
ICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MTB8CisgICAgICAgICAg
ICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAgICAg
ICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLSsKKyAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NTAwCisgICAgICovCit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAwY2IyNjA1ZThh
NmQzZDMyMmZjZWIwZmM3M2FhN2FmZTY5NDkyMDkwLi4xZmVjMzI0MjE2MjM0ZjU3NmVhYmY0NWFi
YTFkN2U0YmE5MDQ0ZTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJD
b250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNp
bmNsdWRlICJXZWJLaXQuaCIKQEAgLTEwMDUsOSArMTAwNiw5IEBAIHB1YmxpYzoKICAgICBpbnQg
dXBkYXRlQ291bnQoKSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAgICAgdm9pZCByZXNldFVw
ZGF0ZUNvdW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHNJZkRpcnR5KCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKQogICAgIHsKLSAgICAgICAgQ29u
dGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIENvbnRl
bnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShvY2NsdWRlZFNjcmVlblNwYWNl
KTsKICAgICAgICAgbV9wYWludENvbnRlbnRzQ291bnQrKzsKICAgICB9CiAKQEAgLTEyMjgsNCAr
MTIyOSwyNDQgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RBdG9taWNDb21taXQsIHJ1bk11
bHRpVGhyZWFkKQogICAgIHJ1blRlc3QodHJ1ZSk7CiB9CiAKKyNkZWZpbmUgRVhQRUNUX0VRX1JF
Q1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VR
KGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBc
CisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCitjbGFzcyBUZXN0TGF5
ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFRlc3RMYXllckNocm9taXVtKCkpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKQorICAgIHsKKyAg
ICAgICAgbV9vY2NsdWRlZFNjcmVlblNwYWNlID0gb2NjbHVkZWRTY3JlZW5TcGFjZTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9vY2NsdWRlZFNjcmVlblNwYWNlOyB9CisgICAgdm9pZCBjbGVhck9jY2x1ZGVkU2NyZWVu
U3BhY2UoKSB7IG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IFJlZ2lvbigpOyB9CisKK3ByaXZhdGU6
CisgICAgVGVzdExheWVyQ2hyb21pdW0oKSA6IExheWVyQ2hyb21pdW0oKSB7IH0KKworICAgIFJl
Z2lvbiBtX29jY2x1ZGVkU2NyZWVuU3BhY2U7Cit9OworCitzdGF0aWMgdm9pZCBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKFRlc3RMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1
bSogcGFyZW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRT
aXplJiBib3VuZHMsIGJvb2wgb3BhcXVlKQoreworICAgIGxheWVyLT5yZW1vdmVBbGxDaGlsZHJl
bigpOworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOwor
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0QW5jaG9y
UG9pbnQoYW5jaG9yKTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworICAgIGxh
eWVyLT5zZXRCb3VuZHMoYm91bmRzKTsKKyAgICBsYXllci0+c2V0T3BhcXVlKG9wYXF1ZSk7Cisg
ICAgbGF5ZXItPmNsZWFyT2NjbHVkZWRTY3JlZW5TcGFjZSgpOworfQorCitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb24gOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7
CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uKCkgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxUZXN0
TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwor
ICAgICAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNoaWxkID0gVGVzdExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNoaWxkMiA9
IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNo
cm9taXVtPiBncmFuZENoaWxkID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgICAg
ICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IG1hc2sgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCk7CisKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Cisg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgICAgICBjaGls
ZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgICAgICBjaGlsZFRyYW5zZm9ybS5y
b3RhdGUoOTApOworICAgICAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7
CisKKyAgICAgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICAgICAgLy8g
U2VlIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QubGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdp
b25XaXRoUm90YXRlZFN1cmZhY2UgZm9yIGEgbmljZSB2aXN1YWwgb2YgdGhlc2UgbGF5ZXJzIGFu
ZCBob3cgdGhleSBlbmQgdXAKKyAgICAgICAgLy8gcG9zaXRpb25lZCBvbiB0aGUgc2NyZWVuLgor
CisgICAgICAgIC8vIFRoZSBjaGlsZCBsYXllciBpcyByb3RhdGVkIGFuZCB0aGUgZ3JhbmRDaGls
ZCBpcyBvcGFxdWUsIGJ1dCBjbGlwcGVkIHRvIHRoZSBjaGlsZCBhbmQgcm9vdExheWVyCisgICAg
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdExheWVyLmdldCgpLCAwLCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgx
MDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNo
aWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAg
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAx
MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldFJvb3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZp
ZXdwb3J0U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT51cGRhdGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0
ZSgpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2Nj
bHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFu
ZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1
ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBs
YXllciBpcyBvcGFxdWUsIHRoZW4gaXQgYWRkcyB0byB0aGUgb2NjbHVzaW9uIHNlZW4gYnkgdGhl
IHJvb3RMYXllci4KKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5
ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgY2hpbGRUcmFuc2Zv
cm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCks
IGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIGNo
aWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgcm9vdExheWVyLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RM
YXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAv
LyBBZGQgYSBzZWNvbmQgY2hpbGQgdG8gdGhlIHJvb3QgbGF5ZXIgYW5kIHRoZSByZWdpb25zIHNo
b3VsZCBtZXJnZQorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXll
ci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNzAsIDIwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBjaGlsZC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9v
dExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRT
aXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0
ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQt
Pm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3Jl
ZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgzMCwgMzAsIDcwLCA3MCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDIwLCA3
MCwgODApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgydSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMo
KS5zaXplKCkpOworCisgICAgICAgIC8vIE1vdmUgdGhlIHNlY29uZCBjaGlsZCB0byBiZSBzdXJl
LgorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwg
MCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUp
OworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290
TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAs
IDUwMCksIHRydWUpOworCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJv
b3RMYXllcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RM
YXllci0+Ym91bmRzKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVk
U2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMzAsIDQwLCA3MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5k
cygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgp
LnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAs
IDcwLCA3MCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDF1LCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDMwLCA5MCwgNzApLCBy
b290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVD
VF9FUSgydSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkp
OworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBsYXllciBoYXMgYSBtYXNrIG9uIGl0LCB0aGVu
IGl0IHNob3VsZG4ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbiBvbiBzdHVmZiBiZWxvdyBpdAor
ICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwgMCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOwor
ICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290TGF5
ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMw
LCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIHRydWUpOworCisgICAgICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIobWFzay5nZXQoKSk7CisK
KyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KCksIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcw
LCA2MCksIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBF
WFBFQ1RfRVEoMXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkp
OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+b2NjbHVkZWRTY3Jl
ZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjaGlsZDItPm9jY2x1
ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAsIDcwLCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBs
YXllciB3aXRoIGEgbWFzayBpcyBiZWxvdyBjaGlsZDIsIHRoZW4gY2hpbGQyIHNob3VsZCBjb250
cmlidXRlIHRvIG9jY2x1c2lvbiBvbiBldmVyeXRoaW5nLCBhbmQgY2hpbGQgc2hvdWxkbid0IGNv
bnRyaWJ1dGUgdG8gdGhlIHJvb3RMYXllcgorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9vdExheWVyLmdldCgp
LCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJ
bnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVl
KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIHJv
b3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMTAsIDcwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIGNoaWxkLT5z
ZXRNYXNrTGF5ZXIobWFzay5nZXQoKSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRS
b290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9y
dFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBk
YXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsK
KworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+b2NjbHVkZWRTY3Jl
ZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjaGlsZDItPm9jY2x1
ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAsIDcwLCA5MCwgMzApLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVk
U2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMTAsIDQwLCA5MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5k
cygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgp
LnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNzAs
IDkwLCAzMCksIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDF1LCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0
cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGxheWVyIGhhcyBhIG5vbi1v
cGFxdWUgZHJhd09wYWNpdHksIHRoZW4gaXQgc2hvdWxkbid0IGNvbnRyaWJ1dGUgdG8gb2NjbHVz
aW9uIG9uIHN0dWZmIGJlbG93IGl0CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocm9vdExheWVyLmdldCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgNzApLCBJbnRT
aXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOwor
ICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNo
aWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgx
MCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAgICAgY2hpbGQtPnNldE1h
c2tMYXllcigwKTsKKyAgICAgICAgY2hpbGQtPnNldERyYXdPcGFjaXR5KDAuNSk7CisKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KCksIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCku
c2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCks
IGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAg
ICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjaGlsZDItPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMTAsIDcwLCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNw
YWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBsYXllciB3
aXRoIG5vbi1vcGFxdWUgZHJhd09wYWNpdHkgaXMgYmVsb3cgY2hpbGQyLCB0aGVuIGNoaWxkMiBz
aG91bGQgY29udHJpYnV0ZSB0byBvY2NsdXNpb24gb24gZXZlcnl0aGluZywgYW5kIGNoaWxkIHNo
b3VsZG4ndCBjb250cmlidXRlIHRvIHRoZSByb290TGF5ZXIKKyAgICAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7
CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RM
YXllci5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwg
NTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQy
LmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAg
ICBjaGlsZC0+c2V0TWFza0xheWVyKDApOworICAgICAgICBjaGlsZC0+c2V0RHJhd09wYWNpdHko
MC41KTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290TGF5ZXItPmJv
dW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoKSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMHUsIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNzAsIDkw
LCAzMCksIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDAsIDkwLCA2
MCksIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBF
Q1RfRVEoMnUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
ICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgcm9vdExheWVy
LT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUs
IHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
ICAgICAvLyBLaWxsIHRoZSBsYXllclRyZWVIb3N0IGltbWVkaWF0ZWx5LgorICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LmNs
ZWFyKCk7CisKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
ZnRlclRlc3QoKQorICAgIHsKKyAgICB9Cit9OworCitTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9U
RVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uKQorCiB9IC8vIG5hbWVzcGFj
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVy
Q2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRM
YXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggZjBiNWM0MTFiNjU2YWVkZTc1OTU3MTBlNGQ4Y2Zk
N2QyNGRiNTMzYy4uMWRmMjdjMDExMTliMjY1N2U4MmUyYTA3OTdiMWMwMWI1MGQzMDVlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21p
dW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5
ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ0NTY2hlZHVs
ZXJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVy
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKQEAgLTEzOCw3ICsx
MzksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgY2FudmFzLT5jb250ZW50Q2hhbmdlZCgpOwog
ICAgICAgICBFWFBFQ1RfVFJVRShjYW52YXMtPm5lZWRzRGlzcGxheSgpKTsKLSAgICAgICAgY2Fu
dmFzLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBSZWdpb24gb2NjbHVkZWRTY3Jl
ZW5TcGFjZTsKKyAgICAgICAgY2FudmFzLT5wYWludENvbnRlbnRzSWZEaXJ0eShvY2NsdWRlZFNj
cmVlblNwYWNlKTsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkp
OwogICAgICAgICB7CiAgICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVk
SW1wbFRocmVhZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGls
ZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGI4NTBmODI0MWNjMDgwMTQxMzhlMzgwOGMw
NjE0Y2E2MTA0ZTYzMjEuLmIwMzUwZGI0OTVmYjU2MmIzNTgxNDA4N2VmNjQxMGQ3NjE5NWJhNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVy
Q2hyb21pdW1UZXN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNDTGF5ZXJUcmVl
VGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQuaCIKICNp
bmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5j
bHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIiAvLyBGb3IgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkCkBAIC0zOSw2ICs0MCwxMiBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwogCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEsIGIpIFwKKyAgICBF
WFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9FUShhLnkoKSwgYi55KCkpOyBc
CisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAorICAgIEVYUEVDVF9FUShh
LmhlaWdodCgpLCBiLmhlaWdodCgpKTsKKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgRmFrZVRleHR1
cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7CkBAIC03MCwxNyArNzcsMjAg
QEAgcHVibGljOgogICAgIGludCBwcmVwYXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3ByZXBh
cmVDb3VudDsgfQogICAgIHZvaWQgY2xlYXJQcmVwYXJlQ291bnQoKSB7IG1fcHJlcGFyZUNvdW50
ID0gMDsgfQogCisgICAgdm9pZCBzZXRPcGFxdWVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgb3Bh
cXVlUGFpbnRSZWN0KSB7IG1fb3BhcXVlUGFpbnRSZWN0ID0gb3BhcXVlUGFpbnRSZWN0OyB9CisK
ICAgICAvLyBMYXN0IHJlY3QgcGFzc2VkIHRvIHByZXBhcmVUb1VwZGF0ZSgpLgogICAgIGNvbnN0
IEludFJlY3QmIGxhc3RVcGRhdGVSZWN0KCkgIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFVwZGF0ZVJl
Y3Q7IH0KIAogICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgVGV4dHVyZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7IH0KICAg
ICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0p
IHsgcmV0dXJuIFNhbXBsZWRUZXhlbEZvcm1hdFJHQkE7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwg
aW50LCBmbG9hdCwgSW50UmVjdCopOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmLCBpbnQsIGZsb2F0LCBJ
bnRSZWN0KiByZXN1bHRpbmdPcGFxdWVSZWN0KTsKIAogcHJpdmF0ZToKICAgICBpbnQgbV9wcmVw
YXJlQ291bnQ7CiAgICAgSW50UmVjdCBtX3JlY3RUb0ludmFsaWRhdGU7CiAgICAgSW50UmVjdCBt
X2xhc3RVcGRhdGVSZWN0OworICAgIEludFJlY3QgbV9vcGFxdWVQYWludFJlY3Q7CiAgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IG1fbGF5ZXI7CiB9OwogCkBAIC0xMzksNyArMTQ5
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFn
ZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50c0lmRGlydHkoKQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
SWZEaXJ0eShjb25zdCBSZWdpb24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiAgICAgewog
ICAgICAgICBwcmVwYXJlVG9VcGRhdGUodmlzaWJsZUxheWVyUmVjdCgpKTsKICAgICB9CkBAIC0x
ODcsNyArMTk3LDcgQEAgdm9pZCBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdAogICAgICAgICBtX3JlY3RUb0lu
dmFsaWRhdGUgPSBJbnRSZWN0KCk7CiAgICAgICAgIG1fbGF5ZXIgPSAwOwogICAgIH0KLSAgICAq
cmVzdWx0aW5nT3BhcXVlUmVjdCA9IEludFJlY3QoKTsKKyAgICAqcmVzdWx0aW5nT3BhcXVlUmVj
dCA9IG1fb3BhcXVlUGFpbnRSZWN0OwogfQogCiBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHB1c2hEaXJ0eVRpbGVzKQpAQCAtNDYwLDQgKzQ3MCw5OCBAQCBURVNUKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHNraXBzRHJhd0dldHNSZXNldCkKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6
OnNodXRkb3duKCk7CiB9CiAKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbGF5ZXJBZGRz
U2VsZlRvT2NjbHVkZWRSZWdpb24pCit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCox
MDI0LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OworCisgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVz
IGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMgaW4gdmFyaW91cyB3YXlzLgorCisgICAgUmVnaW9u
IG9jY2x1ZGVkOworICAgIEludFJlY3QgY29udGVudEJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAw
LCAyMDApOworICAgIEludFJlY3QgdmlzaWJsZUJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAx
NTApOworCisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzLnNpemUoKSk7CisgICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUJvdW5kcyk7CisgICAgbGF5ZXItPnNl
dERyYXdPcGFjaXR5KDEpOworCisgICAgLy8gVGhlIHNjcmVlblNwYWNlVHJhbnNmb3JtIGlzIHZl
cmlmaWVkIGluIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3RzCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm07CisgICAgbGF5ZXItPnNldFNjcmVlblNwYWNlVHJh
bnNmb3JtKHNjcmVlblNwYWNlVHJhbnNmb3JtKTsKKworICAgIC8vIElmIHRoZSBsYXllciBpcyBv
cGFxdWUgdGhlbiB0aGUgb2NjbHVkZWQgcmVnaW9uIHNob3VsZCBiZSB0aGUgd2hvbGUgbGF5ZXIn
cyB2aXNpYmxlIHJlZ2lvbi4KKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworICAgIGxheWVy
LT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBk
YXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXll
ci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VR
X1JFQ1QodmlzaWJsZUJvdW5kcywgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgx
dSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gSWYgdGhlIGxheWVyIGlzIG5v
dCBvcGFxdWUgdGhlbiB0aGUgb2NjbHVkZWQgcmVnaW9uIHNob3VsZCBiZSBlbXB0eS4KKyAgICBs
YXllci0+c2V0T3BhcXVlKGZhbHNlKTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVu
dEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKwor
ICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2Ny
ZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgb2NjbHVk
ZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkp
OworCisgICAgLy8gSWYgdGhlIGxheWVyIHBhaW50cyBvcGFxdWUgY29udGVudCwgdGhlbiB0aGUg
b2NjbHVkZWQgcmVnaW9uIHNob3VsZCBtYXRjaCB0aGUgdmlzaWJsZSBvcGFxdWUgY29udGVudC4K
KyAgICBJbnRSZWN0IG9wYXF1ZVBhaW50UmVjdCA9IEludFJlY3QoMTAsIDEwLCA5MCwgMTkwKTsK
KyAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0
KG9wYXF1ZVBhaW50UmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRCb3Vu
ZHMpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBv
Y2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNw
YWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24ob3BhcXVlUGFp
bnRSZWN0LCB2aXNpYmxlQm91bmRzKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gSWYgd2UgcGFpbnQgYWdh
aW4gd2l0aG91dCBpbnZhbGlkYXRpbmcsIHRoZSBzYW1lIHN0dWZmIHNob3VsZCBiZSBvY2NsdWRl
ZC4KKyAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRS
ZWN0KEludFJlY3QoKSk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRz
KTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1
ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlv
bihvcGFxdWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpLCBvY2NsdWRlZC5ib3VuZHMoKSk7Cisg
ICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB0
aGUgbGF5ZXIgaXMgdHJhbnNmb3JtZWQgdGhlbiB0aGUgcmVzdWx0aW5nIG9jY2x1ZGVkIGFyZWEg
bmVlZHMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gaXRzIHRhcmdldCBzcGFjZS4KKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShjb250ZW50
Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAg
IHRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRC
b3VuZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUoMTAsIDEwKTsKKyAgICBzY3JlZW5TcGFjZVRyYW5zZm9ybS50
cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdo
dCgpIC8gMi4wKTsKKyAgICBzY3JlZW5TcGFjZVRyYW5zZm9ybSAqPSB0cmFuc2Zvcm07CisgICAg
c2NyZWVuU3BhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAy
LjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICBsYXllci0+c2V0U2NyZWVu
U3BhY2VUcmFuc2Zvcm0oc2NyZWVuU3BhY2VUcmFuc2Zvcm0pOworICAgIGxheWVyLT5wcmVwYXJl
VG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAg
IGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChzY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KGludGVyc2VjdGlvbihvcGFx
dWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAgIEVY
UEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gQnV0IGEgbm9u
LWF4aXMtYWxpZ25lZCB0cmFuc2Zvcm0gZG9lcyBub3QgZ2V0IGNvbnNpZGVyZWQgZm9yIG9jY2x1
c2lvbi4KKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIu
MCwgY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgdHJhbnNmb3JtLnJvdGF0ZSg1
KTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAs
IC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICBzY3JlZW5TcGFjZVRyYW5zZm9y
bS50cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhl
aWdodCgpIC8gMi4wKTsKKyAgICBzY3JlZW5TcGFjZVRyYW5zZm9ybSAqPSB0cmFuc2Zvcm07Cisg
ICAgc2NyZWVuU3BhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkg
LyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICBsYXllci0+c2V0U2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oc2NyZWVuU3BhY2VUcmFuc2Zvcm0pOworICAgIGxheWVyLT5wcmVw
YXJlVG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOwor
ICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICAv
LyBGSVhNRTogSWYgd2UgZmluZCBhbiBvcGFxdWUgcmVjdCBjb250YWluZWQgaW4gdGhlIHJvdGF0
ZWQgbm9uLWF4aXMtYWxpZ25lZCByZWN0LCB0aGVuCisgICAgLy8gdGhpcyB3b24ndCBiZSBhbiBl
bXB0eSByZXN1bHQuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdWRlZC5ib3Vu
ZHMoKSk7CisgICAgRVhQRUNUX0VRKDB1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124628</attachid>
            <date>2012-01-30 16:38:49 -0800</date>
            <delta_ts>2012-01-30 22:24:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120130193847.patch</filename>
            <type>text/plain</type>
            <size>62546</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjJkMzI3NzU2MDU5ODJj
NjE2MGZjNjc3ZWY5ZTk5MzZhNTBlMmM5ZS4uYmVlOWQ2NjMzZTM3ZmM3YjgxYzVhODY5MDcwY2Ez
NTRlYjY3MDRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTI3ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAsIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwLCBDQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2VkSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKEltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
aXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2Nj
bHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6cG9wQW5kUHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6CisKIDIwMTIt
MDEtMzAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVlIGZvciBkcmF3IGN1bGxp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMGRmYWQ5NmRiMDEzZjVmMGRlMDI0ZDVl
M2NlY2U0NjFjZGM1NTBiMC4uNzM1YzRkODU0NDk5NDdhZTdiZWM2NTFlMTM1OWEwOWM0YmQ5ZmE3
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wMS0y
NyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENvbXB1dGUgb2NjbHVzaW9uIGR1cmluZyBwYWludCBsb29wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg1OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RG
OjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cGFpbnRDb250ZW50c0lm
RGlydHkpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFRlc3RMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdURjo6VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRl
c3RMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OlRl
c3RMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJD
aHJvbWl1bTo6b2NjbHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNo
cm9taXVtOjpjbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV1RGOjpUZXN0TGF5
ZXJDaHJvbWl1bTo6VGVzdExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV1RGOjpzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9j
Y2x1c2lvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lv
bjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb246OmFmdGVyVGVzdCk6CisgICAgICAg
ICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0OjpmdWxsTGlmZWN5Y2xlVGVzdCk6CisgICAgICAg
ICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VM
YXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAoRmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVt
OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVV
cGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV1RGOjpURVNUKToKKyAgICAgICAg
KFdURik6CisKIDIwMTItMDEtMzAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVl
IGZvciBkcmF3IGN1bGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuY3BwCmluZGV4IDQ2ZmNhNmMyN2U5ZTkzZTYzOTQ2ODI3NWYzNzU5NTk0ZjVjOTJi
NzcuLjU5NWFmMmEzMjNhM2VlNWFhNDhmNjgwODViNjY2NmE3ZDlkNDk0ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE4LDYgKzIx
OCwxOSBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIo
aGVpZ2h0KSk7CiB9CiAKK0ludFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpbnQgeCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7Cisg
ICAgaW50IHkgPSBjbGFtcFRvSW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOworICAgIGZsb2F0IG1h
eFggPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYocmVjdC5tYXhYKCkpKTsKKyAgICBmbG9hdCBtYXhZ
ID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHJlY3QubWF4WSgpKSk7CisgICAgLy8gQSByZWN0IG9m
IHdpZHRoIDAgc2hvdWxkIG5vdCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWls
L2Zsb29yLgorICAgIGludCB3aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDAp
OworICAgIGludCBoZWlnaHQgPSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKKwor
ICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCiBGbG9hdFJlY3Qg
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAg
fHwgc3JjUmVjdC5oZWlnaHQoKSA9PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaAppbmRleCAxNDA5MDcxYjExOTg4M2QzYjA4NjI3MGFhNGNmNzg4NGY0
ZmJhNjJjLi4yMmMxNzFjNWFiNGQxODg5NjBlODJmZTdiZTAyMThlNDFjZjhhNWY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjcwLDYgKzI3
MCw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBG
bG9hdFJlY3QmIGIpCiAKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKIAorLy8gUmV0dXJucyBhIHZhbGlkIEludFJlY3QgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2
ZW4gRmxvYXRSZWN0LgorSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisKIC8vIE1hcCByZWN0IHIgZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBk
ZXN0UmVjdC4KIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTUwNWFkYWMyNDNlMDc2NjVkMmRkYWIy
OGY0NzAzZmY4ZWY1Yjk0My4uMDkwNTQ3NDE4NmVmYzJjNDBhN2FkYTQ1ODU5NWUwYmY4M2YzNjhj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC05MSw3ICs5MSw3
IEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogICAg
ICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0K
IAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3Zv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdp
b24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiB7CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAppbmRl
eCA4MzYxNWExZjIyMzU2MTY0NjJlYjFmOGQ0MTIyZTFhZDhlNThjOTIyLi5lY2JhOTBmNGVkMTYy
YzY4ZGM0ZjA4ZTYxMGJkZDRmNzJkOWIzMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaApAQCAtNDAsNiArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQSBsYXllciBjb250YWluaW5n
IGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcwogY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtIDog
cHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0gewpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJh
d3NDb250ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYg
b2NjbHVkZWRTY3JlZW5TcGFjZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCA1MjlmY2UwMzY0YTgyODU1YWE0MDYzOTcx
NTZlMGZiYjRlM2E5NTBlLi4zNDMwMzExMGZhOWNhZmRmMjZjYTliY2ZlZDZlMjRjNGY0MDJmMmFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC05Myw3ICs5Myw3IEBA
IGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAgICAgcmV0
dXJuIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgJiYgbV9kZWxlZ2F0ZTsKIH0K
IAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9u
JiAvKiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogewogICAgIHVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDQyNjY3
OWNhZmFiYjczOTRjMDJlNzkwMWJlMzMyZDdiY2I1ZTA4MWEuLjVlZmY2YTNkNjBhMTJkMTIwZWI3
MjAwMGQzNTBiMWZiNTgzOGVhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApA
QCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGlsZXJD
aHJvbWl1bTsKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiAKIGNs
YXNzIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJEZWxlZ2F0ZSgpIHsgbV9kZWxlZ2F0ZSA9IDA7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQg
aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVl
KGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDE1NGZiMjgzMTRm
M2U2YzkyNDA0N2JiNDgzNjczNjkyZGZjZmFiNy4uODMxY2JlODA5NjNhM2E4MDBiOGFhNDZhNjk5
NDhmNGZjN2Y1ZWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNTgs
NyArMTU4LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBj
b250ZW50cykKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpw
YWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdpb24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2Ug
Ki8pCiB7CiAgICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0
ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5kZXggZDcxMjkyNDUxYzM1NTVlYWYw
YzE2Y2Y5ZjJjM2YzOTViZTA3NTMwNC4uYWI1YzFiMjdiMmM3NWE3NWFlMzQzNzkzY2E1Mzg3OWYy
NTUxZGQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdlTGF5ZXJUZXh0
dXJlVXBkYXRlcjsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIG9u
bHkgYW4gSW1hZ2UgZWxlbWVudC4KIGNsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBU
aWxlZExheWVyQ2hyb21pdW0gewpAQCAtNTMsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SW1hZ2VMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRT
Y3JlZW5TcGFjZSk7CiAgICAgdmlydHVhbCBib29sIG5lZWRzQ29udGVudHNTY2FsZSgpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAppbmRleCBkZTVjNzAyNWZhNjRlZGU4NDE3YWMzNjViMTk4YzU2N2UyY2RmYWQ2Li5iMmY3
MDE0MWI0N2E1ZDQ3YjQ0MDI5MzgwZDM4Y2IzZGMzYzViMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgorI2luY2x1ZGUgIlJlZ2lvbi5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTQ2OSw2ICs0NzAs
MzUgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IGNvbnRlbnRz
U2NhbGUpCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4
IExheWVyQ2hyb21pdW06OmNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sK
KyAgICBJbnRTaXplIGJvdW5kc0luTGF5ZXJTcGFjZSA9IGJvdW5kcygpOworICAgIEludFNpemUg
Ym91bmRzSW5Db250ZW50U3BhY2UgPSBjb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworCisgICAgLy8g
U2NhbGUgZnJvbSBjb250ZW50IHNwYWNlIHRvIGxheWVyIHNwYWNlCisgICAgdHJhbnNmb3JtLnNj
YWxlTm9uVW5pZm9ybShib3VuZHNJbkxheWVyU3BhY2Uud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3VuZHNJbkxheWVyU3BhY2UuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gdHJhbnNm
b3JtOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3Bh
Y2UoUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKQoreworICAgIGlmICghb3BhcXVlKCkgfHwg
ZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFpc1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gY29udGVudFRvU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlTGF5ZXJSZWN0KCkp
KTsKKyAgICBvY2NsdWRlZFNjcmVlblNwYWNlLnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0YXJnZXRS
ZWN0KSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aXNQYWludGVkQXhpc0FsaWduZWRJblNj
cmVlbigpIGNvbnN0Cit7CisgICAgRmxvYXRRdWFkIHF1YWQgPSBjb250ZW50VG9TY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKHZpc2libGVMYXllclJlY3QoKSkpOworICAg
IHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpj
cmVhdGVSZW5kZXJTdXJmYWNlKCkKIHsKICAgICBBU1NFUlQoIW1fcmVuZGVyU3VyZmFjZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKaW5kZXggOTQ1ZWU4ZTFjNGM1YjQ1NTk0MzA3YTc2MmNkNjAwYjk2NjVl
MGFhNC4uNzY0ZjczMDE1NWI1NDUzN2NkYTRjNzM4MWIzZmQzYmNiNzk2MDY0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEND
TGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBs
YXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFz
cy4KQEAgLTE1Myw3ICsxNTQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHR5
cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2
aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0RyYXdhYmxlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3Jl
ZW5TcGFjZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0
eSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJc01hc2soYm9vbCkgeyB9CkBAIC0xODIsOCArMTgzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3QgPSBjbGlw
UmVjdDsgfQogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90YXJn
ZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQorICAgIC8vIFRoaXMgbW92ZXMgZnJvbSBsYXll
ciBzcGFjZSwgd2l0aCBvcmlnaW4gaW4gdGhlIGNlbnRlciB0byB0YXJnZXQgc3BhY2Ugd2l0aCBv
cmlnaW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KICAgICB2b2lk
IHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgeyBt
X2RyYXdUcmFuc2Zvcm0gPSBtYXRyaXg7IH0KKyAgICAvLyBUaGlzIG1vdmVzIGZyb20gbGF5ZXIg
c3BhY2UsIHdpdGggb3JpZ2luIHRoZSB0b3AgbGVmdCB0byBzY3JlZW4gc3BhY2Ugd2l0aCBvcmln
aW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVl
blNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsg
fQogICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkgeyBtX3NjcmVlblNwYWNlVHJhbnNmb3JtID0gbWF0cml4OyB9CiAgICAg
Y29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJh
d2FibGVDb250ZW50UmVjdDsgfQpAQCAtMTkxLDYgKzE5NCwxMSBAQCBwdWJsaWM6CiAgICAgZmxv
YXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY2FsZTsgfQogICAg
IHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgLy8gQWRkcyBh
bnkgb3BhcXVlIHZpc2libGUgcGl4ZWxzIHRvIHRoZSBvY2NsdWRlZCByZWdpb24uCisgICAgdmly
dHVhbCB2b2lkIGFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBvY2NsdWRlZFNj
cmVlblNwYWNlKTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3Mg
ZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRlc2NlbmRhbnREcmF3
c0NvbnRlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKSB7IH0KQEAgLTIx
MSw2ICsyMTksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBjb250ZXh0LWRlcGVuZGVudCBy
ZXNvdXJjZXMgc3VjaCBhcyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291
cmNlcygpOwogCisgICAgYm9vbCBpc1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkgY29uc3Q7
CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKICAgICAvLyBUaGlzIGZsYWcgaXMgc2V0
IHdoZW4gbGF5ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaAppbmRleCA0ZTE4MjJiMzE4YzVlMWQyNTdhOTA4ZTQyYTRkYzI4ODQ2YjVi
MmE2Li5iZjQ5ODhjMjUzNzljZTIzYTQwMTJhODE0NmRiNWE4NjJkMDM5ZjIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAg
ZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAgICAg
dm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBkcmF3T3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0g
ZHJhd09wYWNpdHk7IH0KIAorICAgIC8vIFRoaXMgZ29lcyBmcm9tIGNvbnRlbnQgc3BhY2Ugd2l0
aCB0aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIgb2YgdGhlIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQg
dG8gdGhlIHRhcmdldCBzcGFjZSB3aXRoIHRoZSBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0IG9mIHRo
ZQorICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQuIFBvc2l0aW9uIHRoZSByZWN0IHNvIHRo
YXQgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVyIG9mIGl0IGJlZm9yZSBhcHBseWluZyB0aGlz
IHRyYW5zZm9ybS4KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1Ry
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgeyBtX2Ry
YXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDBiMGM5YmY0ZTc2MWFjY2Y5ZmFhZTQwY2NmZTQyMjRhZDBmZjM1NjAuLjI4
M2FhOGRkMDliYTIzZmQ3NDQzM2FjYTMyYTY3MzUzODgzYzlhMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcApAQCAtNDg4LDYgKzQ4OCwzNSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cmVzZXJ2ZVRleHR1cmVzKCkKICAgICB9CiB9CiAKK3ZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjphZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5T
cGFjZSkKK3sKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFp
c1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChvcGFxdWUoKSkgeworICAgICAgICBMYXllckNocm9taXVtOjphZGRTZWxmVG9PY2NsdWRlZFNj
cmVlblNwYWNlKG9jY2x1ZGVkU2NyZWVuU3BhY2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VHJhbnNmb3JtID0gY29udGVudFRvU2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKTsKKworICAgIC8vIEZJWE1FOiBDcmVhdGUvVXNlIGEgRmxvYXRSZWdpb24gZm9y
IHRoZSBvY2NsdWRlZFNjcmVlblNwYWNlLCBpbnN0ZWFkIG9mIGEgUmVnaW9uIGJhc2VkIG9uIGlu
dHMsIHRvIGF2b2lkIHRoaXMgc3RlcCBhbmQgZ2V0IGJldHRlciBhY2N1cmFjeSBiZXR3ZWVuIGxh
eWVycyBpbiB0YXJnZXQgc3BhY2UuCisgICAgUmVnaW9uIHRpbGVSZWdpb247CisgICAgaW50IGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5sYXllclJlY3RUb1RpbGVJbmRp
Y2VzKHZpc2libGVMYXllclJlY3QoKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBm
b3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRp
bGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAodGlsZSkgeworICAgICAgICAgICAg
ICAgIEludFJlY3QgdmlzaWJsZVRpbGVPcGFxdWVSZWN0ID0gaW50ZXJzZWN0aW9uKHZpc2libGVS
ZWN0LCB0aWxlLT5tX29wYXF1ZVJlY3QpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzY3Jl
ZW5SZWN0ID0gY29udGVudFRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlVGlsZU9w
YXF1ZVJlY3QpKTsKKyAgICAgICAgICAgICAgICBvY2NsdWRlZFNjcmVlblNwYWNlLnVuaXRlKGVu
Y2xvc2VkSW50UmVjdChzY3JlZW5SZWN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KQogewogICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDE4ZTAyOWMwZGM4N2ZjZTU4YjczNmVhOTg1ZDkzYTRi
YzhkNzI2OGEuLjNjYmJiY2JkN2E0NTI1NDIzNWUzOTU1NTAyMGMzMDM2OGU3MWVjNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiBjbGFz
cyBVcGRhdGFibGVUaWxlOwogCiBjbGFzcyBUaWxlZExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5
ZXJDaHJvbWl1bSB7CkBAIC02Myw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCByZXNlcnZlVGV4dHVyZXMoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRTZWxmVG9PY2NsdWRl
ZFNjcmVlblNwYWNlKFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSk7CisKIHByb3RlY3RlZDoK
ICAgICBUaWxlZExheWVyQ2hyb21pdW0oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKaW5kZXggNjJkNmNlMjMwZmQwZjFiYzZiYWJlMjQ0MDYxNTRmNjc5NmM0ZTFiZC4uNGZmODQz
NGIyMDBjOTJkNDhhMDhiZjkxYzE0YjI3ZjgyMTlkZGFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
SXRlcmF0b3IuaCIKQEAgLTQxMywxMiArNDE0LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpy
ZXNlcnZlVGV4dHVyZXMoKQogfQogCiAvLyBzdGF0aWMKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpw
YWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50
VHlwZSkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNo
cm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50VHlwZSwgY29uc3QgUmVnaW9uJiBvY2NsdWRl
ZFNjcmVlblNwYWNlKQogewogICAgIEFTU0VSVChsYXllcik7CiAgICAgQVNTRVJUKFBhaW50Vmlz
aWJsZSA9PSBwYWludFR5cGUgfHwgUGFpbnRJZGxlID09IHBhaW50VHlwZSk7CiAgICAgaWYgKFBh
aW50VmlzaWJsZSA9PSBwYWludFR5cGUpCi0gICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZE
aXJ0eSgpOworICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVkZWRTY3Jl
ZW5TcGFjZSk7CiAgICAgZWxzZQogICAgICAgICBsYXllci0+aWRsZVBhaW50Q29udGVudHNJZkRp
cnR5KCk7CiB9CkBAIC00MjksMzUgKzQzMCw5MyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwog
ICAgIC8vIGluIGNvZGUsIHdlIGFscmVhZHkga25vdyB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyB3
aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIgc3VyZmFjZSwgc28gdGhlCiAgICAgLy8gbWFz
ayBhbmQgcmVwbGljYSBzaG91bGQgYmUgcGFpbnRlZC4KIAorICAgIC8vIEZJWE1FOiBJZiB0aGUg
c3VyZmFjZSBoYXMgYSByZXBsaWNhLCBpdCBzaG91bGQgYmUgcGFpbnRlZCB3aXRoIG9jY2x1c2lv
biB0aGF0IGV4Y2x1ZGVzIHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlIHN1YnRyZWUuCisgICAg
UmVnaW9uIG5vT2NjbHVzaW9uOworCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xh
eWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0Vmlz
aWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29u
dGVudEJvdW5kcygpKSk7Ci0gICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZh
Y2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSk7CisgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSwgbm9PY2Ns
dXNpb24pOwogICAgIH0KIAogICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IHJlbmRl
clN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCk7CiAgICAgaWYgKHJlcGxpY2FMYXllcikgewot
ICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHBhaW50VHlwZSk7Cisg
ICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlLCBub09j
Y2x1c2lvbik7CiAKICAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsKICAg
ICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91
bmRzKCkpKTsKLSAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+
bWFza0xheWVyKCksIHBhaW50VHlwZSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0
eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUsIG5vT2NjbHVzaW9uKTsKICAg
ICAgICAgfQogICAgIH0KIH0KIAorc3RydWN0IFJlbmRlclN1cmZhY2VSZWdpb24geworICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogc3VyZmFjZTsKKyAgICBSZWdpb24gb2NjbHVkZWRJblNjcmVl
bjsKK307CisKKy8vIEFkZCB0aGUgc3VyZmFjZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayBhbmQg
Y29weSB0aGUgb2NjbHVzaW9uIGZyb20gdGhlIG9sZCB0b3Agb2YgdGhlIHN0YWNrIHRvIHRoZSBu
ZXcuCitzdGF0aWMgdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoVmVjdG9yPFJlbmRlclN1
cmZhY2VSZWdpb24+JiBzdGFjaywgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpCit7
CisgICAgaWYgKHN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBzdGFjay5hcHBlbmQoUmVuZGVy
U3VyZmFjZVJlZ2lvbigpKTsKKyAgICAgICAgc3RhY2subGFzdCgpLnN1cmZhY2UgPSBuZXdUYXJn
ZXQ7CisgICAgfSBlbHNlIGlmIChzdGFjay5sYXN0KCkuc3VyZmFjZSAhPSBuZXdUYXJnZXQpIHsK
KyAgICAgICAgY29uc3QgUmVuZGVyU3VyZmFjZVJlZ2lvbiYgcHJldmlvdXMgPSBzdGFjay5sYXN0
KCk7CisgICAgICAgIHN0YWNrLmFwcGVuZChSZW5kZXJTdXJmYWNlUmVnaW9uKCkpOworICAgICAg
ICBzdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1RhcmdldDsKKyAgICAgICAgc3RhY2subGFzdCgp
Lm9jY2x1ZGVkSW5TY3JlZW4gPSBwcmV2aW91cy5vY2NsdWRlZEluU2NyZWVuOworICAgIH0KK30K
KworLy8gUG9wIHRoZSB0b3Agb2YgdGhlIHN0YWNrIG9mZiwgcHVzaCBvbiB0aGUgbmV3IHN1cmZh
Y2UsIGFuZCBtZXJnZSB0aGUgb2xkIHRvcCdzIG9jY2x1c2lvbiBpbnRvIHRoZSBuZXcgdG9wIHN1
cmZhY2UuCitzdGF0aWMgdm9pZCBsZWF2ZVRhcmdldFJlbmRlclN1cmZhY2UoVmVjdG9yPFJlbmRl
clN1cmZhY2VSZWdpb24+JiBzdGFjaywgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQp
Cit7CisgICAgaW50IGxhc3RJbmRleCA9IHN0YWNrLnNpemUoKSAtIDE7CisgICAgYm9vbCBzdXJm
YWNlV2lsbEJlQXRUb3BBZnRlclBvcCA9IHN0YWNrLnNpemUoKSA+IDEgJiYgc3RhY2tbbGFzdElu
ZGV4IC0gMV0uc3VyZmFjZSA9PSBuZXdUYXJnZXQ7CisKKyAgICBpZiAoc3VyZmFjZVdpbGxCZUF0
VG9wQWZ0ZXJQb3ApIHsKKyAgICAgICAgLy8gTWVyZ2UgdGhlIHRvcCBvZiB0aGUgc3RhY2sgZG93
bi4KKyAgICAgICAgc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVkZWRJblNjcmVlbi51bml0ZShz
dGFja1tsYXN0SW5kZXhdLm9jY2x1ZGVkSW5TY3JlZW4pOworICAgICAgICBzdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgdG9wIG9mIHRoZSBz
dGFjayB3aXRoIHRoZSBuZXcgcHVzaGVkIHN1cmZhY2UuIENvcHkgdGhlIG9jY2x1ZGVkIHJlZ2lv
biB0byB0aGUgdG9wLgorICAgICAgICBzdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1RhcmdldDsK
KyAgICB9Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRUeXBl
KQogewogICAgIC8vIFVzZSBGcm9udFRvQmFjayB0byBhbGxvdyBmb3IgdGVzdGluZyBvY2NsdXNp
b24gYW5kIHBlcmZvcm1pbmcgY3VsbGluZyBkdXJpbmcgdGhlIHRyZWUgd2Fsay4KICAgICB0eXBl
ZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0s
IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBl
OwogCisgICAgLy8gVGhlIHN0YWNrIGhvbGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1YnRyZWVz
IGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBsZWF2ZSBh
IHN1YnRyZWUgd2UgbWF5CisgICAgLy8gYXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90IHRvIHRo
ZSBwYXJ0cyBvdXRzaWRlIHRoZSBzdWJ0cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRpbWUgd2Ug
c2VlIGEgbmV3IHN1YnRyZWUgdW5kZXIgYSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdldCB0byB0
aGUgdG9wIG9mIHRoZSBzdGFjay4gVGhpcyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVwcmVzZW50
aW5nIGl0c2VsZiwgb3IgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4gd2Ugdmlz
aXQgYSB0YXJnZXQgc3VyZmFjZSwgd2UgYXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRyZWUsIHdo
aWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBh
IGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRvIHRoZSBj
dXJyZW50IHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8v
IC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGluZyBzdXJm
YWNlLCB0aGUgY3VycmVudCB0YXJnZXQgd2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRoZSBzdGFj
ayBzaW5jZSB3ZSBqdXN0IGNhbWUgZnJvbSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2UuCisgICAg
Ly8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRo
ZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhl
IHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorICAgIFZlY3RvcjxSZW5kZXJTdXJmYWNlUmVn
aW9uPiB0YXJnZXRTdXJmYWNlU3RhY2s7CisKICAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9
IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
Zm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4o
JnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYg
KGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKworICAgICAgICAgICAgZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHRhcmdldFN1cmZhY2VTdGFjaywgaXQtPnJlbmRlclN1cmZh
Y2UoKSk7CiAgICAgICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSgq
aXQsIHBhaW50VHlwZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHRoZSByZXBsaWNhIGxh
eWVyIHRvIHRoZSBjdXJyZW50IG9jY2x1c2lvbgorCisgICAgICAgICAgICBpZiAoaXQtPm1hc2tM
YXllcigpIHx8IGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkgPCAxKQorICAgICAg
ICAgICAgICAgIHRhcmdldFN1cmZhY2VTdGFjay5sYXN0KCkub2NjbHVkZWRJblNjcmVlbiA9IFJl
Z2lvbigpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKCFpdC0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHBh
aW50Q29udGVudHNJZkRpcnR5KCppdCwgcGFpbnRUeXBlKTsKKworICAgICAgICAgICAgZW50ZXJU
YXJnZXRSZW5kZXJTdXJmYWNlKHRhcmdldFN1cmZhY2VTdGFjaywgaXQtPnRhcmdldFJlbmRlclN1
cmZhY2UoKSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eSgqaXQsIHBhaW50VHlw
ZSwgdGFyZ2V0U3VyZmFjZVN0YWNrLmxhc3QoKS5vY2NsdWRlZEluU2NyZWVuKTsKKyAgICAgICAg
ICAgIGl0LT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKHRhcmdldFN1cmZhY2VTdGFjay5s
YXN0KCkub2NjbHVkZWRJblNjcmVlbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs
ZWF2ZVRhcmdldFJlbmRlclN1cmZhY2UodGFyZ2V0U3VyZmFjZVN0YWNrLCBpdC50YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggODFiNWYyNTA1ZjFiODQ1MGM2ZGFkMTNj
ZjFjNWU4M2MwMWYwODBjYy4uZjU4MjAzZDE1ZWIyMDQ1MDcxYzJlZmE0NDhiYTQwYmYxOWE1NGNh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3Mg
Q0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKIGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgUmVnaW9u
OwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogCkBAIC0y
MDUsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8TWFuYWdl
ZFRleHR1cmU+ID4gVGV4dHVyZUxpc3Q7CiAKICAgICBlbnVtIFBhaW50VHlwZSB7IFBhaW50Vmlz
aWJsZSwgUGFpbnRJZGxlIH07Ci0gICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHko
TGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50
c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSwgY29uc3QgUmVnaW9uJiBvY2NsdWRl
ZFNjcmVlblNwYWNlKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxp
c3QmLCBQYWludFR5cGUpOwogICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1
cmZhY2UoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIu
Y3BwCmluZGV4IGJhOWM2NmU4NzQ5MjA2MjU3NWY1NTBlYjBmNWVlZjM2ZDU1Y2Y0NmEuLmM4YmQ5
YjBmMzYzMjRhZjZlOGE0YmMxZmI1YTI0MDhmZjAzMTQ1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmNwcApAQCAtNzUsMTggKzc1LDYgQEAgc3RhdGljIEludFJlY3QgcmVjdFN1YnRyYWN0UmVn
aW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIHJldHVy
biByZWN0OwogfQogCi1zdGF0aWMgSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIGZsb2F0IHggPSBjZWlsZihyZWN0LngoKSk7Ci0gICAgZmxvYXQg
eSA9IGNlaWxmKHJlY3QueSgpKTsKLSAgICAvLyBBIHJlY3Qgb2Ygd2lkdGggMCBzaG91bGQgbm90
IGJlY29tZSBhIHJlY3Qgb2Ygd2lkdGggLTEuCi0gICAgZmxvYXQgd2lkdGggPSBtYXg8ZmxvYXQ+
KGZsb29yZihyZWN0Lm1heFgoKSkgLSB4LCAwKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBtYXg8Zmxv
YXQ+KGZsb29yZihyZWN0Lm1heFkoKSkgLSB5LCAwKTsKLQotICAgIHJldHVybiBJbnRSZWN0KGNs
YW1wVG9JbnRlZ2VyKHgpLCBjbGFtcFRvSW50ZWdlcih5KSwKLSAgICAgICAgICAgICAgICAgICBj
bGFtcFRvSW50ZWdlcih3aWR0aCksIGNsYW1wVG9JbnRlZ2VyKGhlaWdodCkpOwotfQotCiB2b2lk
IENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QpCiB7
CiAgICAgaWYgKCFxdWFkTGlzdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBkMmUx
Y2ZlZjkzZTI4MjE2NmRhODUxMjU2Yzk1YzBlNjUxMmM2OWJhLi5iMWZhNzI5MTg0MDFlMzI0MGU0
MWQxM2QyZTBjMjdkMGM1NmFkN2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KQEAgLTM1LDYgKzM2LDEy
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNU
KGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9FUShh
LnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAor
ICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKKwogbmFtZXNwYWNlIHsKIAog
dm9pZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVz
ZXJ2ZXMzRCkKQEAgLTU5NSw0ICs2MDIsMTc0IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogLy8gIC0gdGVzdCB0aGUg
b3RoZXIgZnVuY3Rpb25zIGluIENDTGF5ZXJUcmVlSG9zdENvbW1vbgogLy8KIAorVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbikKK3sK
KyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVz
ZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAg
IHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMw
KSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1
ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxp
c3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTog
d2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIEND
TGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1
ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uo
b2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBv
Y2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNp
emUoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2Vs
ZlRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0
IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFJlZ2lvbiBvY2NsdWRl
ZDsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBw
YXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVy
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVy
VHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRl
KDkwKTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisg
ICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNp
YWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4
IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2Vs
ZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikK
K3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5n
IHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVy
IHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUg
dG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwor
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+
YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCg1MCwgNTAsIDUwLCA1MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVk
U3VyZmFjZSkKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMg
YXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRD
aGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsK
KyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNm
b3JtLnJvdGF0ZSg5MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTAp
OworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGNoaWxkLT5zZXRNYXNr
c1RvQm91bmRzKHRydWUpOworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhp
cyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwg
d2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7
CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBvY2NsdWRlZC5ib3VuZHMo
KSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAv
KiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb3BhcXVlIHJlY3QgZnJvbSB8bGF5ZXJ8Ogor
ICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfDMwICBWaXNpYmxlIHJlZ2lvbiBvZiB8bGF5
ZXJ8OiAvLy8vLworICAgICAgfCAgICAzMCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHJvdGF0
ZSg5MCkgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8IDMw
ICsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAg
fCAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgMTAwIHwgICAgfCAg
MTAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgPT0+ICAgICB8ICAg
ICB8ICAgICAgICAgICAgICAgfDEwICAgICAgICAgICAgICAgfAorICAgICAgfCAgICB8MTArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgIHwgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICB8CisgICAgICB8ICAgIHwgIHwgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8v
Ly8vLy8vLy8vL3wgICAgIDQyMCAgICAgIHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8v
Ly8vLy8vfDYwICAgICAgICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8v
Ly98ICAgICAgICAgICAgICB8ICB8CisgICAgICArLS0tLXwtLXwtLS0tLS0tLS0tLS0tKyAgICAg
ICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgKy0tfC0tfC0tLS0tLS0tLS0tLS0tLSsg
ICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgMjB8MTB8ICAgICA3MCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCB8NTAwICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
fAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Cisg
ICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAg
ICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDEwfAorICAgICAgICAg
ICArLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAg
ICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0rCisgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgNDkwICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDUwMAorICAgICAqLworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMGNiMjYwNWU4
YTZkM2QzMjJmY2ViMGZjNzNhYTdhZmU2OTQ5MjA5MC4uMWZlYzMyNDIxNjIzNGY1NzZlYWJmNDVh
YmExZDdlNGJhOTA0NGU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAj
aW5jbHVkZSAiV2ViS2l0LmgiCkBAIC0xMDA1LDkgKzEwMDYsOSBAQCBwdWJsaWM6CiAgICAgaW50
IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRhdGVDb3VudDsgfQogICAgIHZvaWQgcmVzZXRV
cGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9IDA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKICAgICB7Ci0gICAgICAgIENv
bnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVkZWRTY3JlZW5TcGFj
ZSk7CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0NvdW50Kys7CiAgICAgfQogCkBAIC0xMjI4LDQg
KzEyMjksMjQ0IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0QXRvbWljQ29tbWl0LCBydW5N
dWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCisjZGVmaW5lIEVYUEVDVF9FUV9S
RUNUKGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9F
UShhLnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsg
XAorICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKKworY2xhc3MgVGVzdExh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXN0TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29u
dGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKKyAgICB7Cisg
ICAgICAgIG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IG9jY2x1ZGVkU2NyZWVuU3BhY2U7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworICAgIGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb2NjbHVkZWRTY3JlZW5TcGFjZTsgfQorICAgIHZvaWQgY2xlYXJPY2NsdWRlZFNjcmVl
blNwYWNlKCkgeyBtX29jY2x1ZGVkU2NyZWVuU3BhY2UgPSBSZWdpb24oKTsgfQorCitwcml2YXRl
OgorICAgIFRlc3RMYXllckNocm9taXVtKCkgOiBMYXllckNocm9taXVtKCkgeyB9CisKKyAgICBS
ZWdpb24gbV9vY2NsdWRlZFNjcmVlblNwYWNlOworfTsKKworc3RhdGljIHZvaWQgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21p
dW0qIHBhcmVudCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
U2l6ZSYgYm91bmRzLCBib29sIG9wYXF1ZSkKK3sKKyAgICBsYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKyAgICBpZiAocGFyZW50KQorICAgICAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsK
KyAgICBsYXllci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEFuY2hv
clBvaW50KGFuY2hvcik7CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBs
YXllci0+c2V0Qm91bmRzKGJvdW5kcyk7CisgICAgbGF5ZXItPnNldE9wYXF1ZShvcGFxdWUpOwor
ICAgIGxheWVyLT5jbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UoKTsKK30KKworY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3Qg
eworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbigpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBSZWZQdHI8VGVz
dExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBjaGlsZCA9IFRlc3RMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBjaGlsZDIg
PSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxUZXN0TGF5ZXJD
aHJvbWl1bT4gZ3JhbmRDaGlsZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICAg
ICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBtYXNrID0gVGVzdExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICAgICAgY2hp
bGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICAgICAgY2hpbGRUcmFuc2Zvcm0u
cm90YXRlKDkwKTsKKyAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTAp
OworCisgICAgICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgICAgIC8v
IFNlZSBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVn
aW9uV2l0aFJvdGF0ZWRTdXJmYWNlIGZvciBhIG5pY2UgdmlzdWFsIG9mIHRoZXNlIGxheWVycyBh
bmQgaG93IHRoZXkgZW5kIHVwCisgICAgICAgIC8vIHBvc2l0aW9uZWQgb24gdGhlIHNjcmVlbi4K
KworICAgICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIgaXMgcm90YXRlZCBhbmQgdGhlIGdyYW5kQ2hp
bGQgaXMgb3BhcXVlLCBidXQgY2xpcHBlZCB0byB0aGUgY2hpbGQgYW5kIHJvb3RMYXllcgorICAg
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
MTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhj
aGlsZC5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAg
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxk
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwg
MTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRW
aWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxl
dGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGdyYW5kQ2hpbGQtPm9j
Y2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgZ3Jh
bmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIGNoaWxkLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGNoaWxkLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
bGF5ZXIgaXMgb3BhcXVlLCB0aGVuIGl0IGFkZHMgdG8gdGhlIG9jY2x1c2lvbiBzZWVuIGJ5IHRo
ZSByb290TGF5ZXIuCisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdExh
eWVyLmdldCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNm
b3JtLCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgp
LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBF
WFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBj
aGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIHJvb3RMYXllci0+b2Nj
bHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCByb290
TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAg
Ly8gQWRkIGEgc2Vjb25kIGNoaWxkIHRvIHRoZSByb290IGxheWVyIGFuZCB0aGUgcmVnaW9ucyBz
aG91bGQgbWVyZ2UKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5
ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDcwLCAyMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5n
ZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIElu
dFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJv
b3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0
U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRh
dGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwor
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENoaWxk
LT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3Bh
Y2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMzAsIDMwLCA3MCwgNzApLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyMCwg
NzAsIDgwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMnUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBNb3ZlIHRoZSBzZWNvbmQgY2hpbGQgdG8gYmUgc3Vy
ZS4KKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCks
IDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVl
KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9v
dExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAw
LCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihy
b290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290
TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMo
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMw
LCA3MCwgNzApLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAzMCwgOTAsIDcwKSwg
cm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBF
Q1RfRVEoMnUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQgbGF5ZXIgaGFzIGEgbWFzayBvbiBpdCwgdGhl
biBpdCBzaG91bGRuJ3QgY29udHJpYnV0ZSB0byBvY2NsdXNpb24gb24gc3R1ZmYgYmVsb3cgaXQK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9vdExh
eWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKworICAgICAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2suZ2V0KCkpOwor
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3
MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
bGF5ZXIgd2l0aCBhIG1hc2sgaXMgYmVsb3cgY2hpbGQyLCB0aGVuIGNoaWxkMiBzaG91bGQgY29u
dHJpYnV0ZSB0byBvY2NsdXNpb24gb24gZXZlcnl0aGluZywgYW5kIGNoaWxkIHNob3VsZG4ndCBj
b250cmlidXRlIHRvIHRoZSByb290TGF5ZXIKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQo
KSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1
ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCBy
b290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBjaGlsZC0+
c2V0TWFza0xheWVyKG1hc2suZ2V0KCkpOworCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3Bv
cnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7
CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBncmFuZENoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDEwLCA0MCwgOTAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcw
LCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBsYXllciBoYXMgYSBub24t
b3BhcXVlIGRyYXdPcGFjaXR5LCB0aGVuIGl0IHNob3VsZG4ndCBjb250cmlidXRlIHRvIG9jY2x1
c2lvbiBvbiBzdHVmZiBiZWxvdyBpdAorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBj
aGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIGNoaWxkLT5zZXRN
YXNrTGF5ZXIoMCk7CisgICAgICAgIGNoaWxkLT5zZXREcmF3T3BhY2l0eSgwLjUpOworCisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjAp
LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3Bh
Y2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDEwLCA3MCwgOTAsIDMwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91
bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5T
cGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQgbGF5ZXIg
d2l0aCBub24tb3BhcXVlIGRyYXdPcGFjaXR5IGlzIGJlbG93IGNoaWxkMiwgdGhlbiBjaGlsZDIg
c2hvdWxkIGNvbnRyaWJ1dGUgdG8gb2NjbHVzaW9uIG9uIGV2ZXJ5dGhpbmcsIGFuZCBjaGlsZCBz
aG91bGRuJ3QgY29udHJpYnV0ZSB0byB0aGUgcm9vdExheWVyCisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3Rpbmcocm9vdExheWVyLmdldCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUp
OworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290
TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAs
IDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxk
Mi5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgxMCwgNzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAg
ICAgY2hpbGQtPnNldE1hc2tMYXllcigwKTsKKyAgICAgICAgY2hpbGQtPnNldERyYXdPcGFjaXR5
KDAuNSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVy
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5i
b3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcwLCA5
MCwgMzApLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMXUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0
cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQwLCA5MCwg
NjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDJ1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNzAsIDkwLCAzMCksIHJvb3RMYXll
ci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1
LCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAg
ICAgICAgLy8gS2lsbCB0aGUgbGF5ZXJUcmVlSG9zdCBpbW1lZGlhdGVseS4KKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5j
bGVhcigpOworCisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKKworU0lOR0xFX0FORF9NVUxUSV9USFJFQURf
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbikKKwogfSAvLyBuYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXll
ckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGYwYjVjNDExYjY1NmFlZGU3NTk1NzEwZTRkOGNm
ZDdkMjRkYjUzM2MuLjFkZjI3YzAxMTE5YjI2NTdlODJlMmEwNzk3YjFjMDFiNTBkMzA1ZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9t
aXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExh
eWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNDU2NoZWR1
bGVyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXll
ckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCkBAIC0xMzgsNyAr
MTM5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIGNhbnZhcy0+Y29udGVudENoYW5nZWQoKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7Ci0gICAgICAgIGNh
bnZhcy0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgUmVnaW9uIG9jY2x1ZGVkU2Ny
ZWVuU3BhY2U7CisgICAgICAgIGNhbnZhcy0+cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVkZWRT
Y3JlZW5TcGFjZSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShjYW52YXMtPm5lZWRzRGlzcGxheSgp
KTsKICAgICAgICAgewogICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3Bl
ZEltcGxUaHJlYWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
aWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBiODUwZjgyNDFjYzA4MDE0MTM4ZTM4MDhj
MDYxNGNhNjEwNGU2MzIxLi5iMDM1MGRiNDk1ZmI1NjJiMzU4MTQwODdlZjY0MTBkNzYxOTViYTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDQ0xheWVyVHJl
ZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LmgiCiAj
aW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2lu
Y2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIgLy8gRm9yIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZApAQCAtMzksNiArNDAsMTIgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNp
bmcgbmFtZXNwYWNlIFdURjsKIAorI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCisgICAg
RVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsg
XAorICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEo
YS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEZha2VUZXh0
dXJlQWxsb2NhdG9yIDogcHVibGljIFRleHR1cmVBbGxvY2F0b3IgewpAQCAtNzAsMTcgKzc3LDIw
IEBAIHB1YmxpYzoKICAgICBpbnQgcHJlcGFyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wcmVw
YXJlQ291bnQ7IH0KICAgICB2b2lkIGNsZWFyUHJlcGFyZUNvdW50KCkgeyBtX3ByZXBhcmVDb3Vu
dCA9IDA7IH0KIAorICAgIHZvaWQgc2V0T3BhcXVlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIG9w
YXF1ZVBhaW50UmVjdCkgeyBtX29wYXF1ZVBhaW50UmVjdCA9IG9wYXF1ZVBhaW50UmVjdDsgfQor
CiAgICAgLy8gTGFzdCByZWN0IHBhc3NlZCB0byBwcmVwYXJlVG9VcGRhdGUoKS4KICAgICBjb25z
dCBJbnRSZWN0JiBsYXN0VXBkYXRlUmVjdCgpICBjb25zdCB7IHJldHVybiBtX2xhc3RVcGRhdGVS
ZWN0OyB9CiAKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4
dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1cm4gYWRv
cHRQdHIobmV3IFRleHR1cmUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOyB9CiAg
ICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVt
KSB7IHJldHVybiBTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYs
IGludCwgZmxvYXQsIEludFJlY3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRl
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwgaW50LCBmbG9hdCwg
SW50UmVjdCogcmVzdWx0aW5nT3BhcXVlUmVjdCk7CiAKIHByaXZhdGU6CiAgICAgaW50IG1fcHJl
cGFyZUNvdW50OwogICAgIEludFJlY3QgbV9yZWN0VG9JbnZhbGlkYXRlOwogICAgIEludFJlY3Qg
bV9sYXN0VXBkYXRlUmVjdDsKKyAgICBJbnRSZWN0IG1fb3BhcXVlUGFpbnRSZWN0OwogICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBtX2xheWVyOwogfTsKIApAQCAtMTM5LDcgKzE0
OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5h
Z2VyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFuYWdlcjsgfQogCi0gICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50
c0lmRGlydHkoY29uc3QgUmVnaW9uJiAvKiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogICAgIHsK
ICAgICAgICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJlY3QoKSk7CiAgICAgfQpAQCAt
MTg3LDcgKzE5Nyw3IEBAIHZvaWQgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QKICAgICAgICAgbV9yZWN0VG9J
bnZhbGlkYXRlID0gSW50UmVjdCgpOwogICAgICAgICBtX2xheWVyID0gMDsKICAgICB9Ci0gICAg
KnJlc3VsdGluZ09wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7CisgICAgKnJlc3VsdGluZ09wYXF1ZVJl
Y3QgPSBtX29wYXF1ZVBhaW50UmVjdDsKIH0KIAogVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwdXNoRGlydHlUaWxlcykKQEAgLTQ2MCw0ICs0NzAsOTggQEAgVEVTVChUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9y
OjpzaHV0ZG93bigpOwogfQogCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGxheWVyQWRk
c1NlbGZUb09jY2x1ZGVkUmVnaW9uKQoreworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQq
MTAyNCwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKKworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRl
cyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzIGluIHZhcmlvdXMgd2F5cy4KKworICAgIFJlZ2lv
biBvY2NsdWRlZDsKKyAgICBJbnRSZWN0IGNvbnRlbnRCb3VuZHMgPSBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKTsKKyAgICBJbnRSZWN0IHZpc2libGVCb3VuZHMgPSBJbnRSZWN0KDAsIDAsIDEwMCwg
MTUwKTsKKworICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcy5zaXplKCkpOworICAg
IGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVCb3VuZHMpOworICAgIGxheWVyLT5z
ZXREcmF3T3BhY2l0eSgxKTsKKworICAgIC8vIFRoZSBzY3JlZW5TcGFjZVRyYW5zZm9ybSBpcyB2
ZXJpZmllZCBpbiBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0cworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtOworICAgIGxheWVyLT5zZXRTY3JlZW5TcGFjZVRy
YW5zZm9ybShzY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMg
b3BhcXVlIHRoZW4gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgYmUgdGhlIHdob2xlIGxheWVy
J3MgdmlzaWJsZSByZWdpb24uCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKyAgICBsYXll
ci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVUb1Vw
ZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5
ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVYUEVDVF9F
UV9SRUNUKHZpc2libGVCb3VuZHMsIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElmIHRoZSBsYXllciBpcyBu
b3Qgb3BhcXVlIHRoZW4gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgYmUgZW1wdHkuCisgICAg
bGF5ZXItPnNldE9wYXF1ZShmYWxzZSk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRl
bnRCb3VuZHMpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJvdW5kcyk7CisK
KyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNj
cmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIG9jY2x1
ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgIC8vIElmIHRoZSBsYXllciBwYWludHMgb3BhcXVlIGNvbnRlbnQsIHRoZW4gdGhl
IG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgbWF0Y2ggdGhlIHZpc2libGUgb3BhcXVlIGNvbnRlbnQu
CisgICAgSW50UmVjdCBvcGFxdWVQYWludFJlY3QgPSBJbnRSZWN0KDEwLCAxMCwgOTAsIDE5MCk7
CisgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVj
dChvcGFxdWVQYWludFJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91
bmRzKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAg
b2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5T
cGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9uKG9wYXF1ZVBh
aW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElmIHdlIHBhaW50IGFn
YWluIHdpdGhvdXQgaW52YWxpZGF0aW5nLCB0aGUgc2FtZSBzdHVmZiBzaG91bGQgYmUgb2NjbHVk
ZWQuCisgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50
UmVjdChJbnRSZWN0KCkpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJvdW5k
cyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2Ns
dWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rp
b24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSwgb2NjbHVkZWQuYm91bmRzKCkpOwor
ICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworCisgICAgLy8gSWYg
dGhlIGxheWVyIGlzIHRyYW5zZm9ybWVkIHRoZW4gdGhlIHJlc3VsdGluZyBvY2NsdWRlZCBhcmVh
IG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIGl0cyB0YXJnZXQgc3BhY2UuCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVu
dEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAg
ICB0cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50
Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAxMCk7CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zvcm0u
dHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWln
aHQoKSAvIDIuMCk7CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gKj0gdHJhbnNmb3JtOworICAg
IHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8g
Mi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgbGF5ZXItPnNldFNjcmVl
blNwYWNlVHJhbnNmb3JtKHNjcmVlblNwYWNlVHJhbnNmb3JtKTsKKyAgICBsYXllci0+cHJlcGFy
ZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAg
ICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQ
RUNUX0VRX1JFQ1Qoc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChpbnRlcnNlY3Rpb24ob3Bh
cXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBF
WFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIEJ1dCBhIG5v
bi1heGlzLWFsaWduZWQgdHJhbnNmb3JtIGRvZXMgbm90IGdldCBjb25zaWRlcmVkIGZvciBvY2Ns
dXNpb24uCisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAy
LjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHRyYW5zZm9ybS5yb3RhdGUo
NSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4w
LCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zv
cm0udHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5o
ZWlnaHQoKSAvIDIuMCk7CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gKj0gdHJhbnNmb3JtOwor
ICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgp
IC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgbGF5ZXItPnNldFNj
cmVlblNwYWNlVHJhbnNmb3JtKHNjcmVlblNwYWNlVHJhbnNmb3JtKTsKKyAgICBsYXllci0+cHJl
cGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsK
KyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAg
Ly8gRklYTUU6IElmIHdlIGZpbmQgYW4gb3BhcXVlIHJlY3QgY29udGFpbmVkIGluIHRoZSByb3Rh
dGVkIG5vbi1heGlzLWFsaWduZWQgcmVjdCwgdGhlbgorICAgIC8vIHRoaXMgd29uJ3QgYmUgYW4g
ZW1wdHkgcmVzdWx0LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgb2NjbHVkZWQuYm91
bmRzKCkpOworICAgIEVYUEVDVF9FUSgwdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworfQor
CiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124671</attachid>
            <date>2012-01-30 22:24:56 -0800</date>
            <delta_ts>2012-01-31 08:48:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120131012454.patch</filename>
            <type>text/plain</type>
            <size>62538</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjJkMzI3NzU2MDU5ODJj
NjE2MGZjNjc3ZWY5ZTk5MzZhNTBlMmM5ZS4uYmVlOWQ2NjMzZTM3ZmM3YjgxYzVhODY5MDcwY2Ez
NTRlYjY3MDRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTI3ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAsIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwLCBDQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2VkSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKEltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
aXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2Nj
bHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6cG9wQW5kUHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6CisKIDIwMTIt
MDEtMzAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVlIGZvciBkcmF3IGN1bGxp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMGRmYWQ5NmRiMDEzZjVmMGRlMDI0ZDVl
M2NlY2U0NjFjZGM1NTBiMC4uNzM1YzRkODU0NDk5NDdhZTdiZWM2NTFlMTM1OWEwOWM0YmQ5ZmE3
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wMS0y
NyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENvbXB1dGUgb2NjbHVzaW9uIGR1cmluZyBwYWludCBsb29wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg1OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RG
OjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZzo6cGFpbnRDb250ZW50c0lm
RGlydHkpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFRlc3RMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdURjo6VGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRl
c3RMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OlRl
c3RMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJD
aHJvbWl1bTo6b2NjbHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNo
cm9taXVtOjpjbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV1RGOjpUZXN0TGF5
ZXJDaHJvbWl1bTo6VGVzdExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV1RGOjpzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9j
Y2x1c2lvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lv
bjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uKToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb246OmFmdGVyVGVzdCk6CisgICAgICAg
ICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0OjpmdWxsTGlmZWN5Y2xlVGVzdCk6CisgICAgICAg
ICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VM
YXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAoRmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVt
OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVV
cGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV1RGOjpURVNUKToKKyAgICAgICAg
KFdURik6CisKIDIwMTItMDEtMzAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2UgcmVnaW9uIHJlcG9ydGVkIHBhaW50ZWQgb3BhcXVl
IGZvciBkcmF3IGN1bGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuY3BwCmluZGV4IDQ2ZmNhNmMyN2U5ZTkzZTYzOTQ2ODI3NWYzNzU5NTk0ZjVjOTJi
NzcuLjU5NWFmMmEzMjNhM2VlNWFhNDhmNjgwODViNjY2NmE3ZDlkNDk0ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE4LDYgKzIx
OCwxOSBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIo
aGVpZ2h0KSk7CiB9CiAKK0ludFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpbnQgeCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7Cisg
ICAgaW50IHkgPSBjbGFtcFRvSW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOworICAgIGZsb2F0IG1h
eFggPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYocmVjdC5tYXhYKCkpKTsKKyAgICBmbG9hdCBtYXhZ
ID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHJlY3QubWF4WSgpKSk7CisgICAgLy8gQSByZWN0IG9m
IHdpZHRoIDAgc2hvdWxkIG5vdCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWls
L2Zsb29yLgorICAgIGludCB3aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDAp
OworICAgIGludCBoZWlnaHQgPSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKKwor
ICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCiBGbG9hdFJlY3Qg
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAg
fHwgc3JjUmVjdC5oZWlnaHQoKSA9PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaAppbmRleCAxNDA5MDcxYjExOTg4M2QzYjA4NjI3MGFhNGNmNzg4NGY0
ZmJhNjJjLi4yMmMxNzFjNWFiNGQxODg5NjBlODJmZTdiZTAyMThlNDFjZjhhNWY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjcwLDYgKzI3
MCw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBG
bG9hdFJlY3QmIGIpCiAKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKIAorLy8gUmV0dXJucyBhIHZhbGlkIEludFJlY3QgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2
ZW4gRmxvYXRSZWN0LgorSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisKIC8vIE1hcCByZWN0IHIgZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBk
ZXN0UmVjdC4KIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTUwNWFkYWMyNDNlMDc2NjVkMmRkYWIy
OGY0NzAzZmY4ZWY1Yjk0My4uMDkwNTQ3NDE4NmVmYzJjNDBhN2FkYTQ1ODU5NWUwYmY4M2YzNjhj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC05MSw3ICs5MSw3
IEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogICAg
ICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0K
IAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3Zv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdp
b24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiB7CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAppbmRl
eCA4MzYxNWExZjIyMzU2MTY0NjJlYjFmOGQ0MTIyZTFhZDhlNThjOTIyLi5lY2JhOTBmNGVkMTYy
YzY4ZGM0ZjA4ZTYxMGJkZDRmNzJkOWIzMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaApAQCAtNDAsNiArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQSBsYXllciBjb250YWluaW5n
IGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcwogY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtIDog
cHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0gewpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJh
d3NDb250ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYg
b2NjbHVkZWRTY3JlZW5TcGFjZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCA1MjlmY2UwMzY0YTgyODU1YWE0MDYzOTcx
NTZlMGZiYjRlM2E5NTBlLi4zNDMwMzExMGZhOWNhZmRmMjZjYTliY2ZlZDZlMjRjNGY0MDJmMmFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC05Myw3ICs5Myw3IEBA
IGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAgICAgcmV0
dXJuIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgJiYgbV9kZWxlZ2F0ZTsKIH0K
IAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9u
JiAvKiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogewogICAgIHVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDQyNjY3
OWNhZmFiYjczOTRjMDJlNzkwMWJlMzMyZDdiY2I1ZTA4MWEuLjVlZmY2YTNkNjBhMTJkMTIwZWI3
MjAwMGQzNTBiMWZiNTgzOGVhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApA
QCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGlsZXJD
aHJvbWl1bTsKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiAKIGNs
YXNzIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJEZWxlZ2F0ZSgpIHsgbV9kZWxlZ2F0ZSA9IDA7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQg
aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVl
KGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDE1NGZiMjgzMTRm
M2U2YzkyNDA0N2JiNDgzNjczNjkyZGZjZmFiNy4uODMxY2JlODA5NjNhM2E4MDBiOGFhNDZhNjk5
NDhmNGZjN2Y1ZWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNTgs
NyArMTU4LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBj
b250ZW50cykKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpw
YWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdpb24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2Ug
Ki8pCiB7CiAgICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0
ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5kZXggZDcxMjkyNDUxYzM1NTVlYWYw
YzE2Y2Y5ZjJjM2YzOTViZTA3NTMwNC4uYWI1YzFiMjdiMmM3NWE3NWFlMzQzNzkzY2E1Mzg3OWYy
NTUxZGQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdlTGF5ZXJUZXh0
dXJlVXBkYXRlcjsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIG9u
bHkgYW4gSW1hZ2UgZWxlbWVudC4KIGNsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBU
aWxlZExheWVyQ2hyb21pdW0gewpAQCAtNTMsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SW1hZ2VMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRT
Y3JlZW5TcGFjZSk7CiAgICAgdmlydHVhbCBib29sIG5lZWRzQ29udGVudHNTY2FsZSgpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAppbmRleCBkZTVjNzAyNWZhNjRlZGU4NDE3YWMzNjViMTk4YzU2N2UyY2RmYWQ2Li5iMmY3
MDE0MWI0N2E1ZDQ3YjQ0MDI5MzgwZDM4Y2IzZGMzYzViMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgorI2luY2x1ZGUgIlJlZ2lvbi5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTQ2OSw2ICs0NzAs
MzUgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IGNvbnRlbnRz
U2NhbGUpCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4
IExheWVyQ2hyb21pdW06OmNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sK
KyAgICBJbnRTaXplIGJvdW5kc0luTGF5ZXJTcGFjZSA9IGJvdW5kcygpOworICAgIEludFNpemUg
Ym91bmRzSW5Db250ZW50U3BhY2UgPSBjb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworCisgICAgLy8g
U2NhbGUgZnJvbSBjb250ZW50IHNwYWNlIHRvIGxheWVyIHNwYWNlCisgICAgdHJhbnNmb3JtLnNj
YWxlTm9uVW5pZm9ybShib3VuZHNJbkxheWVyU3BhY2Uud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3VuZHNJbkxheWVyU3BhY2UuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gdHJhbnNm
b3JtOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3Bh
Y2UoUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKQoreworICAgIGlmICghb3BhcXVlKCkgfHwg
ZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFpc1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gY29udGVudFRvU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlTGF5ZXJSZWN0KCkp
KTsKKyAgICBvY2NsdWRlZFNjcmVlblNwYWNlLnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0YXJnZXRS
ZWN0KSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aXNQYWludGVkQXhpc0FsaWduZWRJblNj
cmVlbigpIGNvbnN0Cit7CisgICAgRmxvYXRRdWFkIHF1YWQgPSBjb250ZW50VG9TY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKHZpc2libGVMYXllclJlY3QoKSkpOworICAg
IHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpj
cmVhdGVSZW5kZXJTdXJmYWNlKCkKIHsKICAgICBBU1NFUlQoIW1fcmVuZGVyU3VyZmFjZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKaW5kZXggOTQ1ZWU4ZTFjNGM1YjQ1NTk0MzA3YTc2MmNkNjAwYjk2NjVl
MGFhNC4uNzY0ZjczMDE1NWI1NDUzN2NkYTRjNzM4MWIzZmQzYmNiNzk2MDY0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEND
TGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBs
YXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFz
cy4KQEAgLTE1Myw3ICsxNTQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHR5
cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2
aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0RyYXdhYmxlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3Jl
ZW5TcGFjZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0
eSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJc01hc2soYm9vbCkgeyB9CkBAIC0xODIsOCArMTgzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3QgPSBjbGlw
UmVjdDsgfQogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90YXJn
ZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQorICAgIC8vIFRoaXMgbW92ZXMgZnJvbSBsYXll
ciBzcGFjZSwgd2l0aCBvcmlnaW4gaW4gdGhlIGNlbnRlciB0byB0YXJnZXQgc3BhY2Ugd2l0aCBv
cmlnaW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KICAgICB2b2lk
IHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgeyBt
X2RyYXdUcmFuc2Zvcm0gPSBtYXRyaXg7IH0KKyAgICAvLyBUaGlzIG1vdmVzIGZyb20gbGF5ZXIg
c3BhY2UsIHdpdGggb3JpZ2luIHRoZSB0b3AgbGVmdCB0byBzY3JlZW4gc3BhY2Ugd2l0aCBvcmln
aW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVl
blNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsg
fQogICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkgeyBtX3NjcmVlblNwYWNlVHJhbnNmb3JtID0gbWF0cml4OyB9CiAgICAg
Y29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJh
d2FibGVDb250ZW50UmVjdDsgfQpAQCAtMTkxLDYgKzE5NCwxMSBAQCBwdWJsaWM6CiAgICAgZmxv
YXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY2FsZTsgfQogICAg
IHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgLy8gQWRkcyBh
bnkgb3BhcXVlIHZpc2libGUgcGl4ZWxzIHRvIHRoZSBvY2NsdWRlZCByZWdpb24uCisgICAgdmly
dHVhbCB2b2lkIGFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBvY2NsdWRlZFNj
cmVlblNwYWNlKTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3Mg
ZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRlc2NlbmRhbnREcmF3
c0NvbnRlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKSB7IH0KQEAgLTIx
MSw2ICsyMTksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBjb250ZXh0LWRlcGVuZGVudCBy
ZXNvdXJjZXMgc3VjaCBhcyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291
cmNlcygpOwogCisgICAgYm9vbCBpc1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkgY29uc3Q7
CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKICAgICAvLyBUaGlzIGZsYWcgaXMgc2V0
IHdoZW4gbGF5ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaAppbmRleCA0ZTE4MjJiMzE4YzVlMWQyNTdhOTA4ZTQyYTRkYzI4ODQ2YjVi
MmE2Li5iZjQ5ODhjMjUzNzljZTIzYTQwMTJhODE0NmRiNWE4NjJkMDM5ZjIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAg
ZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAgICAg
dm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBkcmF3T3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0g
ZHJhd09wYWNpdHk7IH0KIAorICAgIC8vIFRoaXMgZ29lcyBmcm9tIGNvbnRlbnQgc3BhY2Ugd2l0
aCB0aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIgb2YgdGhlIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQg
dG8gdGhlIHRhcmdldCBzcGFjZSB3aXRoIHRoZSBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0IG9mIHRo
ZQorICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQuIFBvc2l0aW9uIHRoZSByZWN0IHNvIHRo
YXQgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVyIG9mIGl0IGJlZm9yZSBhcHBseWluZyB0aGlz
IHRyYW5zZm9ybS4KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1Ry
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgeyBtX2Ry
YXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDBiMGM5YmY0ZTc2MWFjY2Y5ZmFhZTQwY2NmZTQyMjRhZDBmZjM1NjAuLjI4
M2FhOGRkMDliYTIzZmQ3NDQzM2FjYTMyYTY3MzUzODgzYzlhMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcApAQCAtNDg4LDYgKzQ4OCwzNSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cmVzZXJ2ZVRleHR1cmVzKCkKICAgICB9CiB9CiAKK3ZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjphZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5T
cGFjZSkKK3sKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFp
c1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChvcGFxdWUoKSkgeworICAgICAgICBMYXllckNocm9taXVtOjphZGRTZWxmVG9PY2NsdWRlZFNj
cmVlblNwYWNlKG9jY2x1ZGVkU2NyZWVuU3BhY2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VHJhbnNmb3JtID0gY29udGVudFRvU2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKTsKKworICAgIC8vIEZJWE1FOiBDcmVhdGUvVXNlIGEgRmxvYXRSZWdpb24gZm9y
IHRoZSBvY2NsdWRlZFNjcmVlblNwYWNlLCBpbnN0ZWFkIG9mIGEgUmVnaW9uIGJhc2VkIG9uIGlu
dHMsIHRvIGF2b2lkIHRoaXMgc3RlcCBhbmQgZ2V0IGJldHRlciBhY2N1cmFjeSBiZXR3ZWVuIGxh
eWVycyBpbiB0YXJnZXQgc3BhY2UuCisgICAgUmVnaW9uIHRpbGVSZWdpb247CisgICAgaW50IGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5sYXllclJlY3RUb1RpbGVJbmRp
Y2VzKHZpc2libGVMYXllclJlY3QoKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBm
b3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRp
bGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAodGlsZSkgeworICAgICAgICAgICAg
ICAgIEludFJlY3QgdmlzaWJsZVRpbGVPcGFxdWVSZWN0ID0gaW50ZXJzZWN0aW9uKHZpc2libGVS
ZWN0LCB0aWxlLT5tX29wYXF1ZVJlY3QpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzY3Jl
ZW5SZWN0ID0gY29udGVudFRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlVGlsZU9w
YXF1ZVJlY3QpKTsKKyAgICAgICAgICAgICAgICBvY2NsdWRlZFNjcmVlblNwYWNlLnVuaXRlKGVu
Y2xvc2VkSW50UmVjdChzY3JlZW5SZWN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KQogewogICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDE4ZTAyOWMwZGM4N2ZjZTU4YjczNmVhOTg1ZDkzYTRi
YzhkNzI2OGEuLjNjYmJiY2JkN2E0NTI1NDIzNWUzOTU1NTAyMGMzMDM2OGU3MWVjNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiBjbGFz
cyBVcGRhdGFibGVUaWxlOwogCiBjbGFzcyBUaWxlZExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5
ZXJDaHJvbWl1bSB7CkBAIC02Myw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCByZXNlcnZlVGV4dHVyZXMoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRTZWxmVG9PY2NsdWRl
ZFNjcmVlblNwYWNlKFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSk7CisKIHByb3RlY3RlZDoK
ICAgICBUaWxlZExheWVyQ2hyb21pdW0oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKaW5kZXggNjJkNmNlMjMwZmQwZjFiYzZiYWJlMjQ0MDYxNTRmNjc5NmM0ZTFiZC4uNGZmODQz
NGIyMDBjOTJkNDhhMDhiZjkxYzE0YjI3ZjgyMTlkZGFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
SXRlcmF0b3IuaCIKQEAgLTQxMywxMiArNDE0LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpy
ZXNlcnZlVGV4dHVyZXMoKQogfQogCiAvLyBzdGF0aWMKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpw
YWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50
VHlwZSkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNo
cm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50VHlwZSwgY29uc3QgUmVnaW9uJiBvY2NsdWRl
ZFNjcmVlblNwYWNlKQogewogICAgIEFTU0VSVChsYXllcik7CiAgICAgQVNTRVJUKFBhaW50Vmlz
aWJsZSA9PSBwYWludFR5cGUgfHwgUGFpbnRJZGxlID09IHBhaW50VHlwZSk7CiAgICAgaWYgKFBh
aW50VmlzaWJsZSA9PSBwYWludFR5cGUpCi0gICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZE
aXJ0eSgpOworICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVkZWRTY3Jl
ZW5TcGFjZSk7CiAgICAgZWxzZQogICAgICAgICBsYXllci0+aWRsZVBhaW50Q29udGVudHNJZkRp
cnR5KCk7CiB9CkBAIC00MjksMzUgKzQzMCw5MyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwog
ICAgIC8vIGluIGNvZGUsIHdlIGFscmVhZHkga25vdyB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyB3
aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIgc3VyZmFjZSwgc28gdGhlCiAgICAgLy8gbWFz
ayBhbmQgcmVwbGljYSBzaG91bGQgYmUgcGFpbnRlZC4KIAorICAgIC8vIEZJWE1FOiBJZiB0aGUg
c3VyZmFjZSBoYXMgYSByZXBsaWNhLCBpdCBzaG91bGQgYmUgcGFpbnRlZCB3aXRoIG9jY2x1c2lv
biB0aGF0IGV4Y2x1ZGVzIHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlIHN1YnRyZWUuCisgICAg
UmVnaW9uIG5vT2NjbHVzaW9uOworCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xh
eWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0Vmlz
aWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29u
dGVudEJvdW5kcygpKSk7Ci0gICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZh
Y2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSk7CisgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSwgbm9PY2Ns
dXNpb24pOwogICAgIH0KIAogICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IHJlbmRl
clN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCk7CiAgICAgaWYgKHJlcGxpY2FMYXllcikgewot
ICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHBhaW50VHlwZSk7Cisg
ICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlLCBub09j
Y2x1c2lvbik7CiAKICAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsKICAg
ICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91
bmRzKCkpKTsKLSAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+
bWFza0xheWVyKCksIHBhaW50VHlwZSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0
eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUsIG5vT2NjbHVzaW9uKTsKICAg
ICAgICAgfQogICAgIH0KIH0KIAorc3RydWN0IFJlbmRlclN1cmZhY2VSZWdpb24geworICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogc3VyZmFjZTsKKyAgICBSZWdpb24gb2NjbHVkZWRJblNjcmVl
bjsKK307CisKKy8vIEFkZCB0aGUgc3VyZmFjZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayBhbmQg
Y29weSB0aGUgb2NjbHVzaW9uIGZyb20gdGhlIG9sZCB0b3Agb2YgdGhlIHN0YWNrIHRvIHRoZSBu
ZXcuCitzdGF0aWMgdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoVmVjdG9yPFJlbmRlclN1
cmZhY2VSZWdpb24+JiBzdGFjaywgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpCit7
CisgICAgaWYgKHN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBzdGFjay5hcHBlbmQoUmVuZGVy
U3VyZmFjZVJlZ2lvbigpKTsKKyAgICAgICAgc3RhY2subGFzdCgpLnN1cmZhY2UgPSBuZXdUYXJn
ZXQ7CisgICAgfSBlbHNlIGlmIChzdGFjay5sYXN0KCkuc3VyZmFjZSAhPSBuZXdUYXJnZXQpIHsK
KyAgICAgICAgY29uc3QgUmVuZGVyU3VyZmFjZVJlZ2lvbiYgcHJldmlvdXMgPSBzdGFjay5sYXN0
KCk7CisgICAgICAgIHN0YWNrLmFwcGVuZChSZW5kZXJTdXJmYWNlUmVnaW9uKCkpOworICAgICAg
ICBzdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1RhcmdldDsKKyAgICAgICAgc3RhY2subGFzdCgp
Lm9jY2x1ZGVkSW5TY3JlZW4gPSBwcmV2aW91cy5vY2NsdWRlZEluU2NyZWVuOworICAgIH0KK30K
KworLy8gUG9wIHRoZSB0b3Agb2YgdGhlIHN0YWNrIG9mZiwgcHVzaCBvbiB0aGUgbmV3IHN1cmZh
Y2UsIGFuZCBtZXJnZSB0aGUgb2xkIHRvcCdzIG9jY2x1c2lvbiBpbnRvIHRoZSBuZXcgdG9wIHN1
cmZhY2UuCitzdGF0aWMgdm9pZCBsZWF2ZVRhcmdldFJlbmRlclN1cmZhY2UoVmVjdG9yPFJlbmRl
clN1cmZhY2VSZWdpb24+JiBzdGFjaywgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQp
Cit7CisgICAgaW50IGxhc3RJbmRleCA9IHN0YWNrLnNpemUoKSAtIDE7CisgICAgYm9vbCBzdXJm
YWNlV2lsbEJlQXRUb3BBZnRlclBvcCA9IHN0YWNrLnNpemUoKSA+IDEgJiYgc3RhY2tbbGFzdElu
ZGV4IC0gMV0uc3VyZmFjZSA9PSBuZXdUYXJnZXQ7CisKKyAgICBpZiAoc3VyZmFjZVdpbGxCZUF0
VG9wQWZ0ZXJQb3ApIHsKKyAgICAgICAgLy8gTWVyZ2UgdGhlIHRvcCBvZiB0aGUgc3RhY2sgZG93
bi4KKyAgICAgICAgc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVkZWRJblNjcmVlbi51bml0ZShz
dGFja1tsYXN0SW5kZXhdLm9jY2x1ZGVkSW5TY3JlZW4pOworICAgICAgICBzdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgdG9wIG9mIHRoZSBz
dGFjayB3aXRoIHRoZSBuZXcgcHVzaGVkIHN1cmZhY2UuIENvcHkgdGhlIG9jY2x1ZGVkIHJlZ2lv
biB0byB0aGUgdG9wLgorICAgICAgICBzdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1RhcmdldDsK
KyAgICB9Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRUeXBl
KQogewogICAgIC8vIFVzZSBGcm9udFRvQmFjayB0byBhbGxvdyBmb3IgdGVzdGluZyBvY2NsdXNp
b24gYW5kIHBlcmZvcm1pbmcgY3VsbGluZyBkdXJpbmcgdGhlIHRyZWUgd2Fsay4KICAgICB0eXBl
ZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0s
IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBl
OwogCisgICAgLy8gVGhlIHN0YWNrIGhvbGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1YnRyZWVz
IGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBsZWF2ZSBh
IHN1YnRyZWUgd2UgbWF5CisgICAgLy8gYXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90IHRvIHRo
ZSBwYXJ0cyBvdXRzaWRlIHRoZSBzdWJ0cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRpbWUgd2Ug
c2VlIGEgbmV3IHN1YnRyZWUgdW5kZXIgYSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdldCB0byB0
aGUgdG9wIG9mIHRoZSBzdGFjay4gVGhpcyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVwcmVzZW50
aW5nIGl0c2VsZiwgb3IgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4gd2Ugdmlz
aXQgYSB0YXJnZXQgc3VyZmFjZSwgd2UgYXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRyZWUsIHdo
aWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBh
IGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRvIHRoZSBj
dXJyZW50IHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8v
IC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGluZyBzdXJm
YWNlLCB0aGUgY3VycmVudCB0YXJnZXQgd2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRoZSBzdGFj
ayBzaW5jZSB3ZSBqdXN0IGNhbWUgZnJvbSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2UuCisgICAg
Ly8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRo
ZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhl
IHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorICAgIFZlY3RvcjxSZW5kZXJTdXJmYWNlUmVn
aW9uPiB0YXJnZXRTdXJmYWNlU3RhY2s7CisKICAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9
IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
Zm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4o
JnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYg
KGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKworICAgICAgICAgICAgZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHRhcmdldFN1cmZhY2VTdGFjaywgaXQtPnJlbmRlclN1cmZh
Y2UoKSk7CiAgICAgICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSgq
aXQsIHBhaW50VHlwZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHRoZSByZXBsaWNhIGxh
eWVyIHRvIHRoZSBjdXJyZW50IG9jY2x1c2lvbgorCisgICAgICAgICAgICBpZiAoaXQtPm1hc2tM
YXllcigpIHx8IGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkgPCAxKQorICAgICAg
ICAgICAgICAgIHRhcmdldFN1cmZhY2VTdGFjay5sYXN0KCkub2NjbHVkZWRJblNjcmVlbiA9IFJl
Z2lvbigpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKCFpdC0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHBh
aW50Q29udGVudHNJZkRpcnR5KCppdCwgcGFpbnRUeXBlKTsKKworICAgICAgICAgICAgZW50ZXJU
YXJnZXRSZW5kZXJTdXJmYWNlKHRhcmdldFN1cmZhY2VTdGFjaywgaXQtPnRhcmdldFJlbmRlclN1
cmZhY2UoKSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eSgqaXQsIHBhaW50VHlw
ZSwgdGFyZ2V0U3VyZmFjZVN0YWNrLmxhc3QoKS5vY2NsdWRlZEluU2NyZWVuKTsKKyAgICAgICAg
ICAgIGl0LT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKHRhcmdldFN1cmZhY2VTdGFjay5s
YXN0KCkub2NjbHVkZWRJblNjcmVlbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs
ZWF2ZVRhcmdldFJlbmRlclN1cmZhY2UodGFyZ2V0U3VyZmFjZVN0YWNrLCBpdC50YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggODFiNWYyNTA1ZjFiODQ1MGM2ZGFkMTNj
ZjFjNWU4M2MwMWYwODBjYy4uZjU4MjAzZDE1ZWIyMDQ1MDcxYzJlZmE0NDhiYTQwYmYxOWE1NGNh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3Mg
Q0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKIGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgUmVnaW9u
OwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogCkBAIC0y
MDUsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8TWFuYWdl
ZFRleHR1cmU+ID4gVGV4dHVyZUxpc3Q7CiAKICAgICBlbnVtIFBhaW50VHlwZSB7IFBhaW50Vmlz
aWJsZSwgUGFpbnRJZGxlIH07Ci0gICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHko
TGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50
c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSwgY29uc3QgUmVnaW9uJiBvY2NsdWRl
ZFNjcmVlblNwYWNlKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxp
c3QmLCBQYWludFR5cGUpOwogICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1
cmZhY2UoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIu
Y3BwCmluZGV4IGJhOWM2NmU4NzQ5MjA2MjU3NWY1NTBlYjBmNWVlZjM2ZDU1Y2Y0NmEuLmM4YmQ5
YjBmMzYzMjRhZjZlOGE0YmMxZmI1YTI0MDhmZjAzMTQ1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmNwcApAQCAtNzUsMTggKzc1LDYgQEAgc3RhdGljIEludFJlY3QgcmVjdFN1YnRyYWN0UmVn
aW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIHJldHVy
biByZWN0OwogfQogCi1zdGF0aWMgSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIGZsb2F0IHggPSBjZWlsZihyZWN0LngoKSk7Ci0gICAgZmxvYXQg
eSA9IGNlaWxmKHJlY3QueSgpKTsKLSAgICAvLyBBIHJlY3Qgb2Ygd2lkdGggMCBzaG91bGQgbm90
IGJlY29tZSBhIHJlY3Qgb2Ygd2lkdGggLTEuCi0gICAgZmxvYXQgd2lkdGggPSBtYXg8ZmxvYXQ+
KGZsb29yZihyZWN0Lm1heFgoKSkgLSB4LCAwKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBtYXg8Zmxv
YXQ+KGZsb29yZihyZWN0Lm1heFkoKSkgLSB5LCAwKTsKLQotICAgIHJldHVybiBJbnRSZWN0KGNs
YW1wVG9JbnRlZ2VyKHgpLCBjbGFtcFRvSW50ZWdlcih5KSwKLSAgICAgICAgICAgICAgICAgICBj
bGFtcFRvSW50ZWdlcih3aWR0aCksIGNsYW1wVG9JbnRlZ2VyKGhlaWdodCkpOwotfQotCiB2b2lk
IENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QpCiB7
CiAgICAgaWYgKCFxdWFkTGlzdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBkMmUx
Y2ZlZjkzZTI4MjE2NmRhODUxMjU2Yzk1YzBlNjUxMmM2OWJhLi5iMWZhNzI5MTg0MDFlMzI0MGU0
MWQxM2QyZTBjMjdkMGM1NmFkN2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KQEAgLTM1LDYgKzM2LDEy
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNU
KGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9FUShh
LnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAor
ICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKKwogbmFtZXNwYWNlIHsKIAog
dm9pZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVz
ZXJ2ZXMzRCkKQEAgLTU5NSw0ICs2MDIsMTc0IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogLy8gIC0gdGVzdCB0aGUg
b3RoZXIgZnVuY3Rpb25zIGluIENDTGF5ZXJUcmVlSG9zdENvbW1vbgogLy8KIAorVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbikKK3sK
KyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVz
ZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAg
IHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMw
KSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1
ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxp
c3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTog
d2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIEND
TGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1
ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uo
b2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBv
Y2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNp
emUoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2Vs
ZlRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0
IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFJlZ2lvbiBvY2NsdWRl
ZDsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBw
YXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVy
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVy
VHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRl
KDkwKTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisg
ICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNp
YWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4
IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2Vs
ZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikK
K3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5n
IHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVy
IHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUg
dG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwor
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+
YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCg1MCwgNTAsIDUwLCA1MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVk
U3VyZmFjZSkKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMg
YXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRD
aGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsK
KyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNm
b3JtLnJvdGF0ZSg5MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTAp
OworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGNoaWxkLT5zZXRNYXNr
c1RvQm91bmRzKHRydWUpOworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhp
cyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwg
d2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7
CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBvY2NsdWRlZC5ib3VuZHMo
KSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAv
KiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb3BhcXVlIHJlY3QgZnJvbSB8bGF5ZXJ8Ogor
ICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfDMwICBWaXNpYmxlIHJlZ2lvbiBvZiB8bGF5
ZXJ8OiAvLy8vLworICAgICAgfCAgICAzMCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHJvdGF0
ZSg5MCkgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8IDMw
ICsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAg
fCAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgMTAwIHwgICAgfCAg
MTAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgPT0+ICAgICB8ICAg
ICB8ICAgICAgICAgICAgICAgfDEwICAgICAgICAgICAgICAgfAorICAgICAgfCAgICB8MTArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgIHwgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICB8CisgICAgICB8ICAgIHwgIHwgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8v
Ly8vLy8vLy8vL3wgICAgIDQyMCAgICAgIHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8v
Ly8vLy8vfDYwICAgICAgICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8v
Ly98ICAgICAgICAgICAgICB8ICB8CisgICAgICArLS0tLXwtLXwtLS0tLS0tLS0tLS0tKyAgICAg
ICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgKy0tfC0tfC0tLS0tLS0tLS0tLS0tLSsg
ICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgMjB8MTB8ICAgICA3MCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCB8NTAwICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
fAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Cisg
ICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAg
ICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDEwfAorICAgICAgICAg
ICArLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAg
ICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0rCisgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgNDkwICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDUwMAorICAgICAqLworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMGNiMjYwNWU4
YTZkM2QzMjJmY2ViMGZjNzNhYTdhZmU2OTQ5MjA5MC4uNDFmZTRmYjY1OWI5NDA1MWM2N2VhYmYz
ZWVhOWMwODQ2NzZlZWFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAj
aW5jbHVkZSAiV2ViS2l0LmgiCkBAIC0xMDA1LDkgKzEwMDYsOSBAQCBwdWJsaWM6CiAgICAgaW50
IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRhdGVDb3VudDsgfQogICAgIHZvaWQgcmVzZXRV
cGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9IDA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKICAgICB7Ci0gICAgICAgIENv
bnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVkZWRTY3JlZW5TcGFj
ZSk7CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0NvdW50Kys7CiAgICAgfQogCkBAIC0xMjI4LDQg
KzEyMjksMjQ0IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0QXRvbWljQ29tbWl0LCBydW5N
dWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCisjZGVmaW5lIEVYUEVDVF9FUV9S
RUNUKGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9F
UShhLnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsg
XAorICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKKworY2xhc3MgVGVzdExh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXN0TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29u
dGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKKyAgICB7Cisg
ICAgICAgIG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IG9jY2x1ZGVkU2NyZWVuU3BhY2U7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworICAgIGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb2NjbHVkZWRTY3JlZW5TcGFjZTsgfQorICAgIHZvaWQgY2xlYXJPY2NsdWRlZFNjcmVl
blNwYWNlKCkgeyBtX29jY2x1ZGVkU2NyZWVuU3BhY2UgPSBSZWdpb24oKTsgfQorCitwcml2YXRl
OgorICAgIFRlc3RMYXllckNocm9taXVtKCkgOiBMYXllckNocm9taXVtKCkgeyB9CisKKyAgICBS
ZWdpb24gbV9vY2NsdWRlZFNjcmVlblNwYWNlOworfTsKKworc3RhdGljIHZvaWQgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21p
dW0qIHBhcmVudCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
U2l6ZSYgYm91bmRzLCBib29sIG9wYXF1ZSkKK3sKKyAgICBsYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKyAgICBpZiAocGFyZW50KQorICAgICAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsK
KyAgICBsYXllci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEFuY2hv
clBvaW50KGFuY2hvcik7CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBs
YXllci0+c2V0Qm91bmRzKGJvdW5kcyk7CisgICAgbGF5ZXItPnNldE9wYXF1ZShvcGFxdWUpOwor
ICAgIGxheWVyLT5jbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UoKTsKK30KKworY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3Qg
eworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbigpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBSZWZQdHI8VGVz
dExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBjaGlsZCA9IFRlc3RMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBjaGlsZDIg
PSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxUZXN0TGF5ZXJD
aHJvbWl1bT4gZ3JhbmRDaGlsZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICAg
ICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBtYXNrID0gVGVzdExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICAgICAgY2hp
bGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICAgICAgY2hpbGRUcmFuc2Zvcm0u
cm90YXRlKDkwKTsKKyAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTAp
OworCisgICAgICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgICAgIC8v
IFNlZSBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVn
aW9uV2l0aFJvdGF0ZWRTdXJmYWNlIGZvciBhIG5pY2UgdmlzdWFsIG9mIHRoZXNlIGxheWVycyBh
bmQgaG93IHRoZXkgZW5kIHVwCisgICAgICAgIC8vIHBvc2l0aW9uZWQgb24gdGhlIHNjcmVlbi4K
KworICAgICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIgaXMgcm90YXRlZCBhbmQgdGhlIGdyYW5kQ2hp
bGQgaXMgb3BhcXVlLCBidXQgY2xpcHBlZCB0byB0aGUgY2hpbGQgYW5kIHJvb3RMYXllcgorICAg
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
MTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhj
aGlsZC5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAg
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxk
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwg
MTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRW
aWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxl
dGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGdyYW5kQ2hpbGQtPm9j
Y2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgZ3Jh
bmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIGNoaWxkLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGNoaWxkLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
bGF5ZXIgaXMgb3BhcXVlLCB0aGVuIGl0IGFkZHMgdG8gdGhlIG9jY2x1c2lvbiBzZWVuIGJ5IHRo
ZSByb290TGF5ZXIuCisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdExh
eWVyLmdldCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNm
b3JtLCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgp
LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBF
WFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBj
aGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIHJvb3RMYXllci0+b2Nj
bHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCByb290
TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAg
Ly8gQWRkIGEgc2Vjb25kIGNoaWxkIHRvIHRoZSByb290IGxheWVyIGFuZCB0aGUgcmVnaW9ucyBz
aG91bGQgbWVyZ2UKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5
ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDcwLCAyMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5n
ZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIElu
dFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJv
b3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0
U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRh
dGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwor
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENoaWxk
LT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3Bh
Y2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMzAsIDMwLCA3MCwgNzApLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyMCwg
NzAsIDgwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMnUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBNb3ZlIHRoZSBzZWNvbmQgY2hpbGQgdG8gYmUgc3Vy
ZS4KKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCks
IDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVl
KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9v
dExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAw
LCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihy
b290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290
TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMo
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMw
LCA3MCwgNzApLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAzMCwgOTAsIDcwKSwg
cm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBF
Q1RfRVEoMnUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQgbGF5ZXIgaGFzIGEgbWFzayBvbiBpdCwgdGhl
biBpdCBzaG91bGRuJ3QgY29udHJpYnV0ZSB0byBvY2NsdXNpb24gb24gc3R1ZmYgYmVsb3cgaXQK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9vdExh
eWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKworICAgICAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2suZ2V0KCkpOwor
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3
MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
bGF5ZXIgd2l0aCBhIG1hc2sgaXMgYmVsb3cgY2hpbGQyLCB0aGVuIGNoaWxkMiBzaG91bGQgY29u
dHJpYnV0ZSB0byBvY2NsdXNpb24gb24gZXZlcnl0aGluZywgYW5kIGNoaWxkIHNob3VsZG4ndCBj
b250cmlidXRlIHRvIHRoZSByb290TGF5ZXIKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQo
KSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1
ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCBy
b290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBjaGlsZC0+
c2V0TWFza0xheWVyKG1hc2suZ2V0KCkpOworCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3Bv
cnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7
CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBncmFuZENoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDEwLCA0MCwgOTAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcw
LCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBsYXllciBoYXMgYSBub24t
b3BhcXVlIGRyYXdPcGFjaXR5LCB0aGVuIGl0IHNob3VsZG4ndCBjb250cmlidXRlIHRvIG9jY2x1
c2lvbiBvbiBzdHVmZiBiZWxvdyBpdAorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBj
aGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIGNoaWxkLT5zZXRN
YXNrTGF5ZXIoMCk7CisgICAgICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNSk7CisKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCks
IGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIGNo
aWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MTAsIDcwLCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBsYXllciB3aXRo
IG5vbi1vcGFxdWUgZHJhd09wYWNpdHkgaXMgYmVsb3cgY2hpbGQyLCB0aGVuIGNoaWxkMiBzaG91
bGQgY29udHJpYnV0ZSB0byBvY2NsdXNpb24gb24gZXZlcnl0aGluZywgYW5kIGNoaWxkIHNob3Vs
ZG4ndCBjb250cmlidXRlIHRvIHRoZSByb290TGF5ZXIKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7Cisg
ICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXll
ci5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAs
IDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAw
KSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdl
dCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBj
aGlsZC0+c2V0TWFza0xheWVyKDApOworICAgICAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOwor
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwg
Z3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDF1LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MCwgOTAsIDYwKSwgY2hp
bGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgy
dSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcwLCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1
ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExh
eWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8v
IEtpbGwgdGhlIGxheWVyVHJlZUhvc3QgaW1tZWRpYXRlbHkuCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0Um9vdExheWVyKDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsK
KworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVz
dCgpCisgICAgeworICAgIH0KK307CisKK1NJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb24pCisKIH0gLy8gbmFtZXNwYWNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1
bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LmNwcAppbmRleCBmMGI1YzQxMWI2NTZhZWRlNzU5NTcxMGU0ZDhjZmQ3ZDI0ZGI1
MzNjLi4xZGYyN2MwMTExOWIyNjU3ZTgyZTJhMDc5N2IxYzAxYjUwZDMwNWViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9t
aXVtVGVzdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDQ1NjaGVkdWxlclRlc3RD
b21tb24uaCIKICNpbmNsdWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtMTM4LDcgKzEzOSw4IEBA
IHByb3RlY3RlZDoKIAogICAgICAgICBjYW52YXMtPmNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgICAg
IEVYUEVDVF9UUlVFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOwotICAgICAgICBjYW52YXMtPnBh
aW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIFJlZ2lvbiBvY2NsdWRlZFNjcmVlblNwYWNl
OworICAgICAgICBjYW52YXMtPnBhaW50Q29udGVudHNJZkRpcnR5KG9jY2x1ZGVkU2NyZWVuU3Bh
Y2UpOwogICAgICAgICBFWFBFQ1RfRkFMU0UoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhy
ZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVy
Q2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHAKaW5kZXggYjg1MGY4MjQxY2MwODAxNDEzOGUzODA4YzA2MTRjYTYx
MDRlNjMyMS4uYjAzNTBkYjQ5NWZiNTYyYjM1ODE0MDg3ZWY2NDEwZDc2MTk1YmE3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29t
bW9uLmgiCiAjaW5jbHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJj
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiIC8vIEZvciBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQK
QEAgLTM5LDYgKzQwLDEyIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVz
cGFjZSBXVEY7CiAKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9F
UShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBF
WFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0
KCksIGIuaGVpZ2h0KCkpOworCiBuYW1lc3BhY2UgewogCiBjbGFzcyBGYWtlVGV4dHVyZUFsbG9j
YXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKQEAgLTcwLDE3ICs3NywyMCBAQCBwdWJs
aWM6CiAgICAgaW50IHByZXBhcmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlcGFyZUNvdW50
OyB9CiAgICAgdm9pZCBjbGVhclByZXBhcmVDb3VudCgpIHsgbV9wcmVwYXJlQ291bnQgPSAwOyB9
CiAKKyAgICB2b2lkIHNldE9wYXF1ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBvcGFxdWVQYWlu
dFJlY3QpIHsgbV9vcGFxdWVQYWludFJlY3QgPSBvcGFxdWVQYWludFJlY3Q7IH0KKwogICAgIC8v
IExhc3QgcmVjdCBwYXNzZWQgdG8gcHJlcGFyZVRvVXBkYXRlKCkuCiAgICAgY29uc3QgSW50UmVj
dCYgbGFzdFVwZGF0ZVJlY3QoKSAgY29uc3QgeyByZXR1cm4gbV9sYXN0VXBkYXRlUmVjdDsgfQog
CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNy
ZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUZXh0dXJlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsgfQogICAgIHZpcnR1
YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSkgeyByZXR1
cm4gU2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9V
cGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmLCBpbnQsIGZs
b2F0LCBJbnRSZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGludCwgZmxvYXQsIEludFJlY3Qq
IHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogCiBwcml2YXRlOgogICAgIGludCBtX3ByZXBhcmVDb3Vu
dDsKICAgICBJbnRSZWN0IG1fcmVjdFRvSW52YWxpZGF0ZTsKICAgICBJbnRSZWN0IG1fbGFzdFVw
ZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX29wYXF1ZVBhaW50UmVjdDsKICAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKIH07CiAKQEAgLTEzOSw3ICsxNDksNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzSWZEaXJ0eSgpCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3JlZW5TcGFjZSAqLykKICAgICB7CiAgICAgICAg
IHByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlTGF5ZXJSZWN0KCkpOwogICAgIH0KQEAgLTE4Nyw3ICsx
OTcsNyBAQCB2b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0CiAgICAgICAgIG1fcmVjdFRvSW52YWxpZGF0
ZSA9IEludFJlY3QoKTsKICAgICAgICAgbV9sYXllciA9IDA7CiAgICAgfQotICAgICpyZXN1bHRp
bmdPcGFxdWVSZWN0ID0gSW50UmVjdCgpOworICAgICpyZXN1bHRpbmdPcGFxdWVSZWN0ID0gbV9v
cGFxdWVQYWludFJlY3Q7CiB9CiAKIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERp
cnR5VGlsZXMpCkBAIC00NjAsNCArNDcwLDk4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBsYXllckFkZHNTZWxmVG9P
Y2NsdWRlZFJlZ2lvbikKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEw
MjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisKKyAg
ICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRo
ZW4gcGFpbnRzIHR3byB0aWxlcyBpbiB2YXJpb3VzIHdheXMuCisKKyAgICBSZWdpb24gb2NjbHVk
ZWQ7CisgICAgSW50UmVjdCBjb250ZW50Qm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDIwMCk7
CisgICAgSW50UmVjdCB2aXNpYmxlQm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDE1MCk7CisK
KyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMuc2l6ZSgpKTsKKyAgICBsYXllci0+
c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlQm91bmRzKTsKKyAgICBsYXllci0+c2V0RHJhd09w
YWNpdHkoMSk7CisKKyAgICAvLyBUaGUgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gaXMgdmVyaWZpZWQg
aW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdHMKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBz
Y3JlZW5TcGFjZVRyYW5zZm9ybTsKKyAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0o
c2NyZWVuU3BhY2VUcmFuc2Zvcm0pOworCisgICAgLy8gSWYgdGhlIGxheWVyIGlzIG9wYXF1ZSB0
aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIGJlIHRoZSB3aG9sZSBsYXllcidzIHZpc2li
bGUgcmVnaW9uLgorICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisgICAgbGF5ZXItPmludmFs
aWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29u
dGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRT
ZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVCh2
aXNpYmxlQm91bmRzLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2Ns
dWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgbm90IG9wYXF1
ZSB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIGJlIGVtcHR5LgorICAgIGxheWVyLT5z
ZXRPcGFxdWUoZmFsc2UpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91bmRz
KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2Nj
bHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFj
ZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdWRlZC5ib3Vu
ZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAg
ICAvLyBJZiB0aGUgbGF5ZXIgcGFpbnRzIG9wYXF1ZSBjb250ZW50LCB0aGVuIHRoZSBvY2NsdWRl
ZCByZWdpb24gc2hvdWxkIG1hdGNoIHRoZSB2aXNpYmxlIG9wYXF1ZSBjb250ZW50LgorICAgIElu
dFJlY3Qgb3BhcXVlUGFpbnRSZWN0ID0gSW50UmVjdCgxMCwgMTAsIDkwLCAxOTApOworICAgIGxh
eWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3Qob3BhcXVl
UGFpbnRSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7Cisg
ICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVk
ID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2Nj
bHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3Qs
IHZpc2libGVCb3VuZHMpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB3ZSBwYWludCBhZ2FpbiB3aXRo
b3V0IGludmFsaWRhdGluZywgdGhlIHNhbWUgc3R1ZmYgc2hvdWxkIGJlIG9jY2x1ZGVkLgorICAg
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50
UmVjdCgpKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisg
ICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3Jl
ZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9uKG9wYXF1
ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElmIHRoZSBsYXll
ciBpcyB0cmFuc2Zvcm1lZCB0aGVuIHRoZSByZXN1bHRpbmcgb2NjbHVkZWQgYXJlYSBuZWVkcyB0
byBiZSB0cmFuc2Zvcm1lZCB0byBpdHMgdGFyZ2V0IHNwYWNlLgorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMu
d2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgdHJhbnNm
b3JtLnJvdGF0ZSg5MCk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53
aWR0aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZSgxMCwgMTApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0
ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAy
LjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtICo9IHRyYW5zZm9ybTsKKyAgICBzY3JlZW5T
cGFjZVRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNv
bnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGxheWVyLT5zZXRTY3JlZW5TcGFjZVRy
YW5zZm9ybShzY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0
ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXIt
PmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9S
RUNUKHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3QoaW50ZXJzZWN0aW9uKG9wYXF1ZVBhaW50
UmVjdCwgdmlzaWJsZUJvdW5kcykpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBCdXQgYSBub24tYXhpcy1h
bGlnbmVkIHRyYW5zZm9ybSBkb2VzIG5vdCBnZXQgY29uc2lkZXJlZCBmb3Igb2NjbHVzaW9uLgor
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250
ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICB0cmFuc2Zvcm0ucm90YXRlKDUpOworICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRl
bnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5z
bGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkg
LyAyLjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtICo9IHRyYW5zZm9ybTsKKyAgICBzY3Jl
ZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwg
LWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGxheWVyLT5zZXRTY3JlZW5TcGFj
ZVRyYW5zZm9ybShzY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnByZXBhcmVUb1Vw
ZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5
ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIC8vIEZJWE1F
OiBJZiB3ZSBmaW5kIGFuIG9wYXF1ZSByZWN0IGNvbnRhaW5lZCBpbiB0aGUgcm90YXRlZCBub24t
YXhpcy1hbGlnbmVkIHJlY3QsIHRoZW4KKyAgICAvLyB0aGlzIHdvbid0IGJlIGFuIGVtcHR5IHJl
c3VsdC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIG9jY2x1ZGVkLmJvdW5kcygpKTsK
KyAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124743</attachid>
            <date>2012-01-31 08:48:48 -0800</date>
            <delta_ts>2012-01-31 09:07:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120131114846.patch</filename>
            <type>text/plain</type>
            <size>62492</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQxYjVjMGE5YjcwMDM1
ZmM4ZTE3OWNiMDNkZDZkY2M2ZDkyMjBjMi4uZWIwNzJiYzVkZjQ0ZmU0ZmE5ZTU4YjU4M2ZlZmZk
NGRmNDlmOGNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTI3ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFt
ZXMgUm9iaW5zb24uCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAsIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwLCBDQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2VkSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKEltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
aXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2Nj
bHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6cG9wQW5kUHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6CisKIDIwMTIt
MDEtMzAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDYzMjQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDAyMGFhYjZiNzliNjgyZGM3MTc3ZjNmOWFiZjIwMzYyNzczYzVlOTQuLjk2MTBm
ZTkwZWZiYTc2MGJjZjljNjdiYmRmYWNmZTZlMzNlMzVlZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTItMDEtMjcgIERhbmEgSmFuc2VucyAgPGRhbmFr
akBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb21wdXRlIG9jY2x1c2lvbiBk
dXJpbmcgcGFpbnQgbG9vcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY4NTgKKworICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKwor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1X
aXRoVXBkYXRlVHJhY2tpbmc6OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdURik6
CisgICAgICAgIChUZXN0TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNo
cm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJDaHJvbWl1bTo6cGFpbnRD
b250ZW50c0lmRGlydHkpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdURjo6VGVzdExheWVyQ2hyb21pdW06Om9jY2x1ZGVkU2NyZWVu
U3BhY2UpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJDaHJvbWl1bTo6Y2xlYXJPY2NsdWRlZFNj
cmVlblNwYWNlKToKKyAgICAgICAgKFdURjo6VGVzdExheWVyQ2hyb21pdW06OlRlc3RMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdURjo6c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyk6Cisg
ICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb24pOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb246OkNDTGF5ZXJUcmVlSG9zdFRlc3RM
YXllck9jY2x1c2lvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9j
Y2x1c2lvbjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdExh
eWVyT2NjbHVzaW9uOjphZnRlclRlc3QpOgorICAgICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJD
aHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVt
VGVzdDo6ZnVsbExpZmVjeWNsZVRlc3QpOgorICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwOgorICAgICAgICAoV1RGOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2V0
T3BhcXVlUGFpbnRSZWN0KToKKyAgICAgICAgKEZha2VMYXllclRleHR1cmVVcGRhdGVyKToKKyAg
ICAgICAgKFdURjo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAoV1RGOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRl
KToKKyAgICAgICAgKFdURjo6VEVTVCk6CisgICAgICAgIChXVEYpOgorCiAyMDEyLTAxLTMwICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTA2MzI0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5kZXggNDZmY2E2YzI3ZTllOTNlNjM5NDY4Mjc1ZjM3
NTk1OTRmNWM5MmI3Ny4uNTk1YWYyYTMyM2EzZWU1YWE0OGY2ODA4NWI2NjY2YTdkOWQ0OTRmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBA
IC0yMTgsNiArMjE4LDE5IEBAIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgICAgICAgICAgICAgICAgY2xhbXBUb0ludGVnZXIod2lkdGgpLCBjbGFt
cFRvSW50ZWdlcihoZWlnaHQpKTsKIH0KIAorSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIGludCB4ID0gY2xhbXBUb0ludGVnZXIoY2VpbGYocmVj
dC54KCkpKTsKKyAgICBpbnQgeSA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueSgpKSk7Cisg
ICAgZmxvYXQgbWF4WCA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZihyZWN0Lm1heFgoKSkpOworICAg
IGZsb2F0IG1heFkgPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYocmVjdC5tYXhZKCkpKTsKKyAgICAv
LyBBIHJlY3Qgb2Ygd2lkdGggMCBzaG91bGQgbm90IGJlY29tZSBhIHJlY3Qgb2Ygd2lkdGggLTEg
ZHVlIHRvIGNlaWwvZmxvb3IuCisgICAgaW50IHdpZHRoID0gbWF4KGNsYW1wVG9JbnRlZ2VyKG1h
eFggLSB4KSwgMCk7CisgICAgaW50IGhlaWdodCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhZIC0g
eSksIDApOworCisgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisK
IEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIGlmIChzcmNSZWN0Lndp
ZHRoKCkgPT0gMCB8fCBzcmNSZWN0LmhlaWdodCgpID09IDApCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IDE0MDkwNzFiMTE5ODgzZDNiMDg2Mjcw
YWE0Y2Y3ODg0ZjRmYmE2MmMuLjIyYzE3MWM1YWI0ZDE4ODk2MGU4MmZlN2JlMDIxOGU0MWNmOGE1
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBA
IC0yNzAsNiArMjcwLDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFJlY3Qm
IGEsIGNvbnN0IEZsb2F0UmVjdCYgYikKIAogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOwogCisvLyBSZXR1cm5zIGEgdmFsaWQgSW50UmVjdCBjb250YWluZWQgd2l0
aGluIHRoZSBnaXZlbiBGbG9hdFJlY3QuCitJbnRSZWN0IGVuY2xvc2VkSW50UmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKKwogLy8gTWFwIHJlY3QgciBmcm9tIHNyY1JlY3QgdG8gYW4gZXF1aXZhbGVu
dCByZWN0IGluIGRlc3RSZWN0LgogRmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAppbmRleCAxNTA1YWRhYzI0M2Uw
NzY2NWQyZGRhYjI4ZjQ3MDNmZjhlZjViOTQzLi4wOTA1NDc0MTg2ZWZjMmM0MGE3YWRhNDU4NTk1
ZTBiZjgzZjM2OGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTkxLDcgKzkxLDcgQEAgYm9vbCBDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgp
IGNvbnN0CiAgICAgICAgICYmIG1fY29udGV4dCAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lm
RGlydHkoKQordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5
KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3JlZW5TcGFjZSAqLykKIHsKICAgICBpZiAoIWRy
YXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDgzNjE1YTFmMjIzNTYxNjQ2MmViMWY4ZDQxMjJlMWFkOGU1OGM5MjIuLmVj
YmE5MGY0ZWQxNjJjNjhkYzRmMDhlNjEwYmRkNGY3MmQ5YjMzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgUmVnaW9uOwogCiAvLyBBIGxheWVy
IGNvbnRhaW5pbmcgYW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzCiBjbGFzcyBDYW52YXMyRExheWVy
Q2hyb21pdW0gOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bSB7CkBAIC01Miw3ICs1Myw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoY29u
c3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCopOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDUyOWZjZTAzNjRhODI4
NTVhYTQwNjM5NzE1NmUwZmJiNGUzYTk1MGUuLjM0MzAzMTEwZmE5Y2FmZGYyNmNhOWJjZmVkNmUy
NGM0ZjQwMmYyYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTkz
LDcgKzkzLDcgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29u
c3QKICAgICByZXR1cm4gVGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSAmJiBtX2Rl
bGVnYXRlOwogfQogCi12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZE
aXJ0eSgpCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShj
b25zdCBSZWdpb24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiB7CiAgICAgdXBkYXRlVGls
ZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgK
aW5kZXggNDI2Njc5Y2FmYWJiNzM5NGMwMmU3OTAxYmUzMzJkN2JjYjVlMDgxYS4uNWVmZjZhM2Q2
MGExMmQxMjBlYjcyMDAwZDM1MGIxZmI1ODM4ZWE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5oCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
TGF5ZXJUaWxlckNocm9taXVtOwogY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKK2NsYXNzIFJl
Z2lvbjsKIAogY2xhc3MgQ29udGVudExheWVyRGVsZWdhdGUgewogcHVibGljOgpAQCAtNTgsNyAr
NTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckRlbGVnYXRlKCkgeyBtX2RlbGVnYXRlID0g
MDsgfQogCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzSWZEaXJ0eShjb25zdCBSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwogICAgIHZp
cnR1YWwgdm9pZCBpZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXRPcGFxdWUoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCAw
MTU0ZmIyODMxNGYzZTZjOTI0MDQ3YmI0ODM2NzM2OTJkZmNmYWI3Li44MzFjYmU4MDk2M2EzYTgw
MGI4YWE0NmE2OTk0OGY0ZmM3ZjVlYzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHMoSW1hZ2UqIGNvbnRlbnRzKQogICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lkIElt
YWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRT
Y3JlZW5TcGFjZSAqLykKIHsKICAgICBpZiAobV9uZWVkc0Rpc3BsYXkpIHsKICAgICAgICAgbV90
ZXh0dXJlVXBkYXRlci0+dXBkYXRlRnJvbUltYWdlKG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCBkNzEyOTI0
NTFjMzU1NWVhZjBjMTZjZjlmMmMzZjM5NWJlMDc1MzA0Li5hYjVjMWIyN2IyYzc1YTc1YWUzNDM3
OTNjYTUzODc5ZjI1NTFkZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNDUs
NiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlOwogY2xhc3MgSW1h
Z2VMYXllclRleHR1cmVVcGRhdGVyOworY2xhc3MgUmVnaW9uOwogCiAvLyBBIExheWVyIHRoYXQg
Y29udGFpbnMgb25seSBhbiBJbWFnZSBlbGVtZW50LgogY2xhc3MgSW1hZ2VMYXllckNocm9taXVt
IDogcHVibGljIFRpbGVkTGF5ZXJDaHJvbWl1bSB7CkBAIC01Myw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5JbWFnZUxheWVyQ2hyb21pdW0oKTsKIAogICAgIHZpcnR1YWwgYm9vbCBk
cmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9u
JiBvY2NsdWRlZFNjcmVlblNwYWNlKTsKICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNDb250ZW50c1Nj
YWxlKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBpbWFnZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IGRlNWM3MDI1ZmE2NGVkZTg0MTdhYzM2NWIxOThjNTY3ZTJj
ZGZhZDYuLmIyZjcwMTQxYjQ3YTVkNDdiNDQwMjkzODBkMzhjYjNkYzNjNWIzMjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VT
a2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2VuZGlmCisjaW5jbHVk
ZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgpAQCAt
NDY5LDYgKzQ3MCwzNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldENvbnRlbnRzU2NhbGUoZmxv
YXQgY29udGVudHNTY2FsZSkKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAorVHJhbnNmb3Jt
YXRpb25NYXRyaXggTGF5ZXJDaHJvbWl1bTo6Y29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSBjb25zdAoreworICAgIEludFNpemUgYm91bmRzSW5MYXllclNwYWNlID0gYm91bmRzKCk7Cisg
ICAgSW50U2l6ZSBib3VuZHNJbkNvbnRlbnRTcGFjZSA9IGNvbnRlbnRCb3VuZHMoKTsKKworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtKCk7
CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5ZXIgc3BhY2UKKyAgICB0
cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFjZS53aWR0aCgpIC8gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0aCgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5oZWlnaHQoKSAvIHN0YXRp
Y19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0KCkpKTsKKworICAgIHJl
dHVybiB0cmFuc2Zvcm07Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2NjbHVk
ZWRTY3JlZW5TcGFjZShSZWdpb24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpCit7CisgICAgaWYgKCFv
cGFxdWUoKSB8fCBkcmF3T3BhY2l0eSgpICE9IDEgfHwgIWlzUGFpbnRlZEF4aXNBbGlnbmVkSW5T
Y3JlZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBj
b250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm1hcFJlY3QoRmxvYXRSZWN0KHZpc2libGVM
YXllclJlY3QoKSkpOworICAgIG9jY2x1ZGVkU2NyZWVuU3BhY2UudW5pdGUoZW5jbG9zZWRJbnRS
ZWN0KHRhcmdldFJlY3QpKTsKK30KKworYm9vbCBMYXllckNocm9taXVtOjppc1BhaW50ZWRBeGlz
QWxpZ25lZEluU2NyZWVuKCkgY29uc3QKK3sKKyAgICBGbG9hdFF1YWQgcXVhZCA9IGNvbnRlbnRU
b1NjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUXVhZChGbG9hdFF1YWQodmlzaWJsZUxheWVyUmVj
dCgpKSk7CisgICAgcmV0dXJuIHF1YWQuaXNSZWN0aWxpbmVhcigpOworfQorCiB2b2lkIExheWVy
Q2hyb21pdW06OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQogewogICAgIEFTU0VSVCghbV9yZW5kZXJT
dXJmYWNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA5NDVlZThlMWM0YzViNDU1OTQzMDdhNzYy
Y2Q2MDBiOTY2NWUwYWE0Li43NjRmNzMwMTU1YjU0NTM3Y2RhNGM3MzgxYjNmZDNiY2I3OTYwNjRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01NSw2ICs1NSw3IEBAIGNsYXNzIENDTGF5ZXJJbXBs
OwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgUmVnaW9uOwogCiAvLyBCYXNlIGNsYXNzIGZvciBj
b21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAv
LyB0aGlzIGNsYXNzLgpAQCAtMTUzLDcgKzE1NCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoZXNl
IG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBjbGFz
c2VzLgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2lz
RHJhd2FibGU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiAvKiBv
Y2NsdWRlZFNjcmVlblNwYWNlICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29u
dGVudHNJZkRpcnR5KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldElzTWFzayhib29sKSB7IH0KQEAgLTE4Miw4ICsxODMsMTAgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgbV9jbGlw
UmVjdCA9IGNsaXBSZWN0OyB9CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiB0YXJnZXRSZW5k
ZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CiAgICAg
dm9pZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogc3VyZmFj
ZSkgeyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9CisgICAgLy8gVGhpcyBtb3Zl
cyBmcm9tIGxheWVyIHNwYWNlLCB3aXRoIG9yaWdpbiBpbiB0aGUgY2VudGVyIHRvIHRhcmdldCBz
cGFjZSB3aXRoIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsg
fQogICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bWF0cml4KSB7IG1fZHJhd1RyYW5zZm9ybSA9IG1hdHJpeDsgfQorICAgIC8vIFRoaXMgbW92ZXMg
ZnJvbSBsYXllciBzcGFjZSwgd2l0aCBvcmlnaW4gdGhlIHRvcCBsZWZ0IHRvIHNjcmVlbiBzcGFj
ZSB3aXRoIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblNwYWNl
VHJhbnNmb3JtOyB9CiAgICAgdm9pZCBzZXRTY3JlZW5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBtYXRy
aXg7IH0KICAgICBjb25zdCBJbnRSZWN0JiBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3YWJsZUNvbnRlbnRSZWN0OyB9CkBAIC0xOTEsNiArMTk0LDExIEBAIHB1Ymxp
YzoKICAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1Nj
YWxlOyB9CiAgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKIAorICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAg
ICAvLyBBZGRzIGFueSBvcGFxdWUgdmlzaWJsZSBwaXhlbHMgdG8gdGhlIG9jY2x1ZGVkIHJlZ2lv
bi4KKyAgICB2aXJ0dWFsIHZvaWQgYWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShSZWdpb24m
IG9jY2x1ZGVkU2NyZWVuU3BhY2UpOworCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0
aGUgbGF5ZXIncyBkZXNjZW5kYW50cyBoYXMgY29udGVudCB0byBkcmF3LgogICAgIGJvb2wgZGVz
Y2VuZGFudERyYXdzQ29udGVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgp
IHsgfQpAQCAtMjExLDYgKzIxOSw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBob2xkIGNvbnRleHQt
ZGVwZW5kZW50IHJlc291cmNlcyBzdWNoIGFzIHRleHR1cmVzLgogICAgIHZpcnR1YWwgdm9pZCBj
bGVhbnVwUmVzb3VyY2VzKCk7CiAKKyAgICBib29sIGlzUGFpbnRlZEF4aXNBbGlnbmVkSW5TY3Jl
ZW4oKSBjb25zdDsKKwogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKIAogICAgIC8vIFRoaXMg
ZmxhZyBpcyBzZXQgd2hlbiBsYXllciBuZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDRlMTgyMmIzMThjNWUxZDI1N2E5MDhlNDJh
NGRjMjg4NDZiNWIyYTYuLmJmNDk4OGMyNTM3OWNlMjNhNDAxMmE4MTQ2ZGI1YTg2MmQwMzlmMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC02Myw2ICs2Myw4IEBAIHB1
YmxpYzoKICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNp
dHk7IH0KICAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IGRyYXdPcGFjaXR5KSB7IG1fZHJh
d09wYWNpdHkgPSBkcmF3T3BhY2l0eTsgfQogCisgICAgLy8gVGhpcyBnb2VzIGZyb20gY29udGVu
dCBzcGFjZSB3aXRoIHRoZSBvcmlnaW4gaW4gdGhlIGNlbnRlciBvZiB0aGUgcmVjdCBiZWluZyB0
cmFuc2Zvcm1lZCB0byB0aGUgdGFyZ2V0IHNwYWNlIHdpdGggdGhlIG9yaWdpbiBpbiB0aGUgdG9w
IGxlZnQgb2YgdGhlCisgICAgLy8gcmVjdCBiZWluZyB0cmFuc2Zvcm1lZC4gUG9zaXRpb24gdGhl
IHJlY3Qgc28gdGhhdCB0aGUgb3JpZ2luIGlzIGluIHRoZSBjZW50ZXIgb2YgaXQgYmVmb3JlIGFw
cGx5aW5nIHRoaXMgdHJhbnNmb3JtLgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBk
cmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAgICAgdm9p
ZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNm
b3JtKSB7IG1fZHJhd1RyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm07IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMGIwYzliZjRlNzYxYWNjZjlmYWFlNDBjY2ZlNDIyNGFk
MGZmMzU2MC4uMjgzYWE4ZGQwOWJhMjNmZDc0NDMzYWNhMzJhNjczNTM4ODNjOWEwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC00ODgsNiArNDg4LDM1IEBAIHZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpyZXNlcnZlVGV4dHVyZXMoKQogICAgIH0KIH0KIAordm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBvY2Ns
dWRlZFNjcmVlblNwYWNlKQoreworICAgIGlmIChtX3NraXBzRHJhdyB8fCBkcmF3T3BhY2l0eSgp
ICE9IDEgfHwgIWlzUGFpbnRlZEF4aXNBbGlnbmVkSW5TY3JlZW4oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG9wYXF1ZSgpKSB7CisgICAgICAgIExheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWRTY3JlZW5TcGFjZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgp
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUcmFuc2Zvcm0gPSBjb250ZW50VG9T
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpOworCisgICAgLy8gRklYTUU6IENyZWF0ZS9Vc2UgYSBGbG9h
dFJlZ2lvbiBmb3IgdGhlIG9jY2x1ZGVkU2NyZWVuU3BhY2UsIGluc3RlYWQgb2YgYSBSZWdpb24g
YmFzZWQgb24gaW50cywgdG8gYXZvaWQgdGhpcyBzdGVwIGFuZCBnZXQgYmV0dGVyIGFjY3VyYWN5
IGJldHdlZW4gbGF5ZXJzIGluIHRhcmdldCBzcGFjZS4KKyAgICBSZWdpb24gdGlsZVJlZ2lvbjsK
KyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmxheWVyUmVj
dFRvVGlsZUluZGljZXModmlzaWJsZUxheWVyUmVjdCgpLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRh
YmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICh0aWxlKSB7Cisg
ICAgICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlVGlsZU9wYXF1ZVJlY3QgPSBpbnRlcnNlY3Rp
b24odmlzaWJsZVJlY3QsIHRpbGUtPm1fb3BhcXVlUmVjdCk7CisgICAgICAgICAgICAgICAgRmxv
YXRSZWN0IHNjcmVlblJlY3QgPSBjb250ZW50VHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KHZp
c2libGVUaWxlT3BhcXVlUmVjdCkpOworICAgICAgICAgICAgICAgIG9jY2x1ZGVkU2NyZWVuU3Bh
Y2UudW5pdGUoZW5jbG9zZWRJbnRSZWN0KHNjcmVlblJlY3QpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiB7CiAgICAgbV9za2lwc0RyYXcgPSBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggMThlMDI5YzBkYzg3ZmNlNThiNzM2
ZWE5ODVkOTNhNGJjOGQ3MjY4YS4uM2NiYmJjYmQ3YTQ1MjU0MjM1ZTM5NTU1MDIwYzMwMzY4ZTcx
ZWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTM1LDYgKzM1LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKK2NsYXNzIFJl
Z2lvbjsKIGNsYXNzIFVwZGF0YWJsZVRpbGU7CiAKIGNsYXNzIFRpbGVkTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBMYXllckNocm9taXVtIHsKQEAgLTYzLDYgKzY0LDggQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIHJlc2VydmVUZXh0dXJlcygpOwogCisgICAgdmlydHVhbCB2b2lkIGFkZFNl
bGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKTsKKwog
cHJvdGVjdGVkOgogICAgIFRpbGVkTGF5ZXJDaHJvbWl1bSgpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAppbmRleCA2MmQ2Y2UyMzBmZDBmMWJjNmJhYmUyNDQwNjE1NGY2Nzk2YzRl
MWJkLi40ZmY4NDM0YjIwMGM5MmQ0OGEwOGJmOTFjMTRiMjdmODIxOWRkYWI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRl
ICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJJdGVyYXRvci5oIgpAQCAtNDEzLDEyICs0MTQsMTIgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnJlc2VydmVUZXh0dXJlcygpCiB9CiAKIC8vIHN0YXRpYwotdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBQYWlu
dFR5cGUgcGFpbnRUeXBlKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRp
cnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBQYWludFR5cGUgcGFpbnRUeXBlLCBjb25zdCBSZWdp
b24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpCiB7CiAgICAgQVNTRVJUKGxheWVyKTsKICAgICBBU1NF
UlQoUGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSB8fCBQYWludElkbGUgPT0gcGFpbnRUeXBlKTsK
ICAgICBpZiAoUGFpbnRWaXNpYmxlID09IHBhaW50VHlwZSkKLSAgICAgICAgbGF5ZXItPnBhaW50
Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eShv
Y2NsdWRlZFNjcmVlblNwYWNlKTsKICAgICBlbHNlCiAgICAgICAgIGxheWVyLT5pZGxlUGFpbnRD
b250ZW50c0lmRGlydHkoKTsKIH0KQEAgLTQyOSwzNSArNDMwLDkzIEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVt
KiByZW5kZXJTCiAgICAgLy8gaW4gY29kZSwgd2UgYWxyZWFkeSBrbm93IHRoYXQgYXQgbGVhc3Qg
c29tZXRoaW5nIHdpbGwgYmUgZHJhd24gaW50byB0aGlzIHJlbmRlciBzdXJmYWNlLCBzbyB0aGUK
ICAgICAvLyBtYXNrIGFuZCByZXBsaWNhIHNob3VsZCBiZSBwYWludGVkLgogCisgICAgLy8gRklY
TUU6IElmIHRoZSBzdXJmYWNlIGhhcyBhIHJlcGxpY2EsIGl0IHNob3VsZCBiZSBwYWludGVkIHdp
dGggb2NjbHVzaW9uIHRoYXQgZXhjbHVkZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2Ugc3Vi
dHJlZS4KKyAgICBSZWdpb24gbm9PY2NsdXNpb247CisKICAgICBpZiAocmVuZGVyU3VyZmFjZUxh
eWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXll
cigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVuZGVyU3VyZmFj
ZUxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHko
cmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlKTsKKyAgICAgICAgcGFp
bnRDb250ZW50c0lmRGlydHkocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRU
eXBlLCBub09jY2x1c2lvbik7CiAgICAgfQogCiAgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxh
eWVyID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAgICBpZiAocmVwbGlj
YUxheWVyKSB7Ci0gICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFp
bnRUeXBlKTsKKyAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCBwYWlu
dFR5cGUsIG5vT2NjbHVzaW9uKTsKIAogICAgICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5
ZXIoKSkgewogICAgICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VmlzaWJs
ZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkt
PmNvbnRlbnRCb3VuZHMoKSkpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVw
bGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlKTsKKyAgICAgICAgICAgIHBhaW50Q29u
dGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSwgbm9PY2Ns
dXNpb24pOwogICAgICAgICB9CiAgICAgfQogfQogCitzdHJ1Y3QgUmVuZGVyU3VyZmFjZVJlZ2lv
biB7CisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlOworICAgIFJlZ2lvbiBvY2Ns
dWRlZEluU2NyZWVuOworfTsKKworLy8gQWRkIHRoZSBzdXJmYWNlIHRvIHRoZSB0b3Agb2YgdGhl
IHN0YWNrIGFuZCBjb3B5IHRoZSBvY2NsdXNpb24gZnJvbSB0aGUgb2xkIHRvcCBvZiB0aGUgc3Rh
Y2sgdG8gdGhlIG5ldy4KK3N0YXRpYyB2b2lkIGVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShWZWN0
b3I8UmVuZGVyU3VyZmFjZVJlZ2lvbj4mIHN0YWNrLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5l
d1RhcmdldCkKK3sKKyAgICBpZiAoc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YWNrLmFw
cGVuZChSZW5kZXJTdXJmYWNlUmVnaW9uKCkpOworICAgICAgICBzdGFjay5sYXN0KCkuc3VyZmFj
ZSA9IG5ld1RhcmdldDsKKyAgICB9IGVsc2UgaWYgKHN0YWNrLmxhc3QoKS5zdXJmYWNlICE9IG5l
d1RhcmdldCkgeworICAgICAgICBjb25zdCBSZW5kZXJTdXJmYWNlUmVnaW9uJiBwcmV2aW91cyA9
IHN0YWNrLmxhc3QoKTsKKyAgICAgICAgc3RhY2suYXBwZW5kKFJlbmRlclN1cmZhY2VSZWdpb24o
KSk7CisgICAgICAgIHN0YWNrLmxhc3QoKS5zdXJmYWNlID0gbmV3VGFyZ2V0OworICAgICAgICBz
dGFjay5sYXN0KCkub2NjbHVkZWRJblNjcmVlbiA9IHByZXZpb3VzLm9jY2x1ZGVkSW5TY3JlZW47
CisgICAgfQorfQorCisvLyBQb3AgdGhlIHRvcCBvZiB0aGUgc3RhY2sgb2ZmLCBwdXNoIG9uIHRo
ZSBuZXcgc3VyZmFjZSwgYW5kIG1lcmdlIHRoZSBvbGQgdG9wJ3Mgb2NjbHVzaW9uIGludG8gdGhl
IG5ldyB0b3Agc3VyZmFjZS4KK3N0YXRpYyB2b2lkIGxlYXZlVGFyZ2V0UmVuZGVyU3VyZmFjZShW
ZWN0b3I8UmVuZGVyU3VyZmFjZVJlZ2lvbj4mIHN0YWNrLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IG5ld1RhcmdldCkKK3sKKyAgICBpbnQgbGFzdEluZGV4ID0gc3RhY2suc2l6ZSgpIC0gMTsKKyAg
ICBib29sIHN1cmZhY2VXaWxsQmVBdFRvcEFmdGVyUG9wID0gc3RhY2suc2l6ZSgpID4gMSAmJiBz
dGFja1tsYXN0SW5kZXggLSAxXS5zdXJmYWNlID09IG5ld1RhcmdldDsKKworICAgIGlmIChzdXJm
YWNlV2lsbEJlQXRUb3BBZnRlclBvcCkgeworICAgICAgICAvLyBNZXJnZSB0aGUgdG9wIG9mIHRo
ZSBzdGFjayBkb3duLgorICAgICAgICBzdGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdWRlZEluU2Ny
ZWVuLnVuaXRlKHN0YWNrW2xhc3RJbmRleF0ub2NjbHVkZWRJblNjcmVlbik7CisgICAgICAgIHN0
YWNrLnJlbW92ZUxhc3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSZXBsYWNlIHRoZSB0
b3Agb2YgdGhlIHN0YWNrIHdpdGggdGhlIG5ldyBwdXNoZWQgc3VyZmFjZS4gQ29weSB0aGUgb2Nj
bHVkZWQgcmVnaW9uIHRvIHRoZSB0b3AuCisgICAgICAgIHN0YWNrLmxhc3QoKS5zdXJmYWNlID0g
bmV3VGFyZ2V0OworICAgIH0KK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJD
b250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFBhaW50VHlw
ZSBwYWludFR5cGUpCiB7CiAgICAgLy8gVXNlIEZyb250VG9CYWNrIHRvIGFsbG93IGZvciB0ZXN0
aW5nIG9jY2x1c2lvbiBhbmQgcGVyZm9ybWluZyBjdWxsaW5nIGR1cmluZyB0aGUgdHJlZSB3YWxr
LgogICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJ
dGVyYXRvclR5cGU7CiAKKyAgICAvLyBUaGUgc3RhY2sgaG9sZHMgb2NjbHVkZWQgcmVnaW9ucyBm
b3Igc3VidHJlZXMgaW4gdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZSwgc28gdGhhdCB3aGVu
IHdlIGxlYXZlIGEgc3VidHJlZSB3ZSBtYXkKKyAgICAvLyBhcHBseSBhIG1hc2sgdG8gaXQsIGJ1
dCBub3QgdG8gdGhlIHBhcnRzIG91dHNpZGUgdGhlIHN1YnRyZWUuCisgICAgLy8gLSBUaGUgZmly
c3QgdGltZSB3ZSBzZWUgYSBuZXcgc3VidHJlZSB1bmRlciBhIHRhcmdldCwgd2UgYWRkIHRoYXQg
dGFyZ2V0IHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLiBUaGlzIGNhbiBoYXBwZW4gYXMgYSBsYXll
ciByZXByZXNlbnRpbmcgaXRzZWxmLCBvciBhcyBhIHRhcmdldCBzdXJmYWNlLgorICAgIC8vIC0g
V2hlbiB3ZSB2aXNpdCBhIHRhcmdldCBzdXJmYWNlLCB3ZSBhcHBseSBpdHMgbWFzayB0byBpdHMg
c3VidHJlZSwgd2hpY2ggaXMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisgICAgLy8gLSBXaGVu
IHdlIHZpc2l0IGEgbGF5ZXIgcmVwcmVzZW50aW5nIGl0c2VsZiwgd2UgYWRkIGl0cyBvY2NsdXNp
b24gdG8gdGhlIGN1cnJlbnQgc3VidHJlZSwgd2hpY2ggaXMgYXQgdGhlIHRvcCBvZiB0aGUgc3Rh
Y2suCisgICAgLy8gLSBXaGVuIHdlIHZpc2l0IGEgbGF5ZXIgcmVwcmVzZW50aW5nIGEgY29udHJp
YnV0aW5nIHN1cmZhY2UsIHRoZSBjdXJyZW50IHRhcmdldCB3aWxsIG5ldmVyIGJlIHRoZSB0b3Ag
b2YgdGhlIHN0YWNrIHNpbmNlIHdlIGp1c3QgY2FtZSBmcm9tIHRoZSBjb250cmlidXRpbmcgc3Vy
ZmFjZS4KKyAgICAvLyBXZSBtZXJnZSB0aGUgb2NjbHVzaW9uIGF0IHRoZSB0b3Agb2YgdGhlIHN0
YWNrIHdpdGggdGhlIG5ldyBjdXJyZW50IHN1YnRyZWUuIFRoaXMgbmV3IHRhcmdldCBpcyBwdXNo
ZWQgb250byB0aGUgc3RhY2sgaWYgbm90IGFscmVhZHkgdGhlcmUuCisgICAgVmVjdG9yPFJlbmRl
clN1cmZhY2VSZWdpb24+IHRhcmdldFN1cmZhY2VTdGFjazsKKwogICAgIENDTGF5ZXJJdGVyYXRv
clR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKICAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JU
eXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBpZiAoaXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgewogICAgICAg
ICAgICAgQVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOworCisgICAg
ICAgICAgICBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UodGFyZ2V0U3VyZmFjZVN0YWNrLCBpdC0+
cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5k
ZXJTdXJmYWNlKCppdCwgcGFpbnRUeXBlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgdGhl
IHJlcGxpY2EgbGF5ZXIgdG8gdGhlIGN1cnJlbnQgb2NjbHVzaW9uCisKKyAgICAgICAgICAgIGlm
IChpdC0+bWFza0xheWVyKCkgfHwgaXQtPnJlbmRlclN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSA8
IDEpCisgICAgICAgICAgICAgICAgdGFyZ2V0U3VyZmFjZVN0YWNrLmxhc3QoKS5vY2NsdWRlZElu
U2NyZWVuID0gUmVnaW9uKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQucmVwcmVzZW50c0l0c2Vs
ZigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0LT5ib3VuZHMoKS5pc0VtcHR5KCkpOwotICAg
ICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkoKml0LCBwYWludFR5cGUpOworCisgICAgICAg
ICAgICBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UodGFyZ2V0U3VyZmFjZVN0YWNrLCBpdC0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KCpp
dCwgcGFpbnRUeXBlLCB0YXJnZXRTdXJmYWNlU3RhY2subGFzdCgpLm9jY2x1ZGVkSW5TY3JlZW4p
OworICAgICAgICAgICAgaXQtPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UodGFyZ2V0U3Vy
ZmFjZVN0YWNrLmxhc3QoKS5vY2NsdWRlZEluU2NyZWVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGxlYXZlVGFyZ2V0UmVuZGVyU3VyZmFjZSh0YXJnZXRTdXJmYWNlU3RhY2ssIGl0
LnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA4MWI1ZjI1MDVmMWI4
NDUwYzZkYWQxM2NmMWM1ZTgzYzAxZjA4MGNjLi5mNTgyMDNkMTVlYjIwNDUwNzFjMmVmYTQ0OGJh
NDBiZjE5YTU0Y2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNDgsNiArNDgs
NyBAQCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07Citj
bGFzcyBSZWdpb247CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgVGV4dHVyZU1hbmFn
ZXI7CiAKQEAgLTIwNSw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPE93
blB0cjxNYW5hZ2VkVGV4dHVyZT4gPiBUZXh0dXJlTGlzdDsKIAogICAgIGVudW0gUGFpbnRUeXBl
IHsgUGFpbnRWaXNpYmxlLCBQYWludElkbGUgfTsKLSAgICBzdGF0aWMgdm9pZCBwYWludENvbnRl
bnRzSWZEaXJ0eShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKKyAgICBzdGF0aWMgdm9pZCBw
YWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlLCBjb25zdCBSZWdp
b24mIG9jY2x1ZGVkU2NyZWVuU3BhY2UpOwogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNv
bnN0IExheWVyTGlzdCYsIFBhaW50VHlwZSk7CiAgICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNh
Rm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UXVhZEN1bGxlci5jcHAKaW5kZXggYmE5YzY2ZTg3NDkyMDYyNTc1ZjU1MGViMGY1ZWVmMzZkNTVj
ZjQ2YS4uYzhiZDliMGYzNjMyNGFmNmU4YTRiYzFmYjVhMjQwOGZmMDMxNDU0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1F1YWRDdWxsZXIuY3BwCkBAIC03NSwxOCArNzUsNiBAQCBzdGF0aWMgSW50UmVjdCByZWN0
U3VidHJhY3RSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGVuY2xvc2VkSW50UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZmxvYXQgeCA9IGNlaWxmKHJlY3QueCgpKTsK
LSAgICBmbG9hdCB5ID0gY2VpbGYocmVjdC55KCkpOwotICAgIC8vIEEgcmVjdCBvZiB3aWR0aCAw
IHNob3VsZCBub3QgYmVjb21lIGEgcmVjdCBvZiB3aWR0aCAtMS4KLSAgICBmbG9hdCB3aWR0aCA9
IG1heDxmbG9hdD4oZmxvb3JmKHJlY3QubWF4WCgpKSAtIHgsIDApOwotICAgIGZsb2F0IGhlaWdo
dCA9IG1heDxmbG9hdD4oZmxvb3JmKHJlY3QubWF4WSgpKSAtIHksIDApOwotCi0gICAgcmV0dXJu
IEludFJlY3QoY2xhbXBUb0ludGVnZXIoeCksIGNsYW1wVG9JbnRlZ2VyKHkpLAotICAgICAgICAg
ICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7
Ci19Ci0KIHZvaWQgQ0NRdWFkQ3VsbGVyOjpjdWxsT2NjbHVkZWRRdWFkcyhDQ1F1YWRMaXN0JiBx
dWFkTGlzdCkKIHsKICAgICBpZiAoIXF1YWRMaXN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3Bw
CmluZGV4IGQyZTFjZmVmOTNlMjgyMTY2ZGE4NTEyNTZjOTVjMGU2NTEyYzY5YmEuLmIxZmE3Mjkx
ODQwMWUzMjQwZTQxZDEzZDJlMGMyN2QwYzU2YWQ3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgpAQCAt
MzUsNiArMzYsMTIgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKyNkZWZpbmUgRVhQ
RUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAg
RVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndp
ZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCiBuYW1l
c3BhY2UgewogCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRz
LCBib29sIHByZXNlcnZlczNEKQpAQCAtNTk1LDQgKzYwMiwxNzQgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXMpCiAvLyAg
LSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uCiAvLwog
CitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVk
UmVnaW9uKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBh
cmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgbGF5ZXItPnNl
dE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAg
IC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVo
YXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRv
by4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRT
Y3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAs
IDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVk
LnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBs
YXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlvbikKK3sKKyAgICAvLyBUaGlz
IHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgUmVn
aW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+
IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRk
Q2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07
CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICBsYXllclRyYW5z
Zm9ybS5yb3RhdGUoOTApOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUw
KTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBm
YWxzZSk7CisKKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3Qt
bGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwg
aGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxh
eWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVkZWQuYm91bmRzKCkpOworICAg
IEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworfQorCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFRy
YW5zbGF0aW9uKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3Jt
cyBhcmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUo
MjAsIDIwKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1
MDApLCBmYWxzZSk7CisKKyAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOworCisgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1t
eU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMg
InJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdl
IHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgorICAgIHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91
bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5k
KHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOwor
ICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVkZWQuYm91bmRzKCkp
OworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworfQorCitURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9u
V2l0aFJvdGF0ZWRTdXJmYWNlKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQg
dHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBSZWdpb24gb2NjbHVkZWQ7CisgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAg
Y2hpbGQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxk
VHJhbnNmb3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAg
Y2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUo
LTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUw
MCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisgICAgY2hp
bGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsK
KworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsK
KyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVu
IHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXll
clRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQt
PnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQg
PSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2Ns
dWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1
ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgIC8qIEp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92ZSBvcGFxdWUgcmVjdCBmcm9t
IHxsYXllcnw6CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8MzAgIFZpc2libGUgcmVn
aW9uIG9mIHxsYXllcnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwK
KyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAg
ICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAx
MDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICA9
PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAgICB8CisgICAgICB8
ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAg
ICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAgICAgIHwgICAg
fCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8
ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwg
IHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8ICAgIHwgIHwgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8v
Ly8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0tfC0tfC0tLS0tLS0t
LS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICArLS18LS18LS0tLS0t
LS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwxMHwgICAgIDcwICAg
ICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAg
ICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MTB8
CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgICAg
ICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLSsKKyAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAgfAorICAgICAgICAg
ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRl
eCAwY2IyNjA1ZThhNmQzZDMyMmZjZWIwZmM3M2FhN2FmZTY5NDkyMDkwLi40MWZlNGZiNjU5Yjk0
MDUxYzY3ZWFiZjNlZWE5YzA4NDY3NmVlYWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJS
ZWdpb24uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBv
c2l0b3IuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAgLTEwMDUsOSArMTAwNiw5IEBAIHB1Ymxp
YzoKICAgICBpbnQgdXBkYXRlQ291bnQoKSB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CiAgICAg
dm9pZCByZXNldFVwZGF0ZUNvdW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQogCi0gICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKQogICAgIHsK
LSAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCk7Cisg
ICAgICAgIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShvY2NsdWRl
ZFNjcmVlblNwYWNlKTsKICAgICAgICAgbV9wYWludENvbnRlbnRzQ291bnQrKzsKICAgICB9CiAK
QEAgLTEyMjgsNCArMTIyOSwyNDQgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RBdG9taWND
b21taXQsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3QodHJ1ZSk7CiB9CiAKKyNkZWZpbmUg
RVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisg
ICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBi
LndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCitj
bGFzcyBUZXN0TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFRlc3RMYXllckNocm9taXVtKCkpOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNl
KQorICAgIHsKKyAgICAgICAgbV9vY2NsdWRlZFNjcmVlblNwYWNlID0gb2NjbHVkZWRTY3JlZW5T
cGFjZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9vY2NsdWRlZFNjcmVlblNwYWNlOyB9CisgICAgdm9pZCBjbGVhck9j
Y2x1ZGVkU2NyZWVuU3BhY2UoKSB7IG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IFJlZ2lvbigpOyB9
CisKK3ByaXZhdGU6CisgICAgVGVzdExheWVyQ2hyb21pdW0oKSA6IExheWVyQ2hyb21pdW0oKSB7
IH0KKworICAgIFJlZ2lvbiBtX29jY2x1ZGVkU2NyZWVuU3BhY2U7Cit9OworCitzdGF0aWMgdm9p
ZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKFRlc3RMYXllckNocm9taXVtKiBsYXllciwg
TGF5ZXJDaHJvbWl1bSogcGFyZW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
LCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgb3BhcXVlKQoreworICAgIGxheWVyLT5yZW1v
dmVBbGxDaGlsZHJlbigpOworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHBhcmVudC0+YWRkQ2hp
bGQobGF5ZXIpOworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXll
ci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yKTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24ocG9zaXRp
b24pOworICAgIGxheWVyLT5zZXRCb3VuZHMoYm91bmRzKTsKKyAgICBsYXllci0+c2V0T3BhcXVl
KG9wYXF1ZSk7CisgICAgbGF5ZXItPmNsZWFyT2NjbHVkZWRTY3JlZW5TcGFjZSgpOworfQorCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb24gOiBwdWJsaWMgQ0NMYXllclRy
ZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdExheWVyT2NjbHVz
aW9uKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAg
IFJlZlB0cjxUZXN0TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyID0gVGVzdExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNoaWxkID0gVGVz
dExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21p
dW0+IGNoaWxkMiA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRy
PFRlc3RMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgICAgICBSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IG1hc2sgPSBUZXN0TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOwor
ICAgICAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgICAgICBjaGls
ZFRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgICAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUo
LTI1MCwgLTI1MCk7CisKKyAgICAgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisK
KyAgICAgICAgLy8gU2VlIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QubGF5ZXJBZGRzU2VsZlRv
T2NjbHVkZWRSZWdpb25XaXRoUm90YXRlZFN1cmZhY2UgZm9yIGEgbmljZSB2aXN1YWwgb2YgdGhl
c2UgbGF5ZXJzIGFuZCBob3cgdGhleSBlbmQgdXAKKyAgICAgICAgLy8gcG9zaXRpb25lZCBvbiB0
aGUgc2NyZWVuLgorCisgICAgICAgIC8vIFRoZSBjaGlsZCBsYXllciBpcyByb3RhdGVkIGFuZCB0
aGUgZ3JhbmRDaGlsZCBpcyBvcGFxdWUsIGJ1dCBjbGlwcGVkIHRvIHRoZSBjaGlsZCBhbmQgcm9v
dExheWVyCisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdExheWVyLmdl
dCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBm
YWxzZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5n
ZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9h
dFBvaW50KDEwLCAxMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5j
b21taXRDb21wbGV0ZSgpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3Jh
bmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDB1LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkp
OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQt
Pm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwg
Y2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCByb290TGF5ZXItPm9jY2x1ZGVk
U2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVy
LT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElm
IHRoZSBjaGlsZCBsYXllciBpcyBvcGFxdWUsIHRoZW4gaXQgYWRkcyB0byB0aGUgb2NjbHVzaW9u
IHNlZW4gYnkgdGhlIHJvb3RMYXllci4KKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwg
Y2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7
CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMo
KSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KCksIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7
CisgICAgICAgIEVYUEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgp
LnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAs
IDcwLCA2MCksIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgcm9v
dExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KworICAgICAgICAvLyBBZGQgYSBzZWNvbmQgY2hpbGQgdG8gdGhlIHJvb3QgbGF5ZXIgYW5kIHRo
ZSByZWdpb25zIHNob3VsZCBtZXJnZQorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoNzAsIDIwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBj
aGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENv
bXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBncmFuZENoaWxk
LT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUs
IGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAg
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBjaGlsZC0+b2NjbHVk
ZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBjaGlsZC0+
b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBjaGlsZDItPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMzAsIDIwLCA3MCwgODApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNw
YWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIE1vdmUgdGhlIHNlY29uZCBjaGls
ZCB0byBiZSBzdXJlLgorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RM
YXllci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50U2l6ZSg1MDAs
IDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxk
LmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBjaGlsZC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3Bv
cnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7
CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBncmFuZENoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hp
bGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5T
cGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMzAsIDcwLCA3MCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5k
cygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDMw
LCA5MCwgNzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgydSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBsYXllciBoYXMgYSBtYXNr
IG9uIGl0LCB0aGVuIGl0IHNob3VsZG4ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbiBvbiBzdHVm
ZiBiZWxvdyBpdAorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXll
ci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBjaGlsZC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIobWFz
ay5nZXQoKSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExh
eWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVy
LT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KCksIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5i
b3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3Jl
ZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgzMCwgNDAsIDcwLCA2MCksIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+
b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBj
aGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcwLCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1ZGVk
U2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVy
LT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElm
IHRoZSBjaGlsZCBsYXllciB3aXRoIGEgbWFzayBpcyBiZWxvdyBjaGlsZDIsIHRoZW4gY2hpbGQy
IHNob3VsZCBjb250cmlidXRlIHRvIG9jY2x1c2lvbiBvbiBldmVyeXRoaW5nLCBhbmQgY2hpbGQg
c2hvdWxkbid0IGNvbnRyaWJ1dGUgdG8gdGhlIHJvb3RMYXllcgorICAgICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVl
KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9v
dExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAw
LCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGls
ZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAg
ICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIobWFzay5nZXQoKSk7CisKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0
Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+
b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBj
aGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcwLCA5MCwgMzApLCBncmFuZENoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGdyYW5kQ2hp
bGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMTAsIDQwLCA5MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5T
cGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBjaGlsZC0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgxMCwgNzAsIDkwLCAzMCksIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJv
dW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGxheWVy
IGhhcyBhIG5vbi1vcGFxdWUgZHJhd09wYWNpdHksIHRoZW4gaXQgc2hvdWxkbid0IGNvbnRyaWJ1
dGUgdG8gb2NjbHVzaW9uIG9uIHN0dWZmIGJlbG93IGl0CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3Rpbmcocm9vdExheWVyLmdldCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOwor
ICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgcm9vdExh
eWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgx
MCwgNzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgY2hpbGRUcmFuc2Zv
cm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAgICAg
Y2hpbGQtPnNldE1hc2tMYXllcigwKTsKKyAgICAgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41KTsK
KworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290TGF5ZXItPmJvdW5kcygp
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsK
KyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwg
NzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUo
KSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgY2hpbGQyLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGNoaWxkMi0+b2Nj
bHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgxMCwgNzAsIDkwLCAzMCksIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCByb290TGF5ZXItPm9jY2x1ZGVk
U2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gSWYgdGhlIGNoaWxk
IGxheWVyIHdpdGggbm9uLW9wYXF1ZSBkcmF3T3BhY2l0eSBpcyBiZWxvdyBjaGlsZDIsIHRoZW4g
Y2hpbGQyIHNob3VsZCBjb250cmlidXRlIHRvIG9jY2x1c2lvbiBvbiBldmVyeXRoaW5nLCBhbmQg
Y2hpbGQgc2hvdWxkbid0IGNvbnRyaWJ1dGUgdG8gdGhlIHJvb3RMYXllcgorICAgICAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDAp
LCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQo
KSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNp
emUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOwor
CisgICAgICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIoMCk7CisgICAgICAgIGNoaWxkLT5zZXRPcGFj
aXR5KDAuNSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExh
eWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVy
LT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5k
cygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcw
LCA5MCwgMzApLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMXUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQwLCA5
MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDJ1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNzAsIDkwLCAzMCksIHJvb3RM
YXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDF1LCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICAgICAgLy8gS2lsbCB0aGUgbGF5ZXJUcmVlSG9zdCBpbW1lZGlhdGVseS4KKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC5jbGVhcigpOworCisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKKworU0lOR0xFX0FORF9NVUxUSV9USFJF
QURfVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbikKKwogfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRM
YXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZh
czJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGYwYjVjNDExYjY1NmFlZGU3NTk1NzEwZTRk
OGNmZDdkMjRkYjUzM2MuLjFkZjI3YzAxMTE5YjI2NTdlODJlMmEwNzk3YjFjMDFiNTBkMzA1ZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNo
cm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMy
RExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNDU2No
ZWR1bGVyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlJlZ2lv
bi5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNM
YXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCkBAIC0xMzgs
NyArMTM5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIGNhbnZhcy0+Y29udGVudENoYW5nZWQo
KTsKICAgICAgICAgRVhQRUNUX1RSVUUoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7Ci0gICAgICAg
IGNhbnZhcy0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgUmVnaW9uIG9jY2x1ZGVk
U2NyZWVuU3BhY2U7CisgICAgICAgIGNhbnZhcy0+cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVk
ZWRTY3JlZW5TcGFjZSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShjYW52YXMtPm5lZWRzRGlzcGxh
eSgpKTsKICAgICAgICAgewogICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNj
b3BlZEltcGxUaHJlYWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBiODUwZjgyNDFjYzA4MDE0MTM4ZTM4
MDhjMDYxNGNhNjEwNGU2MzIxLi5iMDM1MGRiNDk1ZmI1NjJiMzU4MTQwODdlZjY0MTBkNzYxOTVi
YTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRM
YXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDQ0xheWVy
VHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50Lmgi
CiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgog
I2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIgLy8gRm9yIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZApAQCAtMzksNiArNDAsMTIgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
dXNpbmcgbmFtZXNwYWNlIFdURjsKIAorI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCisg
ICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgp
KTsgXAorICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1Rf
RVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEZha2VU
ZXh0dXJlQWxsb2NhdG9yIDogcHVibGljIFRleHR1cmVBbGxvY2F0b3IgewpAQCAtNzAsMTcgKzc3
LDIwIEBAIHB1YmxpYzoKICAgICBpbnQgcHJlcGFyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9w
cmVwYXJlQ291bnQ7IH0KICAgICB2b2lkIGNsZWFyUHJlcGFyZUNvdW50KCkgeyBtX3ByZXBhcmVD
b3VudCA9IDA7IH0KIAorICAgIHZvaWQgc2V0T3BhcXVlUGFpbnRSZWN0KGNvbnN0IEludFJlY3Qm
IG9wYXF1ZVBhaW50UmVjdCkgeyBtX29wYXF1ZVBhaW50UmVjdCA9IG9wYXF1ZVBhaW50UmVjdDsg
fQorCiAgICAgLy8gTGFzdCByZWN0IHBhc3NlZCB0byBwcmVwYXJlVG9VcGRhdGUoKS4KICAgICBj
b25zdCBJbnRSZWN0JiBsYXN0VXBkYXRlUmVjdCgpICBjb25zdCB7IHJldHVybiBtX2xhc3RVcGRh
dGVSZWN0OyB9CiAKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1cm4g
YWRvcHRQdHIobmV3IFRleHR1cmUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOyB9
CiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0Rl
bnVtKSB7IHJldHVybiBTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6
ZSYsIGludCwgZmxvYXQsIEludFJlY3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwgaW50LCBmbG9h
dCwgSW50UmVjdCogcmVzdWx0aW5nT3BhcXVlUmVjdCk7CiAKIHByaXZhdGU6CiAgICAgaW50IG1f
cHJlcGFyZUNvdW50OwogICAgIEludFJlY3QgbV9yZWN0VG9JbnZhbGlkYXRlOwogICAgIEludFJl
Y3QgbV9sYXN0VXBkYXRlUmVjdDsKKyAgICBJbnRSZWN0IG1fb3BhcXVlUGFpbnRSZWN0OwogICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBtX2xheWVyOwogfTsKIApAQCAtMTM5LDcg
KzE0OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVN
YW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFuYWdlcjsgfQogCi0gICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50c0lmRGlydHkoY29uc3QgUmVnaW9uJiAvKiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogICAg
IHsKICAgICAgICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJlY3QoKSk7CiAgICAgfQpA
QCAtMTg3LDcgKzE5Nyw3IEBAIHZvaWQgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QKICAgICAgICAgbV9yZWN0
VG9JbnZhbGlkYXRlID0gSW50UmVjdCgpOwogICAgICAgICBtX2xheWVyID0gMDsKICAgICB9Ci0g
ICAgKnJlc3VsdGluZ09wYXF1ZVJlY3QgPSBJbnRSZWN0KCk7CisgICAgKnJlc3VsdGluZ09wYXF1
ZVJlY3QgPSBtX29wYXF1ZVBhaW50UmVjdDsKIH0KIAogVEVTVChUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoRGlydHlUaWxlcykKQEAgLTQ2MCw0ICs0NzAsOTggQEAgVEVTVChUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAgV2ViS2l0OjpXZWJDb21wb3Np
dG9yOjpzaHV0ZG93bigpOwogfQogCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGxheWVy
QWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uKQoreworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEw
MjQqMTAyNCwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVy
ID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0
KCkpKTsKKworICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlk
YXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzIGluIHZhcmlvdXMgd2F5cy4KKworICAgIFJl
Z2lvbiBvY2NsdWRlZDsKKyAgICBJbnRSZWN0IGNvbnRlbnRCb3VuZHMgPSBJbnRSZWN0KDAsIDAs
IDEwMCwgMjAwKTsKKyAgICBJbnRSZWN0IHZpc2libGVCb3VuZHMgPSBJbnRSZWN0KDAsIDAsIDEw
MCwgMTUwKTsKKworICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcy5zaXplKCkpOwor
ICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVCb3VuZHMpOworICAgIGxheWVy
LT5zZXREcmF3T3BhY2l0eSgxKTsKKworICAgIC8vIFRoZSBzY3JlZW5TcGFjZVRyYW5zZm9ybSBp
cyB2ZXJpZmllZCBpbiBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0cworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtOworICAgIGxheWVyLT5zZXRTY3JlZW5TcGFj
ZVRyYW5zZm9ybShzY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIg
aXMgb3BhcXVlIHRoZW4gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgYmUgdGhlIHdob2xlIGxh
eWVyJ3MgdmlzaWJsZSByZWdpb24uCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKyAgICBs
YXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnByZXBhcmVU
b1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAg
bGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVYUEVD
VF9FUV9SRUNUKHZpc2libGVCb3VuZHMsIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElmIHRoZSBsYXllciBp
cyBub3Qgb3BhcXVlIHRoZW4gdGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgYmUgZW1wdHkuCisg
ICAgbGF5ZXItPnNldE9wYXF1ZShmYWxzZSk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNv
bnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJvdW5kcyk7
CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRl
ZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIG9j
Y2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6
ZSgpKTsKKworICAgIC8vIElmIHRoZSBsYXllciBwYWludHMgb3BhcXVlIGNvbnRlbnQsIHRoZW4g
dGhlIG9jY2x1ZGVkIHJlZ2lvbiBzaG91bGQgbWF0Y2ggdGhlIHZpc2libGUgb3BhcXVlIGNvbnRl
bnQuCisgICAgSW50UmVjdCBvcGFxdWVQYWludFJlY3QgPSBJbnRSZWN0KDEwLCAxMCwgOTAsIDE5
MCk7CisgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50
UmVjdChvcGFxdWVQYWludFJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50
Qm91bmRzKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisg
ICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3Jl
ZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9uKG9wYXF1
ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElmIHdlIHBhaW50
IGFnYWluIHdpdGhvdXQgaW52YWxpZGF0aW5nLCB0aGUgc2FtZSBzdHVmZiBzaG91bGQgYmUgb2Nj
bHVkZWQuCisgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBh
aW50UmVjdChJbnRSZWN0KCkpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudEJv
dW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRTZWxmVG9P
Y2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNl
Y3Rpb24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSwgb2NjbHVkZWQuYm91bmRzKCkp
OworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOworCisgICAgLy8g
SWYgdGhlIGxheWVyIGlzIHRyYW5zZm9ybWVkIHRoZW4gdGhlIHJlc3VsdGluZyBvY2NsdWRlZCBh
cmVhIG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIHRvIGl0cyB0YXJnZXQgc3BhY2UuCisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29u
dGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsK
KyAgICB0cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250
ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsK
KyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAxMCk7CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zv
cm0udHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5o
ZWlnaHQoKSAvIDIuMCk7CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gKj0gdHJhbnNmb3JtOwor
ICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgp
IC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgbGF5ZXItPnNldFNj
cmVlblNwYWNlVHJhbnNmb3JtKHNjcmVlblNwYWNlVHJhbnNmb3JtKTsKKyAgICBsYXllci0+cHJl
cGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsK
KyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAg
RVhQRUNUX0VRX1JFQ1Qoc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChpbnRlcnNlY3Rpb24o
b3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAg
ICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIEJ1dCBh
IG5vbi1heGlzLWFsaWduZWQgdHJhbnNmb3JtIGRvZXMgbm90IGdldCBjb25zaWRlcmVkIGZvciBv
Y2NsdXNpb24uCisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkg
LyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHRyYW5zZm9ybS5yb3Rh
dGUoNSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8g
Mi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgc2NyZWVuU3BhY2VUcmFu
c2Zvcm0udHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5k
cy5oZWlnaHQoKSAvIDIuMCk7CisgICAgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gKj0gdHJhbnNmb3Jt
OworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0
aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgbGF5ZXItPnNl
dFNjcmVlblNwYWNlVHJhbnNmb3JtKHNjcmVlblNwYWNlVHJhbnNmb3JtKTsKKyAgICBsYXllci0+
cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24o
KTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7Cisg
ICAgLy8gRklYTUU6IElmIHdlIGZpbmQgYW4gb3BhcXVlIHJlY3QgY29udGFpbmVkIGluIHRoZSBy
b3RhdGVkIG5vbi1heGlzLWFsaWduZWQgcmVjdCwgdGhlbgorICAgIC8vIHRoaXMgd29uJ3QgYmUg
YW4gZW1wdHkgcmVzdWx0LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgb2NjbHVkZWQu
Ym91bmRzKCkpOworICAgIEVYUEVDVF9FUSgwdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124751</attachid>
            <date>2012-01-31 09:07:44 -0800</date>
            <delta_ts>2012-01-31 13:15:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76858-20120131120742.patch</filename>
            <type>text/plain</type>
            <size>62538</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmIyZTcxZjE2ZjE5OGU2
MjAxZGIxZDAyMjc5Yjk3NDA4YTc3OGE1My4uYjVhZWQ1MmQzOTJkZmZhYTFmYWNhODhlYmQ4YmYw
YzY0YjJiNGU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTI3ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29t
cHV0ZSBvY2NsdXNpb24gZHVyaW5nIHBhaW50IGxvb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFt
ZXMgUm9iaW5zb24uCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAsIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwLCBDQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2VkSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoQ29udGVudExheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKEltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZFNlbGZU
b09jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
aXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1bSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6YWRkU2VsZlRvT2Nj
bHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGly
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBs
aWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6cG9wQW5kUHVzaFRhcmdldFJlbmRlclN1cmZh
Y2VSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVy
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHA6CisKIDIwMTIt
MDEtMzEgIEFya28gU2FoYSAgPGFya29AbW90b3JvbGEuY29tPgogCiAgICAgICAgIFRoZSBzcGVj
IHJlbmFtZWQgYWRkVHJhY2soKSB0byBhZGRUZXh0VHJhY2soKS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggODI4ZGVlZDc5ODZkYTBjNDZhMTEyZWU5ZjEyNTgyNzU2NTM5OTNlMC4uZmM4
NzBlNmRkMTdmZDg5M2QyMzFjY2ExZWZhZTg4NGI0MjQ1ZGRlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wMS0yNyAgRGFuYSBKYW5zZW5zICA8ZGFu
YWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENvbXB1dGUgb2NjbHVzaW9u
IGR1cmluZyBwYWludCBsb29wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03Njg1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgor
CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpDb250ZW50TGF5ZXJDaHJvbWl1
bVdpdGhVcGRhdGVUcmFja2luZzo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKFRlc3RMYXllckNocm9taXVtKToKKyAgICAgICAgKFdURjo6VGVzdExheWVy
Q2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNocm9taXVtOjpkcmF3
c0NvbnRlbnQpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJDaHJvbWl1bTo6b2NjbHVkZWRTY3Jl
ZW5TcGFjZSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNocm9taXVtOjpjbGVhck9jY2x1ZGVk
U2NyZWVuU3BhY2UpOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJDaHJvbWl1bTo6VGVzdExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV1RGOjpzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKToK
KyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbik6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbjo6Q0NMYXllclRyZWVIb3N0VGVz
dExheWVyT2NjbHVzaW9uKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVy
T2NjbHVzaW9uOjpiZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0
TGF5ZXJPY2NsdXNpb246OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXll
ckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21p
dW1UZXN0OjpmdWxsTGlmZWN5Y2xlVGVzdCk6CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNo
cm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpz
ZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAgICAoRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgor
ICAgICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0
eSk6CisgICAgICAgIChXVEY6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRh
dGUpOgorICAgICAgICAoV1RGOjpURVNUKToKKyAgICAgICAgKFdURik6CisKIDIwMTItMDEtMjYg
IEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTcGVlY2ggSW5w
dXQ6IG1vdmUgTW9ja1NwZWVjaElucHV0Q2xpZW50IGludG8gQ2hyb21pdW0gRHVtcFJlbmRlclRy
ZWUgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuY3BwCmluZGV4IDQ2ZmNhNmMyN2U5ZTkzZTYzOTQ2ODI3NWYzNzU5NTk0ZjVjOTJi
NzcuLjU5NWFmMmEzMjNhM2VlNWFhNDhmNjgwODViNjY2NmE3ZDlkNDk0ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMjE4LDYgKzIx
OCwxOSBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIo
aGVpZ2h0KSk7CiB9CiAKK0ludFJlY3QgZW5jbG9zZWRJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpbnQgeCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHJlY3QueCgpKSk7Cisg
ICAgaW50IHkgPSBjbGFtcFRvSW50ZWdlcihjZWlsZihyZWN0LnkoKSkpOworICAgIGZsb2F0IG1h
eFggPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYocmVjdC5tYXhYKCkpKTsKKyAgICBmbG9hdCBtYXhZ
ID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHJlY3QubWF4WSgpKSk7CisgICAgLy8gQSByZWN0IG9m
IHdpZHRoIDAgc2hvdWxkIG5vdCBiZWNvbWUgYSByZWN0IG9mIHdpZHRoIC0xIGR1ZSB0byBjZWls
L2Zsb29yLgorICAgIGludCB3aWR0aCA9IG1heChjbGFtcFRvSW50ZWdlcihtYXhYIC0geCksIDAp
OworICAgIGludCBoZWlnaHQgPSBtYXgoY2xhbXBUb0ludGVnZXIobWF4WSAtIHkpLCAwKTsKKwor
ICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCiBGbG9hdFJlY3Qg
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAg
fHwgc3JjUmVjdC5oZWlnaHQoKSA9PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaAppbmRleCAxNDA5MDcxYjExOTg4M2QzYjA4NjI3MGFhNGNmNzg4NGY0
ZmJhNjJjLi4yMmMxNzFjNWFiNGQxODg5NjBlODJmZTdiZTAyMThlNDFjZjhhNWY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMjcwLDYgKzI3
MCw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBG
bG9hdFJlY3QmIGIpCiAKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKIAorLy8gUmV0dXJucyBhIHZhbGlkIEludFJlY3QgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2
ZW4gRmxvYXRSZWN0LgorSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisKIC8vIE1hcCByZWN0IHIgZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBk
ZXN0UmVjdC4KIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTUwNWFkYWMyNDNlMDc2NjVkMmRkYWIy
OGY0NzAzZmY4ZWY1Yjk0My4uMDkwNTQ3NDE4NmVmYzJjNDBhN2FkYTQ1ODU5NWUwYmY4M2YzNjhj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC05MSw3ICs5MSw3
IEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogICAg
ICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0K
IAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3Zv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdp
b24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2UgKi8pCiB7CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQo
KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAppbmRl
eCA4MzYxNWExZjIyMzU2MTY0NjJlYjFmOGQ0MTIyZTFhZDhlNThjOTIyLi5lY2JhOTBmNGVkMTYy
YzY4ZGM0ZjA4ZTYxMGJkZDRmNzJkOWIzMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaApAQCAtNDAsNiArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQSBsYXllciBjb250YWluaW5n
IGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcwogY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtIDog
cHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0gewpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJh
d3NDb250ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYg
b2NjbHVkZWRTY3JlZW5TcGFjZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCA1MjlmY2UwMzY0YTgyODU1YWE0MDYzOTcx
NTZlMGZiYjRlM2E5NTBlLi4zNDMwMzExMGZhOWNhZmRmMjZjYTliY2ZlZDZlMjRjNGY0MDJmMmFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC05Myw3ICs5Myw3IEBA
IGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAgICAgcmV0
dXJuIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgJiYgbV9kZWxlZ2F0ZTsKIH0K
IAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgUmVnaW9u
JiAvKiBvY2NsdWRlZFNjcmVlblNwYWNlICovKQogewogICAgIHVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDQyNjY3
OWNhZmFiYjczOTRjMDJlNzkwMWJlMzMyZDdiY2I1ZTA4MWEuLjVlZmY2YTNkNjBhMTJkMTIwZWI3
MjAwMGQzNTBiMWZiNTgzOGVhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApA
QCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGlsZXJD
aHJvbWl1bTsKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiAKIGNs
YXNzIENvbnRlbnRMYXllckRlbGVnYXRlIHsKIHB1YmxpYzoKQEAgLTU4LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJEZWxlZ2F0ZSgpIHsgbV9kZWxlZ2F0ZSA9IDA7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQg
aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVl
KGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDE1NGZiMjgzMTRm
M2U2YzkyNDA0N2JiNDgzNjczNjkyZGZjZmFiNy4uODMxY2JlODA5NjNhM2E4MDBiOGFhNDZhNjk5
NDhmNGZjN2Y1ZWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNTgs
NyArMTU4LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBj
b250ZW50cykKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpw
YWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBSZWdpb24mIC8qIG9jY2x1ZGVkU2NyZWVuU3BhY2Ug
Ki8pCiB7CiAgICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0
ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5kZXggZDcxMjkyNDUxYzM1NTVlYWYw
YzE2Y2Y5ZjJjM2YzOTViZTA3NTMwNC4uYWI1YzFiMjdiMmM3NWE3NWFlMzQzNzkzY2E1Mzg3OWYy
NTUxZGQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdlTGF5ZXJUZXh0
dXJlVXBkYXRlcjsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIG9u
bHkgYW4gSW1hZ2UgZWxlbWVudC4KIGNsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBU
aWxlZExheWVyQ2hyb21pdW0gewpAQCAtNTMsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SW1hZ2VMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRT
Y3JlZW5TcGFjZSk7CiAgICAgdmlydHVhbCBib29sIG5lZWRzQ29udGVudHNTY2FsZSgpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAppbmRleCBkZTVjNzAyNWZhNjRlZGU4NDE3YWMzNjViMTk4YzU2N2UyY2RmYWQ2Li5iMmY3
MDE0MWI0N2E1ZDQ3YjQ0MDI5MzgwZDM4Y2IzZGMzYzViMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgorI2luY2x1ZGUgIlJlZ2lvbi5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTQ2OSw2ICs0NzAs
MzUgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IGNvbnRlbnRz
U2NhbGUpCiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4
IExheWVyQ2hyb21pdW06OmNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sK
KyAgICBJbnRTaXplIGJvdW5kc0luTGF5ZXJTcGFjZSA9IGJvdW5kcygpOworICAgIEludFNpemUg
Ym91bmRzSW5Db250ZW50U3BhY2UgPSBjb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworCisgICAgLy8g
U2NhbGUgZnJvbSBjb250ZW50IHNwYWNlIHRvIGxheWVyIHNwYWNlCisgICAgdHJhbnNmb3JtLnNj
YWxlTm9uVW5pZm9ybShib3VuZHNJbkxheWVyU3BhY2Uud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3VuZHNJbkxheWVyU3BhY2UuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gdHJhbnNm
b3JtOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3Bh
Y2UoUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKQoreworICAgIGlmICghb3BhcXVlKCkgfHwg
ZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFpc1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gY29udGVudFRvU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlTGF5ZXJSZWN0KCkp
KTsKKyAgICBvY2NsdWRlZFNjcmVlblNwYWNlLnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0YXJnZXRS
ZWN0KSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aXNQYWludGVkQXhpc0FsaWduZWRJblNj
cmVlbigpIGNvbnN0Cit7CisgICAgRmxvYXRRdWFkIHF1YWQgPSBjb250ZW50VG9TY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKHZpc2libGVMYXllclJlY3QoKSkpOworICAg
IHJldHVybiBxdWFkLmlzUmVjdGlsaW5lYXIoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpj
cmVhdGVSZW5kZXJTdXJmYWNlKCkKIHsKICAgICBBU1NFUlQoIW1fcmVuZGVyU3VyZmFjZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKaW5kZXggOTQ1ZWU4ZTFjNGM1YjQ1NTk0MzA3YTc2MmNkNjAwYjk2NjVl
MGFhNC4uNzY0ZjczMDE1NWI1NDUzN2NkYTRjNzM4MWIzZmQzYmNiNzk2MDY0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEND
TGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKK2NsYXNzIFJlZ2lvbjsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBs
YXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFz
cy4KQEAgLTE1Myw3ICsxNTQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHR5
cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2
aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0RyYXdhYmxlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3Jl
ZW5TcGFjZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENvbnRlbnRzSWZEaXJ0
eSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJc01hc2soYm9vbCkgeyB9CkBAIC0xODIsOCArMTgzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldENsaXBSZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3QgPSBjbGlw
UmVjdDsgfQogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90YXJn
ZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQorICAgIC8vIFRoaXMgbW92ZXMgZnJvbSBsYXll
ciBzcGFjZSwgd2l0aCBvcmlnaW4gaW4gdGhlIGNlbnRlciB0byB0YXJnZXQgc3BhY2Ugd2l0aCBv
cmlnaW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KICAgICB2b2lk
IHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgeyBt
X2RyYXdUcmFuc2Zvcm0gPSBtYXRyaXg7IH0KKyAgICAvLyBUaGlzIG1vdmVzIGZyb20gbGF5ZXIg
c3BhY2UsIHdpdGggb3JpZ2luIHRoZSB0b3AgbGVmdCB0byBzY3JlZW4gc3BhY2Ugd2l0aCBvcmln
aW4gaW4gdGhlIHRvcCBsZWZ0CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVl
blNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsg
fQogICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkgeyBtX3NjcmVlblNwYWNlVHJhbnNmb3JtID0gbWF0cml4OyB9CiAgICAg
Y29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJh
d2FibGVDb250ZW50UmVjdDsgfQpAQCAtMTkxLDYgKzE5NCwxMSBAQCBwdWJsaWM6CiAgICAgZmxv
YXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY2FsZTsgfQogICAg
IHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgLy8gQWRkcyBh
bnkgb3BhcXVlIHZpc2libGUgcGl4ZWxzIHRvIHRoZSBvY2NsdWRlZCByZWdpb24uCisgICAgdmly
dHVhbCB2b2lkIGFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2UoUmVnaW9uJiBvY2NsdWRlZFNj
cmVlblNwYWNlKTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3Mg
ZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRlc2NlbmRhbnREcmF3
c0NvbnRlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKSB7IH0KQEAgLTIx
MSw2ICsyMTksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBjb250ZXh0LWRlcGVuZGVudCBy
ZXNvdXJjZXMgc3VjaCBhcyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291
cmNlcygpOwogCisgICAgYm9vbCBpc1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkgY29uc3Q7
CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKICAgICAvLyBUaGlzIGZsYWcgaXMgc2V0
IHdoZW4gbGF5ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaAppbmRleCA0ZTE4MjJiMzE4YzVlMWQyNTdhOTA4ZTQyYTRkYzI4ODQ2YjVi
MmE2Li5iZjQ5ODhjMjUzNzljZTIzYTQwMTJhODE0NmRiNWE4NjJkMDM5ZjIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAg
ZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAgICAg
dm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBkcmF3T3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0g
ZHJhd09wYWNpdHk7IH0KIAorICAgIC8vIFRoaXMgZ29lcyBmcm9tIGNvbnRlbnQgc3BhY2Ugd2l0
aCB0aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIgb2YgdGhlIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQg
dG8gdGhlIHRhcmdldCBzcGFjZSB3aXRoIHRoZSBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0IG9mIHRo
ZQorICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQuIFBvc2l0aW9uIHRoZSByZWN0IHNvIHRo
YXQgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVyIG9mIGl0IGJlZm9yZSBhcHBseWluZyB0aGlz
IHRyYW5zZm9ybS4KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1Ry
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgeyBtX2Ry
YXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDBiMGM5YmY0ZTc2MWFjY2Y5ZmFhZTQwY2NmZTQyMjRhZDBmZjM1NjAuLjI4
M2FhOGRkMDliYTIzZmQ3NDQzM2FjYTMyYTY3MzUzODgzYzlhMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcApAQCAtNDg4LDYgKzQ4OCwzNSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cmVzZXJ2ZVRleHR1cmVzKCkKICAgICB9CiB9CiAKK3ZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjphZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5T
cGFjZSkKK3sKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgZHJhd09wYWNpdHkoKSAhPSAxIHx8ICFp
c1BhaW50ZWRBeGlzQWxpZ25lZEluU2NyZWVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChvcGFxdWUoKSkgeworICAgICAgICBMYXllckNocm9taXVtOjphZGRTZWxmVG9PY2NsdWRlZFNj
cmVlblNwYWNlKG9jY2x1ZGVkU2NyZWVuU3BhY2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VHJhbnNmb3JtID0gY29udGVudFRvU2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKTsKKworICAgIC8vIEZJWE1FOiBDcmVhdGUvVXNlIGEgRmxvYXRSZWdpb24gZm9y
IHRoZSBvY2NsdWRlZFNjcmVlblNwYWNlLCBpbnN0ZWFkIG9mIGEgUmVnaW9uIGJhc2VkIG9uIGlu
dHMsIHRvIGF2b2lkIHRoaXMgc3RlcCBhbmQgZ2V0IGJldHRlciBhY2N1cmFjeSBiZXR3ZWVuIGxh
eWVycyBpbiB0YXJnZXQgc3BhY2UuCisgICAgUmVnaW9uIHRpbGVSZWdpb247CisgICAgaW50IGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5sYXllclJlY3RUb1RpbGVJbmRp
Y2VzKHZpc2libGVMYXllclJlY3QoKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBm
b3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRp
bGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAodGlsZSkgeworICAgICAgICAgICAg
ICAgIEludFJlY3QgdmlzaWJsZVRpbGVPcGFxdWVSZWN0ID0gaW50ZXJzZWN0aW9uKHZpc2libGVS
ZWN0LCB0aWxlLT5tX29wYXF1ZVJlY3QpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzY3Jl
ZW5SZWN0ID0gY29udGVudFRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdCh2aXNpYmxlVGlsZU9w
YXF1ZVJlY3QpKTsKKyAgICAgICAgICAgICAgICBvY2NsdWRlZFNjcmVlblNwYWNlLnVuaXRlKGVu
Y2xvc2VkSW50UmVjdChzY3JlZW5SZWN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KQogewogICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDE4ZTAyOWMwZGM4N2ZjZTU4YjczNmVhOTg1ZDkzYTRi
YzhkNzI2OGEuLjNjYmJiY2JkN2E0NTI1NDIzNWUzOTU1NTAyMGMzMDM2OGU3MWVjNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CitjbGFzcyBSZWdpb247CiBjbGFz
cyBVcGRhdGFibGVUaWxlOwogCiBjbGFzcyBUaWxlZExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5
ZXJDaHJvbWl1bSB7CkBAIC02Myw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCByZXNlcnZlVGV4dHVyZXMoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRTZWxmVG9PY2NsdWRl
ZFNjcmVlblNwYWNlKFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSk7CisKIHByb3RlY3RlZDoK
ICAgICBUaWxlZExheWVyQ2hyb21pdW0oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKaW5kZXggNjJkNmNlMjMwZmQwZjFiYzZiYWJlMjQ0MDYxNTRmNjc5NmM0ZTFiZC4uNGZmODQz
NGIyMDBjOTJkNDhhMDhiZjkxYzE0YjI3ZjgyMTlkZGFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
SXRlcmF0b3IuaCIKQEAgLTQxMywxMiArNDE0LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpy
ZXNlcnZlVGV4dHVyZXMoKQogfQogCiAvLyBzdGF0aWMKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpw
YWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50
VHlwZSkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNo
cm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50VHlwZSwgY29uc3QgUmVnaW9uJiBvY2NsdWRl
ZFNjcmVlblNwYWNlKQogewogICAgIEFTU0VSVChsYXllcik7CiAgICAgQVNTRVJUKFBhaW50Vmlz
aWJsZSA9PSBwYWludFR5cGUgfHwgUGFpbnRJZGxlID09IHBhaW50VHlwZSk7CiAgICAgaWYgKFBh
aW50VmlzaWJsZSA9PSBwYWludFR5cGUpCi0gICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZE
aXJ0eSgpOworICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVkZWRTY3Jl
ZW5TcGFjZSk7CiAgICAgZWxzZQogICAgICAgICBsYXllci0+aWRsZVBhaW50Q29udGVudHNJZkRp
cnR5KCk7CiB9CkBAIC00MjksMzUgKzQzMCw5MyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwog
ICAgIC8vIGluIGNvZGUsIHdlIGFscmVhZHkga25vdyB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyB3
aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIgc3VyZmFjZSwgc28gdGhlCiAgICAgLy8gbWFz
ayBhbmQgcmVwbGljYSBzaG91bGQgYmUgcGFpbnRlZC4KIAorICAgIC8vIEZJWE1FOiBJZiB0aGUg
c3VyZmFjZSBoYXMgYSByZXBsaWNhLCBpdCBzaG91bGQgYmUgcGFpbnRlZCB3aXRoIG9jY2x1c2lv
biB0aGF0IGV4Y2x1ZGVzIHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlIHN1YnRyZWUuCisgICAg
UmVnaW9uIG5vT2NjbHVzaW9uOworCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xh
eWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0Vmlz
aWJsZUxheWVyUmVjdChJbnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29u
dGVudEJvdW5kcygpKSk7Ci0gICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZh
Y2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSk7CisgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIHBhaW50VHlwZSwgbm9PY2Ns
dXNpb24pOwogICAgIH0KIAogICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IHJlbmRl
clN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCk7CiAgICAgaWYgKHJlcGxpY2FMYXllcikgewot
ICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHBhaW50VHlwZSk7Cisg
ICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlLCBub09j
Y2x1c2lvbik7CiAKICAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsKICAg
ICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91
bmRzKCkpKTsKLSAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+
bWFza0xheWVyKCksIHBhaW50VHlwZSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0
eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUsIG5vT2NjbHVzaW9uKTsKICAg
ICAgICAgfQogICAgIH0KIH0KIAorc3RydWN0IFJlbmRlclN1cmZhY2VSZWdpb24geworICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogc3VyZmFjZTsKKyAgICBSZWdpb24gb2NjbHVkZWRJblNjcmVl
bjsKK307CisKKy8vIEFkZCB0aGUgc3VyZmFjZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayBhbmQg
Y29weSB0aGUgb2NjbHVzaW9uIGZyb20gdGhlIG9sZCB0b3Agb2YgdGhlIHN0YWNrIHRvIHRoZSBu
ZXcuCitzdGF0aWMgdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoVmVjdG9yPFJlbmRlclN1
cmZhY2VSZWdpb24+JiBzdGFjaywgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpCit7
CisgICAgaWYgKHN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBzdGFjay5hcHBlbmQoUmVuZGVy
U3VyZmFjZVJlZ2lvbigpKTsKKyAgICAgICAgc3RhY2subGFzdCgpLnN1cmZhY2UgPSBuZXdUYXJn
ZXQ7CisgICAgfSBlbHNlIGlmIChzdGFjay5sYXN0KCkuc3VyZmFjZSAhPSBuZXdUYXJnZXQpIHsK
KyAgICAgICAgY29uc3QgUmVuZGVyU3VyZmFjZVJlZ2lvbiYgcHJldmlvdXMgPSBzdGFjay5sYXN0
KCk7CisgICAgICAgIHN0YWNrLmFwcGVuZChSZW5kZXJTdXJmYWNlUmVnaW9uKCkpOworICAgICAg
ICBzdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1RhcmdldDsKKyAgICAgICAgc3RhY2subGFzdCgp
Lm9jY2x1ZGVkSW5TY3JlZW4gPSBwcmV2aW91cy5vY2NsdWRlZEluU2NyZWVuOworICAgIH0KK30K
KworLy8gUG9wIHRoZSB0b3Agb2YgdGhlIHN0YWNrIG9mZiwgcHVzaCBvbiB0aGUgbmV3IHN1cmZh
Y2UsIGFuZCBtZXJnZSB0aGUgb2xkIHRvcCdzIG9jY2x1c2lvbiBpbnRvIHRoZSBuZXcgdG9wIHN1
cmZhY2UuCitzdGF0aWMgdm9pZCBsZWF2ZVRhcmdldFJlbmRlclN1cmZhY2UoVmVjdG9yPFJlbmRl
clN1cmZhY2VSZWdpb24+JiBzdGFjaywgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQp
Cit7CisgICAgaW50IGxhc3RJbmRleCA9IHN0YWNrLnNpemUoKSAtIDE7CisgICAgYm9vbCBzdXJm
YWNlV2lsbEJlQXRUb3BBZnRlclBvcCA9IHN0YWNrLnNpemUoKSA+IDEgJiYgc3RhY2tbbGFzdElu
ZGV4IC0gMV0uc3VyZmFjZSA9PSBuZXdUYXJnZXQ7CisKKyAgICBpZiAoc3VyZmFjZVdpbGxCZUF0
VG9wQWZ0ZXJQb3ApIHsKKyAgICAgICAgLy8gTWVyZ2UgdGhlIHRvcCBvZiB0aGUgc3RhY2sgZG93
bi4KKyAgICAgICAgc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVkZWRJblNjcmVlbi51bml0ZShz
dGFja1tsYXN0SW5kZXhdLm9jY2x1ZGVkSW5TY3JlZW4pOworICAgICAgICBzdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgdG9wIG9mIHRoZSBz
dGFjayB3aXRoIHRoZSBuZXcgcHVzaGVkIHN1cmZhY2UuIENvcHkgdGhlIG9jY2x1ZGVkIHJlZ2lv
biB0byB0aGUgdG9wLgorICAgICAgICBzdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1RhcmdldDsK
KyAgICB9Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBQYWludFR5cGUgcGFpbnRUeXBl
KQogewogICAgIC8vIFVzZSBGcm9udFRvQmFjayB0byBhbGxvdyBmb3IgdGVzdGluZyBvY2NsdXNp
b24gYW5kIHBlcmZvcm1pbmcgY3VsbGluZyBkdXJpbmcgdGhlIHRyZWUgd2Fsay4KICAgICB0eXBl
ZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0s
IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBl
OwogCisgICAgLy8gVGhlIHN0YWNrIGhvbGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1YnRyZWVz
IGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBsZWF2ZSBh
IHN1YnRyZWUgd2UgbWF5CisgICAgLy8gYXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90IHRvIHRo
ZSBwYXJ0cyBvdXRzaWRlIHRoZSBzdWJ0cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRpbWUgd2Ug
c2VlIGEgbmV3IHN1YnRyZWUgdW5kZXIgYSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdldCB0byB0
aGUgdG9wIG9mIHRoZSBzdGFjay4gVGhpcyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVwcmVzZW50
aW5nIGl0c2VsZiwgb3IgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4gd2Ugdmlz
aXQgYSB0YXJnZXQgc3VyZmFjZSwgd2UgYXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRyZWUsIHdo
aWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBh
IGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRvIHRoZSBj
dXJyZW50IHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8v
IC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGluZyBzdXJm
YWNlLCB0aGUgY3VycmVudCB0YXJnZXQgd2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRoZSBzdGFj
ayBzaW5jZSB3ZSBqdXN0IGNhbWUgZnJvbSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2UuCisgICAg
Ly8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRo
ZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhl
IHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorICAgIFZlY3RvcjxSZW5kZXJTdXJmYWNlUmVn
aW9uPiB0YXJnZXRTdXJmYWNlU3RhY2s7CisKICAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9
IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
Zm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4o
JnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYg
KGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKworICAgICAgICAgICAgZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHRhcmdldFN1cmZhY2VTdGFjaywgaXQtPnJlbmRlclN1cmZh
Y2UoKSk7CiAgICAgICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSgq
aXQsIHBhaW50VHlwZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHRoZSByZXBsaWNhIGxh
eWVyIHRvIHRoZSBjdXJyZW50IG9jY2x1c2lvbgorCisgICAgICAgICAgICBpZiAoaXQtPm1hc2tM
YXllcigpIHx8IGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkgPCAxKQorICAgICAg
ICAgICAgICAgIHRhcmdldFN1cmZhY2VTdGFjay5sYXN0KCkub2NjbHVkZWRJblNjcmVlbiA9IFJl
Z2lvbigpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKCFpdC0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHBh
aW50Q29udGVudHNJZkRpcnR5KCppdCwgcGFpbnRUeXBlKTsKKworICAgICAgICAgICAgZW50ZXJU
YXJnZXRSZW5kZXJTdXJmYWNlKHRhcmdldFN1cmZhY2VTdGFjaywgaXQtPnRhcmdldFJlbmRlclN1
cmZhY2UoKSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eSgqaXQsIHBhaW50VHlw
ZSwgdGFyZ2V0U3VyZmFjZVN0YWNrLmxhc3QoKS5vY2NsdWRlZEluU2NyZWVuKTsKKyAgICAgICAg
ICAgIGl0LT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKHRhcmdldFN1cmZhY2VTdGFjay5s
YXN0KCkub2NjbHVkZWRJblNjcmVlbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs
ZWF2ZVRhcmdldFJlbmRlclN1cmZhY2UodGFyZ2V0U3VyZmFjZVN0YWNrLCBpdC50YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggODFiNWYyNTA1ZjFiODQ1MGM2ZGFkMTNj
ZjFjNWU4M2MwMWYwODBjYy4uZjU4MjAzZDE1ZWIyMDQ1MDcxYzJlZmE0NDhiYTQwYmYxOWE1NGNh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3Mg
Q0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKIGNsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgUmVnaW9u
OwogY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogCkBAIC0y
MDUsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8TWFuYWdl
ZFRleHR1cmU+ID4gVGV4dHVyZUxpc3Q7CiAKICAgICBlbnVtIFBhaW50VHlwZSB7IFBhaW50Vmlz
aWJsZSwgUGFpbnRJZGxlIH07Ci0gICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHko
TGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50
c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSwgY29uc3QgUmVnaW9uJiBvY2NsdWRl
ZFNjcmVlblNwYWNlKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxp
c3QmLCBQYWludFR5cGUpOwogICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1
cmZhY2UoTGF5ZXJDaHJvbWl1bSosIFBhaW50VHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIu
Y3BwCmluZGV4IGJhOWM2NmU4NzQ5MjA2MjU3NWY1NTBlYjBmNWVlZjM2ZDU1Y2Y0NmEuLmM4YmQ5
YjBmMzYzMjRhZjZlOGE0YmMxZmI1YTI0MDhmZjAzMTQ1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmNwcApAQCAtNzUsMTggKzc1LDYgQEAgc3RhdGljIEludFJlY3QgcmVjdFN1YnRyYWN0UmVn
aW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIHJldHVy
biByZWN0OwogfQogCi1zdGF0aWMgSW50UmVjdCBlbmNsb3NlZEludFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIGZsb2F0IHggPSBjZWlsZihyZWN0LngoKSk7Ci0gICAgZmxvYXQg
eSA9IGNlaWxmKHJlY3QueSgpKTsKLSAgICAvLyBBIHJlY3Qgb2Ygd2lkdGggMCBzaG91bGQgbm90
IGJlY29tZSBhIHJlY3Qgb2Ygd2lkdGggLTEuCi0gICAgZmxvYXQgd2lkdGggPSBtYXg8ZmxvYXQ+
KGZsb29yZihyZWN0Lm1heFgoKSkgLSB4LCAwKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBtYXg8Zmxv
YXQ+KGZsb29yZihyZWN0Lm1heFkoKSkgLSB5LCAwKTsKLQotICAgIHJldHVybiBJbnRSZWN0KGNs
YW1wVG9JbnRlZ2VyKHgpLCBjbGFtcFRvSW50ZWdlcih5KSwKLSAgICAgICAgICAgICAgICAgICBj
bGFtcFRvSW50ZWdlcih3aWR0aCksIGNsYW1wVG9JbnRlZ2VyKGhlaWdodCkpOwotfQotCiB2b2lk
IENDUXVhZEN1bGxlcjo6Y3VsbE9jY2x1ZGVkUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QpCiB7
CiAgICAgaWYgKCFxdWFkTGlzdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBkMmUx
Y2ZlZjkzZTI4MjE2NmRhODUxMjU2Yzk1YzBlNjUxMmM2OWJhLi5iMWZhNzI5MTg0MDFlMzI0MGU0
MWQxM2QyZTBjMjdkMGM1NmFkN2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KQEAgLTM1LDYgKzM2LDEy
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNU
KGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9FUShh
LnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAor
ICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKKwogbmFtZXNwYWNlIHsKIAog
dm9pZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVz
ZXJ2ZXMzRCkKQEAgLTU5NSw0ICs2MDIsMTc0IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogLy8gIC0gdGVzdCB0aGUg
b3RoZXIgZnVuY3Rpb25zIGluIENDTGF5ZXJUcmVlSG9zdENvbW1vbgogLy8KIAorVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbikKK3sK
KyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVz
ZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAg
IHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMw
KSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1
ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxp
c3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTog
d2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIEND
TGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1
ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uo
b2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBv
Y2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNp
emUoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2Vs
ZlRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0
IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFJlZ2lvbiBvY2NsdWRl
ZDsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBw
YXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVy
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVy
VHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRl
KDkwKTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworCisg
ICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNp
YWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4
IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2Vs
ZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikK
K3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5n
IHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OworCisgICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKKworICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVy
IHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUg
dG8gZml4IGl0IGhlcmUsIHRvby4KKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwor
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+
YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCg1MCwgNTAsIDUwLCA1MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVk
U3VyZmFjZSkKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMg
YXJlIGJlaW5nIHVzZWQuCisgICAgUmVnaW9uIG9jY2x1ZGVkOworICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRD
aGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsK
KyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNm
b3JtLnJvdGF0ZSg5MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTAp
OworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKworICAgIGNoaWxkLT5zZXRNYXNr
c1RvQm91bmRzKHRydWUpOworICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhp
cyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwg
d2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCisgICAgcGFyZW50LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7
CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBvY2NsdWRlZC5ib3VuZHMo
KSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAv
KiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb3BhcXVlIHJlY3QgZnJvbSB8bGF5ZXJ8Ogor
ICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfDMwICBWaXNpYmxlIHJlZ2lvbiBvZiB8bGF5
ZXJ8OiAvLy8vLworICAgICAgfCAgICAzMCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHJvdGF0
ZSg5MCkgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8IDMw
ICsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAg
fCAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgMTAwIHwgICAgfCAg
MTAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgPT0+ICAgICB8ICAg
ICB8ICAgICAgICAgICAgICAgfDEwICAgICAgICAgICAgICAgfAorICAgICAgfCAgICB8MTArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgIHwgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICB8CisgICAgICB8ICAgIHwgIHwgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8v
Ly8vLy8vLy8vL3wgICAgIDQyMCAgICAgIHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8v
Ly8vLy8vfDYwICAgICAgICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8v
Ly98ICAgICAgICAgICAgICB8ICB8CisgICAgICArLS0tLXwtLXwtLS0tLS0tLS0tLS0tKyAgICAg
ICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgKy0tfC0tfC0tLS0tLS0tLS0tLS0tLSsg
ICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgMjB8MTB8ICAgICA3MCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCB8NTAwICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
fAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Cisg
ICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAg
ICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDEwfAorICAgICAgICAg
ICArLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAg
ICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0rCisgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgNDkwICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDUwMAorICAgICAqLworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMGNiMjYwNWU4
YTZkM2QzMjJmY2ViMGZjNzNhYTdhZmU2OTQ5MjA5MC4uNDFmZTRmYjY1OWI5NDA1MWM2N2VhYmYz
ZWVhOWMwODQ2NzZlZWFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAj
aW5jbHVkZSAiV2ViS2l0LmgiCkBAIC0xMDA1LDkgKzEwMDYsOSBAQCBwdWJsaWM6CiAgICAgaW50
IHVwZGF0ZUNvdW50KCkgeyByZXR1cm4gbV91cGRhdGVDb3VudDsgfQogICAgIHZvaWQgcmVzZXRV
cGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9IDA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzSWZEaXJ0eSgpCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKICAgICB7Ci0gICAgICAgIENv
bnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkob2NjbHVkZWRTY3JlZW5TcGFj
ZSk7CiAgICAgICAgIG1fcGFpbnRDb250ZW50c0NvdW50Kys7CiAgICAgfQogCkBAIC0xMjI4LDQg
KzEyMjksMjQ0IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0QXRvbWljQ29tbWl0LCBydW5N
dWx0aVRocmVhZCkKICAgICBydW5UZXN0KHRydWUpOwogfQogCisjZGVmaW5lIEVYUEVDVF9FUV9S
RUNUKGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9F
UShhLnkoKSwgYi55KCkpOyBcCisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsg
XAorICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKKworY2xhc3MgVGVzdExh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXN0TGF5ZXJDaHJvbWl1bSgpKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29u
dGVudHNJZkRpcnR5KGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSkKKyAgICB7Cisg
ICAgICAgIG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IG9jY2x1ZGVkU2NyZWVuU3BhY2U7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworICAgIGNvbnN0IFJlZ2lvbiYgb2NjbHVkZWRTY3JlZW5TcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb2NjbHVkZWRTY3JlZW5TcGFjZTsgfQorICAgIHZvaWQgY2xlYXJPY2NsdWRlZFNjcmVl
blNwYWNlKCkgeyBtX29jY2x1ZGVkU2NyZWVuU3BhY2UgPSBSZWdpb24oKTsgfQorCitwcml2YXRl
OgorICAgIFRlc3RMYXllckNocm9taXVtKCkgOiBMYXllckNocm9taXVtKCkgeyB9CisKKyAgICBS
ZWdpb24gbV9vY2NsdWRlZFNjcmVlblNwYWNlOworfTsKKworc3RhdGljIHZvaWQgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhUZXN0TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21p
dW0qIHBhcmVudCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50
U2l6ZSYgYm91bmRzLCBib29sIG9wYXF1ZSkKK3sKKyAgICBsYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKyAgICBpZiAocGFyZW50KQorICAgICAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsK
KyAgICBsYXllci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEFuY2hv
clBvaW50KGFuY2hvcik7CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBs
YXllci0+c2V0Qm91bmRzKGJvdW5kcyk7CisgICAgbGF5ZXItPnNldE9wYXF1ZShvcGFxdWUpOwor
ICAgIGxheWVyLT5jbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UoKTsKK30KKworY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdExheWVyT2NjbHVzaW9uIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3Qg
eworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RMYXllck9jY2x1c2lvbigpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAgICAgICBSZWZQdHI8VGVz
dExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBjaGlsZCA9IFRlc3RMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBjaGlsZDIg
PSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxUZXN0TGF5ZXJD
aHJvbWl1bT4gZ3JhbmRDaGlsZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICAg
ICAgUmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBtYXNrID0gVGVzdExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICAgICAgY2hp
bGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICAgICAgY2hpbGRUcmFuc2Zvcm0u
cm90YXRlKDkwKTsKKyAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTAp
OworCisgICAgICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgICAgIC8v
IFNlZSBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVn
aW9uV2l0aFJvdGF0ZWRTdXJmYWNlIGZvciBhIG5pY2UgdmlzdWFsIG9mIHRoZXNlIGxheWVycyBh
bmQgaG93IHRoZXkgZW5kIHVwCisgICAgICAgIC8vIHBvc2l0aW9uZWQgb24gdGhlIHNjcmVlbi4K
KworICAgICAgICAvLyBUaGUgY2hpbGQgbGF5ZXIgaXMgcm90YXRlZCBhbmQgdGhlIGdyYW5kQ2hp
bGQgaXMgb3BhcXVlLCBidXQgY2xpcHBlZCB0byB0aGUgY2hpbGQgYW5kIHJvb3RMYXllcgorICAg
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
MTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhj
aGlsZC5nZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAg
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxk
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwg
MTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRW
aWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxl
dGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGdyYW5kQ2hpbGQtPm9j
Y2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgZ3Jh
bmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIGNoaWxkLT5vY2NsdWRlZFNj
cmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGNoaWxkLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
bGF5ZXIgaXMgb3BhcXVlLCB0aGVuIGl0IGFkZHMgdG8gdGhlIG9jY2x1c2lvbiBzZWVuIGJ5IHRo
ZSByb290TGF5ZXIuCisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdExh
eWVyLmdldCgpLCAwLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNm
b3JtLCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkLmdldCgpLCBjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgp
LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBF
WFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBj
aGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIHJvb3RMYXllci0+b2Nj
bHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCByb290
TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAg
Ly8gQWRkIGEgc2Vjb25kIGNoaWxkIHRvIHRoZSByb290IGxheWVyIGFuZCB0aGUgcmVnaW9ucyBz
aG91bGQgbWVyZ2UKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5
ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDcwLCAyMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5n
ZXQoKSwgcm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIElu
dFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJv
b3RMYXllcihyb290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0
U2l6ZShyb290TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRh
dGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwor
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENoaWxk
LT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3Bh
Y2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMzAsIDMwLCA3MCwgNzApLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyMCwg
NzAsIDgwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMnUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBNb3ZlIHRoZSBzZWNvbmQgY2hpbGQgdG8gYmUgc3Vy
ZS4KKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCks
IDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVl
KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9v
dExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAw
LCA1MDApLCB0cnVlKTsKKworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihy
b290TGF5ZXIpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShyb290
TGF5ZXItPmJvdW5kcygpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMo
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBncmFuZENoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMw
LCA3MCwgNzApLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAzMCwgOTAsIDcwKSwg
cm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBF
Q1RfRVEoMnUsIHJvb3RMYXllci0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQgbGF5ZXIgaGFzIGEgbWFzayBvbiBpdCwgdGhl
biBpdCBzaG91bGRuJ3QgY29udHJpYnV0ZSB0byBvY2NsdXNpb24gb24gc3R1ZmYgYmVsb3cgaXQK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoY2hpbGQyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgcm9vdExh
eWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAwLCA1
MDApLCB0cnVlKTsKKworICAgICAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2suZ2V0KCkpOwor
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgpLCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMHUsIGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3
MCwgNjApLCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDF1LCBjaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHJvb3RMYXllci0+b2NjbHVkZWRT
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
bGF5ZXIgd2l0aCBhIG1hc2sgaXMgYmVsb3cgY2hpbGQyLCB0aGVuIGNoaWxkMiBzaG91bGQgY29u
dHJpYnV0ZSB0byBvY2NsdXNpb24gb24gZXZlcnl0aGluZywgYW5kIGNoaWxkIHNob3VsZG4ndCBj
b250cmlidXRlIHRvIHRoZSByb290TGF5ZXIKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXllci5nZXQo
KSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1
ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCBy
b290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBjaGlsZC0+
c2V0TWFza0xheWVyKG1hc2suZ2V0KCkpOworCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3Bv
cnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7
CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2Ns
dWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBncmFuZENoaWxkLT5vY2NsdWRl
ZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDEwLCA0MCwgOTAsIDYwKSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcw
LCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBsYXllciBoYXMgYSBub24t
b3BhcXVlIGRyYXdPcGFjaXR5LCB0aGVuIGl0IHNob3VsZG4ndCBjb250cmlidXRlIHRvIG9jY2x1
c2lvbiBvbiBzdHVmZiBiZWxvdyBpdAorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKHJvb3RMYXllci5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIHJvb3RMYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDcwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGNoaWxkLmdldCgpLCByb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsK
KyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBj
aGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgICAgIGNoaWxkLT5zZXRN
YXNrTGF5ZXIoMCk7CisgICAgICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNSk7CisKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdExheWVyLT5ib3VuZHMoKSk7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCks
IGdyYW5kQ2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgwdSwgZ3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIGNo
aWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MXUsIGNoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIGNoaWxkMi0+b2NjbHVkZWRTY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MTAsIDcwLCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExheWVyLT5vY2NsdWRlZFNjcmVlblNwYWNl
KCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIElmIHRoZSBjaGlsZCBsYXllciB3aXRo
IG5vbi1vcGFxdWUgZHJhd09wYWNpdHkgaXMgYmVsb3cgY2hpbGQyLCB0aGVuIGNoaWxkMiBzaG91
bGQgY29udHJpYnV0ZSB0byBvY2NsdXNpb24gb24gZXZlcnl0aGluZywgYW5kIGNoaWxkIHNob3Vs
ZG4ndCBjb250cmlidXRlIHRvIHRoZSByb290TGF5ZXIKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhyb290TGF5ZXIuZ2V0KCksIDAsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7Cisg
ICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIHJvb3RMYXll
ci5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAs
IDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAw
KSwgdHJ1ZSk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdl
dCgpLCByb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDEwLCA3MCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgICAgICBj
aGlsZC0+c2V0TWFza0xheWVyKDApOworICAgICAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOwor
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RMYXllci0+Ym91bmRzKCkp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgpLCBjaGlsZDItPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgwdSwgY2hpbGQyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA3MCwgOTAsIDMwKSwg
Z3JhbmRDaGlsZC0+b2NjbHVkZWRTY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDF1LCBncmFuZENoaWxkLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MCwgOTAsIDYwKSwgY2hp
bGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgy
dSwgY2hpbGQtPm9jY2x1ZGVkU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDcwLCA5MCwgMzApLCByb290TGF5ZXItPm9jY2x1
ZGVkU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgcm9vdExh
eWVyLT5vY2NsdWRlZFNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8v
IEtpbGwgdGhlIGxheWVyVHJlZUhvc3QgaW1tZWRpYXRlbHkuCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0Um9vdExheWVyKDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsK
KworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVz
dCgpCisgICAgeworICAgIH0KK307CisKK1NJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihD
Q0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJPY2NsdXNpb24pCisKIH0gLy8gbmFtZXNwYWNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1
bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LmNwcAppbmRleCBmMGI1YzQxMWI2NTZhZWRlNzU5NTcxMGU0ZDhjZmQ3ZDI0ZGI1
MzNjLi4xZGYyN2MwMTExOWIyNjU3ZTgyZTJhMDc5N2IxYzAxYjUwZDMwNWViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9t
aXVtVGVzdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDQ1NjaGVkdWxlclRlc3RD
b21tb24uaCIKICNpbmNsdWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtMTM4LDcgKzEzOSw4IEBA
IHByb3RlY3RlZDoKIAogICAgICAgICBjYW52YXMtPmNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgICAg
IEVYUEVDVF9UUlVFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOwotICAgICAgICBjYW52YXMtPnBh
aW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgICAgIFJlZ2lvbiBvY2NsdWRlZFNjcmVlblNwYWNl
OworICAgICAgICBjYW52YXMtPnBhaW50Q29udGVudHNJZkRpcnR5KG9jY2x1ZGVkU2NyZWVuU3Bh
Y2UpOwogICAgICAgICBFWFBFQ1RfRkFMU0UoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBzY29wZWRJbXBsVGhy
ZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVy
Q2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXll
ckNocm9taXVtVGVzdC5jcHAKaW5kZXggYjg1MGY4MjQxY2MwODAxNDEzOGUzODA4YzA2MTRjYTYx
MDRlNjMyMS4uYjAzNTBkYjQ5NWZiNTYyYjM1ODE0MDg3ZWY2NDEwZDc2MTk1YmE3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29t
bW9uLmgiCiAjaW5jbHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJj
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiIC8vIEZvciBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQK
QEAgLTM5LDYgKzQwLDEyIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVz
cGFjZSBXVEY7CiAKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9F
UShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBF
WFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0
KCksIGIuaGVpZ2h0KCkpOworCiBuYW1lc3BhY2UgewogCiBjbGFzcyBGYWtlVGV4dHVyZUFsbG9j
YXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKQEAgLTcwLDE3ICs3NywyMCBAQCBwdWJs
aWM6CiAgICAgaW50IHByZXBhcmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlcGFyZUNvdW50
OyB9CiAgICAgdm9pZCBjbGVhclByZXBhcmVDb3VudCgpIHsgbV9wcmVwYXJlQ291bnQgPSAwOyB9
CiAKKyAgICB2b2lkIHNldE9wYXF1ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBvcGFxdWVQYWlu
dFJlY3QpIHsgbV9vcGFxdWVQYWludFJlY3QgPSBvcGFxdWVQYWludFJlY3Q7IH0KKwogICAgIC8v
IExhc3QgcmVjdCBwYXNzZWQgdG8gcHJlcGFyZVRvVXBkYXRlKCkuCiAgICAgY29uc3QgSW50UmVj
dCYgbGFzdFVwZGF0ZVJlY3QoKSAgY29uc3QgeyByZXR1cm4gbV9sYXN0VXBkYXRlUmVjdDsgfQog
CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNy
ZWF0ZVRleHR1cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUZXh0dXJlKE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsgfQogICAgIHZpcnR1
YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSkgeyByZXR1
cm4gU2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9V
cGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmLCBpbnQsIGZs
b2F0LCBJbnRSZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGludCwgZmxvYXQsIEludFJlY3Qq
IHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogCiBwcml2YXRlOgogICAgIGludCBtX3ByZXBhcmVDb3Vu
dDsKICAgICBJbnRSZWN0IG1fcmVjdFRvSW52YWxpZGF0ZTsKICAgICBJbnRSZWN0IG1fbGFzdFVw
ZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX29wYXF1ZVBhaW50UmVjdDsKICAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKIH07CiAKQEAgLTEzOSw3ICsxNDksNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzSWZEaXJ0eSgpCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5
KGNvbnN0IFJlZ2lvbiYgLyogb2NjbHVkZWRTY3JlZW5TcGFjZSAqLykKICAgICB7CiAgICAgICAg
IHByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlTGF5ZXJSZWN0KCkpOwogICAgIH0KQEAgLTE4Nyw3ICsx
OTcsNyBAQCB2b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0CiAgICAgICAgIG1fcmVjdFRvSW52YWxpZGF0
ZSA9IEludFJlY3QoKTsKICAgICAgICAgbV9sYXllciA9IDA7CiAgICAgfQotICAgICpyZXN1bHRp
bmdPcGFxdWVSZWN0ID0gSW50UmVjdCgpOworICAgICpyZXN1bHRpbmdPcGFxdWVSZWN0ID0gbV9v
cGFxdWVQYWludFJlY3Q7CiB9CiAKIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERp
cnR5VGlsZXMpCkBAIC00NjAsNCArNDcwLDk4IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBsYXllckFkZHNTZWxmVG9P
Y2NsdWRlZFJlZ2lvbikKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEw
MjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisKKyAg
ICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRo
ZW4gcGFpbnRzIHR3byB0aWxlcyBpbiB2YXJpb3VzIHdheXMuCisKKyAgICBSZWdpb24gb2NjbHVk
ZWQ7CisgICAgSW50UmVjdCBjb250ZW50Qm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDIwMCk7
CisgICAgSW50UmVjdCB2aXNpYmxlQm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDE1MCk7CisK
KyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMuc2l6ZSgpKTsKKyAgICBsYXllci0+
c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlQm91bmRzKTsKKyAgICBsYXllci0+c2V0RHJhd09w
YWNpdHkoMSk7CisKKyAgICAvLyBUaGUgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gaXMgdmVyaWZpZWQg
aW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdHMKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBz
Y3JlZW5TcGFjZVRyYW5zZm9ybTsKKyAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0o
c2NyZWVuU3BhY2VUcmFuc2Zvcm0pOworCisgICAgLy8gSWYgdGhlIGxheWVyIGlzIG9wYXF1ZSB0
aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIGJlIHRoZSB3aG9sZSBsYXllcidzIHZpc2li
bGUgcmVnaW9uLgorICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7CisgICAgbGF5ZXItPmludmFs
aWRhdGVSZWN0KGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29u
dGVudEJvdW5kcyk7CisKKyAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOworICAgIGxheWVyLT5hZGRT
ZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKKyAgICBFWFBFQ1RfRVFfUkVDVCh2
aXNpYmxlQm91bmRzLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2Ns
dWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgbm90IG9wYXF1
ZSB0aGVuIHRoZSBvY2NsdWRlZCByZWdpb24gc2hvdWxkIGJlIGVtcHR5LgorICAgIGxheWVyLT5z
ZXRPcGFxdWUoZmFsc2UpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50Qm91bmRz
KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisgICAgb2Nj
bHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFj
ZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdWRlZC5ib3Vu
ZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAg
ICAvLyBJZiB0aGUgbGF5ZXIgcGFpbnRzIG9wYXF1ZSBjb250ZW50LCB0aGVuIHRoZSBvY2NsdWRl
ZCByZWdpb24gc2hvdWxkIG1hdGNoIHRoZSB2aXNpYmxlIG9wYXF1ZSBjb250ZW50LgorICAgIElu
dFJlY3Qgb3BhcXVlUGFpbnRSZWN0ID0gSW50UmVjdCgxMCwgMTAsIDkwLCAxOTApOworICAgIGxh
eWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3Qob3BhcXVl
UGFpbnRSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudEJvdW5kcyk7Cisg
ICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVk
ID0gUmVnaW9uKCk7CisgICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2Nj
bHVkZWQpOworICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3Qs
IHZpc2libGVCb3VuZHMpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBJZiB3ZSBwYWludCBhZ2FpbiB3aXRo
b3V0IGludmFsaWRhdGluZywgdGhlIHNhbWUgc3R1ZmYgc2hvdWxkIGJlIG9jY2x1ZGVkLgorICAg
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50
UmVjdCgpKTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRCb3VuZHMpOworCisg
ICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKKyAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRTY3Jl
ZW5TcGFjZShvY2NsdWRlZCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9uKG9wYXF1
ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9jY2x1ZGVkLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIElmIHRoZSBsYXll
ciBpcyB0cmFuc2Zvcm1lZCB0aGVuIHRoZSByZXN1bHRpbmcgb2NjbHVkZWQgYXJlYSBuZWVkcyB0
byBiZSB0cmFuc2Zvcm1lZCB0byBpdHMgdGFyZ2V0IHNwYWNlLgorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGNvbnRlbnRCb3VuZHMu
d2lkdGgoKSAvIDIuMCwgY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgdHJhbnNm
b3JtLnJvdGF0ZSg5MCk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53
aWR0aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZSgxMCwgMTApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0
ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAy
LjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtICo9IHRyYW5zZm9ybTsKKyAgICBzY3JlZW5T
cGFjZVRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNv
bnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGxheWVyLT5zZXRTY3JlZW5TcGFjZVRy
YW5zZm9ybShzY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0
ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5ZXIt
PmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIEVYUEVDVF9FUV9S
RUNUKHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFJlY3QoaW50ZXJzZWN0aW9uKG9wYXF1ZVBhaW50
UmVjdCwgdmlzaWJsZUJvdW5kcykpLCBvY2NsdWRlZC5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBCdXQgYSBub24tYXhpcy1h
bGlnbmVkIHRyYW5zZm9ybSBkb2VzIG5vdCBnZXQgY29uc2lkZXJlZCBmb3Igb2NjbHVzaW9uLgor
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCBjb250
ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKyAgICB0cmFuc2Zvcm0ucm90YXRlKDUpOworICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRl
bnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5z
bGF0ZShjb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkg
LyAyLjApOworICAgIHNjcmVlblNwYWNlVHJhbnNmb3JtICo9IHRyYW5zZm9ybTsKKyAgICBzY3Jl
ZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwg
LWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworICAgIGxheWVyLT5zZXRTY3JlZW5TcGFj
ZVRyYW5zZm9ybShzY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnByZXBhcmVUb1Vw
ZGF0ZShjb250ZW50Qm91bmRzKTsKKworICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7CisgICAgbGF5
ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOworICAgIC8vIEZJWE1F
OiBJZiB3ZSBmaW5kIGFuIG9wYXF1ZSByZWN0IGNvbnRhaW5lZCBpbiB0aGUgcm90YXRlZCBub24t
YXhpcy1hbGlnbmVkIHJlY3QsIHRoZW4KKyAgICAvLyB0aGlzIHdvbid0IGJlIGFuIGVtcHR5IHJl
c3VsdC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KCksIG9jY2x1ZGVkLmJvdW5kcygpKTsK
KyAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>