<?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>94165</bug_id>
          
          <creation_ts>2012-08-15 18:10:18 -0700</creation_ts>
          <short_desc>[chromium] Simplify updateContentRect, removing rect parameter, refactor unit tests.</short_desc>
          <delta_ts>2012-08-22 12:49:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Penner">epenner</reporter>
          <assigned_to name="Eric Penner">epenner</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>696582</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-15 18:10:18 -0700</bug_when>
    <thetext>[chromium] Simplify updateContentRect, removing rect parameter, refactor unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696585</commentid>
    <comment_count>1</comment_count>
      <attachid>158677</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-15 18:12:03 -0700</bug_when>
    <thetext>Created attachment 158677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696587</commentid>
    <comment_count>2</comment_count>
      <attachid>158677</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-15 18:19:35 -0700</bug_when>
    <thetext>Comment on attachment 158677
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:-104
&gt; -    if (drawsContent())

This is the only material change in this CL. Unfortunately this comment says the &apos;what&apos; but not the &apos;why&apos;.
I assume it still wants to reset m_skipsDraw and m_failedPaint flags but do nothing else, so I moved those into resetUpdateState().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696625</commentid>
    <comment_count>3</comment_count>
      <attachid>158677</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-15 19:05:03 -0700</bug_when>
    <thetext>Comment on attachment 158677
Patch

Not much to this one. If you are okay with moving the reset of skipsDraw/failedPaint flags, and the early return on !drawsContent() then this is ready to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697214</commentid>
    <comment_count>4</comment_count>
      <attachid>158677</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-16 09:36:42 -0700</bug_when>
    <thetext>Comment on attachment 158677
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:-104
&gt;&gt; -    if (drawsContent())
&gt; 
&gt; This is the only material change in this CL. Unfortunately this comment says the &apos;what&apos; but not the &apos;why&apos;.
&gt; I assume it still wants to reset m_skipsDraw and m_failedPaint flags but do nothing else, so I moved those into resetUpdateState().

What about the call to updateBounds()? Do we want to call that for a non-drawsContent layer still?

If you want to do this, personally I&apos;d feel better doing the early out here in another CL so it&apos;s easy to bisect and revert without losing this change, if we need to.

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:316
&gt; +                            IntRect(0, 0, 100, 200)); // Visible
&gt;  
&gt; -    // We should only have the first tile since the other tile was invalidated but not painted.
&gt; +    // We should have both tiles on the impl side.
&gt;      EXPECT_TRUE(layerImpl-&gt;hasTileAt(0, 0));
&gt; -    EXPECT_FALSE(layerImpl-&gt;hasTileAt(0, 1));
&gt; +    EXPECT_TRUE(layerImpl-&gt;hasTileAt(0, 1));

Could this be 0,0,100,100 as the visible rect for the update, so then the expectations won&apos;t change?

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:329
&gt; +    bool needsUpdate = UpdateAndPush(layer.get(), layerImpl.get(),
&gt; +                                     IntSize(500, 500), // Bounds
&gt; +                                     IntRect(200, 200, 100, 100)); // Visible

The comment above says it invalidates and paints, but this doesn&apos;t call the InvalidateUpdateAndPush method. They are invalid since they are new already right? Maybe just update the comment?

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:-354
&gt;      // We should only have the first tile from layer2 since it failed to idle update.
&gt;      EXPECT_TRUE(layerImpl2-&gt;hasTileAt(0, 0));
&gt;      EXPECT_TRUE(layerImpl2-&gt;hasTextureIdForTileAt(0, 0));
&gt; -    EXPECT_FALSE(layerImpl2-&gt;hasTileAt(0, 1));
&gt; -    EXPECT_FALSE(layerImpl2-&gt;hasTileAt(0, 2));

This layer used to get a single tile, now I see it expecting 2 tiles, though the comment contradicts. What happened here?

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:435
&gt; +    EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload());

Nice addition.

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:600
&gt; -
&gt; +        

new whitespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697342</commentid>
    <comment_count>5</comment_count>
      <attachid>158677</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-16 12:10:21 -0700</bug_when>
    <thetext>Comment on attachment 158677
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:-104
&gt;&gt;&gt; -    if (drawsContent())
&gt;&gt; 
&gt;&gt; This is the only material change in this CL. Unfortunately this comment says the &apos;what&apos; but not the &apos;why&apos;.
&gt;&gt; I assume it still wants to reset m_skipsDraw and m_failedPaint flags but do nothing else, so I moved those into resetUpdateState().
&gt; 
&gt; What about the call to updateBounds()? Do we want to call that for a non-drawsContent layer still?
&gt; 
&gt; If you want to do this, personally I&apos;d feel better doing the early out here in another CL so it&apos;s easy to bisect and revert without losing this change, if we need to.

Do you know why this might have been done in the first place? Adding updateBounds can&apos;t hurt, but it would be great to know exactly why the empty rect was passed. That would still pre-paint, for example, which seems like a bug. On second though, I can move this early out condition into updateContent(). No reason that it shouldn&apos;t be the same for all derived classes.

Regarding  CL, if someone were to revert that CL after this CL lands, updateContentRect will not have the ability to pass the empty rect, and so the revert wouldn&apos;t restore the old behavior. So I think it&apos;s better to keep it in here.

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:316
&gt;&gt; +    EXPECT_TRUE(layerImpl-&gt;hasTileAt(0, 1));
&gt; 
&gt; Could this be 0,0,100,100 as the visible rect for the update, so then the expectations won&apos;t change?

Sounds good.

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:329
&gt;&gt; +                                     IntRect(200, 200, 100, 100)); // Visible
&gt; 
&gt; The comment above says it invalidates and paints, but this doesn&apos;t call the InvalidateUpdateAndPush method. They are invalid since they are new already right? Maybe just update the comment?

Sounds good.

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:-354
&gt;&gt; -    EXPECT_FALSE(layerImpl2-&gt;hasTileAt(0, 2));
&gt; 
&gt; This layer used to get a single tile, now I see it expecting 2 tiles, though the comment contradicts. What happened here?

I think this was a throwback to when there was different memory limits for visible tiles, and the original code/comment is wrong. See above &quot;layer1 exhausts most texture memory, leaving room for 2 more tiles from layer2&quot;.

The old code was just lucky to work because it only did one pre-paint pass without checking needsIdlePaint. The new code will fail when it tries the paint the last tile.

I&apos;ll fix the last comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697425</commentid>
    <comment_count>6</comment_count>
      <attachid>158677</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-16 13:17:32 -0700</bug_when>
    <thetext>Comment on attachment 158677
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:-104
&gt;&gt;&gt;&gt; -    if (drawsContent())
&gt;&gt;&gt; 
&gt;&gt;&gt; This is the only material change in this CL. Unfortunately this comment says the &apos;what&apos; but not the &apos;why&apos;.
&gt;&gt;&gt; I assume it still wants to reset m_skipsDraw and m_failedPaint flags but do nothing else, so I moved those into resetUpdateState().
&gt;&gt; 
&gt;&gt; What about the call to updateBounds()? Do we want to call that for a non-drawsContent layer still?
&gt;&gt; 
&gt;&gt; If you want to do this, personally I&apos;d feel better doing the early out here in another CL so it&apos;s easy to bisect and revert without losing this change, if we need to.
&gt; 
&gt; Do you know why this might have been done in the first place? Adding updateBounds can&apos;t hurt, but it would be great to know exactly why the empty rect was passed. That would still pre-paint, for example, which seems like a bug. On second though, I can move this early out condition into updateContent(). No reason that it shouldn&apos;t be the same for all derived classes.
&gt; 
&gt; Regarding  CL, if someone were to revert that CL after this CL lands, updateContentRect will not have the ability to pass the empty rect, and so the revert wouldn&apos;t restore the old behavior. So I think it&apos;s better to keep it in here.

What I mean to say is that we could call updateContent() always here, as we used to. And early out within as before, based on visibleContentRect(). Then move the early-out here in another CL.

But I like the point about all derived classes, which sounds like exactly the same solution. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697534</commentid>
    <comment_count>7</comment_count>
      <attachid>158907</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-16 14:43:18 -0700</bug_when>
    <thetext>Created attachment 158907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697539</commentid>
    <comment_count>8</comment_count>
      <attachid>158677</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-16 14:46:42 -0700</bug_when>
    <thetext>Comment on attachment 158677
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:-104
&gt;&gt;&gt;&gt;&gt; -    if (drawsContent())
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This is the only material change in this CL. Unfortunately this comment says the &apos;what&apos; but not the &apos;why&apos;.
&gt;&gt;&gt;&gt; I assume it still wants to reset m_skipsDraw and m_failedPaint flags but do nothing else, so I moved those into resetUpdateState().
&gt;&gt;&gt; 
&gt;&gt;&gt; What about the call to updateBounds()? Do we want to call that for a non-drawsContent layer still?
&gt;&gt;&gt; 
&gt;&gt;&gt; If you want to do this, personally I&apos;d feel better doing the early out here in another CL so it&apos;s easy to bisect and revert without losing this change, if we need to.
&gt;&gt; 
&gt;&gt; Do you know why this might have been done in the first place? Adding updateBounds can&apos;t hurt, but it would be great to know exactly why the empty rect was passed. That would still pre-paint, for example, which seems like a bug. On second though, I can move this early out condition into updateContent(). No reason that it shouldn&apos;t be the same for all derived classes.
&gt;&gt; 
&gt;&gt; Regarding  CL, if someone were to revert that CL after this CL lands, updateContentRect will not have the ability to pass the empty rect, and so the revert wouldn&apos;t restore the old behavior. So I think it&apos;s better to keep it in here.
&gt; 
&gt; What I mean to say is that we could call updateContent() always here, as we used to. And early out within as before, based on visibleContentRect(). Then move the early-out here in another CL.
&gt; 
&gt; But I like the point about all derived classes, which sounds like exactly the same solution. :)

Okay I see, it could keep exactly the same behavior too.

However, looking at it I can&apos;t see how pre-painting an animated layer but nothing else is correct, so I kept it as an early out moved into updateContent().

&gt;&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:316
&gt;&gt;&gt; +    EXPECT_TRUE(layerImpl-&gt;hasTileAt(0, 1));
&gt;&gt; 
&gt;&gt; Could this be 0,0,100,100 as the visible rect for the update, so then the expectations won&apos;t change?
&gt; 
&gt; Sounds good.

done.

&gt;&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:329
&gt;&gt;&gt; +                                     IntRect(200, 200, 100, 100)); // Visible
&gt;&gt; 
&gt;&gt; The comment above says it invalidates and paints, but this doesn&apos;t call the InvalidateUpdateAndPush method. They are invalid since they are new already right? Maybe just update the comment?
&gt; 
&gt; Sounds good.

done.

&gt;&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:-354
&gt;&gt;&gt; -    EXPECT_FALSE(layerImpl2-&gt;hasTileAt(0, 2));
&gt;&gt; 
&gt;&gt; This layer used to get a single tile, now I see it expecting 2 tiles, though the comment contradicts. What happened here?
&gt; 
&gt; I think this was a throwback to when there was different memory limits for visible tiles, and the original code/comment is wrong. See above &quot;layer1 exhausts most texture memory, leaving room for 2 more tiles from layer2&quot;.
&gt; 
&gt; The old code was just lucky to work because it only did one pre-paint pass without checking needsIdlePaint. The new code will fail when it tries the paint the last tile.
&gt; 
&gt; I&apos;ll fix the last comment.

done.

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:600
&gt;&gt; +        
&gt; 
&gt; new whitespace

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701265</commentid>
    <comment_count>9</comment_count>
      <attachid>158907</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-21 16:22:13 -0700</bug_when>
    <thetext>Comment on attachment 158907
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h:86
&gt;      // Prepare data needed to update textures that intersect with contentRect.
&gt; -    void updateContentRect(CCTextureUpdateQueue&amp;, const IntRect&amp; contentRect, const CCOcclusionTracker*, CCRenderingStats&amp;);
&gt; +    void updateContent(CCTextureUpdateQueue&amp;, const CCOcclusionTracker*, CCRenderingStats&amp;);

Comment out of date.  Also, it kind of seems like this function should just be virtual void update(...) OVERRIDE instead of the different function updateContent, since it takes the same parameters and is essentially doing the same thing.  This would let you eliminate FakeTiledLayerChromium::update too.

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:81
&gt; +        , m_textureManager(CCPrioritizedTextureManager::create(60*1024*1024, 1024, CCRenderer::ContentPool))
&gt; +        , m_occlusion(0)

Ooh, nice.  :)

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:98
&gt; +    bool InvalidateUpdateAndPush(FakeTiledLayerChromium* layer1,

I know this reduces total lines of code, but I find this change to be less readable.  There&apos;s a shedload of implicit parameter values and now callsites become so ambiguous that you need to leave &apos;// invalidateRect&apos; and &apos;// visibleRect&apos; comments to make it clear.  There may be some way to clean up repeated code here, but I don&apos;t think this is it.

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:411
&gt; -    // We should only have the first tile from layer2 since it failed to idle update.
&gt; +    // We should only have the first two tiles from layer2 since
&gt; +    // it failed to idle update the last tile.

Why does this change in this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701457</commentid>
    <comment_count>10</comment_count>
      <attachid>158907</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-21 18:32:55 -0700</bug_when>
    <thetext>Comment on attachment 158907
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h:86
&gt;&gt; +    void updateContent(CCTextureUpdateQueue&amp;, const CCOcclusionTracker*, CCRenderingStats&amp;);
&gt; 
&gt; Comment out of date.  Also, it kind of seems like this function should just be virtual void update(...) OVERRIDE instead of the different function updateContent, since it takes the same parameters and is essentially doing the same thing.  This would let you eliminate FakeTiledLayerChromium::update too.

Ahh, didn&apos;t realize it had been simplified to that point already.

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:98
&gt;&gt; +    bool InvalidateUpdateAndPush(FakeTiledLayerChromium* layer1,
&gt; 
&gt; I know this reduces total lines of code, but I find this change to be less readable.  There&apos;s a shedload of implicit parameter values and now callsites become so ambiguous that you need to leave &apos;// invalidateRect&apos; and &apos;// visibleRect&apos; comments to make it clear.  There may be some way to clean up repeated code here, but I don&apos;t think this is it.

Yeah, this is overboard. Would it help if I did the following?
- Move the commit flow (UpdateAndPush) part into it&apos;s own function that just takes the layers as parameters.
- Set the parameters individually, or via setup functions with clear names.

The reason I clumped all of this in here is that the tests are all very similar. They appear to depend on a lot of control flow, but actually in the end they all boil down to data driven input-&gt;output tests once the commit flow is removed, so maybe they can start to be merged into fewer, more data-driven tests.

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:411
&gt;&gt; +    // it failed to idle update the last tile.
&gt; 
&gt; Why does this change in this patch?

I think it was just lucky to work before.

See the comment at the top &quot;layer1 exhausts most texture memory, leaving room for *2* more tiles from layer2, but not all three tiles&quot;. So it was just the lack of pre-painting passes to paint that extra tile, and lack of checking needsIdlePaint() to insure pre-painting was finished.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701996</commentid>
    <comment_count>11</comment_count>
      <attachid>159952</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-22 09:17:51 -0700</bug_when>
    <thetext>Created attachment 159952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702001</commentid>
    <comment_count>12</comment_count>
      <attachid>158907</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-22 09:21:54 -0700</bug_when>
    <thetext>Comment on attachment 158907
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h:86
&gt;&gt;&gt; +    void updateContent(CCTextureUpdateQueue&amp;, const CCOcclusionTracker*, CCRenderingStats&amp;);
&gt;&gt; 
&gt;&gt; Comment out of date.  Also, it kind of seems like this function should just be virtual void update(...) OVERRIDE instead of the different function updateContent, since it takes the same parameters and is essentially doing the same thing.  This would let you eliminate FakeTiledLayerChromium::update too.
&gt; 
&gt; Ahh, didn&apos;t realize it had been simplified to that point already.

Done.

&gt;&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:98
&gt;&gt;&gt; +    bool InvalidateUpdateAndPush(FakeTiledLayerChromium* layer1,
&gt;&gt; 
&gt;&gt; I know this reduces total lines of code, but I find this change to be less readable.  There&apos;s a shedload of implicit parameter values and now callsites become so ambiguous that you need to leave &apos;// invalidateRect&apos; and &apos;// visibleRect&apos; comments to make it clear.  There may be some way to clean up repeated code here, but I don&apos;t think this is it.
&gt; 
&gt; Yeah, this is overboard. Would it help if I did the following?
&gt; - Move the commit flow (UpdateAndPush) part into it&apos;s own function that just takes the layers as parameters.
&gt; - Set the parameters individually, or via setup functions with clear names.
&gt; 
&gt; The reason I clumped all of this in here is that the tests are all very similar. They appear to depend on a lot of control flow, but actually in the end they all boil down to data driven input-&gt;output tests once the commit flow is removed, so maybe they can start to be merged into fewer, more data-driven tests.

Done. Same or even further code reduction without this mess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702061</commentid>
    <comment_count>13</comment_count>
      <attachid>159952</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-22 10:54:07 -0700</bug_when>
    <thetext>Comment on attachment 159952
Patch

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

R=me.

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:98
&gt; +    bool UpdateAndPush(FakeTiledLayerChromium* layer1,

Thanks for changing this.  This makes way more sense to me.

s/UpdateAndPush/updateAndPush/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702117</commentid>
    <comment_count>14</comment_count>
      <attachid>159982</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-22 11:38:32 -0700</bug_when>
    <thetext>Created attachment 159982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702118</commentid>
    <comment_count>15</comment_count>
      <attachid>159982</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-22 11:39:24 -0700</bug_when>
    <thetext>Comment on attachment 159982
Patch

R=me(again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702120</commentid>
    <comment_count>16</comment_count>
      <attachid>159952</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-22 11:40:34 -0700</bug_when>
    <thetext>Comment on attachment 159952
Patch

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

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:98
&gt;&gt; +    bool UpdateAndPush(FakeTiledLayerChromium* layer1,
&gt; 
&gt; Thanks for changing this.  This makes way more sense to me.
&gt; 
&gt; s/UpdateAndPush/updateAndPush/

Oops, done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702121</commentid>
    <comment_count>17</comment_count>
      <attachid>159952</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-22 11:43:12 -0700</bug_when>
    <thetext>Comment on attachment 159952
Patch

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

&gt;&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:98
&gt;&gt;&gt; +    bool UpdateAndPush(FakeTiledLayerChromium* layer1,
&gt;&gt; 
&gt;&gt; Thanks for changing this.  This makes way more sense to me.
&gt;&gt; 
&gt;&gt; s/UpdateAndPush/updateAndPush/
&gt; 
&gt; Oops, done.

I like this lots more too, nice job eric.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702125</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-22 11:45:50 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 159952 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159952&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:98
&gt; &gt;&gt;&gt; +    bool UpdateAndPush(FakeTiledLayerChromium* layer1,
&gt; &gt;&gt; 
&gt; &gt;&gt; Thanks for changing this.  This makes way more sense to me.
&gt; &gt;&gt; 
&gt; &gt;&gt; s/UpdateAndPush/updateAndPush/
&gt; &gt; 
&gt; &gt; Oops, done.
&gt; 
&gt; I like this lots more too, nice job eric.

It started reasonable but grew to be a big mess by the time I was done changing several tests! Thanks for the wake-up call on that, much better now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702231</commentid>
    <comment_count>19</comment_count>
      <attachid>159982</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 12:49:40 -0700</bug_when>
    <thetext>Comment on attachment 159982
Patch

Clearing flags on attachment: 159982

Committed r126340: &lt;http://trac.webkit.org/changeset/126340&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702232</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 12:49:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158677</attachid>
            <date>2012-08-15 18:12:03 -0700</date>
            <delta_ts>2012-08-22 09:17:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94165-20120815181128.patch</filename>
            <type>text/plain</type>
            <size>83819</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1Njg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzAyNTFhYmExZDUxMWRh
NDFmOTE4ZWFlMjllNzkxOWY2MThlZWQ2OC4uZDU2ZTQxZWU3NTAwNTc3Mzc4NGU5ZGY1NmViYmVi
ZTQ4NzAwZGQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA4LTE1ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNpbXBs
aWZ5IHVwZGF0ZUNvbnRlbnRSZWN0LCByZW1vdmluZyByZWN0IHBhcmFtZXRlciwgcmVmYWN0b3Ig
dW5pdCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIHZpc2libGUgcmVjdCBwYXJhbWV0ZXIgZnJvbSBUaWxlZExheWVyQ2hyb21pdW0g
ZnVuY3Rpb25zLiBQYXNzaW5nIGEKKyAgICAgICAgcmVjdCB0aGF0IGlzIG5vdCB0aGUgdmlzaWJs
ZSByZWN0IHdvdWxkbid0IG1ha2Ugc2Vuc2UsIGFuZCBzb29uIHdlIG1pZ2h0CisgICAgICAgIG5l
ZWQgZnVydGhlciB2aXNpYmlsaXR5IGluZm9ybWF0aW9uLgorCisgICAgICAgIEluIHJlZmFjdG9y
aW5nIHRoZSB1bml0IHRlc3RzLCBJIHJlbW92ZWQgdGV4dHVyZSBtYW5hZ2VyIGZyb20gYWxsIHRl
c3RzCisgICAgICAgIGFuZCBwdXQgaXQgaW4gdGhlIHRlc3QgY2xhc3MuIEkgYWxzbyBtYWRlIHNv
bWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gCisgICAgICAgIHNpbXVsYXRlIHRoZSBjb21taXQgZmxv
dyBhbmQgcmVtb3ZlIHRvbnMgb2YgYm9pbGVycGxhdGUgY29kZS4gSSByZWZhY3RvcmVkCisgICAg
ICAgIGFib3V0IGhhbGYgdGhlIHVuaXQgdGVzdHMgdG8gdXNlIHRoZSB1dGlsaXR5IGZ1bmN0aW9u
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nLCByZWZhY3RvcmVkIHRlc3RzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6bmVlZE1vcmVVcGRhdGVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNo
cm9taXVtOjpyZXNldFVwZGF0ZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06Om5lZWRzSWRsZVBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJv
bWl1bTo6aWRsZVBhaW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgIChUaWxlZExheWVyQ2hyb21pdW0pOgor
CiAyMDEyLTA4LTE1ICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR3RrXSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoKSBmYWlscyB0byBwcm92aWRl
IHRoZSBjb3JyZWN0IGxpbmUgZm9yIHBhcmFncmFwaHMgaW4gbGlzdCBpdGVtcyB3aG9zZSB0ZXh0
IHdyYXBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGExYjhlZWE3MzMzNjAzYWViN2Rj
OTViZDk1Yzk5MjVjNmEzMmNjNDMuLjE4OTkzNWYzZjdmNWI0YTIyOTJiZDA4NDA0OGE3NTI1YjQ3
MDUyOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTIt
MDgtMTUgIEVyaWMgUGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJv
bWl1bV0gU2ltcGxpZnkgdXBkYXRlQ29udGVudFJlY3QsIHJlbW92aW5nIHJlY3QgcGFyYW1ldGVy
LCByZWZhY3RvciB1bml0IHRlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTQxNjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbiByZWZhY3RvcmluZyB0aGUgdW5pdCB0ZXN0cywgSSByZW1vdmVkIHRl
eHR1cmUgbWFuYWdlciBmcm9tIGFsbCB0ZXN0cworICAgICAgICBhbmQgcHV0IGl0IGluIHRoZSB0
ZXN0IGNsYXNzLiBJIGFsc28gbWFkZSBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHRvCisgICAgICAg
IHNpbXVsYXRlIHRoZSBjb21taXQgZmxvdyBhbmQgcmVtb3ZlIHRvbnMgb2YgYm9pbGVycGxhdGUg
Y29kZS4gSSByZWZhY3RvcmVkCisgICAgICAgIGFib3V0IGhhbGYgdGhlIHVuaXQgdGVzdHMgdG8g
dXNlIHRoZSB1dGlsaXR5IGZ1bmN0aW9ucy4gCisKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVGlsZWRMYXllckNo
cm9taXVtOjp1cGRhdGUpOgorICAgICAgICAqIHRlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24u
aDoKKyAgICAgICAgKEZha2VUaWxlZExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHRlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA4LTE1ICBBbm5hIENhdmVuZGVyICA8
YW5uYWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgdGhlIHRpbWVzdGFtcE9mZnNldCBh
dHRyaWJ1dGUgdG8gU291cmNlQnVmZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDFmOWFkMjE2ZTkxODNlYjYxZDkxNDYzYjM1ODVjMjU0MGM3ZTJkYjMuLjMyZDBk
OTI0MmRjMTRhMzZmOTNhNTA1ODYzZjhjZDFmZWFkNDJjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTk2LDE1ICs5Niw5IEBAIHZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiBw
cmlvCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGUoQ0NUZXh0dXJlVXBkYXRlUXVl
dWUmIHF1ZXVlLCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqIG9jY2x1c2lvbiwgQ0NSZW5kZXJp
bmdTdGF0cyYgc3RhdHMpCiB7CiAgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOwot
Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdDsKLQotICAgIC8vIEFsd2F5cyBjYWxsIHVwZGF0ZUNv
bnRlbnRSZWN0KCkgYnV0IHdpdGggYW4gZW1wdHkgbGF5ZXIgcmVjdGFuZ2xlIHdoZW4KLSAgICAv
LyBsYXllciBkb2Vzbid0IGRyYXcgY29udGVudHMuCi0gICAgaWYgKGRyYXdzQ29udGVudCgpKQot
ICAgICAgICBjb250ZW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdCgpOwotCi0gICAgdXBkYXRl
Q29udGVudFJlY3QocXVldWUsIGNvbnRlbnRSZWN0LCBvY2NsdXNpb24sIHN0YXRzKTsKKyAgICBp
ZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisgICAgdXBkYXRlQ29udGVudChx
dWV1ZSwgb2NjbHVzaW9uLCBzdGF0cyk7CiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0K
IApAQCAtMTEyLDcgKzEwNiw3IEBAIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06Om5lZWRNb3Jl
VXBkYXRlcygpCiB7CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBuZWVkc0lkbGVQYWludCh2aXNpYmxlQ29udGVudFJlY3QoKSk7Cisg
ICAgcmV0dXJuIG5lZWRzSWRsZVBhaW50KCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggNTA3M2QxY2M4YTE2NTU3ZDc0M2ExNjc5ZDBhYzA4MWZhZTRiYTgyYS4u
OGFjNTQ2MDMyYzBjNjliNzUwNzcyOTI5YjA2NWFjODJmNGFmZDAyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OnVwZGF0ZShDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNvbnN0IENDT2NjbHVz
aW9uVHIKICAgICAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICB9CiAKLSAgICB1cGRh
dGVDb250ZW50UmVjdChxdWV1ZSwgdmlzaWJsZUNvbnRlbnRSZWN0KCksIG9jY2x1c2lvbiwgc3Rh
dHMpOworICAgIHVwZGF0ZUNvbnRlbnQocXVldWUsIG9jY2x1c2lvbiwgc3RhdHMpOwogfQogCiB2
b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBhZmJlOGYyMGMzNjlhNTc3MDdjZjYx
NzM1ZmM5YjMwZGNlMmNiODMxLi40ZTZkMWRjYmQzNDFlNDIxYWQ2NjZmZGZiOGJlZjI1NjY2MzNi
MmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU1NSwxMSArNTU1LDYg
QEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVUZXh0dXJlcyhjb25zdCBJbnRS
ZWN0JiBwYWludFJlY3QsIGludCBsZWZ0LAogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzKGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiBw
cmlvcml0eUNhbGMpCi17Ci0gICAgc2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QocHJpb3JpdHlD
YWxjLCB2aXNpYmxlQ29udGVudFJlY3QoKSk7Ci19Ci0KIG5hbWVzcGFjZSB7CiAvLyBUaGlzIHBp
Y2tzIGEgc21hbGwgYW5pbWF0ZWQgbGF5ZXIgdG8gYmUgYW55dGhpbmcgbGVzcyB0aGFuIG9uZSB2
aWV3cG9ydC4gVGhpcwogLy8gaXMgc3BlY2lmaWNhbGx5IGZvciBwYWdlIHRyYW5zaXRpb25zIHdo
aWNoIGFyZSB2aWV3cG9ydC1zaXplZCBsYXllcnMuIFRoZSBleHRyYQpAQCAtNTk0LDcgKzU4OSw3
IEBAIHZvaWQgc2V0UHJpb3JpdHlGb3JUZXh0dXJlKGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9y
JiBwcmlvcml0eUNhbGMsCiB9CiB9CiAKLXZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0
dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpb3JpdHlD
YWxjLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCit2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3Im
IHByaW9yaXR5Q2FsYykKIHsKICAgICB1cGRhdGVCb3VuZHMoKTsKICAgICByZXNldFVwZGF0ZVN0
YXRlKCk7CkBAIC02MDYsNyArNjAxLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRl
eHR1cmVQcmlvcml0aWVzSW5SZWN0KGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJgogICAgIGJv
b2wgc21hbGxBbmltYXRlZExheWVyID0gaXNTbWFsbEFuaW1hdGVkTGF5ZXIodGhpcyk7CiAKICAg
ICAvLyBNaW5pbWFsbHkgY3JlYXRlIHRoZSB0aWxlcyBpbiB0aGUgZGVzaXJlZCBwcmUtcGFpbnQg
cmVjdC4KLSAgICBJbnRSZWN0IGNyZWF0ZVRpbGVzUmVjdCA9IGlkbGVQYWludFJlY3QodmlzaWJs
ZUNvbnRlbnRSZWN0KTsKKyAgICBJbnRSZWN0IGNyZWF0ZVRpbGVzUmVjdCA9IGlkbGVQYWludFJl
Y3QoKTsKICAgICBpZiAoIWNyZWF0ZVRpbGVzUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgaW50
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKICAgICAgICAgbV90aWxlci0+Y29udGVudFJlY3RU
b1RpbGVJbmRpY2VzKGNyZWF0ZVRpbGVzUmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsK
QEAgLTYyMCw3ICs2MTUsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVBy
aW9yaXRpZXNJblJlY3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAKICAgICAvLyBBbHNv
LCBtaW5pbWFsbHkgY3JlYXRlIGFsbCB0aWxlcyBmb3Igc21hbGwgYW5pbWF0ZWQgbGF5ZXJzIGFu
ZCBhbHNvCiAgICAgLy8gZG91YmxlLWJ1ZmZlciB0aGVtIHNpbmNlIHdlIGhhdmUgbGltaXRlZCB0
aGVpciBzaXplIHRvIGJlIHJlYXNvbmFibGUuCi0gICAgSW50UmVjdCBkb3VibGVCdWZmZXJlZFJl
Y3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7CisgICAgSW50UmVjdCBkb3VibGVCdWZmZXJlZFJlY3Qg
PSB2aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICBpZiAoc21hbGxBbmltYXRlZExheWVyKQogICAg
ICAgICBkb3VibGVCdWZmZXJlZFJlY3QgPSBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRl
bnRCb3VuZHMoKSk7CiAKQEAgLTY0OSw3ICs2NDQsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3Im
CiAgICAgICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsZXItPnRpbGVSZWN0KHRp
bGUpOwogICAgICAgICAgICAgICAgIHRpbGUtPmRpcnR5UmVjdCA9IHRpbGVSZWN0OwogICAgICAg
ICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIGJhY2tCdWZmZXIgPSB0aWxl
LT50ZXh0dXJlKCk7Ci0gICAgICAgICAgICAgICAgc2V0UHJpb3JpdHlGb3JUZXh0dXJlKHByaW9y
aXR5Q2FsYywgdmlzaWJsZUNvbnRlbnRSZWN0LCB0aWxlLT5kaXJ0eVJlY3QsIGRyYXdzVG9Sb290
LCBzbWFsbEFuaW1hdGVkTGF5ZXIsIGJhY2tCdWZmZXItPnRleHR1cmUoKSk7CisgICAgICAgICAg
ICAgICAgc2V0UHJpb3JpdHlGb3JUZXh0dXJlKHByaW9yaXR5Q2FsYywgdmlzaWJsZUNvbnRlbnRS
ZWN0KCksIHRpbGUtPmRpcnR5UmVjdCwgZHJhd3NUb1Jvb3QsIHNtYWxsQW5pbWF0ZWRMYXllciwg
YmFja0J1ZmZlci0+dGV4dHVyZSgpKTsKICAgICAgICAgICAgICAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmU+IGZyb250QnVmZmVyID0gQ0NQcmlvcml0aXplZFRleHR1cmU6OmNyZWF0ZShi
YWNrQnVmZmVyLT50ZXh0dXJlKCktPnRleHR1cmVNYW5hZ2VyKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmFja0J1ZmZlci0+dGV4dHVyZSgpLT5zaXplKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFja0J1ZmZlci0+dGV4dHVyZSgpLT5mb3JtYXQoKSk7CkBA
IC02NjcsNyArNjYyLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlv
cml0aWVzSW5SZWN0KGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJgogICAgICAgICBpZiAoIXRp
bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1f
dGlsZXItPnRpbGVSZWN0KHRpbGUpOwotICAgICAgICBzZXRQcmlvcml0eUZvclRleHR1cmUocHJp
b3JpdHlDYWxjLCB2aXNpYmxlQ29udGVudFJlY3QsIHRpbGVSZWN0LCBkcmF3c1RvUm9vdCwgc21h
bGxBbmltYXRlZExheWVyLCB0aWxlLT5tYW5hZ2VkVGV4dHVyZSgpKTsKKyAgICAgICAgc2V0UHJp
b3JpdHlGb3JUZXh0dXJlKHByaW9yaXR5Q2FsYywgdmlzaWJsZUNvbnRlbnRSZWN0KCksIHRpbGVS
ZWN0LCBkcmF3c1RvUm9vdCwgc21hbGxBbmltYXRlZExheWVyLCB0aWxlLT5tYW5hZ2VkVGV4dHVy
ZSgpKTsKICAgICB9CiB9CiAKQEAgLTY4Miw2ICs2NzcsOSBAQCBSZWdpb24gVGlsZWRMYXllckNo
cm9taXVtOjp2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpIGNvbnN0CiAKIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpyZXNldFVwZGF0ZVN0YXRlKCkKIHsKKyAgICBtX3NraXBzRHJhdyA9IGZh
bHNlOworICAgIG1fZmFpbGVkVXBkYXRlID0gZmFsc2U7CisKICAgICBDQ0xheWVyVGlsaW5nRGF0
YTo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlci0+dGlsZXMoKS5lbmQoKTsK
ICAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRl
ci0+c2Vjb25kLmdldCgpKTsKQEAgLTY5MiwxMiArNjkwLDExIEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpyZXNldFVwZGF0ZVN0YXRlKCkKICAgICB9CiB9CiAKLXZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjp1cGRhdGVDb250ZW50UmVjdChDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqIG9jY2x1
c2lvbiwgQ0NSZW5kZXJpbmdTdGF0cyYgc3RhdHMpCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29udGVudChDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNvbnN0IENDT2NjbHVz
aW9uVHJhY2tlciogb2NjbHVzaW9uLCBDQ1JlbmRlcmluZ1N0YXRzJiBzdGF0cykKIHsKLSAgICBt
X3NraXBzRHJhdyA9IGZhbHNlOwotICAgIG1fZmFpbGVkVXBkYXRlID0gZmFsc2U7Ci0gICAgdXBk
YXRlQm91bmRzKCk7CisgICAgQVNTRVJUKCFtX3NraXBzRHJhdyAmJiAhbV9mYWlsZWRVcGRhdGUp
OyAvLyBEaWQgcmVzZXRVcGRhdGVTdGF0ZSBnZXQgc2tpcHBlZD8KIAorICAgIHVwZGF0ZUJvdW5k
cygpOwogICAgIGlmIChtX3RpbGVyLT5oYXNFbXB0eUJvdW5kcygpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTcxNywxMiArNzE0LDEyIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50UmVjdChDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNvbnN0IEluCiAgICAgICAg
IG1fZmFpbGVkVXBkYXRlID0gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGNvbnRlbnRSZWN0Lmlz
RW1wdHkoKSkKKyAgICBpZiAodmlzaWJsZUNvbnRlbnRSZWN0KCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBWaXNpYmxlIHBhaW50aW5nLiBGaXJzdCBvY2NsdWRlIHZpc2li
bGUgdGlsZXMgYW5kIHBhaW50IHRoZSBub24tb2NjbHVkZWQgdGlsZXMuCiAgICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgbV90aWxlci0+
Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKHZpc2libGVDb250ZW50UmVjdCgpLCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOwogICAgIG1hcmtPY2NsdXNpb25zQW5kUmVxdWVzdFRleHR1cmVzKGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgb2NjbHVzaW9uKTsKICAgICBtX3NraXBzRHJhdyA9ICF1
cGRhdGVUaWxlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHF1ZXVlLCBvY2NsdXNpb24sIHN0
YXRzLCBkaWRQYWludCk7CiAgICAgaWYgKG1fc2tpcHNEcmF3KQpAQCAtNzMxLDcgKzcyOCw3IEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50UmVjdChDQ1RleHR1cmVVcGRh
dGVRdWV1ZSYgcXVldWUsIGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdl
IGhhdmUgYWxyZWFkeSBwYWludGluZyBldmVyeXRoaW5nIHZpc2libGUuIERvIHNvbWUgcHJlLXBh
aW50aW5nIHdoaWxlIGlkbGUuCi0gICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGlk
bGVQYWludFJlY3QoY29udGVudFJlY3QpOworICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJl
Y3QgPSBpZGxlUGFpbnRSZWN0KCk7CiAgICAgaWYgKGlkbGVQYWludENvbnRlbnRSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03NjcsMTMgKzc2NCwxMyBAQCB2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudFJlY3QoQ0NUZXh0dXJlVXBkYXRlUXVldWUmIHF1
ZXVlLCBjb25zdCBJbgogICAgIH0KIH0KIAotYm9vbCBUaWxlZExheWVyQ2hyb21pdW06Om5lZWRz
SWRsZVBhaW50KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKK2Jvb2wgVGlsZWRM
YXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludCgpCiB7CiAgICAgLy8gRG9uJ3QgdHJpZ2dlciBt
b3JlIHBhaW50cyBpZiB3ZSBmYWlsZWQgKGFzIHdlJ2xsIGp1c3QgZmFpbCBhZ2FpbikuCi0gICAg
aWYgKG1fZmFpbGVkVXBkYXRlIHx8IHZpc2libGVDb250ZW50UmVjdC5pc0VtcHR5KCkgfHwgbV90
aWxlci0+aGFzRW1wdHlCb3VuZHMoKSkKKyAgICBpZiAobV9mYWlsZWRVcGRhdGUgfHwgdmlzaWJs
ZUNvbnRlbnRSZWN0KCkuaXNFbXB0eSgpIHx8IG1fdGlsZXItPmhhc0VtcHR5Qm91bmRzKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3Qg
PSBpZGxlUGFpbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCk7CisgICAgSW50UmVjdCBpZGxlUGFp
bnRDb250ZW50UmVjdCA9IGlkbGVQYWludFJlY3QoKTsKICAgICBpZiAoaWRsZVBhaW50Q29udGVu
dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc5NywxNSArNzk0
LDE1IEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1JbnRSZWN0
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxl
Q29udGVudFJlY3QpCitJbnRSZWN0IFRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50UmVjdCgp
CiB7CiAgICAgLy8gRG9uJ3QgaW5mbGF0ZSBhbiBlbXB0eSByZWN0LgotICAgIGlmICh2aXNpYmxl
Q29udGVudFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0
OworICAgIGlmICh2aXNpYmxlQ29udGVudFJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJn
ZXIgbm93ISBXZSBzaG91bGQgaW5jcmVhc2UKICAgICAvLyAgICAgICAgdGhpcyBzbG93bHkgd2hp
bGUgaW5zdXJpbmcgaXQgZG9lc24ndCBjYXVzZSBhbnkgcGVyZiBpc3N1ZXMuCi0gICAgSW50UmVj
dCBwcmVwYWludFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7CisgICAgSW50UmVjdCBwcmVwYWlu
dFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICBwcmVwYWludFJlY3QuaW5mbGF0ZVgo
bV90aWxlci0+dGlsZVNpemUoKS53aWR0aCgpKTsKICAgICBwcmVwYWludFJlY3QuaW5mbGF0ZVko
bV90aWxlci0+dGlsZVNpemUoKS5oZWlnaHQoKSAqIDIpOwogICAgIEludFJlY3QgY29udGVudFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmgKaW5kZXggMTNkMzQ1ZWIyZWZiODY2NzVlMTc5ODZkNjMwYTAzNjZiYzY2ZmYzNC4u
ZDFiYTE0MzA1OWU0NzA3OGNjMzVmZjljZTAzOWYzZmEyNTk2MTc5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmgKQEAgLTgzLDEyICs4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBy
ZXNldFVwZGF0ZVN0YXRlKCk7CiAKICAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRvIHVwZGF0
ZSB0ZXh0dXJlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgotICAgIHZvaWQgdXBk
YXRlQ29udGVudFJlY3QoQ0NUZXh0dXJlVXBkYXRlUXVldWUmLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2VyKiwgQ0NSZW5kZXJpbmdTdGF0cyYpOwor
ICAgIHZvaWQgdXBkYXRlQ29udGVudChDQ1RleHR1cmVVcGRhdGVRdWV1ZSYsIGNvbnN0IENDT2Nj
bHVzaW9uVHJhY2tlciosIENDUmVuZGVyaW5nU3RhdHMmKTsKIAogICAgIC8vIEFmdGVyIHByZXBh
cmluZyBhbiB1cGRhdGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHBhaW50aW5nIGlzIG5lZWRlZC4K
LSAgICBib29sIG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVj
dCk7Ci0KLSAgICBJbnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNv
bnRlbnRSZWN0KTsKKyAgICBib29sIG5lZWRzSWRsZVBhaW50KCk7CisgICAgSW50UmVjdCBpZGxl
UGFpbnRSZWN0KCk7CiAKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tp
cHNEcmF3OyB9CiAKQEAgLTEwNCw4ICsxMDMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgdGlsZU9u
bHlOZWVkc1BhcnRpYWxVcGRhdGUoVXBkYXRhYmxlVGlsZSopOwogICAgIGJvb2wgdGlsZU5lZWRz
QnVmZmVyZWRVcGRhdGUoVXBkYXRhYmxlVGlsZSopOwogCi0gICAgdm9pZCBzZXRUZXh0dXJlUHJp
b3JpdGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYsIGNvbnN0IEludFJlY3Qm
IHZpc2libGVDb250ZW50UmVjdCk7Ci0KICAgICB2b2lkIG1hcmtPY2NsdXNpb25zQW5kUmVxdWVz
dFRleHR1cmVzKGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIGNvbnN0
IENDT2NjbHVzaW9uVHJhY2tlciopOwogCiAgICAgYm9vbCB1cGRhdGVUaWxlcyhpbnQgbGVmdCwg
aW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tLCBDQ1RleHR1cmVVcGRhdGVRdWV1ZSYsIGNv
bnN0IENDT2NjbHVzaW9uVHJhY2tlciosIENDUmVuZGVyaW5nU3RhdHMmLCBib29sJiBkaWRQYWlu
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXll
clRlc3RDb21tb24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmNwcAppbmRleCA1NGYyOWJiZWY1NTQ4ZDNlMGNmNzU0MjFmM2M2MzNjM2Q1
MDlhMzA0Li5kYTY1MmMwZjgzMzllMzljZmQ2NjgyMTI0YjIyZTljZGUyMDk0NjgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENv
bW1vbi5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEZha2VUaWxlZExheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEZha2VU
aWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZShDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNv
bnN0IENDT2NjbHVzaW9uVHJhY2tlciogb2NjbHVzaW9uLCBDQ1JlbmRlcmluZ1N0YXRzJiBzdGF0
cykKIHsKLSAgICB1cGRhdGVDb250ZW50UmVjdChxdWV1ZSwgdmlzaWJsZUNvbnRlbnRSZWN0KCks
IG9jY2x1c2lvbiwgc3RhdHMpOworICAgIHVwZGF0ZUNvbnRlbnQocXVldWUsIG9jY2x1c2lvbiwg
c3RhdHMpOwogfQogCiB2b2lkIEZha2VUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlv
cml0aWVzKGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiBjYWxjdWxhdG9yKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaApp
bmRleCBjNzU5MzJhY2Y2MjFiZGViMzBjNmY3MTQyYjc3MTU3ZGQzOTVkMzUyLi5iOThhZWE0YmVh
YzRiYzVjYWM1YTA3NmJjMTI2ODhiZTIyZDQ0YzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaApAQCAtMTEyLDcgKzEx
Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViQ29yZTo6SW50U2l6ZSB0aWxlU2l6ZSgpIHsg
cmV0dXJuIFdlYkNvcmU6OkludFNpemUoMTAwLCAxMDApOyB9CiAKICAgICB1c2luZyBXZWJDb3Jl
OjpUaWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVDb250ZW50UmVjdDsKLSAgICB1c2luZyBX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRSZWN0OworICAgIHVzaW5n
IFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudDsKICAgICB1c2luZyBX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50OwogICAgIHVzaW5nIFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2tpcHNEcmF3OwogICAgIHVzaW5nIFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVtUGFpbnRlZFRpbGVzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXgg
ZTJjYWExMDY3YWIyYTdmY2RjNzZmOTI1ZDBlMTBhMzVlZGEwNTI3OC4uN2Q3NWM3ZDg1Nzk3YTZm
MmNlM2JhMTc2ZGI5OTJkODNkYzNlOTlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC03Nyw2ICs3Nyw4
IEBAIGNsYXNzIFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7
CiBwdWJsaWM6CiAgICAgVGlsZWRMYXllckNocm9taXVtVGVzdCgpCiAgICAgICAgIDogbV9jb250
ZXh0KFdlYktpdDo6Y3JlYXRlRmFrZUNDR3JhcGhpY3NDb250ZXh0KCkpCisgICAgICAgICwgbV90
ZXh0dXJlTWFuYWdlcihDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg2MCoxMDI0
KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKSkKKyAgICAgICAgLCBtX29jY2x1
c2lvbigwKQogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAgICAgICAgIG1fcmVzb3VyY2VQcm92aWRlciA9IENDUmVzb3VyY2VQcm92aWRlcjo6Y3Jl
YXRlKG1fY29udGV4dC5nZXQoKSk7CkBAIC05Miw2ICs5NCwxMTggQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6dXBkYXRlVGV4dHVyZXMobV9yZXNv
dXJjZVByb3ZpZGVyLmdldCgpLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCAmbV9xdWV1ZSwgY291
bnQpOwogICAgIH0KKworICAgIGJvb2wgSW52YWxpZGF0ZVVwZGF0ZUFuZFB1c2goRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSogbGF5ZXIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0NMYXllckltcGwqIGxheWVySW1wbDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRTaXplIGJvdW5kczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRS
ZWN0IHZpc2libGUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBk
cmF3YWJsZTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IGludmFs
aWRhdGlvbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWtlVGlsZWRMYXll
ckNocm9taXVtKiBsYXllcjIgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0NMYXllckltcGwqIGxheWVySW1wbDIgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50U2l6ZSBib3VuZHMyID0gSW50U2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlMiA9IEludFJlY3QoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGUyID0gSW50UmVjdCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBpbnZhbGlkYXRpb24yID0gSW50UmVj
dCgpKQorICAgIHsKKyAgICAgICAgLy8gTGF5ZXIgcHJvcGVydGllcworICAgICAgICBpZiAobGF5
ZXIxKSB7CisgICAgICAgICAgICBsYXllcjEtPnNldEJvdW5kcyhib3VuZHMxKTsKKyAgICAgICAg
ICAgIGxheWVyMS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGUxKTsKKyAgICAgICAgICAg
IGxheWVyMS0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZTEpOworICAgICAgICAgICAg
bGF5ZXIxLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoaW52YWxpZGF0aW9uMSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGxheWVyMikgeworICAgICAgICAgICAgbGF5ZXIyLT5zZXRCb3VuZHMoYm91
bmRzMik7CisgICAgICAgICAgICBsYXllcjItPnNldFZpc2libGVDb250ZW50UmVjdCh2aXNpYmxl
Mik7CisgICAgICAgICAgICBsYXllcjItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGUy
KTsKKyAgICAgICAgICAgIGxheWVyMi0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGludmFsaWRhdGlv
bjIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHRleHR1cmVzCisgICAgICAgIG1fdGV4
dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOworICAgICAgICBpZiAobGF5ZXIxKQorICAg
ICAgICAgICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRv
cik7CisgICAgICAgIGlmIChsYXllcjIpCisgICAgICAgICAgICBsYXllcjItPnNldFRleHR1cmVQ
cmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsgICAgIAorICAgICAgICBtX3RleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKworICAgICAgICAvLyBVcGRhdGUgY29udGVu
dAorICAgICAgICBpZiAobGF5ZXIxKQorICAgICAgICAgICAgbGF5ZXIxLT51cGRhdGVDb250ZW50
KG1fcXVldWUsIG1fb2NjbHVzaW9uLCBtX3N0YXRzKTsKKyAgICAgICAgaWYgKGxheWVyMikKKyAg
ICAgICAgICAgIGxheWVyMi0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCBtX29jY2x1c2lvbiwgbV9z
dGF0cyk7CisgICAgICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgaWYgKGxh
eWVyMSkKKyAgICAgICAgICAgIG5lZWRzVXBkYXRlIHw9IGxheWVyMS0+bmVlZHNJZGxlUGFpbnQo
KTsKKyAgICAgICAgaWYgKGxheWVyMikKKyAgICAgICAgICAgIG5lZWRzVXBkYXRlIHw9IGxheWVy
Mi0+bmVlZHNJZGxlUGFpbnQoKTsKKworICAgICAgICAvLyBVcGRhdGUgdGV4dHVyZXMgYW5kIHB1
c2guCisgICAgICAgIHVwZGF0ZVRleHR1cmVzKCk7CisgICAgICAgIGlmIChsYXllcjEpCisgICAg
ICAgICAgICBsYXllcjEtPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMSk7CisgICAgICAgIGlm
IChsYXllcjIpCisgICAgICAgICAgICBsYXllcjItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBs
Mik7CisKKyAgICAgICAgcmV0dXJuIG5lZWRzVXBkYXRlOworICAgIH0KKworICAgIC8vIFdpdGhv
dXQgdW5pcXVlIGRyYXdhYmxlQ29udGVudFJlY3QKKyAgICBib29sIEludmFsaWRhdGVVcGRhdGVB
bmRQdXNoKEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwxLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50U2l6ZSBib3VuZHMxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEludFJlY3QgaW52YWxpZGF0aW9uMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMiA9IDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsMiA9IDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplIGJvdW5kczIgPSBJbnRTaXplKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHZpc2libGUyID0gSW50UmVj
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBpbnZhbGlkYXRp
b24yID0gSW50UmVjdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEludmFsaWRhdGVVcGRhdGVB
bmRQdXNoKGxheWVyMSwgbGF5ZXJJbXBsMSwgYm91bmRzMSwgdmlzaWJsZTEsIHZpc2libGUxLCBp
bnZhbGlkYXRpb24xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5
ZXIyLCBsYXllckltcGwyLCBib3VuZHMyLCB2aXNpYmxlMiwgdmlzaWJsZTIsIGludmFsaWRhdGlv
bjIpOworICAgIH0KKworICAgIC8vIEZ1bGx5IHZpc2libGUgYW5kIGludmFsaWRhdGVkLgorICAg
IGJvb2wgSW52YWxpZGF0ZVVwZGF0ZUFuZFB1c2goRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5
ZXIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVy
SW1wbDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHZpc2libGUx
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSogbGF5ZXIyID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDTGF5ZXJJ
bXBsKiBsYXllckltcGwyID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
dFJlY3QgdmlzaWJsZTIgPSBJbnRSZWN0KCkpCisgICAgeworICAgICAgICByZXR1cm4gSW52YWxp
ZGF0ZVVwZGF0ZUFuZFB1c2gobGF5ZXIxLCBsYXllckltcGwxLCB2aXNpYmxlMS5zaXplKCksIHZp
c2libGUxLCB2aXNpYmxlMSwgdmlzaWJsZTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYXllcjIsIGxheWVySW1wbDIsIHZpc2libGUyLnNpemUoKSwgdmlzaWJsZTIs
IHZpc2libGUyLCB2aXNpYmxlMik7CisgICAgfQorCisKKyAgICAvLyBXaXRob3V0IHVuaXF1ZSBk
cmF3YWJsZUNvbnRlbnRSZWN0LCBhbmQgbm8gaW52YWxpZGF0aW9ucworICAgIGJvb2wgVXBkYXRl
QW5kUHVzaChGYWtlVGlsZWRMYXllckNocm9taXVtKiBsYXllcjEsCisgICAgICAgICAgICAgICAg
ICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwxLAorICAgICAgICAgICAgICAgICAgICAgICBJ
bnRTaXplIGJvdW5kczEsCisgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZTEs
CisgICAgICAgICAgICAgICAgICAgICAgIEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMiA9
IDAsCisgICAgICAgICAgICAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwyID0gMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSBib3VuZHMyID0gSW50U2l6ZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHZpc2libGUyID0gSW50UmVjdCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEludmFsaWRhdGVVcGRhdGVBbmRQdXNoKGxheWVyMSwgbGF5ZXJJbXBs
MSwgYm91bmRzMSwgdmlzaWJsZTEsIHZpc2libGUxLCBJbnRSZWN0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjIsIGxheWVySW1wbDIsIGJvdW5kczIsIHZp
c2libGUyLCB2aXNpYmxlMiwgSW50UmVjdCgpKTsKKyAgICB9CisKKyAgICAvLyBXaXRob3V0IGZ1
bGx5IHZpc2libGUgYW5kIG5vdCBpbnZhbGlkYXRlZAorICAgIGJvb2wgVXBkYXRlQW5kUHVzaChG
YWtlVGlsZWRMYXllckNocm9taXVtKiBsYXllcjEsCisgICAgICAgICAgICAgICAgICAgICAgIEND
TGF5ZXJJbXBsKiBsYXllckltcGwxLAorICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHZp
c2libGUxLAorICAgICAgICAgICAgICAgICAgICAgICBGYWtlVGlsZWRMYXllckNocm9taXVtKiBs
YXllcjIgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBs
MiA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZTIgPSBJbnRSZWN0
KCkpCisgICAgeworICAgICAgICByZXR1cm4gSW52YWxpZGF0ZVVwZGF0ZUFuZFB1c2gobGF5ZXIx
LCBsYXllckltcGwxLCB2aXNpYmxlMS5zaXplKCksIHZpc2libGUxLCB2aXNpYmxlMSwgSW50UmVj
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIyLCBsYXll
ckltcGwyLCB2aXNpYmxlMi5zaXplKCksIHZpc2libGUyLCB2aXNpYmxlMiwgSW50UmVjdCgpKTsK
KyAgICB9CisKIHB1YmxpYzoKICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4
dDsKICAgICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBtX3Jlc291cmNlUHJvdmlkZXI7CkBA
IC0xMDAsNDAgKzIxNCwzMCBAQCBwdWJsaWM6CiAgICAgRmFrZVRleHR1cmVDb3BpZXIgbV9jb3Bp
ZXI7CiAgICAgRmFrZVRleHR1cmVVcGxvYWRlciBtX3VwbG9hZGVyOwogICAgIENDUHJpb3JpdHlD
YWxjdWxhdG9yIG1fcHJpb3JpdHlDYWxjdWxhdG9yOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IG1fdGV4dHVyZU1hbmFnZXI7CisgICAgVGVzdENDT2NjbHVzaW9uVHJh
Y2tlciogbV9vY2NsdXNpb247CiB9OwogCiAKLQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHB1c2hEaXJ0eVRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIC8vIFRoZSB0
aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMg
dHdvIHRpbGVzLgotICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAg
IGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwot
ICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkp
OwotCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9y
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBsYXll
ci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAs
IG1fc3RhdHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0
aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBs
YXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMjAw
KSk7IC8vIFZpc2libGUKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhl
IGltcGwgc2lkZS4KICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7
CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogCi0gICAgLy8g
SW52YWxpZGF0ZXMgYm90aCB0aWxlcy4uLgotICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJl
Y3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIC8vIC4uLi5idXQgdGhlbiBvbmx5IHVw
ZGF0ZSBvbmUgb2YgdGhlbS4KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlv
cml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCksIDAsIG1fc3RhdHMpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVy
SW1wbC5nZXQoKSk7CisgICAgLy8gSW52YWxpZGF0ZXMgYm90aCB0aWxlcywgYnV0IHRoZW4gb25s
eSB1cGRhdGUgb25lIG9mIHRoZW0uCisgICAgSW52YWxpZGF0ZVVwZGF0ZUFuZFB1c2gobGF5ZXIu
Z2V0KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRT
aXplKDEwMCwgMjAwKSwgLy8gQm91bmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UmVjdCgwLCAwLCAxMDAsIDEwMCksIC8vIFZpc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7IC8vIEludmFsaWRhdGUKIAogICAgIC8vIFdl
IHNob3VsZCBvbmx5IGhhdmUgdGhlIGZpcnN0IHRpbGUgc2luY2UgdGhlIG90aGVyIHRpbGUgd2Fz
IGludmFsaWRhdGVkIGJ1dCBub3QgcGFpbnRlZC4KICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwt
Pmhhc1RpbGVBdCgwLCAwKSk7CkBAIC0xNDIsMjQgKzI0NiwxNSBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29s
KTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllcklt
cGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKICAg
ICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOworICAgIG1fb2NjbHVzaW9uID0gJm9j
Y2x1ZGVkOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFs
aWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCi0gICAgbGF5ZXItPnNldEJvdW5kcyhJ
bnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50
UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJl
Y3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwg
SW50UmVjdCgwLCAwLCAxMDAsIDIwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7Ci0gICAgdXBkYXRl
VGV4dHVyZXMoKTsKLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkp
OworICAgIFVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAg
ICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgLy8gVmlzaWJsZQogCiAgICAg
RVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFx
dWUoKSwgMCwgMSk7CiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCku
cGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudCgpLCAyMDAwMCwgMSk7CkBAIC0xNzMsOSArMjY4LDEw
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVz
KQogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA1MCwgNTAp
KTsKICAgICAvLyAuLi4uYnV0IHRoZSBhcmVhIGlzIG9jY2x1ZGVkLgogICAgIG9jY2x1ZGVkLnNl
dE9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwotICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgJm9jY2x1ZGVkLCBtX3N0
YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbC5nZXQoKSk7CisKKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXll
ckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICBJbnRTaXplKDEwMCwgMjAwKSwgLy8gQm91
bmRzCisgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7IC8vIFZpc2li
bGUKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1Vw
bG9hZGVkT3BhcXVlKCksIDAsIDEpOwogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3
TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQoKSwgMjAwMDAgKyAyNTAwLCAxKTsK
QEAgLTE4OCwzMCArMjg0LDIxIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNo
T2NjbHVkZWREaXJ0eVRpbGVzKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aERlbGV0ZWRUaWxlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQq
MTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSht
X3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRv
cHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBz
aXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0
aWxlcy4KLSAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKLSAgICBsYXll
ci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBs
YXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0gICAgbGF5ZXItPnVw
ZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0
YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbC5nZXQoKSk7CisgICAgSW52YWxpZGF0ZVVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0
KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0
KDAsIDAsIDEwMCwgMjAwKSk7IC8vIFZpc2libGUKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIGJv
dGggdGlsZXMgb24gdGhlIGltcGwgc2lkZS4KICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhh
c1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwg
MSkpOwogCi0gICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCoxMDI0KTsKKyAg
ICBtX3RleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9yaXRpZXMoKTsKKyAgICBtX3RleHR1cmVNYW5h
Z2VyLT5jbGVhckFsbE1lbW9yeShtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOworICAgIG1fdGV4
dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOwogCiAgICAg
Ly8gVGhpcyBzaG91bGQgZHJvcCB0aGUgdGlsZXMgb24gdGhlIGltcGwgdGhyZWFkLgogICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CkBAIC0yMjEsMjAyICszMDgs
MTQ1IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQog
ICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKICAgICAvLyBU
aGlzIHNob3VsZCByZWNyZWF0ZSBhbmQgdXBkYXRlIHRoZSBkZWxldGVkIHRleHR1cmVzLgotICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVD
b250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCwgbV9zdGF0cyk7
Ci0gICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXll
ckltcGwuZ2V0KCkpOworICAgIEludmFsaWRhdGVVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBs
YXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCkpOyAvLyBWaXNpYmxlCiAKLSAgICAvLyBXZSBzaG91bGQgb25seSBoYXZlIHRo
ZSBmaXJzdCB0aWxlIHNpbmNlIHRoZSBvdGhlciB0aWxlIHdhcyBpbnZhbGlkYXRlZCBidXQgbm90
IHBhaW50ZWQuCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBz
aWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKLSAgICBF
WFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOworICAgIEVYUEVDVF9UUlVF
KGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7
Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBs
PiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAg
ICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2
aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KLSAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAw
LCA1MDApOwotICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVu
dEJvdW5kcyk7Ci0gICAgSW50UmVjdCB2aXNpYmxlUmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApOwot
CiAgICAgLy8gVGhpcyBpbnZhbGlkYXRlcyAyNSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZp
c2libGUgdGlsZS4KLSAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOwotICAgIGxh
eWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZVJlY3QpOwotICAgIGxheWVyLT5pbnZh
bGlkYXRlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotCi0gICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1
ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0KLSAg
ICAvLyBXZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGlsZXMgaW4gdGhlIGNl
bnRlci4KLSAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3Qp
KTsKLQotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAg
Ym9vbCBuZWVkc1VwZGF0ZSA9IFVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1wbC5n
ZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKDUwMCwg
NTAwKSwgLy8gQm91bmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApKTsgLy8gVmlzaWJsZQorICAgIC8vIFdlIHNob3VsZCBu
ZWVkIGlkbGUtcGFpbnRpbmcgZm9yIHN1cnJvdW5kaW5nIHRpbGVzLgorICAgIEVYUEVDVF9UUlVF
KG5lZWRzVXBkYXRlKTsKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIG9uIHRoZSBp
bXBsIHNpZGUuCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMiwgMikpOwog
CiAgICAgLy8gRm9yIHRoZSBuZXh0IGZvdXIgdXBkYXRlcywgd2Ugc2hvdWxkIGRldGVjdCB3ZSBz
dGlsbCBuZWVkIGlkbGUgcGFpbnRpbmcuCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKysp
IHsKLSAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxh
dG9yKTsKLSAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0g
ICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCB2aXNpYmxlUmVjdCwgMCwg
bV9zdGF0cyk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNp
YmxlUmVjdCkpOwotICAgICAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgICAgICBsYXllci0+cHVz
aFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgICAgICBuZWVkc1VwZGF0ZSA9IFVw
ZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludFNpemUoNTAwLCA1MDApLCAvLyBCb3VuZHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAw
KSk7IC8vIFZpc2libGUKKyAgICAgICAgRVhQRUNUX1RSVUUobmVlZHNVcGRhdGUpOwogICAgIH0K
IAotICAgIC8vIEFmdGVyIGZvdXIgcGFzc2VzIG9mIGlkbGUgcGFpbnRpbmcsIHdlIHNob3VsZCBi
ZSBmaW5pc2hlZCBwYWludGluZwotICAgIC8vIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxl
UGFpbnQodmlzaWJsZVJlY3QpKTsKLQogICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIHN1
cnJvdW5kaW5nIHRoZSB2aXNpYmxlIHRpbGUgb24gYWxsIHNpZGVzLCBidXQgbm8gb3RoZXIgdGls
ZXMuCiAgICAgSW50UmVjdCBpZGxlUGFpbnRUaWxlcygxLCAxLCAzLCAzKTsKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDU7IGkrKykgewotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDU7IGor
KykgewotICAgICAgICAgICAgaWYgKGlkbGVQYWludFRpbGVzLmNvbnRhaW5zKGksIGopKQotICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGopKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5o
YXNUaWxlQXQoaSwgaikpOwotICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
NTsgaisrKQorICAgICAgICAgICAgRVhQRUNUX0VRKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGop
LCBpZGxlUGFpbnRUaWxlcy5jb250YWlucyhpLCBqKSk7CisgICAgfQorCisgICAgLy8gV2Ugc2hv
dWxkIGFsd2F5cyBmaW5pc2ggcGFpbnRpbmcgZXZlbnR1YWxseS4KKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDIwOyBpKyspIHsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSBVcGRhdGVBbmRQdXNoKGxh
eWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRTaXplKDUwMCwgNTAwKSwgLy8gQm91bmRzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpOyAvLyBWaXNpYmxl
CiAgICAgfQorICAgIEVYUEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiB9CiAKIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKIHsKICAg
ICAvLyBTdGFydCB3aXRoIDJtYiBvZiBtZW1vcnksIGJ1dCB0aGUgdGVzdCBpcyBnb2luZyB0byB0
cnkgdG8gdXNlIGp1c3QgbW9yZSB0aGFuIDFtYiwgc28gd2UgcmVkdWNlIHRvIDFtYiBsYXRlci4K
LSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIqMTAyNCoxMDI0LCAxMDI0LCBD
Q1JlbmRlcmVyOjpDb250ZW50UG9vbCk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVt
b3J5TGltaXRCeXRlcygyICogMTAyNCAqIDEwMjQpOyAgICAKICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQo
KSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMShhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJl
TWFuYWdlci5nZXQoKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJ
bXBsMihhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMikpKTsKIAogICAgIC8vIEZv
ciB0aGlzIHRlc3Qgd2UgaGF2ZSB0d28gbGF5ZXJzLiBsYXllcjEgZXhoYXVzdHMgbW9zdCB0ZXh0
dXJlIG1lbW9yeSwgbGVhdmluZyByb29tIGZvciAyIG1vcmUgdGlsZXMgZnJvbQogICAgIC8vIGxh
eWVyMiwgYnV0IG5vdCBhbGwgdGhyZWUgdGlsZXMuIEZpcnN0IHdlIHBhaW50IGxheWVyMSwgYW5k
IG9uZSB0aWxlIGZyb20gbGF5ZXIyLiBUaGVuIHdoZW4gd2UgaWRsZSBwYWludAogICAgIC8vIGxh
eWVyMiwgd2Ugd2lsbCBmYWlsIG9uIHRoZSB0aGlyZCB0aWxlIG9mIGxheWVyMiwgYW5kIHRoaXMg
c2hvdWxkIG5vdCBsZWF2ZSB0aGUgc2Vjb25kIHRpbGUgaW4gYSBiYWQgc3RhdGUuCiAKKyAgICAv
LyBUaGlzIHVzZXMgOTYwMDAwIGJ5dGVzLCBsZWF2aW5nIDg4NTc2IGJ5dGVzIG9mIG1lbW9yeSBs
ZWZ0LCB3aGljaCBpcyBlbm91Z2ggZm9yIDIgdGlsZXMgb25seSBpbiB0aGUgb3RoZXIgbGF5ZXIu
CisgICAgSW50UmVjdCBsYXllcjFSZWN0KDAsIDAsIDEwMCwgMjQwMCk7CisgICAgCiAgICAgLy8g
VGhpcyByZXF1aXJlcyA0KjMwMDAwIGJ5dGVzIG9mIG1lbW9yeS4KICAgICBJbnRSZWN0IGxheWVy
MlJlY3QoMCwgMCwgMTAwLCAzMDApOwotICAgIGxheWVyMi0+c2V0Qm91bmRzKGxheWVyMlJlY3Qu
c2l6ZSgpKTsKLSAgICBsYXllcjItPnNldFZpc2libGVDb250ZW50UmVjdChsYXllcjJSZWN0KTsK
LSAgICBsYXllcjItPmludmFsaWRhdGVDb250ZW50UmVjdChsYXllcjJSZWN0KTsKLQotICAgIC8v
IFRoaXMgdXNlcyA5NjAwMDAgYnl0ZXMsIGxlYXZpbmcgODg1NzYgYnl0ZXMgb2YgbWVtb3J5IGxl
ZnQsIHdoaWNoIGlzIGVub3VnaCBmb3IgMiB0aWxlcyBvbmx5IGluIHRoZSBvdGhlciBsYXllci4K
LSAgICBJbnRSZWN0IGxheWVyUmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMjQw
MCkpOwotICAgIGxheWVyMS0+c2V0Qm91bmRzKGxheWVyUmVjdC5zaXplKCkpOwotICAgIGxheWVy
MS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KGxheWVyUmVjdCk7Ci0gICAgbGF5ZXIxLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QobGF5ZXJSZWN0KTsKIAogICAgIC8vIFBhaW50IGEgc2luZ2xlIHRpbGUg
aW4gbGF5ZXIyIHNvIHRoYXQgaXQgd2lsbCBpZGxlIHBhaW50LgotICAgIGxheWVyMi0+c2V0VGV4
dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyMS0+c2V0VGV4
dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllcjEtPnVwZGF0ZUNvbnRlbnRSZWN0KG1f
cXVldWUsIGxheWVyUmVjdCwgMCwgbV9zdGF0cyk7Ci0gICAgbGF5ZXIyLT51cGRhdGVDb250ZW50
UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCwgbV9zdGF0cyk7CisgICAg
Ym9vbCBuZWVkc1VwZGF0ZSA9IFVwZGF0ZUFuZFB1c2gobGF5ZXIxLmdldCgpLCBsYXllckltcGwx
LmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyMVJlY3Qu
c2l6ZSgpLCAvLyBCb3VuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YXllcjFSZWN0LCAvLyBWaXNpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGF5ZXIyLmdldCgpLCBsYXllckltcGwyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxheWVyMlJlY3Quc2l6ZSgpLCAvLyBCb3VuZHMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7IC8vIFZp
c2libGUKIAogICAgIC8vIFdlIHNob3VsZCBuZWVkIGlkbGUtcGFpbnRpbmcgZm9yIGJvdGggcmVt
YWluaW5nIHRpbGVzIGluIGxheWVyMi4KLSAgICBFWFBFQ1RfVFJVRShsYXllcjItPm5lZWRzSWRs
ZVBhaW50KGxheWVyMlJlY3QpKTsKLQotICAgIC8vIENvbW1pdCB0aGUgZnJhbWUgb3ZlciB0byBp
bXBsLgotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbDEuZ2V0KCkpOwotICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllcklt
cGwyLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShuZWVkc1VwZGF0ZSk7CiAKICAgICAvLyBSZWR1
Y2Ugb3VyIG1lbW9yeSBsaW1pdHMgdG8gMW1iLgotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhN
ZW1vcnlMaW1pdEJ5dGVzKDEwMjQgKiAxMDI0KTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5zZXRN
YXhNZW1vcnlMaW1pdEJ5dGVzKDEwMjQgKiAxMDI0KTsKIAogICAgIC8vIE5vdyBpZGxlIHBhaW50
IGxheWVyMi4gV2UgYXJlIGdvaW5nIHRvIHJ1biBvdXQgb2YgbWVtb3J5IHRob3VnaCEKLSAgICBs
YXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBs
YXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIyLT51cGRhdGVD
b250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCwgbV9zdGF0cyk7
Ci0KICAgICAvLyBPaCB3ZWxsLCBjb21taXQgdGhlIGZyYW1lIGFuZCBwdXNoLgotICAgIHVwZGF0
ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbDEuZ2V0
KCkpOwotICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwyLmdldCgpKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBuZWVkc1VwZGF0ZSA9IFVw
ZGF0ZUFuZFB1c2gobGF5ZXIxLmdldCgpLCBsYXllckltcGwxLmdldCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIxUmVjdC5zaXplKCksIC8vIEJvdW5kcworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIxUmVjdCwgLy8gVmlzaWJsZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIyLmdldCgpLCBsYXllcklt
cGwyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIyUmVj
dC5zaXplKCksIC8vIEJvdW5kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOyAvLyBWaXNpYmxlCisgICAgfQogCiAgICAgLy8gU2Fu
aXR5IGNoZWNrLCB3ZSBzaG91bGQgaGF2ZSB0ZXh0dXJlcyBmb3IgdGhlIGJpZyBsYXllci4KICAg
ICBFWFBFQ1RfVFJVRShsYXllckltcGwxLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoMCwgMCkpOwor
ICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbDEtPmhhc1RleHR1cmVJZEZvclRpbGVBdCgwLCAyMykp
OwogCiAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgaGF2ZSB0aGUgZmlyc3QgdGlsZSBmcm9tIGxheWVy
MiBzaW5jZSBpdCBmYWlsZWQgdG8gaWRsZSB1cGRhdGUuCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJ
bXBsMi0+aGFzVGlsZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwyLT5oYXNU
ZXh0dXJlSWRGb3JUaWxlQXQoMCwgMCkpOwotICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwyLT5o
YXNUaWxlQXQoMCwgMSkpOwotICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwyLT5oYXNUaWxlQXQo
MCwgMikpOwotCi0gICAgLy8gTm93IGlmIGxheWVyMiBiZWNvbWVzIGZ1bGx5IHZpc2libGUsIHdl
IHNob3VsZCBiZSBhYmxlIHRvIHBhaW50IGl0IGFuZCBwdXNoIHZhbGlkIHRleHR1cmVzLgotICAg
IGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllcjItPnVwZGF0
ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGxheWVyMlJlY3QsIDAsIG1fc3RhdHMpOwotICAgIGxheWVy
MS0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgbGF5ZXJSZWN0LCAwLCBtX3N0YXRzKTsKLQot
ICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVy
SW1wbDEuZ2V0KCkpOwotICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwyLmdl
dCgpKTsKLQotICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAwKSk7CiAg
ICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsMi0+aGFzVGlsZUF0KDAsIDEpKTsKLSAgICBFWFBFQ1Rf
VFJVRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwgMikpOwotICAgIEVYUEVDVF9UUlVFKGxheWVy
SW1wbDItPmhhc1RleHR1cmVJZEZvclRpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5
ZXJJbXBsMi0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KDAsIDEpKTsKLSAgICBFWFBFQ1RfVFJVRShs
YXllckltcGwyLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoMCwgMikpOworICAgIAorICAgIEVYUEVD
VF9GQUxTRShuZWVkc1VwZGF0ZSk7CisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbDItPmhhc1Rp
bGVBdCgwLCAyKSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRs
ZVBhaW50ZWRPY2NsdWRlZFRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNo
cm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVy
SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKICAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwotCisgICAgbV9vY2NsdXNpb24gPSAmb2NjbHVkZWQ7
CisgICAgCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRh
dGVzIG9uZSBvY2NsdWRlZCB0aWxlLCBjdWxscyBpdCBkdXJpbmcgcGFpbnQsIGJ1dCBwcmVwYWlu
dHMgaXQuCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwLCAxMDAp
KTsKIAotICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOwotICAgIGxheWVy
LT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwotICAgIGxh
eWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwotCi0g
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAmb2NjbHVkZWQs
IG1fc3RhdHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0
aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBs
YXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMTAw
KSk7IC8vIFZpc2libGUKIAotICAgIC8vIFdlIHNob3VsZCBoYXZlIHRoZSBwcmVwYWludGVkIHRp
bGUgb24gdGhlIGltcGwgc2lkZS4KKyAgICAvLyBXZSBzaG91bGQgaGF2ZSB0aGUgcHJlcGFpbnRl
ZCB0aWxlIG9uIHRoZSBpbXBsIHNpZGUsIGJ1dCBjdWxsZWQgaXQgZHVyaW5nIHBhaW50LgogICAg
IEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKKyAgICBFWFBFQ1RfRVEo
MSwgb2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkudGlsZXNDdWxsZWRGb3JVcGxvYWQoKSk7CiB9
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1
cmluZ1BhaW50KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUg
aXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVz
LgogICAgIC8vIEhvd2V2ZXIsIGR1cmluZyB0aGUgcGFpbnQsIHdlIGludmFsaWRhdGUgb25lIG9m
IHRoZSB0aWxlcy4gVGhpcyBzaG91bGQKICAgICAvLyBub3QgcHJldmVudCB0aGUgdGlsZSBmcm9t
IGJlaW5nIHB1c2hlZC4KLSAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsK
LSAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
KTsKLSAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAy
MDApKTsKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52
YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIuZ2V0KCkpOwotCi0gICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRzKTsKLSAg
ICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CisgICAgVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgp
LAorICAgICAgICAgICAgICAgICAgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOyAvLyBWaXNpYmxl
CiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBib3RoIHRpbGVzIG9uIHRoZSBpbXBsIHNpZGUuCiAg
ICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOwpAQCAtNDI1LDM0ICs0
NTUsMTggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc01hcmtlZERp
cnR5RHVyaW5nUGFpbnQpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGls
ZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPbk5leHRMYXllcikKIHsKLSAgICBPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpD
b250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgp
KSk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4g
bGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDIpKSk7CiAKLSAgICBsYXllcjEtPnNldEJvdW5kcyhJbnRTaXplKDEw
MCwgMjAwKSk7Ci0gICAgbGF5ZXIxLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCkpOwotICAgIGxheWVyMS0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3Qo
MCwgMCwgMTAwLCAyMDApKTsKLQotICAgIGxheWVyMi0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAy
MDApKTsKLSAgICBsYXllcjItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7Ci0gICAgbGF5ZXIyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCkpOwotCi0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9y
aXR5Q2FsY3VsYXRvcik7Ci0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9y
aXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OwotCi0gICAgbGF5ZXIxLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAs
IDEwMCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGEgdGlsZSBvbiBs
YXllcjEKKyAgICAvLyBJbnZhbGlkYXRlIGEgdGlsZSBvbiBsYXllcjEsIGR1cmluZyB1cGRhdGUg
b2YgbGF5ZXIgMi4KICAgICBsYXllcjItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldFJl
Y3RUb0ludmFsaWRhdGUoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIGxheWVyMS5nZXQoKSk7Ci0g
ICAgbGF5ZXIyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwg
MjAwKSwgMCwgbV9zdGF0cyk7Ci0KLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyMS0+
cHVzaFByb3BlcnRpZXNUbyhsYXllcjFJbXBsLmdldCgpKTsKLSAgICBsYXllcjItPnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXIySW1wbC5nZXQoKSk7CisgICAgVXBkYXRlQW5kUHVzaChsYXllcjEuZ2V0
KCksIGxheWVyMUltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSwgLy8gVmlzaWJsZQorICAgICAgICAgICAgICAgICAgbGF5ZXIyLmdldCgpLCBsYXll
cjJJbXBsLmdldCgpLAorICAgICAgICAgICAgICAgICAgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkp
OyAvLyBWaXNpYmxlCiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBib3RoIHRpbGVzIG9uIHRoZSBp
bXBsIHNpZGUgZm9yIGFsbCBsYXllcnMuCiAgICAgRVhQRUNUX1RSVUUobGF5ZXIxSW1wbC0+aGFz
VGlsZUF0KDAsIDApKTsKQEAgLTQ2MywzMiArNDc3LDE3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPbk5leHRMYXll
cikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2Vk
RGlydHlEdXJpbmdQYWludE9uUHJldmlvdXNMYXllcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9v
bCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21p
dW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIxSW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDIpKSk7CiAKLSAgICBsYXllcjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7
Ci0gICAgbGF5ZXIxLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCkpOwotICAgIGxheWVyMS0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAw
LCAyMDApKTsKLQotICAgIGxheWVyMi0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKLSAg
ICBsYXllcjItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7
Ci0gICAgbGF5ZXIyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIw
MCkpOwotCi0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0gICAg
Ly8gSW52YWxpZGF0ZSBhIHRpbGUgb24gbGF5ZXIyCiAgICAgbGF5ZXIxLT5mYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKEludFJlY3QoMCwgNTAsIDEwMCwgNTAp
LCBsYXllcjIuZ2V0KCkpOwotICAgIGxheWVyMS0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwg
SW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIGxheWVyMi0+dXBkYXRl
Q29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMp
OwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVyMUltcGwuZ2V0KCkpOwotICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllcjJJbXBs
LmdldCgpKTsKKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyMS5nZXQoKSwgbGF5ZXIxSW1wbC5nZXQo
KSwKKyAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAvLyBWaXNpYmxl
CisgICAgICAgICAgICAgICAgICBsYXllcjIuZ2V0KCksIGxheWVyMkltcGwuZ2V0KCksCisgICAg
ICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7IC8vIFZpc2libGUKIAogICAg
IC8vIFdlIHNob3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhlIGltcGwgc2lkZSBmb3IgYWxsIGxh
eWVycy4KICAgICBFWFBFQ1RfVFJVRShsYXllcjFJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOwpAQCAt
NTE4LDEwICs1MTcsMTAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhaW50U21h
bGxBbmltYXRlZExheWVyc0ltbWVkaWF0ZWx5KQogICAgICAgICBpZiAocnVuT3V0T2ZNZW1vcnlb
aV0pCiAgICAgICAgICAgICBsYXllcldpZHRoICo9IDI7CiAKLSAgICAgICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZShtZW1vcnlGb3JMYXllciwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29u
dGVudFBvb2wpOworICAgICAgICBtX3RleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5
dGVzKG1lbW9yeUZvckxheWVyKTsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CiAKLSAgICAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVy
ID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0
KCkpKTsKKyAgICAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgICAgICAvLyBGdWxsIHNpemUg
bGF5ZXIgd2l0aCBoYWxmIGJlaW5nIHZpc2libGUuCkBAIC01MzksOCArNTM4LDggQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhaW50U21hbGxBbmltYXRlZExheWVyc0ltbWVkaWF0
ZWx5KQogICAgICAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIHBhaW50IGl0J3MgZW50aXJlIGNvbnRl
bnRzIG9uIHRoZSBmaXJzdCBwYWludAogICAgICAgICAvLyBpZiBpdCBpcyBjbG9zZSB0byB0aGUg
dmlld3BvcnQgc2l6ZSBhbmQgaGFzIHRoZSBhdmFpbGFibGUgbWVtb3J5LgogICAgICAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgICAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgICAgIGxheWVyLT51cGRh
dGVDb250ZW50UmVjdChtX3F1ZXVlLCB2aXNpYmxlUmVjdCwgMCwgbV9zdGF0cyk7CisgICAgICAg
IG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgICAgICBsYXllci0+
dXBkYXRlQ29udGVudChtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKICAgICAgICAgdXBkYXRlVGV4dHVy
ZXMoKTsKICAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsK
IApAQCAtNTY1LDQ5ICs1NjQsMzIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBh
aW50U21hbGxBbmltYXRlZExheWVyc0ltbWVkaWF0ZWx5KQogCiBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiB7Ci0gICAgLy8gVGhlIHRpbGUgc2l6
ZSBpcyAxMDB4MTAwLiBTZXR1cCAzeDMgdGlsZXMgd2l0aCBvbmUgMXgxIHZpc2libGUgdGlsZSBp
biB0aGUgY2VudGVyLgotICAgIEludFNpemUgY29udGVudEJvdW5kcygzMDAsIDMwMCk7Ci0gICAg
SW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKLSAg
ICBJbnRSZWN0IHZpc2libGVSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCk7Ci0KLSAgICAvLyBXZSBo
YXZlIGVub3VnaCBtZW1vcnkgZm9yIG9ubHkgdGhlIHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBy
dW4gb3V0IG9mIG1lbW9yeSBpbiBmaXJzdCBpZGxlIHBhaW50LgotICAgIGludCBtZW1vcnlMaW1p
dCA9IDQgKiAxMDAgKiAxMDA7IC8vIDEgdGlsZXMsIDQgYnl0ZXMgcGVyIHBpeGVsLgotCi0gICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShtZW1vcnlMaW1pdCwgMTAyNCwgQ0NSZW5k
ZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExh
eWVySW1wbCgxKSkpOwogCi0gICAgLy8gSW52YWxpZGF0ZXMgOSB0aWxlcyBhbmQgdGhlbiBwYWlu
dHMgb25lIHZpc2libGUgdGlsZS4KLSAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMp
OwotICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZVJlY3QpOwotICAgIGxh
eWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudFJlY3QpOworICAgIC8vIFdlIGhhdmUg
ZW5vdWdoIG1lbW9yeSBmb3Igb25seSB0aGUgdmlzaWJsZSByZWN0LCBzbyB3ZSB3aWxsIHJ1biBv
dXQgb2YgbWVtb3J5IGluIGZpcnN0IGlkbGUgcGFpbnQuCisgICAgaW50IG1lbW9yeUxpbWl0ID0g
NCAqIDEwMCAqIDEwMDsgLy8gMSB0aWxlcywgNCBieXRlcyBwZXIgcGl4ZWwuCisgICAgbV90ZXh0
dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtZW1vcnlMaW1pdCk7CiAKLSAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29u
dGVudFJlY3QobV9xdWV1ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3RhdHMpOworICAgIC8vIFRoZSB0
aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMg
dHdvIHRpbGVzLgorICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBuZWVkc1VwZGF0ZSA9IFVwZGF0ZUFuZFB1c2go
bGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEludFNpemUoMzAwLCAzMDApLCAvLyBCb3VuZHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSk7IC8vIFZpc2li
bGUKKyAgICB9CiAKICAgICAvLyBJZGxlLXBhaW50aW5nIHNob3VsZCBzZWUgbm8gbW9yZSBwcmlv
cml0eSB0aWxlcyBmb3IgcGFpbnRpbmcuCi0gICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lk
bGVQYWludCh2aXNpYmxlUmVjdCkpOwotCi0gICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICBsYXll
ci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgIEVYUEVDVF9GQUxTRShu
ZWVkc1VwZGF0ZSk7CiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1w
bCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDEsIDEpKTsKLQot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRh
dGVDb250ZW50UmVjdChtX3F1ZXVlLCB2aXNpYmxlUmVjdCwgMCwgbV9zdGF0cyk7Ci0KLSAgICAv
LyBXZSBzaG91bGRuJ3Qgc2lnbmFsIHdlIG5lZWQgYW5vdGhlciBpZGxlIHBhaW50LgotICAgIEVY
UEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKIH0KIAogVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMjQsIENDUmVuZGVy
ZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
ICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMSkpKTsKIApAQCAtNjE1LDI3ICs1OTcsMTYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMjsgaSsrKSB7CiAgICAgICAgIC8vIFByZXRlbmQgdGhlIGxheWVyIGlzIGFuaW1hdGluZy4K
ICAgICAgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm1Jc0FuaW1hdGluZyhhbmltYXRpbmdbaV0p
OwotCisgICAgICAgIAogICAgICAgICAvLyBUaGUgbGF5ZXIncyBib3VuZHMgYXJlIGVtcHR5Lgot
ICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0OwotCi0gICAgICAgIGxheWVyLT5zZXRCb3VuZHMo
Y29udGVudFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVj
dChjb250ZW50UmVjdCk7Ci0gICAgICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29u
dGVudFJlY3QpOwotCi0gICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9y
aXR5Q2FsY3VsYXRvcik7Ci0gICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKLQogICAgICAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgcGFpbnQgb3IgaWRsZS1wYWlu
dC4KLSAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRSZWN0
LCAwLCBtX3N0YXRzKTsKLQorICAgICAgICBib29sIG5lZWRzVXBkYXRlID0gVXBkYXRlQW5kUHVz
aChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRSZWN0KCkpOyAvLyBWaXNpYmxlCiAgICAgICAgIC8vIEVtcHR5
IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgogICAgICAgICBFWFBFQ1RfRVEoMHUsIGxheWVyLT5u
dW1QYWludGVkVGlsZXMoKSk7CiAKICAgICAgICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IG5lZWQg
cHJlcGFpbnQuCi0gICAgICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQoY29u
dGVudFJlY3QpKTsKLQotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwu
Z2V0KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UobmVlZHNVcGRhdGUpOwogCiAgICAgICAgIC8v
IEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgogICAgICAgICBFWFBFQ1RfRkFMU0UobGF5
ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOwpAQCAtNjQ0LDE0ICs2MTUsOSBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCiAKIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogewotICAg
IEludFNpemUgY29udGVudEJvdW5kcygxMDAsIDEwMCk7Ci0gICAgSW50UmVjdCBjb250ZW50UmVj
dChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKLQotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQ
b29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsK
LSAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOwogCiAgICAgLy8gQWx0ZXJuYXRl
IGJldHdlZW4gbm90IHZpc2libGUgYW5kIHZpc2libGUuCiAgICAgSW50UmVjdCB2KDAsIDAsIDEw
MCwgMTAwKTsKQEAgLTY2NCw2OSArNjMwLDYwIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogICAgIGJvb2wgaGF2ZVRpbGVbMTBdID0g
eyBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1
ZSwgdHJ1ZSB9OwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgICAg
IGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZVJlY3RbaV0pOwotCi0gICAgICAg
IC8vIFNraXAgaW52YWxpZGF0aW9uIG9uY2UgdG8gaW5zdXJlIHRoZSB0aWxlIHN0YXlzIGluIG1l
bW9yeSB3aGlsZSBub3QgdmlzaWJsZS4KLSAgICAgICAgaWYgKGludmFsaWRhdGVbaV0pCi0gICAg
ICAgICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKLQotICAg
ICAgICAvLyBQYWludCAvIGlkbGUtcGFpbnQuCi0gICAgICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVh
clByaW9yaXRpZXMoKTsKLSAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJp
b3JpdHlDYWxjdWxhdG9yKTsKLSAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOwotICAgICAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgdmlzaWJs
ZVJlY3RbaV0sIDAsIG1fc3RhdHMpOwotCi0gICAgICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0KKyAg
ICAgICAgYm9vbCBuZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgICAgICBpZiAoaW52YWxpZGF0ZVtp
XSkgeworICAgICAgICAgICAgbmVlZHNVcGRhdGUgPSBJbnZhbGlkYXRlVXBkYXRlQW5kUHVzaChs
YXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKDEwMCwgMTAwKSwgLy8gYm91bmRzCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSZWN0
W2ldLCAvLyB2aXNpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsgLy8gaW52YWxpZGF0ZQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbmVlZHNVcGRhdGUgPSBVcGRhdGVBbmRQdXNoKGxheWVy
LmdldCgpLCBsYXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50U2l6ZSgxMDAsIDEwMCksIC8vIGJvdW5kcworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSZWN0W2ldKTsgLy8gdmlzaWJsZQorICAgICAg
ICB9CisgICAKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIHNpZ25hbCBpZGxlIHBhaW50LCBh
cyB3ZSBwYWludGVkIHRoZSBlbnRpcmUgbGF5ZXIKICAgICAgICAgLy8gb3IgdGhlIGxheWVyIHdh
cyBub3QgdmlzaWJsZS4KLSAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWlu
dCh2aXNpYmxlUmVjdFtpXSkpOwotCi0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVySW1wbC5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiAgICAg
ICAgIEVYUEVDVF9FUShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSwgaGF2ZVRpbGVbaV0pOwog
ICAgIH0KIH0KIAotCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaW52YWxpZGF0ZUZy
b21QcmVwYXJlKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUg
aXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVz
LgotICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVyLT5z
ZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0g
ICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5
ZXJJbXBsLmdldCgpKTsKKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwu
Z2V0KCksCisgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7IC8vIHZp
c2libGUKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhlIGltcGwgc2lk
ZS4KICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQ
RUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogCiAgICAgbGF5ZXItPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyUHJlcGFyZUNvdW50KCk7Ci0gICAgLy8gSW52b2tl
IHVwZGF0ZUNvbnRlbnRSZWN0IGFnYWluLiBBcyB0aGUgbGF5ZXIgaXMgdmFsaWQgdXBkYXRlQ29u
dGVudFJlY3Qgc2hvdWxkbid0IGJlIGludm9rZWQgb24KKyAgICAvLyBJbnZva2UgdXBkYXRlQ29u
dGVudCBhZ2Fpbi4gQXMgdGhlIGxheWVyIGlzIHZhbGlkIHVwZGF0ZUNvbnRlbnRSZWN0IHNob3Vs
ZG4ndCBiZSBpbnZva2VkIG9uCiAgICAgLy8gdGhlIExheWVyVGV4dHVyZVVwZGF0ZXIuCi0gICAg
bGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
LCAwLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKKyAgICBVcGRhdGVBbmRQ
dXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICBJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKSk7IC8vIHZpc2libGUKICAgICBFWFBFQ1RfRVEoMCwgbGF5ZXIt
PmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVDb3VudCgpKTsKIAotICAgIGxheWVy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA1MCwgNTApKTsKLSAgICAvLyBz
ZXRSZWN0VG9JbnZhbGlkYXRlIHRyaWdnZXJzIGludmFsaWRhdGVDb250ZW50UmVjdCgpIGJlaW5n
IGludm9rZWQgZnJvbSB1cGRhdGVDb250ZW50UmVjdC4KKyAgICAvLyBzZXRSZWN0VG9JbnZhbGlk
YXRlIHRyaWdnZXJzIGludmFsaWRhdGVDb250ZW50UmVjdCgpIGJlaW5nIGludm9rZWQgZnJvbSB1
cGRhdGVDb250ZW50LgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRS
ZWN0VG9JbnZhbGlkYXRlKEludFJlY3QoMjUsIDI1LCA1MCwgNTApLCBsYXllci5nZXQoKSk7CiAg
ICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyUHJlcGFyZUNvdW50KCk7
Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAw
LCAyMDApLCAwLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKKyAgICBJbnZh
bGlkYXRlVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludFNpemUoMTAwLCAyMDApLCAvLyBib3VuZHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgLy8gdmlzaWJs
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgNTAsIDUwKSk7IC8v
IGludmFsaWRhdGUKICAgICBFWFBFQ1RfRVEoMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnByZXBhcmVDb3VudCgpKTsKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+Y2xlYXJQcmVwYXJlQ291bnQoKTsKKwogICAgIC8vIFRoZSBsYXllciBzaG91bGQgc3Rp
bGwgYmUgaW52YWxpZCBhcyB1cGRhdGVDb250ZW50UmVjdCBpbnZva2VkIGludmFsaWRhdGUuCi0g
ICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAy
MDApLCAwLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKKyAgICBVcGRhdGVB
bmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICBJ
bnRTaXplKDEwMCwgMjAwKSwgLy8gYm91bmRzCisgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAs
IDAsIDEwMCwgMjAwKSk7IC8vIHZpc2libGUKICAgICBFWFBFQ1RfRVEoMSwgbGF5ZXItPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVDb3VudCgpKTsKIH0KIApAQCAtNzM0LDkgKzY5
MSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hl
bkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQpCiB7CiAgICAgLy8gVGhlIHVwZGF0ZVJlY3QgKHRoYXQg
aW5kaWNhdGVzIHdoYXQgd2FzIGFjdHVhbGx5IHBhaW50ZWQpIHNob3VsZCBiZSBpbgogICAgIC8v
IGxheWVyIHNwYWNlLCBub3QgdGhlIGNvbnRlbnQgc3BhY2UuCi0KLSAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50
UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcz4gbGF5ZXIg
PSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzKHRleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcz4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzKG1fdGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKIAogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMoMCwgMCwgMzAwLCAyMDApOwpAQCAtNzUx
LDE2ICs3MDYsMTYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0
ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkKICAgICBsYXllci0+aW52YWxpZGF0ZUNv
bnRlbnRSZWN0KGNvbnRlbnRCb3VuZHMpOwogCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRl
bnRCb3VuZHMsIDAsIG1fc3RhdHMpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIDAsIG1fc3RhdHMp
OwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAzMDAsIDMwMCAqIDAu
OCksIGxheWVyLT51cGRhdGVSZWN0KCkpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAKICAgICAv
LyBBZnRlciB0aGUgdGlsZXMgYXJlIHVwZGF0ZWQgb25jZSwgYW5vdGhlciBpbnZhbGlkYXRlIG9u
bHkgbmVlZHMgdG8gdXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyLgogICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVu
dEJvdW5kcyk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRC
b3VuZHMsIDAsIG1fc3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIDAs
IG1fc3RhdHMpOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdChsYXllckJvdW5k
cyksIGxheWVyLT51cGRhdGVSZWN0KCkpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAKQEAgLTc2
OCwxNSArNzIzLDE0IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRh
dGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQpCiAgICAgSW50UmVjdCBwYXJ0aWFsRGFt
YWdlKDMwLCAxMDAsIDEwLCAxMCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChw
YXJ0aWFsRGFtYWdlKTsKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0
eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
LSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudEJvdW5kcywgMCwg
bV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgRVhQRUNU
X0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDQ1LCA4MCwgMTUsIDgpLCBsYXllci0+dXBkYXRlUmVj
dCgpKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFsaWRh
dGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7
Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBs
PiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKQEAg
LTc5MCw4ICs3NDQsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52
YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogCiAgICAgLy8gUHVzaCB0aGUgdGls
ZXMgdG8gdGhlIGltcGwgc2lkZSBhbmQgY2hlY2sgdGhhdCB0aGVyZSBpcyBleGFjdGx5IG9uZS4K
ICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIDAsIG1fc3Rh
dHMpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxh
eWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIHVwZGF0ZVRleHR1
cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKICAg
ICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC04MDcsOCArNzYx
LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldo
ZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIAogICAgIC8vIFRoZSBpbXBsIHNpZGUgc2hvdWxkIGdl
dCAyeDIgdGlsZXMgbm93LgogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9y
aXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDIw
MCwgMjAwKSwgMCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgMCwgbV9zdGF0cyk7
CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXll
ckltcGwuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDAp
KTsKQEAgLTgyMCw4ICs3NzQsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVy
aWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIC8vIGltcGwgc2lk
ZS4KICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgbGF5ZXItPnNldFRleHR1cmVQ
cmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVu
dFJlY3QobV9xdWV1ZSwgSW50UmVjdCgxLCAwLCAwLCAxKSwgMCwgbV9zdGF0cyk7Ci0gICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIG1fdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOwogCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5
ZXJJbXBsLmdldCgpKTsKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwg
MCkpOwpAQCAtODgzLDE2ICs4MzYsMTUgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHNraXBzRHJhd0dldHNSZXNldCkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHJl
c2l6ZVRvU21hbGxlcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYw
KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
bV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDcwMCwgNzAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAs
IDAsIDcwMCwgNzAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0
KDAsIDAsIDcwMCwgNzAwKSk7CiAKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9w
cmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAw
LCA3MDAsIDcwMCksIDAsIG1fc3RhdHMpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIDAsIG1fc3Rh
dHMpOwogCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDIwMCwgMjAwKSk7CiAgICAgbGF5
ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDIwMCwgMjAwKSk7CkBAIC05
MDAsOCArODUyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHJlc2l6ZVRvU21h
bGxlcikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGh1Z2VMYXllclVwZGF0ZUNy
YXNoKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAyNCoxMDI0
LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CiAKICAgICBpbnQgc2l6ZSA9IDEgPDwgMzA7CiAgICAgbGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKHNpemUsIHNpemUpKTsKQEAgLTkxMCw4ICs4NjEsOCBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgaHVnZUxheWVyVXBkYXRlQ3Jhc2gpCiAKICAgICAvLyBF
bnN1cmUgbm8gY3Jhc2ggZm9yIGJvdW5kcyB3aGVyZSBzaXplICogc2l6ZSB3b3VsZCBvdmVyZmxv
dyBhbiBpbnQuCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxj
dWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAg
bGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNzAwLCA3MDAp
LCAwLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKIH0KIAog
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQpAQCAtMTA0NCw4
ICs5OTUsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMp
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2Nj
bHVzaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28g
dGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMTA1NCwxNSArMTAwNCwxNCBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aG91dE9jY2x1c2lvbikK
ICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
KTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRv
cik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVy
LT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCwg
bV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgRVhQRUNU
X0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50
KCkpOwogfQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0
aE9jY2x1c2lvbikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VU
aWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3Rl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRl
ZDsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4KQEAgLTEwNzUsOCArMTAyNCw4
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVz
aW9uKQogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAs
IDYwMCkpOwogCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxj
dWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAg
bGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDAp
LCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsICZvY2NsdWRlZCwg
bV9zdGF0cyk7CiAgICAgRVhQRUNUX0VRKDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQu
b3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC0xMDg1
LDExICsxMDM0LDExIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50
ZWRXaXRoT2NjbHVzaW9uKQogCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCkt
PmNsZWFyUHJlcGFyZVJlY3RDb3VudCgpOwogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwog
CiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjUwLCAyMDAsIDMwMCwgMTAwKSk7
CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAw
KSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwg
NjAwLCA2MDApLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50
KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgRVhQRUNUX0VRKDM2LTIsIGxheWVy
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCiAgICAg
RVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFx
dWUoKSwgMCwgMSk7CkBAIC0xMDk4LDExICsxMDQ3LDExIEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uKQogCiAgICAgbGF5ZXItPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyUHJlcGFyZVJlY3RDb3VudCgpOwogICAgIGxheWVy
LT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygpOwogCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3Qo
MjUwLCAyNTAsIDMwMCwgMTAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJ
bnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1f
cXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAg
IGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAg
RVhQRUNUX0VRKDM2LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJl
Y3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygp
LnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTExMiw4ICsxMDYxLDcgQEAgVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb24pCiAK
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9u
QW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuCkBAIC0x
MTI3LDggKzEwNzUsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogICAgIGxheWVyLT5pbnZh
bGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogCiAgICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRS
ZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCAzNjApLCAmb2NjbHVkZWQsIG1fc3RhdHMp
OworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVy
LT51cGRhdGVDb250ZW50KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgRVhQRUNU
X0VRKDI0LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENv
dW50KCkpOwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4
ZWxzVXBsb2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC0xMTQzLDggKzEwOTEsOCBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2li
bGl0eUNvbnN0cmFpbnRzKQogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVj
dCgwLCAwLCA2MDAsIDM1MCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50
UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyht
X3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAs
IDAsIDYwMCwgMzUwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVl
LCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgyNC02LCBsYXllci0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9O
RUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAs
IDEpOwpAQCAtMTE1OSw4ICsxMTA3LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKICAgICBs
YXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsKICAg
ICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsK
ICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDM0MCksICZvY2NsdWRl
ZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsK
ICAgICBFWFBFQ1RfRVEoMjQtNiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnBy
ZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01l
dHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTExNzEsOCArMTExOSw3
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVz
aW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB0aWxlc05vdFBhaW50ZWRXaXRob3V0SW52YWxpZGF0aW9uKQogewotICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNv
bnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBp
cyAxMDB4MTAwLgpAQCAtMTE4NCw4ICsxMTMxLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiAgICAgbGF5ZXItPnNl
dFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAgICAgbGF5ZXIt
PmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAgICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQsIG1fc3Rh
dHMpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxh
eWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgRVhQ
RUNUX0VRKDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVj
dENvdW50KCkpOwogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CkBAIC0xMTk4LDEwICsxMTQ1LDEwIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB0aWxlc05vdFBhaW50ZWRXaXRob3V0SW52YWxpZGF0aW9uKQogCiAgICAgbGF5ZXItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyUHJlcGFyZVJlY3RDb3VudCgpOwogICAgIGxh
eWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIG1fdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOwogCiAgICAgLy8gUmVwYWludCB3aXRob3V0IG1hcmtpbmcg
aXQgZGlydHkuIFRoZSAzIGN1bGxlZCB0aWxlcyB3aWxsIGJlIHByZS1wYWludGVkIG5vdy4KLSAg
ICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1
ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICBFWFBFQ1RfRVEoMywgbGF5ZXItPmZha2VMYXll
clRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVB
UihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAx
KTsKQEAgLTEyMTEsOCArMTE1OCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0
aWxlc05vdFBhaW50ZWRXaXRob3V0SW52YWxpZGF0aW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiB7Ci0g
ICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NS
ZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVt
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQo
KSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUg
dGlsZSBzaXplIGlzIDEwMHgxMDAuCkBAIC0xMjMwLDggKzExNzYsOCBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMp
CiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGxh
eWVyLT5jb250ZW50Qm91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0
KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVj
dCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9x
dWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICBFWFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBF
Q1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgp
LCAwLCAxKTsKQEAgLTEyNDEsOCArMTE4Nyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVHJhbnNmb3JtcykKIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRTY2FsaW5n
KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEw
MjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCiAgICAg
Ly8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLgpAQCAtMTI2Miw4ICsxMjA3LDggQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRTY2Fs
aW5nKQogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBsYXllci0+Y29udGVudEJvdW5kcygpKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50
UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIElu
dFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIG1fdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50
KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgLy8gVGhlIGNvbnRlbnQgaXMgaGFs
ZiB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIgKHNvIHRoZSBudW1iZXIgb2YgdGlsZXMgaXMgZmV3ZXIp
LgogICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIGNvbnRlbnQgaXMgMzAweDMwMCwgYW5kIHNpbmNl
IHRoZSB0aWxlIHNpemUgaXMgMTAwLCB0aGUKICAgICAvLyBudW1iZXIgb2YgdGlsZXMgM3gzLgpA
QCAtMTI4Myw4ICsxMjI4LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVz
UGFpbnRlZFdpdGhPY2NsdXNpb25BbmRTY2FsaW5nKQogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Y29udGVudEJvdW5kcygpKSk7CiAg
ICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7
CiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsK
LSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVw
ZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVk
ZWQsIG1fc3RhdHMpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7
CiAgICAgRVhQRUNUX0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnBy
ZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01l
dHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEzMDQsOCArMTI0OSw4
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVz
aW9uQW5kU2NhbGluZykKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdCht
X3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAg
ICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBk
YXRlQ29udGVudChtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSg5
LTEsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkp
OwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBs
b2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC0xMzE1LDggKzEyNjAsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAK
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lv
bikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAx
MDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKIApAQCAtMTMzNCwxMiArMTI3OCwx
MiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVS
ZWdpb24pCiAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogCiAgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CiAKICAgICAvLyBJZiB0aGUgbGF5ZXIgZG9lc24ndCBwYWludCBvcGFxdWUg
Y29udGVudCwgdGhlbiB0aGUgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24gc2hvdWxkIGJlIGVt
cHR5LgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWlu
dFJlY3QoSW50UmVjdCgpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRl
bnRCb3VuZHMpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50
Qm91bmRzLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1f
cXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+
dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKTsKICAgICBFWFBFQ1RfVFJVRShvcGFxdWVDb250
ZW50cy5pc0VtcHR5KCkpOwogCkBAIC0xMzUyLDcgKzEyOTYsNyBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pCiAgICAgb3BhcXVlUGFp
bnRSZWN0ID0gSW50UmVjdCgxMCwgMTAsIDkwLCAxOTApOwogICAgIGxheWVyLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3Qob3BhcXVlUGFpbnRSZWN0KTsKICAg
ICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRCb3VuZHMpOwotICAgIGxheWVy
LT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50Qm91bmRzLCAmb2NjbHVkZWQsIG1f
c3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsICZvY2NsdWRlZCwgbV9z
dGF0cyk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBvcGFxdWVDb250ZW50cyA9IGxheWVy
LT52aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIEVYUEVDVF9FUV9SRUNUKGludGVy
c2VjdGlvbihvcGFxdWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpLCBvcGFxdWVDb250ZW50cy5i
b3VuZHMoKSk7CkBAIC0xMzY1LDcgKzEzMDksNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pCiAKICAgICAvLyBJZiB3ZSBwYWludCBh
Z2FpbiB3aXRob3V0IGludmFsaWRhdGluZywgdGhlIHNhbWUgc3R1ZmYgc2hvdWxkIGJlIG9wYXF1
ZS4KICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRS
ZWN0KEludFJlY3QoKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNv
bnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwog
ICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCk7
CiAgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9uKG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJs
ZUJvdW5kcyksIG9wYXF1ZUNvbnRlbnRzLmJvdW5kcygpKTsKQEAgLTEzODAsNyArMTMyNCw3IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lv
bikKICAgICAvLyBub3QgYmUgYWZmZWN0ZWQuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRSZWN0KCkpOwogICAgIGxheWVyLT5pbnZh
bGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxLCAxKSk7Ci0gICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7
CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsK
ICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZpc2li
bGVDb250ZW50T3BhcXVlUmVnaW9uKCk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9u
KG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9wYXF1ZUNvbnRlbnRzLmJvdW5kcygp
KTsKQEAgLTEzOTUsNyArMTMzOSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2
aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKICAgICAvLyBub3QgYmUgYWZmZWN0ZWQuCiAgICAg
bGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRS
ZWN0KCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgxMCwgMTAs
IDEsIDEpKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudEJv
dW5kcywgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1
ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgb3Bh
cXVlQ29udGVudHMgPSBsYXllci0+dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKTsKICAgICBF
WFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24oSW50UmVjdCgxMCwgMTAwLCA5MCwgMTAwKSwgdmlz
aWJsZUJvdW5kcyksIG9wYXF1ZUNvbnRlbnRzLmJvdW5kcygpKTsKQEAgLTE0MDksOCArMTM1Myw3
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJl
Z2lvbikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRy
aWNzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQs
IDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0
ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVt
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1h
bmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogCkBAIC0xNDI4LDEyICsxMzcx
LDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhlbHNQYWludGVkTWV0cmlj
cykKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKIAogICAgIC8vIEludmFsaWRhdGVzIGFuZCBwYWludHMgdGhlIHdob2xlIGxheWVy
LgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJl
Y3QoSW50UmVjdCgpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRC
b3VuZHMpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50Qm91
bmRzLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVl
dWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBvcGFx
dWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIEVY
UEVDVF9UUlVFKG9wYXF1ZUNvbnRlbnRzLmlzRW1wdHkoKSk7CkBAIC0xNDQ4LDcgKzEzOTEsNyBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJpY3MpCiAg
ICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJ
bnRSZWN0KCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAw
LCAxLCAxKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDUwLCAy
MDAsIDEwLCAxMCkpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250
ZW50Qm91bmRzLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50
KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAg
ICBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpOwog
ICAgIEVYUEVDVF9UUlVFKG9wYXF1ZUNvbnRlbnRzLmlzRW1wdHkoKSk7CkBAIC0xNjYyLDkgKzE2
MDUsNyBAQCBwcml2YXRlOgogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50
ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3RvcnRlZER1cmluZ1BhaW50KQogewotICAgIE93blB0
cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQwMDAwMDAsIDQwMDAwMDAsIENDUmVuZGVyZXI6OkNv
bnRlbnRQb29sKSk7Ci0KLSAgICBSZWZQdHI8VXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyID0gYWRvcHRSZWYobmV3IFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVt
KHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPFVwZGF0ZVRyYWNraW5nVGlsZWRM
YXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBVcGRhdGVUcmFja2luZ1RpbGVkTGF5
ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IGxheWVy
UmVjdCgwLCAwLCAzMCwgMzEpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllclJlY3QubG9j
YXRpb24oKSk7CkBAIC0xNjc3LDEwICsxNjE4LDEwIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nUGFpbnQp
CiAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwogCiAgICAg
bGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHdob2xlIHRpbGUu
Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRSZWN0LCAwLCBt
X3N0YXRzKTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCAwLCBtX3N0YXRzKTsK
ICAgICBsYXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cmVzZXRQYWludGVkUmVjdCgpOwog
CiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoKSwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQ
YWludGVyKCktPnBhaW50ZWRSZWN0KCkpOwpAQCAtMTY5MiwxNiArMTYzMywxNCBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3Rv
cnRlZER1cmluZ1BhaW50KQogCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZW50aXJlIGxheWVyIGlu
IGNvbnRlbnQgc3BhY2UuIFdoZW4gcGFpbnRpbmcsIHRoZSByZWN0IGdpdmVuIHRvIHdlYmtpdCBz
aG91bGQgbWF0Y2ggdGhlIGxheWVyJ3MgYm91bmRzLgogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29u
dGVudFJlY3QoY29udGVudFJlY3QpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1
ZXVlLCBjb250ZW50UmVjdCwgMCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQo
bV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEobGF5ZXJSZWN0
LCBsYXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cGFpbnRlZFJlY3QoKSk7CiB9CiAKIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90
RGlzdG9ydGVkRHVyaW5nSW52YWxpZGF0aW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKDQwMDAwMDAsIDQwMDAwMDAsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKSk7Ci0K
LSAgICBSZWZQdHI8VXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CisgICAgUmVmUHRyPFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bShtX3Rl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IGxheWVyUmVjdCgwLCAwLCAzMCwg
MzEpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllclJlY3QubG9jYXRpb24oKSk7CkBAIC0x
NzEzLDEwICsxNjUyLDEwIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRl
Z2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nSW52YWxpCiAgICAgbGF5ZXItPnNl
dERyYXdhYmxlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwogCiAgICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHdob2xlIHRpbGUuCi0gICAgbGF5ZXItPnVw
ZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRSZWN0LCAwLCBtX3N0YXRzKTsKKyAgICBs
YXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKICAgICBsYXllci0+dHJh
Y2tpbmdMYXllclBhaW50ZXIoKS0+cmVzZXRQYWludGVkUmVjdCgpOwogCiAgICAgRVhQRUNUX0lO
VF9SRUNUX0VRKEludFJlY3QoKSwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVyKCktPnBhaW50
ZWRSZWN0KCkpOwpAQCAtMTcyOCw3ICsxNjY3LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdJbnZhbGkK
IAogICAgIC8vIEludmFsaWRhdGUgdGhlIGVudGlyZSBsYXllciBpbiBsYXllciBzcGFjZS4gV2hl
biBwYWludGluZywgdGhlIHJlY3QgZ2l2ZW4gdG8gd2Via2l0IHNob3VsZCBtYXRjaCB0aGUgbGF5
ZXIncyBib3VuZHMuCiAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3QobGF5ZXJSZWN0KTsK
LSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudFJlY3QsIDAsIG1f
c3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIDAsIG1fc3RhdHMpOwog
CiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKGxheWVyUmVjdCwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQ
YWludGVyKCktPnBhaW50ZWRSZWN0KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158907</attachid>
            <date>2012-08-16 14:43:18 -0700</date>
            <delta_ts>2012-08-22 09:21:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94165-20120816144242.patch</filename>
            <type>text/plain</type>
            <size>83995</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1Njg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzAyNTFhYmExZDUxMWRh
NDFmOTE4ZWFlMjllNzkxOWY2MThlZWQ2OC4uYjQyOGEyYzQ5YjBlMjE5YzU3MGFjYzE1ZjFhNjc0
Njc3ZjI1YzEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA4LTE2ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNpbXBs
aWZ5IHVwZGF0ZUNvbnRlbnRSZWN0LCByZW1vdmluZyByZWN0IHBhcmFtZXRlciwgcmVmYWN0b3Ig
dW5pdCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIHZpc2libGUgcmVjdCBwYXJhbWV0ZXIgZnJvbSBUaWxlZExheWVyQ2hyb21pdW0g
ZnVuY3Rpb25zLiBQYXNzaW5nIGEKKyAgICAgICAgcmVjdCB0aGF0IGlzIG5vdCB0aGUgdmlzaWJs
ZSByZWN0IHdvdWxkbid0IG1ha2Ugc2Vuc2UsIGFuZCBzb29uIHdlIG1pZ2h0CisgICAgICAgIG5l
ZWQgZnVydGhlciB2aXNpYmlsaXR5IGluZm9ybWF0aW9uLgorCisgICAgICAgIEluIHJlZmFjdG9y
aW5nIHRoZSB1bml0IHRlc3RzLCBJIHJlbW92ZWQgdGV4dHVyZSBtYW5hZ2VyIGZyb20gYWxsIHRl
c3RzCisgICAgICAgIGFuZCBwdXQgaXQgaW4gdGhlIHRlc3QgY2xhc3MuIEkgYWxzbyBtYWRlIHNv
bWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gCisgICAgICAgIHNpbXVsYXRlIHRoZSBjb21taXQgZmxv
dyBhbmQgcmVtb3ZlIHRvbnMgb2YgYm9pbGVycGxhdGUgY29kZS4gSSByZWZhY3RvcmVkCisgICAg
ICAgIGFib3V0IGhhbGYgdGhlIHVuaXQgdGVzdHMgdG8gdXNlIHRoZSB1dGlsaXR5IGZ1bmN0aW9u
cy4KKworICAgICAgICBSZWZhY3RvcmVkIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6bmVlZE1vcmVVcGRhdGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpyZXNldFVwZGF0ZVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50UmVjdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
Lmg6CisgICAgICAgIChUaWxlZExheWVyQ2hyb21pdW0pOgorCiAyMDEyLTA4LTE1ICBKb2FubWFy
aWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR3RrXSBhdGtfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQoKSBmYWlscyB0byBwcm92aWRlIHRoZSBjb3JyZWN0IGxpbmUgZm9y
IHBhcmFncmFwaHMgaW4gbGlzdCBpdGVtcyB3aG9zZSB0ZXh0IHdyYXBzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGExYjhlZWE3MzMzNjAzYWViN2RjOTViZDk1Yzk5MjVjNmEzMmNjNDMu
LmUwYmM5MjBmOGNjOGI3ZjcxNjlkMDE5NGJkNWY3NTUxMzhhZTUxYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMDgtMTYgIEVyaWMgUGVubmVyICA8
ZXBlbm5lckBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2ltcGxpZnkgdXBkYXRl
Q29udGVudFJlY3QsIHJlbW92aW5nIHJlY3QgcGFyYW1ldGVyLCByZWZhY3RvciB1bml0IHRlc3Rz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQxNjUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiByZWZh
Y3RvcmluZyB0aGUgdW5pdCB0ZXN0cywgSSByZW1vdmVkIHRleHR1cmUgbWFuYWdlciBmcm9tIGFs
bCB0ZXN0cworICAgICAgICBhbmQgcHV0IGl0IGluIHRoZSB0ZXN0IGNsYXNzLiBJIGFsc28gbWFk
ZSBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHRvIAorICAgICAgICBzaW11bGF0ZSB0aGUgY29tbWl0
IGZsb3cgYW5kIHJlbW92ZSB0b25zIG9mIGJvaWxlcnBsYXRlIGNvZGUuIEkgcmVmYWN0b3JlZAor
ICAgICAgICBhYm91dCBoYWxmIHRoZSB1bml0IHRlc3RzIHRvIHVzZSB0aGUgdXRpbGl0eSBmdW5j
dGlvbnMuCisKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGUpOgorICAg
ICAgICAqIHRlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaDoKKyAgICAgICAgKEZha2VUaWxl
ZExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwOgorCiAyMDEyLTA4LTE1ICBBbm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBBZGQgdGhlIHRpbWVzdGFtcE9mZnNldCBhdHRyaWJ1dGUgdG8gU291cmNlQnVm
ZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDFmOWFkMjE2ZTkx
ODNlYjYxZDkxNDYzYjM1ODVjMjU0MGM3ZTJkYjMuLmVmZGMzODY1MzgyYzFmYTg0NmRlMDg1YmQ1
NGFlOWVmN2Q4OTc5ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTk2LDIzICs5NiwxMyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJp
b3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpbwogdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgQ0NP
Y2NsdXNpb25UcmFja2VyKiBvY2NsdXNpb24sIENDUmVuZGVyaW5nU3RhdHMmIHN0YXRzKQogewog
ICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKLQotICAgIEludFJlY3QgY29udGVu
dFJlY3Q7Ci0KLSAgICAvLyBBbHdheXMgY2FsbCB1cGRhdGVDb250ZW50UmVjdCgpIGJ1dCB3aXRo
IGFuIGVtcHR5IGxheWVyIHJlY3RhbmdsZSB3aGVuCi0gICAgLy8gbGF5ZXIgZG9lc24ndCBkcmF3
IGNvbnRlbnRzLgotICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgY29udGVudFJlY3Qg
PSB2aXNpYmxlQ29udGVudFJlY3QoKTsKLQotICAgIHVwZGF0ZUNvbnRlbnRSZWN0KHF1ZXVlLCBj
b250ZW50UmVjdCwgb2NjbHVzaW9uLCBzdGF0cyk7CisgICAgdXBkYXRlQ29udGVudChxdWV1ZSwg
b2NjbHVzaW9uLCBzdGF0cyk7CiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAogYm9v
bCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6bmVlZE1vcmVVcGRhdGVzKCkKIHsKLSAgICBpZiAoIWRy
YXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG5lZWRzSWRs
ZVBhaW50KHZpc2libGVDb250ZW50UmVjdCgpKTsKKyAgICByZXR1cm4gbmVlZHNJZGxlUGFpbnQo
KTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJ
Zk5lZWRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCA1MDczZDFjYzhh
MTY1NTdkNzQzYTE2NzlkMGFjMDgxZmFlNGJhODJhLi44YWM1NDYwMzJjMGM2OWI3NTA3NzI5Mjli
MDY1YWM4MmY0YWZkMDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE1
MSw3ICsxNTEsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVyZVVw
ZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgQ0NPY2NsdXNpb25UcgogICAgICAgICBtX25lZWRzRGlz
cGxheSA9IGZhbHNlOwogICAgIH0KIAotICAgIHVwZGF0ZUNvbnRlbnRSZWN0KHF1ZXVlLCB2aXNp
YmxlQ29udGVudFJlY3QoKSwgb2NjbHVzaW9uLCBzdGF0cyk7CisgICAgdXBkYXRlQ29udGVudChx
dWV1ZSwgb2NjbHVzaW9uLCBzdGF0cyk7CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpj
cmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGFmYmU4ZjIwYzM2OWE1NzcwN2NmNjE3MzVmYzliMzBkY2UyY2I4MzEuLmI5ZjBk
ODQzN2I3ZWFhZTc0MmIyMWNmMTU0YzI3M2Q1YTZkOGVkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcApAQCAtNTU1LDExICs1NTUsNiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlVGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgaW50IGxlZnQs
CiAgICAgfQogfQogCi12b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRp
ZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaXR5Q2FsYykKLXsKLSAgICBzZXRU
ZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGMsIHZpc2libGVDb250ZW50UmVjdCgp
KTsKLX0KLQogbmFtZXNwYWNlIHsKIC8vIFRoaXMgcGlja3MgYSBzbWFsbCBhbmltYXRlZCBsYXll
ciB0byBiZSBhbnl0aGluZyBsZXNzIHRoYW4gb25lIHZpZXdwb3J0LiBUaGlzCiAvLyBpcyBzcGVj
aWZpY2FsbHkgZm9yIHBhZ2UgdHJhbnNpdGlvbnMgd2hpY2ggYXJlIHZpZXdwb3J0LXNpemVkIGxh
eWVycy4gVGhlIGV4dHJhCkBAIC01OTQsNyArNTg5LDcgQEAgdm9pZCBzZXRQcmlvcml0eUZvclRl
eHR1cmUoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaXR5Q2FsYywKIH0KIH0KIAot
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0KGNvbnN0
IENDUHJpb3JpdHlDYWxjdWxhdG9yJiBwcmlvcml0eUNhbGMsIGNvbnN0IEludFJlY3QmIHZpc2li
bGVDb250ZW50UmVjdCkKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3Jp
dGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpb3JpdHlDYWxjKQogewogICAgIHVw
ZGF0ZUJvdW5kcygpOwogICAgIHJlc2V0VXBkYXRlU3RhdGUoKTsKQEAgLTYwNiw3ICs2MDEsNyBA
QCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29u
c3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgYm9vbCBzbWFsbEFuaW1hdGVkTGF5ZXIgPSBp
c1NtYWxsQW5pbWF0ZWRMYXllcih0aGlzKTsKIAogICAgIC8vIE1pbmltYWxseSBjcmVhdGUgdGhl
IHRpbGVzIGluIHRoZSBkZXNpcmVkIHByZS1wYWludCByZWN0LgotICAgIEludFJlY3QgY3JlYXRl
VGlsZXNSZWN0ID0gaWRsZVBhaW50UmVjdCh2aXNpYmxlQ29udGVudFJlY3QpOworICAgIEludFJl
Y3QgY3JlYXRlVGlsZXNSZWN0ID0gaWRsZVBhaW50UmVjdCgpOwogICAgIGlmICghY3JlYXRlVGls
ZXNSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OwogICAgICAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY3JlYXRlVGlsZXNS
ZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwpAQCAtNjIwLDcgKzYxNSw3IEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25zdCBDQ1By
aW9yaXR5Q2FsY3VsYXRvciYKIAogICAgIC8vIEFsc28sIG1pbmltYWxseSBjcmVhdGUgYWxsIHRp
bGVzIGZvciBzbWFsbCBhbmltYXRlZCBsYXllcnMgYW5kIGFsc28KICAgICAvLyBkb3VibGUtYnVm
ZmVyIHRoZW0gc2luY2Ugd2UgaGF2ZSBsaW1pdGVkIHRoZWlyIHNpemUgdG8gYmUgcmVhc29uYWJs
ZS4KLSAgICBJbnRSZWN0IGRvdWJsZUJ1ZmZlcmVkUmVjdCA9IHZpc2libGVDb250ZW50UmVjdDsK
KyAgICBJbnRSZWN0IGRvdWJsZUJ1ZmZlcmVkUmVjdCA9IHZpc2libGVDb250ZW50UmVjdCgpOwog
ICAgIGlmIChzbWFsbEFuaW1hdGVkTGF5ZXIpCiAgICAgICAgIGRvdWJsZUJ1ZmZlcmVkUmVjdCA9
IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKTsKIApAQCAtNjQ5LDcg
KzY0NCw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0lu
UmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKICAgICAgICAgICAgICAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSk7CiAgICAgICAgICAgICAgICAgdGls
ZS0+ZGlydHlSZWN0ID0gdGlsZVJlY3Q7CiAgICAgICAgICAgICAgICAgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSogYmFja0J1ZmZlciA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAgICAgICAg
ICAgICBzZXRQcmlvcml0eUZvclRleHR1cmUocHJpb3JpdHlDYWxjLCB2aXNpYmxlQ29udGVudFJl
Y3QsIHRpbGUtPmRpcnR5UmVjdCwgZHJhd3NUb1Jvb3QsIHNtYWxsQW5pbWF0ZWRMYXllciwgYmFj
a0J1ZmZlci0+dGV4dHVyZSgpKTsKKyAgICAgICAgICAgICAgICBzZXRQcmlvcml0eUZvclRleHR1
cmUocHJpb3JpdHlDYWxjLCB2aXNpYmxlQ29udGVudFJlY3QoKSwgdGlsZS0+ZGlydHlSZWN0LCBk
cmF3c1RvUm9vdCwgc21hbGxBbmltYXRlZExheWVyLCBiYWNrQnVmZmVyLT50ZXh0dXJlKCkpOwog
ICAgICAgICAgICAgICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gZnJvbnRCdWZmZXIg
PSBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6Y3JlYXRlKGJhY2tCdWZmZXItPnRleHR1cmUoKS0+dGV4
dHVyZU1hbmFnZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrQnVmZmVy
LT50ZXh0dXJlKCktPnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNr
QnVmZmVyLT50ZXh0dXJlKCktPmZvcm1hdCgpKTsKQEAgLTY2Nyw3ICs2NjIsNyBAQCB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3QgQ0NQcmlv
cml0eUNhbGN1bGF0b3ImCiAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSk7Ci0g
ICAgICAgIHNldFByaW9yaXR5Rm9yVGV4dHVyZShwcmlvcml0eUNhbGMsIHZpc2libGVDb250ZW50
UmVjdCwgdGlsZVJlY3QsIGRyYXdzVG9Sb290LCBzbWFsbEFuaW1hdGVkTGF5ZXIsIHRpbGUtPm1h
bmFnZWRUZXh0dXJlKCkpOworICAgICAgICBzZXRQcmlvcml0eUZvclRleHR1cmUocHJpb3JpdHlD
YWxjLCB2aXNpYmxlQ29udGVudFJlY3QoKSwgdGlsZVJlY3QsIGRyYXdzVG9Sb290LCBzbWFsbEFu
aW1hdGVkTGF5ZXIsIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCkpOwogICAgIH0KIH0KIApAQCAtNjgy
LDYgKzY3Nyw5IEBAIFJlZ2lvbiBUaWxlZExheWVyQ2hyb21pdW06OnZpc2libGVDb250ZW50T3Bh
cXVlUmVnaW9uKCkgY29uc3QKIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRl
U3RhdGUoKQogeworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CisgICAgbV9mYWlsZWRVcGRhdGUg
PSBmYWxzZTsKKwogICAgIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOwogICAgIGZvciAoQ0NMYXllclRpbGluZ0Rh
dGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9
IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwpAQCAtNjky
LDEzICs2OTAsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRlU3RhdGUo
KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRSZWN0
KENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qs
IGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciogb2NjbHVzaW9uLCBDQ1JlbmRlcmluZ1N0YXRzJiBz
dGF0cykKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50KENDVGV4dHVyZVVw
ZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2VyKiBvY2NsdXNpb24sIEND
UmVuZGVyaW5nU3RhdHMmIHN0YXRzKQogewotICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Ci0gICAg
bV9mYWlsZWRVcGRhdGUgPSBmYWxzZTsKKyAgICBBU1NFUlQoIW1fc2tpcHNEcmF3ICYmICFtX2Zh
aWxlZFVwZGF0ZSk7IC8vIERpZCByZXNldFVwZGF0ZVN0YXRlIGdldCBza2lwcGVkPwogICAgIHVw
ZGF0ZUJvdW5kcygpOwotCi0gICAgaWYgKG1fdGlsZXItPmhhc0VtcHR5Qm91bmRzKCkpCisgICAg
aWYgKG1fdGlsZXItPmhhc0VtcHR5Qm91bmRzKCkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBib29sIGRpZFBhaW50ID0gZmFsc2U7CkBAIC03MTcsMTIgKzcxMywx
MiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudFJlY3QoQ0NUZXh0dXJl
VXBkYXRlUXVldWUmIHF1ZXVlLCBjb25zdCBJbgogICAgICAgICBtX2ZhaWxlZFVwZGF0ZSA9IGZh
bHNlOwogICAgIH0KIAotICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgaWYgKHZp
c2libGVDb250ZW50UmVjdCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
VmlzaWJsZSBwYWludGluZy4gRmlyc3Qgb2NjbHVkZSB2aXNpYmxlIHRpbGVzIGFuZCBwYWludCB0
aGUgbm9uLW9jY2x1ZGVkIHRpbGVzLgogICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207
Ci0gICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5k
aWNlcyh2aXNpYmxlQ29udGVudFJlY3QoKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAg
ICBtYXJrT2NjbHVzaW9uc0FuZFJlcXVlc3RUZXh0dXJlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b20sIG9jY2x1c2lvbik7CiAgICAgbV9za2lwc0RyYXcgPSAhdXBkYXRlVGlsZXMobGVmdCwgdG9w
LCByaWdodCwgYm90dG9tLCBxdWV1ZSwgb2NjbHVzaW9uLCBzdGF0cywgZGlkUGFpbnQpOwogICAg
IGlmIChtX3NraXBzRHJhdykKQEAgLTczMSw3ICs3MjcsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudFJlY3QoQ0NUZXh0dXJlVXBkYXRlUXVldWUmIHF1ZXVlLCBjb25z
dCBJbgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgcGFpbnRp
bmcgZXZlcnl0aGluZyB2aXNpYmxlLiBEbyBzb21lIHByZS1wYWludGluZyB3aGlsZSBpZGxlLgot
ICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KGNvbnRlbnRS
ZWN0KTsKKyAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0gaWRsZVBhaW50UmVjdCgp
OwogICAgIGlmIChpZGxlUGFpbnRDb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNzY3LDEzICs3NjMsMTMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbnRlbnRSZWN0KENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgSW4KICAgICB9
CiB9CiAKLWJvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCitib29sIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJ
ZGxlUGFpbnQoKQogewogICAgIC8vIERvbid0IHRyaWdnZXIgbW9yZSBwYWludHMgaWYgd2UgZmFp
bGVkIChhcyB3ZSdsbCBqdXN0IGZhaWwgYWdhaW4pLgotICAgIGlmIChtX2ZhaWxlZFVwZGF0ZSB8
fCB2aXNpYmxlQ29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fdGlsZXItPmhhc0VtcHR5Qm91bmRz
KCkpCisgICAgaWYgKG1fZmFpbGVkVXBkYXRlIHx8IHZpc2libGVDb250ZW50UmVjdCgpLmlzRW1w
dHkoKSB8fCBtX3RpbGVyLT5oYXNFbXB0eUJvdW5kcygpIHx8ICFkcmF3c0NvbnRlbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9
IGlkbGVQYWludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KTsKKyAgICBJbnRSZWN0IGlkbGVQYWlu
dENvbnRlbnRSZWN0ID0gaWRsZVBhaW50UmVjdCgpOwogICAgIGlmIChpZGxlUGFpbnRDb250ZW50
UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzk3LDE1ICs3OTMs
MTUgQEAgYm9vbCBUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJl
Y3QmIHZpc2libGVDb250ZW50UmVjdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUludFJlY3Qg
VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVD
b250ZW50UmVjdCkKK0ludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0KCkK
IHsKICAgICAvLyBEb24ndCBpbmZsYXRlIGFuIGVtcHR5IHJlY3QuCi0gICAgaWYgKHZpc2libGVD
b250ZW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2aXNpYmxlQ29udGVudFJlY3Q7
CisgICAgaWYgKHZpc2libGVDb250ZW50UmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBtYWRlIGEgbG90IGxhcmdl
ciBub3chIFdlIHNob3VsZCBpbmNyZWFzZQogICAgIC8vICAgICAgICB0aGlzIHNsb3dseSB3aGls
ZSBpbnN1cmluZyBpdCBkb2Vzbid0IGNhdXNlIGFueSBwZXJmIGlzc3Vlcy4KLSAgICBJbnRSZWN0
IHByZXBhaW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdDsKKyAgICBJbnRSZWN0IHByZXBhaW50
UmVjdCA9IHZpc2libGVDb250ZW50UmVjdCgpOwogICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWCht
X3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOwogICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWSht
X3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdodCgpICogMik7CiAgICAgSW50UmVjdCBjb250ZW50UmVj
dChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uaAppbmRleCAxM2QzNDVlYjJlZmI4NjY3NWUxNzk4NmQ2MzBhMDM2NmJjNjZmZjM0Li5k
MWJhMTQzMDU5ZTQ3MDc4Y2MzNWZmOWNlMDM5ZjNmYTI1OTYxNzljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uaApAQCAtODMsMTIgKzgzLDExIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHJl
c2V0VXBkYXRlU3RhdGUoKTsKIAogICAgIC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRl
IHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCi0gICAgdm9pZCB1cGRh
dGVDb250ZW50UmVjdChDQ1RleHR1cmVVcGRhdGVRdWV1ZSYsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqLCBDQ1JlbmRlcmluZ1N0YXRzJik7Cisg
ICAgdm9pZCB1cGRhdGVDb250ZW50KENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiwgY29uc3QgQ0NPY2Ns
dXNpb25UcmFja2VyKiwgQ0NSZW5kZXJpbmdTdGF0cyYpOwogCiAgICAgLy8gQWZ0ZXIgcHJlcGFy
aW5nIGFuIHVwZGF0ZSwgcmV0dXJucyB0cnVlIGlmIG1vcmUgcGFpbnRpbmcgaXMgbmVlZGVkLgot
ICAgIGJvb2wgbmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0
KTsKLQotICAgIEludFJlY3QgaWRsZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29u
dGVudFJlY3QpOworICAgIGJvb2wgbmVlZHNJZGxlUGFpbnQoKTsKKyAgICBJbnRSZWN0IGlkbGVQ
YWludFJlY3QoKTsKIAogICAgIGJvb2wgc2tpcHNEcmF3KCkgY29uc3QgeyByZXR1cm4gbV9za2lw
c0RyYXc7IH0KIApAQCAtMTA0LDggKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCB0aWxlT25s
eU5lZWRzUGFydGlhbFVwZGF0ZShVcGRhdGFibGVUaWxlKik7CiAgICAgYm9vbCB0aWxlTmVlZHNC
dWZmZXJlZFVwZGF0ZShVcGRhdGFibGVUaWxlKik7CiAKLSAgICB2b2lkIHNldFRleHR1cmVQcmlv
cml0aWVzSW5SZWN0KGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiwgY29uc3QgSW50UmVjdCYg
dmlzaWJsZUNvbnRlbnRSZWN0KTsKLQogICAgIHZvaWQgbWFya09jY2x1c2lvbnNBbmRSZXF1ZXN0
VGV4dHVyZXMoaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSwgY29uc3Qg
Q0NPY2NsdXNpb25UcmFja2VyKik7CiAKICAgICBib29sIHVwZGF0ZVRpbGVzKGludCBsZWZ0LCBp
bnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiwgY29u
c3QgQ0NPY2NsdXNpb25UcmFja2VyKiwgQ0NSZW5kZXJpbmdTdGF0cyYsIGJvb2wmIGRpZFBhaW50
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVy
VGVzdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXll
clRlc3RDb21tb24uY3BwCmluZGV4IDU0ZjI5YmJlZjU1NDhkM2UwY2Y3NTQyMWYzYzYzM2MzZDUw
OWEzMDQuLmRhNjUyYzBmODMzOWUzOWNmZDY2ODIxMjRiMjJlOWNkZTIwOTQ2ODMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29t
bW9uLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSwgY29u
c3QgQ0NPY2NsdXNpb25UcmFja2VyKiBvY2NsdXNpb24sIENDUmVuZGVyaW5nU3RhdHMmIHN0YXRz
KQogewotICAgIHVwZGF0ZUNvbnRlbnRSZWN0KHF1ZXVlLCB2aXNpYmxlQ29udGVudFJlY3QoKSwg
b2NjbHVzaW9uLCBzdGF0cyk7CisgICAgdXBkYXRlQ29udGVudChxdWV1ZSwgb2NjbHVzaW9uLCBz
dGF0cyk7CiB9CiAKIHZvaWQgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9y
aXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIGNhbGN1bGF0b3IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCmlu
ZGV4IGM3NTkzMmFjZjYyMWJkZWIzMGM2ZjcxNDJiNzcxNTdkZDM5NWQzNTIuLmI5OGFlYTRiZWFj
NGJjNWNhYzVhMDc2YmMxMjY4OGJlMjJkNDRjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBAIC0xMTIsNyArMTEy
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBXZWJDb3JlOjpJbnRTaXplIHRpbGVTaXplKCkgeyBy
ZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSgxMDAsIDEwMCk7IH0KIAogICAgIHVzaW5nIFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZUNvbnRlbnRSZWN0OwotICAgIHVzaW5nIFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudFJlY3Q7CisgICAgdXNpbmcg
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50OwogICAgIHVzaW5nIFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQ7CiAgICAgdXNpbmcgV2Vi
Q29yZTo6VGlsZWRMYXllckNocm9taXVtOjpza2lwc0RyYXc7CiAgICAgdXNpbmcgV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpudW1QYWludGVkVGlsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBl
MmNhYTEwNjdhYjJhN2ZjZGM3NmY5MjVkMGUxMGEzNWVkYTA1Mjc4Li5jZDZjZGVlYTExNzQ0ZTU0
NzZiZGJiMjIzYzJiM2IyYTY5MmFhOTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTc3LDYgKzc3LDgg
QEAgY2xhc3MgVGlsZWRMYXllckNocm9taXVtVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsK
IHB1YmxpYzoKICAgICBUaWxlZExheWVyQ2hyb21pdW1UZXN0KCkKICAgICAgICAgOiBtX2NvbnRl
eHQoV2ViS2l0OjpjcmVhdGVGYWtlQ0NHcmFwaGljc0NvbnRleHQoKSkKKyAgICAgICAgLCBtX3Rl
eHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYwKjEwMjQq
MTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpKQorICAgICAgICAsIG1fb2NjbHVz
aW9uKDApCiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKICAgICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyID0gQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVh
dGUobV9jb250ZXh0LmdldCgpKTsKQEAgLTkyLDYgKzk0LDExOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjp1cGRhdGVUZXh0dXJlcyhtX3Jlc291
cmNlUHJvdmlkZXIuZ2V0KCksICZtX2NvcGllciwgJm1fdXBsb2FkZXIsICZtX3F1ZXVlLCBjb3Vu
dCk7CiAgICAgfQorCisgICAgYm9vbCBJbnZhbGlkYXRlVXBkYXRlQW5kUHVzaChGYWtlVGlsZWRM
YXllckNocm9taXVtKiBsYXllcjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q0xheWVySW1wbCogbGF5ZXJJbXBsMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludFNpemUgYm91bmRzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QgdmlzaWJsZTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IGRy
YXdhYmxlMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QgaW52YWxp
ZGF0aW9uMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZha2VUaWxlZExheWVy
Q2hyb21pdW0qIGxheWVyMiA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q0xheWVySW1wbCogbGF5ZXJJbXBsMiA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnRTaXplIGJvdW5kczIgPSBJbnRTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRSZWN0IHZpc2libGUyID0gSW50UmVjdCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZTIgPSBJbnRSZWN0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IGludmFsaWRhdGlvbjIgPSBJbnRSZWN0
KCkpCisgICAgeworICAgICAgICAvLyBMYXllciBwcm9wZXJ0aWVzCisgICAgICAgIGlmIChsYXll
cjEpIHsKKyAgICAgICAgICAgIGxheWVyMS0+c2V0Qm91bmRzKGJvdW5kczEpOworICAgICAgICAg
ICAgbGF5ZXIxLT5zZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZTEpOworICAgICAgICAgICAg
bGF5ZXIxLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlMSk7CisgICAgICAgICAgICBs
YXllcjEtPmludmFsaWRhdGVDb250ZW50UmVjdChpbnZhbGlkYXRpb24xKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobGF5ZXIyKSB7CisgICAgICAgICAgICBsYXllcjItPnNldEJvdW5kcyhib3Vu
ZHMyKTsKKyAgICAgICAgICAgIGxheWVyMi0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGUy
KTsKKyAgICAgICAgICAgIGxheWVyMi0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZTIp
OworICAgICAgICAgICAgbGF5ZXIyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoaW52YWxpZGF0aW9u
Mik7CisgICAgICAgIH0KKworICAgICAgICAvLyBHZXQgdGV4dHVyZXMKKyAgICAgICAgbV90ZXh0
dXJlTWFuYWdlci0+Y2xlYXJQcmlvcml0aWVzKCk7CisgICAgICAgIGlmIChsYXllcjEpCisgICAg
ICAgICAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9y
KTsKKyAgICAgICAgaWYgKGxheWVyMikKKyAgICAgICAgICAgIGxheWVyMi0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOyAgICAgCisgICAgICAgIG1fdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworCisgICAgICAgIC8vIFVwZGF0ZSBjb250ZW50
CisgICAgICAgIGlmIChsYXllcjEpCisgICAgICAgICAgICBsYXllcjEtPnVwZGF0ZUNvbnRlbnQo
bV9xdWV1ZSwgbV9vY2NsdXNpb24sIG1fc3RhdHMpOworICAgICAgICBpZiAobGF5ZXIyKQorICAg
ICAgICAgICAgbGF5ZXIyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIG1fb2NjbHVzaW9uLCBtX3N0
YXRzKTsKKyAgICAgICAgYm9vbCBuZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgICAgICBpZiAobGF5
ZXIxKQorICAgICAgICAgICAgbmVlZHNVcGRhdGUgfD0gbGF5ZXIxLT5uZWVkc0lkbGVQYWludCgp
OworICAgICAgICBpZiAobGF5ZXIyKQorICAgICAgICAgICAgbmVlZHNVcGRhdGUgfD0gbGF5ZXIy
LT5uZWVkc0lkbGVQYWludCgpOworCisgICAgICAgIC8vIFVwZGF0ZSB0ZXh0dXJlcyBhbmQgcHVz
aC4KKyAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKKyAgICAgICAgaWYgKGxheWVyMSkKKyAgICAg
ICAgICAgIGxheWVyMS0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwxKTsKKyAgICAgICAgaWYg
KGxheWVyMikKKyAgICAgICAgICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwy
KTsKKworICAgICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CisgICAgfQorCisgICAgLy8gV2l0aG91
dCB1bmlxdWUgZHJhd2FibGVDb250ZW50UmVjdAorICAgIGJvb2wgSW52YWxpZGF0ZVVwZGF0ZUFu
ZFB1c2goRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5ZXIxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbDEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRTaXplIGJvdW5kczEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRSZWN0IHZpc2libGUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50UmVjdCBpbnZhbGlkYXRpb24xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5ZXIyID0gMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwyID0gMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEludFNpemUgYm91bmRzMiA9IEludFNpemUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZTIgPSBJbnRSZWN0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IGludmFsaWRhdGlv
bjIgPSBJbnRSZWN0KCkpCisgICAgeworICAgICAgICByZXR1cm4gSW52YWxpZGF0ZVVwZGF0ZUFu
ZFB1c2gobGF5ZXIxLCBsYXllckltcGwxLCBib3VuZHMxLCB2aXNpYmxlMSwgdmlzaWJsZTEsIGlu
dmFsaWRhdGlvbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXll
cjIsIGxheWVySW1wbDIsIGJvdW5kczIsIHZpc2libGUyLCB2aXNpYmxlMiwgaW52YWxpZGF0aW9u
Mik7CisgICAgfQorCisgICAgLy8gRnVsbHkgdmlzaWJsZSBhbmQgaW52YWxpZGF0ZWQuCisgICAg
Ym9vbCBJbnZhbGlkYXRlVXBkYXRlQW5kUHVzaChGYWtlVGlsZWRMYXllckNocm9taXVtKiBsYXll
cjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXJJ
bXBsMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZTEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWtlVGlsZWRMYXllckNocm9taXVt
KiBsYXllcjIgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllcklt
cGwqIGxheWVySW1wbDIgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UmVjdCB2aXNpYmxlMiA9IEludFJlY3QoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnZhbGlk
YXRlVXBkYXRlQW5kUHVzaChsYXllcjEsIGxheWVySW1wbDEsIHZpc2libGUxLnNpemUoKSwgdmlz
aWJsZTEsIHZpc2libGUxLCB2aXNpYmxlMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxheWVyMiwgbGF5ZXJJbXBsMiwgdmlzaWJsZTIuc2l6ZSgpLCB2aXNpYmxlMiwg
dmlzaWJsZTIsIHZpc2libGUyKTsKKyAgICB9CisKKworICAgIC8vIFdpdGhvdXQgdW5pcXVlIGRy
YXdhYmxlQ29udGVudFJlY3QsIGFuZCBubyBpbnZhbGlkYXRpb25zCisgICAgYm9vbCBVcGRhdGVB
bmRQdXNoKEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbDEsCisgICAgICAgICAgICAgICAgICAgICAgIElu
dFNpemUgYm91bmRzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5ZXIyID0g
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbDIgPSAwLAor
ICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplIGJvdW5kczIgPSBJbnRTaXplKCksCisgICAg
ICAgICAgICAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZTIgPSBJbnRSZWN0KCkpCisgICAgewor
ICAgICAgICByZXR1cm4gSW52YWxpZGF0ZVVwZGF0ZUFuZFB1c2gobGF5ZXIxLCBsYXllckltcGwx
LCBib3VuZHMxLCB2aXNpYmxlMSwgdmlzaWJsZTEsIEludFJlY3QoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyMiwgbGF5ZXJJbXBsMiwgYm91bmRzMiwgdmlz
aWJsZTIsIHZpc2libGUyLCBJbnRSZWN0KCkpOworICAgIH0KKworICAgIC8vIFdpdGhvdXQgZnVs
bHkgdmlzaWJsZSBhbmQgbm90IGludmFsaWRhdGVkCisgICAgYm9vbCBVcGRhdGVBbmRQdXNoKEZh
a2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ0NM
YXllckltcGwqIGxheWVySW1wbDEsCisgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgdmlz
aWJsZTEsCisgICAgICAgICAgICAgICAgICAgICAgIEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxh
eWVyMiA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwy
ID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlMiA9IEludFJlY3Qo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnZhbGlkYXRlVXBkYXRlQW5kUHVzaChsYXllcjEs
IGxheWVySW1wbDEsIHZpc2libGUxLnNpemUoKSwgdmlzaWJsZTEsIHZpc2libGUxLCBJbnRSZWN0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjIsIGxheWVy
SW1wbDIsIHZpc2libGUyLnNpemUoKSwgdmlzaWJsZTIsIHZpc2libGUyLCBJbnRSZWN0KCkpOwor
ICAgIH0KKwogcHVibGljOgogICAgIE93blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0
OwogICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI+IG1fcmVzb3VyY2VQcm92aWRlcjsKQEAg
LTEwMCw0MCArMjE0LDMwIEBAIHB1YmxpYzoKICAgICBGYWtlVGV4dHVyZUNvcGllciBtX2NvcGll
cjsKICAgICBGYWtlVGV4dHVyZVVwbG9hZGVyIG1fdXBsb2FkZXI7CiAgICAgQ0NQcmlvcml0eUNh
bGN1bGF0b3IgbV9wcmlvcml0eUNhbGN1bGF0b3I7CisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gbV90ZXh0dXJlTWFuYWdlcjsKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyKiBtX29jY2x1c2lvbjsKIH07CiAKIAotCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcHVzaERpcnR5VGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0
cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRM
YXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxl
ZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21p
dW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gVGhlIHRp
bGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0
d28gdGlsZXMuCi0gICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAg
bGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0g
ICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7
Ci0KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3Ip
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgIGxheWVy
LT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCwg
bV9zdGF0cyk7Ci0gICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICBsYXllci0+cHVzaFByb3BlcnRp
ZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgIFVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxh
eWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
KTsgLy8gVmlzaWJsZQogCiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUg
aW1wbCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsK
ICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKLSAgICAvLyBJ
bnZhbGlkYXRlcyBib3RoIHRpbGVzLi4uCi0gICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgLy8gLi4uLmJ1dCB0aGVuIG9ubHkgdXBk
YXRlIG9uZSBvZiB0aGVtLgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9y
aXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMTAwKSwgMCwgbV9zdGF0cyk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJ
bXBsLmdldCgpKTsKKyAgICAvLyBJbnZhbGlkYXRlcyBib3RoIHRpbGVzLCBidXQgdGhlbiBvbmx5
IHVwZGF0ZSBvbmUgb2YgdGhlbS4KKyAgICBJbnZhbGlkYXRlVXBkYXRlQW5kUHVzaChsYXllci5n
ZXQoKSwgbGF5ZXJJbXBsLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFNp
emUoMTAwLCAyMDApLCAvLyBCb3VuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSwgLy8gVmlzaWJsZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgLy8gSW52YWxpZGF0ZQogCiAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgaGF2ZSB0aGUgZmlyc3QgdGlsZSBzaW5jZSB0aGUgb3RoZXIgdGlsZSB3YXMg
aW52YWxpZGF0ZWQgYnV0IG5vdCBwYWludGVkLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+
aGFzVGlsZUF0KDAsIDApKTsKQEAgLTE0MiwyNCArMjQ2LDE1IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wp
OwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CisgICAgbV9vY2NsdXNpb24gPSAmb2Nj
bHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxp
ZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KLSAgICBsYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAwLCAyMDApKTsKLSAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKLQotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVU
ZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7
CisgICAgVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpLAorICAgICAg
ICAgICAgICAgICAgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOyAvLyBWaXNpYmxlCiAKICAgICBF
WFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1
ZSgpLCAwLCAxKTsKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5w
aXhlbHNVcGxvYWRlZFRyYW5zbHVjZW50KCksIDIwMDAwLCAxKTsKQEAgLTE3Myw5ICsyNjgsMTAg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMp
CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDUwLCA1MCkp
OwogICAgIC8vIC4uLi5idXQgdGhlIGFyZWEgaXMgb2NjbHVkZWQuCiAgICAgb2NjbHVkZWQuc2V0
T2NjbHVzaW9uKEludFJlY3QoMCwgMCwgNTAsIDUwKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCAmb2NjbHVkZWQsIG1fc3Rh
dHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKKworICAgIFVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVy
SW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgIEludFNpemUoMTAwLCAyMDApLCAvLyBCb3Vu
ZHMKKyAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgLy8gVmlzaWJs
ZQogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBs
b2FkZWRPcGFxdWUoKSwgMCwgMSk7CiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdN
ZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRUcmFuc2x1Y2VudCgpLCAyMDAwMCArIDI1MDAsIDEpOwpA
QCAtMTg4LDMwICsyODQsMjEgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hP
Y2NsdWRlZERpcnR5VGlsZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNo
RGVsZXRlZFRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCox
MDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1f
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNp
emUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRp
bGVzLgotICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVy
LT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxh
eWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotCi0g
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3Rh
dHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKKyAgICBJbnZhbGlkYXRlVXBkYXRlQW5kUHVzaChsYXllci5nZXQo
KSwgbGF5ZXJJbXBsLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qo
MCwgMCwgMTAwLCAyMDApKTsgLy8gVmlzaWJsZQogCiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYm90
aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFz
VGlsZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAx
KSk7CiAKLSAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJQcmlvcml0aWVzKCk7Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KG1fcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOworICAg
IG1fdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOworICAgIG1fdGV4dHVyZU1hbmFn
ZXItPmNsZWFyQWxsTWVtb3J5KG1fcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7CisgICAgbV90ZXh0
dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyg0KjEwMjQqMTAyNCk7CiAKICAgICAv
LyBUaGlzIHNob3VsZCBkcm9wIHRoZSB0aWxlcyBvbiB0aGUgaW1wbCB0aHJlYWQuCiAgICAgbGF5
ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKQEAgLTIyMCwyMDMgKzMwNywx
NDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAg
ICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKICAgICBFWFBFQ1Rf
RkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogCi0gICAgLy8gVGhpcyBzaG91bGQg
cmVjcmVhdGUgYW5kIHVwZGF0ZSB0aGUgZGVsZXRlZCB0ZXh0dXJlcy4KLSAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3Qo
bV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0
ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgp
KTsKKyAgICAvLyBUaGlzIHNob3VsZCByZWNyZWF0ZSBhbmQgdXBkYXRlIG9uZSBvZiB0aGUgZGVs
ZXRlZCB0ZXh0dXJlcy4KKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwu
Z2V0KCksCisgICAgICAgICAgICAgICAgICBJbnRTaXplKDEwMCwgMjAwKSwgLy8gQm91bmRzCisg
ICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7IC8vIFZpc2libGUKIAot
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGhhdmUgdGhlIGZpcnN0IHRpbGUgc2luY2UgdGhlIG90aGVy
IHRpbGUgd2FzIGludmFsaWRhdGVkIGJ1dCBub3QgcGFpbnRlZC4KKyAgICAvLyBXZSBzaG91bGQg
aGF2ZSBvbmUgdGlsZXMgb24gdGhlIGltcGwgc2lkZS4KICAgICBFWFBFQ1RfVFJVRShsYXllcklt
cGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGls
ZUF0KDAsIDEpKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxl
UGFpbnRUaWxlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VU
aWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3Rl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXpl
IGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhl
IGNlbnRlci4KLSAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1MDApOwotICAgIEludFJl
Y3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7Ci0gICAgSW50
UmVjdCB2aXNpYmxlUmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApOwotCi0gICAgLy8gVGhpcyBpbnZh
bGlkYXRlcyAyNSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZpc2libGUgdGlsZS4KLSAgICBs
YXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlQ29u
dGVudFJlY3QodmlzaWJsZVJlY3QpOwotICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3Qo
Y29udGVudFJlY3QpOwotCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3Jp
dHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
Ci0KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgdmlzaWJsZVJlY3QsIDAs
IG1fc3RhdHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBXZSBzaG91bGQgbmVl
ZCBpZGxlLXBhaW50aW5nIGZvciAzeDMgdGlsZXMgaW4gdGhlIGNlbnRlci4KLSAgICBFWFBFQ1Rf
VFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKLQotICAgIGxheWVyLT5w
dXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgLy8gVGhpcyBwYWludHMgMSB2
aXNpYmxlIG9mIHRoZSAyNSBpbnZhbGlkIHRpbGVzLgorICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBV
cGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSg1MDAsIDUwMCksIC8vIEJvdW5kcworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMjAwLCAyMDAsIDEwMCwg
MTAwKSk7IC8vIFZpc2libGUKKyAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZv
ciBzdXJyb3VuZGluZyB0aWxlcy4KKyAgICBFWFBFQ1RfVFJVRShuZWVkc1VwZGF0ZSk7CiAKICAg
ICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBzaWRlLgogICAgIEVYUEVD
VF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDIsIDIpKTsKIAogICAgIC8vIEZvciB0aGUgbmV4
dCBmb3VyIHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qgd2Ugc3RpbGwgbmVlZCBpZGxlIHBhaW50
aW5nLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgICAgICBsYXllci0+dXBkYXRl
Q29udGVudFJlY3QobV9xdWV1ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3RhdHMpOwotICAgICAgICBF
WFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKLSAgICAgICAg
dXBkYXRlVGV4dHVyZXMoKTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJ
bXBsLmdldCgpKTsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSBVcGRhdGVBbmRQdXNoKGxheWVyLmdl
dCgpLCBsYXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRTaXplKDUwMCwgNTAwKSwgLy8gQm91bmRzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpOyAvLyBWaXNpYmxlCisgICAg
ICAgIEVYUEVDVF9UUlVFKG5lZWRzVXBkYXRlKTsKICAgICB9CiAKLSAgICAvLyBBZnRlciBmb3Vy
IHBhc3NlcyBvZiBpZGxlIHBhaW50aW5nLCB3ZSBzaG91bGQgYmUgZmluaXNoZWQgcGFpbnRpbmcK
LSAgICAvLyBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7
Ci0KICAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBzdXJyb3VuZGluZyB0aGUgdmlzaWJs
ZSB0aWxlIG9uIGFsbCBzaWRlcywgYnV0IG5vIG90aGVyIHRpbGVzLgogICAgIEludFJlY3QgaWRs
ZVBhaW50VGlsZXMoMSwgMSwgMywgMyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKysp
IHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspIHsKLSAgICAgICAgICAgIGlm
IChpZGxlUGFpbnRUaWxlcy5jb250YWlucyhpLCBqKSkKLSAgICAgICAgICAgICAgICBFWFBFQ1Rf
VFJVRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGopKTsKLSAg
ICAgICAgfQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDU7IGorKykKKyAgICAgICAgICAg
IEVYUEVDVF9FUShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSwgaWRsZVBhaW50VGlsZXMuY29u
dGFpbnMoaSwgaikpOwogICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZmluaXNoIHBh
aW50aW5nIGV2ZW50dWFsbHkuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7Cisg
ICAgICAgIG5lZWRzVXBkYXRlID0gVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBs
LmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSg1MDAs
IDUwMCksIC8vIEJvdW5kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApKTsgLy8gVmlzaWJsZQorICAgIH0KKyAgICBFWFBFQ1Rf
RkFMU0UobmVlZHNVcGRhdGUpOwogfQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiB7CiAgICAgLy8gU3RhcnQgd2l0aCAybWIg
b2YgbWVtb3J5LCBidXQgdGhlIHRlc3QgaXMgZ29pbmcgdG8gdHJ5IHRvIHVzZSBqdXN0IG1vcmUg
dGhhbiAxbWIsIHNvIHdlIHJlZHVjZSB0byAxbWIgbGF0ZXIuCi0gICAgT3duUHRyPENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OmNyZWF0ZSgyKjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBv
b2wpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoMiAqIDEw
MjQgKiAxMDI0KTsgICAgCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbDEoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDEpKSk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgp
KSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbDIoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDIpKSk7CiAKICAgICAvLyBGb3IgdGhpcyB0ZXN0IHdlIGhhdmUg
dHdvIGxheWVycy4gbGF5ZXIxIGV4aGF1c3RzIG1vc3QgdGV4dHVyZSBtZW1vcnksIGxlYXZpbmcg
cm9vbSBmb3IgMiBtb3JlIHRpbGVzIGZyb20KICAgICAvLyBsYXllcjIsIGJ1dCBub3QgYWxsIHRo
cmVlIHRpbGVzLiBGaXJzdCB3ZSBwYWludCBsYXllcjEsIGFuZCBvbmUgdGlsZSBmcm9tIGxheWVy
Mi4gVGhlbiB3aGVuIHdlIGlkbGUgcGFpbnQKICAgICAvLyBsYXllcjIsIHdlIHdpbGwgZmFpbCBv
biB0aGUgdGhpcmQgdGlsZSBvZiBsYXllcjIsIGFuZCB0aGlzIHNob3VsZCBub3QgbGVhdmUgdGhl
IHNlY29uZCB0aWxlIGluIGEgYmFkIHN0YXRlLgogCisgICAgLy8gVGhpcyB1c2VzIDk2MDAwMCBi
eXRlcywgbGVhdmluZyA4ODU3NiBieXRlcyBvZiBtZW1vcnkgbGVmdCwgd2hpY2ggaXMgZW5vdWdo
IGZvciAyIHRpbGVzIG9ubHkgaW4gdGhlIG90aGVyIGxheWVyLgorICAgIEludFJlY3QgbGF5ZXIx
UmVjdCgwLCAwLCAxMDAsIDI0MDApOworICAgIAogICAgIC8vIFRoaXMgcmVxdWlyZXMgNCozMDAw
MCBieXRlcyBvZiBtZW1vcnkuCiAgICAgSW50UmVjdCBsYXllcjJSZWN0KDAsIDAsIDEwMCwgMzAw
KTsKLSAgICBsYXllcjItPnNldEJvdW5kcyhsYXllcjJSZWN0LnNpemUoKSk7Ci0gICAgbGF5ZXIy
LT5zZXRWaXNpYmxlQ29udGVudFJlY3QobGF5ZXIyUmVjdCk7Ci0gICAgbGF5ZXIyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QobGF5ZXIyUmVjdCk7Ci0KLSAgICAvLyBUaGlzIHVzZXMgOTYwMDAwIGJ5
dGVzLCBsZWF2aW5nIDg4NTc2IGJ5dGVzIG9mIG1lbW9yeSBsZWZ0LCB3aGljaCBpcyBlbm91Z2gg
Zm9yIDIgdGlsZXMgb25seSBpbiB0aGUgb3RoZXIgbGF5ZXIuCi0gICAgSW50UmVjdCBsYXllclJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDI0MDApKTsKLSAgICBsYXllcjEtPnNl
dEJvdW5kcyhsYXllclJlY3Quc2l6ZSgpKTsKLSAgICBsYXllcjEtPnNldFZpc2libGVDb250ZW50
UmVjdChsYXllclJlY3QpOwotICAgIGxheWVyMS0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGxheWVy
UmVjdCk7CiAKICAgICAvLyBQYWludCBhIHNpbmdsZSB0aWxlIGluIGxheWVyMiBzbyB0aGF0IGl0
IHdpbGwgaWRsZSBwYWludC4KLSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJp
b3JpdHlDYWxjdWxhdG9yKTsKLSAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJp
b3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7Ci0gICAgbGF5ZXIxLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBsYXllclJlY3QsIDAs
IG1fc3RhdHMpOwotICAgIGxheWVyMi0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVj
dCgwLCAwLCAxMDAsIDEwMCksIDAsIG1fc3RhdHMpOworICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBV
cGRhdGVBbmRQdXNoKGxheWVyMS5nZXQoKSwgbGF5ZXJJbXBsMS5nZXQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjFSZWN0LnNpemUoKSwgLy8gQm91bmRzCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIxUmVjdCwgLy8gVmlzaWJs
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyMi5nZXQoKSwgbGF5
ZXJJbXBsMi5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXll
cjJSZWN0LnNpemUoKSwgLy8gQm91bmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOyAvLyBWaXNpYmxlCiAKICAgICAvLyBXZSBz
aG91bGQgbmVlZCBpZGxlLXBhaW50aW5nIGZvciBib3RoIHJlbWFpbmluZyB0aWxlcyBpbiBsYXll
cjIuCi0gICAgRVhQRUNUX1RSVUUobGF5ZXIyLT5uZWVkc0lkbGVQYWludChsYXllcjJSZWN0KSk7
Ci0KLSAgICAvLyBDb21taXQgdGhlIGZyYW1lIG92ZXIgdG8gaW1wbC4KLSAgICB1cGRhdGVUZXh0
dXJlcygpOwotICAgIGxheWVyMS0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsK
LSAgICBsYXllcjItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMi5nZXQoKSk7CisgICAgRVhQ
RUNUX1RSVUUobmVlZHNVcGRhdGUpOwogCiAgICAgLy8gUmVkdWNlIG91ciBtZW1vcnkgbGltaXRz
IHRvIDFtYi4KLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygxMDI0
ICogMTAyNCk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygx
MDI0ICogMTAyNCk7CiAKICAgICAvLyBOb3cgaWRsZSBwYWludCBsYXllcjIuIFdlIGFyZSBnb2lu
ZyB0byBydW4gb3V0IG9mIG1lbW9yeSB0aG91Z2ghCi0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyMi0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwg
SW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIDAsIG1fc3RhdHMpOwotCiAgICAgLy8gT2ggd2VsbCwg
Y29tbWl0IHRoZSBmcmFtZSBhbmQgcHVzaC4KLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxh
eWVyMS0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsKLSAgICBsYXllcjItPnB1
c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMi5nZXQoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA0OyBpKyspIHsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSBVcGRhdGVBbmRQdXNoKGxheWVyMS5n
ZXQoKSwgbGF5ZXJJbXBsMS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxheWVyMVJlY3Quc2l6ZSgpLCAvLyBCb3VuZHMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxheWVyMVJlY3QsIC8vIFZpc2libGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxheWVyMi5nZXQoKSwgbGF5ZXJJbXBsMi5nZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyMlJlY3Quc2l6ZSgpLCAvLyBCb3VuZHMK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKTsgLy8gVmlzaWJsZQorICAgIH0KIAogICAgIC8vIFNhbml0eSBjaGVjaywgd2Ugc2hvdWxk
IGhhdmUgdGV4dHVyZXMgZm9yIHRoZSBiaWcgbGF5ZXIuCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJ
bXBsMS0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KDAsIDApKTsKKyAgICBFWFBFQ1RfVFJVRShsYXll
ckltcGwxLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoMCwgMjMpKTsKIAotICAgIC8vIFdlIHNob3Vs
ZCBvbmx5IGhhdmUgdGhlIGZpcnN0IHRpbGUgZnJvbSBsYXllcjIgc2luY2UgaXQgZmFpbGVkIHRv
IGlkbGUgdXBkYXRlLgorICAgIC8vIFdlIHNob3VsZCBvbmx5IGhhdmUgdGhlIGZpcnN0IHR3byB0
aWxlcyBmcm9tIGxheWVyMiBzaW5jZQorICAgIC8vIGl0IGZhaWxlZCB0byBpZGxlIHVwZGF0ZSB0
aGUgbGFzdCB0aWxlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAw
KSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsMi0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KDAs
IDApKTsKLSAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsMi0+aGFzVGlsZUF0KDAsIDEpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsMi0+aGFzVGlsZUF0KDAsIDIpKTsKLQotICAgIC8vIE5v
dyBpZiBsYXllcjIgYmVjb21lcyBmdWxseSB2aXNpYmxlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBw
YWludCBpdCBhbmQgcHVzaCB2YWxpZCB0ZXh0dXJlcy4KLSAgICBsYXllcjItPnNldFRleHR1cmVQ
cmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBsYXllcjEtPnNldFRleHR1cmVQ
cmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVl
LCBsYXllcjJSZWN0LCAwLCBtX3N0YXRzKTsKLSAgICBsYXllcjEtPnVwZGF0ZUNvbnRlbnRSZWN0
KG1fcXVldWUsIGxheWVyUmVjdCwgMCwgbV9zdGF0cyk7Ci0KLSAgICB1cGRhdGVUZXh0dXJlcygp
OwotICAgIGxheWVyMS0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsKLSAgICBs
YXllcjItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMi5nZXQoKSk7Ci0KLSAgICBFWFBFQ1Rf
VFJVRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwgMCkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVy
SW1wbDItPmhhc1RpbGVBdCgwLCAxKSk7Ci0gICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsMi0+aGFz
VGlsZUF0KDAsIDIpKTsKLSAgICBFWFBFQ1RfVFJVRShsYXllckltcGwyLT5oYXNUZXh0dXJlSWRG
b3JUaWxlQXQoMCwgMCkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbDItPmhhc1RleHR1cmVJ
ZEZvclRpbGVBdCgwLCAxKSk7Ci0gICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsMi0+aGFzVGV4dHVy
ZUlkRm9yVGlsZUF0KDAsIDIpKTsKKyAgICAKKyAgICBFWFBFQ1RfRkFMU0UobmVlZHNVcGRhdGUp
OworICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwgMikpOwogfQogCiBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludGVkT2NjbHVkZWRUaWxl
cykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAx
MDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2Ns
dWRlZDsKLQorICAgIG1fb2NjbHVzaW9uID0gJm9jY2x1ZGVkOworICAgIAogICAgIC8vIFRoZSB0
aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBvbmUgb2NjbHVkZWQgdGls
ZSwgY3VsbHMgaXQgZHVyaW5nIHBhaW50LCBidXQgcHJlcGFpbnRzIGl0LgogICAgIG9jY2x1ZGVk
LnNldE9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAKLSAgICBsYXllci0+c2V0
Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKLSAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKLSAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRl
bnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKLQotICAgIGxheWVyLT5zZXRUZXh0dXJl
UHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVl
LCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKLSAgICB1cGRh
dGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQo
KSk7CisgICAgVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpLAorICAg
ICAgICAgICAgICAgICAgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOyAvLyBWaXNpYmxlCiAKLSAg
ICAvLyBXZSBzaG91bGQgaGF2ZSB0aGUgcHJlcGFpbnRlZCB0aWxlIG9uIHRoZSBpbXBsIHNpZGUu
CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhlIHByZXBhaW50ZWQgdGlsZSBvbiB0aGUgaW1wbCBz
aWRlLCBidXQgY3VsbGVkIGl0IGR1cmluZyBwYWludC4KICAgICBFWFBFQ1RfVFJVRShsYXllcklt
cGwtPmhhc1RpbGVBdCgwLCAwKSk7CisgICAgRVhQRUNUX0VRKDEsIG9jY2x1ZGVkLm92ZXJkcmF3
TWV0cmljcygpLnRpbGVzQ3VsbGVkRm9yVXBsb2FkKCkpOwogfQogCiBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWludCkKIHsKLSAgICBP
d25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRl
cmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMg
aW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICAvLyBIb3dldmVyLCBk
dXJpbmcgdGhlIHBhaW50LCB3ZSBpbnZhbGlkYXRlIG9uZSBvZiB0aGUgdGlsZXMuIFRoaXMgc2hv
dWxkCiAgICAgLy8gbm90IHByZXZlbnQgdGhlIHRpbGUgZnJvbSBiZWluZyBwdXNoZWQuCi0gICAg
bGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXItPmludmFsaWRh
dGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXItPnNldFZp
c2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldFJlY3RUb0ludmFsaWRhdGUoSW50UmVjdCgwLCA1
MCwgMTAwLCA1MCksIGxheWVyLmdldCgpKTsKLQotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0gICAgdXBkYXRlVGV4dHVyZXMoKTsK
LSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgIFVwZGF0
ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAg
IEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgLy8gVmlzaWJsZQogCiAgICAgLy8gV2Ugc2hvdWxk
IGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVy
SW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKQEAgLTQyNSwzNCArNDU3LDE4IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1cmluZ1BhaW50KQogCiBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1
cmluZ1BhaW50T25OZXh0TGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSht
X3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMUltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5
ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgyKSkp
OwogCi0gICAgbGF5ZXIxLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVy
MS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBs
YXllcjEtPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0K
LSAgICBsYXllcjItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXIyLT5z
ZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVy
Mi0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQotICAg
IGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgIGxheWVyMS0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3Rh
dHMpOwotCi0gICAgLy8gSW52YWxpZGF0ZSBhIHRpbGUgb24gbGF5ZXIxCisgICAgLy8gSW52YWxp
ZGF0ZSBhIHRpbGUgb24gbGF5ZXIxLCBkdXJpbmcgdXBkYXRlIG9mIGxheWVyIDIuCiAgICAgbGF5
ZXIyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKEludFJl
Y3QoMCwgNTAsIDEwMCwgNTApLCBsYXllcjEuZ2V0KCkpOwotICAgIGxheWVyMi0+dXBkYXRlQ29u
dGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwot
Ci0gICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICBsYXllcjEtPnB1c2hQcm9wZXJ0aWVzVG8obGF5
ZXIxSW1wbC5nZXQoKSk7Ci0gICAgbGF5ZXIyLT5wdXNoUHJvcGVydGllc1RvKGxheWVyMkltcGwu
Z2V0KCkpOworICAgIFVwZGF0ZUFuZFB1c2gobGF5ZXIxLmdldCgpLCBsYXllcjFJbXBsLmdldCgp
LAorICAgICAgICAgICAgICAgICAgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIC8vIFZpc2libGUK
KyAgICAgICAgICAgICAgICAgIGxheWVyMi5nZXQoKSwgbGF5ZXIySW1wbC5nZXQoKSwKKyAgICAg
ICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgLy8gVmlzaWJsZQogCiAgICAg
Ly8gV2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlIGZvciBhbGwgbGF5
ZXJzLgogICAgIEVYUEVDVF9UUlVFKGxheWVyMUltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC00
NjMsMzIgKzQ3OSwxNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVz
TGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25OZXh0TGF5ZXIpCiAKIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPblBy
ZXZpb3VzTGF5ZXIpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0
ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVt
PiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVy
MiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMUltcGwoYWRvcHRQdHIobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllcjJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgyKSkpOwogCi0gICAg
bGF5ZXIxLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVyMS0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBsYXllcjEtPmlu
dmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0KLSAgICBsYXll
cjItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXIyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyMi0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQotICAgIGxheWVyMS0+
c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyMi0+
c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgIC8vIEludmFsaWRhdGUgYSB0aWxl
IG9uIGxheWVyMgogICAgIGxheWVyMS0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0UmVj
dFRvSW52YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIyLmdldCgpKTsKLSAg
ICBsYXllcjEtPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAy
MDApLCAwLCBtX3N0YXRzKTsKLSAgICBsYXllcjItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUs
IEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJl
cygpOwotICAgIGxheWVyMS0+cHVzaFByb3BlcnRpZXNUbyhsYXllcjFJbXBsLmdldCgpKTsKLSAg
ICBsYXllcjItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIySW1wbC5nZXQoKSk7CisgICAgVXBkYXRl
QW5kUHVzaChsYXllcjEuZ2V0KCksIGxheWVyMUltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAg
ICBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgLy8gVmlzaWJsZQorICAgICAgICAgICAgICAgICAg
bGF5ZXIyLmdldCgpLCBsYXllcjJJbXBsLmdldCgpLAorICAgICAgICAgICAgICAgICAgSW50UmVj
dCgwLCAwLCAxMDAsIDIwMCkpOyAvLyBWaXNpYmxlCiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBi
b3RoIHRpbGVzIG9uIHRoZSBpbXBsIHNpZGUgZm9yIGFsbCBsYXllcnMuCiAgICAgRVhQRUNUX1RS
VUUobGF5ZXIxSW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKQEAgLTUxOCwxMCArNTE5LDEwIEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYWludFNtYWxsQW5pbWF0ZWRMYXllcnNJbW1l
ZGlhdGVseSkKICAgICAgICAgaWYgKHJ1bk91dE9mTWVtb3J5W2ldKQogICAgICAgICAgICAgbGF5
ZXJXaWR0aCAqPSAyOwogCi0gICAgICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
bWVtb3J5Rm9yTGF5ZXIsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKKyAgICAgICAg
bV90ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtZW1vcnlGb3JMYXllcik7
CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogCi0gICAgICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgICAgIFJlZlB0
cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRM
YXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICAgICAgT3duUHRyPEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDEpKSk7CiAKICAgICAgICAgLy8gRnVsbCBzaXplIGxheWVyIHdpdGggaGFsZiBiZWlu
ZyB2aXNpYmxlLgpAQCAtNTM5LDggKzU0MCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwYWludFNtYWxsQW5pbWF0ZWRMYXllcnNJbW1lZGlhdGVseSkKICAgICAgICAgLy8gVGhl
IGxheWVyIHNob3VsZCBwYWludCBpdCdzIGVudGlyZSBjb250ZW50cyBvbiB0aGUgZmlyc3QgcGFp
bnQKICAgICAgICAgLy8gaWYgaXQgaXMgY2xvc2UgdG8gdGhlIHZpZXdwb3J0IHNpemUgYW5kIGhh
cyB0aGUgYXZhaWxhYmxlIG1lbW9yeS4KICAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOwotICAgICAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1
ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3RhdHMpOworICAgICAgICBtX3RleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1
ZSwgMCwgbV9zdGF0cyk7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgICAgIGxheWVy
LT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiAKQEAgLTU2NSw0OSArNTY2LDMy
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYWludFNtYWxsQW5pbWF0ZWRMYXll
cnNJbW1lZGlhdGVseSkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWlu
dE91dE9mTWVtb3J5KQogewotICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0dXAg
M3gzIHRpbGVzIHdpdGggb25lIDF4MSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KLSAgICBJ
bnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAzMDApOwotICAgIEludFJlY3QgY29udGVudFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7Ci0gICAgSW50UmVjdCB2aXNpYmxlUmVj
dCgxMDAsIDEwMCwgMTAwLCAxMDApOwotCi0gICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZv
ciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBtZW1vcnkgaW4g
Zmlyc3QgaWRsZSBwYWludC4KLSAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAwICogMTAwOyAv
LyAxIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhlbC4KLQotICAgIE93blB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUobWVtb3J5TGltaXQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsK
LSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0
cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRM
YXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAotICAg
IC8vIEludmFsaWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNpYmxlIHRpbGUu
Ci0gICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKLSAgICBsYXllci0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KHZpc2libGVSZWN0KTsKLSAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRl
bnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1vcnkgZm9yIG9u
bHkgdGhlIHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9yeSBpbiBmaXJz
dCBpZGxlIHBhaW50LgorICAgIGludCBtZW1vcnlMaW1pdCA9IDQgKiAxMDAgKiAxMDA7IC8vIDEg
dGlsZXMsIDQgYnl0ZXMgcGVyIHBpeGVsLgorICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1l
bW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXQpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIHZp
c2libGVSZWN0LCAwLCBtX3N0YXRzKTsKKyAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAs
IHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KKyAgICBib29s
IG5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsK
KyAgICAgICAgbmVlZHNVcGRhdGUgPSBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllcklt
cGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKDMw
MCwgMzAwKSwgLy8gQm91bmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpOyAvLyBWaXNpYmxlCisgICAgfQogCiAgICAgLy8g
SWRsZS1wYWludGluZyBzaG91bGQgc2VlIG5vIG1vcmUgcHJpb3JpdHkgdGlsZXMgZm9yIHBhaW50
aW5nLgotICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3Qp
KTsKLQotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobmVlZHNVcGRhdGUpOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGhhdmUgb25lIHRpbGUgb24gdGhlIGltcGwgc2lkZS4KICAgICBFWFBFQ1Rf
VFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgxLCAxKSk7Ci0KLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1
ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3RhdHMpOwotCi0gICAgLy8gV2Ugc2hvdWxkbid0IHNpZ25h
bCB3ZSBuZWVkIGFub3RoZXIgaWRsZSBwYWludC4KLSAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5l
ZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0g
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKQEAgLTYx
NywyNSArNjAxLDE0IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRa
ZXJvU2l6ZWRMYXllcikKICAgICAgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm1Jc0FuaW1hdGlu
ZyhhbmltYXRpbmdbaV0pOwogCiAgICAgICAgIC8vIFRoZSBsYXllcidzIGJvdW5kcyBhcmUgZW1w
dHkuCi0gICAgICAgIEludFJlY3QgY29udGVudFJlY3Q7Ci0KLSAgICAgICAgbGF5ZXItPnNldEJv
dW5kcyhjb250ZW50UmVjdC5zaXplKCkpOwotICAgICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRl
bnRSZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChjb250ZW50UmVjdCk7Ci0KLSAgICAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1f
cHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOwotCiAgICAgICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBwYWludCBvciBpZGxl
LXBhaW50LgotICAgICAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVu
dFJlY3QsIDAsIG1fc3RhdHMpOwotCisgICAgICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBVcGRhdGVB
bmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoKSk7IC8vIFZpc2libGUKICAgICAgICAgLy8g
RW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCiAgICAgICAgIEVYUEVDVF9FUSgwdSwgbGF5
ZXItPm51bVBhaW50ZWRUaWxlcygpKTsKIAogICAgICAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3Qg
bmVlZCBwcmVwYWludC4KLSAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWlu
dChjb250ZW50UmVjdCkpOwotCi0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVy
SW1wbC5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiAKICAgICAg
ICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCiAgICAgICAgIEVYUEVDVF9GQUxT
RShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC02NDQsMTQgKzYxNyw5IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIAogVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCiB7
Ci0gICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDEwMCwgMTAwKTsKLSAgICBJbnRSZWN0IGNvbnRl
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOwotCi0gICAgT3duUHRyPEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29u
dGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgx
KSkpOwotICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CiAKICAgICAvLyBBbHRl
cm5hdGUgYmV0d2VlbiBub3QgdmlzaWJsZSBhbmQgdmlzaWJsZS4KICAgICBJbnRSZWN0IHYoMCwg
MCwgMTAwLCAxMDApOwpAQCAtNjY0LDY5ICs2MzIsNjAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCiAgICAgYm9vbCBoYXZlVGlsZVsx
MF0gPSB7IGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVl
LCB0cnVlLCB0cnVlIH07CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAg
ICAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdCh2aXNpYmxlUmVjdFtpXSk7Ci0KLSAg
ICAgICAgLy8gU2tpcCBpbnZhbGlkYXRpb24gb25jZSB0byBpbnN1cmUgdGhlIHRpbGUgc3RheXMg
aW4gbWVtb3J5IHdoaWxlIG5vdCB2aXNpYmxlLgotICAgICAgICBpZiAoaW52YWxpZGF0ZVtpXSkK
LSAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwot
Ci0gICAgICAgIC8vIFBhaW50IC8gaWRsZS1wYWludC4KLSAgICAgICAgdGV4dHVyZU1hbmFnZXIt
PmNsZWFyUHJpb3JpdGllcygpOwotICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMo
bV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7Ci0gICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCB2
aXNpYmxlUmVjdFtpXSwgMCwgbV9zdGF0cyk7Ci0KLSAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsK
LQorICAgICAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgICAgIGlmIChpbnZhbGlk
YXRlW2ldKSB7CisgICAgICAgICAgICBuZWVkc1VwZGF0ZSA9IEludmFsaWRhdGVVcGRhdGVBbmRQ
dXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFNpemUoMTAwLCAxMDApLCAvLyBib3VuZHMK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJs
ZVJlY3RbaV0sIC8vIHZpc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOyAvLyBpbnZhbGlkYXRlCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZWVkc1VwZGF0ZSA9IFVwZGF0ZUFuZFB1c2go
bGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRTaXplKDEwMCwgMTAwKSwgLy8gYm91bmRzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3RbaV0pOyAvLyB2aXNpYmxlCisg
ICAgICAgIH0KKyAgIAogICAgICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgc2lnbmFsIGlkbGUgcGFp
bnQsIGFzIHdlIHBhaW50ZWQgdGhlIGVudGlyZSBsYXllcgogICAgICAgICAvLyBvciB0aGUgbGF5
ZXIgd2FzIG5vdCB2aXNpYmxlLgotICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRs
ZVBhaW50KHZpc2libGVSZWN0W2ldKSk7Ci0KLSAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVz
VG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG5lZWRzVXBkYXRlKTsK
ICAgICAgICAgRVhQRUNUX0VRKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApLCBoYXZlVGlsZVtp
XSk7CiAgICAgfQogfQogCi0KIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlk
YXRlRnJvbVByZXBhcmUpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0
KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
bV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFk
b3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gVGhlIHRpbGUg
c2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28g
dGlsZXMuCi0gICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5
ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0gICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0g
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRz
KTsKLSAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNU
byhsYXllckltcGwuZ2V0KCkpOworICAgIFVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVy
SW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsg
Ly8gdmlzaWJsZQogCiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1w
bCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKICAg
ICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKICAgICBsYXllci0+
ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlQ291bnQoKTsKLSAgICAvLyBJ
bnZva2UgdXBkYXRlQ29udGVudFJlY3QgYWdhaW4uIEFzIHRoZSBsYXllciBpcyB2YWxpZCB1cGRh
dGVDb250ZW50UmVjdCBzaG91bGRuJ3QgYmUgaW52b2tlZCBvbgorICAgIC8vIEludm9rZSB1cGRh
dGVDb250ZW50IGFnYWluLiBBcyB0aGUgbGF5ZXIgaXMgdmFsaWQgdXBkYXRlQ29udGVudFJlY3Qg
c2hvdWxkbid0IGJlIGludm9rZWQgb24KICAgICAvLyB0aGUgTGF5ZXJUZXh0dXJlVXBkYXRlci4K
LSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAs
IDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKDEwMDApOworICAgIFVwZGF0
ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAgICAg
IEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgLy8gdmlzaWJsZQogICAgIEVYUEVDVF9FUSgwLCBs
YXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZUNvdW50KCkpOwogCi0gICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwotICAg
IC8vIHNldFJlY3RUb0ludmFsaWRhdGUgdHJpZ2dlcnMgaW52YWxpZGF0ZUNvbnRlbnRSZWN0KCkg
YmVpbmcgaW52b2tlZCBmcm9tIHVwZGF0ZUNvbnRlbnRSZWN0LgorICAgIC8vIHNldFJlY3RUb0lu
dmFsaWRhdGUgdHJpZ2dlcnMgaW52YWxpZGF0ZUNvbnRlbnRSZWN0KCkgYmVpbmcgaW52b2tlZCBm
cm9tIHVwZGF0ZUNvbnRlbnQuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCkt
PnNldFJlY3RUb0ludmFsaWRhdGUoSW50UmVjdCgyNSwgMjUsIDUwLCA1MCksIGxheWVyLmdldCgp
KTsKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlQ291
bnQoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAw
LCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKDEwMDApOworICAg
IEludmFsaWRhdGVVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSgxMDAsIDIwMCksIC8vIGJvdW5kcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAvLyB2
aXNpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgwLCAwLCA1MCwgNTAp
KTsgLy8gaW52YWxpZGF0ZQogICAgIEVYUEVDVF9FUSgxLCBsYXllci0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+cHJlcGFyZUNvdW50KCkpOwogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT5jbGVhclByZXBhcmVDb3VudCgpOworCiAgICAgLy8gVGhlIGxheWVyIHNob3Vs
ZCBzdGlsbCBiZSBpbnZhbGlkIGFzIHVwZGF0ZUNvbnRlbnRSZWN0IGludm9rZWQgaW52YWxpZGF0
ZS4KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAx
MDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKDEwMDApOworICAgIFVw
ZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSwKKyAgICAgICAgICAgICAg
ICAgIEludFNpemUoMTAwLCAyMDApLCAvLyBib3VuZHMKKyAgICAgICAgICAgICAgICAgIEludFJl
Y3QoMCwgMCwgMTAwLCAyMDApKTsgLy8gdmlzaWJsZQogICAgIEVYUEVDVF9FUSgxLCBsYXllci0+
ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZUNvdW50KCkpOwogfQogCkBAIC03MzQs
OSArNjkzLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJl
Y3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkKIHsKICAgICAvLyBUaGUgdXBkYXRlUmVjdCAo
dGhhdCBpbmRpY2F0ZXMgd2hhdCB3YXMgYWN0dWFsbHkgcGFpbnRlZCkgc2hvdWxkIGJlIGluCiAg
ICAgLy8gbGF5ZXIgc3BhY2UsIG5vdCB0aGUgY29udGVudCBzcGFjZS4KLQotICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNv
bnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHModGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91
bmRzPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHMo
bV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsVGhyZWFkOwogCiAgICAgSW50UmVjdCBsYXllckJvdW5kcygwLCAwLCAzMDAsIDIwMCk7CkBA
IC03NTEsMTYgKzcwOCwxNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5
VXBkYXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2NhbGVkKQogICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoY29udGVudEJvdW5kcyk7CiAKICAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwg
Y29udGVudEJvdW5kcywgMCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgMCwgbV9z
dGF0cyk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIDMwMCwgMzAw
ICogMC44KSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKIAog
ICAgIC8vIEFmdGVyIHRoZSB0aWxlcyBhcmUgdXBkYXRlZCBvbmNlLCBhbm90aGVyIGludmFsaWRh
dGUgb25seSBuZWVkcyB0byB1cGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIuCiAgICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChj
b250ZW50Qm91bmRzKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29u
dGVudEJvdW5kcywgMCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1
ZSwgMCwgbV9zdGF0cyk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KGxheWVy
Qm91bmRzKSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKIApA
QCAtNzY4LDE1ICs3MjUsMTQgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlm
eVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkKICAgICBJbnRSZWN0IHBhcnRp
YWxEYW1hZ2UoMzAsIDEwMCwgMTAsIDEwKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRS
ZWN0KHBhcnRpYWxEYW1hZ2UpOwogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3By
aW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50Qm91bmRz
LCAwLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKICAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoNDUsIDgwLCAxNSwgOCksIGxheWVyLT51cGRh
dGVSZWN0KCkpOwogfQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52
YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogewotICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQ
b29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsK
IApAQCAtNzkwLDggKzc0Niw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJp
ZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAKICAgICAvLyBQdXNoIHRo
ZSB0aWxlcyB0byB0aGUgaW1wbCBzaWRlIGFuZCBjaGVjayB0aGF0IHRoZXJlIGlzIGV4YWN0bHkg
b25lLgogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRv
cik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVy
LT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCwg
bV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgdXBkYXRl
VGV4dHVyZXMoKTsKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkp
OwogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKQEAgLTgwNyw4
ICs3NjMsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0
aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogCiAgICAgLy8gVGhlIGltcGwgc2lkZSBzaG91
bGQgZ2V0IDJ4MiB0aWxlcyBub3cuCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1f
cHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwg
MCwgMjAwLCAyMDApLCAwLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCAwLCBtX3N0
YXRzKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbC5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQo
MCwgMCkpOwpAQCAtODIwLDggKzc3Niw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgLy8gaW1w
bCBzaWRlLgogICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyLT51cGRhdGVD
b250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDEsIDAsIDAsIDEpLCAwLCBtX3N0YXRzKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNU
byhsYXllckltcGwuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVB
dCgwLCAwKSk7CkBAIC04ODMsMTYgKzgzOCwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcmVzaXplVG9TbWFsbGVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNjAqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKElu
dFNpemUoNzAwLCA3MDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJl
Y3QoMCwgMCwgNzAwLCA3MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KElu
dFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0
KDAsIDAsIDcwMCwgNzAwKSwgMCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgMCwg
bV9zdGF0cyk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMjAwLCAyMDApKTsKICAg
ICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMjAwLCAyMDApKTsK
QEAgLTkwMCw4ICs4NTQsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcmVzaXpl
VG9TbWFsbGVyKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaHVnZUxheWVyVXBk
YXRlQ3Jhc2gpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg2MCoxMDI0
KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIGludCBzaXplID0gMSA8PCAzMDsKICAgICBsYXll
ci0+c2V0Qm91bmRzKEludFNpemUoc2l6ZSwgc2l6ZSkpOwpAQCAtOTEwLDggKzg2Myw4IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBodWdlTGF5ZXJVcGRhdGVDcmFzaCkKIAogICAg
IC8vIEVuc3VyZSBubyBjcmFzaCBmb3IgYm91bmRzIHdoZXJlIHNpemUgKiBzaXplIHdvdWxkIG92
ZXJmbG93IGFuIGludC4KICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0
eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
LSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA3MDAs
IDcwMCksIDAsIG1fc3RhdHMpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIDAsIG1fc3RhdHMpOwog
fQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCkBAIC0x
MDQ0LDggKzk5Nyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBk
YXRlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhv
dXRPY2NsdXNpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEw
MjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNo
cm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90
ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAw
LCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5
ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CkBAIC0xMDU0LDE1ICsxMDA2LDE0IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVz
aW9uKQogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAs
IDIwMCkpOwogCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxj
dWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAg
bGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
LCAwLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKICAgICBF
WFBFQ1RfRVEoMiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0
Q291bnQoKSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50
ZWRXaXRoT2NjbHVzaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
NCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9j
Y2x1ZGVkOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLgpAQCAtMTA3NSw4ICsx
MDI2LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhP
Y2NsdXNpb24pCiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAs
IDYwMCwgNjAwKSk7CiAKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0
eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
LSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAs
IDYwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgJm9jY2x1
ZGVkLCBtX3N0YXRzKTsKICAgICBFWFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRleHR1
cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2Ns
dWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAg
LTEwODUsMTEgKzEwMzYsMTEgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVz
UGFpbnRlZFdpdGhPY2NsdXNpb24pCiAKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+Y2xlYXJQcmVwYXJlUmVjdENvdW50KCk7CiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlv
cml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CiAKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVjdCgyNTAsIDIwMCwgMzAwLCAx
MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAw
LCA2MDApKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgw
LCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNv
bnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICBFWFBFQ1RfRVEoMzYtMiwg
bGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAK
ICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRl
ZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEwOTgsMTEgKzEwNDksMTEgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb24pCiAKICAgICBsYXllci0+
ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlUmVjdENvdW50KCk7CiAgICAg
bGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50
UmVjdCgyNTAsIDI1MCwgMzAwLCAxMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRS
ZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJl
Y3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7
CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsK
ICAgICBFWFBFQ1RfRVEoMzYsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVw
YXJlUmVjdENvdW50KCkpOwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRy
aWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC0xMTEyLDggKzEwNjMsNyBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lv
bikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2Ns
dXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7
Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVz
aW9uVHJhY2tlciBvY2NsdWRlZDsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4K
QEAgLTExMjcsOCArMTA3Nyw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxl
c1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAgbGF5ZXIt
PmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAKICAgICBs
YXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29u
dGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDM2MCksICZvY2NsdWRlZCwgbV9z
dGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
bGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICBF
WFBFQ1RfRVEoMjQtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVS
ZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3Mo
KS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTExNDMsOCArMTA5Myw4IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5k
VmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJ
bnRSZWN0KDAsIDAsIDYwMCwgMzUwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJl
Y3QoMCwgMCwgNjAwLCAzNTApLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIG1fdGV4dHVyZU1h
bmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1f
cXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgRVhQRUNUX0VRKDI0LTYsIGxheWVyLT5m
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCiAgICAgRVhQ
RUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUo
KSwgMCwgMSk7CkBAIC0xMTU5LDggKzExMDksOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQog
ICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDM0MCkp
OwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYw
MCkpOwogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRv
cik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVy
LT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDYwMCwgMzQwKSwgJm9j
Y2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3Rh
dHMpOwogICAgIEVYUEVDVF9FUSgyNC02LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJk
cmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTE3MSw4ICsx
MTIxLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhP
Y2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiB7Ci0gICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJl
cjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdl
dCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwog
ICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBz
aXplIGlzIDEwMHgxMDAuCkBAIC0xMTg0LDggKzExMzMsOCBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgdGlsZXNOb3RQYWludGVkV2l0aG91dEludmFsaWRhdGlvbikKICAgICBsYXll
ci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBs
YXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRl
Q29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCwg
bV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAg
ICBFWFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBh
cmVSZWN0Q291bnQoKSk7CiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbFRocmVhZDsKQEAgLTExOTgsMTAgKzExNDcsMTAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiAKICAgICBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlUmVjdENvdW50KCk7CiAg
ICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKICAgICAvLyBSZXBhaW50IHdpdGhvdXQgbWFy
a2luZyBpdCBkaXJ0eS4gVGhlIDMgY3VsbGVkIHRpbGVzIHdpbGwgYmUgcHJlLXBhaW50ZWQgbm93
LgotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDYw
MCwgNjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudCht
X3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgzLCBsYXllci0+ZmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVD
VF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCks
IDAsIDEpOwpAQCAtMTIxMSw4ICsxMTYwLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiAKIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVHJhbnNmb3JtcykK
IHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0
LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIAogICAgIC8v
IFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4KQEAgLTEyMzAsOCArMTE3OCw4IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVHJhbnNm
b3JtcykKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVu
dFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJ
bnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVu
dChtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgzNi0zLCBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIAogICAg
IEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3Bh
cXVlKCksIDAsIDEpOwpAQCAtMTI0MSw4ICsxMTg5LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRUcmFuc2Zvcm1zKQogCiBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNj
YWxpbmcpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVy
ZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAy
NCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJl
TWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAK
ICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuCkBAIC0xMjYyLDggKzEyMDksOCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFu
ZFNjYWxpbmcpCiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNv
bnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1
ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbV90
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZUNv
bnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICAvLyBUaGUgY29udGVudCBp
cyBoYWxmIHRoZSBzaXplIG9mIHRoZSBsYXllciAoc28gdGhlIG51bWJlciBvZiB0aWxlcyBpcyBm
ZXdlcikuCiAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgY29udGVudCBpcyAzMDB4MzAwLCBhbmQg
c2luY2UgdGhlIHRpbGUgc2l6ZSBpcyAxMDAsIHRoZQogICAgIC8vIG51bWJlciBvZiB0aWxlcyAz
eDMuCkBAIC0xMjgzLDggKzEyMzAsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
dGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgbGF5ZXItPnNldFZpc2li
bGVDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCkp
KTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2
MDApKTsKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0
b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXll
ci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZv
Y2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0
YXRzKTsKICAgICBFWFBFQ1RfRVEoOS0xLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJk
cmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTMwNCw4ICsx
MjUxLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhP
Y2NsdXNpb25BbmRTY2FsaW5nKQogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBsYXllci0+Y29udGVudEJvdW5kcygpKSk7CiAgICAgbGF5ZXItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAgICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRS
ZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQsIG1fc3RhdHMp
OworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVy
LT51cGRhdGVDb250ZW50KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgRVhQRUNU
X0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291
bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhl
bHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEzMTUsOCArMTI2Miw3IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGlu
ZykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVl
UmVnaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogCkBAIC0xMzM0LDEyICsx
MjgwLDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9w
YXF1ZVJlZ2lvbikKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICBsYXllci0+
c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKIAogICAgIC8vIElmIHRoZSBsYXllciBkb2Vzbid0IHBhaW50IG9w
YXF1ZSBjb250ZW50LCB0aGVuIHRoZSB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbiBzaG91bGQg
YmUgZW1wdHkuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1
ZVBhaW50UmVjdChJbnRSZWN0KCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3Qo
Y29udGVudEJvdW5kcyk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNv
bnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICBvcGFxdWVDb250ZW50cyA9IGxh
eWVyLT52aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIEVYUEVDVF9UUlVFKG9wYXF1
ZUNvbnRlbnRzLmlzRW1wdHkoKSk7CiAKQEAgLTEzNTIsNyArMTI5OCw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKICAgICBvcGFx
dWVQYWludFJlY3QgPSBJbnRSZWN0KDEwLCAxMCwgOTAsIDE5MCk7CiAgICAgbGF5ZXItPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChvcGFxdWVQYWludFJlY3Qp
OwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudEJvdW5kcyk7Ci0gICAg
bGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3VuZHMsICZvY2NsdWRl
ZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVk
LCBtX3N0YXRzKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIG9wYXF1ZUNvbnRlbnRzID0g
bGF5ZXItPnZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCk7CiAgICAgRVhQRUNUX0VRX1JFQ1Qo
aW50ZXJzZWN0aW9uKG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9wYXF1ZUNvbnRl
bnRzLmJvdW5kcygpKTsKQEAgLTEzNjUsNyArMTMxMSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKIAogICAgIC8vIElmIHdlIHBh
aW50IGFnYWluIHdpdGhvdXQgaW52YWxpZGF0aW5nLCB0aGUgc2FtZSBzdHVmZiBzaG91bGQgYmUg
b3BhcXVlLgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQ
YWludFJlY3QoSW50UmVjdCgpKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1
ZSwgY29udGVudEJvdW5kcywgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBsYXllci0+dXBkYXRl
Q29udGVudChtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIHVwZGF0ZVRleHR1cmVz
KCk7CiAgICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdp
b24oKTsKICAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24ob3BhcXVlUGFpbnRSZWN0LCB2
aXNpYmxlQm91bmRzKSwgb3BhcXVlQ29udGVudHMuYm91bmRzKCkpOwpAQCAtMTM4MCw3ICsxMzI2
LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVl
UmVnaW9uKQogICAgIC8vIG5vdCBiZSBhZmZlY3RlZC4KICAgICBsYXllci0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgbGF5ZXIt
PmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEsIDEpKTsKLSAgICBsYXllci0+
dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudEJvdW5kcywgJm9jY2x1ZGVkLCBtX3N0
YXRzKTsKKyAgICBsYXllci0+dXBkYXRlQ29udGVudChtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3Rh
dHMpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+
dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKTsKICAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNl
Y3Rpb24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSwgb3BhcXVlQ29udGVudHMuYm91
bmRzKCkpOwpAQCAtMTM5NSw3ICsxMzQxLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogICAgIC8vIG5vdCBiZSBhZmZlY3RlZC4K
ICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0
KEludFJlY3QoKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDEw
LCAxMCwgMSwgMSkpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250
ZW50Qm91bmRzLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50
KG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAg
ICBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpOwog
ICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihJbnRSZWN0KDEwLCAxMDAsIDkwLCAxMDAp
LCB2aXNpYmxlQm91bmRzKSwgb3BhcXVlQ29udGVudHMuYm91bmRzKCkpOwpAQCAtMTQwOSw4ICsx
MzU1LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3Bh
cXVlUmVnaW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRl
ZE1ldHJpY3MpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQq
MTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7
CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAKQEAgLTE0MjgsMTIg
KzEzNzMsMTIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRN
ZXRyaWNzKQogICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKIAogICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRp
emVUZXh0dXJlcygpOwogCiAgICAgLy8gSW52YWxpZGF0ZXMgYW5kIHBhaW50cyB0aGUgd2hvbGUg
bGF5ZXIuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBh
aW50UmVjdChJbnRSZWN0KCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29u
dGVudEJvdW5kcyk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRl
bnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQo
bV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAg
IG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCk7CiAg
ICAgRVhQRUNUX1RSVUUob3BhcXVlQ29udGVudHMuaXNFbXB0eSgpKTsKQEAgLTE0NDgsNyArMTM5
Myw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhlbHNQYWludGVkTWV0cmlj
cykKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRS
ZWN0KEludFJlY3QoKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0
KDAsIDAsIDEsIDEpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3Qo
NTAsIDIwMCwgMTAsIDEwKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUs
IGNvbnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNv
bnRlbnQobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICB1cGRhdGVUZXh0dXJlcygp
OwogICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZpc2libGVDb250ZW50T3BhcXVlUmVnaW9u
KCk7CiAgICAgRVhQRUNUX1RSVUUob3BhcXVlQ29udGVudHMuaXNFbXB0eSgpKTsKQEAgLTE2NjIs
OSArMTYwNyw3IEBAIHByaXZhdGU6CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBu
b25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nUGFpbnQpCiB7Ci0gICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNDAwMDAwMCwgNDAwMDAwMCwgQ0NSZW5kZXJl
cjo6Q29udGVudFBvb2wpKTsKLQotICAgIFJlZlB0cjxVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgVXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hy
b21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8VXBkYXRlVHJhY2tpbmdU
aWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IFVwZGF0ZVRyYWNraW5nVGls
ZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIEludFJlY3Qg
bGF5ZXJSZWN0KDAsIDAsIDMwLCAzMSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVyUmVj
dC5sb2NhdGlvbigpKTsKQEAgLTE2NzcsMTAgKzE2MjAsMTAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdQ
YWludCkKICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAK
ICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgd2hvbGUg
dGlsZS4KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudFJlY3Qs
IDAsIG1fc3RhdHMpOworICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIDAsIG1fc3Rh
dHMpOwogICAgIGxheWVyLT50cmFja2luZ0xheWVyUGFpbnRlcigpLT5yZXNldFBhaW50ZWRSZWN0
KCk7CiAKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgpLCBsYXllci0+dHJhY2tpbmdM
YXllclBhaW50ZXIoKS0+cGFpbnRlZFJlY3QoKSk7CkBAIC0xNjkyLDE2ICsxNjM1LDE0IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90
RGlzdG9ydGVkRHVyaW5nUGFpbnQpCiAKICAgICAvLyBJbnZhbGlkYXRlIHRoZSBlbnRpcmUgbGF5
ZXIgaW4gY29udGVudCBzcGFjZS4gV2hlbiBwYWludGluZywgdGhlIHJlY3QgZ2l2ZW4gdG8gd2Vi
a2l0IHNob3VsZCBtYXRjaCB0aGUgbGF5ZXIncyBib3VuZHMuCiAgICAgbGF5ZXItPmludmFsaWRh
dGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0
KG1fcXVldWUsIGNvbnRlbnRSZWN0LCAwLCBtX3N0YXRzKTsKKyAgICBsYXllci0+dXBkYXRlQ29u
dGVudChtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKIAogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShsYXll
clJlY3QsIGxheWVyLT50cmFja2luZ0xheWVyUGFpbnRlcigpLT5wYWludGVkUmVjdCgpKTsKIH0K
IAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxl
SXNOb3REaXN0b3J0ZWREdXJpbmdJbnZhbGlkYXRpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNDAwMDAwMCwgNDAwMDAwMCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wp
KTsKLQotICAgIFJlZlB0cjxVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIg
PSBhZG9wdFJlZihuZXcgVXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1h
bmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8VXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyID0gYWRvcHRSZWYobmV3IFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVt
KG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIEludFJlY3QgbGF5ZXJSZWN0KDAsIDAs
IDMwLCAzMSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVyUmVjdC5sb2NhdGlvbigpKTsK
QEAgLTE3MTMsMTAgKzE2NTQsMTAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5v
bkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdJbnZhbGkKICAgICBsYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAKICAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgd2hvbGUgdGlsZS4KLSAgICBsYXll
ci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudFJlY3QsIDAsIG1fc3RhdHMpOwor
ICAgIGxheWVyLT51cGRhdGVDb250ZW50KG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIGxheWVy
LT50cmFja2luZ0xheWVyUGFpbnRlcigpLT5yZXNldFBhaW50ZWRSZWN0KCk7CiAKICAgICBFWFBF
Q1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgpLCBsYXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+
cGFpbnRlZFJlY3QoKSk7CkBAIC0xNzI4LDcgKzE2NjksNyBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3RvcnRlZER1cmluZ0lu
dmFsaQogCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZW50aXJlIGxheWVyIGluIGxheWVyIHNwYWNl
LiBXaGVuIHBhaW50aW5nLCB0aGUgcmVjdCBnaXZlbiB0byB3ZWJraXQgc2hvdWxkIG1hdGNoIHRo
ZSBsYXllcidzIGJvdW5kcy4KICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChsYXllclJl
Y3QpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50UmVjdCwg
MCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnQobV9xdWV1ZSwgMCwgbV9zdGF0
cyk7CiAKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEobGF5ZXJSZWN0LCBsYXllci0+dHJhY2tpbmdM
YXllclBhaW50ZXIoKS0+cGFpbnRlZFJlY3QoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159952</attachid>
            <date>2012-08-22 09:17:51 -0700</date>
            <delta_ts>2012-08-22 11:43:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94165-20120822091749.patch</filename>
            <type>text/plain</type>
            <size>79016</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODUxYTI3N2NlNWIzOTNm
NWM2YTczMmM1NWM1NjJhNTdmNTVkMjZjOS4uNzg3ODM3MGZjYTI1MGJlOGFlYzJmZWI0M2ViNTlm
YjU5ODAwZGUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDA4LTA4LTIyICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNpbXBs
aWZ5IHVwZGF0ZUNvbnRlbnRSZWN0LCByZW1vdmluZyByZWN0IHBhcmFtZXRlciwgcmVmYWN0b3Ig
dW5pdCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIHZpc2libGUgcmVjdCBwYXJhbWV0ZXIgZnJvbSBUaWxlZExheWVyQ2hyb21pdW0g
ZnVuY3Rpb25zLiBQYXNzaW5nIGEKKyAgICAgICAgcmVjdCB0aGF0IGlzIG5vdCB0aGUgdmlzaWJs
ZSByZWN0IHdvdWxkbid0IG1ha2Ugc2Vuc2UsIGFuZCBzb29uIHdlIG1pZ2h0CisgICAgICAgIG5l
ZWQgZnVydGhlciB2aXNpYmlsaXR5IGluZm9ybWF0aW9uLgorCisgICAgICAgIEluIHJlZmFjdG9y
aW5nIHRoZSB1bml0IHRlc3RzLCBJIHJlbW92ZWQgdGV4dHVyZSBtYW5hZ2VyIGZyb20gYWxsIHRl
c3RzCisgICAgICAgIGFuZCBwdXQgaXQgaW4gdGhlIHRlc3QgY2xhc3MuIEkgYWxzbyBtYWRlIHNv
bWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gCisgICAgICAgIHNpbXVsYXRlIHRoZSBjb21taXQgZmxv
dyBhbmQgcmVtb3ZlIHRvbnMgb2YgYm9pbGVycGxhdGUgY29kZS4gSSByZWZhY3RvcmVkCisgICAg
ICAgIGFib3V0IGhhbGYgdGhlIHVuaXQgdGVzdHMgdG8gdXNlIHRoZSB1dGlsaXR5IGZ1bmN0aW9u
cy4KKworICAgICAgICBSZWZhY3RvcmVkIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6bmVlZE1vcmVVcGRhdGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpyZXNldFVwZGF0ZVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFRpbGVkTGF5ZXJDaHJvbWl1bSk6CisKIDIwMTItMDgtMjEgIEtlbnRhcm8gSGFyYSAg
PGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gTW92ZSBTdHJpbmcgcmVsYXRl
ZCBjb2RlIGluIFY4QmluZGluZyB0byBhIHNlcGFyYXRlIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggYzkzNWI1NjcwNTFiZDJjYTM1NDk4N2QzZTdmMGY1NjdlNmY2ODU4NC4uNmNh
NDcyZjBhZWM3NjExNThmNWMyNWYxYTZkNzJhZGEwNDFlZDIxZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOC0yMiAgRXJpYyBQZW5uZXIgIDxlcGVu
bmVyQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBTaW1wbGlmeSB1cGRhdGVDb250
ZW50UmVjdCwgcmVtb3ZpbmcgcmVjdCBwYXJhbWV0ZXIsIHJlZmFjdG9yIHVuaXQgdGVzdHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDE2NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQg
dGVzdHMgdG8gcmVtb3ZlIGxvdHMgb2YgYm9pbGVycGxhdGUgY29kZS4KKworICAgICAgICAqIHRl
c3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwOgorICAgICAgICAqIHRlc3RzL0NDVGlsZWRM
YXllclRlc3RDb21tb24uaDoKKyAgICAgICAgKEZha2VUaWxlZExheWVyQ2hyb21pdW0pOgorICAg
ICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA4LTIxICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTI2MjAyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDBkYzk2MGI2ZDc2NzlkNmEyZWRiYjMyMDYzMTQ3ZDUyNTA1ZGVmMWIuLmE4
ZjU3ZTI5NmQxYWZjYmQ1NjA5NDlkMWM1MGZhNTVhMzQzNjMzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTk2LDIzICs5NiwxMyBAQCB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRv
ciYgcHJpbwogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0
ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2VyKiBvY2NsdXNpb24sIENDUmVu
ZGVyaW5nU3RhdHMmIHN0YXRzKQogewogICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQo
KTsKLQotICAgIEludFJlY3QgY29udGVudFJlY3Q7Ci0KLSAgICAvLyBBbHdheXMgY2FsbCB1cGRh
dGVDb250ZW50UmVjdCgpIGJ1dCB3aXRoIGFuIGVtcHR5IGxheWVyIHJlY3RhbmdsZSB3aGVuCi0g
ICAgLy8gbGF5ZXIgZG9lc24ndCBkcmF3IGNvbnRlbnRzLgotICAgIGlmIChkcmF3c0NvbnRlbnQo
KSkKLSAgICAgICAgY29udGVudFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3QoKTsKLQotICAgIHVw
ZGF0ZUNvbnRlbnRSZWN0KHF1ZXVlLCBjb250ZW50UmVjdCwgb2NjbHVzaW9uLCBzdGF0cyk7Cisg
ICAgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGUocXVldWUsIG9jY2x1c2lvbiwgc3RhdHMpOwog
ICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKIGJvb2wgQ29udGVudExheWVyQ2hyb21p
dW06Om5lZWRNb3JlVXBkYXRlcygpCiB7Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBuZWVkc0lkbGVQYWludCh2aXNpYmxlQ29udGVu
dFJlY3QoKSk7CisgICAgcmV0dXJuIG5lZWRzSWRsZVBhaW50KCk7CiB9CiAKIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjdlNjAzZWQ4YmNjMjM0NzkzZDNjOTBmYTEyYzA5
MDg5MThjYTUzZi4uZjhkODY5ZmFkNTc3MzFjZjNmN2UzOGI3MDJjZmE0Y2FiNjU3YTZiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDgsOCArMTQ4LDcgQEAgdm9pZCBJ
bWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZShDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNv
bnN0IENDT2NjbHVzaW9uVHIKICAgICAgICAgaW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKSk7CiAgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0g
ZmFsc2U7CiAgICAgfQotCi0gICAgdXBkYXRlQ29udGVudFJlY3QocXVldWUsIHZpc2libGVDb250
ZW50UmVjdCgpLCBvY2NsdXNpb24sIHN0YXRzKTsKKyAgICBUaWxlZExheWVyQ2hyb21pdW06OnVw
ZGF0ZShxdWV1ZSwgb2NjbHVzaW9uLCBzdGF0cyk7CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9t
aXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGNjZTE2MzUyMmJiMmQ3YzI0MmRkYzQzOTc1YTRjOTIzOWNmOWNhYWIu
LjY4YmZhNDViMGJjYzg2MDNkN2YwODM5OTMwMDJiZjkxZmZhMWRkOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcApAQCAtNTUzLDExICs1NTMsNiBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgaW50
IGxlZnQsCiAgICAgfQogfQogCi12b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVBy
aW9yaXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaXR5Q2FsYykKLXsKLSAg
ICBzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGMsIHZpc2libGVDb250ZW50
UmVjdCgpKTsKLX0KLQogbmFtZXNwYWNlIHsKIC8vIFRoaXMgcGlja3MgYSBzbWFsbCBhbmltYXRl
ZCBsYXllciB0byBiZSBhbnl0aGluZyBsZXNzIHRoYW4gb25lIHZpZXdwb3J0LiBUaGlzCiAvLyBp
cyBzcGVjaWZpY2FsbHkgZm9yIHBhZ2UgdHJhbnNpdGlvbnMgd2hpY2ggYXJlIHZpZXdwb3J0LXNp
emVkIGxheWVycy4gVGhlIGV4dHJhCkBAIC01OTIsNyArNTg3LDcgQEAgdm9pZCBzZXRQcmlvcml0
eUZvclRleHR1cmUoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaXR5Q2FsYywKIH0K
IH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiBwcmlvcml0eUNhbGMsIGNvbnN0IEludFJlY3Qm
IHZpc2libGVDb250ZW50UmVjdCkKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJl
UHJpb3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpb3JpdHlDYWxjKQogewog
ICAgIHVwZGF0ZUJvdW5kcygpOwogICAgIHJlc2V0VXBkYXRlU3RhdGUoKTsKQEAgLTYwNCw3ICs1
OTksNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJl
Y3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgYm9vbCBzbWFsbEFuaW1hdGVkTGF5
ZXIgPSBpc1NtYWxsQW5pbWF0ZWRMYXllcih0aGlzKTsKIAogICAgIC8vIE1pbmltYWxseSBjcmVh
dGUgdGhlIHRpbGVzIGluIHRoZSBkZXNpcmVkIHByZS1wYWludCByZWN0LgotICAgIEludFJlY3Qg
Y3JlYXRlVGlsZXNSZWN0ID0gaWRsZVBhaW50UmVjdCh2aXNpYmxlQ29udGVudFJlY3QpOworICAg
IEludFJlY3QgY3JlYXRlVGlsZXNSZWN0ID0gaWRsZVBhaW50UmVjdCgpOwogICAgIGlmICghY3Jl
YXRlVGlsZXNSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tOwogICAgICAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY3JlYXRl
VGlsZXNSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwpAQCAtNjE4LDcgKzYxMyw3IEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25z
dCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKIAogICAgIC8vIEFsc28sIG1pbmltYWxseSBjcmVhdGUg
YWxsIHRpbGVzIGZvciBzbWFsbCBhbmltYXRlZCBsYXllcnMgYW5kIGFsc28KICAgICAvLyBkb3Vi
bGUtYnVmZmVyIHRoZW0gc2luY2Ugd2UgaGF2ZSBsaW1pdGVkIHRoZWlyIHNpemUgdG8gYmUgcmVh
c29uYWJsZS4KLSAgICBJbnRSZWN0IGRvdWJsZUJ1ZmZlcmVkUmVjdCA9IHZpc2libGVDb250ZW50
UmVjdDsKKyAgICBJbnRSZWN0IGRvdWJsZUJ1ZmZlcmVkUmVjdCA9IHZpc2libGVDb250ZW50UmVj
dCgpOwogICAgIGlmIChzbWFsbEFuaW1hdGVkTGF5ZXIpCiAgICAgICAgIGRvdWJsZUJ1ZmZlcmVk
UmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKTsKIApAQCAt
NjQ3LDcgKzY0Miw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3Jp
dGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKICAgICAgICAgICAgICAgICBJ
bnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSk7CiAgICAgICAgICAgICAg
ICAgdGlsZS0+ZGlydHlSZWN0ID0gdGlsZVJlY3Q7CiAgICAgICAgICAgICAgICAgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSogYmFja0J1ZmZlciA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAg
ICAgICAgICAgICBzZXRQcmlvcml0eUZvclRleHR1cmUocHJpb3JpdHlDYWxjLCB2aXNpYmxlQ29u
dGVudFJlY3QsIHRpbGUtPmRpcnR5UmVjdCwgZHJhd3NUb1Jvb3QsIHNtYWxsQW5pbWF0ZWRMYXll
ciwgYmFja0J1ZmZlci0+dGV4dHVyZSgpKTsKKyAgICAgICAgICAgICAgICBzZXRQcmlvcml0eUZv
clRleHR1cmUocHJpb3JpdHlDYWxjLCB2aXNpYmxlQ29udGVudFJlY3QoKSwgdGlsZS0+ZGlydHlS
ZWN0LCBkcmF3c1RvUm9vdCwgc21hbGxBbmltYXRlZExheWVyLCBiYWNrQnVmZmVyLT50ZXh0dXJl
KCkpOwogICAgICAgICAgICAgICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gZnJvbnRC
dWZmZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6Y3JlYXRlKGJhY2tCdWZmZXItPnRleHR1cmUo
KS0+dGV4dHVyZU1hbmFnZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNr
QnVmZmVyLT50ZXh0dXJlKCktPnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYWNrQnVmZmVyLT50ZXh0dXJlKCktPmZvcm1hdCgpKTsKQEAgLTY2NSw3ICs2NjAsNyBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3Qg
Q0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZVJlY3QodGls
ZSk7Ci0gICAgICAgIHNldFByaW9yaXR5Rm9yVGV4dHVyZShwcmlvcml0eUNhbGMsIHZpc2libGVD
b250ZW50UmVjdCwgdGlsZVJlY3QsIGRyYXdzVG9Sb290LCBzbWFsbEFuaW1hdGVkTGF5ZXIsIHRp
bGUtPm1hbmFnZWRUZXh0dXJlKCkpOworICAgICAgICBzZXRQcmlvcml0eUZvclRleHR1cmUocHJp
b3JpdHlDYWxjLCB2aXNpYmxlQ29udGVudFJlY3QoKSwgdGlsZVJlY3QsIGRyYXdzVG9Sb290LCBz
bWFsbEFuaW1hdGVkTGF5ZXIsIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCkpOwogICAgIH0KIH0KIApA
QCAtNjgwLDYgKzY3NSw5IEBAIFJlZ2lvbiBUaWxlZExheWVyQ2hyb21pdW06OnZpc2libGVDb250
ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QKIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0
VXBkYXRlU3RhdGUoKQogeworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CisgICAgbV9mYWlsZWRV
cGRhdGUgPSBmYWxzZTsKKwogICAgIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOwogICAgIGZvciAoQ0NMYXllclRp
bGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygp
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgVXBkYXRhYmxlVGlsZSog
dGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwpA
QCAtNjkwLDEzICs2ODgsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRl
U3RhdGUoKQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRSZWN0KENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciogb2NjbHVzaW9uLCBDQ1JlbmRlcmluZ1N0
YXRzJiBzdGF0cykKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGUoQ0NUZXh0dXJlVXBk
YXRlUXVldWUmIHF1ZXVlLCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqIG9jY2x1c2lvbiwgQ0NS
ZW5kZXJpbmdTdGF0cyYgc3RhdHMpCiB7Ci0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLSAgICBt
X2ZhaWxlZFVwZGF0ZSA9IGZhbHNlOworICAgIEFTU0VSVCghbV9za2lwc0RyYXcgJiYgIW1fZmFp
bGVkVXBkYXRlKTsgLy8gRGlkIHJlc2V0VXBkYXRlU3RhdGUgZ2V0IHNraXBwZWQ/CiAgICAgdXBk
YXRlQm91bmRzKCk7Ci0KLSAgICBpZiAobV90aWxlci0+aGFzRW1wdHlCb3VuZHMoKSkKKyAgICBp
ZiAobV90aWxlci0+aGFzRW1wdHlCb3VuZHMoKSB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGJvb2wgZGlkUGFpbnQgPSBmYWxzZTsKQEAgLTcxNSwxMiArNzExLDEy
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50UmVjdChDQ1RleHR1cmVV
cGRhdGVRdWV1ZSYgcXVldWUsIGNvbnN0IEluCiAgICAgICAgIG1fZmFpbGVkVXBkYXRlID0gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAodmlz
aWJsZUNvbnRlbnRSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBW
aXNpYmxlIHBhaW50aW5nLiBGaXJzdCBvY2NsdWRlIHZpc2libGUgdGlsZXMgYW5kIHBhaW50IHRo
ZSBub24tb2NjbHVkZWQgdGlsZXMuCiAgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsK
LSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRp
Y2VzKHZpc2libGVDb250ZW50UmVjdCgpLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAg
IG1hcmtPY2NsdXNpb25zQW5kUmVxdWVzdFRleHR1cmVzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRv
bSwgb2NjbHVzaW9uKTsKICAgICBtX3NraXBzRHJhdyA9ICF1cGRhdGVUaWxlcyhsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20sIHF1ZXVlLCBvY2NsdXNpb24sIHN0YXRzLCBkaWRQYWludCk7CiAgICAg
aWYgKG1fc2tpcHNEcmF3KQpAQCAtNzI5LDcgKzcyNSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50UmVjdChDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNvbnN0
IEluCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdlIGhhdmUgYWxyZWFkeSBwYWludGlu
ZyBldmVyeXRoaW5nIHZpc2libGUuIERvIHNvbWUgcHJlLXBhaW50aW5nIHdoaWxlIGlkbGUuCi0g
ICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGlkbGVQYWludFJlY3QoY29udGVudFJl
Y3QpOworICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KCk7
CiAgICAgaWYgKGlkbGVQYWludENvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC03NjUsMTMgKzc2MSwxMyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudFJlY3QoQ0NUZXh0dXJlVXBkYXRlUXVldWUmIHF1ZXVlLCBjb25zdCBJbgogICAgIH0K
IH0KIAotYm9vbCBUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJl
Y3QmIHZpc2libGVDb250ZW50UmVjdCkKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lk
bGVQYWludCgpCiB7CiAgICAgLy8gRG9uJ3QgdHJpZ2dlciBtb3JlIHBhaW50cyBpZiB3ZSBmYWls
ZWQgKGFzIHdlJ2xsIGp1c3QgZmFpbCBhZ2FpbikuCi0gICAgaWYgKG1fZmFpbGVkVXBkYXRlIHx8
IHZpc2libGVDb250ZW50UmVjdC5pc0VtcHR5KCkgfHwgbV90aWxlci0+aGFzRW1wdHlCb3VuZHMo
KSkKKyAgICBpZiAobV9mYWlsZWRVcGRhdGUgfHwgdmlzaWJsZUNvbnRlbnRSZWN0KCkuaXNFbXB0
eSgpIHx8IG1fdGlsZXItPmhhc0VtcHR5Qm91bmRzKCkgfHwgIWRyYXdzQ29udGVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0g
aWRsZVBhaW50UmVjdCh2aXNpYmxlQ29udGVudFJlY3QpOworICAgIEludFJlY3QgaWRsZVBhaW50
Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KCk7CiAgICAgaWYgKGlkbGVQYWludENvbnRlbnRS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03OTUsMTUgKzc5MSwx
NSBAQCBib29sIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVj
dCYgdmlzaWJsZUNvbnRlbnRSZWN0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW50UmVjdCBU
aWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNv
bnRlbnRSZWN0KQorSW50UmVjdCBUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QoKQog
ewogICAgIC8vIERvbid0IGluZmxhdGUgYW4gZW1wdHkgcmVjdC4KLSAgICBpZiAodmlzaWJsZUNv
bnRlbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdDsK
KyAgICBpZiAodmlzaWJsZUNvbnRlbnRSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIG1hZGUgYSBsb3QgbGFyZ2Vy
IG5vdyEgV2Ugc2hvdWxkIGluY3JlYXNlCiAgICAgLy8gICAgICAgIHRoaXMgc2xvd2x5IHdoaWxl
IGluc3VyaW5nIGl0IGRvZXNuJ3QgY2F1c2UgYW55IHBlcmYgaXNzdWVzLgotICAgIEludFJlY3Qg
cHJlcGFpbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIEludFJlY3QgcHJlcGFpbnRS
ZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVYKG1f
dGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CiAgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVZKG1f
dGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkgKiAyKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDMzMjYzZTU0MzQ4ZGUyZWQ4MDQxMjM4NmY0NmNjOTI4YjFhMzFhNWQuLjJh
YmMxMTI5ODk1NTVlYjUzNTQyNWE4NDFmZDBlN2Q2ZDJkNzEyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUmVn
aW9uIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QgT1ZFUlJJREU7CiAKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlKENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiwgY29uc3QgQ0NPY2NsdXNp
b25UcmFja2VyKiwgQ0NSZW5kZXJpbmdTdGF0cyYpIE9WRVJSSURFOworCiBwcm90ZWN0ZWQ6CiAg
ICAgVGlsZWRMYXllckNocm9taXVtKCk7CiAKQEAgLTgyLDEzICs4NCw5IEBAIHByb3RlY3RlZDoK
ICAgICAvLyBSZXNldCBzdGF0ZSBvbiB0aWxlcyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdXBkYXRp
bmcgdGhlIGxheWVyLgogICAgIHZvaWQgcmVzZXRVcGRhdGVTdGF0ZSgpOwogCi0gICAgLy8gUHJl
cGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBj
b250ZW50UmVjdC4KLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRSZWN0KENDVGV4dHVyZVVwZGF0ZVF1
ZXVlJiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tl
ciosIENDUmVuZGVyaW5nU3RhdHMmKTsKLQogICAgIC8vIEFmdGVyIHByZXBhcmluZyBhbiB1cGRh
dGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHBhaW50aW5nIGlzIG5lZWRlZC4KLSAgICBib29sIG5l
ZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCk7Ci0KLSAgICBJ
bnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KTsK
KyAgICBib29sIG5lZWRzSWRsZVBhaW50KCk7CisgICAgSW50UmVjdCBpZGxlUGFpbnRSZWN0KCk7
CiAKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9CiAK
QEAgLTEwNCw4ICsxMDIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgdGlsZU9ubHlOZWVkc1BhcnRp
YWxVcGRhdGUoVXBkYXRhYmxlVGlsZSopOwogICAgIGJvb2wgdGlsZU5lZWRzQnVmZmVyZWRVcGRh
dGUoVXBkYXRhYmxlVGlsZSopOwogCi0gICAgdm9pZCBzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVj
dChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYsIGNvbnN0IEludFJlY3QmIHZpc2libGVDb250
ZW50UmVjdCk7Ci0KICAgICB2b2lkIG1hcmtPY2NsdXNpb25zQW5kUmVxdWVzdFRleHR1cmVzKGlu
dCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIGNvbnN0IENDT2NjbHVzaW9u
VHJhY2tlciopOwogCiAgICAgYm9vbCB1cGRhdGVUaWxlcyhpbnQgbGVmdCwgaW50IHRvcCwgaW50
IHJpZ2h0LCBpbnQgYm90dG9tLCBDQ1RleHR1cmVVcGRhdGVRdWV1ZSYsIGNvbnN0IENDT2NjbHVz
aW9uVHJhY2tlciosIENDUmVuZGVyaW5nU3RhdHMmLCBib29sJiBkaWRQYWludCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24u
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9u
LmNwcAppbmRleCA1OGYzN2M2OTQ5Y2FmZTdjMTAzZmQ0NWU2NDE1NTg2M2RhMGQ3NWE0Li5kY2Fh
ZTU5Y2UyMDJlMjkwY2M4N2FkN2ZkODg1OTJkYTkzMjVjNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAKQEAg
LTExNSwxMSArMTE1LDYgQEAgdm9pZCBGYWtlVGlsZWRMYXllckNocm9taXVtOjpzZXROZWVkc0Rp
c3BsYXlSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBUaWxlZExheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheVJlY3QocmVjdCk7CiB9CiAKLXZvaWQgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgQ0NPY2NsdXNp
b25UcmFja2VyKiBvY2NsdXNpb24sIENDUmVuZGVyaW5nU3RhdHMmIHN0YXRzKQotewotICAgIHVw
ZGF0ZUNvbnRlbnRSZWN0KHF1ZXVlLCB2aXNpYmxlQ29udGVudFJlY3QoKSwgb2NjbHVzaW9uLCBz
dGF0cyk7Ci19Ci0KIHZvaWQgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9y
aXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIGNhbGN1bGF0b3IpCiB7CiAgICAgLy8g
RW5zdXJlIHRoZXJlIGlzIGFsd2F5cyBhIHRhcmdldCByZW5kZXIgc3VyZmFjZSBhdmFpbGFibGUu
IElmIG5vbmUgaGFzIGJlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKaW5kZXggNWRlMWM1ZmIzYzQxZTY3ZWVhOWM1MTBk
NmMwOWU1YzQ3NTc1N2Q2Yy4uM2FkYjRiZjE3OTk3YmU5MTY1MTE1YzYzN2E1NzQzMWZlZTg2Yzhl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJU
ZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmgKQEAgLTExMiw3ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdl
YkNvcmU6OkludFNpemUgdGlsZVNpemUoKSB7IHJldHVybiBXZWJDb3JlOjpJbnRTaXplKDEwMCwg
MTAwKTsgfQogCiAgICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlk
YXRlQ29udGVudFJlY3Q7Ci0gICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50UmVjdDsKICAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
Om5lZWRzSWRsZVBhaW50OwogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
c2tpcHNEcmF3OwogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVtUGFp
bnRlZFRpbGVzOwpAQCAtMTIxLDkgKzEyMCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklERTsK
ICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0TmVlZHNEaXNwbGF5UmVjdDsgfQogCi0gICAgLy8gVXBkYXRlcyB0
aGUgdmlzaWJsZUNvbnRlbnRSZWN0KCkuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShXZWJDb3Jl
OjpDQ1RleHR1cmVVcGRhdGVRdWV1ZSYsIGNvbnN0IFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tl
ciosIFdlYkNvcmU6OkNDUmVuZGVyaW5nU3RhdHMmKSBPVkVSUklERTsKLQogICAgIHZpcnR1YWwg
dm9pZCBzZXRUZXh0dXJlUHJpb3JpdGllcyhjb25zdCBXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3Vs
YXRvciYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90
ZXh0dXJlTWFuYWdlcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggNjg5YjgxN2FmZWRiZjVkZjc4MGMz
ZDk0YjUyODIxNmQ5YmQ4YzZjYS4uNzVjODhmYjkyM2JhYWRkZDNlYmNjZjZjODA5ZGE4NjFjN2U5
MWI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVy
Q2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC03Nyw2ICs3Nyw4IEBAIGNsYXNzIFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwdWJsaWM6CiAgICAgVGlsZWRM
YXllckNocm9taXVtVGVzdCgpCiAgICAgICAgIDogbV9jb250ZXh0KFdlYktpdDo6Y3JlYXRlRmFr
ZUNDR3JhcGhpY3NDb250ZXh0KCkpCisgICAgICAgICwgbV90ZXh0dXJlTWFuYWdlcihDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg2MCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVy
ZXI6OkNvbnRlbnRQb29sKSkKKyAgICAgICAgLCBtX29jY2x1c2lvbigwKQogICAgIHsKICAgICAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIG1fcmVzb3Vy
Y2VQcm92aWRlciA9IENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7
CkBAIC05Miw2ICs5NCw0MiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBDQ1RleHR1cmVVcGRh
dGVDb250cm9sbGVyOjp1cGRhdGVUZXh0dXJlcyhtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCksICZt
X2NvcGllciwgJm1fdXBsb2FkZXIsICZtX3F1ZXVlLCBjb3VudCk7CiAgICAgfQorCisgICAgYm9v
bCBVcGRhdGVBbmRQdXNoKEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbDEsCisgICAgICAgICAgICAgICAg
ICAgICAgIEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMiA9IDAsCisgICAgICAgICAgICAg
ICAgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwyID0gMCkKKyAgICB7CisgICAgICAgIC8v
IEdldCB0ZXh0dXJlcworICAgICAgICBtX3RleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9yaXRpZXMo
KTsKKyAgICAgICAgaWYgKGxheWVyMSkKKyAgICAgICAgICAgIGxheWVyMS0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOworICAgICAgICBpZiAobGF5ZXIyKQorICAg
ICAgICAgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRv
cik7ICAgICAKKyAgICAgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisKKyAgICAgICAgLy8gVXBkYXRlIGNvbnRlbnQKKyAgICAgICAgaWYgKGxheWVyMSkKKyAgICAg
ICAgICAgIGxheWVyMS0+dXBkYXRlKG1fcXVldWUsIG1fb2NjbHVzaW9uLCBtX3N0YXRzKTsKKyAg
ICAgICAgaWYgKGxheWVyMikKKyAgICAgICAgICAgIGxheWVyMi0+dXBkYXRlKG1fcXVldWUsIG1f
b2NjbHVzaW9uLCBtX3N0YXRzKTsKKworICAgICAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7
CisgICAgICAgIGlmIChsYXllcjEpCisgICAgICAgICAgICBuZWVkc1VwZGF0ZSB8PSBsYXllcjEt
Pm5lZWRzSWRsZVBhaW50KCk7CisgICAgICAgIGlmIChsYXllcjIpCisgICAgICAgICAgICBuZWVk
c1VwZGF0ZSB8PSBsYXllcjItPm5lZWRzSWRsZVBhaW50KCk7CisKKyAgICAgICAgLy8gVXBkYXRl
IHRleHR1cmVzIGFuZCBwdXNoLgorICAgICAgICB1cGRhdGVUZXh0dXJlcygpOworICAgICAgICBp
ZiAobGF5ZXIxKQorICAgICAgICAgICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bDEpOworICAgICAgICBpZiAobGF5ZXIyKQorICAgICAgICAgICAgbGF5ZXIyLT5wdXNoUHJvcGVy
dGllc1RvKGxheWVySW1wbDIpOworCisgICAgICAgIHJldHVybiBuZWVkc1VwZGF0ZTsKKyAgICB9
CisKIHB1YmxpYzoKICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKICAg
ICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBtX3Jlc291cmNlUHJvdmlkZXI7CkBAIC0xMDAs
MTQgKzEzOCwxMyBAQCBwdWJsaWM6CiAgICAgRmFrZVRleHR1cmVDb3BpZXIgbV9jb3BpZXI7CiAg
ICAgRmFrZVRleHR1cmVVcGxvYWRlciBtX3VwbG9hZGVyOwogICAgIENDUHJpb3JpdHlDYWxjdWxh
dG9yIG1fcHJpb3JpdHlDYWxjdWxhdG9yOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IG1fdGV4dHVyZU1hbmFnZXI7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciog
bV9vY2NsdXNpb247CiB9OwogCi0KLQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1
c2hEaXJ0eVRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCox
MDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1f
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIApAQCAtMTE1LDI1ICsxNTIsMTcg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotCi0gICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJl
Y3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVw
ZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwog
CiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlLgogICAg
IEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJV
RShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKLSAgICAvLyBJbnZhbGlkYXRlcyBib3Ro
IHRpbGVzLi4uCisgICAgLy8gSW52YWxpZGF0ZXMgYm90aCB0aWxlcywgYnV0IHRoZW4gb25seSB1
cGRhdGUgb25lIG9mIHRoZW0uCisgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAw
KSk7CisgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7Ci0gICAgLy8gLi4uLmJ1dCB0aGVuIG9ubHkgdXBkYXRlIG9uZSBvZiB0aGVtLgot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRh
dGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCwgbV9zdGF0
cyk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICBV
cGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwogCiAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgaGF2ZSB0aGUgZmlyc3QgdGlsZSBzaW5jZSB0aGUgb3RoZXIgdGlsZSB3YXMg
aW52YWxpZGF0ZWQgYnV0IG5vdCBwYWludGVkLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+
aGFzVGlsZUF0KDAsIDApKTsKQEAgLTE0MiwyNCArMTcxLDE3IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wp
OwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CisgICAgbV9vY2NsdXNpb24gPSAmb2Nj
bHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxp
ZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAwLCAyMDApKTsKLSAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKLQotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVU
ZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7
CisgICAgVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKIAogICAg
IEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3Bh
cXVlKCksIDAsIDEpOwogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygp
LnBpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQoKSwgMjAwMDAsIDEpOwpAQCAtMTczLDkgKzE5NSw3
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVz
KQogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA1MCwgNTAp
KTsKICAgICAvLyAuLi4uYnV0IHRoZSBhcmVhIGlzIG9jY2x1ZGVkLgogICAgIG9jY2x1ZGVkLnNl
dE9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwotICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgJm9jY2x1ZGVkLCBtX3N0
YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbC5nZXQoKSk7CisgICAgVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJ
bXBsLmdldCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygp
LnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVk
Lm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQoKSwgMjAwMDAgKyAy
NTAwLCAxKTsKQEAgLTE4OCw4ICsyMDgsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcHVzaE9jY2x1ZGVkRGlydHlUaWxlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHB1c2hEZWxldGVkVGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VU
aWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJ
bXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCkBAIC0xOTcsMjEg
KzIxNiwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRUaWxl
cykKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKICAgICBsYXllci0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXll
ci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQotICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0gICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRz
KTsKLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVySW1wbC5nZXQoKSk7CisgICAgVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBs
LmdldCgpKTsKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhlIGltcGwg
c2lkZS4KICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAg
RVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogCi0gICAgdGV4dHVyZU1h
bmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1l
bW9yeShtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRN
YXhNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCoxMDI0KTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5j
bGVhclByaW9yaXRpZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeSht
X3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1l
bW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOwogCiAgICAgLy8gVGhpcyBzaG91bGQgZHJvcCB0
aGUgdGlsZXMgb24gdGhlIGltcGwgdGhyZWFkLgogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbC5nZXQoKSk7CkBAIC0yMjAsMjAzICsyMzMsMTQwIEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIEVYUEVDVF9GQUxTRShsYXll
ckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFz
VGlsZUF0KDAsIDEpKTsKIAotICAgIC8vIFRoaXMgc2hvdWxkIHJlY3JlYXRlIGFuZCB1cGRhdGUg
dGhlIGRlbGV0ZWQgdGV4dHVyZXMuCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1f
cHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwg
MCwgMTAwLCAxMDApLCAwLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgLy8gVGhpcyBzaG91
bGQgcmVjcmVhdGUgYW5kIHVwZGF0ZSBvbmUgb2YgdGhlIGRlbGV0ZWQgdGV4dHVyZXMuCisgICAg
bGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7Cisg
ICAgVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKIAotICAgIC8v
IFdlIHNob3VsZCBvbmx5IGhhdmUgdGhlIGZpcnN0IHRpbGUgc2luY2UgdGhlIG90aGVyIHRpbGUg
d2FzIGludmFsaWRhdGVkIGJ1dCBub3QgcGFpbnRlZC4KKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBv
bmUgdGlsZXMgb24gdGhlIGltcGwgc2lkZS4KICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhh
c1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAs
IDEpKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRU
aWxlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0
LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRl
ci4KLSAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1MDApOwotICAgIEludFJlY3QgY29u
dGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7Ci0gICAgSW50UmVjdCB2
aXNpYmxlUmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApOwotCi0gICAgLy8gVGhpcyBpbnZhbGlkYXRl
cyAyNSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZpc2libGUgdGlsZS4KLSAgICBsYXllci0+
c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3QodmlzaWJsZVJlY3QpOwotICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVu
dFJlY3QpOwotCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxj
dWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAg
ICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3Rh
dHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxl
LXBhaW50aW5nIGZvciAzeDMgdGlsZXMgaW4gdGhlIGNlbnRlci4KLSAgICBFWFBFQ1RfVFJVRShs
YXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKLQotICAgIGxheWVyLT5wdXNoUHJv
cGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgLy8gVGhpcyBwYWludHMgMSB2aXNpYmxl
IG9mIHRoZSAyNSBpbnZhbGlkIHRpbGVzLgorICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1
MDAsIDUwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgyMDAs
IDIwMCwgMTAwLCAxMDApKTsKKyAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJl
Y3QoMCwgMCwgNTAwLCA1MDApKTsKKyAgICBib29sIG5lZWRzVXBkYXRlID0gVXBkYXRlQW5kUHVz
aChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKKyAgICAvLyBXZSBzaG91bGQgbmVlZCBp
ZGxlLXBhaW50aW5nIGZvciBzdXJyb3VuZGluZyB0aWxlcy4KKyAgICBFWFBFQ1RfVFJVRShuZWVk
c1VwZGF0ZSk7CiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBz
aWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDIsIDIpKTsKIAogICAg
IC8vIEZvciB0aGUgbmV4dCBmb3VyIHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qgd2Ugc3RpbGwg
bmVlZCBpZGxlIHBhaW50aW5nLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7
Ci0gICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgICAg
ICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3Rh
dHMpOwotICAgICAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJl
Y3QpKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSBVcGRhdGVB
bmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfVFJV
RShuZWVkc1VwZGF0ZSk7CiAgICAgfQogCi0gICAgLy8gQWZ0ZXIgZm91ciBwYXNzZXMgb2YgaWRs
ZSBwYWludGluZywgd2Ugc2hvdWxkIGJlIGZpbmlzaGVkIHBhaW50aW5nCi0gICAgLy8gRVhQRUNU
X0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOwotCiAgICAgLy8gV2Ug
c2hvdWxkIGhhdmUgb25lIHRpbGUgc3Vycm91bmRpbmcgdGhlIHZpc2libGUgdGlsZSBvbiBhbGwg
c2lkZXMsIGJ1dCBubyBvdGhlciB0aWxlcy4KICAgICBJbnRSZWN0IGlkbGVQYWludFRpbGVzKDEs
IDEsIDMsIDMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgNTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoaWRsZVBhaW50VGls
ZXMuY29udGFpbnMoaSwgaikpCi0gICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBs
LT5oYXNUaWxlQXQoaSwgaikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVY
UEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspCisgICAgICAgICAgICBFWFBFQ1RfRVEobGF5
ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaiksIGlkbGVQYWludFRpbGVzLmNvbnRhaW5zKGksIGopKTsK
ICAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGZpbmlzaCBwYWludGluZyBldmVudHVh
bGx5LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjA7IGkrKykKKyAgICAgICAgbmVlZHNVcGRh
dGUgPSBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOworICAgIEVY
UEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKIHsKICAgICAvLyBTdGFydCB3aXRo
IDJtYiBvZiBtZW1vcnksIGJ1dCB0aGUgdGVzdCBpcyBnb2luZyB0byB0cnkgdG8gdXNlIGp1c3Qg
bW9yZSB0aGFuIDFtYiwgc28gd2UgcmVkdWNlIHRvIDFtYiBsYXRlci4KLSAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250
ZW50UG9vbCk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygy
ICogMTAyNCAqIDEwMjQpOyAgICAKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAg
ICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMShhZG9wdFB0cihuZXcgRmFrZUNDVGls
ZWRMYXllckltcGwoMSkpKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMihhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMikpKTsKIAogICAgIC8vIEZvciB0aGlzIHRlc3Qgd2Ug
aGF2ZSB0d28gbGF5ZXJzLiBsYXllcjEgZXhoYXVzdHMgbW9zdCB0ZXh0dXJlIG1lbW9yeSwgbGVh
dmluZyByb29tIGZvciAyIG1vcmUgdGlsZXMgZnJvbQogICAgIC8vIGxheWVyMiwgYnV0IG5vdCBh
bGwgdGhyZWUgdGlsZXMuIEZpcnN0IHdlIHBhaW50IGxheWVyMSwgYW5kIG9uZSB0aWxlIGZyb20g
bGF5ZXIyLiBUaGVuIHdoZW4gd2UgaWRsZSBwYWludAogICAgIC8vIGxheWVyMiwgd2Ugd2lsbCBm
YWlsIG9uIHRoZSB0aGlyZCB0aWxlIG9mIGxheWVyMiwgYW5kIHRoaXMgc2hvdWxkIG5vdCBsZWF2
ZSB0aGUgc2Vjb25kIHRpbGUgaW4gYSBiYWQgc3RhdGUuCiAKKyAgICAvLyBUaGlzIHVzZXMgOTYw
MDAwIGJ5dGVzLCBsZWF2aW5nIDg4NTc2IGJ5dGVzIG9mIG1lbW9yeSBsZWZ0LCB3aGljaCBpcyBl
bm91Z2ggZm9yIDIgdGlsZXMgb25seSBpbiB0aGUgb3RoZXIgbGF5ZXIuCisgICAgSW50UmVjdCBs
YXllcjFSZWN0KDAsIDAsIDEwMCwgMjQwMCk7CisgICAgCiAgICAgLy8gVGhpcyByZXF1aXJlcyA0
KjMwMDAwIGJ5dGVzIG9mIG1lbW9yeS4KICAgICBJbnRSZWN0IGxheWVyMlJlY3QoMCwgMCwgMTAw
LCAzMDApOwotICAgIGxheWVyMi0+c2V0Qm91bmRzKGxheWVyMlJlY3Quc2l6ZSgpKTsKLSAgICBs
YXllcjItPnNldFZpc2libGVDb250ZW50UmVjdChsYXllcjJSZWN0KTsKLSAgICBsYXllcjItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChsYXllcjJSZWN0KTsKLQotICAgIC8vIFRoaXMgdXNlcyA5NjAw
MDAgYnl0ZXMsIGxlYXZpbmcgODg1NzYgYnl0ZXMgb2YgbWVtb3J5IGxlZnQsIHdoaWNoIGlzIGVu
b3VnaCBmb3IgMiB0aWxlcyBvbmx5IGluIHRoZSBvdGhlciBsYXllci4KLSAgICBJbnRSZWN0IGxh
eWVyUmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMjQwMCkpOwotICAgIGxheWVy
MS0+c2V0Qm91bmRzKGxheWVyUmVjdC5zaXplKCkpOwotICAgIGxheWVyMS0+c2V0VmlzaWJsZUNv
bnRlbnRSZWN0KGxheWVyUmVjdCk7Ci0gICAgbGF5ZXIxLT5pbnZhbGlkYXRlQ29udGVudFJlY3Qo
bGF5ZXJSZWN0KTsKIAogICAgIC8vIFBhaW50IGEgc2luZ2xlIHRpbGUgaW4gbGF5ZXIyIHNvIHRo
YXQgaXQgd2lsbCBpZGxlIHBhaW50LgotICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMo
bV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMo
bV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKLSAgICBsYXllcjEtPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGxheWVyUmVj
dCwgMCwgbV9zdGF0cyk7Ci0gICAgbGF5ZXIyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCwgbV9zdGF0cyk7Ci0KKyAgICBsYXllcjEtPnNldEJv
dW5kcyhsYXllcjFSZWN0LnNpemUoKSk7CisgICAgbGF5ZXIxLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3QobGF5ZXIxUmVjdCk7CisgICAgbGF5ZXIyLT5zZXRCb3VuZHMobGF5ZXIyUmVjdC5zaXplKCkp
OworICAgIGxheWVyMi0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKTsKKyAgICBib29sIG5lZWRzVXBkYXRlID0gVXBkYXRlQW5kUHVzaChsYXllcjEuZ2V0KCks
IGxheWVySW1wbDEuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGF5ZXIyLmdldCgpLCBsYXllckltcGwyLmdldCgpKTsKICAgICAvLyBXZSBzaG91bGQgbmVlZCBp
ZGxlLXBhaW50aW5nIGZvciBib3RoIHJlbWFpbmluZyB0aWxlcyBpbiBsYXllcjIuCi0gICAgRVhQ
RUNUX1RSVUUobGF5ZXIyLT5uZWVkc0lkbGVQYWludChsYXllcjJSZWN0KSk7Ci0KLSAgICAvLyBD
b21taXQgdGhlIGZyYW1lIG92ZXIgdG8gaW1wbC4KLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAg
IGxheWVyMS0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsKLSAgICBsYXllcjIt
PnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMi5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUobmVl
ZHNVcGRhdGUpOwogCiAgICAgLy8gUmVkdWNlIG91ciBtZW1vcnkgbGltaXRzIHRvIDFtYi4KLSAg
ICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygxMDI0ICogMTAyNCk7Cisg
ICAgbV90ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygxMDI0ICogMTAyNCk7
CiAKICAgICAvLyBOb3cgaWRsZSBwYWludCBsYXllcjIuIFdlIGFyZSBnb2luZyB0byBydW4gb3V0
IG9mIG1lbW9yeSB0aG91Z2ghCi0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3By
aW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3By
aW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOwotICAgIGxheWVyMi0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCksIDAsIG1fc3RhdHMpOwotCiAgICAgLy8gT2ggd2VsbCwgY29tbWl0IHRoZSBm
cmFtZSBhbmQgcHVzaC4KLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyMS0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsKLSAgICBsYXllcjItPnB1c2hQcm9wZXJ0aWVz
VG8obGF5ZXJJbXBsMi5nZXQoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsK
KyAgICAgICAgbmVlZHNVcGRhdGUgPSBVcGRhdGVBbmRQdXNoKGxheWVyMS5nZXQoKSwgbGF5ZXJJ
bXBsMS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyMi5n
ZXQoKSwgbGF5ZXJJbXBsMi5nZXQoKSk7CisgICAgfQogCiAgICAgLy8gU2FuaXR5IGNoZWNrLCB3
ZSBzaG91bGQgaGF2ZSB0ZXh0dXJlcyBmb3IgdGhlIGJpZyBsYXllci4KICAgICBFWFBFQ1RfVFJV
RShsYXllckltcGwxLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoMCwgMCkpOworICAgIEVYUEVDVF9U
UlVFKGxheWVySW1wbDEtPmhhc1RleHR1cmVJZEZvclRpbGVBdCgwLCAyMykpOwogCi0gICAgLy8g
V2Ugc2hvdWxkIG9ubHkgaGF2ZSB0aGUgZmlyc3QgdGlsZSBmcm9tIGxheWVyMiBzaW5jZSBpdCBm
YWlsZWQgdG8gaWRsZSB1cGRhdGUuCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgaGF2ZSB0aGUgZmly
c3QgdHdvIHRpbGVzIGZyb20gbGF5ZXIyIHNpbmNlCisgICAgLy8gaXQgZmFpbGVkIHRvIGlkbGUg
dXBkYXRlIHRoZSBsYXN0IHRpbGUuCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsMi0+aGFzVGls
ZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwyLT5oYXNUZXh0dXJlSWRGb3JU
aWxlQXQoMCwgMCkpOwotICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwg
MSkpOwotICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwgMikpOwotCi0g
ICAgLy8gTm93IGlmIGxheWVyMiBiZWNvbWVzIGZ1bGx5IHZpc2libGUsIHdlIHNob3VsZCBiZSBh
YmxlIHRvIHBhaW50IGl0IGFuZCBwdXNoIHZhbGlkIHRleHR1cmVzLgotICAgIGxheWVyMi0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyMS0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllcjItPnVwZGF0ZUNvbnRlbnRSZWN0
KG1fcXVldWUsIGxheWVyMlJlY3QsIDAsIG1fc3RhdHMpOwotICAgIGxheWVyMS0+dXBkYXRlQ29u
dGVudFJlY3QobV9xdWV1ZSwgbGF5ZXJSZWN0LCAwLCBtX3N0YXRzKTsKLQotICAgIHVwZGF0ZVRl
eHR1cmVzKCk7Ci0gICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbDEuZ2V0KCkp
OwotICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwyLmdldCgpKTsKLQotICAg
IEVYUEVDVF9UUlVFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RS
VUUobGF5ZXJJbXBsMi0+aGFzVGlsZUF0KDAsIDEpKTsKLSAgICBFWFBFQ1RfVFJVRShsYXllcklt
cGwyLT5oYXNUaWxlQXQoMCwgMikpOwotICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbDItPmhhc1Rl
eHR1cmVJZEZvclRpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsMi0+aGFz
VGV4dHVyZUlkRm9yVGlsZUF0KDAsIDEpKTsKLSAgICBFWFBFQ1RfVFJVRShsYXllckltcGwyLT5o
YXNUZXh0dXJlSWRGb3JUaWxlQXQoMCwgMikpOworICAgIAorICAgIEVYUEVDVF9GQUxTRShuZWVk
c1VwZGF0ZSk7CisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAyKSk7
CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2Ns
dWRlZFRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1ZGVkOwotCisgICAgbV9vY2NsdXNpb24gPSAmb2NjbHVkZWQ7CisgICAgCiAgICAg
Ly8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIG9uZSBvY2Ns
dWRlZCB0aWxlLCBjdWxscyBpdCBkdXJpbmcgcGFpbnQsIGJ1dCBwcmVwYWludHMgaXQuCiAgICAg
b2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKIAogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwotICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOworICAgIFVwZGF0ZUFuZFB1
c2gobGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1
ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7Ci0gICAgdXBk
YXRlVGV4dHVyZXMoKTsKLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0
KCkpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhlIHByZXBhaW50ZWQgdGlsZSBvbiB0aGUg
aW1wbCBzaWRlLgorICAgIC8vIFdlIHNob3VsZCBoYXZlIHRoZSBwcmVwYWludGVkIHRpbGUgb24g
dGhlIGltcGwgc2lkZSwgYnV0IGN1bGxlZCBpdCBkdXJpbmcgcGFpbnQuCiAgICAgRVhQRUNUX1RS
VUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworICAgIEVYUEVDVF9FUSgxLCBvY2NsdWRl
ZC5vdmVyZHJhd01ldHJpY3MoKS50aWxlc0N1bGxlZEZvclVwbG9hZCgpKTsKIH0KIAogVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc01hcmtlZERpcnR5RHVyaW5nUGFpbnQp
CiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAy
NCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAw
LCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgLy8g
SG93ZXZlciwgZHVyaW5nIHRoZSBwYWludCwgd2UgaW52YWxpZGF0ZSBvbmUgb2YgdGhlIHRpbGVz
LiBUaGlzIHNob3VsZAogICAgIC8vIG5vdCBwcmV2ZW50IHRoZSB0aWxlIGZyb20gYmVpbmcgcHVz
aGVkLgotICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxh
eWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAg
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKElu
dFJlY3QoMCwgNTAsIDEwMCwgNTApLCBsYXllci5nZXQoKSk7Ci0KLSAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9x
dWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0ZVRl
eHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsK
KyAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKKyAgICBsYXllci0+c2V0
VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgICAgCisgICAgVXBk
YXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKIAogICAgIC8vIFdlIHNo
b3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhlIGltcGwgc2lkZS4KICAgICBFWFBFQ1RfVFJVRShs
YXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC00MjUsMzQgKzM3NSwyMCBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWludCkK
IAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGly
dHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAg
ICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21p
dW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3Rl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjFJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MikpKTsKIAorICAgIC8vIEludmFsaWRhdGUgYSB0aWxlIG9uIGxheWVyMSwgZHVyaW5nIHVwZGF0
ZSBvZiBsYXllciAyLgorICAgIGxheWVyMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0
UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIxLmdldCgpKTsK
ICAgICBsYXllcjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXIxLT5z
ZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVy
MS0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQorICAg
IGxheWVyMS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsg
ICAgCiAgICAgbGF5ZXIyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVy
Mi0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBs
YXllcjItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0K
LSAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsK
LSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsK
LSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBsYXllcjEt
PnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBt
X3N0YXRzKTsKLQotICAgIC8vIEludmFsaWRhdGUgYSB0aWxlIG9uIGxheWVyMQotICAgIGxheWVy
Mi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0
KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIxLmdldCgpKTsKLSAgICBsYXllcjItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRzKTsKLQot
ICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVy
MUltcGwuZ2V0KCkpOwotICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllcjJJbXBsLmdl
dCgpKTsKKyAgICBsYXllcjItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7ICAgIAorICAgIFVwZGF0ZUFuZFB1c2gobGF5ZXIxLmdldCgpLCBsYXllcjFJbXBs
LmdldCgpLAorICAgICAgICAgICAgICAgICAgbGF5ZXIyLmdldCgpLCBsYXllcjJJbXBsLmdldCgp
KTsKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhlIGltcGwgc2lkZSBm
b3IgYWxsIGxheWVycy4KICAgICBFWFBFQ1RfVFJVRShsYXllcjFJbXBsLT5oYXNUaWxlQXQoMCwg
MCkpOwpAQCAtNDYzLDMyICszOTksMTkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogCiBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmlu
Z1BhaW50T25QcmV2aW91c0xheWVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
bV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjFJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMikp
KTsKIAorICAgIGxheWVyMS0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52
YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIyLmdldCgpKTsKICAgICBsYXll
cjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXIxLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyMS0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQorICAgIGxheWVyMS0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgICAgCiAgICAg
bGF5ZXIyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVyMi0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBsYXllcjItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0KLSAgICBsYXll
cjEtPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBsYXll
cjItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGEg
dGlsZSBvbiBsYXllcjIKLSAgICBsYXllcjEtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNl
dFJlY3RUb0ludmFsaWRhdGUoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIGxheWVyMi5nZXQoKSk7
Ci0gICAgbGF5ZXIxLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0gICAgbGF5ZXIyLT51cGRhdGVDb250ZW50UmVjdChtX3F1
ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0gICAgdXBkYXRlVGV4
dHVyZXMoKTsKLSAgICBsYXllcjEtPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIxSW1wbC5nZXQoKSk7
Ci0gICAgbGF5ZXIyLT5wdXNoUHJvcGVydGllc1RvKGxheWVyMkltcGwuZ2V0KCkpOworICAgIGxh
eWVyMi0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgICAg
CisgICAgVXBkYXRlQW5kUHVzaChsYXllcjEuZ2V0KCksIGxheWVyMUltcGwuZ2V0KCksCisgICAg
ICAgICAgICAgICAgICBsYXllcjIuZ2V0KCksIGxheWVyMkltcGwuZ2V0KCkpOwogCiAgICAgLy8g
V2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlIGZvciBhbGwgbGF5ZXJz
LgogICAgIEVYUEVDVF9UUlVFKGxheWVyMUltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC01MTgs
MTAgKzQ0MSwxMCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFpbnRTbWFsbEFu
aW1hdGVkTGF5ZXJzSW1tZWRpYXRlbHkpCiAgICAgICAgIGlmIChydW5PdXRPZk1lbW9yeVtpXSkK
ICAgICAgICAgICAgIGxheWVyV2lkdGggKj0gMjsKIAotICAgICAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUZvckxheWVyLCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50
UG9vbCk7CisgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMo
bWVtb3J5Rm9yTGF5ZXIpOwogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKIAotICAgICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OworICAgICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAg
ICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgICAgIC8vIEZ1bGwgc2l6ZSBsYXll
ciB3aXRoIGhhbGYgYmVpbmcgdmlzaWJsZS4KQEAgLTUzOSw4ICs0NjIsOCBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcGFpbnRTbWFsbEFuaW1hdGVkTGF5ZXJzSW1tZWRpYXRlbHkp
CiAgICAgICAgIC8vIFRoZSBsYXllciBzaG91bGQgcGFpbnQgaXQncyBlbnRpcmUgY29udGVudHMg
b24gdGhlIGZpcnN0IHBhaW50CiAgICAgICAgIC8vIGlmIGl0IGlzIGNsb3NlIHRvIHRoZSB2aWV3
cG9ydCBzaXplIGFuZCBoYXMgdGhlIGF2YWlsYWJsZSBtZW1vcnkuCiAgICAgICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICAgICAgbGF5ZXItPnVwZGF0ZUNv
bnRlbnRSZWN0KG1fcXVldWUsIHZpc2libGVSZWN0LCAwLCBtX3N0YXRzKTsKKyAgICAgICAgbV90
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgICAgIGxheWVyLT51cGRh
dGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAg
ICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiAKQEAgLTU2NSw0
OSArNDg4LDMxIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYWludFNtYWxsQW5p
bWF0ZWRMYXllcnNJbW1lZGlhdGVseSkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IGlkbGVQYWludE91dE9mTWVtb3J5KQogewotICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MC4gU2V0dXAgM3gzIHRpbGVzIHdpdGggb25lIDF4MSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRl
ci4KLSAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAzMDApOwotICAgIEludFJlY3QgY29u
dGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7Ci0gICAgSW50UmVjdCB2
aXNpYmxlUmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApOwotCi0gICAgLy8gV2UgaGF2ZSBlbm91Z2gg
bWVtb3J5IGZvciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBt
ZW1vcnkgaW4gZmlyc3QgaWRsZSBwYWludC4KLSAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAw
ICogMTAwOyAvLyAxIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhlbC4KLQotICAgIE93blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpjcmVhdGUobWVtb3J5TGltaXQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRl
bnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwor
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkp
KTsKIAotICAgIC8vIEludmFsaWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNp
YmxlIHRpbGUuCi0gICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKLSAgICBsYXll
ci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGVSZWN0KTsKLSAgICBsYXllci0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1v
cnkgZm9yIG9ubHkgdGhlIHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9y
eSBpbiBmaXJzdCBpZGxlIHBhaW50LgorICAgIGludCBtZW1vcnlMaW1pdCA9IDQgKiAxMDAgKiAx
MDA7IC8vIDEgdGlsZXMsIDQgYnl0ZXMgcGVyIHBpeGVsLgorICAgIG1fdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXQpOwogCi0gICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1f
cXVldWUsIHZpc2libGVSZWN0LCAwLCBtX3N0YXRzKTsKKyAgICAvLyBUaGUgdGlsZSBzaXplIGlz
IDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4K
KyAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRT
aXplKDMwMCwgMzAwKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0
KDEwMCwgMTAwLCAxMDAsIDEwMCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQor
ICAgICAgICBuZWVkc1VwZGF0ZSA9IFVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1w
bC5nZXQoKSk7CiAKICAgICAvLyBJZGxlLXBhaW50aW5nIHNob3VsZCBzZWUgbm8gbW9yZSBwcmlv
cml0eSB0aWxlcyBmb3IgcGFpbnRpbmcuCi0gICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lk
bGVQYWludCh2aXNpYmxlUmVjdCkpOwotCi0gICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICBsYXll
ci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgIEVYUEVDVF9GQUxTRShu
ZWVkc1VwZGF0ZSk7CiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1w
bCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDEsIDEpKTsKLQot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRh
dGVDb250ZW50UmVjdChtX3F1ZXVlLCB2aXNpYmxlUmVjdCwgMCwgbV9zdGF0cyk7Ci0KLSAgICAv
LyBXZSBzaG91bGRuJ3Qgc2lnbmFsIHdlIG5lZWQgYW5vdGhlciBpZGxlIHBhaW50LgotICAgIEVY
UEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKIH0KIAogVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMjQsIENDUmVuZGVy
ZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
ICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMSkpKTsKIApAQCAtNjE3LDI1ICs1MjIsMTYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogICAgICAgICBsYXllci0+c2V0RHJh
d1RyYW5zZm9ybUlzQW5pbWF0aW5nKGFuaW1hdGluZ1tpXSk7CiAKICAgICAgICAgLy8gVGhlIGxh
eWVyJ3MgYm91bmRzIGFyZSBlbXB0eS4KLSAgICAgICAgSW50UmVjdCBjb250ZW50UmVjdDsKLQot
ICAgICAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgIGxh
eWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAgICBsYXllci0+
aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKLQotICAgICAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgICAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KICAgICAgICAgLy8gRW1wdHkgbGF5ZXJz
IGRvbid0IHBhaW50IG9yIGlkbGUtcGFpbnQuCi0gICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50
UmVjdChtX3F1ZXVlLCBjb250ZW50UmVjdCwgMCwgbV9zdGF0cyk7Ci0KKyAgICAgICAgbGF5ZXIt
PnNldEJvdW5kcyhJbnRTaXplKCkpOworICAgICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoKSk7CisgICAgICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBVcGRhdGVBbmRQdXNo
KGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOworICAgICAgICAKICAgICAgICAgLy8gRW1w
dHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCiAgICAgICAgIEVYUEVDVF9FUSgwdSwgbGF5ZXIt
Pm51bVBhaW50ZWRUaWxlcygpKTsKIAogICAgICAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgbmVl
ZCBwcmVwYWludC4KLSAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludChj
b250ZW50UmVjdCkpOwotCi0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiAKICAgICAgICAg
Ly8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCiAgICAgICAgIEVYUEVDVF9GQUxTRShs
YXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC02NDQsMTQgKzU0MCw5IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIAogVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCiB7Ci0g
ICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDEwMCwgMTAwKTsKLSAgICBJbnRSZWN0IGNvbnRlbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOwotCi0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVu
dFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Cisg
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkp
OwotICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CiAKICAgICAvLyBBbHRlcm5h
dGUgYmV0d2VlbiBub3QgdmlzaWJsZSBhbmQgdmlzaWJsZS4KICAgICBJbnRSZWN0IHYoMCwgMCwg
MTAwLCAxMDApOwpAQCAtNjYyLDcxICs1NTMsNTMgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCiAgICAgLy8gV2Ugc2hvdWxkIG5vdCBo
YXZlIGFueSB0aWxlcyBleGNlcHQgZm9yIHdoZW4gdGhlIGxheWVyIHdhcyB2aXNpYmxlCiAgICAg
Ly8gb3IgYWZ0ZXIgdGhlIGxheWVyIHdhcyB2aXNpYmxlIGFuZCB3ZSBkaWRuJ3QgaW52YWxpZGF0
ZS4KICAgICBib29sIGhhdmVUaWxlWzEwXSA9IHsgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBm
YWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUgfTsKLQorICAgIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICBsYXllci0+c2V0Qm91bmRzKEludFNp
emUoMTAwLCAxMDApKTsKICAgICAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdCh2aXNp
YmxlUmVjdFtpXSk7CiAKLSAgICAgICAgLy8gU2tpcCBpbnZhbGlkYXRpb24gb25jZSB0byBpbnN1
cmUgdGhlIHRpbGUgc3RheXMgaW4gbWVtb3J5IHdoaWxlIG5vdCB2aXNpYmxlLgogICAgICAgICBp
ZiAoaW52YWxpZGF0ZVtpXSkKLSAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJl
Y3QoY29udGVudFJlY3QpOwotCi0gICAgICAgIC8vIFBhaW50IC8gaWRsZS1wYWludC4KLSAgICAg
ICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotICAgICAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgICAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCB2aXNpYmxlUmVjdFtpXSwgMCwgbV9zdGF0cyk7Ci0KLSAgICAgICAg
dXBkYXRlVGV4dHVyZXMoKTsKLQorICAgICAgICAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50
UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgICAgIGJvb2wgbmVlZHNVcGRhdGUg
PSBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOworICAgICAgICAK
ICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIHNpZ25hbCBpZGxlIHBhaW50LCBhcyB3ZSBwYWlu
dGVkIHRoZSBlbnRpcmUgbGF5ZXIKICAgICAgICAgLy8gb3IgdGhlIGxheWVyIHdhcyBub3Qgdmlz
aWJsZS4KLSAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxl
UmVjdFtpXSkpOwotCi0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5n
ZXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiAgICAgICAgIEVYUEVD
VF9FUShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSwgaGF2ZVRpbGVbaV0pOwogICAgIH0KIH0K
IAotCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJl
KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEw
MjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFr
ZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdCht
X3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0gICAgdXBkYXRl
VGV4dHVyZXMoMTAwMCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwog
CiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlLgogICAg
IEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJV
RShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKICAgICBsYXllci0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlQ291bnQoKTsKLSAgICAvLyBJbnZva2UgdXBkYXRl
Q29udGVudFJlY3QgYWdhaW4uIEFzIHRoZSBsYXllciBpcyB2YWxpZCB1cGRhdGVDb250ZW50UmVj
dCBzaG91bGRuJ3QgYmUgaW52b2tlZCBvbgorICAgIC8vIEludm9rZSB1cGRhdGUgYWdhaW4uIEFz
IHRoZSBsYXllciBpcyB2YWxpZCB1cGRhdGUgc2hvdWxkbid0IGJlIGludm9rZWQgb24KICAgICAv
LyB0aGUgTGF5ZXJUZXh0dXJlVXBkYXRlci4KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3Qo
bV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0
ZVRleHR1cmVzKDEwMDApOworICAgIFVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1w
bC5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
cigpLT5wcmVwYXJlQ291bnQoKSk7CiAKLSAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0
KEludFJlY3QoMCwgMCwgNTAsIDUwKSk7Ci0gICAgLy8gc2V0UmVjdFRvSW52YWxpZGF0ZSB0cmln
Z2VycyBpbnZhbGlkYXRlQ29udGVudFJlY3QoKSBiZWluZyBpbnZva2VkIGZyb20gdXBkYXRlQ29u
dGVudFJlY3QuCisgICAgLy8gc2V0UmVjdFRvSW52YWxpZGF0ZSB0cmlnZ2VycyBpbnZhbGlkYXRl
Q29udGVudFJlY3QoKSBiZWluZyBpbnZva2VkIGZyb20gdXBkYXRlLgogICAgIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKEludFJlY3QoMjUsIDI1
LCA1MCwgNTApLCBsYXllci5nZXQoKSk7CiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPmNsZWFyUHJlcGFyZUNvdW50KCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0
KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRzKTsKLSAgICB1cGRh
dGVUZXh0dXJlcygxMDAwKTsKKyAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJl
Y3QoMCwgMCwgNTAsIDUwKSk7CisgICAgVXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJ
bXBsLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnByZXBhcmVDb3VudCgpKTsKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+Y2xlYXJQcmVwYXJlQ291bnQoKTsKLSAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIHN0aWxs
IGJlIGludmFsaWQgYXMgdXBkYXRlQ29udGVudFJlY3QgaW52b2tlZCBpbnZhbGlkYXRlLgotICAg
IGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAw
KSwgMCwgbV9zdGF0cyk7Ci0gICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7CisKKyAgICAvLyBUaGUg
bGF5ZXIgc2hvdWxkIHN0aWxsIGJlIGludmFsaWQgYXMgdXBkYXRlIGludm9rZWQgaW52YWxpZGF0
ZS4KKyAgICBVcGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOyAvLyB2
aXNpYmxlCiAgICAgRVhQRUNUX0VRKDEsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT5wcmVwYXJlQ291bnQoKSk7CiB9CiAKQEAgLTczNCw5ICs2MDcsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBkYXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2Nh
bGVkKQogewogICAgIC8vIFRoZSB1cGRhdGVSZWN0ICh0aGF0IGluZGljYXRlcyB3aGF0IHdhcyBh
Y3R1YWxseSBwYWludGVkKSBzaG91bGQgYmUgaW4KICAgICAvLyBsYXllciBzcGFjZSwgbm90IHRo
ZSBjb250ZW50IHNwYWNlLgotCi0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0
KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyhtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAKICAgICBJbnRSZWN0
IGxheWVyQm91bmRzKDAsIDAsIDMwMCwgMjAwKTsKQEAgLTc1MSwxNiArNjIyLDE2IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3Vu
ZHNBcmVTY2FsZWQpCiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50Qm91
bmRzKTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxh
eWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50Qm91bmRzLCAwLCBtX3N0YXRz
KTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXll
ci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KEZsb2F0UmVjdCgwLCAwLCAzMDAsIDMwMCAqIDAuOCksIGxheWVyLT51cGRhdGVSZWN0KCkpOwog
ICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAKICAgICAvLyBBZnRlciB0aGUgdGlsZXMgYXJlIHVwZGF0
ZWQgb25jZSwgYW5vdGhlciBpbnZhbGlkYXRlIG9ubHkgbmVlZHMgdG8gdXBkYXRlIHRoZSBib3Vu
ZHMgb2YgdGhlIGxheWVyLgogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9y
aXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwogICAgIGxheWVy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudEJvdW5kcyk7Ci0gICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3VuZHMsIDAsIG1fc3RhdHMpOworICAgIGxh
eWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KGxheWVyQm91bmRzKSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiAgICAgdXBk
YXRlVGV4dHVyZXMoKTsKIApAQCAtNzY4LDE1ICs2MzksMTQgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkK
ICAgICBJbnRSZWN0IHBhcnRpYWxEYW1hZ2UoMzAsIDEwMCwgMTAsIDEwKTsKICAgICBsYXllci0+
aW52YWxpZGF0ZUNvbnRlbnRSZWN0KHBhcnRpYWxEYW1hZ2UpOwogICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1
ZXVlLCBjb250ZW50Qm91bmRzLCAwLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3Rh
dHMpOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg0NSwgODAsIDE1LCA4KSwg
bGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiB7Ci0gICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJl
cjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdl
dCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgxKSkpOwogCkBAIC03OTAsOCArNjYwLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIAogICAg
IC8vIFB1c2ggdGhlIHRpbGVzIHRvIHRoZSBpbXBsIHNpZGUgYW5kIGNoZWNrIHRoYXQgdGhlcmUg
aXMgZXhhY3RseSBvbmUuCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3Jp
dHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAw
LCAxMDApLCAwLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIHVw
ZGF0ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC04
MDcsOCArNjc3LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFs
aWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIAogICAgIC8vIFRoZSBpbXBsIHNpZGUg
c2hvdWxkIGdldCAyeDIgdGlsZXMgbm93LgogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0
KDAsIDAsIDIwMCwgMjAwKSwgMCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRz
KTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVySW1wbC5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwg
MCkpOwpAQCAtODIwLDggKzY5MCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2
ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgLy8gaW1wbCBz
aWRlLgogICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDEsIDAsIDAsIDEpLCAwLCBtX3N0YXRzKTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgw
LCAwKSk7CkBAIC04ODMsMTYgKzc1MiwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cmVzaXplVG9TbWFsbGVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
NjAqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNp
emUoNzAwLCA3MDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3Qo
MCwgMCwgNzAwLCA3MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJl
Y3QoMCwgMCwgNzAwLCA3MDApKTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyht
X3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAs
IDAsIDcwMCwgNzAwKSwgMCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsK
IAogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgyMDAsIDIwMCkpOwogICAgIGxheWVyLT5p
bnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAyMDAsIDIwMCkpOwpAQCAtOTAwLDgg
Kzc2OCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCByZXNpemVUb1NtYWxsZXIp
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBodWdlTGF5ZXJVcGRhdGVDcmFzaCkK
IHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYwKjEwMjQqMTAyNCwgMTAy
NCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogCiAgICAgaW50IHNpemUgPSAxIDw8IDMwOwogICAgIGxheWVyLT5zZXRCb3Vu
ZHMoSW50U2l6ZShzaXplLCBzaXplKSk7CkBAIC05MTAsOCArNzc3LDggQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIGh1Z2VMYXllclVwZGF0ZUNyYXNoKQogCiAgICAgLy8gRW5zdXJl
IG5vIGNyYXNoIGZvciBib3VuZHMgd2hlcmUgc2l6ZSAqIHNpemUgd291bGQgb3ZlcmZsb3cgYW4g
aW50LgogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRv
cik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVy
LT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSwgMCwg
bV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKIH0KIAogVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQpAQCAtMTA0NCw4ICs5MTEsNyBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAKIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIEND
UmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0
KCkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlk
YXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50
U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMTA1NCwxNSArOTIwLDE0IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQogICAgIGxheWVyLT5p
bnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCiAgICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRzKTsKKyAg
ICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBk
YXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgyLCBsYXllci0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIH0KIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb24pCiB7Ci0gICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5k
ZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGls
ZSBzaXplIGlzIDEwMHgxMDAuCkBAIC0xMDc1LDggKzk0MCw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uKQogICAgIGxheWVyLT5pbnZh
bGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogCiAgICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRS
ZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQsIG1fc3RhdHMp
OworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVy
LT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICBFWFBFQ1RfRVEoMzYt
MywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7
CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxv
YWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEwODUsMTEgKzk1MCwxMSBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbikKIAogICAgIGxheWVy
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclByZXBhcmVSZWN0Q291bnQoKTsKICAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKIAogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJ
bnRSZWN0KDI1MCwgMjAwLCAzMDAsIDEwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVu
dFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50
UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRz
KTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAg
RVhQRUNUX0VRKDM2LTIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJl
UmVjdENvdW50KCkpOwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNz
KCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC0xMDk4LDExICs5NjMsMTEgQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb24p
CiAKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlUmVj
dENvdW50KCk7CiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxj
dWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
bV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKICAgICBvY2NsdWRlZC5z
ZXRPY2NsdXNpb24oSW50UmVjdCgyNTAsIDI1MCwgMzAwLCAxMDApKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+
dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2Ns
dWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1f
c3RhdHMpOwogICAgIEVYUEVDVF9FUSgzNiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVy
ZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTExMTIsOCAr
OTc3LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhP
Y2NsdXNpb24pCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRX
aXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiB7Ci0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVu
dFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Cisg
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAuCkBAIC0xMTI3LDggKzk5MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAK
ICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDM2MCksICZvY2NsdWRl
ZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVY
UEVDVF9FUSgyNC0zLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJl
Y3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygp
LnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTE0Myw4ICsxMDA3LDggQEAgVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRW
aXNpYmxpdHlDb25zdHJhaW50cykKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KElu
dFJlY3QoMCwgMCwgNjAwLCAzNTApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0
KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVj
dCgwLCAwLCA2MDAsIDM1MCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAm
b2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgyNC02LCBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFS
KG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEp
OwpAQCAtMTE1OSw4ICsxMDIzLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRp
bGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKICAgICBsYXll
ci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsKICAgICBs
YXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRl
Q29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDM0MCksICZvY2NsdWRlZCwg
bV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVD
VF9FUSgyNC02LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RD
b3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBp
eGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTE3MSw4ICsxMDM1LDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNp
YmxpdHlDb25zdHJhaW50cykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVz
Tm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wp
OwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAu
CkBAIC0xMTg0LDggKzEwNDcsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGls
ZXNOb3RQYWludGVkV2l0aG91dEludmFsaWRhdGlvbikKICAgICBsYXllci0+c2V0VmlzaWJsZUNv
bnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0
ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9x
dWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAg
bV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0
ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgzNi0zLCBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKICAgICB7
CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwpAQCAtMTE5OCwx
MCArMTA2MSwxMCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNOb3RQYWlu
dGVkV2l0aG91dEludmFsaWRhdGlvbikKIAogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5jbGVhclByZXBhcmVSZWN0Q291bnQoKTsKICAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKIAogICAgIC8vIFJlcGFpbnQgd2l0aG91dCBtYXJraW5nIGl0IGRpcnR5LiBUaGUgMyBj
dWxsZWQgdGlsZXMgd2lsbCBiZSBwcmUtcGFpbnRlZCBub3cuCi0gICAgbGF5ZXItPnVwZGF0ZUNv
bnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQsIG1f
c3RhdHMpOworICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsK
ICAgICBFWFBFQ1RfRVEoMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBh
cmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJp
Y3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEyMTEsOCArMTA3NCw3IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc05vdFBhaW50ZWRXaXRob3V0SW52
YWxpZGF0aW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVk
V2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwot
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuCkBA
IC0xMjMwLDggKzEwOTIsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQ
YWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiAgICAgbGF5ZXItPnNldFZpc2libGVD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsK
ICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDAp
KTsKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3Ip
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+
dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2Ns
dWRlZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAg
IEVYUEVDVF9FUSgzNi0zLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFy
ZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmlj
cygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTI0MSw4ICsxMTAzLDcgQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25B
bmRUcmFuc2Zvcm1zKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwot
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuCkBA
IC0xMjYyLDggKzExMjMsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQ
YWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgbGF5ZXItPnNldFZpc2libGVDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKICAg
ICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsK
ICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRl
ZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIC8v
IFRoZSBjb250ZW50IGlzIGhhbGYgdGhlIHNpemUgb2YgdGhlIGxheWVyIChzbyB0aGUgbnVtYmVy
IG9mIHRpbGVzIGlzIGZld2VyKS4KICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBjb250ZW50IGlz
IDMwMHgzMDAsIGFuZCBzaW5jZSB0aGUgdGlsZSBzaXplIGlzIDEwMCwgdGhlCiAgICAgLy8gbnVt
YmVyIG9mIHRpbGVzIDN4My4KQEAgLTEyODMsOCArMTE0NCw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBs
YXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmNv
bnRlbnRCb3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVj
dCgwLCAwLCA2MDAsIDYwMCkpOwogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3By
aW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAs
IDYwMCwgNjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRl
ZCwgbV9zdGF0cyk7CiAgICAgRVhQRUNUX0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRl
ZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEz
MDQsOCArMTE2NSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50
ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwogICAgIGxh
eWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVD
b250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkLCBt
X3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgRVhQRUNU
X0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291
bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhl
bHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEzMTUsOCArMTE3Niw3IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGlu
ZykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVl
UmVnaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogCkBAIC0xMzM0LDEyICsx
MTk0LDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9w
YXF1ZVJlZ2lvbikKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICBsYXllci0+
c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKIAogICAgIC8vIElmIHRoZSBsYXllciBkb2Vzbid0IHBhaW50IG9w
YXF1ZSBjb250ZW50LCB0aGVuIHRoZSB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbiBzaG91bGQg
YmUgZW1wdHkuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1
ZVBhaW50UmVjdChJbnRSZWN0KCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3Qo
Y29udGVudEJvdW5kcyk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNv
bnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1
ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZp
c2libGVDb250ZW50T3BhcXVlUmVnaW9uKCk7CiAgICAgRVhQRUNUX1RSVUUob3BhcXVlQ29udGVu
dHMuaXNFbXB0eSgpKTsKIApAQCAtMTM1Miw3ICsxMjEyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogICAgIG9wYXF1ZVBhaW50
UmVjdCA9IEludFJlY3QoMTAsIDEwLCA5MCwgMTkwKTsKICAgICBsYXllci0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KG9wYXF1ZVBhaW50UmVjdCk7CiAgICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50Qm91bmRzKTsKLSAgICBsYXllci0+
dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudEJvdW5kcywgJm9jY2x1ZGVkLCBtX3N0
YXRzKTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAg
ICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxl
Q29udGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihv
cGFxdWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpLCBvcGFxdWVDb250ZW50cy5ib3VuZHMoKSk7
CkBAIC0xMzY1LDcgKzEyMjUsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlz
aWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pCiAKICAgICAvLyBJZiB3ZSBwYWludCBhZ2FpbiB3aXRo
b3V0IGludmFsaWRhdGluZywgdGhlIHNhbWUgc3R1ZmYgc2hvdWxkIGJlIG9wYXF1ZS4KICAgICBs
YXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KEludFJl
Y3QoKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3Vu
ZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2Nj
bHVkZWQsIG1fc3RhdHMpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgb3BhcXVlQ29udGVu
dHMgPSBsYXllci0+dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKTsKICAgICBFWFBFQ1RfRVFf
UkVDVChpbnRlcnNlY3Rpb24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSwgb3BhcXVl
Q29udGVudHMuYm91bmRzKCkpOwpAQCAtMTM4MCw3ICsxMjQwLDcgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogICAgIC8vIG5vdCBi
ZSBhZmZlY3RlZC4KICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3Bh
cXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChJbnRSZWN0KDAsIDAsIDEsIDEpKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9x
dWV1ZSwgY29udGVudEJvdW5kcywgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBsYXllci0+dXBk
YXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsK
ICAgICBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigp
OwogICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3QsIHZpc2li
bGVCb3VuZHMpLCBvcGFxdWVDb250ZW50cy5ib3VuZHMoKSk7CkBAIC0xMzk1LDcgKzEyNTUsNyBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdp
b24pCiAgICAgLy8gbm90IGJlIGFmZmVjdGVkLgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMTAsIDEwLCAxLCAxKSk7Ci0gICAgbGF5ZXItPnVw
ZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0
cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAg
IHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+dmlzaWJsZUNv
bnRlbnRPcGFxdWVSZWdpb24oKTsKICAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24oSW50
UmVjdCgxMCwgMTAwLCA5MCwgMTAwKSwgdmlzaWJsZUJvdW5kcyksIG9wYXF1ZUNvbnRlbnRzLmJv
dW5kcygpKTsKQEAgLTE0MDksOCArMTI2OSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRyaWNzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29s
KTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2Ns
dXNpb25UcmFja2VyIG9jY2x1ZGVkOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOwogCkBAIC0xNDI4LDEyICsxMjg3LDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwaXhlbHNQYWludGVkTWV0cmljcykKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHko
MSk7CiAKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0
b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3Rl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKIAogICAgIC8vIEludmFsaWRhdGVz
IGFuZCBwYWludHMgdGhlIHdob2xlIGxheWVyLgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRCb3VuZHMpOwotICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50Qm91bmRzLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAg
IGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICB1cGRhdGVU
ZXh0dXJlcygpOwogICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZpc2libGVDb250ZW50T3Bh
cXVlUmVnaW9uKCk7CiAgICAgRVhQRUNUX1RSVUUob3BhcXVlQ29udGVudHMuaXNFbXB0eSgpKTsK
QEAgLTE0NDgsNyArMTMwNyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhl
bHNQYWludGVkTWV0cmljcykKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
c2V0T3BhcXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250
ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEsIDEpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRl
bnRSZWN0KEludFJlY3QoNTAsIDIwMCwgMTAsIDEwKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAg
bGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIHVwZGF0ZVRl
eHR1cmVzKCk7CiAgICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+dmlzaWJsZUNvbnRlbnRPcGFx
dWVSZWdpb24oKTsKICAgICBFWFBFQ1RfVFJVRShvcGFxdWVDb250ZW50cy5pc0VtcHR5KCkpOwpA
QCAtMTY2Miw5ICsxNTIxLDcgQEAgcHJpdmF0ZToKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdQYWludCkK
IHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
cihDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0MDAwMDAwLCA0MDAwMDAwLCBD
Q1JlbmRlcmVyOjpDb250ZW50UG9vbCkpOwotCi0gICAgUmVmUHRyPFVwZGF0ZVRyYWNraW5nVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBVcGRhdGVUcmFja2luZ1RpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxVcGRhdGVU
cmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgVXBkYXRlVHJh
Y2tpbmdUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCiAgICAg
SW50UmVjdCBsYXllclJlY3QoMCwgMCwgMzAsIDMxKTsKICAgICBsYXllci0+c2V0UG9zaXRpb24o
bGF5ZXJSZWN0LmxvY2F0aW9uKCkpOwpAQCAtMTY3NywxMCArMTUzNCwxMCBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3RvcnRl
ZER1cmluZ1BhaW50KQogICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGNvbnRlbnRS
ZWN0KTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIG1f
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwogCiAgICAgLy8gVXBkYXRlIHRo
ZSB3aG9sZSB0aWxlLgotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250
ZW50UmVjdCwgMCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0
YXRzKTsKICAgICBsYXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cmVzZXRQYWludGVkUmVj
dCgpOwogCiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoKSwgbGF5ZXItPnRyYWNraW5n
TGF5ZXJQYWludGVyKCktPnBhaW50ZWRSZWN0KCkpOwpAQCAtMTY5MiwxNiArMTU0OSwxNCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05v
dERpc3RvcnRlZER1cmluZ1BhaW50KQogCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZW50aXJlIGxh
eWVyIGluIGNvbnRlbnQgc3BhY2UuIFdoZW4gcGFpbnRpbmcsIHRoZSByZWN0IGdpdmVuIHRvIHdl
YmtpdCBzaG91bGQgbWF0Y2ggdGhlIGxheWVyJ3MgYm91bmRzLgogICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVj
dChtX3F1ZXVlLCBjb250ZW50UmVjdCwgMCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZSht
X3F1ZXVlLCAwLCBtX3N0YXRzKTsKIAogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShsYXllclJlY3Qs
IGxheWVyLT50cmFja2luZ0xheWVyUGFpbnRlcigpLT5wYWludGVkUmVjdCgpKTsKIH0KIAogVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3RE
aXN0b3J0ZWREdXJpbmdJbnZhbGlkYXRpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNDAwMDAwMCwgNDAwMDAwMCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpKTsKLQot
ICAgIFJlZlB0cjxVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgVXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKKyAgICBSZWZQdHI8VXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtKG1fdGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIEludFJlY3QgbGF5ZXJSZWN0KDAsIDAsIDMwLCAz
MSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVyUmVjdC5sb2NhdGlvbigpKTsKQEAgLTE3
MTMsMTAgKzE1NjgsMTAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVn
ZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdJbnZhbGkKICAgICBsYXllci0+c2V0
RHJhd2FibGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAKICAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgd2hvbGUgdGlsZS4KLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudFJlY3QsIDAsIG1fc3RhdHMpOworICAgIGxh
eWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgbGF5ZXItPnRyYWNraW5nTGF5
ZXJQYWludGVyKCktPnJlc2V0UGFpbnRlZFJlY3QoKTsKIAogICAgIEVYUEVDVF9JTlRfUkVDVF9F
UShJbnRSZWN0KCksIGxheWVyLT50cmFja2luZ0xheWVyUGFpbnRlcigpLT5wYWludGVkUmVjdCgp
KTsKQEAgLTE3MjgsNyArMTU4Myw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBu
b25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nSW52YWxpCiAKICAgICAv
LyBJbnZhbGlkYXRlIHRoZSBlbnRpcmUgbGF5ZXIgaW4gbGF5ZXIgc3BhY2UuIFdoZW4gcGFpbnRp
bmcsIHRoZSByZWN0IGdpdmVuIHRvIHdlYmtpdCBzaG91bGQgbWF0Y2ggdGhlIGxheWVyJ3MgYm91
bmRzLgogICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0KGxheWVyUmVjdCk7Ci0gICAgbGF5
ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRSZWN0LCAwLCBtX3N0YXRzKTsK
KyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogCiAgICAgRVhQRUNUX0lO
VF9SRUNUX0VRKGxheWVyUmVjdCwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVyKCktPnBhaW50
ZWRSZWN0KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159982</attachid>
            <date>2012-08-22 11:38:32 -0700</date>
            <delta_ts>2012-08-22 12:49:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94165-20120822113830.patch</filename>
            <type>text/plain</type>
            <size>79016</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODUxYTI3N2NlNWIzOTNm
NWM2YTczMmM1NWM1NjJhNTdmNTVkMjZjOS4uNzg3ODM3MGZjYTI1MGJlOGFlYzJmZWI0M2ViNTlm
YjU5ODAwZGUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDA4LTA4LTIyICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNpbXBs
aWZ5IHVwZGF0ZUNvbnRlbnRSZWN0LCByZW1vdmluZyByZWN0IHBhcmFtZXRlciwgcmVmYWN0b3Ig
dW5pdCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIHZpc2libGUgcmVjdCBwYXJhbWV0ZXIgZnJvbSBUaWxlZExheWVyQ2hyb21pdW0g
ZnVuY3Rpb25zLiBQYXNzaW5nIGEKKyAgICAgICAgcmVjdCB0aGF0IGlzIG5vdCB0aGUgdmlzaWJs
ZSByZWN0IHdvdWxkbid0IG1ha2Ugc2Vuc2UsIGFuZCBzb29uIHdlIG1pZ2h0CisgICAgICAgIG5l
ZWQgZnVydGhlciB2aXNpYmlsaXR5IGluZm9ybWF0aW9uLgorCisgICAgICAgIEluIHJlZmFjdG9y
aW5nIHRoZSB1bml0IHRlc3RzLCBJIHJlbW92ZWQgdGV4dHVyZSBtYW5hZ2VyIGZyb20gYWxsIHRl
c3RzCisgICAgICAgIGFuZCBwdXQgaXQgaW4gdGhlIHRlc3QgY2xhc3MuIEkgYWxzbyBtYWRlIHNv
bWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gCisgICAgICAgIHNpbXVsYXRlIHRoZSBjb21taXQgZmxv
dyBhbmQgcmVtb3ZlIHRvbnMgb2YgYm9pbGVycGxhdGUgY29kZS4gSSByZWZhY3RvcmVkCisgICAg
ICAgIGFib3V0IGhhbGYgdGhlIHVuaXQgdGVzdHMgdG8gdXNlIHRoZSB1dGlsaXR5IGZ1bmN0aW9u
cy4KKworICAgICAgICBSZWZhY3RvcmVkIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6bmVlZE1vcmVVcGRhdGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpyZXNldFVwZGF0ZVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFRpbGVkTGF5ZXJDaHJvbWl1bSk6CisKIDIwMTItMDgtMjEgIEtlbnRhcm8gSGFyYSAg
PGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gTW92ZSBTdHJpbmcgcmVsYXRl
ZCBjb2RlIGluIFY4QmluZGluZyB0byBhIHNlcGFyYXRlIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggYzkzNWI1NjcwNTFiZDJjYTM1NDk4N2QzZTdmMGY1NjdlNmY2ODU4NC4uNmNh
NDcyZjBhZWM3NjExNThmNWMyNWYxYTZkNzJhZGEwNDFlZDIxZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOC0yMiAgRXJpYyBQZW5uZXIgIDxlcGVu
bmVyQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBTaW1wbGlmeSB1cGRhdGVDb250
ZW50UmVjdCwgcmVtb3ZpbmcgcmVjdCBwYXJhbWV0ZXIsIHJlZmFjdG9yIHVuaXQgdGVzdHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDE2NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQg
dGVzdHMgdG8gcmVtb3ZlIGxvdHMgb2YgYm9pbGVycGxhdGUgY29kZS4KKworICAgICAgICAqIHRl
c3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwOgorICAgICAgICAqIHRlc3RzL0NDVGlsZWRM
YXllclRlc3RDb21tb24uaDoKKyAgICAgICAgKEZha2VUaWxlZExheWVyQ2hyb21pdW0pOgorICAg
ICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA4LTIxICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTI2MjAyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDBkYzk2MGI2ZDc2NzlkNmEyZWRiYjMyMDYzMTQ3ZDUyNTA1ZGVmMWIuLmE4
ZjU3ZTI5NmQxYWZjYmQ1NjA5NDlkMWM1MGZhNTVhMzQzNjMzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTk2LDIzICs5NiwxMyBAQCB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRv
ciYgcHJpbwogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0
ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2VyKiBvY2NsdXNpb24sIENDUmVu
ZGVyaW5nU3RhdHMmIHN0YXRzKQogewogICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQo
KTsKLQotICAgIEludFJlY3QgY29udGVudFJlY3Q7Ci0KLSAgICAvLyBBbHdheXMgY2FsbCB1cGRh
dGVDb250ZW50UmVjdCgpIGJ1dCB3aXRoIGFuIGVtcHR5IGxheWVyIHJlY3RhbmdsZSB3aGVuCi0g
ICAgLy8gbGF5ZXIgZG9lc24ndCBkcmF3IGNvbnRlbnRzLgotICAgIGlmIChkcmF3c0NvbnRlbnQo
KSkKLSAgICAgICAgY29udGVudFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3QoKTsKLQotICAgIHVw
ZGF0ZUNvbnRlbnRSZWN0KHF1ZXVlLCBjb250ZW50UmVjdCwgb2NjbHVzaW9uLCBzdGF0cyk7Cisg
ICAgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGUocXVldWUsIG9jY2x1c2lvbiwgc3RhdHMpOwog
ICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKIGJvb2wgQ29udGVudExheWVyQ2hyb21p
dW06Om5lZWRNb3JlVXBkYXRlcygpCiB7Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBuZWVkc0lkbGVQYWludCh2aXNpYmxlQ29udGVu
dFJlY3QoKSk7CisgICAgcmV0dXJuIG5lZWRzSWRsZVBhaW50KCk7CiB9CiAKIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjdlNjAzZWQ4YmNjMjM0NzkzZDNjOTBmYTEyYzA5
MDg5MThjYTUzZi4uZjhkODY5ZmFkNTc3MzFjZjNmN2UzOGI3MDJjZmE0Y2FiNjU3YTZiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDgsOCArMTQ4LDcgQEAgdm9pZCBJ
bWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZShDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNv
bnN0IENDT2NjbHVzaW9uVHIKICAgICAgICAgaW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKSk7CiAgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0g
ZmFsc2U7CiAgICAgfQotCi0gICAgdXBkYXRlQ29udGVudFJlY3QocXVldWUsIHZpc2libGVDb250
ZW50UmVjdCgpLCBvY2NsdXNpb24sIHN0YXRzKTsKKyAgICBUaWxlZExheWVyQ2hyb21pdW06OnVw
ZGF0ZShxdWV1ZSwgb2NjbHVzaW9uLCBzdGF0cyk7CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9t
aXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGNjZTE2MzUyMmJiMmQ3YzI0MmRkYzQzOTc1YTRjOTIzOWNmOWNhYWIu
LjY4YmZhNDViMGJjYzg2MDNkN2YwODM5OTMwMDJiZjkxZmZhMWRkOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcApAQCAtNTUzLDExICs1NTMsNiBAQCB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgaW50
IGxlZnQsCiAgICAgfQogfQogCi12b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVBy
aW9yaXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaXR5Q2FsYykKLXsKLSAg
ICBzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChwcmlvcml0eUNhbGMsIHZpc2libGVDb250ZW50
UmVjdCgpKTsKLX0KLQogbmFtZXNwYWNlIHsKIC8vIFRoaXMgcGlja3MgYSBzbWFsbCBhbmltYXRl
ZCBsYXllciB0byBiZSBhbnl0aGluZyBsZXNzIHRoYW4gb25lIHZpZXdwb3J0LiBUaGlzCiAvLyBp
cyBzcGVjaWZpY2FsbHkgZm9yIHBhZ2UgdHJhbnNpdGlvbnMgd2hpY2ggYXJlIHZpZXdwb3J0LXNp
emVkIGxheWVycy4gVGhlIGV4dHJhCkBAIC01OTIsNyArNTg3LDcgQEAgdm9pZCBzZXRQcmlvcml0
eUZvclRleHR1cmUoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaXR5Q2FsYywKIH0K
IH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRleHR1cmVQcmlvcml0aWVzSW5SZWN0
KGNvbnN0IENDUHJpb3JpdHlDYWxjdWxhdG9yJiBwcmlvcml0eUNhbGMsIGNvbnN0IEludFJlY3Qm
IHZpc2libGVDb250ZW50UmVjdCkKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJl
UHJpb3JpdGllcyhjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpb3JpdHlDYWxjKQogewog
ICAgIHVwZGF0ZUJvdW5kcygpOwogICAgIHJlc2V0VXBkYXRlU3RhdGUoKTsKQEAgLTYwNCw3ICs1
OTksNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJl
Y3QoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgYm9vbCBzbWFsbEFuaW1hdGVkTGF5
ZXIgPSBpc1NtYWxsQW5pbWF0ZWRMYXllcih0aGlzKTsKIAogICAgIC8vIE1pbmltYWxseSBjcmVh
dGUgdGhlIHRpbGVzIGluIHRoZSBkZXNpcmVkIHByZS1wYWludCByZWN0LgotICAgIEludFJlY3Qg
Y3JlYXRlVGlsZXNSZWN0ID0gaWRsZVBhaW50UmVjdCh2aXNpYmxlQ29udGVudFJlY3QpOworICAg
IEludFJlY3QgY3JlYXRlVGlsZXNSZWN0ID0gaWRsZVBhaW50UmVjdCgpOwogICAgIGlmICghY3Jl
YXRlVGlsZXNSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tOwogICAgICAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY3JlYXRl
VGlsZXNSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwpAQCAtNjE4LDcgKzYxMyw3IEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVjdChjb25z
dCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKIAogICAgIC8vIEFsc28sIG1pbmltYWxseSBjcmVhdGUg
YWxsIHRpbGVzIGZvciBzbWFsbCBhbmltYXRlZCBsYXllcnMgYW5kIGFsc28KICAgICAvLyBkb3Vi
bGUtYnVmZmVyIHRoZW0gc2luY2Ugd2UgaGF2ZSBsaW1pdGVkIHRoZWlyIHNpemUgdG8gYmUgcmVh
c29uYWJsZS4KLSAgICBJbnRSZWN0IGRvdWJsZUJ1ZmZlcmVkUmVjdCA9IHZpc2libGVDb250ZW50
UmVjdDsKKyAgICBJbnRSZWN0IGRvdWJsZUJ1ZmZlcmVkUmVjdCA9IHZpc2libGVDb250ZW50UmVj
dCgpOwogICAgIGlmIChzbWFsbEFuaW1hdGVkTGF5ZXIpCiAgICAgICAgIGRvdWJsZUJ1ZmZlcmVk
UmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKTsKIApAQCAt
NjQ3LDcgKzY0Miw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlUHJpb3Jp
dGllc0luUmVjdChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYKICAgICAgICAgICAgICAgICBJ
bnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSk7CiAgICAgICAgICAgICAg
ICAgdGlsZS0+ZGlydHlSZWN0ID0gdGlsZVJlY3Q7CiAgICAgICAgICAgICAgICAgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6VGV4dHVyZSogYmFja0J1ZmZlciA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAg
ICAgICAgICAgICBzZXRQcmlvcml0eUZvclRleHR1cmUocHJpb3JpdHlDYWxjLCB2aXNpYmxlQ29u
dGVudFJlY3QsIHRpbGUtPmRpcnR5UmVjdCwgZHJhd3NUb1Jvb3QsIHNtYWxsQW5pbWF0ZWRMYXll
ciwgYmFja0J1ZmZlci0+dGV4dHVyZSgpKTsKKyAgICAgICAgICAgICAgICBzZXRQcmlvcml0eUZv
clRleHR1cmUocHJpb3JpdHlDYWxjLCB2aXNpYmxlQ29udGVudFJlY3QoKSwgdGlsZS0+ZGlydHlS
ZWN0LCBkcmF3c1RvUm9vdCwgc21hbGxBbmltYXRlZExheWVyLCBiYWNrQnVmZmVyLT50ZXh0dXJl
KCkpOwogICAgICAgICAgICAgICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4gZnJvbnRC
dWZmZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6Y3JlYXRlKGJhY2tCdWZmZXItPnRleHR1cmUo
KS0+dGV4dHVyZU1hbmFnZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNr
QnVmZmVyLT50ZXh0dXJlKCktPnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYWNrQnVmZmVyLT50ZXh0dXJlKCktPmZvcm1hdCgpKTsKQEAgLTY2NSw3ICs2NjAsNyBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9yaXRpZXNJblJlY3QoY29uc3Qg
Q0NQcmlvcml0eUNhbGN1bGF0b3ImCiAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZVJlY3QodGls
ZSk7Ci0gICAgICAgIHNldFByaW9yaXR5Rm9yVGV4dHVyZShwcmlvcml0eUNhbGMsIHZpc2libGVD
b250ZW50UmVjdCwgdGlsZVJlY3QsIGRyYXdzVG9Sb290LCBzbWFsbEFuaW1hdGVkTGF5ZXIsIHRp
bGUtPm1hbmFnZWRUZXh0dXJlKCkpOworICAgICAgICBzZXRQcmlvcml0eUZvclRleHR1cmUocHJp
b3JpdHlDYWxjLCB2aXNpYmxlQ29udGVudFJlY3QoKSwgdGlsZVJlY3QsIGRyYXdzVG9Sb290LCBz
bWFsbEFuaW1hdGVkTGF5ZXIsIHRpbGUtPm1hbmFnZWRUZXh0dXJlKCkpOwogICAgIH0KIH0KIApA
QCAtNjgwLDYgKzY3NSw5IEBAIFJlZ2lvbiBUaWxlZExheWVyQ2hyb21pdW06OnZpc2libGVDb250
ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QKIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0
VXBkYXRlU3RhdGUoKQogeworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CisgICAgbV9mYWlsZWRV
cGRhdGUgPSBmYWxzZTsKKwogICAgIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOwogICAgIGZvciAoQ0NMYXllclRp
bGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVyLT50aWxlcygp
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgVXBkYXRhYmxlVGlsZSog
dGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwpA
QCAtNjkwLDEzICs2ODgsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnJlc2V0VXBkYXRl
U3RhdGUoKQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRSZWN0KENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciogb2NjbHVzaW9uLCBDQ1JlbmRlcmluZ1N0
YXRzJiBzdGF0cykKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGUoQ0NUZXh0dXJlVXBk
YXRlUXVldWUmIHF1ZXVlLCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqIG9jY2x1c2lvbiwgQ0NS
ZW5kZXJpbmdTdGF0cyYgc3RhdHMpCiB7Ci0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLSAgICBt
X2ZhaWxlZFVwZGF0ZSA9IGZhbHNlOworICAgIEFTU0VSVCghbV9za2lwc0RyYXcgJiYgIW1fZmFp
bGVkVXBkYXRlKTsgLy8gRGlkIHJlc2V0VXBkYXRlU3RhdGUgZ2V0IHNraXBwZWQ/CiAgICAgdXBk
YXRlQm91bmRzKCk7Ci0KLSAgICBpZiAobV90aWxlci0+aGFzRW1wdHlCb3VuZHMoKSkKKyAgICBp
ZiAobV90aWxlci0+aGFzRW1wdHlCb3VuZHMoKSB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGJvb2wgZGlkUGFpbnQgPSBmYWxzZTsKQEAgLTcxNSwxMiArNzExLDEy
IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50UmVjdChDQ1RleHR1cmVV
cGRhdGVRdWV1ZSYgcXVldWUsIGNvbnN0IEluCiAgICAgICAgIG1fZmFpbGVkVXBkYXRlID0gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAodmlz
aWJsZUNvbnRlbnRSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBW
aXNpYmxlIHBhaW50aW5nLiBGaXJzdCBvY2NsdWRlIHZpc2libGUgdGlsZXMgYW5kIHBhaW50IHRo
ZSBub24tb2NjbHVkZWQgdGlsZXMuCiAgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsK
LSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRp
Y2VzKHZpc2libGVDb250ZW50UmVjdCgpLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAg
IG1hcmtPY2NsdXNpb25zQW5kUmVxdWVzdFRleHR1cmVzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRv
bSwgb2NjbHVzaW9uKTsKICAgICBtX3NraXBzRHJhdyA9ICF1cGRhdGVUaWxlcyhsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20sIHF1ZXVlLCBvY2NsdXNpb24sIHN0YXRzLCBkaWRQYWludCk7CiAgICAg
aWYgKG1fc2tpcHNEcmF3KQpAQCAtNzI5LDcgKzcyNSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50UmVjdChDQ1RleHR1cmVVcGRhdGVRdWV1ZSYgcXVldWUsIGNvbnN0
IEluCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdlIGhhdmUgYWxyZWFkeSBwYWludGlu
ZyBldmVyeXRoaW5nIHZpc2libGUuIERvIHNvbWUgcHJlLXBhaW50aW5nIHdoaWxlIGlkbGUuCi0g
ICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9IGlkbGVQYWludFJlY3QoY29udGVudFJl
Y3QpOworICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KCk7
CiAgICAgaWYgKGlkbGVQYWludENvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC03NjUsMTMgKzc2MSwxMyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudFJlY3QoQ0NUZXh0dXJlVXBkYXRlUXVldWUmIHF1ZXVlLCBjb25zdCBJbgogICAgIH0K
IH0KIAotYm9vbCBUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJl
Y3QmIHZpc2libGVDb250ZW50UmVjdCkKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lk
bGVQYWludCgpCiB7CiAgICAgLy8gRG9uJ3QgdHJpZ2dlciBtb3JlIHBhaW50cyBpZiB3ZSBmYWls
ZWQgKGFzIHdlJ2xsIGp1c3QgZmFpbCBhZ2FpbikuCi0gICAgaWYgKG1fZmFpbGVkVXBkYXRlIHx8
IHZpc2libGVDb250ZW50UmVjdC5pc0VtcHR5KCkgfHwgbV90aWxlci0+aGFzRW1wdHlCb3VuZHMo
KSkKKyAgICBpZiAobV9mYWlsZWRVcGRhdGUgfHwgdmlzaWJsZUNvbnRlbnRSZWN0KCkuaXNFbXB0
eSgpIHx8IG1fdGlsZXItPmhhc0VtcHR5Qm91bmRzKCkgfHwgIWRyYXdzQ29udGVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRSZWN0IGlkbGVQYWludENvbnRlbnRSZWN0ID0g
aWRsZVBhaW50UmVjdCh2aXNpYmxlQ29udGVudFJlY3QpOworICAgIEludFJlY3QgaWRsZVBhaW50
Q29udGVudFJlY3QgPSBpZGxlUGFpbnRSZWN0KCk7CiAgICAgaWYgKGlkbGVQYWludENvbnRlbnRS
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03OTUsMTUgKzc5MSwx
NSBAQCBib29sIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVj
dCYgdmlzaWJsZUNvbnRlbnRSZWN0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW50UmVjdCBU
aWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNv
bnRlbnRSZWN0KQorSW50UmVjdCBUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QoKQog
ewogICAgIC8vIERvbid0IGluZmxhdGUgYW4gZW1wdHkgcmVjdC4KLSAgICBpZiAodmlzaWJsZUNv
bnRlbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdDsK
KyAgICBpZiAodmlzaWJsZUNvbnRlbnRSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIG1hZGUgYSBsb3QgbGFyZ2Vy
IG5vdyEgV2Ugc2hvdWxkIGluY3JlYXNlCiAgICAgLy8gICAgICAgIHRoaXMgc2xvd2x5IHdoaWxl
IGluc3VyaW5nIGl0IGRvZXNuJ3QgY2F1c2UgYW55IHBlcmYgaXNzdWVzLgotICAgIEludFJlY3Qg
cHJlcGFpbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIEludFJlY3QgcHJlcGFpbnRS
ZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVYKG1f
dGlsZXItPnRpbGVTaXplKCkud2lkdGgoKSk7CiAgICAgcHJlcGFpbnRSZWN0LmluZmxhdGVZKG1f
dGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkgKiAyKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDMzMjYzZTU0MzQ4ZGUyZWQ4MDQxMjM4NmY0NmNjOTI4YjFhMzFhNWQuLjJh
YmMxMTI5ODk1NTVlYjUzNTQyNWE4NDFmZDBlN2Q2ZDJkNzEyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUmVn
aW9uIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QgT1ZFUlJJREU7CiAKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlKENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiwgY29uc3QgQ0NPY2NsdXNp
b25UcmFja2VyKiwgQ0NSZW5kZXJpbmdTdGF0cyYpIE9WRVJSSURFOworCiBwcm90ZWN0ZWQ6CiAg
ICAgVGlsZWRMYXllckNocm9taXVtKCk7CiAKQEAgLTgyLDEzICs4NCw5IEBAIHByb3RlY3RlZDoK
ICAgICAvLyBSZXNldCBzdGF0ZSBvbiB0aWxlcyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdXBkYXRp
bmcgdGhlIGxheWVyLgogICAgIHZvaWQgcmVzZXRVcGRhdGVTdGF0ZSgpOwogCi0gICAgLy8gUHJl
cGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBj
b250ZW50UmVjdC4KLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRSZWN0KENDVGV4dHVyZVVwZGF0ZVF1
ZXVlJiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tl
ciosIENDUmVuZGVyaW5nU3RhdHMmKTsKLQogICAgIC8vIEFmdGVyIHByZXBhcmluZyBhbiB1cGRh
dGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHBhaW50aW5nIGlzIG5lZWRlZC4KLSAgICBib29sIG5l
ZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCk7Ci0KLSAgICBJ
bnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KTsK
KyAgICBib29sIG5lZWRzSWRsZVBhaW50KCk7CisgICAgSW50UmVjdCBpZGxlUGFpbnRSZWN0KCk7
CiAKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9CiAK
QEAgLTEwNCw4ICsxMDIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgdGlsZU9ubHlOZWVkc1BhcnRp
YWxVcGRhdGUoVXBkYXRhYmxlVGlsZSopOwogICAgIGJvb2wgdGlsZU5lZWRzQnVmZmVyZWRVcGRh
dGUoVXBkYXRhYmxlVGlsZSopOwogCi0gICAgdm9pZCBzZXRUZXh0dXJlUHJpb3JpdGllc0luUmVj
dChjb25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYsIGNvbnN0IEludFJlY3QmIHZpc2libGVDb250
ZW50UmVjdCk7Ci0KICAgICB2b2lkIG1hcmtPY2NsdXNpb25zQW5kUmVxdWVzdFRleHR1cmVzKGlu
dCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIGNvbnN0IENDT2NjbHVzaW9u
VHJhY2tlciopOwogCiAgICAgYm9vbCB1cGRhdGVUaWxlcyhpbnQgbGVmdCwgaW50IHRvcCwgaW50
IHJpZ2h0LCBpbnQgYm90dG9tLCBDQ1RleHR1cmVVcGRhdGVRdWV1ZSYsIGNvbnN0IENDT2NjbHVz
aW9uVHJhY2tlciosIENDUmVuZGVyaW5nU3RhdHMmLCBib29sJiBkaWRQYWludCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24u
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9u
LmNwcAppbmRleCA1OGYzN2M2OTQ5Y2FmZTdjMTAzZmQ0NWU2NDE1NTg2M2RhMGQ3NWE0Li5kY2Fh
ZTU5Y2UyMDJlMjkwY2M4N2FkN2ZkODg1OTJkYTkzMjVjNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAKQEAg
LTExNSwxMSArMTE1LDYgQEAgdm9pZCBGYWtlVGlsZWRMYXllckNocm9taXVtOjpzZXROZWVkc0Rp
c3BsYXlSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBUaWxlZExheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheVJlY3QocmVjdCk7CiB9CiAKLXZvaWQgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlKENDVGV4dHVyZVVwZGF0ZVF1ZXVlJiBxdWV1ZSwgY29uc3QgQ0NPY2NsdXNp
b25UcmFja2VyKiBvY2NsdXNpb24sIENDUmVuZGVyaW5nU3RhdHMmIHN0YXRzKQotewotICAgIHVw
ZGF0ZUNvbnRlbnRSZWN0KHF1ZXVlLCB2aXNpYmxlQ29udGVudFJlY3QoKSwgb2NjbHVzaW9uLCBz
dGF0cyk7Ci19Ci0KIHZvaWQgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVByaW9y
aXRpZXMoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIGNhbGN1bGF0b3IpCiB7CiAgICAgLy8g
RW5zdXJlIHRoZXJlIGlzIGFsd2F5cyBhIHRhcmdldCByZW5kZXIgc3VyZmFjZSBhdmFpbGFibGUu
IElmIG5vbmUgaGFzIGJlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKaW5kZXggNWRlMWM1ZmIzYzQxZTY3ZWVhOWM1MTBk
NmMwOWU1YzQ3NTc1N2Q2Yy4uM2FkYjRiZjE3OTk3YmU5MTY1MTE1YzYzN2E1NzQzMWZlZTg2Yzhl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJU
ZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmgKQEAgLTExMiw3ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdl
YkNvcmU6OkludFNpemUgdGlsZVNpemUoKSB7IHJldHVybiBXZWJDb3JlOjpJbnRTaXplKDEwMCwg
MTAwKTsgfQogCiAgICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlk
YXRlQ29udGVudFJlY3Q7Ci0gICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50UmVjdDsKICAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
Om5lZWRzSWRsZVBhaW50OwogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
c2tpcHNEcmF3OwogICAgIHVzaW5nIFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVtUGFp
bnRlZFRpbGVzOwpAQCAtMTIxLDkgKzEyMCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklERTsK
ICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0TmVlZHNEaXNwbGF5UmVjdDsgfQogCi0gICAgLy8gVXBkYXRlcyB0
aGUgdmlzaWJsZUNvbnRlbnRSZWN0KCkuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShXZWJDb3Jl
OjpDQ1RleHR1cmVVcGRhdGVRdWV1ZSYsIGNvbnN0IFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tl
ciosIFdlYkNvcmU6OkNDUmVuZGVyaW5nU3RhdHMmKSBPVkVSUklERTsKLQogICAgIHZpcnR1YWwg
dm9pZCBzZXRUZXh0dXJlUHJpb3JpdGllcyhjb25zdCBXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3Vs
YXRvciYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90
ZXh0dXJlTWFuYWdlcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggNjg5YjgxN2FmZWRiZjVkZjc4MGMz
ZDk0YjUyODIxNmQ5YmQ4YzZjYS4uMmVmYjhlNWRjYTFhOWIyN2RjOWJjMjkzYjcyODIxYjM1NDYy
MWFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVy
Q2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC03Nyw2ICs3Nyw4IEBAIGNsYXNzIFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwdWJsaWM6CiAgICAgVGlsZWRM
YXllckNocm9taXVtVGVzdCgpCiAgICAgICAgIDogbV9jb250ZXh0KFdlYktpdDo6Y3JlYXRlRmFr
ZUNDR3JhcGhpY3NDb250ZXh0KCkpCisgICAgICAgICwgbV90ZXh0dXJlTWFuYWdlcihDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg2MCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVy
ZXI6OkNvbnRlbnRQb29sKSkKKyAgICAgICAgLCBtX29jY2x1c2lvbigwKQogICAgIHsKICAgICAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIG1fcmVzb3Vy
Y2VQcm92aWRlciA9IENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7
CkBAIC05Miw2ICs5NCw0MiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBDQ1RleHR1cmVVcGRh
dGVDb250cm9sbGVyOjp1cGRhdGVUZXh0dXJlcyhtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCksICZt
X2NvcGllciwgJm1fdXBsb2FkZXIsICZtX3F1ZXVlLCBjb3VudCk7CiAgICAgfQorCisgICAgYm9v
bCB1cGRhdGVBbmRQdXNoKEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbDEsCisgICAgICAgICAgICAgICAg
ICAgICAgIEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMiA9IDAsCisgICAgICAgICAgICAg
ICAgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllckltcGwyID0gMCkKKyAgICB7CisgICAgICAgIC8v
IEdldCB0ZXh0dXJlcworICAgICAgICBtX3RleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9yaXRpZXMo
KTsKKyAgICAgICAgaWYgKGxheWVyMSkKKyAgICAgICAgICAgIGxheWVyMS0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOworICAgICAgICBpZiAobGF5ZXIyKQorICAg
ICAgICAgICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRv
cik7ICAgICAKKyAgICAgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisKKyAgICAgICAgLy8gVXBkYXRlIGNvbnRlbnQKKyAgICAgICAgaWYgKGxheWVyMSkKKyAgICAg
ICAgICAgIGxheWVyMS0+dXBkYXRlKG1fcXVldWUsIG1fb2NjbHVzaW9uLCBtX3N0YXRzKTsKKyAg
ICAgICAgaWYgKGxheWVyMikKKyAgICAgICAgICAgIGxheWVyMi0+dXBkYXRlKG1fcXVldWUsIG1f
b2NjbHVzaW9uLCBtX3N0YXRzKTsKKworICAgICAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7
CisgICAgICAgIGlmIChsYXllcjEpCisgICAgICAgICAgICBuZWVkc1VwZGF0ZSB8PSBsYXllcjEt
Pm5lZWRzSWRsZVBhaW50KCk7CisgICAgICAgIGlmIChsYXllcjIpCisgICAgICAgICAgICBuZWVk
c1VwZGF0ZSB8PSBsYXllcjItPm5lZWRzSWRsZVBhaW50KCk7CisKKyAgICAgICAgLy8gVXBkYXRl
IHRleHR1cmVzIGFuZCBwdXNoLgorICAgICAgICB1cGRhdGVUZXh0dXJlcygpOworICAgICAgICBp
ZiAobGF5ZXIxKQorICAgICAgICAgICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bDEpOworICAgICAgICBpZiAobGF5ZXIyKQorICAgICAgICAgICAgbGF5ZXIyLT5wdXNoUHJvcGVy
dGllc1RvKGxheWVySW1wbDIpOworCisgICAgICAgIHJldHVybiBuZWVkc1VwZGF0ZTsKKyAgICB9
CisKIHB1YmxpYzoKICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKICAg
ICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBtX3Jlc291cmNlUHJvdmlkZXI7CkBAIC0xMDAs
MTQgKzEzOCwxMyBAQCBwdWJsaWM6CiAgICAgRmFrZVRleHR1cmVDb3BpZXIgbV9jb3BpZXI7CiAg
ICAgRmFrZVRleHR1cmVVcGxvYWRlciBtX3VwbG9hZGVyOwogICAgIENDUHJpb3JpdHlDYWxjdWxh
dG9yIG1fcHJpb3JpdHlDYWxjdWxhdG9yOworICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IG1fdGV4dHVyZU1hbmFnZXI7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciog
bV9vY2NsdXNpb247CiB9OwogCi0KLQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1
c2hEaXJ0eVRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCox
MDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1f
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIApAQCAtMTE1LDI1ICsxNTIsMTcg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotCi0gICAgbGF5ZXItPnNl
dFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJl
Y3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVw
ZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKKyAgICB1cGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwog
CiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlLgogICAg
IEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJV
RShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKLSAgICAvLyBJbnZhbGlkYXRlcyBib3Ro
IHRpbGVzLi4uCisgICAgLy8gSW52YWxpZGF0ZXMgYm90aCB0aWxlcywgYnV0IHRoZW4gb25seSB1
cGRhdGUgb25lIG9mIHRoZW0uCisgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAw
KSk7CisgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7Ci0gICAgLy8gLi4uLmJ1dCB0aGVuIG9ubHkgdXBkYXRlIG9uZSBvZiB0aGVtLgot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRh
dGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCwgbV9zdGF0
cyk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICB1
cGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwogCiAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgaGF2ZSB0aGUgZmlyc3QgdGlsZSBzaW5jZSB0aGUgb3RoZXIgdGlsZSB3YXMg
aW52YWxpZGF0ZWQgYnV0IG5vdCBwYWludGVkLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+
aGFzVGlsZUF0KDAsIDApKTsKQEAgLTE0MiwyNCArMTcxLDE3IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wp
OwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CisgICAgbV9vY2NsdXNpb24gPSAmb2Nj
bHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxp
ZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAwLCAyMDApKTsKLSAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRS
ZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0KLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKLQotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVU
ZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7
CisgICAgdXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKIAogICAg
IEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3Bh
cXVlKCksIDAsIDEpOwogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygp
LnBpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQoKSwgMjAwMDAsIDEpOwpAQCAtMTczLDkgKzE5NSw3
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVz
KQogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA1MCwgNTAp
KTsKICAgICAvLyAuLi4uYnV0IHRoZSBhcmVhIGlzIG9jY2x1ZGVkLgogICAgIG9jY2x1ZGVkLnNl
dE9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDUwLCA1MCkpOwotICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgJm9jY2x1ZGVkLCBtX3N0
YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbC5nZXQoKSk7CisgICAgdXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJ
bXBsLmdldCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygp
LnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVk
Lm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQoKSwgMjAwMDAgKyAy
NTAwLCAxKTsKQEAgLTE4OCw4ICsyMDgsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcHVzaE9jY2x1ZGVkRGlydHlUaWxlcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHB1c2hEZWxldGVkVGlsZXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VU
aWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJ
bXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCkBAIC0xOTcsMjEg
KzIxNiwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRUaWxl
cykKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKICAgICBsYXllci0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKICAgICBsYXll
ci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQotICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotCi0gICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRz
KTsKLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVySW1wbC5nZXQoKSk7CisgICAgdXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBs
LmdldCgpKTsKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhlIGltcGwg
c2lkZS4KICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAg
RVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogCi0gICAgdGV4dHVyZU1h
bmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1l
bW9yeShtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRN
YXhNZW1vcnlMaW1pdEJ5dGVzKDQqMTAyNCoxMDI0KTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5j
bGVhclByaW9yaXRpZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeSht
X3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1l
bW9yeUxpbWl0Qnl0ZXMoNCoxMDI0KjEwMjQpOwogCiAgICAgLy8gVGhpcyBzaG91bGQgZHJvcCB0
aGUgdGlsZXMgb24gdGhlIGltcGwgdGhyZWFkLgogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGxheWVySW1wbC5nZXQoKSk7CkBAIC0yMjAsMjAzICsyMzMsMTQwIEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIEVYUEVDVF9GQUxTRShsYXll
ckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFz
VGlsZUF0KDAsIDEpKTsKIAotICAgIC8vIFRoaXMgc2hvdWxkIHJlY3JlYXRlIGFuZCB1cGRhdGUg
dGhlIGRlbGV0ZWQgdGV4dHVyZXMuCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1f
cHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwg
MCwgMTAwLCAxMDApLCAwLCBtX3N0YXRzKTsKLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgLy8gVGhpcyBzaG91
bGQgcmVjcmVhdGUgYW5kIHVwZGF0ZSBvbmUgb2YgdGhlIGRlbGV0ZWQgdGV4dHVyZXMuCisgICAg
bGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7Cisg
ICAgdXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKIAotICAgIC8v
IFdlIHNob3VsZCBvbmx5IGhhdmUgdGhlIGZpcnN0IHRpbGUgc2luY2UgdGhlIG90aGVyIHRpbGUg
d2FzIGludmFsaWRhdGVkIGJ1dCBub3QgcGFpbnRlZC4KKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBv
bmUgdGlsZXMgb24gdGhlIGltcGwgc2lkZS4KICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhh
c1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAs
IDEpKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRU
aWxlcykKIHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0
LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRl
ci4KLSAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1MDApOwotICAgIEludFJlY3QgY29u
dGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7Ci0gICAgSW50UmVjdCB2
aXNpYmxlUmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApOwotCi0gICAgLy8gVGhpcyBpbnZhbGlkYXRl
cyAyNSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZpc2libGUgdGlsZS4KLSAgICBsYXllci0+
c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3QodmlzaWJsZVJlY3QpOwotICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVu
dFJlY3QpOwotCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxj
dWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAg
ICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3Rh
dHMpOwotICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBXZSBzaG91bGQgbmVlZCBpZGxl
LXBhaW50aW5nIGZvciAzeDMgdGlsZXMgaW4gdGhlIGNlbnRlci4KLSAgICBFWFBFQ1RfVFJVRShs
YXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKLQotICAgIGxheWVyLT5wdXNoUHJv
cGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgLy8gVGhpcyBwYWludHMgMSB2aXNpYmxl
IG9mIHRoZSAyNSBpbnZhbGlkIHRpbGVzLgorICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1
MDAsIDUwMCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgyMDAs
IDIwMCwgMTAwLCAxMDApKTsKKyAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJl
Y3QoMCwgMCwgNTAwLCA1MDApKTsKKyAgICBib29sIG5lZWRzVXBkYXRlID0gdXBkYXRlQW5kUHVz
aChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKKyAgICAvLyBXZSBzaG91bGQgbmVlZCBp
ZGxlLXBhaW50aW5nIGZvciBzdXJyb3VuZGluZyB0aWxlcy4KKyAgICBFWFBFQ1RfVFJVRShuZWVk
c1VwZGF0ZSk7CiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1wbCBz
aWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDIsIDIpKTsKIAogICAg
IC8vIEZvciB0aGUgbmV4dCBmb3VyIHVwZGF0ZXMsIHdlIHNob3VsZCBkZXRlY3Qgd2Ugc3RpbGwg
bmVlZCBpZGxlIHBhaW50aW5nLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7
Ci0gICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgICAg
ICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgdmlzaWJsZVJlY3QsIDAsIG1fc3Rh
dHMpOwotICAgICAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJl
Y3QpKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSB1cGRhdGVB
bmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfVFJV
RShuZWVkc1VwZGF0ZSk7CiAgICAgfQogCi0gICAgLy8gQWZ0ZXIgZm91ciBwYXNzZXMgb2YgaWRs
ZSBwYWludGluZywgd2Ugc2hvdWxkIGJlIGZpbmlzaGVkIHBhaW50aW5nCi0gICAgLy8gRVhQRUNU
X0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOwotCiAgICAgLy8gV2Ug
c2hvdWxkIGhhdmUgb25lIHRpbGUgc3Vycm91bmRpbmcgdGhlIHZpc2libGUgdGlsZSBvbiBhbGwg
c2lkZXMsIGJ1dCBubyBvdGhlciB0aWxlcy4KICAgICBJbnRSZWN0IGlkbGVQYWludFRpbGVzKDEs
IDEsIDMsIDMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgNTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoaWRsZVBhaW50VGls
ZXMuY29udGFpbnMoaSwgaikpCi0gICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBs
LT5oYXNUaWxlQXQoaSwgaikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVY
UEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspCisgICAgICAgICAgICBFWFBFQ1RfRVEobGF5
ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaiksIGlkbGVQYWludFRpbGVzLmNvbnRhaW5zKGksIGopKTsK
ICAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGZpbmlzaCBwYWludGluZyBldmVudHVh
bGx5LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjA7IGkrKykKKyAgICAgICAgbmVlZHNVcGRh
dGUgPSB1cGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOworICAgIEVY
UEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKIHsKICAgICAvLyBTdGFydCB3aXRo
IDJtYiBvZiBtZW1vcnksIGJ1dCB0aGUgdGVzdCBpcyBnb2luZyB0byB0cnkgdG8gdXNlIGp1c3Qg
bW9yZSB0aGFuIDFtYiwgc28gd2UgcmVkdWNlIHRvIDFtYiBsYXRlci4KLSAgICBPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250
ZW50UG9vbCk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygy
ICogMTAyNCAqIDEwMjQpOyAgICAKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAg
ICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMShhZG9wdFB0cihuZXcgRmFrZUNDVGls
ZWRMYXllckltcGwoMSkpKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMihhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMikpKTsKIAogICAgIC8vIEZvciB0aGlzIHRlc3Qgd2Ug
aGF2ZSB0d28gbGF5ZXJzLiBsYXllcjEgZXhoYXVzdHMgbW9zdCB0ZXh0dXJlIG1lbW9yeSwgbGVh
dmluZyByb29tIGZvciAyIG1vcmUgdGlsZXMgZnJvbQogICAgIC8vIGxheWVyMiwgYnV0IG5vdCBh
bGwgdGhyZWUgdGlsZXMuIEZpcnN0IHdlIHBhaW50IGxheWVyMSwgYW5kIG9uZSB0aWxlIGZyb20g
bGF5ZXIyLiBUaGVuIHdoZW4gd2UgaWRsZSBwYWludAogICAgIC8vIGxheWVyMiwgd2Ugd2lsbCBm
YWlsIG9uIHRoZSB0aGlyZCB0aWxlIG9mIGxheWVyMiwgYW5kIHRoaXMgc2hvdWxkIG5vdCBsZWF2
ZSB0aGUgc2Vjb25kIHRpbGUgaW4gYSBiYWQgc3RhdGUuCiAKKyAgICAvLyBUaGlzIHVzZXMgOTYw
MDAwIGJ5dGVzLCBsZWF2aW5nIDg4NTc2IGJ5dGVzIG9mIG1lbW9yeSBsZWZ0LCB3aGljaCBpcyBl
bm91Z2ggZm9yIDIgdGlsZXMgb25seSBpbiB0aGUgb3RoZXIgbGF5ZXIuCisgICAgSW50UmVjdCBs
YXllcjFSZWN0KDAsIDAsIDEwMCwgMjQwMCk7CisgICAgCiAgICAgLy8gVGhpcyByZXF1aXJlcyA0
KjMwMDAwIGJ5dGVzIG9mIG1lbW9yeS4KICAgICBJbnRSZWN0IGxheWVyMlJlY3QoMCwgMCwgMTAw
LCAzMDApOwotICAgIGxheWVyMi0+c2V0Qm91bmRzKGxheWVyMlJlY3Quc2l6ZSgpKTsKLSAgICBs
YXllcjItPnNldFZpc2libGVDb250ZW50UmVjdChsYXllcjJSZWN0KTsKLSAgICBsYXllcjItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChsYXllcjJSZWN0KTsKLQotICAgIC8vIFRoaXMgdXNlcyA5NjAw
MDAgYnl0ZXMsIGxlYXZpbmcgODg1NzYgYnl0ZXMgb2YgbWVtb3J5IGxlZnQsIHdoaWNoIGlzIGVu
b3VnaCBmb3IgMiB0aWxlcyBvbmx5IGluIHRoZSBvdGhlciBsYXllci4KLSAgICBJbnRSZWN0IGxh
eWVyUmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMjQwMCkpOwotICAgIGxheWVy
MS0+c2V0Qm91bmRzKGxheWVyUmVjdC5zaXplKCkpOwotICAgIGxheWVyMS0+c2V0VmlzaWJsZUNv
bnRlbnRSZWN0KGxheWVyUmVjdCk7Ci0gICAgbGF5ZXIxLT5pbnZhbGlkYXRlQ29udGVudFJlY3Qo
bGF5ZXJSZWN0KTsKIAogICAgIC8vIFBhaW50IGEgc2luZ2xlIHRpbGUgaW4gbGF5ZXIyIHNvIHRo
YXQgaXQgd2lsbCBpZGxlIHBhaW50LgotICAgIGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMo
bV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyMS0+c2V0VGV4dHVyZVByaW9yaXRpZXMo
bV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKLSAgICBsYXllcjEtPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGxheWVyUmVj
dCwgMCwgbV9zdGF0cyk7Ci0gICAgbGF5ZXIyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgMCwgbV9zdGF0cyk7Ci0KKyAgICBsYXllcjEtPnNldEJv
dW5kcyhsYXllcjFSZWN0LnNpemUoKSk7CisgICAgbGF5ZXIxLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3QobGF5ZXIxUmVjdCk7CisgICAgbGF5ZXIyLT5zZXRCb3VuZHMobGF5ZXIyUmVjdC5zaXplKCkp
OworICAgIGxheWVyMi0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKTsKKyAgICBib29sIG5lZWRzVXBkYXRlID0gdXBkYXRlQW5kUHVzaChsYXllcjEuZ2V0KCks
IGxheWVySW1wbDEuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGF5ZXIyLmdldCgpLCBsYXllckltcGwyLmdldCgpKTsKICAgICAvLyBXZSBzaG91bGQgbmVlZCBp
ZGxlLXBhaW50aW5nIGZvciBib3RoIHJlbWFpbmluZyB0aWxlcyBpbiBsYXllcjIuCi0gICAgRVhQ
RUNUX1RSVUUobGF5ZXIyLT5uZWVkc0lkbGVQYWludChsYXllcjJSZWN0KSk7Ci0KLSAgICAvLyBD
b21taXQgdGhlIGZyYW1lIG92ZXIgdG8gaW1wbC4KLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAg
IGxheWVyMS0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsKLSAgICBsYXllcjIt
PnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMi5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUobmVl
ZHNVcGRhdGUpOwogCiAgICAgLy8gUmVkdWNlIG91ciBtZW1vcnkgbGltaXRzIHRvIDFtYi4KLSAg
ICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygxMDI0ICogMTAyNCk7Cisg
ICAgbV90ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygxMDI0ICogMTAyNCk7
CiAKICAgICAvLyBOb3cgaWRsZSBwYWludCBsYXllcjIuIFdlIGFyZSBnb2luZyB0byBydW4gb3V0
IG9mIG1lbW9yeSB0aG91Z2ghCi0gICAgbGF5ZXIyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3By
aW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3By
aW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOwotICAgIGxheWVyMi0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCksIDAsIG1fc3RhdHMpOwotCiAgICAgLy8gT2ggd2VsbCwgY29tbWl0IHRoZSBm
cmFtZSBhbmQgcHVzaC4KLSAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyMS0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwxLmdldCgpKTsKLSAgICBsYXllcjItPnB1c2hQcm9wZXJ0aWVz
VG8obGF5ZXJJbXBsMi5nZXQoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsK
KyAgICAgICAgbmVlZHNVcGRhdGUgPSB1cGRhdGVBbmRQdXNoKGxheWVyMS5nZXQoKSwgbGF5ZXJJ
bXBsMS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyMi5n
ZXQoKSwgbGF5ZXJJbXBsMi5nZXQoKSk7CisgICAgfQogCiAgICAgLy8gU2FuaXR5IGNoZWNrLCB3
ZSBzaG91bGQgaGF2ZSB0ZXh0dXJlcyBmb3IgdGhlIGJpZyBsYXllci4KICAgICBFWFBFQ1RfVFJV
RShsYXllckltcGwxLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoMCwgMCkpOworICAgIEVYUEVDVF9U
UlVFKGxheWVySW1wbDEtPmhhc1RleHR1cmVJZEZvclRpbGVBdCgwLCAyMykpOwogCi0gICAgLy8g
V2Ugc2hvdWxkIG9ubHkgaGF2ZSB0aGUgZmlyc3QgdGlsZSBmcm9tIGxheWVyMiBzaW5jZSBpdCBm
YWlsZWQgdG8gaWRsZSB1cGRhdGUuCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgaGF2ZSB0aGUgZmly
c3QgdHdvIHRpbGVzIGZyb20gbGF5ZXIyIHNpbmNlCisgICAgLy8gaXQgZmFpbGVkIHRvIGlkbGUg
dXBkYXRlIHRoZSBsYXN0IHRpbGUuCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsMi0+aGFzVGls
ZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwyLT5oYXNUZXh0dXJlSWRGb3JU
aWxlQXQoMCwgMCkpOwotICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwg
MSkpOwotICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwyLT5oYXNUaWxlQXQoMCwgMikpOwotCi0g
ICAgLy8gTm93IGlmIGxheWVyMiBiZWNvbWVzIGZ1bGx5IHZpc2libGUsIHdlIHNob3VsZCBiZSBh
YmxlIHRvIHBhaW50IGl0IGFuZCBwdXNoIHZhbGlkIHRleHR1cmVzLgotICAgIGxheWVyMi0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyMS0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllcjItPnVwZGF0ZUNvbnRlbnRSZWN0
KG1fcXVldWUsIGxheWVyMlJlY3QsIDAsIG1fc3RhdHMpOwotICAgIGxheWVyMS0+dXBkYXRlQ29u
dGVudFJlY3QobV9xdWV1ZSwgbGF5ZXJSZWN0LCAwLCBtX3N0YXRzKTsKLQotICAgIHVwZGF0ZVRl
eHR1cmVzKCk7Ci0gICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbDEuZ2V0KCkp
OwotICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwyLmdldCgpKTsKLQotICAg
IEVYUEVDVF9UUlVFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RS
VUUobGF5ZXJJbXBsMi0+aGFzVGlsZUF0KDAsIDEpKTsKLSAgICBFWFBFQ1RfVFJVRShsYXllcklt
cGwyLT5oYXNUaWxlQXQoMCwgMikpOwotICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbDItPmhhc1Rl
eHR1cmVJZEZvclRpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsMi0+aGFz
VGV4dHVyZUlkRm9yVGlsZUF0KDAsIDEpKTsKLSAgICBFWFBFQ1RfVFJVRShsYXllckltcGwyLT5o
YXNUZXh0dXJlSWRGb3JUaWxlQXQoMCwgMikpOworICAgIAorICAgIEVYUEVDVF9GQUxTRShuZWVk
c1VwZGF0ZSk7CisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAyKSk7
CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2Ns
dWRlZFRpbGVzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0
KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1ZGVkOwotCisgICAgbV9vY2NsdXNpb24gPSAmb2NjbHVkZWQ7CisgICAgCiAgICAg
Ly8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIG9uZSBvY2Ns
dWRlZCB0aWxlLCBjdWxscyBpdCBkdXJpbmcgcGFpbnQsIGJ1dCBwcmVwYWludHMgaXQuCiAgICAg
b2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKIAogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwotICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOworICAgIHVwZGF0ZUFuZFB1
c2gobGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1
ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7Ci0gICAgdXBk
YXRlVGV4dHVyZXMoKTsKLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0
KCkpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhlIHByZXBhaW50ZWQgdGlsZSBvbiB0aGUg
aW1wbCBzaWRlLgorICAgIC8vIFdlIHNob3VsZCBoYXZlIHRoZSBwcmVwYWludGVkIHRpbGUgb24g
dGhlIGltcGwgc2lkZSwgYnV0IGN1bGxlZCBpdCBkdXJpbmcgcGFpbnQuCiAgICAgRVhQRUNUX1RS
VUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworICAgIEVYUEVDVF9FUSgxLCBvY2NsdWRl
ZC5vdmVyZHJhd01ldHJpY3MoKS50aWxlc0N1bGxlZEZvclVwbG9hZCgpKTsKIH0KIAogVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc01hcmtlZERpcnR5RHVyaW5nUGFpbnQp
CiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAy
NCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAw
LCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgLy8g
SG93ZXZlciwgZHVyaW5nIHRoZSBwYWludCwgd2UgaW52YWxpZGF0ZSBvbmUgb2YgdGhlIHRpbGVz
LiBUaGlzIHNob3VsZAogICAgIC8vIG5vdCBwcmV2ZW50IHRoZSB0aWxlIGZyb20gYmVpbmcgcHVz
aGVkLgotICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxh
eWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogICAg
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKElu
dFJlY3QoMCwgNTAsIDEwMCwgNTApLCBsYXllci5nZXQoKSk7Ci0KLSAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9x
dWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0ZVRl
eHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsK
KyAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKKyAgICBsYXllci0+c2V0
VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgICAgCisgICAgdXBk
YXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKIAogICAgIC8vIFdlIHNo
b3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhlIGltcGwgc2lkZS4KICAgICBFWFBFQ1RfVFJVRShs
YXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC00MjUsMzQgKzM3NSwyMCBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWludCkK
IAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGly
dHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAg
ICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21p
dW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3Rl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjFJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MikpKTsKIAorICAgIC8vIEludmFsaWRhdGUgYSB0aWxlIG9uIGxheWVyMSwgZHVyaW5nIHVwZGF0
ZSBvZiBsYXllciAyLgorICAgIGxheWVyMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0
UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIxLmdldCgpKTsK
ICAgICBsYXllcjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXIxLT5z
ZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVy
MS0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQorICAg
IGxheWVyMS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsg
ICAgCiAgICAgbGF5ZXIyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVy
Mi0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBs
YXllcjItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0K
LSAgICBsYXllcjEtPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsK
LSAgICBsYXllcjItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsK
LSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICBsYXllcjEt
PnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBt
X3N0YXRzKTsKLQotICAgIC8vIEludmFsaWRhdGUgYSB0aWxlIG9uIGxheWVyMQotICAgIGxheWVy
Mi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0
KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIxLmdldCgpKTsKLSAgICBsYXllcjItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRzKTsKLQot
ICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVy
MUltcGwuZ2V0KCkpOwotICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllcjJJbXBsLmdl
dCgpKTsKKyAgICBsYXllcjItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSk7ICAgIAorICAgIHVwZGF0ZUFuZFB1c2gobGF5ZXIxLmdldCgpLCBsYXllcjFJbXBs
LmdldCgpLAorICAgICAgICAgICAgICAgICAgbGF5ZXIyLmdldCgpLCBsYXllcjJJbXBsLmdldCgp
KTsKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIGJvdGggdGlsZXMgb24gdGhlIGltcGwgc2lkZSBm
b3IgYWxsIGxheWVycy4KICAgICBFWFBFQ1RfVFJVRShsYXllcjFJbXBsLT5oYXNUaWxlQXQoMCwg
MCkpOwpAQCAtNDYzLDMyICszOTksMTkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogCiBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmlu
Z1BhaW50T25QcmV2aW91c0xheWVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBSZWZQdHI8RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
bV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjFJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMikp
KTsKIAorICAgIGxheWVyMS0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52
YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUwKSwgbGF5ZXIyLmdldCgpKTsKICAgICBsYXll
cjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7Ci0gICAgbGF5ZXIxLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyMS0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLQorICAgIGxheWVyMS0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgICAgCiAgICAg
bGF5ZXIyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVyMi0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKLSAgICBsYXllcjItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSk7Ci0KLSAgICBsYXll
cjEtPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBsYXll
cjItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGEg
dGlsZSBvbiBsYXllcjIKLSAgICBsYXllcjEtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNl
dFJlY3RUb0ludmFsaWRhdGUoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIGxheWVyMi5nZXQoKSk7
Ci0gICAgbGF5ZXIxLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0gICAgbGF5ZXIyLT51cGRhdGVDb250ZW50UmVjdChtX3F1
ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0gICAgdXBkYXRlVGV4
dHVyZXMoKTsKLSAgICBsYXllcjEtPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIxSW1wbC5nZXQoKSk7
Ci0gICAgbGF5ZXIyLT5wdXNoUHJvcGVydGllc1RvKGxheWVyMkltcGwuZ2V0KCkpOworICAgIGxh
eWVyMi0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAyMDApKTsgICAg
CisgICAgdXBkYXRlQW5kUHVzaChsYXllcjEuZ2V0KCksIGxheWVyMUltcGwuZ2V0KCksCisgICAg
ICAgICAgICAgICAgICBsYXllcjIuZ2V0KCksIGxheWVyMkltcGwuZ2V0KCkpOwogCiAgICAgLy8g
V2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlIGZvciBhbGwgbGF5ZXJz
LgogICAgIEVYUEVDVF9UUlVFKGxheWVyMUltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC01MTgs
MTAgKzQ0MSwxMCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFpbnRTbWFsbEFu
aW1hdGVkTGF5ZXJzSW1tZWRpYXRlbHkpCiAgICAgICAgIGlmIChydW5PdXRPZk1lbW9yeVtpXSkK
ICAgICAgICAgICAgIGxheWVyV2lkdGggKj0gMjsKIAotICAgICAgICBPd25QdHI8Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUZvckxheWVyLCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50
UG9vbCk7CisgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMo
bWVtb3J5Rm9yTGF5ZXIpOwogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKIAotICAgICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OworICAgICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAg
ICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgICAgIC8vIEZ1bGwgc2l6ZSBsYXll
ciB3aXRoIGhhbGYgYmVpbmcgdmlzaWJsZS4KQEAgLTUzOSw4ICs0NjIsOCBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcGFpbnRTbWFsbEFuaW1hdGVkTGF5ZXJzSW1tZWRpYXRlbHkp
CiAgICAgICAgIC8vIFRoZSBsYXllciBzaG91bGQgcGFpbnQgaXQncyBlbnRpcmUgY29udGVudHMg
b24gdGhlIGZpcnN0IHBhaW50CiAgICAgICAgIC8vIGlmIGl0IGlzIGNsb3NlIHRvIHRoZSB2aWV3
cG9ydCBzaXplIGFuZCBoYXMgdGhlIGF2YWlsYWJsZSBtZW1vcnkuCiAgICAgICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICAgICAgbGF5ZXItPnVwZGF0ZUNv
bnRlbnRSZWN0KG1fcXVldWUsIHZpc2libGVSZWN0LCAwLCBtX3N0YXRzKTsKKyAgICAgICAgbV90
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgICAgIGxheWVyLT51cGRh
dGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAg
ICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiAKQEAgLTU2NSw0
OSArNDg4LDMxIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYWludFNtYWxsQW5p
bWF0ZWRMYXllcnNJbW1lZGlhdGVseSkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IGlkbGVQYWludE91dE9mTWVtb3J5KQogewotICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MC4gU2V0dXAgM3gzIHRpbGVzIHdpdGggb25lIDF4MSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRl
ci4KLSAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAzMDApOwotICAgIEludFJlY3QgY29u
dGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7Ci0gICAgSW50UmVjdCB2
aXNpYmxlUmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApOwotCi0gICAgLy8gV2UgaGF2ZSBlbm91Z2gg
bWVtb3J5IGZvciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBt
ZW1vcnkgaW4gZmlyc3QgaWRsZSBwYWludC4KLSAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAw
ICogMTAwOyAvLyAxIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhlbC4KLQotICAgIE93blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpjcmVhdGUobWVtb3J5TGltaXQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRl
bnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwor
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkp
KTsKIAotICAgIC8vIEludmFsaWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNp
YmxlIHRpbGUuCi0gICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKLSAgICBsYXll
ci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGVSZWN0KTsKLSAgICBsYXllci0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1v
cnkgZm9yIG9ubHkgdGhlIHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9y
eSBpbiBmaXJzdCBpZGxlIHBhaW50LgorICAgIGludCBtZW1vcnlMaW1pdCA9IDQgKiAxMDAgKiAx
MDA7IC8vIDEgdGlsZXMsIDQgYnl0ZXMgcGVyIHBpeGVsLgorICAgIG1fdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXQpOwogCi0gICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1f
cXVldWUsIHZpc2libGVSZWN0LCAwLCBtX3N0YXRzKTsKKyAgICAvLyBUaGUgdGlsZSBzaXplIGlz
IDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4K
KyAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRT
aXplKDMwMCwgMzAwKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0
KDEwMCwgMTAwLCAxMDAsIDEwMCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQor
ICAgICAgICBuZWVkc1VwZGF0ZSA9IHVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1w
bC5nZXQoKSk7CiAKICAgICAvLyBJZGxlLXBhaW50aW5nIHNob3VsZCBzZWUgbm8gbW9yZSBwcmlv
cml0eSB0aWxlcyBmb3IgcGFpbnRpbmcuCi0gICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lk
bGVQYWludCh2aXNpYmxlUmVjdCkpOwotCi0gICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICBsYXll
ci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgIEVYUEVDVF9GQUxTRShu
ZWVkc1VwZGF0ZSk7CiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBvbiB0aGUgaW1w
bCBzaWRlLgogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDEsIDEpKTsKLQot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRh
dGVDb250ZW50UmVjdChtX3F1ZXVlLCB2aXNpYmxlUmVjdCwgMCwgbV9zdGF0cyk7Ci0KLSAgICAv
LyBXZSBzaG91bGRuJ3Qgc2lnbmFsIHdlIG5lZWQgYW5vdGhlciBpZGxlIHBhaW50LgotICAgIEVY
UEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKIH0KIAogVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMjQsIENDUmVuZGVy
ZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
ICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMSkpKTsKIApAQCAtNjE3LDI1ICs1MjIsMTYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQogICAgICAgICBsYXllci0+c2V0RHJh
d1RyYW5zZm9ybUlzQW5pbWF0aW5nKGFuaW1hdGluZ1tpXSk7CiAKICAgICAgICAgLy8gVGhlIGxh
eWVyJ3MgYm91bmRzIGFyZSBlbXB0eS4KLSAgICAgICAgSW50UmVjdCBjb250ZW50UmVjdDsKLQot
ICAgICAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgIGxh
eWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAgICBsYXllci0+
aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKLQotICAgICAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgICAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0KICAgICAgICAgLy8gRW1wdHkgbGF5ZXJz
IGRvbid0IHBhaW50IG9yIGlkbGUtcGFpbnQuCi0gICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50
UmVjdChtX3F1ZXVlLCBjb250ZW50UmVjdCwgMCwgbV9zdGF0cyk7Ci0KKyAgICAgICAgbGF5ZXIt
PnNldEJvdW5kcyhJbnRTaXplKCkpOworICAgICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoKSk7CisgICAgICAgIGJvb2wgbmVlZHNVcGRhdGUgPSB1cGRhdGVBbmRQdXNo
KGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOworICAgICAgICAKICAgICAgICAgLy8gRW1w
dHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCiAgICAgICAgIEVYUEVDVF9FUSgwdSwgbGF5ZXIt
Pm51bVBhaW50ZWRUaWxlcygpKTsKIAogICAgICAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgbmVl
ZCBwcmVwYWludC4KLSAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludChj
b250ZW50UmVjdCkpOwotCi0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiAKICAgICAgICAg
Ly8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCiAgICAgICAgIEVYUEVDVF9GQUxTRShs
YXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC02NDQsMTQgKzU0MCw5IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIAogVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCiB7Ci0g
ICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDEwMCwgMTAwKTsKLSAgICBJbnRSZWN0IGNvbnRlbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOwotCi0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVu
dFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Cisg
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkp
OwotICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CiAKICAgICAvLyBBbHRlcm5h
dGUgYmV0d2VlbiBub3QgdmlzaWJsZSBhbmQgdmlzaWJsZS4KICAgICBJbnRSZWN0IHYoMCwgMCwg
MTAwLCAxMDApOwpAQCAtNjYyLDcxICs1NTMsNTMgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCiAgICAgLy8gV2Ugc2hvdWxkIG5vdCBo
YXZlIGFueSB0aWxlcyBleGNlcHQgZm9yIHdoZW4gdGhlIGxheWVyIHdhcyB2aXNpYmxlCiAgICAg
Ly8gb3IgYWZ0ZXIgdGhlIGxheWVyIHdhcyB2aXNpYmxlIGFuZCB3ZSBkaWRuJ3QgaW52YWxpZGF0
ZS4KICAgICBib29sIGhhdmVUaWxlWzEwXSA9IHsgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBm
YWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUgfTsKLQorICAgIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICBsYXllci0+c2V0Qm91bmRzKEludFNp
emUoMTAwLCAxMDApKTsKICAgICAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdCh2aXNp
YmxlUmVjdFtpXSk7CiAKLSAgICAgICAgLy8gU2tpcCBpbnZhbGlkYXRpb24gb25jZSB0byBpbnN1
cmUgdGhlIHRpbGUgc3RheXMgaW4gbWVtb3J5IHdoaWxlIG5vdCB2aXNpYmxlLgogICAgICAgICBp
ZiAoaW52YWxpZGF0ZVtpXSkKLSAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJl
Y3QoY29udGVudFJlY3QpOwotCi0gICAgICAgIC8vIFBhaW50IC8gaWRsZS1wYWludC4KLSAgICAg
ICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotICAgICAgICBsYXllci0+c2V0
VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgICAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCB2aXNpYmxlUmVjdFtpXSwgMCwgbV9zdGF0cyk7Ci0KLSAgICAgICAg
dXBkYXRlVGV4dHVyZXMoKTsKLQorICAgICAgICAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50
UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgICAgIGJvb2wgbmVlZHNVcGRhdGUg
PSB1cGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOworICAgICAgICAK
ICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIHNpZ25hbCBpZGxlIHBhaW50LCBhcyB3ZSBwYWlu
dGVkIHRoZSBlbnRpcmUgbGF5ZXIKICAgICAgICAgLy8gb3IgdGhlIGxheWVyIHdhcyBub3Qgdmlz
aWJsZS4KLSAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxl
UmVjdFtpXSkpOwotCi0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5n
ZXQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShuZWVkc1VwZGF0ZSk7CiAgICAgICAgIEVYUEVD
VF9FUShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSwgaGF2ZVRpbGVbaV0pOwogICAgIH0KIH0K
IAotCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJl
KQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5h
Z2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEw
MjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFr
ZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwotICAgIGxheWVyLT5zZXRU
ZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdCht
X3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAwKSwgMCwgbV9zdGF0cyk7Ci0gICAgdXBkYXRl
VGV4dHVyZXMoMTAwMCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKKyAgICB1cGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwog
CiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYm90aCB0aWxlcyBvbiB0aGUgaW1wbCBzaWRlLgogICAg
IEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJV
RShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKICAgICBsYXllci0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlQ291bnQoKTsKLSAgICAvLyBJbnZva2UgdXBkYXRl
Q29udGVudFJlY3QgYWdhaW4uIEFzIHRoZSBsYXllciBpcyB2YWxpZCB1cGRhdGVDb250ZW50UmVj
dCBzaG91bGRuJ3QgYmUgaW52b2tlZCBvbgorICAgIC8vIEludm9rZSB1cGRhdGUgYWdhaW4uIEFz
IHRoZSBsYXllciBpcyB2YWxpZCB1cGRhdGUgc2hvdWxkbid0IGJlIGludm9rZWQgb24KICAgICAv
LyB0aGUgTGF5ZXJUZXh0dXJlVXBkYXRlci4KLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3Qo
bV9xdWV1ZSwgSW50UmVjdCgwLCAwLCAxMDAsIDIwMCksIDAsIG1fc3RhdHMpOwotICAgIHVwZGF0
ZVRleHR1cmVzKDEwMDApOworICAgIHVwZGF0ZUFuZFB1c2gobGF5ZXIuZ2V0KCksIGxheWVySW1w
bC5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
cigpLT5wcmVwYXJlQ291bnQoKSk7CiAKLSAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0
KEludFJlY3QoMCwgMCwgNTAsIDUwKSk7Ci0gICAgLy8gc2V0UmVjdFRvSW52YWxpZGF0ZSB0cmln
Z2VycyBpbnZhbGlkYXRlQ29udGVudFJlY3QoKSBiZWluZyBpbnZva2VkIGZyb20gdXBkYXRlQ29u
dGVudFJlY3QuCisgICAgLy8gc2V0UmVjdFRvSW52YWxpZGF0ZSB0cmlnZ2VycyBpbnZhbGlkYXRl
Q29udGVudFJlY3QoKSBiZWluZyBpbnZva2VkIGZyb20gdXBkYXRlLgogICAgIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKEludFJlY3QoMjUsIDI1
LCA1MCwgNTApLCBsYXllci5nZXQoKSk7CiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPmNsZWFyUHJlcGFyZUNvdW50KCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0
KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRzKTsKLSAgICB1cGRh
dGVUZXh0dXJlcygxMDAwKTsKKyAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJl
Y3QoMCwgMCwgNTAsIDUwKSk7CisgICAgdXBkYXRlQW5kUHVzaChsYXllci5nZXQoKSwgbGF5ZXJJ
bXBsLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnByZXBhcmVDb3VudCgpKTsKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+Y2xlYXJQcmVwYXJlQ291bnQoKTsKLSAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIHN0aWxs
IGJlIGludmFsaWQgYXMgdXBkYXRlQ29udGVudFJlY3QgaW52b2tlZCBpbnZhbGlkYXRlLgotICAg
IGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMjAw
KSwgMCwgbV9zdGF0cyk7Ci0gICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7CisKKyAgICAvLyBUaGUg
bGF5ZXIgc2hvdWxkIHN0aWxsIGJlIGludmFsaWQgYXMgdXBkYXRlIGludm9rZWQgaW52YWxpZGF0
ZS4KKyAgICB1cGRhdGVBbmRQdXNoKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOyAvLyB2
aXNpYmxlCiAgICAgRVhQRUNUX0VRKDEsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT5wcmVwYXJlQ291bnQoKSk7CiB9CiAKQEAgLTczNCw5ICs2MDcsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBkYXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2Nh
bGVkKQogewogICAgIC8vIFRoZSB1cGRhdGVSZWN0ICh0aGF0IGluZGljYXRlcyB3aGF0IHdhcyBh
Y3R1YWxseSBwYWludGVkKSBzaG91bGQgYmUgaW4KICAgICAvLyBsYXllciBzcGFjZSwgbm90IHRo
ZSBjb250ZW50IHNwYWNlLgotCi0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0
KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyhtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAKICAgICBJbnRSZWN0
IGxheWVyQm91bmRzKDAsIDAsIDMwMCwgMjAwKTsKQEAgLTc1MSwxNiArNjIyLDE2IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3Vu
ZHNBcmVTY2FsZWQpCiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50Qm91
bmRzKTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxh
eWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50Qm91bmRzLCAwLCBtX3N0YXRz
KTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXll
ci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KEZsb2F0UmVjdCgwLCAwLCAzMDAsIDMwMCAqIDAuOCksIGxheWVyLT51cGRhdGVSZWN0KCkpOwog
ICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAKICAgICAvLyBBZnRlciB0aGUgdGlsZXMgYXJlIHVwZGF0
ZWQgb25jZSwgYW5vdGhlciBpbnZhbGlkYXRlIG9ubHkgbmVlZHMgdG8gdXBkYXRlIHRoZSBib3Vu
ZHMgb2YgdGhlIGxheWVyLgogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9y
aXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwogICAgIGxheWVy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudEJvdW5kcyk7Ci0gICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3VuZHMsIDAsIG1fc3RhdHMpOworICAgIGxh
eWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1Rf
RVEoRmxvYXRSZWN0KGxheWVyQm91bmRzKSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiAgICAgdXBk
YXRlVGV4dHVyZXMoKTsKIApAQCAtNzY4LDE1ICs2MzksMTQgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkK
ICAgICBJbnRSZWN0IHBhcnRpYWxEYW1hZ2UoMzAsIDEwMCwgMTAsIDEwKTsKICAgICBsYXllci0+
aW52YWxpZGF0ZUNvbnRlbnRSZWN0KHBhcnRpYWxEYW1hZ2UpOwogICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1
ZXVlLCBjb250ZW50Qm91bmRzLCAwLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3Rh
dHMpOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCg0NSwgODAsIDE1LCA4KSwg
bGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiB7Ci0gICAgT3du
UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJl
cjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdl
dCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgxKSkpOwogCkBAIC03OTAsOCArNjYwLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIAogICAg
IC8vIFB1c2ggdGhlIHRpbGVzIHRvIHRoZSBpbXBsIHNpZGUgYW5kIGNoZWNrIHRoYXQgdGhlcmUg
aXMgZXhhY3RseSBvbmUuCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3Jp
dHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAw
LCAxMDApLCAwLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIHVw
ZGF0ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC04
MDcsOCArNjc3LDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFs
aWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIAogICAgIC8vIFRoZSBpbXBsIHNpZGUg
c2hvdWxkIGdldCAyeDIgdGlsZXMgbm93LgogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGll
cyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0
KDAsIDAsIDIwMCwgMjAwKSwgMCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRz
KTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVySW1wbC5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwg
MCkpOwpAQCAtODIwLDggKzY5MCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2
ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgLy8gaW1wbCBz
aWRlLgogICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDEsIDAsIDAsIDEpLCAwLCBtX3N0YXRzKTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbV90ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgw
LCAwKSk7CkBAIC04ODMsMTYgKzc1MiwxNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cmVzaXplVG9TbWFsbGVyKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
NjAqMTAyNCoxMDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKEludFNp
emUoNzAwLCA3MDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3Qo
MCwgMCwgNzAwLCA3MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJl
Y3QoMCwgMCwgNzAwLCA3MDApKTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyht
X3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAs
IDAsIDcwMCwgNzAwKSwgMCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsK
IAogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgyMDAsIDIwMCkpOwogICAgIGxheWVyLT5p
bnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAyMDAsIDIwMCkpOwpAQCAtOTAwLDgg
Kzc2OCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCByZXNpemVUb1NtYWxsZXIp
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBodWdlTGF5ZXJVcGRhdGVDcmFzaCkK
IHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
ciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDYwKjEwMjQqMTAyNCwgMTAy
NCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogCiAgICAgaW50IHNpemUgPSAxIDw8IDMwOwogICAgIGxheWVyLT5zZXRCb3Vu
ZHMoSW50U2l6ZShzaXplLCBzaXplKSk7CkBAIC05MTAsOCArNzc3LDggQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIGh1Z2VMYXllclVwZGF0ZUNyYXNoKQogCiAgICAgLy8gRW5zdXJl
IG5vIGNyYXNoIGZvciBib3VuZHMgd2hlcmUgc2l6ZSAqIHNpemUgd291bGQgb3ZlcmZsb3cgYW4g
aW50LgogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRv
cik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVy
LT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDcwMCwgNzAwKSwgMCwg
bV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKIH0KIAogVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQpAQCAtMTA0NCw4ICs5MTEsNyBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAKIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQogewot
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIEND
UmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0
KCkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlk
YXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50
U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMTA1NCwxNSArOTIwLDE0IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQogICAgIGxheWVyLT5p
bnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwogCiAgICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0
dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgMTAwLCAyMDApLCAwLCBtX3N0YXRzKTsKKyAg
ICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBk
YXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgyLCBsYXllci0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIH0KIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb24pCiB7Ci0gICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5k
ZXJlcjo6Q29udGVudFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGls
ZSBzaXplIGlzIDEwMHgxMDAuCkBAIC0xMDc1LDggKzk0MCw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uKQogICAgIGxheWVyLT5pbnZh
bGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogCiAgICAgbGF5ZXIt
PnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRS
ZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQsIG1fc3RhdHMp
OworICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIGxheWVy
LT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICBFWFBFQ1RfRVEoMzYt
MywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7
CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxv
YWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEwODUsMTEgKzk1MCwxMSBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbikKIAogICAgIGxheWVy
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclByZXBhcmVSZWN0Q291bnQoKTsKICAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKIAogICAgIG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJ
bnRSZWN0KDI1MCwgMjAwLCAzMDAsIDEwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVu
dFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50
UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRz
KTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAg
RVhQRUNUX0VRKDM2LTIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJl
UmVjdENvdW50KCkpOwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNz
KCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC0xMDk4LDExICs5NjMsMTEgQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb24p
CiAKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlUmVj
dENvdW50KCk7CiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxj
dWxhdG9yKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
bV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKICAgICBvY2NsdWRlZC5z
ZXRPY2NsdXNpb24oSW50UmVjdCgyNTAsIDI1MCwgMzAwLCAxMDApKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+
dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2Ns
dWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1f
c3RhdHMpOwogICAgIEVYUEVDVF9FUSgzNiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVy
ZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTExMTIsOCAr
OTc3LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhP
Y2NsdXNpb24pCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRX
aXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiB7Ci0gICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVu
dFBvb2wpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Cisg
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAuCkBAIC0xMTI3LDggKzk5MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAK
ICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDM2MCksICZvY2NsdWRl
ZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVY
UEVDVF9FUSgyNC0zLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJl
Y3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygp
LnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTE0Myw4ICsxMDA3LDggQEAgVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRW
aXNpYmxpdHlDb25zdHJhaW50cykKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KElu
dFJlY3QoMCwgMCwgNjAwLCAzNTApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0
KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRp
ZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVj
dCgwLCAwLCA2MDAsIDM1MCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFu
YWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAm
b2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgyNC02LCBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFS
KG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEp
OwpAQCAtMTE1OSw4ICsxMDIzLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRp
bGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNpYmxpdHlDb25zdHJhaW50cykKICAgICBsYXll
ci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsKICAgICBs
YXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAg
ICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRl
Q29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDM0MCksICZvY2NsdWRlZCwg
bV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVD
VF9FUSgyNC02LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RD
b3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBp
eGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTE3MSw4ICsxMDM1LDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRWaXNp
YmxpdHlDb25zdHJhaW50cykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVz
Tm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wp
OwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAu
CkBAIC0xMTg0LDggKzEwNDcsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGls
ZXNOb3RQYWludGVkV2l0aG91dEludmFsaWRhdGlvbikKICAgICBsYXllci0+c2V0VmlzaWJsZUNv
bnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+aW52YWxpZGF0
ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKICAgICBsYXllci0+c2V0VGV4
dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9x
dWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAg
bV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgbGF5ZXItPnVwZGF0
ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgzNi0zLCBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKICAgICB7
CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwpAQCAtMTE5OCwx
MCArMTA2MSwxMCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNOb3RQYWlu
dGVkV2l0aG91dEludmFsaWRhdGlvbikKIAogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5jbGVhclByZXBhcmVSZWN0Q291bnQoKTsKICAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKIAogICAgIC8vIFJlcGFpbnQgd2l0aG91dCBtYXJraW5nIGl0IGRpcnR5LiBUaGUgMyBj
dWxsZWQgdGlsZXMgd2lsbCBiZSBwcmUtcGFpbnRlZCBub3cuCi0gICAgbGF5ZXItPnVwZGF0ZUNv
bnRlbnRSZWN0KG1fcXVldWUsIEludFJlY3QoMCwgMCwgNjAwLCA2MDApLCAmb2NjbHVkZWQsIG1f
c3RhdHMpOworICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsK
ICAgICBFWFBFQ1RfRVEoMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBh
cmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJp
Y3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEyMTEsOCArMTA3NCw3IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc05vdFBhaW50ZWRXaXRob3V0SW52
YWxpZGF0aW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVk
V2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwot
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuCkBA
IC0xMjMwLDggKzEwOTIsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQ
YWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiAgICAgbGF5ZXItPnNldFZpc2libGVD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsK
ICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDAp
KTsKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3Ip
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+
dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2Ns
dWRlZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAg
IEVYUEVDVF9FUSgzNi0zLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFy
ZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmlj
cygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwpAQCAtMTI0MSw4ICsxMTAzLDcgQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25B
bmRUcmFuc2Zvcm1zKQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwot
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuCkBA
IC0xMjYyLDggKzExMjMsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQ
YWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgbGF5ZXItPnNldFZpc2libGVDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKICAg
ICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsK
ICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwot
ICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgSW50UmVjdCgwLCAwLCA2MDAsIDYwMCksICZvY2NsdWRl
ZCwgbV9zdGF0cyk7CisgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIC8v
IFRoZSBjb250ZW50IGlzIGhhbGYgdGhlIHNpemUgb2YgdGhlIGxheWVyIChzbyB0aGUgbnVtYmVy
IG9mIHRpbGVzIGlzIGZld2VyKS4KICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBjb250ZW50IGlz
IDMwMHgzMDAsIGFuZCBzaW5jZSB0aGUgdGlsZSBzaXplIGlzIDEwMCwgdGhlCiAgICAgLy8gbnVt
YmVyIG9mIHRpbGVzIDN4My4KQEAgLTEyODMsOCArMTE0NCw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBs
YXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmNv
bnRlbnRCb3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVj
dCgwLCAwLCA2MDAsIDYwMCkpOwogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3By
aW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAs
IDYwMCwgNjAwKSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRl
ZCwgbV9zdGF0cyk7CiAgICAgRVhQRUNUX0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRl
ZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEz
MDQsOCArMTE2NSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50
ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwogICAgIGxh
eWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGVD
b250ZW50UmVjdChtX3F1ZXVlLCBJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSwgJm9jY2x1ZGVkLCBt
X3N0YXRzKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgRVhQRUNU
X0VRKDktMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291
bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhl
bHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEzMTUsOCArMTE3Niw3IEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGlu
ZykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVl
UmVnaW9uKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEw
MjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogCkBAIC0xMzM0LDEyICsx
MTk0LDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9w
YXF1ZVJlZ2lvbikKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICBsYXllci0+
c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKIAogICAgIC8vIElmIHRoZSBsYXllciBkb2Vzbid0IHBhaW50IG9w
YXF1ZSBjb250ZW50LCB0aGVuIHRoZSB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbiBzaG91bGQg
YmUgZW1wdHkuCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1
ZVBhaW50UmVjdChJbnRSZWN0KCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3Qo
Y29udGVudEJvdW5kcyk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNv
bnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1
ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZp
c2libGVDb250ZW50T3BhcXVlUmVnaW9uKCk7CiAgICAgRVhQRUNUX1RSVUUob3BhcXVlQ29udGVu
dHMuaXNFbXB0eSgpKTsKIApAQCAtMTM1Miw3ICsxMjEyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogICAgIG9wYXF1ZVBhaW50
UmVjdCA9IEludFJlY3QoMTAsIDEwLCA5MCwgMTkwKTsKICAgICBsYXllci0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KG9wYXF1ZVBhaW50UmVjdCk7CiAgICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50Qm91bmRzKTsKLSAgICBsYXllci0+
dXBkYXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudEJvdW5kcywgJm9jY2x1ZGVkLCBtX3N0
YXRzKTsKKyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAg
ICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxl
Q29udGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihv
cGFxdWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpLCBvcGFxdWVDb250ZW50cy5ib3VuZHMoKSk7
CkBAIC0xMzY1LDcgKzEyMjUsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlz
aWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pCiAKICAgICAvLyBJZiB3ZSBwYWludCBhZ2FpbiB3aXRo
b3V0IGludmFsaWRhdGluZywgdGhlIHNhbWUgc3R1ZmYgc2hvdWxkIGJlIG9wYXF1ZS4KICAgICBs
YXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRSZWN0KEludFJl
Y3QoKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3Vu
ZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2Nj
bHVkZWQsIG1fc3RhdHMpOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgb3BhcXVlQ29udGVu
dHMgPSBsYXllci0+dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKTsKICAgICBFWFBFQ1RfRVFf
UkVDVChpbnRlcnNlY3Rpb24ob3BhcXVlUGFpbnRSZWN0LCB2aXNpYmxlQm91bmRzKSwgb3BhcXVl
Q29udGVudHMuYm91bmRzKCkpOwpAQCAtMTM4MCw3ICsxMjQwLDcgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogICAgIC8vIG5vdCBi
ZSBhZmZlY3RlZC4KICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3Bh
cXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChJbnRSZWN0KDAsIDAsIDEsIDEpKTsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudFJlY3QobV9x
dWV1ZSwgY29udGVudEJvdW5kcywgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBsYXllci0+dXBk
YXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsK
ICAgICBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigp
OwogICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihvcGFxdWVQYWludFJlY3QsIHZpc2li
bGVCb3VuZHMpLCBvcGFxdWVDb250ZW50cy5ib3VuZHMoKSk7CkBAIC0xMzk1LDcgKzEyNTUsNyBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdp
b24pCiAgICAgLy8gbm90IGJlIGFmZmVjdGVkLgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMTAsIDEwLCAxLCAxKSk7Ci0gICAgbGF5ZXItPnVw
ZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0
cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAg
IHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+dmlzaWJsZUNv
bnRlbnRPcGFxdWVSZWdpb24oKTsKICAgICBFWFBFQ1RfRVFfUkVDVChpbnRlcnNlY3Rpb24oSW50
UmVjdCgxMCwgMTAwLCA5MCwgMTAwKSwgdmlzaWJsZUJvdW5kcyksIG9wYXF1ZUNvbnRlbnRzLmJv
dW5kcygpKTsKQEAgLTE0MDksOCArMTI2OSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRyaWNzKQogewotICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVyZXI6OkNvbnRlbnRQb29s
KTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJl
ZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGls
ZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2Ns
dXNpb25UcmFja2VyIG9jY2x1ZGVkOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOwogCkBAIC0xNDI4LDEyICsxMjg3LDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwaXhlbHNQYWludGVkTWV0cmljcykKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHko
MSk7CiAKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0
b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3Rl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKIAogICAgIC8vIEludmFsaWRhdGVz
IGFuZCBwYWludHMgdGhlIHdob2xlIGxheWVyLgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRCb3VuZHMpOwotICAgIGxheWVyLT51cGRhdGVDb250
ZW50UmVjdChtX3F1ZXVlLCBjb250ZW50Qm91bmRzLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAg
IGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICB1cGRhdGVU
ZXh0dXJlcygpOwogICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZpc2libGVDb250ZW50T3Bh
cXVlUmVnaW9uKCk7CiAgICAgRVhQRUNUX1RSVUUob3BhcXVlQ29udGVudHMuaXNFbXB0eSgpKTsK
QEAgLTE0NDgsNyArMTMwNyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhl
bHNQYWludGVkTWV0cmljcykKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
c2V0T3BhcXVlUGFpbnRSZWN0KEludFJlY3QoKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250
ZW50UmVjdChJbnRSZWN0KDAsIDAsIDEsIDEpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRl
bnRSZWN0KEludFJlY3QoNTAsIDIwMCwgMTAsIDEwKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZUNvbnRl
bnRSZWN0KG1fcXVldWUsIGNvbnRlbnRCb3VuZHMsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAg
bGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIHVwZGF0ZVRl
eHR1cmVzKCk7CiAgICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+dmlzaWJsZUNvbnRlbnRPcGFx
dWVSZWdpb24oKTsKICAgICBFWFBFQ1RfVFJVRShvcGFxdWVDb250ZW50cy5pc0VtcHR5KCkpOwpA
QCAtMTY2Miw5ICsxNTIxLDcgQEAgcHJpdmF0ZToKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdQYWludCkK
IHsKLSAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdl
cihDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0MDAwMDAwLCA0MDAwMDAwLCBD
Q1JlbmRlcmVyOjpDb250ZW50UG9vbCkpOwotCi0gICAgUmVmUHRyPFVwZGF0ZVRyYWNraW5nVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBVcGRhdGVUcmFja2luZ1RpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIFJlZlB0cjxVcGRhdGVU
cmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgVXBkYXRlVHJh
Y2tpbmdUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogCiAgICAg
SW50UmVjdCBsYXllclJlY3QoMCwgMCwgMzAsIDMxKTsKICAgICBsYXllci0+c2V0UG9zaXRpb24o
bGF5ZXJSZWN0LmxvY2F0aW9uKCkpOwpAQCAtMTY3NywxMCArMTUzNCwxMCBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3RvcnRl
ZER1cmluZ1BhaW50KQogICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGNvbnRlbnRS
ZWN0KTsKIAogICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIG1f
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwogCiAgICAgLy8gVXBkYXRlIHRo
ZSB3aG9sZSB0aWxlLgotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVjdChtX3F1ZXVlLCBjb250
ZW50UmVjdCwgMCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0
YXRzKTsKICAgICBsYXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cmVzZXRQYWludGVkUmVj
dCgpOwogCiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoKSwgbGF5ZXItPnRyYWNraW5n
TGF5ZXJQYWludGVyKCktPnBhaW50ZWRSZWN0KCkpOwpAQCAtMTY5MiwxNiArMTU0OSwxNCBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05v
dERpc3RvcnRlZER1cmluZ1BhaW50KQogCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZW50aXJlIGxh
eWVyIGluIGNvbnRlbnQgc3BhY2UuIFdoZW4gcGFpbnRpbmcsIHRoZSByZWN0IGdpdmVuIHRvIHdl
YmtpdCBzaG91bGQgbWF0Y2ggdGhlIGxheWVyJ3MgYm91bmRzLgogICAgIGxheWVyLT5pbnZhbGlk
YXRlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgIGxheWVyLT51cGRhdGVDb250ZW50UmVj
dChtX3F1ZXVlLCBjb250ZW50UmVjdCwgMCwgbV9zdGF0cyk7CisgICAgbGF5ZXItPnVwZGF0ZSht
X3F1ZXVlLCAwLCBtX3N0YXRzKTsKIAogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShsYXllclJlY3Qs
IGxheWVyLT50cmFja2luZ0xheWVyUGFpbnRlcigpLT5wYWludGVkUmVjdCgpKTsKIH0KIAogVEVT
VF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3RE
aXN0b3J0ZWREdXJpbmdJbnZhbGlkYXRpb24pCiB7Ci0gICAgT3duUHRyPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNDAwMDAwMCwgNDAwMDAwMCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpKTsKLQot
ICAgIFJlZlB0cjxVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgVXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKKyAgICBSZWZQdHI8VXBkYXRlVHJhY2tpbmdUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtKG1fdGV4
dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIEludFJlY3QgbGF5ZXJSZWN0KDAsIDAsIDMwLCAz
MSk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVyUmVjdC5sb2NhdGlvbigpKTsKQEAgLTE3
MTMsMTAgKzE1NjgsMTAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVn
ZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdJbnZhbGkKICAgICBsYXllci0+c2V0
RHJhd2FibGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAKICAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5w
cmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgd2hvbGUgdGlsZS4KLSAgICBsYXllci0+dXBk
YXRlQ29udGVudFJlY3QobV9xdWV1ZSwgY29udGVudFJlY3QsIDAsIG1fc3RhdHMpOworICAgIGxh
eWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgbGF5ZXItPnRyYWNraW5nTGF5
ZXJQYWludGVyKCktPnJlc2V0UGFpbnRlZFJlY3QoKTsKIAogICAgIEVYUEVDVF9JTlRfUkVDVF9F
UShJbnRSZWN0KCksIGxheWVyLT50cmFja2luZ0xheWVyUGFpbnRlcigpLT5wYWludGVkUmVjdCgp
KTsKQEAgLTE3MjgsNyArMTU4Myw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBu
b25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nSW52YWxpCiAKICAgICAv
LyBJbnZhbGlkYXRlIHRoZSBlbnRpcmUgbGF5ZXIgaW4gbGF5ZXIgc3BhY2UuIFdoZW4gcGFpbnRp
bmcsIHRoZSByZWN0IGdpdmVuIHRvIHdlYmtpdCBzaG91bGQgbWF0Y2ggdGhlIGxheWVyJ3MgYm91
bmRzLgogICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0KGxheWVyUmVjdCk7Ci0gICAgbGF5
ZXItPnVwZGF0ZUNvbnRlbnRSZWN0KG1fcXVldWUsIGNvbnRlbnRSZWN0LCAwLCBtX3N0YXRzKTsK
KyAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogCiAgICAgRVhQRUNUX0lO
VF9SRUNUX0VRKGxheWVyUmVjdCwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVyKCktPnBhaW50
ZWRSZWN0KCkpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>