<?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>84803</bug_id>
          
          <creation_ts>2012-04-24 17:01:01 -0700</creation_ts>
          <short_desc>[chromium] damage tracking needs to be more robust to early exits</short_desc>
          <delta_ts>2012-06-12 11:08:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>609268</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-24 17:01:01 -0700</bug_when>
    <thetext>Right now, damage tracking is potentially a sore thumb for functionality that should otherwise be considered &quot;const&quot; that can be invoked any number of times regardless of what is drawn to the backbuffer.  Instead, we should make damage tracking cooperate better, probably doing something like accumulating damage until things are drawn... i.e. similar to the patch in https://bugs.webkit.org/show_bug.cgi?id=80899

Note, this is different than accumulating scissor rects to determine what region to swap, which is bug https://bugs.webkit.org/show_bug.cgi?id=82011 and will probably involve creating a simple &quot;PartialSwapTracker&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638661</commentid>
    <comment_count>1</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-31 13:09:25 -0700</bug_when>
    <thetext>Patch is coming in a moment.

Nat: this is a good opportunity for us to agree on the API for the damage tracker class.  I changed it to what I feel is clean, intuitive, and well designed.  Lets discuss if you would like to see a different API

Enne: this is very similar to the old patch from https://bugs.webkit.org/show_bug.cgi?id=80899 -- however, there is one major important difference.  This patch makes damage accumulate until we know that the damaged areas have actually be drawn.  This has nothing to do with swapBuffers.

This patch: accumulate damage for each surface, until we know all existing damage has been redrawn

Next patch: (https://bugs.webkit.org/show_bug.cgi?id=82011) accumulate redrawn areas of the root surface, until we know that all redrawn stuff has been presented onto the front buffer.  This will involve creating a straightforward PartialSwapTracker class that has a similar public API to damage tracker, and much simpler internals.

Finally, one comment is still relevant from the old bug https://bugs.webkit.org/show_bug.cgi?id=80899, the second half of comment 8 on that bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638662</commentid>
    <comment_count>2</comment_count>
      <attachid>145142</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-31 13:14:00 -0700</bug_when>
    <thetext>Created attachment 145142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639006</commentid>
    <comment_count>3</comment_count>
      <attachid>145142</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-31 23:49:45 -0700</bug_when>
    <thetext>Comment on attachment 145142
Patch

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

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:401
&gt; +    // FIXME THIS TEST SHOWS THAT ACCUMULATING DAMAGE IS DONE INCORRECTLY AT THE MOMENT BECAUSE EXPANDING FILTERS WILL EXPAND TWICE WHEN ACCUMULATING DAMAGE ????
&gt; +    // EXCEPT, WHERE IS IT CALLED TWICE? SOMETHING IS NOT QUITE RIGHT.

Oops, I forgot to remove this comment.  the test works fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639472</commentid>
    <comment_count>4</comment_count>
      <attachid>145332</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-01 09:58:04 -0700</bug_when>
    <thetext>Created attachment 145332
Same patch only removed bad leftover comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640795</commentid>
    <comment_count>5</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-04 13:20:21 -0700</bug_when>
    <thetext>James could you please review this?  Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640838</commentid>
    <comment_count>6</comment_count>
      <attachid>145332</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-04 14:26:08 -0700</bug_when>
    <thetext>Comment on attachment 145332
Same patch only removed bad leftover comment

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.h:50
&gt; +    void notifyDamagedAreaHasBeenDrawn() { m_currentDamageRect = FloatRect(); }

I think a more idiomatic name would be &quot;didDrawDamagedArea&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:451
&gt; +    // Now that we know we really did draw to the back buffer, we can clear the accumulated damage.
&gt; +    // In the current implementation (i.e. global root-level scissor applies to all surfaces), it is
&gt; +    // necessary to clear damage for all surfaces here, not just the root surface.
&gt; +    notifyDamageDrawnForAllSurfaces(rootLayer());

Can we clear the damage on a given RenderSurface when we draw the pass associated with it?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:494
&gt; +    // Recursively clear damage for any existing surface.

It seems a bit weird to walk through layers to get surfaces - we calculate a renderSurfaceLayerList as part of the frame, should we go through that instead (or fold it into the pass iteration as I suggested above)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640848</commentid>
    <comment_count>7</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-04 14:38:29 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:451
&gt; &gt; +    // Now that we know we really did draw to the back buffer, we can clear the accumulated damage.
&gt; &gt; +    // In the current implementation (i.e. global root-level scissor applies to all surfaces), it is
&gt; &gt; +    // necessary to clear damage for all surfaces here, not just the root surface.
&gt; &gt; +    notifyDamageDrawnForAllSurfaces(rootLayer());
&gt; 
&gt; Can we clear the damage on a given RenderSurface when we draw the pass associated with it?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:494
&gt; &gt; +    // Recursively clear damage for any existing surface.
&gt; 
&gt; It seems a bit weird to walk through layers to get surfaces - we calculate a renderSurfaceLayerList as part of the frame, should we go through that instead (or fold it into the pass iteration as I suggested above)?

This should work, except for one issue - Dana, will we still be able to do this if RenderPasses will not have a concept of surfaces?  Of course we could move the CCDamageTracker to the RenderPass if needed, but if that&apos;s what is needed, that would be a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640889</commentid>
    <comment_count>8</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-04 15:16:11 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; It seems a bit weird to walk through layers to get surfaces - we calculate a renderSurfaceLayerList as part of the frame, should we go through that instead (or fold it into the pass iteration as I suggested above)?
&gt; 
&gt; This should work, except for one issue - Dana, will we still be able to do this if RenderPasses will not have a concept of surfaces?  Of course we could move the CCDamageTracker to the RenderPass if needed, but if that&apos;s what is needed, that would be a different patch.

It seems fine to me. This is happening at the layer/surface level (where DamageTracker lives), not at the quad/pass level, so you can use the RSLL here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640890</commentid>
    <comment_count>9</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-04 15:17:16 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Can we clear the damage on a given RenderSurface when we draw the pass associated with it?

Oh, but this one won&apos;t work with ubercompiness, since the pass doesn&apos;t know about the surface. I think using the RenderSurfaceLayerList makes lots of sense though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640948</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-04 16:11:12 -0700</bug_when>
    <thetext>Stepping back a bit, logically we want to track damage until we &quot;use&quot; it - which means either drawing (for a subsurface) or swapping (for the root).  I think we should try to reset the tracker state as close to this point as possible.  In ubercomp world, I think we want to reset the tracker whenever we &quot;draw&quot; the pass into a serialized form for the next layer up to consume.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640951</commentid>
    <comment_count>11</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-04 16:13:54 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Stepping back a bit, logically we want to track damage until we &quot;use&quot; it - which means either drawing (for a subsurface) or swapping (for the root).  I think we should try to reset the tracker state as close to this point as possible.  In ubercomp world, I think we want to reset the tracker whenever we &quot;draw&quot; the pass into a serialized form for the next layer up to consume.

I think everything you said is correct, but just to nip the confusion in the bud:  this patch accumulates damage until we know that damaged areas have been drawn.   Separately we will have a PartialSwapTracker that accumulates the region that needs swapping until we know that area has actually be swapped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640954</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-04 16:14:25 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Stepping back a bit, logically we want to track damage until we &quot;use&quot; it - which means either drawing (for a subsurface) or swapping (for the root).  I think we should try to reset the tracker state as close to this point as possible.  In ubercomp world, I think we want to reset the tracker whenever we &quot;draw&quot; the pass into a serialized form for the next layer up to consume.
&gt; 
&gt; I think everything you said is correct, but just to nip the confusion in the bud:  this patch accumulates damage until we know that damaged areas have been drawn.   Separately we will have a PartialSwapTracker that accumulates the region that needs swapping until we know that area has actually be swapped.

&quot;until we know that damaged areas have been drawn to the back buffer&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640959</commentid>
    <comment_count>13</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-04 16:18:07 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; Stepping back a bit, logically we want to track damage until we &quot;use&quot; it - which means either drawing (for a subsurface) or swapping (for the root).  I think we should try to reset the tracker state as close to this point as possible.  In ubercomp world, I think we want to reset the tracker whenever we &quot;draw&quot; the pass into a serialized form for the next layer up to consume.
&gt; &gt; 
&gt; &gt; I think everything you said is correct, but just to nip the confusion in the bud:  this patch accumulates damage until we know that damaged areas have been drawn.   Separately we will have a PartialSwapTracker that accumulates the region that needs swapping until we know that area has actually be swapped.
&gt; 
&gt; &quot;until we know that damaged areas have been drawn to the back buffer&quot;

Agree with what James said. My intuition is that in ubercomp a nested compositor probably never has a reason to not swap (send its quads), so in practice this distinction probably ends up being used in the root host compositor.

What gets a little fuzzy if we have more render passes in the host/root compositor than we have surfaces. Those other render passes are going to have some state that persists across frames (texture + damage more or less?). This is stuff we stick on the RenderSurface now, but perhaps should consider moving the DamageTracker in the future.. the same we need to move the textures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642654</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-06 11:46:01 -0700</bug_when>
    <thetext>OK so I wanted to just clarify the situation with clearing damage and its relationship with ubercomp.  Here is what I understand, please correct me if its wrong:

Suppose there&apos;s a &quot;child compositor&quot; like tab contents, and a &quot;parent compositor&quot; like the UI.  from the child compositor&apos;s perspective, it does not need to know *anything* at all about where it draws onto, it just draws and swaps the same as always, right?  Then on the chromium side, the swapBuffers call is handled differently knowing that it should pass the tabContents texture to the parent compositor?

So the way we should clear damage is completely unrelated to how ubercomp receives that texture, right?

And finally, on the parent compositor side, when it receives that texture in the form of a layer, its the responsibility of this &quot;ubercomp layer&quot; to understand that the partialSwapRect of the child compositor corresponds to the m_updateRect area of the ubercomp layer, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642660</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-06 11:50:27 -0700</bug_when>
    <thetext>That sounds right to me, where &quot;texture&quot; means &quot;quads&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642665</commentid>
    <comment_count>16</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-06 11:56:22 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; That sounds right to me, where &quot;texture&quot; means &quot;quads&quot;.

Well, let me raise one more point. The &quot;texture&quot; which in this case is a set of render passes, means that the layer may generated more than one RenderPass, and that damage isn&apos;t a single m_updateRect for the layer.

Instead, we&apos;re intending to serialize the damage for each RenderPass, so that this layer&apos;s RenderPasses know their damage.

Then for a single RenderPass, the host compositor has some texture memory for it. When it goes to draw to that memory, it should use the union of all serialized damage rects for the pass, since the last time if draw that memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643233</commentid>
    <comment_count>17</comment_count>
      <attachid>145332</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-06 22:57:05 -0700</bug_when>
    <thetext>Comment on attachment 145332
Same patch only removed bad leftover comment

removing r=?  I&apos;ll try to get a new patch up tomorrow morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644874</commentid>
    <comment_count>18</comment_count>
      <attachid>146617</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-08 11:29:04 -0700</bug_when>
    <thetext>Created attachment 146617
Addressed reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647091</commentid>
    <comment_count>19</comment_count>
      <attachid>146617</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-12 11:07:58 -0700</bug_when>
    <thetext>Comment on attachment 146617
Addressed reviewer comments

Clearing flags on attachment: 146617

Committed r120094: &lt;http://trac.webkit.org/changeset/120094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647094</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-12 11:08:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145142</attachid>
            <date>2012-05-31 13:14:00 -0700</date>
            <delta_ts>2012-06-01 09:58:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84803-20120531131359.patch</filename>
            <type>text/plain</type>
            <size>31510</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI2MTk4YmIzOWEyYjgy
YWNiZDA2NDIyYTJjMTc2ZmYzZDg5NzkxMC4uMjFkZmY0ODhiNDIxZjVmMTQxZGQ2ZmZlMjVhZTI4
NDdmNjI0MmVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA1LTMxICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
TWFrZSBkYW1hZ2UgdHJhY2tpbmcgbW9yZSByb2J1c3QgdG8gZWFybHkgZXhpdHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0ODAzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsIENDRGFtYWdlVHJhY2tl
clRlc3QgdW5pdCB0ZXN0cyB1cGRhdGVkOworICAgICAgICBPbmUgbmV3IHVuaXQgdGVzdCBhZGRl
ZDoKKyAgICAgICAgICAgQ0NEYW1hZ2VUcmFja2VyVGVzdC52ZXJpZnlEYW1hZ2VBY2N1bXVsYXRl
c1VudGlsUmVzZXQKKworICAgICAgICBEYW1hZ2UgdHJhY2tpbmcgaW5oZXJlbnRseSBuZWVkcyB0
byBiZSBhd2FyZSBvZiBhbGwgY2hhbmdlcyB0aGF0CisgICAgICAgIG9jY3VyIGZvciBldmVyeSBm
cmFtZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGFueW9uZSBtb2RpZnlpbmcgZGV0YWlscworICAgICAg
ICBvZiBDQ0xheWVyVHJlZUhvc3RJbXBsIGFuZCB0aGUgZHJhd2luZyBwaGFzZXMgb2YgdGhlIGNv
bXBvc2l0b3IKKyAgICAgICAgbmVlZGVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgZWFybHkgZXhp
dGluZyBvbmNlIGRyYXcgaXMKKyAgICAgICAgaW5pdGlhdGVkLCBvdGhlcndpc2UgcnVubmluZyB0
aGUgcmlzayBvZiBkYW1hZ2UgdHJhY2tpbmcncyBzdGF0ZQorICAgICAgICBnZXR0aW5nIG91dC1v
Zi1zeW5jIGZyb20gYWN0dWFsIGNoYW5nZXMuIFRoaXMgcGF0Y2ggbWFrZXMgdGhlCisgICAgICAg
IGRhbWFnZSB0cmFja2VyIEFQSSBtb3JlIGFzeW5jaHJvbm91cy1saWtlLCBzbyB0aGF0IGRhbWFn
ZSB3aWxsCisgICAgICAgIGNvbnRpbnVlIHRvIGFjY3VtdWxhdGUgdW50aWwgaXQgaXMgZXhwbGlj
aXRseSBub3RpZmllZCB0aGF0CisgICAgICAgIGRhbWFnZWQgYXJlYXMgaGF2ZSBiZWVuIGRyYXdu
LiBUaGlzIHdpbGwgYWxsb3cgbW9yZSBmcmVlZG9tIGluCisgICAgICAgIGRlc2lnbmluZyBhbmQg
cmVzdHJ1Y3R1aW5nIGRyYXdpbmcgY29kZSBpbiB0aGUgY29tcG9zaXRvciwgd2l0aG91dAorICAg
ICAgICB3b3JyeWluZyBhcyBtdWNoIGFib3V0IGRhbWFnZSB0cmFja2luZyBnZXR0aW5nIG91dC1v
Zi1zeW5jLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1h
Z2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6dXBkYXRl
RGFtYWdlVHJhY2tpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNr
ZXI6Om5vdGlmeURhbWFnZWRBcmVhSGFzQmVlbkRyYXduKToKKyAgICAgICAgKENDRGFtYWdlVHJh
Y2tlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpk
cmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om5vdGlm
eURhbWFnZURyYXduRm9yQWxsU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgor
ICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisKIDIwMTItMDUtMzEgIEFtaSBGaXNjaG1h
biAgPGZpc2NobWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXBsYWNlIFdlYk1lZGlhUGxh
eWVyOjpieXRlc0xvYWRlZCgpIHdpdGggYW4gZXhwbGljaXQgZGlkTG9hZGluZ1Byb2dyZXNzKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDA4NmU0YWEyZTc2NDhmMWM0YTkwNDUwZWYw
NjcxMDVjZDg0YTEwMy4uOWM4ZWRiNTIxNTcyOThlNTAxOWNkZjkwYTIwODNiMjNiNWFiYTUwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNS0zMSAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIE1ha2UgZGFtYWdlIHRyYWNraW5nIG1vcmUgcm9idXN0IHRvIGVhcmx5IGV4aXRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDgwMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NEYW1h
Z2VUcmFja2VyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Y2xlYXJEYW1hZ2VGb3JB
bGxTdXJmYWNlcyk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6VEVTVF9GKToKKwogMjAxMi0wNS0zMSAgQW1pIEZpc2NobWFuICA8ZmlzY2htYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJlcGxhY2UgV2ViTWVkaWFQbGF5ZXI6OmJ5dGVzTG9hZGVkKCkg
d2l0aCBhbiBleHBsaWNpdCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdl
VHJhY2tlci5jcHAKaW5kZXggNTY3YmQxZjFmZWEyMDAyZTU0Yjc1NWM3NmVmYTkxZWU1NjU0YWVm
NC4uODhlZDE3OWU1N2VlYTAzOTc0Y2MyOWVmMjE0NTgxOWIwMDcxN2QxNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0RhbWFnZVRyYWNrZXIuY3BwCkBAIC0xNDksMjAgKzE0OSwyNyBAQCB2b2lkIENDRGFtYWdl
VHJhY2tlcjo6dXBkYXRlRGFtYWdlVHJhY2tpbmdTdGF0ZShjb25zdCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgbGF5ZQogICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tU3VyZmFjZU1hc2sgPSB0cmFja0Rh
bWFnZUZyb21TdXJmYWNlTWFzayh0YXJnZXRTdXJmYWNlTWFza0xheWVyKTsKICAgICBGbG9hdFJl
Y3QgZGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMgPSB0cmFja0RhbWFnZUZyb21MZWZ0b3ZlclJlY3Rz
KCk7CiAKKyAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdEZvclRoaXNVcGRhdGU7CisKICAgICBpZiAo
bV9mb3JjZUZ1bGxEYW1hZ2VOZXh0VXBkYXRlIHx8IHRhcmdldFN1cmZhY2VQcm9wZXJ0eUNoYW5n
ZWRPbmx5RnJvbURlc2NlbmRhbnQpIHsKLSAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IHRh
cmdldFN1cmZhY2VDb250ZW50UmVjdDsKKyAgICAgICAgZGFtYWdlUmVjdEZvclRoaXNVcGRhdGUg
PSB0YXJnZXRTdXJmYWNlQ29udGVudFJlY3Q7CiAgICAgICAgIG1fZm9yY2VGdWxsRGFtYWdlTmV4
dFVwZGF0ZSA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBjYW4gd2Ug
Y2xhbXAgdGhpcyBkYW1hZ2UgdG8gdGhlIHN1cmZhY2UncyBjb250ZW50IHJlY3Q/IChhZmZlY3Rz
IHBlcmZvcm1hbmNlLCBidXQgbm90IGNvcnJlY3RuZXNzKQotICAgICAgICBtX2N1cnJlbnREYW1h
Z2VSZWN0ID0gZGFtYWdlRnJvbUFjdGl2ZUxheWVyczsKLSAgICAgICAgbV9jdXJyZW50RGFtYWdl
UmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2spOwotICAgICAgICBtX2N1
cnJlbnREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKTsK
KyAgICAgICAgZGFtYWdlUmVjdEZvclRoaXNVcGRhdGUgPSBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJz
OworICAgICAgICBkYW1hZ2VSZWN0Rm9yVGhpc1VwZGF0ZS51bml0ZUlmTm9uWmVybyhkYW1hZ2VG
cm9tU3VyZmFjZU1hc2spOworICAgICAgICBkYW1hZ2VSZWN0Rm9yVGhpc1VwZGF0ZS51bml0ZUlm
Tm9uWmVybyhkYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk7CiAKICAgICAgICAgaWYgKGZpbHRlcnMu
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgICAgICBleHBhbmRSZWN0V2l0aEZp
bHRlcnMobV9jdXJyZW50RGFtYWdlUmVjdCwgZmlsdGVycyk7CisgICAgICAgICAgICBleHBhbmRS
ZWN0V2l0aEZpbHRlcnMoZGFtYWdlUmVjdEZvclRoaXNVcGRhdGUsIGZpbHRlcnMpOwogICAgIH0K
IAotICAgIC8vIFRoZSBuZXh0IGhpc3RvcnkgbWFwIGJlY29tZXMgdGhlIGN1cnJlbnQgbWFwIGZv
ciB0aGUgbmV4dCBmcmFtZS4KKyAgICAvLyBEYW1hZ2UgYWNjdW11bGF0ZXMgdW50aWwgd2UgYXJl
IG5vdGlmaWVkIHRoYXQgd2UgYWN0dWFsbHkgZGlkIGRyYXcgb24gdGhhdCBmcmFtZS4KKyAgICBt
X2N1cnJlbnREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZVJlY3RGb3JUaGlzVXBkYXRl
KTsKKworICAgIC8vIFRoZSBuZXh0IGhpc3RvcnkgbWFwIGJlY29tZXMgdGhlIGN1cnJlbnQgbWFw
IGZvciB0aGUgbmV4dCBmcmFtZS4gTm90ZSB0aGlzIG11c3QKKyAgICAvLyBoYXBwZW4gZXZlcnkg
ZnJhbWUgdG8gY29ycmVjdGx5IHRyYWNrIGNoYW5nZXMsIGV2ZW4gaWYgZGFtYWdlIGFjY3VtdWxh
dGVzIG92ZXIKKyAgICAvLyBtdWx0aXBsZSBmcmFtZXMgYmVmb3JlIGFjdHVhbGx5IGJlaW5nIGRy
YXduLgogICAgIHN3YXAobV9jdXJyZW50UmVjdEhpc3RvcnksIG1fbmV4dFJlY3RIaXN0b3J5KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaAppbmRleCBmYjgwNTFhNGMxZjBhNDBjMzhk
YjRkMmRlNzk0OTVkZGMzYzFjZGE2Li41MzQ3OTgzODY0NzFmMDFmN2Y4Mzk3ZGIwZjg1NDFlZmI0
MWY1YWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaApAQCAtNDcsOCArNDcsMTAgQEAg
cHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7
CiAgICAgfkNDRGFtYWdlVHJhY2tlcigpOwogCisgICAgdm9pZCBub3RpZnlEYW1hZ2VkQXJlYUhh
c0JlZW5EcmF3bigpIHsgbV9jdXJyZW50RGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOyB9CiAgICAg
dm9pZCBmb3JjZUZ1bGxEYW1hZ2VOZXh0VXBkYXRlKCkgeyBtX2ZvcmNlRnVsbERhbWFnZU5leHRV
cGRhdGUgPSB0cnVlOyB9CiAgICAgdm9pZCB1cGRhdGVEYW1hZ2VUcmFja2luZ1N0YXRlKGNvbnN0
IFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJ
RCwgYm9vbCB0YXJnZXRTdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50LCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlQ29udGVudFJlY3QsIENDTGF5ZXJJbXBsKiB0YXJn
ZXRTdXJmYWNlTWFza0xheWVyLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmKTsK
KwogICAgIGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudERhbWFnZVJlY3QoKSB7IHJldHVybiBtX2N1
cnJlbnREYW1hZ2VSZWN0OyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCmluZGV4IDkxMzM2YTc3NjhkM2RkNjIxMWIwOTg0ODQ5YzYyYzIzYTRlZDUz
NjAuLmQyOGQwMDhlY2U5NWNhYWVjZmM4OWVjZmYzOGU0ODFmYWIyMjQxYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00NDMsNiArNDQzLDExIEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQog
CiAgICAgKyttX2ZyYW1lTnVtYmVyOwogCisgICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSByZWFs
bHkgZGlkIGRyYXcgdG8gdGhlIGJhY2sgYnVmZmVyLCB3ZSBjYW4gY2xlYXIgdGhlIGFjY3VtdWxh
dGVkIGRhbWFnZS4KKyAgICAvLyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAoaS5lLiBn
bG9iYWwgcm9vdC1sZXZlbCBzY2lzc29yIGFwcGxpZXMgdG8gYWxsIHN1cmZhY2VzKSwgaXQgaXMK
KyAgICAvLyBuZWNlc3NhcnkgdG8gY2xlYXIgZGFtYWdlIGZvciBhbGwgc3VyZmFjZXMgaGVyZSwg
bm90IGp1c3QgdGhlIHJvb3Qgc3VyZmFjZS4KKyAgICBub3RpZnlEYW1hZ2VEcmF3bkZvckFsbFN1
cmZhY2VzKHJvb3RMYXllcigpKTsKKwogICAgIC8vIFRoZSBuZXh0IGZyYW1lIHNob3VsZCBzdGFy
dCBieSBhc3N1bWluZyBub3RoaW5nIGhhcyBjaGFuZ2VkLCBhbmQgY2hhbmdlcyBhcmUgbm90ZWQg
YXMgdGhleSBvY2N1ci4KICAgICBtX3Jvb3RMYXllckltcGwtPnJlc2V0QWxsQ2hhbmdlVHJhY2tp
bmdGb3JTdWJ0cmVlKCk7CiB9CkBAIC00NzksNiArNDg0LDE2IEBAIFRleHR1cmVBbGxvY2F0b3Iq
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlciA/IG1fbGF5ZXJSZW5kZXJlci0+Y29udGVudHNUZXh0
dXJlQWxsb2NhdG9yKCkgOiAwOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6Om5vdGlm
eURhbWFnZURyYXduRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIGlm
IChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPm5vdGlmeURhbWFnZWRBcmVhSGFzQmVlbkRyYXduKCk7CisKKyAg
ICAvLyBSZWN1cnNpdmVseSBjbGVhciBkYW1hZ2UgZm9yIGFueSBleGlzdGluZyBzdXJmYWNlLgor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kp
CisgICAgICAgIG5vdGlmeURhbWFnZURyYXduRm9yQWxsU3VyZmFjZXMobGF5ZXItPmNoaWxkcmVu
KClbaV0uZ2V0KCkpOworfQorCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN3YXBCdWZmZXJz
KCkKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaAppbmRleCBmOGI3NjMxNDA0ZDdjMjM4MzExN2M1ODZhZmRiZmE0Y2EwYzMy
MGIwLi4yZWIyYjgwOTI5YWI1NmQwNzMzOGFlM2VjMTEzYTgyY2YyMzU1MDM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xOTcsNiArMTk3LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZv
aWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxs
U3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lkIG5vdGlmeURhbWFnZURyYXduRm9yQWxs
U3VyZmFjZXMoQ0NMYXllckltcGwqKTsKIAogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGZy
YW1lIHNob3VsZCBub3QgYmUgZGlzcGxheWVkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZAogICAgIC8v
IG9ubHkgYmUgY2FsbGVkIGZyb20gcHJlcGFyZVRvRHJhdywgYXMgZGlkRHJhd0FsbExheWVycyBt
dXN0IGJlIGNhbGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0RhbWFnZVRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NE
YW1hZ2VUcmFja2VyVGVzdC5jcHAKaW5kZXggYmJlYTk3MWRkNWE0ZWZlNjdkMzM2MTYxYzlhMGRm
YjcxNWFkN2FiNy4uYzk4Yjg5YjliOWJmNTgxNGQ0OTNlMzZkZGI0Mzc1MzM1ZGMzOWMwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRl
c3QuY3BwCkBAIC02MSw2ICs2MSwxNiBAQCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxDQ0xheQogICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHJvb3QsIHJvb3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CiB9CiAKK3ZvaWQgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCog
bGF5ZXIpCit7CisgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIGxheWVy
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+bm90aWZ5RGFtYWdlZEFyZWFIYXNC
ZWVuRHJhd24oKTsKKworICAgIC8vIFJlY3Vyc2l2ZWx5IGNsZWFyIGRhbWFnZSBmb3IgYW55IGV4
aXN0aW5nIHN1cmZhY2UuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhsYXll
ci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKIHZvaWQgZW11bGF0ZURyYXdpbmdPbmVGcmFt
ZShDQ0xheWVySW1wbCogcm9vdCkKIHsKICAgICAvLyBUaGlzIGVtdWxhdGVzIG9ubHkgdGhlIHN0
ZXBzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRlc3RpbmcgdGhlIGRhbWFnZSB0cmFja2VyOgpAQCAt
MjIxLDYgKzIzMSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VG
b3JVcGRhdGVSZWN0cykKIAogICAgIC8vIENBU0UgMTogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qg
c2hvdWxkIGNhdXNlIHRoZSBjb3JyZXNwb25kaW5nIGRhbWFnZSB0byB0aGUgc3VyZmFjZS4KICAg
ICAvLworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hp
bGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLCAxMSwgMTIsIDEzKSk7CiAgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIApAQCAtMjMwLDYgKzI0MSw3IEBAIFRFU1Rf
RihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykKIAogICAg
IC8vIENBU0UgMjogVGhlIHNhbWUgdXBkYXRlIHJlY3QgdHdpY2UgaW4gYSByb3cgc3RpbGwgcHJv
ZHVjZXMgdGhlIHNhbWUgZGFtYWdlLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJm
YWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAs
IDExLCAxMiwgMTMpKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwog
ICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CkBAIC0yMzcsNiArMjQ5LDcgQEAgVEVTVF9GKENDRGFt
YWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclVwZGF0ZVJlY3RzKQogCiAgICAgLy8gQ0FT
RSAzOiBTZXR0aW5nIGEgZGlmZmVyZW50IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSBkYW1hZ2Ug
b24gdGhlIG5ldyB1cGRhdGUgcmVnaW9uLCBidXQgbm8gYWRkaXRpb25hbCBleHBvc2VkIG9sZCBy
ZWdpb24uCiAgICAgLy8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkp
OwogICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgyMCwgMjUsIDEsIDIpKTsKICAg
ICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCkBAIC0yNTIsNiArMjY1LDcg
QEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclByb3BlcnR5Q2hh
bmdlcykKIAogICAgIC8vIENBU0UgMTogVGhlIGxheWVyJ3MgcHJvcGVydHkgY2hhbmdlZCBmbGFn
IHRha2VzIHByaW9yaXR5IG92ZXIgdXBkYXRlIHJlY3QuCiAgICAgLy8KKyAgICBjbGVhckRhbWFn
ZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZs
b2F0UmVjdCgxMCwgMTEsIDEyLCAxMykpOwogICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNSk7CiAg
ICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKQEAgLTI3MCwxMCArMjg0LDEy
IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JQcm9wZXJ0eUNo
YW5nZXMpCiAgICAgLy8gICAgICAgICBub3QganVzdCB0aGUgdXBkYXRlUmVjdC4KIAogICAgIC8v
IEN5Y2xlIG9uZSBmcmFtZSBvZiBubyBjaGFuZ2UsIGp1c3QgdG8gc2FuaXR5IGNoZWNrIHRoYXQg
dGhlIG5leHQgcmVjdCBpcyBub3QgYmVjYXVzZSBvZiB0aGUgb2xkIGRhbWFnZSBzdGF0ZS4KKyAg
ICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUocm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCkuaXNFbXB0eSgpKTsK
IAogICAgIC8vIFRoZW4sIHRlc3QgdGhlIGFjdHVhbCBsYXllciBtb3ZlbWVudC4KKyAgICBjbGVh
ckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KDIwMCwgMjMwKSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKIApAQCAtMjk3LDYgKzMxMyw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlEYW1hZ2VGb3JUcmFuc2Zvcm1lZExheWVyKQogICAgIC8vIE5vdGUgY2FyZWZ1bGx5
LCB0aGUgYW5jaG9yIGlzIGFjdHVhbGx5IHBhcnQgb2YgbGF5ZXItPnBvc2l0aW9uKCkuIEJ5IHNl
dHRpbmcgYW5jaG9yCiAgICAgLy8gdG8gKDAuNSwgMC41KSwgdGhlIGxheWVyJ3MgcG9zaXRpb24g
KDEwMCwgMTAwKSBub3cgcmVmZXJzIHRvIHRoZSBjZW50ZXIgb2YgdGhlCiAgICAgLy8gbGF5ZXIs
IG5vdCB0aGUgY29ybmVyLiBUaGlzIG1lYW5zIHRoZSBsYXllciBoYXMgYWN0dWFsbHkgY2hhbmdl
ZCBwb3NpdGlvbi4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwog
ICAgIGNoaWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNSwgMC41KSk7CiAgICAgZW11
bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIApAQCAtMzA2LDYgKzMyMyw3IEBAIFRF
U1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JUcmFuc2Zvcm1lZExheWVy
KQogCiAgICAgLy8gV2l0aCB0aGUgYW5jaG9yIG9uIHRoZSBsYXllcidzIGNlbnRlciwgbm93IHdl
IGNhbiB0ZXN0IHRoZSByb3RhdGlvbiBtb3JlCiAgICAgLy8gaW50dWl0aXZlbHksIHNpbmNlIGl0
IGFwcGxpZXMgYWJvdXQgdGhlIGxheWVyJ3MgYW5jaG9yLgorICAgIGNsZWFyRGFtYWdlRm9yQWxs
U3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQtPnNldFRyYW5zZm9ybShyb3RhdGlvbik7
CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIApAQCAtMzUyLDYgKzM3
MCw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JQZXJzcGVj
dGl2ZUNsaXBwZWRMYXllcikKICAgICBFWFBFQ1RfVFJVRShjbGlwcGVkKTsKIAogICAgIC8vIERh
bWFnZSB0aGUgY2hpbGQgd2l0aG91dCBtb3ZpbmcgaXQuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxT
dXJmYWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOwogICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTM3MSwxMiArMzkwLDE2IEBA
IFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCbHVycmVkU3VyZmFj
ZSkKICAgICBmaWx0ZXJzLmFwcGVuZChXZWJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZUJsdXJGaWx0
ZXIoNSkpOwogICAgIGludCBvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91
dHNldExlZnQ7CiAgICAgZmlsdGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0UmlnaHQs
IG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7Ci0gICAgcm9vdC0+c2V0RmlsdGVycyhmaWx0ZXJz
KTsKIAogICAgIC8vIFNldHRpbmcgdGhlIGZpbHRlciB3aWxsIGRhbWFnZSB0aGUgd2hvbGUgc3Vy
ZmFjZS4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOworICAgIHJv
b3QtPnNldEZpbHRlcnMoZmlsdGVycyk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKIAogICAgIC8vIFNldHRpbmcgdGhlIHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0
aGUgY29ycmVzcG9uZGluZyBkYW1hZ2UgdG8gdGhlIHN1cmZhY2UsIGJsdXJyZWQgYmFzZWQgb24g
dGhlIHNpemUgb2YgdGhlIGJsdXIgZmlsdGVyLgorICAgIC8vIEZJWE1FIFRISVMgVEVTVCBTSE9X
UyBUSEFUIEFDQ1VNVUxBVElORyBEQU1BR0UgSVMgRE9ORSBJTkNPUlJFQ1RMWSBBVCBUSEUgTU9N
RU5UIEJFQ0FVU0UgRVhQQU5ESU5HIEZJTFRFUlMgV0lMTCBFWFBBTkQgVFdJQ0UgV0hFTiBBQ0NV
TVVMQVRJTkcgREFNQUdFID8/Pz8KKyAgICAvLyBFWENFUFQsIFdIRVJFIElTIElUIENBTExFRCBU
V0lDRT8gU09NRVRISU5HIElTIE5PVCBRVUlURSBSSUdIVC4KKyAgICBjbGVhckRhbWFnZUZvckFs
bFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVj
dCgxMCwgMTEsIDEyLCAxMykpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CiAKQEAgLTQwMSwxNiArNDI0LDE3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2
ZXJpZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkKQogICAgIGZpbHRlcnMuYXBwZW5k
KFdlYkZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlQmx1ckZpbHRlcigyKSk7CiAgICAgaW50IG91dHNl
dFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdDsKICAgICBmaWx0ZXJz
LmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRM
ZWZ0KTsKLSAgICBjaGlsZDEtPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOwogCiAgICAg
Ly8gU2V0dGluZyB0aGUgZmlsdGVyIHdpbGwgZGFtYWdlIHRoZSB3aG9sZSBzdXJmYWNlLgorICAg
IGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CisgICAgY2hpbGQxLT5zZXRC
YWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOwogCiAgICAgLy8gQ0FTRSAxOiBTZXR0aW5nIHRoZSB1cGRhdGUgcmVjdCBzaG91
bGQgY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZGFtYWdlIHRvCiAgICAgLy8gdGhlIHN1cmZhY2Us
IGJsdXJyZWQgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNoaWxkJ3MgYmFja2dyb3VuZCBibHVy
CiAgICAgLy8gZmlsdGVyLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQo
KSk7CiAgICAgcm9vdC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMjk3LCAyOTcsIDIsIDIpKTsK
LQogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAgICBGbG9hdFJl
Y3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTQyNSw4ICs0NDksOCBAQCBURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQmFja2dyb3VuZEJsdXJyZWRDaGlsZCkKICAg
ICAvLyB0aGUgc3VyZmFjZSwgYmx1cnJlZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgY2hpbGQn
cyBiYWNrZ3JvdW5kIGJsdXIKICAgICAvLyBmaWx0ZXIuIFNpbmNlIHRoZSBkYW1hZ2UgZXh0ZW5k
cyB0byB0aGUgcmlnaHQvYm90dG9tIG91dHNpZGUgb2YgdGhlCiAgICAgLy8gYmx1cnJlZCBsYXll
ciwgb25seSB0aGUgbGVmdC90b3Agc2hvdWxkIGVuZCB1cCBleHBhbmRlZC4KKyAgICBjbGVhckRh
bWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHJvb3QtPnNldFVwZGF0ZVJlY3Qo
RmxvYXRSZWN0KDI5NywgMjk3LCAzMCwgMzApKTsKLQogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CiAKICAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNDQwLDggKzQ2
NCw4IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCYWNrZ3Jv
dW5kQmx1cnJlZENoaWxkKQogCiAgICAgLy8gQ0FTRSAzOiBTZXR0aW5nIHRoaXMgdXBkYXRlIHJl
Y3Qgb3V0c2lkZSB0aGUgYmx1cnJlZCBjb250ZW50Qm91bmRzIG9mIHRoZSBibHVycmVkCiAgICAg
Ly8gY2hpbGQxIHdpbGwgbm90IGNhdXNlIGl0IHRvIGJlIGV4cGFuZGVkLgorICAgIGNsZWFyRGFt
YWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgcm9vdC0+c2V0VXBkYXRlUmVjdChG
bG9hdFJlY3QoMzAsIDMwLCAyLCAyKSk7Ci0KICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOwogCiAgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCkt
PmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTQ1Miw4ICs0NzYsOCBA
QCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQmFja2dyb3VuZEJs
dXJyZWRDaGlsZCkKIAogICAgIC8vIENBU0UgNDogU2V0dGluZyB0aGlzIHVwZGF0ZSByZWN0IGlu
c2lkZSB0aGUgYmx1cnJlZCBjb250ZW50Qm91bmRzIGJ1dCBvdXRzaWRlIHRoZQogICAgIC8vIG9y
aWdpbmFsIGNvbnRlbnRCb3VuZHMgb2YgdGhlIGJsdXJyZWQgY2hpbGQxIHdpbGwgY2F1c2UgaXQg
dG8gYmUgZXhwYW5kZWQuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgp
KTsKICAgICByb290LT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCg5OSwgOTksIDEsIDEpKTsKLQog
ICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAgICByb290RGFtYWdl
UmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOwpAQCAtNDY3LDggKzQ5MSw4IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkKQogCiAgICAgLy8gQ0FTRSA1
OiBTZXR0aW5nIHRoZSB1cGRhdGUgcmVjdCBvbiBjaGlsZDIsIHdoaWNoIGlzIGFib3ZlIGNoaWxk
MSwgd2lsbAogICAgIC8vIG5vdCBnZXQgYmx1cnJlZCBieSBjaGlsZDEsIHNvIGl0IGRvZXMgbm90
IG5lZWQgdG8gZ2V0IGV4cGFuZGVkLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9v
dC5nZXQoKSk7CiAgICAgY2hpbGQyLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAx
KSk7Ci0KICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCiAgICAgcm9v
dERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKQEAgLTQ3OCw4ICs1MDIsOCBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFj
a2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQmFja2dyb3VuZEJsdXJyZWRDaGlsZCkKIAogICAgIC8v
IENBU0UgNjogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgb24gY2hpbGQxIHdpbGwgYWxzbyBibHVy
IHRoZSBkYW1hZ2UsIHNvCiAgICAgLy8gdGhhdCBhbnkgcGl4ZWxzIG5lZWRlZCBmb3IgdGhlIGJs
dXIgYXJlIHJlZHJhd24gaW4gdGhlIGN1cnJlbnQgZnJhbWUuCisgICAgY2xlYXJEYW1hZ2VGb3JB
bGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZDEtPnNldFVwZGF0ZVJlY3QoRmxvYXRS
ZWN0KDAsIDAsIDEsIDEpKTsKLQogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CiAKICAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNDk1LDYgKzUxOSw5IEBAIFRFU1Rf
RihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ0xh
eWVyKQogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRy
ZWVXaXRoT25lU3VyZmFjZSgpOwogICAgIENDTGF5ZXJJbXBsKiBjaGlsZDEgPSByb290LT5jaGls
ZHJlbigpWzBdLmdldCgpOwogCisgICAgLy8gQ0FTRSAxOiBBZGRpbmcgYSBuZXcgbGF5ZXIgc2hv
dWxkIGNhdXNlIHRoZSBhcHByb3ByaWF0ZSBkYW1hZ2UuCisgICAgLy8KKyAgICBjbGVhckRhbWFn
ZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHsKICAgICAgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOwogICAgICAgICBjaGlsZDIt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAwLCAzODApKTsKQEAgLTUwMyw5ICs1MzAsNiBAQCBU
RVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVtb3Zp
bmdMYXllcikKICAgICAgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAgICAgICAg
IHJvb3QtPmFkZENoaWxkKGNoaWxkMi5yZWxlYXNlKCkpOwogICAgIH0KLQotICAgIC8vIENBU0Ug
MTogQWRkaW5nIGEgbmV3IGxheWVyIHNob3VsZCBjYXVzZSB0aGUgYXBwcm9wcmlhdGUgZGFtYWdl
LgotICAgIC8vCiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIAogICAg
IC8vIFNhbml0eSBjaGVjayAtIGFsbCAzIGxheWVycyBzaG91bGQgYmUgb24gdGhlIHNhbWUgcmVu
ZGVyIHN1cmZhY2U7IHJlbmRlciBzdXJmYWNlcyBhcmUgdGVzdGVkIGVsc2V3aGVyZS4KQEAgLTUx
OCw2ICs1NDIsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9y
QWRkaW5nQW5kUmVtb3ZpbmdMYXllcikKICAgICAvLyAgICAgICAgIGxhc3QgdXBkYXRlIHJlY3Qu
CiAKICAgICAvLyBBZHZhbmNlIG9uZSBmcmFtZSB3aXRob3V0IGRhbWFnZSBzbyB0aGF0IHdlIGtu
b3cgdGhlIGRhbWFnZSByZWN0IGlzIG5vdCBsZWZ0b3ZlciBmcm9tIHRoZSBwcmV2aW91cyBjYXNl
LgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShyb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKS5pc0VtcHR5
KCkpOwogCkBAIC01MzUsNiArNTYwLDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZl
cmlmeURhbWFnZUZvck5ld1VuY2hhbmdlZExheWVyKQogCiAgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CiAKKyAgICBj
bGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHsKICAgICAgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOwogICAgICAg
ICBjaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAwLCAzODApKTsKQEAgLTU0OCw3ICs1
NzQsNiBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTmV3VW5j
aGFuZ2VkTGF5ZXIpCiAgICAgICAgIEFTU0VSVF9UUlVFKGNoaWxkMi0+dXBkYXRlUmVjdCgpLmlz
RW1wdHkoKSk7CiAgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMi5yZWxlYXNlKCkpOwogICAg
IH0KLQogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAgICAvLyBT
YW5pdHkgY2hlY2sgLSBhbGwgMyBsYXllcnMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIHJlbmRlciBz
dXJmYWNlOyByZW5kZXIgc3VyZmFjZXMgYXJlIHRlc3RlZCBlbHNld2hlcmUuCkBAIC01NjMsNiAr
NTg4LDggQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvck11bHRp
cGxlTGF5ZXJzKQogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVw
VGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOwogICAgIENDTGF5ZXJJbXBsKiBjaGlsZDEgPSByb290
LT5jaGlsZHJlbigpWzBdLmdldCgpOwogCisgICAgLy8gSW4gdGhpcyB0ZXN0IHdlIGRvbid0IHdh
bnQgdGhlIGFib3ZlIHRyZWUgbWFuaXB1bGF0aW9uIHRvIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0
aGUgc2FtZSBmcmFtZS4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkp
OwogICAgIHsKICAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDMpOwogICAgICAgICBjaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAw
LCAzODApKTsKQEAgLTU3MiwxMyArNTk5LDEyIEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlEYW1hZ2VGb3JNdWx0aXBsZUxheWVycykKICAgICAgICAgcm9vdC0+YWRkQ2hpbGQo
Y2hpbGQyLnJlbGVhc2UoKSk7CiAgICAgfQogICAgIENDTGF5ZXJJbXBsKiBjaGlsZDIgPSByb290
LT5jaGlsZHJlbigpWzFdLmdldCgpOwotCi0gICAgLy8gSW4gdGhpcyB0ZXN0IHdlIGRvbid0IHdh
bnQgdGhlIGFib3ZlIHRyZWUgbWFuaXB1bGF0aW9uIHRvIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0
aGUgc2FtZSBmcmFtZS4KICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwog
CiAgICAgLy8gRGFtYWdpbmcgdHdvIGxheWVycyBzaW11bHRhbmVvdXNseSBzaG91bGQgY2F1c2Ug
Y29tYmluZWQgZGFtYWdlLgogICAgIC8vIC0gY2hpbGQxIHVwZGF0ZSByZWN0IGluIHN1cmZhY2Ug
c3BhY2U6IEZsb2F0UmVjdCgxMDAsIDEwMCwgMSwgMik7CiAgICAgLy8gLSBjaGlsZDIgdXBkYXRl
IHJlY3QgaW4gc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDQwMCwgMzgwLCAzLCA0KTsKKyAgICBj
bGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkMS0+c2V0VXBk
YXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMikpOwogICAgIGNoaWxkMi0+c2V0VXBkYXRlUmVj
dChGbG9hdFJlY3QoMCwgMCwgMywgNCkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CkBAIC01OTcsNiArNjIzLDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3Qs
IHZlcmlmeURhbWFnZUZvck5lc3RlZFN1cmZhY2VzKQogCiAgICAgLy8gQ0FTRSAxOiBEYW1hZ2Ug
dG8gYSBkZXNjZW5kYW50IHN1cmZhY2Ugc2hvdWxkIHByb3BhZ2F0ZSBwcm9wZXJseSB0byBhbmNl
c3RvciBzdXJmYWNlLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290
LmdldCgpKTsKICAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOwogICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQx
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsK
QEAgLTYwNyw2ICs2MzQsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFt
YWdlRm9yTmVzdGVkU3VyZmFjZXMpCiAgICAgLy8gQ0FTRSAyOiBTYW1lIGFzIHByZXZpb3VzIGNh
c2UsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgZGFtYWdlIGVsc2V3aGVyZSB0aGF0IHNob3VsZCBiZSBw
cm9wZXJseSB1bmlvbmVkLgogICAgIC8vIC0gY2hpbGQxIHN1cmZhY2UgZGFtYWdlIGluIHJvb3Qg
c3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDMwMCwgMzAwLCA2LCA4KTsKICAgICAvLyAtIGNoaWxk
MiBkYW1hZ2UgaW4gcm9vdCBzdXJmYWNlIHNwYWNlOiBGbG9hdFJlY3QoMTEsIDExLCAxOCwgMTgp
OworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgZ3JhbmRD
aGlsZDEtPnNldE9wYWNpdHkoMC43Zik7CiAgICAgY2hpbGQyLT5zZXRPcGFjaXR5KDAuN2YpOwog
ICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CkBAIC02MzEsNiArNjU5LDcg
QEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclN1cmZhY2VDaGFu
Z2VGcm9tRGVzY2VuZGFudExheWVyKQogICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CiAg
ICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OwogCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJm
YWNlcyhyb290LmdldCgpKTsKICAgICBncmFuZENoaWxkMS0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dCgxOTUsIDIwNSkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAg
ICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNr
ZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTY2Miw2ICs2OTEsNyBAQCBURVNUX0YoQ0NE
YW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yU3VyZmFjZUNoYW5nZUZyb21BbmNlc3Rv
ckxheWVyKQogICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7CiAgICAgRmxvYXRSZWN0IHJv
b3REYW1hZ2VSZWN0OwogCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgp
KTsKICAgICBjaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNTAsIDUwKSk7CiAgICAgZW11
bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBjaGlsZERhbWFnZVJlY3QgPSBj
aGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVj
dCgpOwpAQCAtNjg1LDYgKzcxNSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ1JlbmRlclN1cmZhY2VzKQogCiAgICAgLy8gQ0FT
RSAxOiBJZiBhIGRlc2NlbmRhbnQgc3VyZmFjZSBkaXNhcHBlYXJzLCBpdHMgZW50aXJlIG9sZCBh
cmVhIGJlY29tZXMgZXhwb3NlZC4KICAgICAvLworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFj
ZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQxLT5zZXRPcGFjaXR5KDEpOwogICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTY5OCwxMSArNzI5LDEzIEBAIFRFU1Rf
RihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ1Jl
bmRlclN1cmZhY2VzKQogICAgIC8vIENBU0UgMjogSWYgYSBkZXNjZW5kYW50IHN1cmZhY2UgYXBw
ZWFycywgaXRzIGVudGlyZSBvbGQgYXJlYSBiZWNvbWVzIGV4cG9zZWQuCiAKICAgICAvLyBDeWNs
ZSBvbmUgZnJhbWUgb2Ygbm8gY2hhbmdlLCBqdXN0IHRvIHNhbml0eSBjaGVjayB0aGF0IHRoZSBu
ZXh0IHJlY3QgaXMgbm90IGJlY2F1c2Ugb2YgdGhlIG9sZCBkYW1hZ2Ugc3RhdGUuCisgICAgY2xl
YXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CiAgICAgRVhQRUNU
X1RSVUUocm9vdERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKIAogICAgIC8vIFRoZW4gY2hhbmdlIHRo
ZSB0cmVlIHNvIHRoYXQgdGhlIHJlbmRlciBzdXJmYWNlIGlzIGFkZGVkIGJhY2suCisgICAgY2xl
YXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZDEtPnNldE9wYWNp
dHkoMC41KTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCkBAIC03
MjYsNiArNzU5LDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeU5vRGFtYWdl
V2hlbk5vdGhpbmdDaGFuZ2VkKQogCiAgICAgLy8gQ0FTRSAxOiBJZiBub3RoaW5nIGNoYW5nZXMs
IHRoZSBkYW1hZ2UgcmVjdCBzaG91bGQgYmUgZW1wdHkuCiAgICAgLy8KKyAgICBjbGVhckRhbWFn
ZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUo
cm9vdC5nZXQoKSk7CiAgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKICAgICByb290RGFtYWdl
UmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOwpAQCAtNzM0LDYgKzc2OCw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlOb0RhbWFnZVdoZW5Ob3RoaW5nQ2hhbmdlZCkKIAogICAgIC8vIENBU0UgMjogSWYg
bm90aGluZyBjaGFuZ2VzIHR3aWNlIGluIGEgcm93LCB0aGUgZGFtYWdlIHJlY3Qgc2hvdWxkIHN0
aWxsIGJlIGVtcHR5LgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290
LmdldCgpKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIGNo
aWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCkt
PmN1cnJlbnREYW1hZ2VSZWN0KCk7CiAgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTc1MCw2
ICs3ODUsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5Tm9EYW1hZ2VGb3JV
cGRhdGVSZWN0VGhhdERvZXNOb3REcmF3Q29udGVudCkKIAogICAgIC8vIEluIG91ciBzcGVjaWZp
YyB0cmVlLCB0aGUgdXBkYXRlIHJlY3Qgb2YgY2hpbGQxIHNob3VsZCBub3QgY2F1c2UgYW55IGRh
bWFnZSB0byBhbnkKICAgICAvLyBzdXJmYWNlIGJlY2F1c2UgaXQgZG9lcyBub3QgYWN0dWFsbHkg
ZHJhdyBjb250ZW50LgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7
CiAgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAyKSk7CiAgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBjaGlsZERhbWFnZVJlY3Qg
PSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdl
UmVjdCgpOwpAQCAtNzg1LDYgKzgyMSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2
ZXJpZnlEYW1hZ2VGb3JSZXBsaWNhKQogCiAgICAgLy8gQ0FTRSAxOiBhZGRpbmcgYSByZWZsZWN0
aW9uIGFib3V0IHRoZSBsZWZ0IGVkZ2Ugb2YgZ3JhbmRDaGlsZDEuCiAgICAgLy8KKyAgICBjbGVh
ckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHsKICAgICAgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDcp
OwogICAgICAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQ6Onpl
cm8oKSk7CkBAIC04MDgsNiArODQ1LDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZl
cmlmeURhbWFnZUZvclJlcGxpY2EpCiAKICAgICAvLyBDQVNFIDI6IG1vdmluZyB0aGUgZGVzY2Vu
ZGFudCBzdXJmYWNlIHNob3VsZCBjYXVzZSBib3RoIHRoZSBvcmlnaW5hbCBhbmQgcmVmbGVjdGVk
CiAgICAgLy8gICAgICAgICBhcmVhcyB0byBiZSBkYW1hZ2VkIG9uIHRoZSB0YXJnZXQuCisgICAg
Y2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBJbnRSZWN0IG9sZENv
bnRlbnRSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCk7CiAgICAg
Z3JhbmRDaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTk1LjAsIDIwNS4wKSk7CiAgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKQEAgLTgyNyw2ICs4NjUsNyBAQCBU
RVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYSkKIAogICAg
IC8vIENBU0UgMzogcmVtb3ZpbmcgdGhlIHJlZmxlY3Rpb24gc2hvdWxkIGNhdXNlIHRoZSBlbnRp
cmUgcmVnaW9uIGluY2x1ZGluZyByZWZsZWN0aW9uCiAgICAgLy8gICAgICAgICB0byBkYW1hZ2Ug
dGhlIHRhcmdldCBzdXJmYWNlLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5n
ZXQoKSk7CiAgICAgZ3JhbmRDaGlsZDEtPnNldFJlcGxpY2FMYXllcihudWxscHRyKTsKICAgICBl
bXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIEFTU0VSVF9FUShvbGRDb250
ZW50UmVjdC53aWR0aCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKS53
aWR0aCgpKTsKQEAgLTg0OCw2ICs4ODcsOCBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwg
dmVyaWZ5RGFtYWdlRm9yTWFzaykKICAgICAvLyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgZGFtYWdlIHRyYWNrZXIsIGNoYW5nZXMgdG8gbWFzayBsYXllcnMgc2hvdWxkCiAg
ICAgLy8gZGFtYWdlIHRoZSBlbnRpcmUgY29ycmVzcG9uZGluZyBzdXJmYWNlLgogCisgICAgY2xl
YXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKKwogICAgIC8vIFNldCB1cCB0aGUg
bWFzayBsYXllci4KICAgICB7CiAgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbWFza0xheWVy
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKQEAgLTg3NSw2ICs5MTYsNyBAQCBURVNUX0YoQ0NE
YW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTWFzaykKIAogICAgIC8vIENBU0UgMTog
dGhlIHVwZGF0ZVJlY3Qgb24gYSBtYXNrIGxheWVyIHNob3VsZCBkYW1hZ2UgdGhlIGVudGlyZSB0
YXJnZXQgc3VyZmFjZS4KICAgICAvLworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9v
dC5nZXQoKSk7CiAgICAgbWFza0xheWVyLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxLCAyLCAz
LCA0KSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBGbG9h
dFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtODg0LDExICs5MjYsMTMgQEAgVEVTVF9G
KENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvck1hc2spCiAgICAgLy8KIAogICAg
IC8vIEFkdmFuY2Ugb25lIGZyYW1lIHdpdGhvdXQgZGFtYWdlIHNvIHRoYXQgd2Uga25vdyB0aGUg
ZGFtYWdlIHJlY3QgaXMgbm90IGxlZnRvdmVyIGZyb20gdGhlIHByZXZpb3VzIGNhc2UuCisgICAg
Y2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKICAgICBF
WFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKIAogICAgIC8vIFRoZW4gdGVz
dCB0aGUgcHJvcGVydHkgY2hhbmdlLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9v
dC5nZXQoKSk7CiAgICAgbWFza0xheWVyLT5zZXRPcGFjaXR5KDAuNSk7CiAgICAgZW11bGF0ZURy
YXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZC0+
cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CkBA
IC04OTgsMTEgKzk0MiwxMyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFt
YWdlRm9yTWFzaykKICAgICAvLwogCiAgICAgLy8gQWR2YW5jZSBvbmUgZnJhbWUgd2l0aG91dCBk
YW1hZ2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBpcyBub3QgbGVmdG92ZXIgZnJv
bSB0aGUgcHJldmlvdXMgY2FzZS4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3Qu
Z2V0KCkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAgICAgY2hp
bGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5j
dXJyZW50RGFtYWdlUmVjdCgpOwogICAgIEVYUEVDVF9UUlVFKGNoaWxkRGFtYWdlUmVjdC5pc0Vt
cHR5KCkpOwogCiAgICAgLy8gVGhlbiB0ZXN0IG1hc2sgcmVtb3ZhbC4KKyAgICBjbGVhckRhbWFn
ZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIobnVs
bHB0cik7CiAgICAgQVNTRVJUX1RSVUUoY2hpbGQtPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpOwog
ICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CkBAIC05MjMsNiArOTY5LDgg
QEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxpY2FNYXNr
KQogICAgIC8vIENoYW5nZXMgdG8gYSByZXBsaWNhJ3MgbWFzayBzaG91bGQgbm90IGRhbWFnZSB0
aGUgb3JpZ2luYWwgc3VyZmFjZSwgYmVjYXVzZSBpdCBpcwogICAgIC8vIG5vdCBtYXNrZWQuIEJ1
dCBpdCBkb2VzIGRhbWFnZSB0aGUgYW5jZXN0b3IgdGFyZ2V0IHN1cmZhY2UuCiAKKyAgICBjbGVh
ckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOworCiAgICAgLy8gQ3JlYXRlIGEgcmVm
bGVjdGlvbiBhYm91dCB0aGUgbGVmdCBlZGdlIG9mIGdyYW5kQ2hpbGQxLgogICAgIHsKICAgICAg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDYpOwpAQCAtOTUxLDYgKzk5OSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlEYW1hZ2VGb3JSZXBsaWNhTWFzaykKICAgICBBU1NFUlRfVFJVRShncmFuZENoaWxk
MS0+cmVuZGVyU3VyZmFjZSgpKTsKIAogICAgIC8vIENBU0UgMTogYSBwcm9wZXJ0eSBjaGFuZ2Ug
b24gdGhlIG1hc2sgc2hvdWxkIGRhbWFnZSBvbmx5IHRoZSByZWZsZWN0ZWQgcmVnaW9uIG9uIHRo
ZSB0YXJnZXQgc3VyZmFjZS4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0
KCkpOwogICAgIHJlcGxpY2FNYXNrTGF5ZXItPnNldE9wYWNpdHkoMC42Zik7CiAgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIApAQCAtOTYyLDYgKzEwMTEsNyBAQCBURVNU
X0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYU1hc2spCiAKICAg
ICAvLyBDQVNFIDI6IHJlbW92aW5nIHRoZSByZXBsaWNhIG1hc2sgZGFtYWdlcyBvbmx5IHRoZSBy
ZWZsZWN0ZWQgcmVnaW9uIG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4KICAgICAvLworICAgIGNsZWFy
RGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgZ3JhbmRDaGlsZDFSZXBsaWNh
LT5zZXRNYXNrTGF5ZXIobnVsbHB0cik7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKIApAQCAtOTgyLDYgKzEwMzIsOCBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVz
dCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYU1hc2tXaXRoQW5jaG9yKQogICAgIC8vIGluY29ycmVj
dCBvbGQgY29kZSBpbmNvcnJlY3RseSBhY2NvdW50ZWQgZm9yIHRoZSBhbmNob3IgZm9yIHRoZSBy
ZXBsaWNhLiBBCiAgICAgLy8gbm9uLXplcm8gYW5jaG9yIHBvaW50IHNob3VsZCBub3QgYWZmZWN0
IHRoZSByZXBsaWNhIHJlZmxlY3Rpb24uCiAKKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2Vz
KHJvb3QuZ2V0KCkpOworCiAgICAgZ3JhbmRDaGlsZDEtPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQoMS4wLCAwLjApKTsgLy8gVGhpcyBpcyB0aGUgYW5jaG9yIGJlaW5nIHRlc3RlZC4KIAogICAg
IHsKQEAgLTEwMTEsNiArMTA2Myw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VGb3JSZXBsaWNhTWFza1dpdGhBbmNob3IpCiAgICAgQVNTRVJUX1RSVUUoZ3JhbmRD
aGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CiAKICAgICAvLyBBIHByb3BlcnR5IGNoYW5nZSBvbiB0
aGUgcmVwbGljYU1hc2sgc2hvdWxkIGRhbWFnZSB0aGUgcmVmbGVjdGVkIHJlZ2lvbiBvbiB0aGUg
dGFyZ2V0IHN1cmZhY2UuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgp
KTsKICAgICByZXBsaWNhTWFza0xheWVyLT5zZXRPcGFjaXR5KDAuNmYpOwogICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTEwMjYsNiArMTA3OSw3IEBAIFRFU1Rf
RihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VXaGVuRm9yY2VkRnVsbERhbWFnZSkK
ICAgICAvLyBDYXNlIDE6IFRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgd2hlbiB0aGUgdHJhY2tlciBp
cyBmb3JjZWQgdG8gaGF2ZSBmdWxsIGRhbWFnZSwgdGhhdAogICAgIC8vICAgICAgICAgaXQgdGFr
ZXMgcHJpb3JpdHkgb3ZlciBhbnkgb3RoZXIgcGFydGlhbCBkYW1hZ2UuCiAgICAgLy8KKyAgICBj
bGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRVcGRh
dGVSZWN0KEZsb2F0UmVjdCgxMCwgMTEsIDEyLCAxMykpOwogICAgIHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5mb3JjZUZ1bGxEYW1hZ2VOZXh0VXBkYXRlKCk7CiAgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKQEAgLTEwMzUsNiArMTA4OSw3IEBA
IFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VXaGVuRm9yY2VkRnVsbERh
bWFnZSkKICAgICAvLyBDYXNlIDI6IEFuIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrIHRoYXQgZm9y
Y2luZyBmdWxsIGRhbWFnZSB3b3JrcyBldmVuIHdoZW4gbm90aGluZwogICAgIC8vICAgICAgICAg
b24gdGhlIGxheWVyIHRyZWUgY2hhbmdlZC4KICAgICAvLworICAgIGNsZWFyRGFtYWdlRm9yQWxs
U3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmZvcmNlRnVsbERhbWFnZU5leHRVcGRhdGUoKTsKICAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CkBAIC0xMDU4
LDQgKzExMTMsMjYgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZv
ckVtcHR5TGF5ZXJMaXN0KQogICAgIEVYUEVDVF9UUlVFKGRhbWFnZVJlY3QuaXNFbXB0eSgpKTsK
IH0KIAorVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUFjY3VtdWxhdGVz
VW50aWxSZXNldCkKK3sKKyAgICAvLyBJZiBkYW1hZ2UgaXMgbm90IGNsZWFyZWQsIGl0IHNob3Vs
ZCBhY2N1bXVsYXRlLgorCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5k
U2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkID0g
cm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFj
ZXMocm9vdC5nZXQoKSk7CisgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLCAx
MSwgMSwgMikpOworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAg
ICAvLyBTYW5pdHkgY2hlY2sgZGFtYWdlIGFmdGVyIHRoZSBmaXJzdCBmcmFtZTsgdGhpcyBpc250
IHRoZSBhY3R1YWwgdGVzdCB5ZXQuCisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0gcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7
CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDExMCwgMTExLCAxLCAyKSwgcm9v
dERhbWFnZVJlY3QpOworCisgICAgLy8gTmV3IGRhbWFnZSwgd2l0aG91dCBoYXZpbmcgY2xlYXJl
ZCB0aGUgcHJldmlvdXMgZGFtYWdlLCBzaG91bGQgYmUgdW5pb25lZCB0byB0aGUgcHJldmlvdXMg
b25lLgorICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgyMCwgMjUsIDEsIDIpKTsK
KyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworICAgIHJvb3REYW1hZ2VS
ZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1h
Z2VSZWN0KCk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDExMCwgMTExLCAx
MSwgMTYpLCByb290RGFtYWdlUmVjdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145332</attachid>
            <date>2012-06-01 09:58:04 -0700</date>
            <delta_ts>2012-06-08 11:29:00 -0700</delta_ts>
            <desc>Same patch only removed bad leftover comment</desc>
            <filename>bug-84803-20120601095803.patch</filename>
            <type>text/plain</type>
            <size>31209</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBlOTVmZDRiN2ZjZGVi
NjBlMWZkNjJlOGIyZGFiYzM5ZTI2ZmFiOC4uYzUyNGE4YjQzNTE2ZjM0NDU2MjRmY2MzYzMyNzg2
ODVkM2UxYjM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA1LTMxICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
TWFrZSBkYW1hZ2UgdHJhY2tpbmcgbW9yZSByb2J1c3QgdG8gZWFybHkgZXhpdHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0ODAzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsIENDRGFtYWdlVHJhY2tl
clRlc3QgdW5pdCB0ZXN0cyB1cGRhdGVkOworICAgICAgICBPbmUgbmV3IHVuaXQgdGVzdCBhZGRl
ZDoKKyAgICAgICAgICAgQ0NEYW1hZ2VUcmFja2VyVGVzdC52ZXJpZnlEYW1hZ2VBY2N1bXVsYXRl
c1VudGlsUmVzZXQKKworICAgICAgICBEYW1hZ2UgdHJhY2tpbmcgaW5oZXJlbnRseSBuZWVkcyB0
byBiZSBhd2FyZSBvZiBhbGwgY2hhbmdlcyB0aGF0CisgICAgICAgIG9jY3VyIGZvciBldmVyeSBm
cmFtZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGFueW9uZSBtb2RpZnlpbmcgZGV0YWlscworICAgICAg
ICBvZiBDQ0xheWVyVHJlZUhvc3RJbXBsIGFuZCB0aGUgZHJhd2luZyBwaGFzZXMgb2YgdGhlIGNv
bXBvc2l0b3IKKyAgICAgICAgbmVlZGVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgZWFybHkgZXhp
dGluZyBvbmNlIGRyYXcgaXMKKyAgICAgICAgaW5pdGlhdGVkLCBvdGhlcndpc2UgcnVubmluZyB0
aGUgcmlzayBvZiBkYW1hZ2UgdHJhY2tpbmcncyBzdGF0ZQorICAgICAgICBnZXR0aW5nIG91dC1v
Zi1zeW5jIGZyb20gYWN0dWFsIGNoYW5nZXMuIFRoaXMgcGF0Y2ggbWFrZXMgdGhlCisgICAgICAg
IGRhbWFnZSB0cmFja2VyIEFQSSBtb3JlIGFzeW5jaHJvbm91cy1saWtlLCBzbyB0aGF0IGRhbWFn
ZSB3aWxsCisgICAgICAgIGNvbnRpbnVlIHRvIGFjY3VtdWxhdGUgdW50aWwgaXQgaXMgZXhwbGlj
aXRseSBub3RpZmllZCB0aGF0CisgICAgICAgIGRhbWFnZWQgYXJlYXMgaGF2ZSBiZWVuIGRyYXdu
LiBUaGlzIHdpbGwgYWxsb3cgbW9yZSBmcmVlZG9tIGluCisgICAgICAgIGRlc2lnbmluZyBhbmQg
cmVzdHJ1Y3R1aW5nIGRyYXdpbmcgY29kZSBpbiB0aGUgY29tcG9zaXRvciwgd2l0aG91dAorICAg
ICAgICB3b3JyeWluZyBhcyBtdWNoIGFib3V0IGRhbWFnZSB0cmFja2luZyBnZXR0aW5nIG91dC1v
Zi1zeW5jLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1h
Z2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDRGFtYWdlVHJhY2tlcjo6dXBkYXRl
RGFtYWdlVHJhY2tpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNr
ZXI6Om5vdGlmeURhbWFnZWRBcmVhSGFzQmVlbkRyYXduKToKKyAgICAgICAgKENDRGFtYWdlVHJh
Y2tlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpk
cmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om5vdGlm
eURhbWFnZURyYXduRm9yQWxsU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgor
ICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisKIDIwMTItMDYtMDEgIENocmlzdG9waGUg
RHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBFRkwg
cG9ydCBkb2VzIG5vdCBlbmFibGUgV0VCX0lOVEVOVFNfVEFHIGZsYWcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggOTM2MWE0ODViOGZiNTFkMGJlNzBiOGFkN2ZlODVkNmU1MzU0ZTQ2MC4u
ZTUwNzI5OTM1ZTY1YTc4ZTRhNjBmZDM4MGU0ZmJlNjU5NWQ1NGE0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNS0zMSAgU2hhd24gU2luZ2ggIDxz
aGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgZGFtYWdl
IHRyYWNraW5nIG1vcmUgcm9idXN0IHRvIGVhcmx5IGV4aXRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDgwMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5j
cHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Y2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyk6Cisg
ICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVF9GKToKKwog
MjAxMi0wNi0wMSAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5j
cHAKaW5kZXggOGZkM2VkMTI0YjIzMDNiNzdhMGIwZjQ5Mjg5ODNkOWM4OTUxYmVkYi4uYTZmZGJi
OGZmZmFjY2EzOWY5MWYwYzAzYWI3MmZhZTg0YWU2NjZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFn
ZVRyYWNrZXIuY3BwCkBAIC0xNTEsMjAgKzE1MSwyNyBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6
dXBkYXRlRGFtYWdlVHJhY2tpbmdTdGF0ZShjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5
ZQogICAgIEZsb2F0UmVjdCBkYW1hZ2VGcm9tU3VyZmFjZU1hc2sgPSB0cmFja0RhbWFnZUZyb21T
dXJmYWNlTWFzayh0YXJnZXRTdXJmYWNlTWFza0xheWVyKTsKICAgICBGbG9hdFJlY3QgZGFtYWdl
RnJvbUxlZnRvdmVyUmVjdHMgPSB0cmFja0RhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCk7CiAKKyAg
ICBGbG9hdFJlY3QgZGFtYWdlUmVjdEZvclRoaXNVcGRhdGU7CisKICAgICBpZiAobV9mb3JjZUZ1
bGxEYW1hZ2VOZXh0VXBkYXRlIHx8IHRhcmdldFN1cmZhY2VQcm9wZXJ0eUNoYW5nZWRPbmx5RnJv
bURlc2NlbmRhbnQpIHsKLSAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IHRhcmdldFN1cmZh
Y2VDb250ZW50UmVjdDsKKyAgICAgICAgZGFtYWdlUmVjdEZvclRoaXNVcGRhdGUgPSB0YXJnZXRT
dXJmYWNlQ29udGVudFJlY3Q7CiAgICAgICAgIG1fZm9yY2VGdWxsRGFtYWdlTmV4dFVwZGF0ZSA9
IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBjYW4gd2UgY2xhbXAgdGhp
cyBkYW1hZ2UgdG8gdGhlIHN1cmZhY2UncyBjb250ZW50IHJlY3Q/IChhZmZlY3RzIHBlcmZvcm1h
bmNlLCBidXQgbm90IGNvcnJlY3RuZXNzKQotICAgICAgICBtX2N1cnJlbnREYW1hZ2VSZWN0ID0g
ZGFtYWdlRnJvbUFjdGl2ZUxheWVyczsKLSAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdC51bml0
ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2spOwotICAgICAgICBtX2N1cnJlbnREYW1h
Z2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKTsKKyAgICAgICAg
ZGFtYWdlUmVjdEZvclRoaXNVcGRhdGUgPSBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzOworICAgICAg
ICBkYW1hZ2VSZWN0Rm9yVGhpc1VwZGF0ZS51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFj
ZU1hc2spOworICAgICAgICBkYW1hZ2VSZWN0Rm9yVGhpc1VwZGF0ZS51bml0ZUlmTm9uWmVybyhk
YW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk7CiAKICAgICAgICAgaWYgKGZpbHRlcnMuaGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgICAgICBleHBhbmRSZWN0V2l0aEZpbHRlcnMobV9j
dXJyZW50RGFtYWdlUmVjdCwgZmlsdGVycyk7CisgICAgICAgICAgICBleHBhbmRSZWN0V2l0aEZp
bHRlcnMoZGFtYWdlUmVjdEZvclRoaXNVcGRhdGUsIGZpbHRlcnMpOwogICAgIH0KIAotICAgIC8v
IFRoZSBuZXh0IGhpc3RvcnkgbWFwIGJlY29tZXMgdGhlIGN1cnJlbnQgbWFwIGZvciB0aGUgbmV4
dCBmcmFtZS4KKyAgICAvLyBEYW1hZ2UgYWNjdW11bGF0ZXMgdW50aWwgd2UgYXJlIG5vdGlmaWVk
IHRoYXQgd2UgYWN0dWFsbHkgZGlkIGRyYXcgb24gdGhhdCBmcmFtZS4KKyAgICBtX2N1cnJlbnRE
YW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZVJlY3RGb3JUaGlzVXBkYXRlKTsKKworICAg
IC8vIFRoZSBuZXh0IGhpc3RvcnkgbWFwIGJlY29tZXMgdGhlIGN1cnJlbnQgbWFwIGZvciB0aGUg
bmV4dCBmcmFtZS4gTm90ZSB0aGlzIG11c3QKKyAgICAvLyBoYXBwZW4gZXZlcnkgZnJhbWUgdG8g
Y29ycmVjdGx5IHRyYWNrIGNoYW5nZXMsIGV2ZW4gaWYgZGFtYWdlIGFjY3VtdWxhdGVzIG92ZXIK
KyAgICAvLyBtdWx0aXBsZSBmcmFtZXMgYmVmb3JlIGFjdHVhbGx5IGJlaW5nIGRyYXduLgogICAg
IHN3YXAobV9jdXJyZW50UmVjdEhpc3RvcnksIG1fbmV4dFJlY3RIaXN0b3J5KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
YW1hZ2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaAppbmRleCBmYjgwNTFhNGMxZjBhNDBjMzhkYjRkMmRlNzk0
OTVkZGMzYzFjZGE2Li41MzQ3OTgzODY0NzFmMDFmN2Y4Mzk3ZGIwZjg1NDFlZmI0MWY1YWVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaApAQCAtNDcsOCArNDcsMTAgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7CiAgICAgfkND
RGFtYWdlVHJhY2tlcigpOwogCisgICAgdm9pZCBub3RpZnlEYW1hZ2VkQXJlYUhhc0JlZW5EcmF3
bigpIHsgbV9jdXJyZW50RGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOyB9CiAgICAgdm9pZCBmb3Jj
ZUZ1bGxEYW1hZ2VOZXh0VXBkYXRlKCkgeyBtX2ZvcmNlRnVsbERhbWFnZU5leHRVcGRhdGUgPSB0
cnVlOyB9CiAgICAgdm9pZCB1cGRhdGVEYW1hZ2VUcmFja2luZ1N0YXRlKGNvbnN0IFZlY3RvcjxD
Q0xheWVySW1wbCo+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCwgYm9vbCB0
YXJnZXRTdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50LCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRTdXJmYWNlQ29udGVudFJlY3QsIENDTGF5ZXJJbXBsKiB0YXJnZXRTdXJmYWNl
TWFza0xheWVyLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmKTsKKwogICAgIGNv
bnN0IEZsb2F0UmVjdCYgY3VycmVudERhbWFnZVJlY3QoKSB7IHJldHVybiBtX2N1cnJlbnREYW1h
Z2VSZWN0OyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCmluZGV4IDBhNDlmOGU3ZGE1OTA2MmFjYmRhNDZhOGM1OTQ1NDlmOTQ2ODI1MWUuLmViMzk1
ZGNiMjQxMDUzMTQ4NzU2NzliMmI0MzE1OGI5MmIwNjk2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00NDUsNiArNDQ1LDExIEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6ZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQogCiAgICAgKytt
X2ZyYW1lTnVtYmVyOwogCisgICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSByZWFsbHkgZGlkIGRy
YXcgdG8gdGhlIGJhY2sgYnVmZmVyLCB3ZSBjYW4gY2xlYXIgdGhlIGFjY3VtdWxhdGVkIGRhbWFn
ZS4KKyAgICAvLyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAoaS5lLiBnbG9iYWwgcm9v
dC1sZXZlbCBzY2lzc29yIGFwcGxpZXMgdG8gYWxsIHN1cmZhY2VzKSwgaXQgaXMKKyAgICAvLyBu
ZWNlc3NhcnkgdG8gY2xlYXIgZGFtYWdlIGZvciBhbGwgc3VyZmFjZXMgaGVyZSwgbm90IGp1c3Qg
dGhlIHJvb3Qgc3VyZmFjZS4KKyAgICBub3RpZnlEYW1hZ2VEcmF3bkZvckFsbFN1cmZhY2VzKHJv
b3RMYXllcigpKTsKKwogICAgIC8vIFRoZSBuZXh0IGZyYW1lIHNob3VsZCBzdGFydCBieSBhc3N1
bWluZyBub3RoaW5nIGhhcyBjaGFuZ2VkLCBhbmQgY2hhbmdlcyBhcmUgbm90ZWQgYXMgdGhleSBv
Y2N1ci4KICAgICBtX3Jvb3RMYXllckltcGwtPnJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0
cmVlKCk7CiB9CkBAIC00ODEsNiArNDg2LDE2IEBAIFRleHR1cmVBbGxvY2F0b3IqIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fbGF5ZXJSZW5kZXJlciA/IG1fbGF5ZXJSZW5kZXJlci0+Y29udGVudHNUZXh0dXJlQWxsb2Nh
dG9yKCkgOiAwOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6Om5vdGlmeURhbWFnZURy
YXduRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIGlmIChsYXllci0+
cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPm5vdGlmeURhbWFnZWRBcmVhSGFzQmVlbkRyYXduKCk7CisKKyAgICAvLyBSZWN1
cnNpdmVseSBjbGVhciBkYW1hZ2UgZm9yIGFueSBleGlzdGluZyBzdXJmYWNlLgorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAg
IG5vdGlmeURhbWFnZURyYXduRm9yQWxsU3VyZmFjZXMobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0
KCkpOworfQorCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN3YXBCdWZmZXJzKCkKIHsKICAg
ICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaAppbmRleCA3ZjBjN2ZmNjYzY2EzZGY4Y2NlOTMxYzI2YTMxZDUxZTdhNjJjNzE1Li5mODA4
MDFiYTk5ODVkZjdhNmRlMzMyMjdjNGYyNTU0YmIwNmU0YWFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCkBAIC0xOTYsNiArMTk2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRl
TWF4U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMo
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lkIG5vdGlmeURhbWFnZURyYXduRm9yQWxsU3VyZmFjZXMo
Q0NMYXllckltcGwqKTsKIAogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGZyYW1lIHNob3Vs
ZCBub3QgYmUgZGlzcGxheWVkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZAogICAgIC8vIG9ubHkgYmUg
Y2FsbGVkIGZyb20gcHJlcGFyZVRvRHJhdywgYXMgZGlkRHJhd0FsbExheWVycyBtdXN0IGJlIGNh
bGxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRy
YWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFj
a2VyVGVzdC5jcHAKaW5kZXggNTZkODVmYWZhOWZkN2I5YWM3ZjJmMjcyOGQ2Y2FmNjdiNzk2YWIx
My4uMzFjZjU4NWM3Njk1NGVjYmU4NzgzZjkzYmJmNDM5NWRhNTkzMTM1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBA
IC02MSw2ICs2MSwxNiBAQCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxDQ0xheQogICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3QsIHJv
b3QsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiB9
CiAKK3ZvaWQgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5ZXIpCit7
CisgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIGxheWVyLT5yZW5kZXJT
dXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+bm90aWZ5RGFtYWdlZEFyZWFIYXNCZWVuRHJhd24o
KTsKKworICAgIC8vIFJlY3Vyc2l2ZWx5IGNsZWFyIGRhbWFnZSBmb3IgYW55IGV4aXN0aW5nIHN1
cmZhY2UuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXpl
KCk7ICsraSkKKyAgICAgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhsYXllci0+Y2hpbGRy
ZW4oKVtpXS5nZXQoKSk7Cit9CisKIHZvaWQgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShDQ0xheWVy
SW1wbCogcm9vdCkKIHsKICAgICAvLyBUaGlzIGVtdWxhdGVzIG9ubHkgdGhlIHN0ZXBzIHRoYXQg
YXJlIHJlbGV2YW50IHRvIHRlc3RpbmcgdGhlIGRhbWFnZSB0cmFja2VyOgpAQCAtMjIxLDYgKzIz
MSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVS
ZWN0cykKIAogICAgIC8vIENBU0UgMTogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgc2hvdWxkIGNh
dXNlIHRoZSBjb3JyZXNwb25kaW5nIGRhbWFnZSB0byB0aGUgc3VyZmFjZS4KICAgICAvLworICAg
IGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQtPnNldFVw
ZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLCAxMSwgMTIsIDEzKSk7CiAgICAgZW11bGF0ZURyYXdpbmdP
bmVGcmFtZShyb290LmdldCgpKTsKIApAQCAtMjMwLDYgKzI0MSw3IEBAIFRFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JVcGRhdGVSZWN0cykKIAogICAgIC8vIENBU0Ug
MjogVGhlIHNhbWUgdXBkYXRlIHJlY3QgdHdpY2UgaW4gYSByb3cgc3RpbGwgcHJvZHVjZXMgdGhl
IHNhbWUgZGFtYWdlLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290
LmdldCgpKTsKICAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAsIDExLCAxMiwg
MTMpKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIHJvb3RE
YW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CkBAIC0yMzcsNiArMjQ5LDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeURhbWFnZUZvclVwZGF0ZVJlY3RzKQogCiAgICAgLy8gQ0FTRSAzOiBTZXR0
aW5nIGEgZGlmZmVyZW50IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSBkYW1hZ2Ugb24gdGhlIG5l
dyB1cGRhdGUgcmVnaW9uLCBidXQgbm8gYWRkaXRpb25hbCBleHBvc2VkIG9sZCByZWdpb24uCiAg
ICAgLy8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNo
aWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgyMCwgMjUsIDEsIDIpKTsKICAgICBlbXVsYXRl
RHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCkBAIC0yNTIsNiArMjY1LDcgQEAgVEVTVF9G
KENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclByb3BlcnR5Q2hhbmdlcykKIAog
ICAgIC8vIENBU0UgMTogVGhlIGxheWVyJ3MgcHJvcGVydHkgY2hhbmdlZCBmbGFnIHRha2VzIHBy
aW9yaXR5IG92ZXIgdXBkYXRlIHJlY3QuCiAgICAgLy8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1
cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgx
MCwgMTEsIDEyLCAxMykpOwogICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNSk7CiAgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKQEAgLTI3MCwxMCArMjg0LDEyIEBAIFRFU1Rf
RihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JQcm9wZXJ0eUNoYW5nZXMpCiAg
ICAgLy8gICAgICAgICBub3QganVzdCB0aGUgdXBkYXRlUmVjdC4KIAogICAgIC8vIEN5Y2xlIG9u
ZSBmcmFtZSBvZiBubyBjaGFuZ2UsIGp1c3QgdG8gc2FuaXR5IGNoZWNrIHRoYXQgdGhlIG5leHQg
cmVjdCBpcyBub3QgYmVjYXVzZSBvZiB0aGUgb2xkIGRhbWFnZSBzdGF0ZS4KKyAgICBjbGVhckRh
bWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5k
YW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCkuaXNFbXB0eSgpKTsKIAogICAgIC8v
IFRoZW4sIHRlc3QgdGhlIGFjdHVhbCBsYXllciBtb3ZlbWVudC4KKyAgICBjbGVhckRhbWFnZUZv
ckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KDIwMCwgMjMwKSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsK
IApAQCAtMjk3LDYgKzMxMyw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlE
YW1hZ2VGb3JUcmFuc2Zvcm1lZExheWVyKQogICAgIC8vIE5vdGUgY2FyZWZ1bGx5LCB0aGUgYW5j
aG9yIGlzIGFjdHVhbGx5IHBhcnQgb2YgbGF5ZXItPnBvc2l0aW9uKCkuIEJ5IHNldHRpbmcgYW5j
aG9yCiAgICAgLy8gdG8gKDAuNSwgMC41KSwgdGhlIGxheWVyJ3MgcG9zaXRpb24gKDEwMCwgMTAw
KSBub3cgcmVmZXJzIHRvIHRoZSBjZW50ZXIgb2YgdGhlCiAgICAgLy8gbGF5ZXIsIG5vdCB0aGUg
Y29ybmVyLiBUaGlzIG1lYW5zIHRoZSBsYXllciBoYXMgYWN0dWFsbHkgY2hhbmdlZCBwb3NpdGlv
bi4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxk
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNSwgMC41KSk7CiAgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKIApAQCAtMzA2LDYgKzMyMyw3IEBAIFRFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JUcmFuc2Zvcm1lZExheWVyKQogCiAgICAg
Ly8gV2l0aCB0aGUgYW5jaG9yIG9uIHRoZSBsYXllcidzIGNlbnRlciwgbm93IHdlIGNhbiB0ZXN0
IHRoZSByb3RhdGlvbiBtb3JlCiAgICAgLy8gaW50dWl0aXZlbHksIHNpbmNlIGl0IGFwcGxpZXMg
YWJvdXQgdGhlIGxheWVyJ3MgYW5jaG9yLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMo
cm9vdC5nZXQoKSk7CiAgICAgY2hpbGQtPnNldFRyYW5zZm9ybShyb3RhdGlvbik7CiAgICAgZW11
bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIApAQCAtMzUyLDYgKzM3MCw3IEBAIFRF
U1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JQZXJzcGVjdGl2ZUNsaXBw
ZWRMYXllcikKICAgICBFWFBFQ1RfVFJVRShjbGlwcGVkKTsKIAogICAgIC8vIERhbWFnZSB0aGUg
Y2hpbGQgd2l0aG91dCBtb3ZpbmcgaXQuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhy
b290LmdldCgpKTsKICAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOwogICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTM3MSwxMiArMzkwLDE0IEBAIFRFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCbHVycmVkU3VyZmFjZSkKICAgICBm
aWx0ZXJzLmFwcGVuZChXZWJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZUJsdXJGaWx0ZXIoNSkpOwog
ICAgIGludCBvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQ7
CiAgICAgZmlsdGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJv
dHRvbSwgb3V0c2V0TGVmdCk7Ci0gICAgcm9vdC0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKIAogICAg
IC8vIFNldHRpbmcgdGhlIGZpbHRlciB3aWxsIGRhbWFnZSB0aGUgd2hvbGUgc3VyZmFjZS4KKyAg
ICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOworICAgIHJvb3QtPnNldEZp
bHRlcnMoZmlsdGVycyk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsK
IAogICAgIC8vIFNldHRpbmcgdGhlIHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUgY29ycmVz
cG9uZGluZyBkYW1hZ2UgdG8gdGhlIHN1cmZhY2UsIGJsdXJyZWQgYmFzZWQgb24gdGhlIHNpemUg
b2YgdGhlIGJsdXIgZmlsdGVyLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5n
ZXQoKSk7CiAgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLCAxMSwgMTIsIDEz
KSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIApAQCAtNDAxLDE2
ICs0MjIsMTcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckJh
Y2tncm91bmRCbHVycmVkQ2hpbGQpCiAgICAgZmlsdGVycy5hcHBlbmQoV2ViRmlsdGVyT3BlcmF0
aW9uOjpjcmVhdGVCbHVyRmlsdGVyKDIpKTsKICAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdo
dCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OwogICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyhvdXRz
ZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQpOwotICAgIGNoaWxk
MS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CiAKICAgICAvLyBTZXR0aW5nIHRoZSBm
aWx0ZXIgd2lsbCBkYW1hZ2UgdGhlIHdob2xlIHN1cmZhY2UuCisgICAgY2xlYXJEYW1hZ2VGb3JB
bGxTdXJmYWNlcyhyb290LmdldCgpKTsKKyAgICBjaGlsZDEtPnNldEJhY2tncm91bmRGaWx0ZXJz
KGZpbHRlcnMpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAg
ICAvLyBDQVNFIDE6IFNldHRpbmcgdGhlIHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUgY29y
cmVzcG9uZGluZyBkYW1hZ2UgdG8KICAgICAvLyB0aGUgc3VyZmFjZSwgYmx1cnJlZCBiYXNlZCBv
biB0aGUgc2l6ZSBvZiB0aGUgY2hpbGQncyBiYWNrZ3JvdW5kIGJsdXIKICAgICAvLyBmaWx0ZXIu
CisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICByb290LT5z
ZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgyOTcsIDI5NywgMiwgMikpOwotCiAgICAgZW11bGF0ZURy
YXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIAogICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVj
dCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdl
UmVjdCgpOwpAQCAtNDI1LDggKzQ0Nyw4IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2
ZXJpZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkKQogICAgIC8vIHRoZSBzdXJmYWNl
LCBibHVycmVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBjaGlsZCdzIGJhY2tncm91bmQgYmx1
cgogICAgIC8vIGZpbHRlci4gU2luY2UgdGhlIGRhbWFnZSBleHRlbmRzIHRvIHRoZSByaWdodC9i
b3R0b20gb3V0c2lkZSBvZiB0aGUKICAgICAvLyBibHVycmVkIGxheWVyLCBvbmx5IHRoZSBsZWZ0
L3RvcCBzaG91bGQgZW5kIHVwIGV4cGFuZGVkLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFj
ZXMocm9vdC5nZXQoKSk7CiAgICAgcm9vdC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMjk3LCAy
OTcsIDMwLCAzMCkpOwotCiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsK
IAogICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CkBAIC00NDAsOCArNDYyLDggQEAgVEVTVF9GKEND
RGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckJhY2tncm91bmRCbHVycmVkQ2hpbGQp
CiAKICAgICAvLyBDQVNFIDM6IFNldHRpbmcgdGhpcyB1cGRhdGUgcmVjdCBvdXRzaWRlIHRoZSBi
bHVycmVkIGNvbnRlbnRCb3VuZHMgb2YgdGhlIGJsdXJyZWQKICAgICAvLyBjaGlsZDEgd2lsbCBu
b3QgY2F1c2UgaXQgdG8gYmUgZXhwYW5kZWQuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNl
cyhyb290LmdldCgpKTsKICAgICByb290LT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgzMCwgMzAs
IDIsIDIpKTsKLQogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAg
ICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNDUyLDggKzQ3NCw4IEBAIFRFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkKQogCiAg
ICAgLy8gQ0FTRSA0OiBTZXR0aW5nIHRoaXMgdXBkYXRlIHJlY3QgaW5zaWRlIHRoZSBibHVycmVk
IGNvbnRlbnRCb3VuZHMgYnV0IG91dHNpZGUgdGhlCiAgICAgLy8gb3JpZ2luYWwgY29udGVudEJv
dW5kcyBvZiB0aGUgYmx1cnJlZCBjaGlsZDEgd2lsbCBjYXVzZSBpdCB0byBiZSBleHBhbmRlZC4K
KyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHJvb3QtPnNl
dFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDk5LCA5OSwgMSwgMSkpOwotCiAgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKIAogICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CkBAIC00
NjcsOCArNDg5LDggQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZv
ckJhY2tncm91bmRCbHVycmVkQ2hpbGQpCiAKICAgICAvLyBDQVNFIDU6IFNldHRpbmcgdGhlIHVw
ZGF0ZSByZWN0IG9uIGNoaWxkMiwgd2hpY2ggaXMgYWJvdmUgY2hpbGQxLCB3aWxsCiAgICAgLy8g
bm90IGdldCBibHVycmVkIGJ5IGNoaWxkMSwgc28gaXQgZG9lcyBub3QgbmVlZCB0byBnZXQgZXhw
YW5kZWQuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBj
aGlsZDItPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpKTsKLQogICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAgICByb290RGFtYWdlUmVjdCA9IHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgp
OwpAQCAtNDc4LDggKzUwMCw4IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlE
YW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkKQogCiAgICAgLy8gQ0FTRSA2OiBTZXR0aW5n
IHRoZSB1cGRhdGUgcmVjdCBvbiBjaGlsZDEgd2lsbCBhbHNvIGJsdXIgdGhlIGRhbWFnZSwgc28K
ICAgICAvLyB0aGF0IGFueSBwaXhlbHMgbmVlZGVkIGZvciB0aGUgYmx1ciBhcmUgcmVkcmF3biBp
biB0aGUgY3VycmVudCBmcmFtZS4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3Qu
Z2V0KCkpOwogICAgIGNoaWxkMS0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSkp
OwotCiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIAogICAgIHJvb3RE
YW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CkBAIC00OTUsNiArNTE3LDkgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nTGF5ZXIpCiAgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNl
KCk7CiAgICAgQ0NMYXllckltcGwqIGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7
CiAKKyAgICAvLyBDQVNFIDE6IEFkZGluZyBhIG5ldyBsYXllciBzaG91bGQgY2F1c2UgdGhlIGFw
cHJvcHJpYXRlIGRhbWFnZS4KKyAgICAvLworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMo
cm9vdC5nZXQoKSk7CiAgICAgewogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CiAgICAgICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludCg0MDAsIDM4MCkpOwpAQCAtNTAzLDkgKzUyOCw2IEBAIFRFU1RfRihDQ0RhbWFnZVRy
YWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ0xheWVyKQogICAgICAg
ICBjaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICAgICAgcm9vdC0+YWRkQ2hpbGQo
Y2hpbGQyLnJlbGVhc2UoKSk7CiAgICAgfQotCi0gICAgLy8gQ0FTRSAxOiBBZGRpbmcgYSBuZXcg
bGF5ZXIgc2hvdWxkIGNhdXNlIHRoZSBhcHByb3ByaWF0ZSBkYW1hZ2UuCi0gICAgLy8KICAgICBl
bXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCiAgICAgLy8gU2FuaXR5IGNoZWNr
IC0gYWxsIDMgbGF5ZXJzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSByZW5kZXIgc3VyZmFjZTsgcmVu
ZGVyIHN1cmZhY2VzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLgpAQCAtNTE4LDYgKzU0MCw3IEBAIFRF
U1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmlu
Z0xheWVyKQogICAgIC8vICAgICAgICAgbGFzdCB1cGRhdGUgcmVjdC4KIAogICAgIC8vIEFkdmFu
Y2Ugb25lIGZyYW1lIHdpdGhvdXQgZGFtYWdlIHNvIHRoYXQgd2Uga25vdyB0aGUgZGFtYWdlIHJl
Y3QgaXMgbm90IGxlZnRvdmVyIGZyb20gdGhlIHByZXZpb3VzIGNhc2UuCisgICAgY2xlYXJEYW1h
Z2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpLmlzRW1wdHkoKSk7CiAKQEAgLTUzNSw2
ICs1NTgsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTmV3
VW5jaGFuZ2VkTGF5ZXIpCiAKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVB
bmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKIAorICAgIGNsZWFyRGFtYWdlRm9yQWxs
U3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgewogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+
IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CiAgICAgICAgIGNoaWxkMi0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCg0MDAsIDM4MCkpOwpAQCAtNTQ4LDcgKzU3Miw2IEBAIFRFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JOZXdVbmNoYW5nZWRMYXllcikKICAg
ICAgICAgQVNTRVJUX1RSVUUoY2hpbGQyLT51cGRhdGVSZWN0KCkuaXNFbXB0eSgpKTsKICAgICAg
ICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQyLnJlbGVhc2UoKSk7CiAgICAgfQotCiAgICAgZW11bGF0
ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKIAogICAgIC8vIFNhbml0eSBjaGVjayAtIGFs
bCAzIGxheWVycyBzaG91bGQgYmUgb24gdGhlIHNhbWUgcmVuZGVyIHN1cmZhY2U7IHJlbmRlciBz
dXJmYWNlcyBhcmUgdGVzdGVkIGVsc2V3aGVyZS4KQEAgLTU2Myw2ICs1ODYsOCBAQCBURVNUX0Yo
Q0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTXVsdGlwbGVMYXllcnMpCiAgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVT
dXJmYWNlKCk7CiAgICAgQ0NMYXllckltcGwqIGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0u
Z2V0KCk7CiAKKyAgICAvLyBJbiB0aGlzIHRlc3Qgd2UgZG9uJ3Qgd2FudCB0aGUgYWJvdmUgdHJl
ZSBtYW5pcHVsYXRpb24gdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzYW1lIGZyYW1lLgor
ICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgewogICAgICAg
ICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CiAg
ICAgICAgIGNoaWxkMi0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0MDAsIDM4MCkpOwpAQCAtNTcy
LDEzICs1OTcsMTIgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZv
ck11bHRpcGxlTGF5ZXJzKQogICAgICAgICByb290LT5hZGRDaGlsZChjaGlsZDIucmVsZWFzZSgp
KTsKICAgICB9CiAgICAgQ0NMYXllckltcGwqIGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV0u
Z2V0KCk7Ci0KLSAgICAvLyBJbiB0aGlzIHRlc3Qgd2UgZG9uJ3Qgd2FudCB0aGUgYWJvdmUgdHJl
ZSBtYW5pcHVsYXRpb24gdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzYW1lIGZyYW1lLgog
ICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAgICAvLyBEYW1hZ2lu
ZyB0d28gbGF5ZXJzIHNpbXVsdGFuZW91c2x5IHNob3VsZCBjYXVzZSBjb21iaW5lZCBkYW1hZ2Uu
CiAgICAgLy8gLSBjaGlsZDEgdXBkYXRlIHJlY3QgaW4gc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0
KDEwMCwgMTAwLCAxLCAyKTsKICAgICAvLyAtIGNoaWxkMiB1cGRhdGUgcmVjdCBpbiBzdXJmYWNl
IHNwYWNlOiBGbG9hdFJlY3QoNDAwLCAzODAsIDMsIDQpOworICAgIGNsZWFyRGFtYWdlRm9yQWxs
U3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVj
dCgwLCAwLCAxLCAyKSk7CiAgICAgY2hpbGQyLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLCAw
LCAzLCA0KSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKQEAgLTU5
Nyw2ICs2MjEsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9y
TmVzdGVkU3VyZmFjZXMpCiAKICAgICAvLyBDQVNFIDE6IERhbWFnZSB0byBhIGRlc2NlbmRhbnQg
c3VyZmFjZSBzaG91bGQgcHJvcGFnYXRlIHByb3Blcmx5IHRvIGFuY2VzdG9yIHN1cmZhY2UuCiAg
ICAgLy8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGdy
YW5kQ2hpbGQxLT5zZXRPcGFjaXR5KDAuNSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShy
b290LmdldCgpKTsKICAgICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2Uo
KS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNjA3LDYgKzYzMiw3
IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JOZXN0ZWRTdXJm
YWNlcykKICAgICAvLyBDQVNFIDI6IFNhbWUgYXMgcHJldmlvdXMgY2FzZSwgYnV0IHdpdGggYWRk
aXRpb25hbCBkYW1hZ2UgZWxzZXdoZXJlIHRoYXQgc2hvdWxkIGJlIHByb3Blcmx5IHVuaW9uZWQu
CiAgICAgLy8gLSBjaGlsZDEgc3VyZmFjZSBkYW1hZ2UgaW4gcm9vdCBzdXJmYWNlIHNwYWNlOiBG
bG9hdFJlY3QoMzAwLCAzMDAsIDYsIDgpOwogICAgIC8vIC0gY2hpbGQyIGRhbWFnZSBpbiByb290
IHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCgxMSwgMTEsIDE4LCAxOCk7CisgICAgY2xlYXJEYW1h
Z2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0
eSgwLjdmKTsKICAgICBjaGlsZDItPnNldE9wYWNpdHkoMC43Zik7CiAgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKQEAgLTYzMSw2ICs2NTcsNyBAQCBURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yU3VyZmFjZUNoYW5nZUZyb21EZXNjZW5kYW50
TGF5ZXIpCiAgICAgRmxvYXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKICAgICBGbG9hdFJlY3Qgcm9v
dERhbWFnZVJlY3Q7CiAKKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkp
OwogICAgIGdyYW5kQ2hpbGQxLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDE5NSwgMjA1KSk7CiAg
ICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBjaGlsZERhbWFnZVJl
Y3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOwpAQCAtNjYyLDYgKzY4OSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlEYW1hZ2VGb3JTdXJmYWNlQ2hhbmdlRnJvbUFuY2VzdG9yTGF5ZXIpCiAgICAgRmxv
YXRSZWN0IGNoaWxkRGFtYWdlUmVjdDsKICAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CiAK
KyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkMS0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCg1MCwgNTApKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZy
YW1lKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3Vy
ZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CkBAIC02ODUsNiAr
NzEzLDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGlu
Z0FuZFJlbW92aW5nUmVuZGVyU3VyZmFjZXMpCiAKICAgICAvLyBDQVNFIDE6IElmIGEgZGVzY2Vu
ZGFudCBzdXJmYWNlIGRpc2FwcGVhcnMsIGl0cyBlbnRpcmUgb2xkIGFyZWEgYmVjb21lcyBleHBv
c2VkLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsK
ICAgICBjaGlsZDEtPnNldE9wYWNpdHkoMSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShy
b290LmdldCgpKTsKIApAQCAtNjk4LDExICs3MjcsMTMgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92aW5nUmVuZGVyU3VyZmFjZXMpCiAg
ICAgLy8gQ0FTRSAyOiBJZiBhIGRlc2NlbmRhbnQgc3VyZmFjZSBhcHBlYXJzLCBpdHMgZW50aXJl
IG9sZCBhcmVhIGJlY29tZXMgZXhwb3NlZC4KIAogICAgIC8vIEN5Y2xlIG9uZSBmcmFtZSBvZiBu
byBjaGFuZ2UsIGp1c3QgdG8gc2FuaXR5IGNoZWNrIHRoYXQgdGhlIG5leHQgcmVjdCBpcyBub3Qg
YmVjYXVzZSBvZiB0aGUgb2xkIGRhbWFnZSBzdGF0ZS4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1
cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CiAgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRy
YWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKICAgICBFWFBFQ1RfVFJVRShyb290RGFtYWdl
UmVjdC5pc0VtcHR5KCkpOwogCiAgICAgLy8gVGhlbiBjaGFuZ2UgdGhlIHRyZWUgc28gdGhhdCB0
aGUgcmVuZGVyIHN1cmZhY2UgaXMgYWRkZWQgYmFjay4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1
cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkMS0+c2V0T3BhY2l0eSgwLjUpOwogICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTcyNiw2ICs3NTcsNyBAQCBU
RVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5Tm9EYW1hZ2VXaGVuTm90aGluZ0NoYW5n
ZWQpCiAKICAgICAvLyBDQVNFIDE6IElmIG5vdGhpbmcgY2hhbmdlcywgdGhlIGRhbWFnZSByZWN0
IHNob3VsZCBiZSBlbXB0eS4KICAgICAvLworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMo
cm9vdC5nZXQoKSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAg
ICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tl
cigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwogICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CkBAIC03
MzQsNiArNzY2LDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeU5vRGFtYWdl
V2hlbk5vdGhpbmdDaGFuZ2VkKQogCiAgICAgLy8gQ0FTRSAyOiBJZiBub3RoaW5nIGNoYW5nZXMg
dHdpY2UgaW4gYSByb3csIHRoZSBkYW1hZ2UgcmVjdCBzaG91bGQgc3RpbGwgYmUgZW1wdHkuCiAg
ICAgLy8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAgICAgY2hpbGREYW1hZ2VSZWN0ID0g
Y2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJl
Y3QoKTsKICAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdl
VHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNzUwLDYgKzc4Myw3IEBAIFRFU1Rf
RihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZUZvclVwZGF0ZVJlY3RUaGF0RG9l
c05vdERyYXdDb250ZW50KQogCiAgICAgLy8gSW4gb3VyIHNwZWNpZmljIHRyZWUsIHRoZSB1cGRh
dGUgcmVjdCBvZiBjaGlsZDEgc2hvdWxkIG5vdCBjYXVzZSBhbnkgZGFtYWdlIHRvIGFueQogICAg
IC8vIHN1cmZhY2UgYmVjYXVzZSBpdCBkb2VzIG5vdCBhY3R1YWxseSBkcmF3IGNvbnRlbnQuCisg
ICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZDEtPnNl
dFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDIpKTsKICAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CkBAIC03ODUs
NiArODE5LDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJl
cGxpY2EpCiAKICAgICAvLyBDQVNFIDE6IGFkZGluZyBhIHJlZmxlY3Rpb24gYWJvdXQgdGhlIGxl
ZnQgZWRnZSBvZiBncmFuZENoaWxkMS4KICAgICAvLworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3Vy
ZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgewogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGdy
YW5kQ2hpbGQxUmVwbGljYSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNyk7CiAgICAgICAgIGdyYW5k
Q2hpbGQxUmVwbGljYS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludDo6emVybygpKTsKQEAgLTgwOCw2
ICs4NDMsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVw
bGljYSkKIAogICAgIC8vIENBU0UgMjogbW92aW5nIHRoZSBkZXNjZW5kYW50IHN1cmZhY2Ugc2hv
dWxkIGNhdXNlIGJvdGggdGhlIG9yaWdpbmFsIGFuZCByZWZsZWN0ZWQKICAgICAvLyAgICAgICAg
IGFyZWFzIHRvIGJlIGRhbWFnZWQgb24gdGhlIHRhcmdldC4KKyAgICBjbGVhckRhbWFnZUZvckFs
bFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIEludFJlY3Qgb2xkQ29udGVudFJlY3QgPSBjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKICAgICBncmFuZENoaWxkMS0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgxOTUuMCwgMjA1LjApKTsKICAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOwpAQCAtODI3LDYgKzg2Myw3IEBAIFRFU1RfRihDQ0RhbWFnZVRy
YWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JSZXBsaWNhKQogCiAgICAgLy8gQ0FTRSAzOiByZW1v
dmluZyB0aGUgcmVmbGVjdGlvbiBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSByZWdpb24gaW5jbHVk
aW5nIHJlZmxlY3Rpb24KICAgICAvLyAgICAgICAgIHRvIGRhbWFnZSB0aGUgdGFyZ2V0IHN1cmZh
Y2UuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBncmFu
ZENoaWxkMS0+c2V0UmVwbGljYUxheWVyKG51bGxwdHIpOwogICAgIGVtdWxhdGVEcmF3aW5nT25l
RnJhbWUocm9vdC5nZXQoKSk7CiAgICAgQVNTRVJUX0VRKG9sZENvbnRlbnRSZWN0LndpZHRoKCks
IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLndpZHRoKCkpOwpAQCAtODQ4
LDYgKzg4NSw4IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JN
YXNrKQogICAgIC8vIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBkYW1hZ2Ug
dHJhY2tlciwgY2hhbmdlcyB0byBtYXNrIGxheWVycyBzaG91bGQKICAgICAvLyBkYW1hZ2UgdGhl
IGVudGlyZSBjb3JyZXNwb25kaW5nIHN1cmZhY2UuCiAKKyAgICBjbGVhckRhbWFnZUZvckFsbFN1
cmZhY2VzKHJvb3QuZ2V0KCkpOworCiAgICAgLy8gU2V0IHVwIHRoZSBtYXNrIGxheWVyLgogICAg
IHsKICAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDMpOwpAQCAtODc1LDYgKzkxNCw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0
LCB2ZXJpZnlEYW1hZ2VGb3JNYXNrKQogCiAgICAgLy8gQ0FTRSAxOiB0aGUgdXBkYXRlUmVjdCBv
biBhIG1hc2sgbGF5ZXIgc2hvdWxkIGRhbWFnZSB0aGUgZW50aXJlIHRhcmdldCBzdXJmYWNlLgog
ICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBt
YXNrTGF5ZXItPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEsIDIsIDMsIDQpKTsKICAgICBlbXVs
YXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIEZsb2F0UmVjdCBjaGlsZERhbWFn
ZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CkBAIC04ODQsMTEgKzkyNCwxMyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2Vy
VGVzdCwgdmVyaWZ5RGFtYWdlRm9yTWFzaykKICAgICAvLwogCiAgICAgLy8gQWR2YW5jZSBvbmUg
ZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBpcyBu
b3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2FzZS4KKyAgICBjbGVhckRhbWFnZUZvckFs
bFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CiAgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwogICAgIEVYUEVDVF9UUlVFKGNoaWxk
RGFtYWdlUmVjdC5pc0VtcHR5KCkpOwogCiAgICAgLy8gVGhlbiB0ZXN0IHRoZSBwcm9wZXJ0eSBj
aGFuZ2UuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBt
YXNrTGF5ZXItPnNldE9wYWNpdHkoMC41KTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOwogICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkt
PmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTg5OCwxMSArOTQwLDEz
IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JNYXNrKQogICAg
IC8vCiAKICAgICAvLyBBZHZhbmNlIG9uZSBmcmFtZSB3aXRob3V0IGRhbWFnZSBzbyB0aGF0IHdl
IGtub3cgdGhlIGRhbWFnZSByZWN0IGlzIG5vdCBsZWZ0b3ZlciBmcm9tIHRoZSBwcmV2aW91cyBj
YXNlLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgZW11
bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBjaGlsZERhbWFnZVJlY3QgPSBj
aGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CiAgICAgRVhQRUNUX1RSVUUoY2hpbGREYW1hZ2VSZWN0LmlzRW1wdHkoKSk7CiAKICAgICAv
LyBUaGVuIHRlc3QgbWFzayByZW1vdmFsLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMo
cm9vdC5nZXQoKSk7CiAgICAgY2hpbGQtPnNldE1hc2tMYXllcihudWxscHRyKTsKICAgICBBU1NF
UlRfVFJVRShjaGlsZC0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSk7CiAgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKQEAgLTkyMyw2ICs5NjcsOCBAQCBURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYU1hc2spCiAgICAgLy8gQ2hhbmdl
cyB0byBhIHJlcGxpY2EncyBtYXNrIHNob3VsZCBub3QgZGFtYWdlIHRoZSBvcmlnaW5hbCBzdXJm
YWNlLCBiZWNhdXNlIGl0IGlzCiAgICAgLy8gbm90IG1hc2tlZC4gQnV0IGl0IGRvZXMgZGFtYWdl
IHRoZSBhbmNlc3RvciB0YXJnZXQgc3VyZmFjZS4KIAorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3Vy
ZmFjZXMocm9vdC5nZXQoKSk7CisKICAgICAvLyBDcmVhdGUgYSByZWZsZWN0aW9uIGFib3V0IHRo
ZSBsZWZ0IGVkZ2Ugb2YgZ3JhbmRDaGlsZDEuCiAgICAgewogICAgICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IGdyYW5kQ2hpbGQxUmVwbGljYSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNik7CkBAIC05
NTEsNiArOTk3LDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZv
clJlcGxpY2FNYXNrKQogICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNl
KCkpOwogCiAgICAgLy8gQ0FTRSAxOiBhIHByb3BlcnR5IGNoYW5nZSBvbiB0aGUgbWFzayBzaG91
bGQgZGFtYWdlIG9ubHkgdGhlIHJlZmxlY3RlZCByZWdpb24gb24gdGhlIHRhcmdldCBzdXJmYWNl
LgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgcmVwbGlj
YU1hc2tMYXllci0+c2V0T3BhY2l0eSgwLjZmKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOwogCkBAIC05NjIsNiArMTAwOSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNr
ZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JSZXBsaWNhTWFzaykKIAogICAgIC8vIENBU0UgMjogcmVt
b3ZpbmcgdGhlIHJlcGxpY2EgbWFzayBkYW1hZ2VzIG9ubHkgdGhlIHJlZmxlY3RlZCByZWdpb24g
b24gdGhlIHRhcmdldCBzdXJmYWNlLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJm
YWNlcyhyb290LmdldCgpKTsKICAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldE1hc2tMYXllcihu
dWxscHRyKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCkBAIC05
ODIsNiArMTAzMCw4IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VG
b3JSZXBsaWNhTWFza1dpdGhBbmNob3IpCiAgICAgLy8gaW5jb3JyZWN0IG9sZCBjb2RlIGluY29y
cmVjdGx5IGFjY291bnRlZCBmb3IgdGhlIGFuY2hvciBmb3IgdGhlIHJlcGxpY2EuIEEKICAgICAv
LyBub24temVybyBhbmNob3IgcG9pbnQgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIHJlcGxpY2EgcmVm
bGVjdGlvbi4KIAorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CisK
ICAgICBncmFuZENoaWxkMS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgxLjAsIDAuMCkpOyAv
LyBUaGlzIGlzIHRoZSBhbmNob3IgYmVpbmcgdGVzdGVkLgogCiAgICAgewpAQCAtMTAxMSw2ICsx
MDYxLDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxp
Y2FNYXNrV2l0aEFuY2hvcikKICAgICBBU1NFUlRfVFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3Vy
ZmFjZSgpKTsKIAogICAgIC8vIEEgcHJvcGVydHkgY2hhbmdlIG9uIHRoZSByZXBsaWNhTWFzayBz
aG91bGQgZGFtYWdlIHRoZSByZWZsZWN0ZWQgcmVnaW9uIG9uIHRoZSB0YXJnZXQgc3VyZmFjZS4K
KyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHJlcGxpY2FN
YXNrTGF5ZXItPnNldE9wYWNpdHkoMC42Zik7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShy
b290LmdldCgpKTsKIApAQCAtMTAyNiw2ICsxMDc3LDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tl
clRlc3QsIHZlcmlmeURhbWFnZVdoZW5Gb3JjZWRGdWxsRGFtYWdlKQogICAgIC8vIENhc2UgMTog
VGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3aGVuIHRoZSB0cmFja2VyIGlzIGZvcmNlZCB0byBoYXZl
IGZ1bGwgZGFtYWdlLCB0aGF0CiAgICAgLy8gICAgICAgICBpdCB0YWtlcyBwcmlvcml0eSBvdmVy
IGFueSBvdGhlciBwYXJ0aWFsIGRhbWFnZS4KICAgICAvLworICAgIGNsZWFyRGFtYWdlRm9yQWxs
U3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0
KDEwLCAxMSwgMTIsIDEzKSk7CiAgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmZvcmNlRnVsbERhbWFnZU5leHRVcGRhdGUoKTsKICAgICBlbXVsYXRlRHJhd2luZ09u
ZUZyYW1lKHJvb3QuZ2V0KCkpOwpAQCAtMTAzNSw2ICsxMDg3LDcgQEAgVEVTVF9GKENDRGFtYWdl
VHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZVdoZW5Gb3JjZWRGdWxsRGFtYWdlKQogICAgIC8vIENh
c2UgMjogQW4gYWRkaXRpb25hbCBzYW5pdHkgY2hlY2sgdGhhdCBmb3JjaW5nIGZ1bGwgZGFtYWdl
IHdvcmtzIGV2ZW4gd2hlbiBub3RoaW5nCiAgICAgLy8gICAgICAgICBvbiB0aGUgbGF5ZXIgdHJl
ZSBjaGFuZ2VkLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290Lmdl
dCgpKTsKICAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Zm9yY2VG
dWxsRGFtYWdlTmV4dFVwZGF0ZSgpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CiAgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFn
ZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTEwNTgsNCArMTExMSwyNiBAQCBU
RVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yRW1wdHlMYXllckxpc3Qp
CiAgICAgRVhQRUNUX1RSVUUoZGFtYWdlUmVjdC5pc0VtcHR5KCkpOwogfQogCitURVNUX0YoQ0NE
YW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlQWNjdW11bGF0ZXNVbnRpbFJlc2V0KQorewor
ICAgIC8vIElmIGRhbWFnZSBpcyBub3QgY2xlYXJlZCwgaXQgc2hvdWxkIGFjY3VtdWxhdGUuCisK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0
aE9uZVN1cmZhY2UoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigp
WzBdLmdldCgpOworCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsK
KyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAsIDExLCAxLCAyKSk7CisgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVj
ayBkYW1hZ2UgYWZ0ZXIgdGhlIGZpcnN0IGZyYW1lOyB0aGlzIGlzbnQgdGhlIGFjdHVhbCB0ZXN0
IHlldC4KKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRkxP
QVRfUkVDVF9FUShGbG9hdFJlY3QoMTEwLCAxMTEsIDEsIDIpLCByb290RGFtYWdlUmVjdCk7CisK
KyAgICAvLyBOZXcgZGFtYWdlLCB3aXRob3V0IGhhdmluZyBjbGVhcmVkIHRoZSBwcmV2aW91cyBk
YW1hZ2UsIHNob3VsZCBiZSB1bmlvbmVkIHRvIHRoZSBwcmV2aW91cyBvbmUuCisgICAgY2hpbGQt
PnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDIwLCAyNSwgMSwgMikpOworICAgIGVtdWxhdGVEcmF3
aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICBF
WFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTEwLCAxMTEsIDExLCAxNiksIHJvb3REYW1h
Z2VSZWN0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146617</attachid>
            <date>2012-06-08 11:29:04 -0700</date>
            <delta_ts>2012-06-12 11:07:57 -0700</delta_ts>
            <desc>Addressed reviewer comments</desc>
            <filename>bug-84803-20120608112904.patch</filename>
            <type>text/plain</type>
            <size>29749</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTAzYWViNmYxYTI0Zjli
YjZhMTczNGRjZjhiNzc4OGY2MTI1ZjNkZi4uZmEwNjU1MzU1OGE1OGYyNDE4MGI1NzJhZDE1YjE5
OTI0OTI3ZDQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA2LTA4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
TWFrZSBkYW1hZ2UgdHJhY2tpbmcgbW9yZSByb2J1c3QgdG8gZWFybHkgZXhpdHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0ODAzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsIENDRGFtYWdlVHJhY2tl
clRlc3QgdW5pdCB0ZXN0cyB1cGRhdGVkOworICAgICAgICBPbmUgbmV3IHVuaXQgdGVzdCBhZGRl
ZDoKKyAgICAgICAgICAgQ0NEYW1hZ2VUcmFja2VyVGVzdC52ZXJpZnlEYW1hZ2VBY2N1bXVsYXRl
c1VudGlsUmVzZXQKKworICAgICAgICBEYW1hZ2UgdHJhY2tpbmcgaW5oZXJlbnRseSBuZWVkcyB0
byBiZSBhd2FyZSBvZiBhbGwgY2hhbmdlcyB0aGF0CisgICAgICAgIG9jY3VyIGZvciBldmVyeSBm
cmFtZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGFueW9uZSBtb2RpZnlpbmcgZGV0YWlscworICAgICAg
ICBvZiBDQ0xheWVyVHJlZUhvc3RJbXBsIGFuZCB0aGUgZHJhd2luZyBwaGFzZXMgb2YgdGhlIGNv
bXBvc2l0b3IKKyAgICAgICAgbmVlZGVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgZWFybHkgZXhp
dGluZyBvbmNlIGRyYXcgaXMKKyAgICAgICAgaW5pdGlhdGVkLCBvdGhlcndpc2UgcnVubmluZyB0
aGUgcmlzayBvZiBkYW1hZ2UgdHJhY2tpbmcncyBzdGF0ZQorICAgICAgICBnZXR0aW5nIG91dC1v
Zi1zeW5jIGZyb20gYWN0dWFsIGNoYW5nZXMuIFRoaXMgcGF0Y2ggbWFrZXMgdGhlCisgICAgICAg
IGRhbWFnZSB0cmFja2VyIEFQSSBtb3JlIGFzeW5jaHJvbm91cy1saWtlLCBzbyB0aGF0IGRhbWFn
ZSB3aWxsCisgICAgICAgIGNvbnRpbnVlIHRvIGFjY3VtdWxhdGUgdW50aWwgaXQgaXMgZXhwbGlj
aXRseSBub3RpZmllZCB0aGF0CisgICAgICAgIGRhbWFnZWQgYXJlYXMgaGF2ZSBiZWVuIGRyYXdu
LiBUaGlzIHdpbGwgYWxsb3cgbW9yZSBmcmVlZG9tIGluCisgICAgICAgIGRlc2lnbmluZyBhbmQg
cmVzdHJ1Y3R1aW5nIGRyYXdpbmcgY29kZSBpbiB0aGUgY29tcG9zaXRvciwgd2l0aG91dAorICAg
ICAgICB3b3JyeWluZyBhcyBtdWNoIGFib3V0IGRhbWFnZSB0cmFja2luZyBnZXR0aW5nIG91dC1v
Zi1zeW5jLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1h
Z2VUcmFja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmRpZERyYXdE
YW1hZ2VkQXJlYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToK
KwogMjAxMi0wNi0wOCAgTWF4IEZlaWwgIDxtZmVpbEByaW0uY29tPgogCiAgICAgICAgIFtCbGFj
a0JlcnJ5XSBGaXggYXNzZXJ0aW9uIGZhaWx1cmUgaW50cm9kdWNlZCBieSBidWcgODc1NTEKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMGQ3OTI4NjIzNTE0YTQxMmE5NzczMjIyZTRhNzFh
NTE3NDY3YjgyMy4uMmI0ZjdmOGQyZTE0YTJhNGE3YzU2YTZmNjdlZWJlZWQ3ZDgzNDY1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wOCAgU2hh
d24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IE1ha2UgZGFtYWdlIHRyYWNraW5nIG1vcmUgcm9idXN0IHRvIGVhcmx5IGV4aXRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDgwMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NEYW1hZ2VU
cmFja2VyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Y2xlYXJEYW1hZ2VGb3JBbGxT
dXJmYWNlcyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVF9GKToKKwogMjAxMi0wNi0wOCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKaW5k
ZXggOGZkM2VkMTI0YjIzMDNiNzdhMGIwZjQ5Mjg5ODNkOWM4OTUxYmVkYi4uYTZmZGJiOGZmZmFj
Y2EzOWY5MWYwYzAzYWI3MmZhZTg0YWU2NjZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNr
ZXIuY3BwCkBAIC0xNTEsMjAgKzE1MSwyNyBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRl
RGFtYWdlVHJhY2tpbmdTdGF0ZShjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZQogICAg
IEZsb2F0UmVjdCBkYW1hZ2VGcm9tU3VyZmFjZU1hc2sgPSB0cmFja0RhbWFnZUZyb21TdXJmYWNl
TWFzayh0YXJnZXRTdXJmYWNlTWFza0xheWVyKTsKICAgICBGbG9hdFJlY3QgZGFtYWdlRnJvbUxl
ZnRvdmVyUmVjdHMgPSB0cmFja0RhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKCk7CiAKKyAgICBGbG9h
dFJlY3QgZGFtYWdlUmVjdEZvclRoaXNVcGRhdGU7CisKICAgICBpZiAobV9mb3JjZUZ1bGxEYW1h
Z2VOZXh0VXBkYXRlIHx8IHRhcmdldFN1cmZhY2VQcm9wZXJ0eUNoYW5nZWRPbmx5RnJvbURlc2Nl
bmRhbnQpIHsKLSAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9IHRhcmdldFN1cmZhY2VDb250
ZW50UmVjdDsKKyAgICAgICAgZGFtYWdlUmVjdEZvclRoaXNVcGRhdGUgPSB0YXJnZXRTdXJmYWNl
Q29udGVudFJlY3Q7CiAgICAgICAgIG1fZm9yY2VGdWxsRGFtYWdlTmV4dFVwZGF0ZSA9IGZhbHNl
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBjYW4gd2UgY2xhbXAgdGhpcyBkYW1h
Z2UgdG8gdGhlIHN1cmZhY2UncyBjb250ZW50IHJlY3Q/IChhZmZlY3RzIHBlcmZvcm1hbmNlLCBi
dXQgbm90IGNvcnJlY3RuZXNzKQotICAgICAgICBtX2N1cnJlbnREYW1hZ2VSZWN0ID0gZGFtYWdl
RnJvbUFjdGl2ZUxheWVyczsKLSAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdC51bml0ZUlmTm9u
WmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2spOwotICAgICAgICBtX2N1cnJlbnREYW1hZ2VSZWN0
LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKTsKKyAgICAgICAgZGFtYWdl
UmVjdEZvclRoaXNVcGRhdGUgPSBkYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzOworICAgICAgICBkYW1h
Z2VSZWN0Rm9yVGhpc1VwZGF0ZS51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2sp
OworICAgICAgICBkYW1hZ2VSZWN0Rm9yVGhpc1VwZGF0ZS51bml0ZUlmTm9uWmVybyhkYW1hZ2VG
cm9tTGVmdG92ZXJSZWN0cyk7CiAKICAgICAgICAgaWYgKGZpbHRlcnMuaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCkpCi0gICAgICAgICAgICBleHBhbmRSZWN0V2l0aEZpbHRlcnMobV9jdXJyZW50
RGFtYWdlUmVjdCwgZmlsdGVycyk7CisgICAgICAgICAgICBleHBhbmRSZWN0V2l0aEZpbHRlcnMo
ZGFtYWdlUmVjdEZvclRoaXNVcGRhdGUsIGZpbHRlcnMpOwogICAgIH0KIAotICAgIC8vIFRoZSBu
ZXh0IGhpc3RvcnkgbWFwIGJlY29tZXMgdGhlIGN1cnJlbnQgbWFwIGZvciB0aGUgbmV4dCBmcmFt
ZS4KKyAgICAvLyBEYW1hZ2UgYWNjdW11bGF0ZXMgdW50aWwgd2UgYXJlIG5vdGlmaWVkIHRoYXQg
d2UgYWN0dWFsbHkgZGlkIGRyYXcgb24gdGhhdCBmcmFtZS4KKyAgICBtX2N1cnJlbnREYW1hZ2VS
ZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZVJlY3RGb3JUaGlzVXBkYXRlKTsKKworICAgIC8vIFRo
ZSBuZXh0IGhpc3RvcnkgbWFwIGJlY29tZXMgdGhlIGN1cnJlbnQgbWFwIGZvciB0aGUgbmV4dCBm
cmFtZS4gTm90ZSB0aGlzIG11c3QKKyAgICAvLyBoYXBwZW4gZXZlcnkgZnJhbWUgdG8gY29ycmVj
dGx5IHRyYWNrIGNoYW5nZXMsIGV2ZW4gaWYgZGFtYWdlIGFjY3VtdWxhdGVzIG92ZXIKKyAgICAv
LyBtdWx0aXBsZSBmcmFtZXMgYmVmb3JlIGFjdHVhbGx5IGJlaW5nIGRyYXduLgogICAgIHN3YXAo
bV9jdXJyZW50UmVjdEhpc3RvcnksIG1fbmV4dFJlY3RIaXN0b3J5KTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VU
cmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuaAppbmRleCBmYjgwNTFhNGMxZjBhNDBjMzhkYjRkMmRlNzk0OTVkZGMz
YzFjZGE2Li5hODZjNTg3YWZhYmMyYTM2ZTZmODY5N2MyNGM2M2Q3ZWRiZGU0YTk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFn
ZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaApAQCAtNDcsOCArNDcsMTAgQEAgcHVibGljOgogICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDRGFtYWdlVHJhY2tlcj4gY3JlYXRlKCk7CiAgICAgfkNDRGFtYWdl
VHJhY2tlcigpOwogCisgICAgdm9pZCBkaWREcmF3RGFtYWdlZEFyZWEoKSB7IG1fY3VycmVudERh
bWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsgfQogICAgIHZvaWQgZm9yY2VGdWxsRGFtYWdlTmV4dFVw
ZGF0ZSgpIHsgbV9mb3JjZUZ1bGxEYW1hZ2VOZXh0VXBkYXRlID0gdHJ1ZTsgfQogICAgIHZvaWQg
dXBkYXRlRGFtYWdlVHJhY2tpbmdTdGF0ZShjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5
ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQsIGJvb2wgdGFyZ2V0U3VyZmFjZVByb3Bl
cnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2VuZGFudCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFj
ZUNvbnRlbnRSZWN0LCBDQ0xheWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllciwgY29uc3Qg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJik7CisKICAgICBjb25zdCBGbG9hdFJlY3QmIGN1
cnJlbnREYW1hZ2VSZWN0KCkgeyByZXR1cm4gbV9jdXJyZW50RGFtYWdlUmVjdDsgfQogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA1YjEzZTFi
OGVjYjU2ZjgxMWI2MTY3NGVhMjgxMTRlYTRjNzAwMzZiLi5kMThkZWJiNmY1MGVjYzY5MTAyMmVh
YmExZjIwODdkYWZkNmQwYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcApAQCAtNDE4LDYgKzQxOCw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xh
eWVycyhjb25zdCBGcmFtZURhdGEmIGZyYW1lKQogCiAgICAgICAgIEZsb2F0UmVjdCByb290U2Np
c3NvclJlY3RJbkN1cnJlbnRTdXJmYWNlID0gcmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5j
b21wdXRlUm9vdFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZShtX3Jvb3RTY2lzc29yUmVjdCk7
CiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocmVuZGVyUGFzcywgcm9v
dFNjaXNzb3JSZWN0SW5DdXJyZW50U3VyZmFjZSk7CisKKyAgICAgICAgcmVuZGVyUGFzcy0+dGFy
Z2V0U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmRpZERyYXdEYW1hZ2VkQXJlYSgpOwogICAg
IH0KIAogICAgIGlmIChtX2RlYnVnUmVjdEhpc3RvcnktPmVuYWJsZWQoc2V0dGluZ3MoKSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0
LmNwcAppbmRleCBiYjRlMmMyYWM1YmExNWQzZDM5OTk0MzljYTIyZGMwNzY1NTRmZTg0Li44Yzli
NTQzYjJjZjRlYjk2MmI4ODYyN2ZlZjYzNDdjOGQwMDBmNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTYyLDYg
KzYyLDE2IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShDQ0xheWVySW1wbCogcm9vdCwgVmVjdG9yPENDTGF5CiAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CiAKK3ZvaWQgY2xl
YXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgaWYgKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+ZGlkRHJhd0RhbWFnZWRBcmVhKCk7CisKKyAgICAvLyBSZWN1cnNpdmVs
eSBjbGVhciBkYW1hZ2UgZm9yIGFueSBleGlzdGluZyBzdXJmYWNlLgorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNsZWFy
RGFtYWdlRm9yQWxsU3VyZmFjZXMobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworfQorCiB2
b2lkIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUoQ0NMYXllckltcGwqIHJvb3QpCiB7CiAgICAgLy8g
VGhpcyBlbXVsYXRlcyBvbmx5IHRoZSBzdGVwcyB0aGF0IGFyZSByZWxldmFudCB0byB0ZXN0aW5n
IHRoZSBkYW1hZ2UgdHJhY2tlcjoKQEAgLTIyMiw2ICsyMzIsNyBAQCBURVNUX0YoQ0NEYW1hZ2VU
cmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yVXBkYXRlUmVjdHMpCiAKICAgICAvLyBDQVNFIDE6
IFNldHRpbmcgdGhlIHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUgY29ycmVzcG9uZGluZyBk
YW1hZ2UgdG8gdGhlIHN1cmZhY2UuCiAgICAgLy8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZh
Y2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMCwg
MTEsIDEyLCAxMykpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAK
QEAgLTIzMSw2ICsyNDIsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFt
YWdlRm9yVXBkYXRlUmVjdHMpCiAKICAgICAvLyBDQVNFIDI6IFRoZSBzYW1lIHVwZGF0ZSByZWN0
IHR3aWNlIGluIGEgcm93IHN0aWxsIHByb2R1Y2VzIHRoZSBzYW1lIGRhbWFnZS4KICAgICAvLwor
ICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQtPnNl
dFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDEwLCAxMSwgMTIsIDEzKSk7CiAgICAgZW11bGF0ZURyYXdp
bmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtMjM4
LDYgKzI1MCw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JV
cGRhdGVSZWN0cykKIAogICAgIC8vIENBU0UgMzogU2V0dGluZyBhIGRpZmZlcmVudCB1cGRhdGUg
cmVjdCBzaG91bGQgY2F1c2UgZGFtYWdlIG9uIHRoZSBuZXcgdXBkYXRlIHJlZ2lvbiwgYnV0IG5v
IGFkZGl0aW9uYWwgZXhwb3NlZCBvbGQgcmVnaW9uLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VG
b3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9h
dFJlY3QoMjAsIDI1LCAxLCAyKSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290Lmdl
dCgpKTsKIApAQCAtMjUzLDYgKzI2Niw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2
ZXJpZnlEYW1hZ2VGb3JQcm9wZXJ0eUNoYW5nZXMpCiAKICAgICAvLyBDQVNFIDE6IFRoZSBsYXll
cidzIHByb3BlcnR5IGNoYW5nZWQgZmxhZyB0YWtlcyBwcmlvcml0eSBvdmVyIHVwZGF0ZSByZWN0
LgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAg
ICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAsIDExLCAxMiwgMTMpKTsKICAgICBj
aGlsZC0+c2V0T3BhY2l0eSgwLjUpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CkBAIC0yNzEsMTAgKzI4NSwxMiBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwg
dmVyaWZ5RGFtYWdlRm9yUHJvcGVydHlDaGFuZ2VzKQogICAgIC8vICAgICAgICAgbm90IGp1c3Qg
dGhlIHVwZGF0ZVJlY3QuCiAKICAgICAvLyBDeWNsZSBvbmUgZnJhbWUgb2Ygbm8gY2hhbmdlLCBq
dXN0IHRvIHNhbml0eSBjaGVjayB0aGF0IHRoZSBuZXh0IHJlY3QgaXMgbm90IGJlY2F1c2Ugb2Yg
dGhlIG9sZCBkYW1hZ2Ugc3RhdGUuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290
LmdldCgpKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIEVY
UEVDVF9UUlVFKHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50
RGFtYWdlUmVjdCgpLmlzRW1wdHkoKSk7CiAKICAgICAvLyBUaGVuLCB0ZXN0IHRoZSBhY3R1YWwg
bGF5ZXIgbW92ZW1lbnQuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgp
KTsKICAgICBjaGlsZC0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgyMDAsIDIzMCkpOwogICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTI5OCw2ICszMTQsNyBAQCBU
RVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yVHJhbnNmb3JtZWRMYXll
cikKICAgICAvLyBOb3RlIGNhcmVmdWxseSwgdGhlIGFuY2hvciBpcyBhY3R1YWxseSBwYXJ0IG9m
IGxheWVyLT5wb3NpdGlvbigpLiBCeSBzZXR0aW5nIGFuY2hvcgogICAgIC8vIHRvICgwLjUsIDAu
NSksIHRoZSBsYXllcidzIHBvc2l0aW9uICgxMDAsIDEwMCkgbm93IHJlZmVycyB0byB0aGUgY2Vu
dGVyIG9mIHRoZQogICAgIC8vIGxheWVyLCBub3QgdGhlIGNvcm5lci4gVGhpcyBtZWFucyB0aGUg
bGF5ZXIgaGFzIGFjdHVhbGx5IGNoYW5nZWQgcG9zaXRpb24uCisgICAgY2xlYXJEYW1hZ2VGb3JB
bGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgwLjUsIDAuNSkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CiAKQEAgLTMwNyw2ICszMjQsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5
RGFtYWdlRm9yVHJhbnNmb3JtZWRMYXllcikKIAogICAgIC8vIFdpdGggdGhlIGFuY2hvciBvbiB0
aGUgbGF5ZXIncyBjZW50ZXIsIG5vdyB3ZSBjYW4gdGVzdCB0aGUgcm90YXRpb24gbW9yZQogICAg
IC8vIGludHVpdGl2ZWx5LCBzaW5jZSBpdCBhcHBsaWVzIGFib3V0IHRoZSBsYXllcidzIGFuY2hv
ci4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxk
LT5zZXRUcmFuc2Zvcm0ocm90YXRpb24pOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CiAKQEAgLTM1NSw2ICszNzMsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVz
dCwgdmVyaWZ5RGFtYWdlRm9yUGVyc3BlY3RpdmVDbGlwcGVkTGF5ZXIpCiAgICAgRVhQRUNUX1RS
VUUoY2xpcHBlZCk7CiAKICAgICAvLyBEYW1hZ2UgdGhlIGNoaWxkIHdpdGhvdXQgbW92aW5nIGl0
LgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQt
PnNldE9wYWNpdHkoMC41KTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkp
OwogCkBAIC0zNzQsMTIgKzM5MywxNCBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVy
aWZ5RGFtYWdlRm9yQmx1cnJlZFN1cmZhY2UpCiAgICAgZmlsdGVycy5hcHBlbmQoV2ViRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGVCbHVyRmlsdGVyKDUpKTsKICAgICBpbnQgb3V0c2V0VG9wLCBvdXRz
ZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OwogICAgIGZpbHRlcnMuZ2V0T3V0c2V0
cyhvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQpOwotICAg
IHJvb3QtPnNldEZpbHRlcnMoZmlsdGVycyk7CiAKICAgICAvLyBTZXR0aW5nIHRoZSBmaWx0ZXIg
d2lsbCBkYW1hZ2UgdGhlIHdob2xlIHN1cmZhY2UuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJm
YWNlcyhyb290LmdldCgpKTsKKyAgICByb290LT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwogICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAgICAvLyBTZXR0aW5nIHRoZSB1
cGRhdGUgcmVjdCBzaG91bGQgY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZGFtYWdlIHRvIHRoZSBz
dXJmYWNlLCBibHVycmVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBibHVyIGZpbHRlci4KKyAg
ICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkLT5zZXRV
cGRhdGVSZWN0KEZsb2F0UmVjdCgxMCwgMTEsIDEyLCAxMykpOwogICAgIGVtdWxhdGVEcmF3aW5n
T25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTQwNCwxNiArNDI1LDE3IEBAIFRFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkKQog
ICAgIGZpbHRlcnMuYXBwZW5kKFdlYkZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlQmx1ckZpbHRlcigy
KSk7CiAgICAgaW50IG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0
TGVmdDsKICAgICBmaWx0ZXJzLmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0
c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsKLSAgICBjaGlsZDEtPnNldEJhY2tncm91bmRGaWx0ZXJz
KGZpbHRlcnMpOwogCiAgICAgLy8gU2V0dGluZyB0aGUgZmlsdGVyIHdpbGwgZGFtYWdlIHRoZSB3
aG9sZSBzdXJmYWNlLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7
CisgICAgY2hpbGQxLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKICAgICBlbXVsYXRl
RHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCiAgICAgLy8gQ0FTRSAxOiBTZXR0aW5nIHRo
ZSB1cGRhdGUgcmVjdCBzaG91bGQgY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZGFtYWdlIHRvCiAg
ICAgLy8gdGhlIHN1cmZhY2UsIGJsdXJyZWQgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNoaWxk
J3MgYmFja2dyb3VuZCBibHVyCiAgICAgLy8gZmlsdGVyLgorICAgIGNsZWFyRGFtYWdlRm9yQWxs
U3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgcm9vdC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3Qo
Mjk3LCAyOTcsIDIsIDIpKTsKLQogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQo
KSk7CiAKICAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNl
KCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTQyOCw4ICs0NTAs
OCBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQmFja2dyb3Vu
ZEJsdXJyZWRDaGlsZCkKICAgICAvLyB0aGUgc3VyZmFjZSwgYmx1cnJlZCBiYXNlZCBvbiB0aGUg
c2l6ZSBvZiB0aGUgY2hpbGQncyBiYWNrZ3JvdW5kIGJsdXIKICAgICAvLyBmaWx0ZXIuIFNpbmNl
IHRoZSBkYW1hZ2UgZXh0ZW5kcyB0byB0aGUgcmlnaHQvYm90dG9tIG91dHNpZGUgb2YgdGhlCiAg
ICAgLy8gYmx1cnJlZCBsYXllciwgb25seSB0aGUgbGVmdC90b3Agc2hvdWxkIGVuZCB1cCBleHBh
bmRlZC4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHJv
b3QtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDI5NywgMjk3LCAzMCwgMzApKTsKLQogICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAgICByb290RGFtYWdlUmVjdCA9
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVj
dCgpOwpAQCAtNDQzLDggKzQ2NSw4IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkKQogCiAgICAgLy8gQ0FTRSAzOiBTZXR0
aW5nIHRoaXMgdXBkYXRlIHJlY3Qgb3V0c2lkZSB0aGUgYmx1cnJlZCBjb250ZW50Qm91bmRzIG9m
IHRoZSBibHVycmVkCiAgICAgLy8gY2hpbGQxIHdpbGwgbm90IGNhdXNlIGl0IHRvIGJlIGV4cGFu
ZGVkLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgcm9v
dC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMzAsIDMwLCAyLCAyKSk7Ci0KICAgICBlbXVsYXRl
RHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCiAgICAgcm9vdERhbWFnZVJlY3QgPSByb290
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsK
QEAgLTQ1NSw4ICs0NzcsOCBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFt
YWdlRm9yQmFja2dyb3VuZEJsdXJyZWRDaGlsZCkKIAogICAgIC8vIENBU0UgNDogU2V0dGluZyB0
aGlzIHVwZGF0ZSByZWN0IGluc2lkZSB0aGUgYmx1cnJlZCBjb250ZW50Qm91bmRzIGJ1dCBvdXRz
aWRlIHRoZQogICAgIC8vIG9yaWdpbmFsIGNvbnRlbnRCb3VuZHMgb2YgdGhlIGJsdXJyZWQgY2hp
bGQxIHdpbGwgY2F1c2UgaXQgdG8gYmUgZXhwYW5kZWQuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxT
dXJmYWNlcyhyb290LmdldCgpKTsKICAgICByb290LT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCg5
OSwgOTksIDEsIDEpKTsKLQogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CiAKICAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNDcwLDggKzQ5Miw4IEBAIFRFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxk
KQogCiAgICAgLy8gQ0FTRSA1OiBTZXR0aW5nIHRoZSB1cGRhdGUgcmVjdCBvbiBjaGlsZDIsIHdo
aWNoIGlzIGFib3ZlIGNoaWxkMSwgd2lsbAogICAgIC8vIG5vdCBnZXQgYmx1cnJlZCBieSBjaGls
ZDEsIHNvIGl0IGRvZXMgbm90IG5lZWQgdG8gZ2V0IGV4cGFuZGVkLgorICAgIGNsZWFyRGFtYWdl
Rm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQyLT5zZXRVcGRhdGVSZWN0KEZs
b2F0UmVjdCgwLCAwLCAxLCAxKSk7Ci0KICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3Qu
Z2V0KCkpOwogCiAgICAgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTQ4MSw4ICs1MDMsOCBAQCBU
RVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQmFja2dyb3VuZEJsdXJy
ZWRDaGlsZCkKIAogICAgIC8vIENBU0UgNjogU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgb24gY2hp
bGQxIHdpbGwgYWxzbyBibHVyIHRoZSBkYW1hZ2UsIHNvCiAgICAgLy8gdGhhdCBhbnkgcGl4ZWxz
IG5lZWRlZCBmb3IgdGhlIGJsdXIgYXJlIHJlZHJhd24gaW4gdGhlIGN1cnJlbnQgZnJhbWUuCisg
ICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZDEtPnNl
dFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpKTsKLQogICAgIGVtdWxhdGVEcmF3aW5n
T25lRnJhbWUocm9vdC5nZXQoKSk7CiAKICAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNDk4
LDYgKzUyMCw5IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JB
ZGRpbmdBbmRSZW1vdmluZ0xheWVyKQogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNy
ZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOwogICAgIENDTGF5ZXJJbXBsKiBj
aGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOwogCisgICAgLy8gQ0FTRSAxOiBBZGRp
bmcgYSBuZXcgbGF5ZXIgc2hvdWxkIGNhdXNlIHRoZSBhcHByb3ByaWF0ZSBkYW1hZ2UuCisgICAg
Ly8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHsKICAg
ICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMp
OwogICAgICAgICBjaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAwLCAzODApKTsKQEAg
LTUwNiw5ICs1MzEsNiBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdl
Rm9yQWRkaW5nQW5kUmVtb3ZpbmdMYXllcikKICAgICAgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CiAgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMi5yZWxlYXNlKCkpOwogICAg
IH0KLQotICAgIC8vIENBU0UgMTogQWRkaW5nIGEgbmV3IGxheWVyIHNob3VsZCBjYXVzZSB0aGUg
YXBwcm9wcmlhdGUgZGFtYWdlLgotICAgIC8vCiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShy
b290LmdldCgpKTsKIAogICAgIC8vIFNhbml0eSBjaGVjayAtIGFsbCAzIGxheWVycyBzaG91bGQg
YmUgb24gdGhlIHNhbWUgcmVuZGVyIHN1cmZhY2U7IHJlbmRlciBzdXJmYWNlcyBhcmUgdGVzdGVk
IGVsc2V3aGVyZS4KQEAgLTUyMSw2ICs1NDMsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVz
dCwgdmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVtb3ZpbmdMYXllcikKICAgICAvLyAgICAgICAg
IGxhc3QgdXBkYXRlIHJlY3QuCiAKICAgICAvLyBBZHZhbmNlIG9uZSBmcmFtZSB3aXRob3V0IGRh
bWFnZSBzbyB0aGF0IHdlIGtub3cgdGhlIGRhbWFnZSByZWN0IGlzIG5vdCBsZWZ0b3ZlciBmcm9t
IHRoZSBwcmV2aW91cyBjYXNlLgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5n
ZXQoKSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBFWFBF
Q1RfVFJVRShyb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERh
bWFnZVJlY3QoKS5pc0VtcHR5KCkpOwogCkBAIC01MzgsNiArNTYxLDcgQEAgVEVTVF9GKENDRGFt
YWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvck5ld1VuY2hhbmdlZExheWVyKQogCiAgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhPbmVT
dXJmYWNlKCk7CiAKKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwog
ICAgIHsKICAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDMpOwogICAgICAgICBjaGlsZDItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoNDAwLCAz
ODApKTsKQEAgLTU1MSw3ICs1NzUsNiBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVy
aWZ5RGFtYWdlRm9yTmV3VW5jaGFuZ2VkTGF5ZXIpCiAgICAgICAgIEFTU0VSVF9UUlVFKGNoaWxk
Mi0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSk7CiAgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxk
Mi5yZWxlYXNlKCkpOwogICAgIH0KLQogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CiAKICAgICAvLyBTYW5pdHkgY2hlY2sgLSBhbGwgMyBsYXllcnMgc2hvdWxkIGJlIG9u
IHRoZSBzYW1lIHJlbmRlciBzdXJmYWNlOyByZW5kZXIgc3VyZmFjZXMgYXJlIHRlc3RlZCBlbHNl
d2hlcmUuCkBAIC01NjYsNiArNTg5LDggQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZl
cmlmeURhbWFnZUZvck11bHRpcGxlTGF5ZXJzKQogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOwogICAgIENDTGF5ZXJJ
bXBsKiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOwogCisgICAgLy8gSW4gdGhp
cyB0ZXN0IHdlIGRvbid0IHdhbnQgdGhlIGFib3ZlIHRyZWUgbWFuaXB1bGF0aW9uIHRvIGJlIGNv
bnNpZGVyZWQgcGFydCBvZiB0aGUgc2FtZSBmcmFtZS4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1
cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHsKICAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBj
aGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOwogICAgICAgICBjaGlsZDItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoNDAwLCAzODApKTsKQEAgLTU3NSwxMyArNjAwLDEyIEBAIFRFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JNdWx0aXBsZUxheWVycykKICAgICAg
ICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQyLnJlbGVhc2UoKSk7CiAgICAgfQogICAgIENDTGF5ZXJJ
bXBsKiBjaGlsZDIgPSByb290LT5jaGlsZHJlbigpWzFdLmdldCgpOwotCi0gICAgLy8gSW4gdGhp
cyB0ZXN0IHdlIGRvbid0IHdhbnQgdGhlIGFib3ZlIHRyZWUgbWFuaXB1bGF0aW9uIHRvIGJlIGNv
bnNpZGVyZWQgcGFydCBvZiB0aGUgc2FtZSBmcmFtZS4KICAgICBlbXVsYXRlRHJhd2luZ09uZUZy
YW1lKHJvb3QuZ2V0KCkpOwogCiAgICAgLy8gRGFtYWdpbmcgdHdvIGxheWVycyBzaW11bHRhbmVv
dXNseSBzaG91bGQgY2F1c2UgY29tYmluZWQgZGFtYWdlLgogICAgIC8vIC0gY2hpbGQxIHVwZGF0
ZSByZWN0IGluIHN1cmZhY2Ugc3BhY2U6IEZsb2F0UmVjdCgxMDAsIDEwMCwgMSwgMik7CiAgICAg
Ly8gLSBjaGlsZDIgdXBkYXRlIHJlY3QgaW4gc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDQwMCwg
MzgwLCAzLCA0KTsKKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwog
ICAgIGNoaWxkMS0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMikpOwogICAgIGNo
aWxkMi0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMCwgMCwgMywgNCkpOwogICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CkBAIC02MDAsNiArNjI0LDcgQEAgVEVTVF9GKEND
RGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvck5lc3RlZFN1cmZhY2VzKQogCiAgICAg
Ly8gQ0FTRSAxOiBEYW1hZ2UgdG8gYSBkZXNjZW5kYW50IHN1cmZhY2Ugc2hvdWxkIHByb3BhZ2F0
ZSBwcm9wZXJseSB0byBhbmNlc3RvciBzdXJmYWNlLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VG
b3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBncmFuZENoaWxkMS0+c2V0T3BhY2l0eSgw
LjUpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAgICAgY2hpbGRE
YW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3Vy
cmVudERhbWFnZVJlY3QoKTsKQEAgLTYxMCw2ICs2MzUsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFj
a2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTmVzdGVkU3VyZmFjZXMpCiAgICAgLy8gQ0FTRSAyOiBT
YW1lIGFzIHByZXZpb3VzIGNhc2UsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgZGFtYWdlIGVsc2V3aGVy
ZSB0aGF0IHNob3VsZCBiZSBwcm9wZXJseSB1bmlvbmVkLgogICAgIC8vIC0gY2hpbGQxIHN1cmZh
Y2UgZGFtYWdlIGluIHJvb3Qgc3VyZmFjZSBzcGFjZTogRmxvYXRSZWN0KDMwMCwgMzAwLCA2LCA4
KTsKICAgICAvLyAtIGNoaWxkMiBkYW1hZ2UgaW4gcm9vdCBzdXJmYWNlIHNwYWNlOiBGbG9hdFJl
Y3QoMTEsIDExLCAxOCwgMTgpOworICAgIGNsZWFyRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5n
ZXQoKSk7CiAgICAgZ3JhbmRDaGlsZDEtPnNldE9wYWNpdHkoMC43Zik7CiAgICAgY2hpbGQyLT5z
ZXRPcGFjaXR5KDAuN2YpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CkBAIC02MzQsNiArNjYwLDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURh
bWFnZUZvclN1cmZhY2VDaGFuZ2VGcm9tRGVzY2VuZGFudExheWVyKQogICAgIEZsb2F0UmVjdCBj
aGlsZERhbWFnZVJlY3Q7CiAgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OwogCisgICAgY2xl
YXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBncmFuZENoaWxkMS0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgxOTUsIDIwNSkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJh
bWUocm9vdC5nZXQoKSk7CiAgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJm
YWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKQEAgLTY2NSw2ICs2
OTIsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yU3VyZmFj
ZUNoYW5nZUZyb21BbmNlc3RvckxheWVyKQogICAgIEZsb2F0UmVjdCBjaGlsZERhbWFnZVJlY3Q7
CiAgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OwogCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxT
dXJmYWNlcyhyb290LmdldCgpKTsKICAgICBjaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
NTAsIDUwKSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBj
aGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigp
LT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNjg4LDYgKzcxNiw3IEBAIFRFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ1JlbmRlclN1cmZh
Y2VzKQogCiAgICAgLy8gQ0FTRSAxOiBJZiBhIGRlc2NlbmRhbnQgc3VyZmFjZSBkaXNhcHBlYXJz
LCBpdHMgZW50aXJlIG9sZCBhcmVhIGJlY29tZXMgZXhwb3NlZC4KICAgICAvLworICAgIGNsZWFy
RGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQxLT5zZXRPcGFjaXR5
KDEpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTcwMSwx
MSArNzMwLDEzIEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JB
ZGRpbmdBbmRSZW1vdmluZ1JlbmRlclN1cmZhY2VzKQogICAgIC8vIENBU0UgMjogSWYgYSBkZXNj
ZW5kYW50IHN1cmZhY2UgYXBwZWFycywgaXRzIGVudGlyZSBvbGQgYXJlYSBiZWNvbWVzIGV4cG9z
ZWQuCiAKICAgICAvLyBDeWNsZSBvbmUgZnJhbWUgb2Ygbm8gY2hhbmdlLCBqdXN0IHRvIHNhbml0
eSBjaGVjayB0aGF0IHRoZSBuZXh0IHJlY3QgaXMgbm90IGJlY2F1c2Ugb2YgdGhlIG9sZCBkYW1h
Z2Ugc3RhdGUuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAg
ICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIHJvb3REYW1hZ2VSZWN0
ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VS
ZWN0KCk7CiAgICAgRVhQRUNUX1RSVUUocm9vdERhbWFnZVJlY3QuaXNFbXB0eSgpKTsKIAogICAg
IC8vIFRoZW4gY2hhbmdlIHRoZSB0cmVlIHNvIHRoYXQgdGhlIHJlbmRlciBzdXJmYWNlIGlzIGFk
ZGVkIGJhY2suCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAg
ICBjaGlsZDEtPnNldE9wYWNpdHkoMC41KTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOwogCkBAIC03MjksNiArNzYwLDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRl
c3QsIHZlcmlmeU5vRGFtYWdlV2hlbk5vdGhpbmdDaGFuZ2VkKQogCiAgICAgLy8gQ0FTRSAxOiBJ
ZiBub3RoaW5nIGNoYW5nZXMsIHRoZSBkYW1hZ2UgcmVjdCBzaG91bGQgYmUgZW1wdHkuCiAgICAg
Ly8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGVtdWxh
dGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3Qo
KTsKICAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNzM3LDYgKzc2OSw3IEBAIFRFU1RfRihD
Q0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlOb0RhbWFnZVdoZW5Ob3RoaW5nQ2hhbmdlZCkKIAog
ICAgIC8vIENBU0UgMjogSWYgbm90aGluZyBjaGFuZ2VzIHR3aWNlIGluIGEgcm93LCB0aGUgZGFt
YWdlIHJlY3Qgc2hvdWxkIHN0aWxsIGJlIGVtcHR5LgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VG
b3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJv
b3QuZ2V0KCkpOwogICAgIGNoaWxkRGFtYWdlUmVjdCA9IGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
LT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CiAgICAgcm9vdERhbWFnZVJl
Y3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKQEAgLTc1Myw2ICs3ODYsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwg
dmVyaWZ5Tm9EYW1hZ2VGb3JVcGRhdGVSZWN0VGhhdERvZXNOb3REcmF3Q29udGVudCkKIAogICAg
IC8vIEluIG91ciBzcGVjaWZpYyB0cmVlLCB0aGUgdXBkYXRlIHJlY3Qgb2YgY2hpbGQxIHNob3Vs
ZCBub3QgY2F1c2UgYW55IGRhbWFnZSB0byBhbnkKICAgICAvLyBzdXJmYWNlIGJlY2F1c2UgaXQg
ZG9lcyBub3QgYWN0dWFsbHkgZHJhdyBjb250ZW50LgorICAgIGNsZWFyRGFtYWdlRm9yQWxsU3Vy
ZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgY2hpbGQxLT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgw
LCAwLCAxLCAyKSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAg
ICBjaGlsZERhbWFnZVJlY3QgPSBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tl
cigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtNzg4LDYgKzgyMiw3IEBAIFRFU1RfRihDQ0Rh
bWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JSZXBsaWNhKQogCiAgICAgLy8gQ0FTRSAx
OiBhZGRpbmcgYSByZWZsZWN0aW9uIGFib3V0IHRoZSBsZWZ0IGVkZ2Ugb2YgZ3JhbmRDaGlsZDEu
CiAgICAgLy8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAg
IHsKICAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxpY2EgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDcpOwogICAgICAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQ6Onplcm8oKSk7CkBAIC04MTEsNiArODQ2LDcgQEAgVEVTVF9GKENDRGFt
YWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxpY2EpCiAKICAgICAvLyBDQVNFIDI6
IG1vdmluZyB0aGUgZGVzY2VuZGFudCBzdXJmYWNlIHNob3VsZCBjYXVzZSBib3RoIHRoZSBvcmln
aW5hbCBhbmQgcmVmbGVjdGVkCiAgICAgLy8gICAgICAgICBhcmVhcyB0byBiZSBkYW1hZ2VkIG9u
IHRoZSB0YXJnZXQuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsK
ICAgICBJbnRSZWN0IG9sZENvbnRlbnRSZWN0ID0gY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmNv
bnRlbnRSZWN0KCk7CiAgICAgZ3JhbmRDaGlsZDEtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoMTk1
LjAsIDIwNS4wKSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKQEAg
LTgzMCw2ICs4NjYsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdl
Rm9yUmVwbGljYSkKIAogICAgIC8vIENBU0UgMzogcmVtb3ZpbmcgdGhlIHJlZmxlY3Rpb24gc2hv
dWxkIGNhdXNlIHRoZSBlbnRpcmUgcmVnaW9uIGluY2x1ZGluZyByZWZsZWN0aW9uCiAgICAgLy8g
ICAgICAgICB0byBkYW1hZ2UgdGhlIHRhcmdldCBzdXJmYWNlLgorICAgIGNsZWFyRGFtYWdlRm9y
QWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgZ3JhbmRDaGlsZDEtPnNldFJlcGxpY2FMYXll
cihudWxscHRyKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAg
IEFTU0VSVF9FUShvbGRDb250ZW50UmVjdC53aWR0aCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKS53aWR0aCgpKTsKQEAgLTg1MSw2ICs4ODgsOCBAQCBURVNUX0YoQ0NE
YW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTWFzaykKICAgICAvLyBJbiB0aGUgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGFtYWdlIHRyYWNrZXIsIGNoYW5nZXMgdG8gbWFz
ayBsYXllcnMgc2hvdWxkCiAgICAgLy8gZGFtYWdlIHRoZSBlbnRpcmUgY29ycmVzcG9uZGluZyBz
dXJmYWNlLgogCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKKwog
ICAgIC8vIFNldCB1cCB0aGUgbWFzayBsYXllci4KICAgICB7CiAgICAgICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gbWFza0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsKQEAgLTg3OCw2ICs5
MTcsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTWFzaykK
IAogICAgIC8vIENBU0UgMTogdGhlIHVwZGF0ZVJlY3Qgb24gYSBtYXNrIGxheWVyIHNob3VsZCBk
YW1hZ2UgdGhlIGVudGlyZSB0YXJnZXQgc3VyZmFjZS4KICAgICAvLworICAgIGNsZWFyRGFtYWdl
Rm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgbWFza0xheWVyLT5zZXRVcGRhdGVSZWN0
KEZsb2F0UmVjdCgxLCAyLCAzLCA0KSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290
LmdldCgpKTsKICAgICBGbG9hdFJlY3QgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1
cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwpAQCAtODg3LDEx
ICs5MjcsMTMgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvck1h
c2spCiAgICAgLy8KIAogICAgIC8vIEFkdmFuY2Ugb25lIGZyYW1lIHdpdGhvdXQgZGFtYWdlIHNv
IHRoYXQgd2Uga25vdyB0aGUgZGFtYWdlIHJlY3QgaXMgbm90IGxlZnRvdmVyIGZyb20gdGhlIHBy
ZXZpb3VzIGNhc2UuCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsK
ICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxkRGFtYWdl
UmVjdCA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERh
bWFnZVJlY3QoKTsKICAgICBFWFBFQ1RfVFJVRShjaGlsZERhbWFnZVJlY3QuaXNFbXB0eSgpKTsK
IAogICAgIC8vIFRoZW4gdGVzdCB0aGUgcHJvcGVydHkgY2hhbmdlLgorICAgIGNsZWFyRGFtYWdl
Rm9yQWxsU3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgbWFza0xheWVyLT5zZXRPcGFjaXR5KDAu
NSk7CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICBjaGlsZERh
bWFnZVJlY3QgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CkBAIC05MDEsMTEgKzk0MywxMyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFj
a2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yTWFzaykKICAgICAvLwogCiAgICAgLy8gQWR2YW5jZSBv
bmUgZnJhbWUgd2l0aG91dCBkYW1hZ2Ugc28gdGhhdCB3ZSBrbm93IHRoZSBkYW1hZ2UgcmVjdCBp
cyBub3QgbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2FzZS4KKyAgICBjbGVhckRhbWFnZUZv
ckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CiAgICAgY2hpbGREYW1hZ2VSZWN0ID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKS0+
ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwogICAgIEVYUEVDVF9UUlVFKGNo
aWxkRGFtYWdlUmVjdC5pc0VtcHR5KCkpOwogCiAgICAgLy8gVGhlbiB0ZXN0IG1hc2sgcmVtb3Zh
bC4KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIGNoaWxk
LT5zZXRNYXNrTGF5ZXIobnVsbHB0cik7CiAgICAgQVNTRVJUX1RSVUUoY2hpbGQtPmxheWVyUHJv
cGVydHlDaGFuZ2VkKCkpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7
CkBAIC05MjYsNiArOTcwLDggQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURh
bWFnZUZvclJlcGxpY2FNYXNrKQogICAgIC8vIENoYW5nZXMgdG8gYSByZXBsaWNhJ3MgbWFzayBz
aG91bGQgbm90IGRhbWFnZSB0aGUgb3JpZ2luYWwgc3VyZmFjZSwgYmVjYXVzZSBpdCBpcwogICAg
IC8vIG5vdCBtYXNrZWQuIEJ1dCBpdCBkb2VzIGRhbWFnZSB0aGUgYW5jZXN0b3IgdGFyZ2V0IHN1
cmZhY2UuCiAKKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOworCiAg
ICAgLy8gQ3JlYXRlIGEgcmVmbGVjdGlvbiBhYm91dCB0aGUgbGVmdCBlZGdlIG9mIGdyYW5kQ2hp
bGQxLgogICAgIHsKICAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMVJlcGxp
Y2EgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDYpOwpAQCAtOTU0LDYgKzEwMDAsNyBAQCBURVNUX0Yo
Q0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYU1hc2spCiAgICAgQVNT
RVJUX1RSVUUoZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CiAKICAgICAvLyBDQVNFIDE6
IGEgcHJvcGVydHkgY2hhbmdlIG9uIHRoZSBtYXNrIHNob3VsZCBkYW1hZ2Ugb25seSB0aGUgcmVm
bGVjdGVkIHJlZ2lvbiBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgY2xlYXJEYW1hZ2VGb3JB
bGxTdXJmYWNlcyhyb290LmdldCgpKTsKICAgICByZXBsaWNhTWFza0xheWVyLT5zZXRPcGFjaXR5
KDAuNmYpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTk2
NSw2ICsxMDEyLDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZv
clJlcGxpY2FNYXNrKQogCiAgICAgLy8gQ0FTRSAyOiByZW1vdmluZyB0aGUgcmVwbGljYSBtYXNr
IGRhbWFnZXMgb25seSB0aGUgcmVmbGVjdGVkIHJlZ2lvbiBvbiB0aGUgdGFyZ2V0IHN1cmZhY2Uu
CiAgICAgLy8KKyAgICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAg
IGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0TWFza0xheWVyKG51bGxwdHIpOwogICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CiAKQEAgLTk4NSw2ICsxMDMzLDggQEAgVEVTVF9G
KENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxpY2FNYXNrV2l0aEFuY2hv
cikKICAgICAvLyBpbmNvcnJlY3Qgb2xkIGNvZGUgaW5jb3JyZWN0bHkgYWNjb3VudGVkIGZvciB0
aGUgYW5jaG9yIGZvciB0aGUgcmVwbGljYS4gQQogICAgIC8vIG5vbi16ZXJvIGFuY2hvciBwb2lu
dCBzaG91bGQgbm90IGFmZmVjdCB0aGUgcmVwbGljYSByZWZsZWN0aW9uLgogCisgICAgY2xlYXJE
YW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsKKwogICAgIGdyYW5kQ2hpbGQxLT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50KDEuMCwgMC4wKSk7IC8vIFRoaXMgaXMgdGhlIGFuY2hvciBi
ZWluZyB0ZXN0ZWQuCiAKICAgICB7CkBAIC0xMDE0LDYgKzEwNjQsNyBAQCBURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yUmVwbGljYU1hc2tXaXRoQW5jaG9yKQogICAg
IEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOwogCiAgICAgLy8gQSBw
cm9wZXJ0eSBjaGFuZ2Ugb24gdGhlIHJlcGxpY2FNYXNrIHNob3VsZCBkYW1hZ2UgdGhlIHJlZmxl
Y3RlZCByZWdpb24gb24gdGhlIHRhcmdldCBzdXJmYWNlLgorICAgIGNsZWFyRGFtYWdlRm9yQWxs
U3VyZmFjZXMocm9vdC5nZXQoKSk7CiAgICAgcmVwbGljYU1hc2tMYXllci0+c2V0T3BhY2l0eSgw
LjZmKTsKICAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOwogCkBAIC0xMDI5
LDYgKzEwODAsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlV2hl
bkZvcmNlZEZ1bGxEYW1hZ2UpCiAgICAgLy8gQ2FzZSAxOiBUaGlzIHRlc3QgZW5zdXJlcyB0aGF0
IHdoZW4gdGhlIHRyYWNrZXIgaXMgZm9yY2VkIHRvIGhhdmUgZnVsbCBkYW1hZ2UsIHRoYXQKICAg
ICAvLyAgICAgICAgIGl0IHRha2VzIHByaW9yaXR5IG92ZXIgYW55IG90aGVyIHBhcnRpYWwgZGFt
YWdlLgogICAgIC8vCisgICAgY2xlYXJEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290LmdldCgpKTsK
ICAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMTAsIDExLCAxMiwgMTMpKTsKICAg
ICByb290LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Zm9yY2VGdWxsRGFtYWdl
TmV4dFVwZGF0ZSgpOwogICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CkBA
IC0xMDM4LDYgKzEwOTAsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFt
YWdlV2hlbkZvcmNlZEZ1bGxEYW1hZ2UpCiAgICAgLy8gQ2FzZSAyOiBBbiBhZGRpdGlvbmFsIHNh
bml0eSBjaGVjayB0aGF0IGZvcmNpbmcgZnVsbCBkYW1hZ2Ugd29ya3MgZXZlbiB3aGVuIG5vdGhp
bmcKICAgICAvLyAgICAgICAgIG9uIHRoZSBsYXllciB0cmVlIGNoYW5nZWQuCiAgICAgLy8KKyAg
ICBjbGVhckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOwogICAgIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5mb3JjZUZ1bGxEYW1hZ2VOZXh0VXBkYXRlKCk7
CiAgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKICAgICByb290RGFtYWdl
UmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFt
YWdlUmVjdCgpOwpAQCAtMTA2MSw0ICsxMTE0LDM2IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJU
ZXN0LCB2ZXJpZnlEYW1hZ2VGb3JFbXB0eUxheWVyTGlzdCkKICAgICBFWFBFQ1RfVFJVRShkYW1h
Z2VSZWN0LmlzRW1wdHkoKSk7CiB9CiAKK1RFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJp
ZnlEYW1hZ2VBY2N1bXVsYXRlc1VudGlsUmVzZXQpCit7CisgICAgLy8gSWYgZGFtYWdlIGlzIG5v
dCBjbGVhcmVkLCBpdCBzaG91bGQgYWNjdW11bGF0ZS4KKworICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOworICAgIEND
TGF5ZXJJbXBsKiBjaGlsZCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBjbGVh
ckRhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3QuZ2V0KCkpOworICAgIGNoaWxkLT5zZXRVcGRhdGVS
ZWN0KEZsb2F0UmVjdCgxMCwgMTEsIDEsIDIpKTsKKyAgICBlbXVsYXRlRHJhd2luZ09uZUZyYW1l
KHJvb3QuZ2V0KCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrIGRhbWFnZSBhZnRlciB0aGUgZmly
c3QgZnJhbWU7IHRoaXMgaXNudCB0aGUgYWN0dWFsIHRlc3QgeWV0LgorICAgIEZsb2F0UmVjdCBy
b290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5j
dXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgx
MTAsIDExMSwgMSwgMiksIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIE5ldyBkYW1hZ2UsIHdp
dGhvdXQgaGF2aW5nIGNsZWFyZWQgdGhlIHByZXZpb3VzIGRhbWFnZSwgc2hvdWxkIGJlIHVuaW9u
ZWQgdG8gdGhlIHByZXZpb3VzIG9uZS4KKyAgICBjaGlsZC0+c2V0VXBkYXRlUmVjdChGbG9hdFJl
Y3QoMjAsIDI1LCAxLCAyKSk7CisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJh
Y2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZs
b2F0UmVjdCgxMTAsIDExMSwgMTEsIDE2KSwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gSWYg
d2Ugbm90aWZ5IHRoZSBkYW1hZ2UgdHJhY2tlciB0aGF0IHdlIGRyZXcgdGhlIGRhbWFnZWQgYXJl
YSwgdGhlbiBkYW1hZ2Ugc2hvdWxkIGJlIGVtcHRpZWQuCisgICAgcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5kYW1hZ2VUcmFja2VyKCktPmRpZERyYXdEYW1hZ2VkQXJlYSgpOworICAgIHJvb3REYW1h
Z2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnRE
YW1hZ2VSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUocm9vdERhbWFnZVJlY3QuaXNFbXB0eSgpKTsK
KworICAgIC8vIERhbWFnZSBzaG91bGQgcmVtYWluIGVtcHR5IGV2ZW4gYWZ0ZXIgb25lIGZyYW1l
LCBzaW5jZSB0aGVyZSdzIHlldCBubyBuZXcgZGFtYWdlCisgICAgZW11bGF0ZURyYXdpbmdPbmVG
cmFtZShyb290LmdldCgpKTsKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIEVYUEVDVF9U
UlVFKHJvb3REYW1hZ2VSZWN0LmlzRW1wdHkoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>