<?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>78549</bug_id>
          
          <creation_ts>2012-02-13 16:20:02 -0800</creation_ts>
          <short_desc>[Chromium] New CCOcclusionTracker class with tests</short_desc>
          <delta_ts>2012-02-22 19:05:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>555732</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-13 16:20:02 -0800</bug_when>
    <thetext>[Chromium] New CCOcclusionTracker class with tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555737</commentid>
    <comment_count>1</comment_count>
      <attachid>126861</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-13 16:31:19 -0800</bug_when>
    <thetext>Created attachment 126861
Patch

Create the CCOcclusionTracker object, along with unit tests to verify its functionality.

The object encapsulates the logic of CCLayerTreeHost&apos;s paint culling, and CCQuadCuller&apos;s draw culling together in an object that can be used for both scenarios.

It tracks occlusion within the target surface, and within screen space. You can do a simple occluded() true/false test, or give it a rect in content space, and it
will return a sub-rect that contains all the unoccluded parts (in both the target surface and screen space) of the original rect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555828</commentid>
    <comment_count>2</comment_count>
      <attachid>126861</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-13 18:09:18 -0800</bug_when>
    <thetext>Comment on attachment 126861
Patch

For @wjmaclean review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556573</commentid>
    <comment_count>3</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-02-14 13:59:46 -0800</bug_when>
    <thetext>Overall comments: 

Generally, looks good.

I&apos;ve heard some murmurings that &quot;RenderSurfaces&quot; could be on the road to extinction. Best to find out if that&apos;s true, and how (if at all) it will affect this CL.

It seems expensive computing both both &quot;Screen-then-Target-surface, or Target-surface-then-Screen&quot; in unoccluded{Surface}ContentRect. Is there no way to avoid this and predict the correct (conservative) occlusion in advance?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h
&gt;
&gt; 43 template&lt;typename RenderSurfaceType&gt; void enterTargetRenderSurface(RenderSurfaceType* newTarget);
&gt; 44    template&lt;typename RenderSurfaceType&gt; void leaveToTargetRenderSurface(RenderSurfaceType* newTarget);

Seems awkward ... seems like they&apos;re the same, just the second assumes we&apos;re already in a target surface? Or are the names just misleading?

&gt; 51 template&lt;typename LayerType&gt; bool occluded(LayerType*, const IntRect&amp; contentRect) const;
&gt; 52    // Gives an unoccluded sub-rect of |contentRect| in the content space of the layer. Used when considering occlusion for a layer that paints/draws something.

Comment doesn&apos;t seem to match.

&gt; 65    FloatQuad transformedBoundsQuad = transform.mapQuad(FloatQuad(centeredBounds));
&gt; 66    if (!transformedBoundsQuad.isRectilinear())
&gt; 67        return Region();

Add comment specifying what transform types will lead to rectilinear bounds.

&gt; 118    // Scale from content space to layer space
&gt; 119    transform.scaleNonUniform(boundsInLayerSpace.width() / static_cast&lt;double&gt;(boundsInContentSpace.width()),
&gt; 120                              boundsInLayerSpace.height() / static_cast&lt;double&gt;(boundsInContentSpace.height()));

Can this potentially fail for non-trivial transforms? E.g. rotation? Or is the transform from content to layer space always assumed to be translation + scale?I.e., how do we know when this is safe or is it always? Ditto for similar computations below.

Nice occlusion diagrams :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556658</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-14 15:09:53 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Overall comments: 
&gt; 
&gt; Generally, looks good.

Thanks!

&gt; I&apos;ve heard some murmurings that &quot;RenderSurfaces&quot; could be on the road to extinction. Best to find out if that&apos;s true, and how (if at all) it will affect this CL.

They are getting layers so that we don&apos;t have all this layer-like state on a RenderSurface. In this case, it will change the loops which call CCOcclusion tracker, and clean them up some hopefully. The CCOcclusionTracker should be minimally affected, mostly in the transform calculation functions.

&gt; It seems expensive computing both both &quot;Screen-then-Target-surface, or Target-surface-then-Screen&quot; in unoccluded{Surface}ContentRect. Is there no way to avoid this and predict the correct (conservative) occlusion in advance?

Described it to @vollick briefly and he helped me see I can return the Rect for screen and target, and just take the intersection back in content space. This passes the unit tests for these functions that are somewhat particular, so it will be accurate enough. Thanks.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h
&gt; &gt;
&gt; &gt; 43 template&lt;typename RenderSurfaceType&gt; void enterTargetRenderSurface(RenderSurfaceType* newTarget);
&gt; &gt; 44    template&lt;typename RenderSurfaceType&gt; void leaveToTargetRenderSurface(RenderSurfaceType* newTarget);
&gt; 
&gt; Seems awkward ... seems like they&apos;re the same, just the second assumes we&apos;re already in a target surface? Or are the names just misleading?

The first is done when we see a new layer. It says &quot;hey we&apos;re in this target surface (if we weren&apos;t already)&quot;. The second is done when we see a contributing layer. It says &quot;hey we were in this target surface but now we&apos;re done with it, and moving up to its parent&quot;. It&apos;s a merge-up operation. I&apos;ll add comments.

&gt; &gt; 51 template&lt;typename LayerType&gt; bool occluded(LayerType*, const IntRect&amp; contentRect) const;
&gt; &gt; 52    // Gives an unoccluded sub-rect of |contentRect| in the content space of the layer. Used when considering occlusion for a layer that paints/draws something.
&gt; 
&gt; Comment doesn&apos;t seem to match.

The comment matches the function below it. I&apos;ll add one for occluded() too.

&gt; &gt; 65    FloatQuad transformedBoundsQuad = transform.mapQuad(FloatQuad(centeredBounds));
&gt; &gt; 66    if (!transformedBoundsQuad.isRectilinear())
&gt; &gt; 67        return Region();
&gt; 
&gt; Add comment specifying what transform types will lead to rectilinear bounds.

done.

&gt; &gt; 118    // Scale from content space to layer space
&gt; &gt; 119    transform.scaleNonUniform(boundsInLayerSpace.width() / static_cast&lt;double&gt;(boundsInContentSpace.width()),
&gt; &gt; 120                              boundsInLayerSpace.height() / static_cast&lt;double&gt;(boundsInContentSpace.height()));
&gt; 
&gt; Can this potentially fail for non-trivial transforms? E.g. rotation? Or is the transform from content to layer space always assumed to be translation + scale?I.e., how do we know when this is safe or is it always? Ditto for similar computations below.

content&lt;-&gt;layer space is only a scale.

&gt; Nice occlusion diagrams :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556673</commentid>
    <comment_count>5</comment_count>
      <attachid>127055</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-14 15:21:46 -0800</bug_when>
    <thetext>Created attachment 127055
Patch

For @enne review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558849</commentid>
    <comment_count>6</comment_count>
      <attachid>127505</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-16 20:17:54 -0800</bug_when>
    <thetext>Created attachment 127505
Patch

- make pointers const all over
- add the CSS filter stuff that was added to CCLayerTreeHost, and unit test for it!
- add finishedTargetRenderSurface() to do cleanup/processing for the surface once all layers have been visited in it.
- add surfaceOccluded() which tells if part of the surface is occluded (by things outside the surface), and unit tests for this!

and..
- add currentOcclusionInScreenSpace() and currentOcclusionInTargetSpace() temporarily to make transition CLs easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561479</commentid>
    <comment_count>7</comment_count>
      <attachid>127505</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-21 19:00:12 -0800</bug_when>
    <thetext>Comment on attachment 127505
Patch

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

So, this is just a patch to land independent functionality and then you&apos;ll land another patch to transition to switch over to using this?

Yay, for lots of tests.  :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:210
&gt; +    if (!transformedQuad.isRectilinear())
&gt; +        return false;
&gt; +    return occlusion.contains(transformedQuad.enclosingBoundingBox());

Why the conditional? Even if not rectilinear, if the occlusion still contains the enclosing bounding box, then this contentRect is still occluded, yeah?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:275
&gt; +    // The use of enclosingIntRect, with floating point rounding, can give us a result that is not a sub-rect of contentRect. Shrink the result
&gt; +    // down so that contentRect contains the result we return.
&gt; +    int x = max(unoccludedRect.x(), contentRect.x());
&gt; +    int y = max(unoccludedRect.y(), contentRect.y());
&gt; +    int maxX = min(unoccludedRect.maxX(), contentRect.maxX());
&gt; +    int maxY = min(unoccludedRect.maxY(), contentRect.maxY());
&gt; +    return IntRect(x, y, maxX - x, maxY - y);

Why not just unoccludedRect.intersect(contentRect)?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:297
&gt; +IntRect CCOcclusionTrackerBase::surfaceUnoccludedContentRect(const LayerType* layer, const IntRect&amp; surfaceContentRect) const

Where is this function going to get used? The other functions seem like a mirror of existing functionality in paint culling, but this and surfaceOccluded seems new and I&apos;m not sure where they fit in the culling algorithm.

Also, can you write a test for this function that does more than take in a rect and spit the same rect back out?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h:80
&gt; +    typedef void RenderSurfaceVoidType;
&gt; +
&gt; +    struct StackObject {
&gt; +        const RenderSurfaceVoidType* surface;

Along with the fact that a pair of types gets used consistently across all these functions, this piece of code says to me really says that your class should be templated.  Maybe I&apos;m missing something, but I don&apos;t see a need for void pointer shenanigans.

Also, if the class were templated, you could just typedef CCOcclusionTracker(Impl) rather than adding boilerplate functions that thunk through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561517</commentid>
    <comment_count>8</comment_count>
      <attachid>127505</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-21 19:47:36 -0800</bug_when>
    <thetext>Comment on attachment 127505
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:297
&gt;&gt; +IntRect CCOcclusionTrackerBase::surfaceUnoccludedContentRect(const LayerType* layer, const IntRect&amp; surfaceContentRect) const
&gt; 
&gt; Where is this function going to get used? The other functions seem like a mirror of existing functionality in paint culling, but this and surfaceOccluded seems new and I&apos;m not sure where they fit in the culling algorithm.
&gt; 
&gt; Also, can you write a test for this function that does more than take in a rect and spit the same rect back out?

Oops, line 870 does have a such a test.  My bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561522</commentid>
    <comment_count>9</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-21 19:53:25 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 127505 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127505&amp;action=review
&gt; 
&gt; So, this is just a patch to land independent functionality and then you&apos;ll land another patch to transition to switch over to using this?

Precisely. I&apos;ll make sure it&apos;s at feature-parity with any changes &apos;upstream&apos; as I use it to replace existing code, and verify that any unit tests removed have the same cases covered for this class as I go.

&gt; Yay, for lots of tests.  :)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:210
&gt; &gt; +    if (!transformedQuad.isRectilinear())
&gt; &gt; +        return false;
&gt; &gt; +    return occlusion.contains(transformedQuad.enclosingBoundingBox());
&gt; 
&gt; Why the conditional? Even if not rectilinear, if the occlusion still contains the enclosing bounding box, then this contentRect is still occluded, yeah?

Yep! Thanks.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:275
&gt; &gt; +    // The use of enclosingIntRect, with floating point rounding, can give us a result that is not a sub-rect of contentRect. Shrink the result
&gt; &gt; +    // down so that contentRect contains the result we return.
&gt; &gt; +    int x = max(unoccludedRect.x(), contentRect.x());
&gt; &gt; +    int y = max(unoccludedRect.y(), contentRect.y());
&gt; &gt; +    int maxX = min(unoccludedRect.maxX(), contentRect.maxX());
&gt; &gt; +    int maxY = min(unoccludedRect.maxY(), contentRect.maxY());
&gt; &gt; +    return IntRect(x, y, maxX - x, maxY - y);
&gt; 
&gt; Why not just unoccludedRect.intersect(contentRect)?

Oh, duh.. thank you :)

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:297
&gt; &gt; +IntRect CCOcclusionTrackerBase::surfaceUnoccludedContentRect(const LayerType* layer, const IntRect&amp; surfaceContentRect) const
&gt; 
&gt; Where is this function going to get used? The other functions seem like a mirror of existing functionality in paint culling, but this and surfaceOccluded seems new and I&apos;m not sure where they fit in the culling algorithm.

I am planning to use it for culling of the surface itself on draw side. Right now we don&apos;t cull surface quads at all, but we can cull them based on things outside the surface in the future.

The bool surfaceOccluded() method probably won&apos;t be used at the moment, but I included it just for completeness.

&gt; Also, can you write a test for this function that does more than take in a rect and spit the same rect back out?

As we discussed, CCOcclusionTrackerTest.surfaceOcclusionInScreenSpace is meant to verify that this function works as intended. That said, if you can think of something more to test I&apos;m very happy to!

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h:80
&gt; &gt; +    typedef void RenderSurfaceVoidType;
&gt; &gt; +
&gt; &gt; +    struct StackObject {
&gt; &gt; +        const RenderSurfaceVoidType* surface;
&gt; 
&gt; Along with the fact that a pair of types gets used consistently across all these functions, this piece of code says to me really says that your class should be templated.  Maybe I&apos;m missing something, but I don&apos;t see a need for void pointer shenanigans.
&gt; 
&gt; Also, if the class were templated, you could just typedef CCOcclusionTracker(Impl) rather than adding boilerplate functions that thunk through.

As per offline discussion, going with templates and typedefs. It really cleaned up the .h so yay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561530</commentid>
    <comment_count>10</comment_count>
      <attachid>128120</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-21 19:58:01 -0800</bug_when>
    <thetext>Created attachment 128120
Patch

For @enne review. Comments addressed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561550</commentid>
    <comment_count>11</comment_count>
      <attachid>128120</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-21 20:38:06 -0800</bug_when>
    <thetext>Comment on attachment 128120
Patch

Thanks for those changes! I don&apos;t think I have anything else to add.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561572</commentid>
    <comment_count>12</comment_count>
      <attachid>128120</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-21 21:06:42 -0800</bug_when>
    <thetext>Comment on attachment 128120
Patch

Thanks enne! For @jamesr review then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561649</commentid>
    <comment_count>13</comment_count>
      <attachid>128120</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-21 23:05:15 -0800</bug_when>
    <thetext>Comment on attachment 128120
Patch

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

Works for me! R=me with one style nit, feel free to address it when you address the other FIXME in that header.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h:94
&gt; +    WTF_MAKE_NONCOPYABLE(CCOcclusionTrackerBase);

style nit: normally we put this right below the class declaration and above the first public:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561680</commentid>
    <comment_count>14</comment_count>
      <attachid>128120</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 23:59:35 -0800</bug_when>
    <thetext>Comment on attachment 128120
Patch

Clearing flags on attachment: 128120

Committed r108453: &lt;http://trac.webkit.org/changeset/108453&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561681</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 23:59:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561743</commentid>
    <comment_count>16</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-22 01:37:02 -0800</bug_when>
    <thetext>Hi,

Chromium&apos;s webkit_unit_tests started to fail since r108453:

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Linux%20%28dbg%29/builds/3657/steps/webkit_unit_tests/logs/stdio

[ RUN      ] CCOcclusionTrackerTest.surfaceOcclusionWithOverlappingSiblingSurfaces
ASSERTION FAILED: layer-&gt;targetRenderSurface() == m_stack.last().surface
third_party/WebKit/Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp(217) : bool WebCore::CCOcclusionTrackerBase&lt;LayerType, RenderSurfaceType&gt;::occluded(const LayerType*, const WebCore::IntRect&amp;) const [with LayerType = WebCore::LayerChromium, RenderSurfaceType = WebCore::RenderSurfaceChromium]
1   0x1140ffc
2   0x546edc
3   0x791cc1
4   0x78e99e
5   0x7833a2
6   0x783bc6
7   0x7842bc
8   0x789093
9   0x792ebb
10  0x78f361
11  0x787bb0
12  0x7a31d5
13  0x41fc7d
14  0x7f63e50c2c4d __libc_start_main
15  0x41fb79
[56389:56389:0222/011121:15415134960585:ERROR:process_util_posix.cc(142)] Received signal 11
	base::debug::StackTrace::StackTrace() [0x1f69a3e]
	base::(anonymous namespace)::StackDumpSignalHandler() [0x1f1a9a5]
	0x7f63e50d7af0
	WebCore::CCOcclusionTrackerBase&lt;&gt;::occluded() [0x1141006]
	(anonymous namespace)::CCOcclusionTrackerTest_surfaceOcclusionWithOverlappingSiblingSurfaces_Test::TestBody() [0x546edc]
	testing::internal::HandleSehExceptionsInMethodIfSupported&lt;&gt;() [0x791cc1]
	testing::internal::HandleExceptionsInMethodIfSupported&lt;&gt;() [0x78e99e]
	testing::Test::Run() [0x7833a2]
	testing::TestInfo::Run() [0x783bc6]
	testing::TestCase::Run() [0x7842bc]
	testing::internal::UnitTestImpl::RunAllTests() [0x789093]
	testing::internal::HandleSehExceptionsInMethodIfSupported&lt;&gt;() [0x792ebb]
	testing::internal::HandleExceptionsInMethodIfSupported&lt;&gt;() [0x78f361]
	testing::UnitTest::Run() [0x787bb0]
	base::TestSuite::Run() [0x7a31d5]
	main [0x41fc7d]
	0x7f63e50c2c4d
	0x41fb79

Furthermore, one layout test started to fail and I&apos;m suspecting this could be also due to r108453 (not 100% sure though):
http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;tests=fast%2Fcanvas%2Fwebgl%2Ftex-image-with-format-and-type.html

Could you take a look and fix them ASAP? I&apos;m going to roll out the change unless I hear back from you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561756</commentid>
    <comment_count>17</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-22 01:48:59 -0800</bug_when>
    <thetext>I&apos;m rolling out the change. Please fix the issue and land again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561765</commentid>
    <comment_count>18</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-22 01:59:45 -0800</bug_when>
    <thetext>Reverted r108453 for reason:

Broke Chromium&apos;s webkit_unit_tests.

Committed r108467: &lt;http://trac.webkit.org/changeset/108467&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561850</commentid>
    <comment_count>19</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-22 04:37:09 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Furthermore, one layout test started to fail and I&apos;m suspecting this could be also due to r108453 (not 100% sure though):

This wasn&apos;t true, because the test keeps failing even after the rollout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561974</commentid>
    <comment_count>20</comment_count>
      <attachid>128120</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-22 07:32:25 -0800</bug_when>
    <thetext>Comment on attachment 128120
Patch

Ok, going to resubmit then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561977</commentid>
    <comment_count>21</comment_count>
      <attachid>128213</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-02-22 07:34:42 -0800</bug_when>
    <thetext>Created attachment 128213
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561980</commentid>
    <comment_count>22</comment_count>
      <attachid>128213</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 07:39:55 -0800</bug_when>
    <thetext>Comment on attachment 128213
Patch for landing

Rejecting attachment 128213 from commit-queue.

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

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

Full output: http://queues.webkit.org/results/11560504</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562074</commentid>
    <comment_count>23</comment_count>
      <attachid>128236</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-02-22 10:00:21 -0800</bug_when>
    <thetext>Created attachment 128236
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562135</commentid>
    <comment_count>24</comment_count>
      <attachid>128236</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 10:45:42 -0800</bug_when>
    <thetext>Comment on attachment 128236
Patch for landing

Clearing flags on attachment: 128236

Committed r108521: &lt;http://trac.webkit.org/changeset/108521&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562136</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 10:45:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562626</commentid>
    <comment_count>26</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-22 17:38:49 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 128120 [details])
&gt; Ok, going to resubmit then.

I&apos;m sorry I wasn&apos;t clear, but I meant only layout test failure wasn&apos;t your fault. Your change still causes the following assertion failure.

ASSERTION FAILED: layer-&gt;targetRenderSurface() == m_stack.last().surface

Please investigate further as soon as possible. This error causes webkit_unit_tests to abort in the middle of the run, which is undesirable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562668</commentid>
    <comment_count>27</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-22 18:21:58 -0800</bug_when>
    <thetext>Um, you seem to fix the bug in r108587 (bug 79275).

Please leave some comments to show the linkage of bugs, and notify WebKit gardeners about build fixes from next time. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562694</commentid>
    <comment_count>28</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-22 19:05:35 -0800</bug_when>
    <thetext>Yup. Sorry! Enne knew about it at least, but I should have linked them.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126861</attachid>
            <date>2012-02-13 16:31:19 -0800</date>
            <delta_ts>2012-02-14 15:21:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78549-20120213193118.patch</filename>
            <type>text/plain</type>
            <size>87023</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQ3ZGU1OTViOWRlMzMw
YTdjMjU3ZWRhYjc3NDM3ZGRmNDllNzZkZC4uNTBlMWU5MDY3NzE1NDdjODE3MTI2M2YxZTQyZTJm
MWMyMWMxZmJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAyLTEzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gTmV3
IENDT2NjbHVzaW9uVHJhY2tlciBjbGFzcyB3aXRoIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB1bml0IHRlc3RzOiBDQ09jY2x1c2lvblRy
YWNrZXJUZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJC
YXNlOjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNm
b3JtU3VyZmFjZU9wYXF1ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRy
YWNrZXJCYXNlOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVP
Y2NsdXNpb25CZWhpbmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlOjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlOjpjbGVhckFsbEZvckN1cnJlbnRUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6dGVzdENvbnRlbnRSZWN0T2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NP
Y2NsdXNpb25UcmFja2VyQmFzZTo6b2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmVjdFN1
YnRyYWN0UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVVbm9jY2x1ZGVkQ29udGVu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6dW5vY2Ns
dWRlZENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlckJh
c2U6OnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NP
Y2NsdXNpb25UcmFja2VyOjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXI6Om1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlcjo6b2NjbHVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjp1bm9jY2x1ZGVkQ29udGVudFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjp1bm9jY2x1ZGVkU3Vy
ZmFjZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlcklt
cGw6OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1
c2lvblRyYWNrZXJJbXBsOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjpvY2NsdWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjp1bm9jY2x1ZGVkQ29udGVu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VySW1wbDo6dW5vY2Ns
dWRlZFN1cmZhY2VDb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
T2NjbHVzaW9uVHJhY2tlckJhc2U6OkNDT2NjbHVzaW9uVHJhY2tlckJhc2UpOgorICAgICAgICAo
U3RhY2tPYmplY3QpOgorICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2VyKToKKyAgICAgICAgKEND
T2NjbHVzaW9uVHJhY2tlckltcGwpOgorCiAyMDEyLTAyLTEzICBDYWlvIE1hcmNlbG8gZGUgT2xp
dmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgTW92
ZSBhdHRyaWJ1dGUgc3RvcmFnZSBmcm9tIE5hbWVkTm9kZU1hcCB0byBFbGVtZW50QXR0cmlidXRl
RGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyOGUyMWNiZDA0ODA0MmNmOTM1NGJi
YWYyZGZhOTA2MDg2ZTAwOTc4Li42MWJkOGZhYTM0OWVhNzdhODZlNTBmNzIwZjYwY2VkZWYzZmQ2
YWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAy
LTEzICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJv
bWl1bV0gTmV3IENDT2NjbHVzaW9uVHJhY2tlciBjbGFzcyB3aXRoIHRlc3RzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU0OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAg
ICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ6OkxheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50OjpkcmF3c0NvbnRlbnQpOgor
ICAgICAgICAoVGVzdENDT2NjbHVzaW9uVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
Q0NPY2NsdXNpb25UcmFja2VyOjpvY2NsdXNpb25JblNjcmVlblNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6Om9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzZXRPY2NsdXNpb25J
blNjcmVlblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6
OnNldE9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KwogMjAxMi0wMi0xMyAgWW9zaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW0Zvcm1zXSBVc2UgZW51bSBpbnN0ZWFkIG9mIGJvb2wgZm9yIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOWQzZjgyYzE5NDQzNzJiYmE5N2I4NGVi
NTVmZTM4MjA0MGMyZmI5Yy4uZDE4ZDliNWJlNTZiMDcwMTgzNmUzNTEyOTMzZjI5N2IwNzQxMTM3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzI2Niw2ICszMjY2LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQYWdlU2NhbGVBbmltYXRp
b24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVn
aW5EcmF3UXVhZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTlhZWYyZWE2MjNlNGQ1NmM3NWViNmI1OGM2MWM0NzkyNzEzNjg0NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJjYy9DQ09jY2x1c2lvblRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
OjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZVR5cGUqIG5ld1RhcmdldCkK
K3sKKyAgICBpZiAoIW1fc3RhY2suaXNFbXB0eSgpICYmIG1fc3RhY2subGFzdCgpLnN1cmZhY2Ug
PT0gbmV3VGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YWNrLmFwcGVuZChTdGFj
a09iamVjdCgpKTsKKyAgICBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlID0gbmV3VGFyZ2V0OworCisg
ICAgLy8gV2UgY29weSB0aGUgc2NyZWVuIG9jY2x1c2lvbiBpbnRvIHRoZSBuZXcgUmVuZGVyU3Vy
ZmFjZSBzdWJ0cmVlLCBidXQgd2UgbmV2ZXIgY29weSBpbiB0aGUKKyAgICAvLyB0YXJnZXQgb2Nj
bHVzaW9uLCBzaW5jZSB3ZSBhcmUgbG9va2luZyBhdCBhIG5ldyBSZW5kZXJTdXJmYWNlIHRhcmdl
dC4KKworICAgIGJvb2wgY29weVNjcmVlbk9jY2x1c2lvbkZvcndhcmQgPSBtX3N0YWNrLnNpemUo
KSA+IDE7CisgICAgaWYgKGNvcHlTY3JlZW5PY2NsdXNpb25Gb3J3YXJkKSB7CisgICAgICAgIGlu
dCBsYXN0SW5kZXggPSBtX3N0YWNrLnNpemUoKSAtIDE7CisgICAgICAgIG1fc3RhY2tbbGFzdElu
ZGV4XS5vY2NsdXNpb25JblNjcmVlbiA9IG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVzaW9u
SW5TY3JlZW47CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZT4KK3N0YXRpYyBpbmxpbmUgUmVnaW9uIHRyYW5zZm9ybVN1cmZhY2VPcGFxdWVSZWdpb24oUmVu
ZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2UsIGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIEludFJlY3QgYm91bmRzID0gcmVn
aW9uLmJvdW5kcygpOworICAgIEZsb2F0UmVjdCBjZW50ZXJlZEJvdW5kcygtYm91bmRzLndpZHRo
KCkgLyAyLjAsIC1ib3VuZHMuaGVpZ2h0KCkgLyAyLjAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMu
aGVpZ2h0KCkpOworICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZEJvdW5kc1F1YWQgPSB0cmFuc2Zv
cm0ubWFwUXVhZChGbG9hdFF1YWQoY2VudGVyZWRCb3VuZHMpKTsKKyAgICBpZiAoIXRyYW5zZm9y
bWVkQm91bmRzUXVhZC5pc1JlY3RpbGluZWFyKCkpCisgICAgICAgIHJldHVybiBSZWdpb24oKTsK
KworICAgIFJlZ2lvbiB0cmFuc2Zvcm1lZFJlZ2lvbjsKKworICAgIEludFJlY3Qgc3VyZmFjZUJv
dW5kcyA9IHN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisgICAgVmVjdG9yPEludFJlY3Q+IHJlY3Rz
ID0gcmVnaW9uLnJlY3RzKCk7CisgICAgVmVjdG9yPEludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSByZWN0cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0
b3IgaSA9IHJlY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKKyAgICAgICAgRmxvYXRSZWN0
IGNlbnRlcmVkT3JpZ2luUmVjdCgtaS0+d2lkdGgoKSAvIDIuMCArIGktPngoKSAtIHN1cmZhY2VC
b3VuZHMueCgpLCAtaS0+aGVpZ2h0KCkgLyAyLjAgKyBpLT55KCkgLSBzdXJmYWNlQm91bmRzLnko
KSwgaS0+d2lkdGgoKSwgaS0+aGVpZ2h0KCkpOworICAgICAgICBGbG9hdFJlY3QgdHJhbnNmb3Jt
ZWRSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KGNlbnRlcmVkT3JpZ2luUmVjdCkp
OworICAgICAgICB0cmFuc2Zvcm1lZFJlZ2lvbi51bml0ZShlbmNsb3NlZEludFJlY3QodHJhbnNm
b3JtZWRSZWN0KSk7CisgICAgfQorICAgIHJldHVybiB0cmFuc2Zvcm1lZFJlZ2lvbjsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJh
Y2tlckJhc2U6OmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VUeXBlKiBu
ZXdUYXJnZXQpCit7CisgICAgaW50IGxhc3RJbmRleCA9IG1fc3RhY2suc2l6ZSgpIC0gMTsKKyAg
ICBib29sIHN1cmZhY2VXaWxsQmVBdFRvcEFmdGVyUG9wID0gbV9zdGFjay5zaXplKCkgPiAxICYm
IG1fc3RhY2tbbGFzdEluZGV4IC0gMV0uc3VyZmFjZSA9PSBuZXdUYXJnZXQ7CisKKyAgICAvLyBX
ZSBtZXJnZSB0aGUgc2NyZWVuIG9jY2x1c2lvbiBmcm9tIHRoZSBjdXJyZW50IFJlbmRlclN1cmZh
Y2Ugc3VidHJlZSBvdXQgdG8gaXRzIHBhcmVudCB0YXJnZXQgUmVuZGVyU3VyZmFjZS4KKyAgICAv
LyBUaGUgdGFyZ2V0IG9jY2x1c2lvbiBjYW4gYmUgbWVyZ2VkIG91dCBhcyB3ZWxsIGJ1dCBuZWVk
cyB0byBiZSB0cmFuc2Zvcm1lZCB0byB0aGUgbmV3IHRhcmdldC4KKworICAgIFJlbmRlclN1cmZh
Y2VUeXBlKiBvbGRUYXJnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJTdXJmYWNlVHlwZSo+KG1fc3Rh
Y2tbbGFzdEluZGV4XS5zdXJmYWNlKTsKKyAgICBSZWdpb24gb2xkVGFyZ2V0T2NjbHVzaW9uSW5O
ZXdUYXJnZXQgPSB0cmFuc2Zvcm1TdXJmYWNlT3BhcXVlUmVnaW9uPFJlbmRlclN1cmZhY2VUeXBl
PihvbGRUYXJnZXQsIG1fc3RhY2tbbGFzdEluZGV4XS5vY2NsdXNpb25JblRhcmdldCwgb2xkVGFy
Z2V0LT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgaWYgKHN1cmZhY2VXaWxsQmVBdFRvcEFmdGVy
UG9wKSB7CisgICAgICAgIC8vIE1lcmdlIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGRvd24uCisKKyAg
ICAgICAgbV9zdGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblNjcmVlbi51bml0ZShtX3N0
YWNrW2xhc3RJbmRleF0ub2NjbHVzaW9uSW5TY3JlZW4pOworICAgICAgICBtX3N0YWNrW2xhc3RJ
bmRleCAtIDFdLm9jY2x1c2lvbkluVGFyZ2V0LnVuaXRlKG9sZFRhcmdldE9jY2x1c2lvbkluTmV3
VGFyZ2V0KTsKKyAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gUmVwbGFjZSB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRoZSBuZXcgcHVzaGVk
IHN1cmZhY2UuIENvcHkgdGhlIG9jY2x1ZGVkIHNjcmVlbiByZWdpb24gdG8gdGhlIHRvcC4KKyAg
ICAgICAgbV9zdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1RhcmdldDsKKyAgICAgICAgbV9zdGFj
ay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQgPSBvbGRUYXJnZXRPY2NsdXNpb25Jbk5ld1Rhcmdl
dDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBpbmxp
bmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm0oTGF5
ZXJUeXBlKiBsYXllcikKK3sKKyAgICBJbnRTaXplIGJvdW5kc0luTGF5ZXJTcGFjZSA9IGxheWVy
LT5ib3VuZHMoKTsKKyAgICBJbnRTaXplIGJvdW5kc0luQ29udGVudFNwYWNlID0gbGF5ZXItPmNv
bnRlbnRCb3VuZHMoKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGxh
eWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworCisgICAgaWYgKGJvdW5kc0luQ29udGVudFNw
YWNlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKworICAgIC8vIFNjYWxl
IGZyb20gY29udGVudCBzcGFjZSB0byBsYXllciBzcGFjZQorICAgIHRyYW5zZm9ybS5zY2FsZU5v
blVuaWZvcm0oYm91bmRzSW5MYXllclNwYWNlLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+
KGJvdW5kc0luQ29udGVudFNwYWNlLndpZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm91bmRzSW5MYXllclNwYWNlLmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihi
b3VuZHNJbkNvbnRlbnRTcGFjZS5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorc3RhdGljIGlubGluZSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtKExheWVyVHlwZSog
bGF5ZXIpCit7CisgICAgSW50U2l6ZSBib3VuZHNJbkxheWVyU3BhY2UgPSBsYXllci0+Ym91bmRz
KCk7CisgICAgSW50U2l6ZSBib3VuZHNJbkNvbnRlbnRTcGFjZSA9IGxheWVyLT5jb250ZW50Qm91
bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpOworCisgICAgaWYgKGJvdW5kc0luQ29udGVudFNwYWNlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKworICAgIC8vIFNjYWxlIGZyb20gY29udGVudCBz
cGFjZSB0byBsYXllciBzcGFjZQorICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRz
SW5MYXllclNwYWNlLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGJvdW5kc0luQ29udGVu
dFNwYWNlLndpZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzSW5M
YXllclNwYWNlLmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRT
cGFjZS5oZWlnaHQoKSkpOworCisgICAgLy8gVGhlIGRyYXcgdHJhbnNmb3JtIGV4cGVjdHMgdGhl
IG9yaWdpbiB0byBiZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXllci4KKyAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKC1ib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0aCgpIC8gMi4wLCAtYm91bmRzSW5D
b250ZW50U3BhY2UuaGVpZ2h0KCkgLyAyLjApOworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorc3RhdGljIGlubGluZSBSZWdpb24gY29t
cHV0ZU9jY2x1c2lvbkJlaGluZExheWVyKExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgUmVnaW9uIG9wYXF1ZVJlZ2lvbjsKKwor
ICAgIEZsb2F0UXVhZCB1bm9jY2x1ZGVkUXVhZCA9IHRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVh
ZChsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpKSk7CisgICAgYm9vbCBpc1BhaW50ZWRBeGlzQWxp
Z25lZCA9IHVub2NjbHVkZWRRdWFkLmlzUmVjdGlsaW5lYXIoKTsKKyAgICBpZiAoIWlzUGFpbnRl
ZEF4aXNBbGlnbmVkKQorICAgICAgICByZXR1cm4gb3BhcXVlUmVnaW9uOworCisgICAgaWYgKGxh
eWVyLT5vcGFxdWUoKSkKKyAgICAgICAgb3BhcXVlUmVnaW9uID0gZW5jbG9zZWRJbnRSZWN0KHVu
b2NjbHVkZWRRdWFkLmJvdW5kaW5nQm94KCkpOworICAgIC8vIEZJWE1FOiBDYXB0dXJlIG9wYXF1
ZSBwYWludHM6IGVsc2Ugb3BhcXVlUmVnaW9uID0gbGF5ZXItPm9wYXF1ZUNvbnRlbnRzUmVnaW9u
KHRyYW5zZm9ybSk7CisgICAgcmV0dXJuIG9wYXF1ZVJlZ2lvbjsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgTGF5ZXJUeXBlPgordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjptYXJrT2NjbHVk
ZWRCZWhpbmRMYXllcihMYXllclR5cGUqIGxheWVyKQoreworICAgIEFTU0VSVCghbV9zdGFjay5p
c0VtcHR5KCkpOworICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09IG1f
c3RhY2subGFzdCgpLnN1cmZhY2UpOworCisgICAgaWYgKGxheWVyLT5kcmF3T3BhY2l0eSgpICE9
IDEpCisgICAgICAgIHJldHVybjsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRU
b1NjcmVlblNwYWNlID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihs
YXllcik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9
IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CisKKyAg
ICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbi51bml0ZShjb21wdXRlT2NjbHVzaW9u
QmVoaW5kTGF5ZXI8TGF5ZXJUeXBlPihsYXllciwgY29udGVudFRvU2NyZWVuU3BhY2UpKTsKKyAg
ICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldC51bml0ZShjb21wdXRlT2NjbHVzaW9u
QmVoaW5kTGF5ZXI8TGF5ZXJUeXBlPihsYXllciwgY29udGVudFRvVGFyZ2V0U3VyZmFjZSkpOwor
fQorCit2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OmNsZWFyQWxsRm9yQ3VycmVudFRhcmdl
dCgpCit7CisgICAgQVNTRVJUKCFtX3N0YWNrLmlzRW1wdHkoKSk7CisgICAgbV9zdGFjay5sYXN0
KCkub2NjbHVzaW9uSW5TY3JlZW4gPSBSZWdpb24oKTsKKyAgICBtX3N0YWNrLmxhc3QoKS5vY2Ns
dXNpb25JblRhcmdldCA9IFJlZ2lvbigpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgdGVzdENv
bnRlbnRSZWN0T2NjbHVkZWQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lvbiYgb2Nj
bHVzaW9uKQoreworICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFF1YWQgPSBjb250ZW50U3BhY2VU
cmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3QpKTsKKyAgICBpZiAoIXRyYW5z
Zm9ybWVkUXVhZC5pc1JlY3RpbGluZWFyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gb2NjbHVzaW9uLmNvbnRhaW5zKHRyYW5zZm9ybWVkUXVhZC5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorYm9vbCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlOjpvY2NsdWRlZChMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOworCisgICAgaWYgKHRlc3RDb250ZW50UmVj
dE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXll
clR5cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4pKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29udGVudFJl
Y3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllciksIG1f
c3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBEZXRlcm1pbmVzIHdoYXQgcG9ydGlvbiBvZiByZWN0
LCBpZiBhbnksIGlzIHVub2NjbHVkZWQgKG5vdCBvY2NsdWRlZCBieSByZWdpb24pLiBJZgorLy8g
dGhlIHJlc3VsdGluZyB1bm9jY2x1ZGVkIHJlZ2lvbiBpcyBub3QgcmVjdGFuZ3VsYXIsIHdlIHJl
dHVybiBhIHJlY3QgY29udGFpbmluZyBpdC4KK3N0YXRpYyBpbmxpbmUgSW50UmVjdCByZWN0U3Vi
dHJhY3RSZWdpb24oY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgUmVnaW9uJiByZWdpb24pCit7
CisgICAgUmVnaW9uIHJlY3RSZWdpb24ocmVjdCk7CisgICAgUmVnaW9uIGludGVyc2VjdFJlZ2lv
bihpbnRlcnNlY3QocmVnaW9uLCByZWN0UmVnaW9uKSk7CisKKyAgICBpZiAoaW50ZXJzZWN0UmVn
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgCisgICAgcmVjdFJlZ2lv
bi5zdWJ0cmFjdChpbnRlcnNlY3RSZWdpb24pOworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IHJl
Y3RSZWdpb24uYm91bmRzKCk7CisgICAgcmV0dXJuIGJvdW5kc1JlY3Q7Cit9CisKK3N0YXRpYyBJ
bnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0s
IGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQoreworICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFF1
YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3Qp
KTsKKyAgICBpZiAoIXRyYW5zZm9ybWVkUXVhZC5pc1JlY3RpbGluZWFyKCkpCisgICAgICAgIHJl
dHVybiBjb250ZW50UmVjdDsKKyAgICAvLyBUYWtlIHRoZSBlbmNsb3NpbmdJbnRSZWN0IGF0IGVh
Y2ggc3RlcCBoZXJlLCBhcyB3ZSB3YW50IHRvIGNvbnRhaW4gYW55IHVub2NjbHVkZWQgcGFydGlh
bCBwaXhlbHMgaW4gdGhlIHJlc3VsdGluZyBJbnRSZWN0LgorICAgIEludFJlY3Qgc2hydW5rUmVj
dCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUXVhZC5i
b3VuZGluZ0JveCgpKSwgb2NjbHVzaW9uKTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChjb250ZW50U3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3Qo
RmxvYXRSZWN0KHNocnVua1JlY3QpKSk7CisgICAgLy8gVGhlIHVzZSBvZiBlbmNsb3NpbmdJbnRS
ZWN0LCB3aXRoIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nLCBjYW4gZ2l2ZSB1cyBhIHJlc3VsdCB0
aGF0IGlzIG5vdCBhIHN1Yi1yZWN0IG9mIGNvbnRlbnRSZWN0LiBTaHJpbmsgdGhlIHJlc3VsdAor
ICAgIC8vIGRvd24gc28gdGhhdCBjb250ZW50UmVjdCBjb250YWlucyB0aGUgcmVzdWx0IHdlIHJl
dHVybi4KKyAgICBpbnQgeCA9IG1heCh1bm9jY2x1ZGVkUmVjdC54KCksIGNvbnRlbnRSZWN0Lngo
KSk7CisgICAgaW50IHkgPSBtYXgodW5vY2NsdWRlZFJlY3QueSgpLCBjb250ZW50UmVjdC55KCkp
OworICAgIGludCBtYXhYID0gbWluKHVub2NjbHVkZWRSZWN0Lm1heFgoKSwgY29udGVudFJlY3Qu
bWF4WCgpKTsKKyAgICBpbnQgbWF4WSA9IG1pbih1bm9jY2x1ZGVkUmVjdC5tYXhZKCksIGNvbnRl
bnRSZWN0Lm1heFkoKSk7CisgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgbWF4WCAtIHgsIG1heFkg
LSB5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorSW50UmVjdCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlOjp1bm9jY2x1ZGVkQ29udGVudFJlY3QoTGF5ZXJUeXBlKiBsYXllciwg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhY2suaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gY29udGVudFJlY3Q7CisKKyAgICAvLyBUaGVyZSBhcmUg
dHdvIHdheXMgdG8gY29tYmluZSB0aGUgb2NjbHVzaW9ucy4gU2NyZWVuLXRoZW4tVGFyZ2V0LXN1
cmZhY2UsIG9yIFRhcmdldC1zdXJmYWNlLXRoZW4tU2NyZWVuLiBXZSB0cnkgYm90aCBhbmQgdGFr
ZSB0aGUgc21hbGxlciByZWN0LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1Nj
cmVlblNwYWNlID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXll
cik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNv
bnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CisKKyAgICBJ
bnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
Y29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNp
b25JblNjcmVlbik7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBt
X3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCk7CisKKyAgICBJbnRSZWN0IHVub2NjbHVk
ZWRJblNjcmVlbkFuZFRhcmdldCA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QodW5vY2Ns
dWRlZEluU2NyZWVuLCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2Ns
dXNpb25JblRhcmdldCk7CisgICAgaWYgKHVub2NjbHVkZWRJblNjcmVlbkFuZFRhcmdldC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB1bm9jY2x1ZGVkSW5TY3JlZW5BbmRUYXJnZXQ7CisgICAg
SW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXRBbmRTY3JlZW4gPSBjb21wdXRlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KHVub2NjbHVkZWRJblRhcmdldCwgY29udGVudFRvU2NyZWVuU3BhY2UsIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuKTsKKworICAgIGxvbmcgYXJlYUluU2NyZWVuQW5k
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8bG9uZz4odW5vY2NsdWRlZEluU2NyZWVuQW5kVGFyZ2V0Lndp
ZHRoKCkpICogc3RhdGljX2Nhc3Q8bG9uZz4odW5vY2NsdWRlZEluU2NyZWVuQW5kVGFyZ2V0Lmhl
aWdodCgpKTsKKyAgICBsb25nIGFyZWFJblRhcmdldEFuZFNjcmVlbiA9IHN0YXRpY19jYXN0PGxv
bmc+KHVub2NjbHVkZWRJblRhcmdldEFuZFNjcmVlbi53aWR0aCgpKSAqIHN0YXRpY19jYXN0PGxv
bmc+KHVub2NjbHVkZWRJblRhcmdldEFuZFNjcmVlbi5oZWlnaHQoKSk7CisKKyAgICAvLyBSZXR1
cm4gdGhlIHNtYWxsZXIgcmVjdCB0aGF0IGNvbnRhaW5zIGFsbCB1bm9jY2x1ZGVkIHBhcnRzIGlu
IHRoZSB0YXJnZXQgc3VyZmFjZSBhbmQgc2NyZWVuIHNwYWNlLgorICAgIHJldHVybiBhcmVhSW5T
Y3JlZW5BbmRUYXJnZXQgPCBhcmVhSW5UYXJnZXRBbmRTY3JlZW4gPyB1bm9jY2x1ZGVkSW5TY3Jl
ZW5BbmRUYXJnZXQgOiB1bm9jY2x1ZGVkSW5UYXJnZXRBbmRTY3JlZW47Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitJbnRSZWN0
IENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QoTGF5
ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdAor
eworICAgIC8vIEEgc3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgbGF5ZXJzIGRyYXdpbmcgaW50
byBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gdXNlIG9jY2x1c2lvbiBmcm9tIG9uZSBzcG90IGRvd24g
b24gdGhlIHN0YWNrLgorICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVy
biBzdXJmYWNlQ29udGVudFJlY3Q7CisKKyAgICBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSA9
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgQVNTRVJUKHN1cmZhY2UpOworCisgICAgLy8g
VGhlcmUgYXJlIHR3byB3YXlzIHRvIGNvbWJpbmUgdGhlIG9jY2x1c2lvbnMuIFNjcmVlbi10aGVu
LVRhcmdldC1zdXJmYWNlLCBvciBUYXJnZXQtc3VyZmFjZS10aGVuLVNjcmVlbi4gV2UgdHJ5IGJv
dGggYW5kIHRha2UgdGhlIHNtYWxsZXIgcmVjdC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
b250ZW50VG9TY3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVy
VHlwZT4obGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0
U3VyZmFjZSA9IHN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBjb250ZW50VG9UYXJnZXRT
dXJmYWNlLnRyYW5zbGF0ZSgtc3VyZmFjZUNvbnRlbnRSZWN0LndpZHRoKCkgLyAyLjAgKyBzdXJm
YWNlQ29udGVudFJlY3QueCgpIC0gc3VyZmFjZS0+Y29udGVudFJlY3QoKS54KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN1cmZhY2VDb250ZW50UmVjdC5oZWlnaHQo
KSAvIDIuMCArIHN1cmZhY2VDb250ZW50UmVjdC55KCkgLSBzdXJmYWNlLT5jb250ZW50UmVjdCgp
LnkoKSk7CisKKyAgICBjb25zdCBTdGFja09iamVjdCYgc2Vjb25kTGFzdCA9IG1fc3RhY2tbbV9z
dGFjay5zaXplKCktMl07CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5TY3JlZW4gPSBjb21wdXRl
VW5vY2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2VDb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVu
U3BhY2UsIHNlY29uZExhc3Qub2NjbHVzaW9uSW5TY3JlZW4pOworICAgIEludFJlY3QgdW5vY2Ns
dWRlZEluVGFyZ2V0ID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ29udGVu
dFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2UsIHNlY29uZExhc3Qub2NjbHVzaW9uSW5UYXJn
ZXQpOworICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuQW5kVGFyZ2V0ID0gY29tcHV0ZVVu
b2NjbHVkZWRDb250ZW50UmVjdCh1bm9jY2x1ZGVkSW5TY3JlZW4sIGNvbnRlbnRUb1RhcmdldFN1
cmZhY2UsIHNlY29uZExhc3Qub2NjbHVzaW9uSW5UYXJnZXQpOworICAgIGlmICh1bm9jY2x1ZGVk
SW5TY3JlZW5BbmRUYXJnZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdW5vY2NsdWRlZElu
U2NyZWVuQW5kVGFyZ2V0OworICAgIEludFJlY3QgdW5vY2NsdWRlZEluVGFyZ2V0QW5kU2NyZWVu
ID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdCh1bm9jY2x1ZGVkSW5UYXJnZXQsIGNvbnRl
bnRUb1NjcmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKTsKKworICAgIGxv
bmcgYXJlYUluU2NyZWVuQW5kVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8bG9uZz4odW5vY2NsdWRlZElu
U2NyZWVuQW5kVGFyZ2V0LndpZHRoKCkpICogc3RhdGljX2Nhc3Q8bG9uZz4odW5vY2NsdWRlZElu
U2NyZWVuQW5kVGFyZ2V0LmhlaWdodCgpKTsKKyAgICBsb25nIGFyZWFJblRhcmdldEFuZFNjcmVl
biA9IHN0YXRpY19jYXN0PGxvbmc+KHVub2NjbHVkZWRJblRhcmdldEFuZFNjcmVlbi53aWR0aCgp
KSAqIHN0YXRpY19jYXN0PGxvbmc+KHVub2NjbHVkZWRJblRhcmdldEFuZFNjcmVlbi5oZWlnaHQo
KSk7CisKKyAgICAvLyBSZXR1cm4gdGhlIHNtYWxsZXIgcmVjdCB0aGF0IGNvbnRhaW5zIGFsbCB1
bm9jY2x1ZGVkIHBhcnRzIGluIHRoZSB0YXJnZXQgc3VyZmFjZSBhbmQgc2NyZWVuIHNwYWNlLgor
ICAgIHJldHVybiBhcmVhSW5TY3JlZW5BbmRUYXJnZXQgPCBhcmVhSW5UYXJnZXRBbmRTY3JlZW4g
PyB1bm9jY2x1ZGVkSW5TY3JlZW5BbmRUYXJnZXQgOiB1bm9jY2x1ZGVkSW5UYXJnZXRBbmRTY3Jl
ZW47Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8gSW5zdGFuY2UgbWV0aG9kcyBmb3IgTGF5ZXJDaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0KKwordm9pZCBDQ09jY2x1c2lvblRyYWNrZXI6OmVudGVyVGFyZ2V0
UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCkKK3sKKyAgICBD
Q09jY2x1c2lvblRyYWNrZXJCYXNlOjplbnRlclRhcmdldFJlbmRlclN1cmZhY2U8UmVuZGVyU3Vy
ZmFjZUNocm9taXVtPihuZXdUYXJnZXQpOworfQorCit2b2lkIENDT2NjbHVzaW9uVHJhY2tlcjo6
bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJn
ZXQpCit7CisgICAgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6bGVhdmVUb1RhcmdldFJlbmRlclN1
cmZhY2U8UmVuZGVyU3VyZmFjZUNocm9taXVtPihuZXdUYXJnZXQpOworfQorCit2b2lkIENDT2Nj
bHVzaW9uVHJhY2tlcjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5
ZXIpCit7CisgICAgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6bWFya09jY2x1ZGVkQmVoaW5kTGF5
ZXI8TGF5ZXJDaHJvbWl1bT4obGF5ZXIpOworfQorCitib29sIENDT2NjbHVzaW9uVHJhY2tlcjo6
b2NjbHVkZWQoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KSBjb25zdAoreworICAgIHJldHVybiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpvY2NsdWRlZDxM
YXllckNocm9taXVtPihsYXllciwgY29udGVudFJlY3QpOworfQorCitJbnRSZWN0IENDT2NjbHVz
aW9uVHJhY2tlcjo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KExheWVyQ2hyb21pdW0qIGxheWVyLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTo6dW5vY2NsdWRlZENvbnRlbnRSZWN0PExheWVyQ2hyb21pdW0+KGxheWVy
LCBjb250ZW50UmVjdCk7Cit9CisKK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyOjp1bm9jY2x1
ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0
JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIENDT2NjbHVzaW9uVHJh
Y2tlckJhc2U6OnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3Q8TGF5ZXJDaHJvbWl1bSwgUmVu
ZGVyU3VyZmFjZUNocm9taXVtPihsYXllciwgc3VyZmFjZUNvbnRlbnRSZWN0KTsKK30KKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gSW5z
dGFuY2UgbWV0aG9kcyBmb3IgQ0NMYXllckltcGwvQ0NSZW5kZXJTdXJmYWNlCisKK3ZvaWQgQ0NP
Y2NsdXNpb25UcmFja2VySW1wbDo6ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3Vy
ZmFjZSogbmV3VGFyZ2V0KQoreworICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OmVudGVyVGFy
Z2V0UmVuZGVyU3VyZmFjZTxDQ1JlbmRlclN1cmZhY2U+KG5ld1RhcmdldCk7Cit9CisKK3ZvaWQg
Q0NPY2NsdXNpb25UcmFja2VySW1wbDo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5k
ZXJTdXJmYWNlKiBuZXdUYXJnZXQpCit7CisgICAgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6bGVh
dmVUb1RhcmdldFJlbmRlclN1cmZhY2U8Q0NSZW5kZXJTdXJmYWNlPihuZXdUYXJnZXQpOworfQor
Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tlckltcGw6Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKEND
TGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjptYXJrT2Nj
bHVkZWRCZWhpbmRMYXllcjxDQ0xheWVySW1wbD4obGF5ZXIpOworfQorCitib29sIENDT2NjbHVz
aW9uVHJhY2tlckltcGw6Om9jY2x1ZGVkKENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U6Om9jY2x1ZGVkPENDTGF5ZXJJbXBsPihsYXllciwgY29udGVudFJlY3QpOworfQorCitJbnRS
ZWN0IENDT2NjbHVzaW9uVHJhY2tlckltcGw6OnVub2NjbHVkZWRDb250ZW50UmVjdChDQ0xheWVy
SW1wbCogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAoreworICAgIHJl
dHVybiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjp1bm9jY2x1ZGVkQ29udGVudFJlY3Q8Q0NMYXll
ckltcGw+KGxheWVyLCBjb250ZW50UmVjdCk7Cit9CisKK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFj
a2VySW1wbDo6dW5vY2NsdWRlZFN1cmZhY2VDb250ZW50UmVjdChDQ0xheWVySW1wbCogbGF5ZXIs
IGNvbnN0IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6dW5vY2NsdWRlZFN1cmZhY2VDb250ZW50UmVjdDxDQ0xh
eWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPihsYXllciwgc3VyZmFjZUNvbnRlbnRSZWN0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmZh
YTI1ZGViNGU3ZTI0YTYzZTcwNjMzMDMyMmRiZmIxMTU1OWIxNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9u
VHJhY2tlci5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ09jY2x1c2lvblRy
YWNrZXJfaAorI2RlZmluZSBDQ09jY2x1c2lvblRyYWNrZXJfaAorCisjaW5jbHVkZSAiRmxvYXRR
dWFkLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBD
Q1JlbmRlclN1cmZhY2U7CitjbGFzcyBMYXllckNocm9taXVtOworY2xhc3MgUmVuZGVyU3VyZmFj
ZUNocm9taXVtOworCitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJCYXNlIHsKK3B1YmxpYzoKKyAg
ICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlKCkgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZW5kZXJTdXJmYWNlVHlwZT4gdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3Vy
ZmFjZVR5cGUqIG5ld1RhcmdldCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGU+IHZvaWQgbGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZVR5cGUq
IG5ld1RhcmdldCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHZvaWQgbWFy
a09jY2x1ZGVkQmVoaW5kTGF5ZXIoTGF5ZXJUeXBlKik7CisKKyAgICAvLyBSZW1vdmVzIGFsbCBv
Y2NsdXNpb24gZm9yIHRoZSBjdXJyZW50IHRhcmdldC4KKyAgICB2b2lkIGNsZWFyQWxsRm9yQ3Vy
cmVudFRhcmdldCgpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBib29sIG9j
Y2x1ZGVkKExheWVyVHlwZSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKyAg
ICAvLyBHaXZlcyBhbiB1bm9jY2x1ZGVkIHN1Yi1yZWN0IG9mIHxjb250ZW50UmVjdHwgaW4gdGhl
IGNvbnRlbnQgc3BhY2Ugb2YgdGhlIGxheWVyLiBVc2VkIHdoZW4gY29uc2lkZXJpbmcgb2NjbHVz
aW9uIGZvciBhIGxheWVyIHRoYXQgcGFpbnRzL2RyYXdzIHNvbWV0aGluZy4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMYXllclR5cGU+IEludFJlY3QgdW5vY2NsdWRlZENvbnRlbnRSZWN0KExheWVy
VHlwZSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKyAgICAvLyBHaXZlcyBh
biB1bm9jY2x1ZGVkIHN1Yi1yZWN0IG9mIHxjb250ZW50UmVjdHwgaW4gdGhlIGNvbnRlbnQgc3Bh
Y2Ugb2YgdGhlIFJlbmRlclN1cmZhY2Ugb3duZWQgYnkgdGhlIGxheWVyLiBVc2VkIHdoZW4gY29u
c2lkZXJpbmcgb2NjbHVzaW9uIGZvciBhIHRhcmdldCBzdXJmYWNlLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+IEludFJlY3QgdW5v
Y2NsdWRlZFN1cmZhY2VDb250ZW50UmVjdChMYXllclR5cGUqLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB0eXBlZGVmIHZvaWQgUmVuZGVyU3Vy
ZmFjZVZvaWRUeXBlOworCisgICAgc3RydWN0IFN0YWNrT2JqZWN0IHsKKyAgICAgICAgUmVuZGVy
U3VyZmFjZVZvaWRUeXBlKiBzdXJmYWNlOworICAgICAgICBSZWdpb24gb2NjbHVzaW9uSW5TY3Jl
ZW47CisgICAgICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldDsKKyAgICB9OworCisgICAgLy8g
VGhlIHN0YWNrIGhvbGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1YnRyZWVzIGluIHRoZSBSZW5k
ZXJTdXJmYWNlLUxheWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBsZWF2ZSBhIHN1YnRyZWUgd2Ug
bWF5CisgICAgLy8gYXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90IHRvIHRoZSBwYXJ0cyBvdXRz
aWRlIHRoZSBzdWJ0cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGEgbmV3IHN1
YnRyZWUgdW5kZXIgYSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdldCB0byB0aGUgdG9wIG9mIHRo
ZSBzdGFjay4gVGhpcyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVwcmVzZW50aW5nIGl0c2VsZiwg
b3IgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4gd2UgdmlzaXQgYSB0YXJnZXQg
c3VyZmFjZSwgd2UgYXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJl
c2VudGluZyBpdHNlbGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRvIHRoZSBjdXJyZW50IHN1YnRy
ZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2
aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGluZyBzdXJmYWNlLCB0aGUgY3Vy
cmVudCB0YXJnZXQgd2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRoZSBzdGFjayBzaW5jZSB3ZSBq
dXN0IGNhbWUgZnJvbSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2UuCisgICAgLy8gV2UgbWVyZ2Ug
dGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRoZSBuZXcgY3VycmVu
dCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGlmIG5v
dCBhbHJlYWR5IHRoZXJlLgorICAgIFZlY3RvcjxTdGFja09iamVjdCwgMT4gbV9zdGFjazsKKwor
cHJpdmF0ZToKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ09jY2x1c2lvblRyYWNrZXJCYXNl
KTsKK307CisKK2NsYXNzIENDT2NjbHVzaW9uVHJhY2tlciA6IHB1YmxpYyBDQ09jY2x1c2lvblRy
YWNrZXJCYXNlIHsKK3B1YmxpYzoKKyAgICB2b2lkIGVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCk7CisgICAgdm9pZCBsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCk7CisgICAgdm9p
ZCBtYXJrT2NjbHVkZWRCZWhpbmRMYXllcihMYXllckNocm9taXVtKik7CisgICAgYm9vbCBvY2Ns
dWRlZChMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Owor
ICAgIEludFJlY3QgdW5vY2NsdWRlZENvbnRlbnRSZWN0KExheWVyQ2hyb21pdW0qLCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkU3VyZmFj
ZUNvbnRlbnRSZWN0KExheWVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVu
dFJlY3QpIGNvbnN0OworfTsKKworY2xhc3MgQ0NPY2NsdXNpb25UcmFja2VySW1wbCA6IHB1Ymxp
YyBDQ09jY2x1c2lvblRyYWNrZXJCYXNlIHsKK3B1YmxpYzoKKyAgICB2b2lkIGVudGVyVGFyZ2V0
UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7CisgICAgdm9pZCBsZWF2
ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7CisgICAg
dm9pZCBtYXJrT2NjbHVkZWRCZWhpbmRMYXllcihDQ0xheWVySW1wbCopOworICAgIGJvb2wgb2Nj
bHVkZWQoQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Cisg
ICAgSW50UmVjdCB1bm9jY2x1ZGVkQ29udGVudFJlY3QoQ0NMYXllckltcGwqLCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkU3VyZmFjZUNv
bnRlbnRSZWN0KENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0
KSBjb25zdDsKK307CisKK30KKyNlbmRpZiAvLyBDQ09jY2x1c2lvblRyYWNrZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMzVmMmIxOTkwNzc5ZDY2OWVmODA0MDJmYjAwZjJh
NTU2MTQ3YzMyNi4uY2RhYTIzNjQ5NTRkYzhhOTk4MzMwMmY1YzFjNWUxNTI3ZmUzMjdlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03NSw2ICs3NSw3IEBACiAgICAgICAgICAg
ICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRy
ZWVUZXN0Q29tbW9uLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAK
aW5kZXggYjFmYTcyOTE4NDAxZTMyNDBlNDFkMTNkMmUwYzI3ZDBjNTZhZDdjNS4uZDJlMWNmZWY5
M2UyODIxNjZkYTg1MTI1NmM5NWMwZTY1MTJjNjliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBA
IC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDQ0xheWVyVHJlZVRlc3RDb21tb24uaCIKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CkBAIC0z
NiwxMiArMzUsNiBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotI2RlZmluZSBFWFBF
Q1RfRVFfUkVDVChhLCBiKSBcCi0gICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKLSAgICBF
WFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAotICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lk
dGgoKSk7IFwKLSAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7Ci0KIG5hbWVz
cGFjZSB7CiAKIHZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVt
KiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBh
bmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMs
IGJvb2wgcHJlc2VydmVzM0QpCkBAIC02MDIsMTc0ICs1OTUsNCBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKIC8vICAt
IHRlc3QgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBDQ0xheWVyVHJlZUhvc3RDb21tb24KIC8vCiAK
LVRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRS
ZWdpb24pCi17Ci0gICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFy
ZSBiZWluZyB1c2VkLgotICAgIFJlZ2lvbiBvY2NsdWRlZDsKLSAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKLSAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKLQotICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDAp
LCBmYWxzZSk7Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0KLSAgICBsYXllci0+c2V0
T3BhcXVlKHRydWUpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1
bW15TGF5ZXJMaXN0OwotICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAg
Ly8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhh
dmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9v
LgotICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0
KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0K
LSAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNj
cmVlblNwYWNlKG9jY2x1ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwg
NzAsIDcwKSwgb2NjbHVkZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQu
cmVjdHMoKS5zaXplKCkpOwotfQotCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxh
eWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQotewotICAgIC8vIFRoaXMg
dGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdp
b24gb2NjbHVkZWQ7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7Ci0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRD
aGlsZChsYXllcik7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsK
LSAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOwotICAgIGxheWVyVHJhbnNm
b3JtLnJvdGF0ZSg5MCk7Ci0gICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTAp
OwotCi0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKLSAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZh
bHNlKTsKLQotICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7Ci0KLSAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Ci0gICAgaW50IGR1bW15TWF4VGV4
dHVyZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1s
YXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBo
YXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCi0gICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNl
dENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkp
OwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJl
bnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50
KTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKLQotICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7Ci0gICAgbGF5
ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOwotICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2NsdWRlZC5ib3VuZHMoKSk7Ci0gICAg
RVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Ci19Ci0KLVRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdpb25XaXRoVHJh
bnNsYXRpb24pCi17Ci0gICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1z
IGFyZSBiZWluZyB1c2VkLgotICAgIFJlZ2lvbiBvY2NsdWRlZDsKLSAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKLSAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKLQotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOwotICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgy
MCwgMjApOwotCi0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKLSAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIGZhbHNlKTsKLQotICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7Ci0KLSAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Ci0gICAgaW50IGR1bW15
TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAi
cm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ug
d2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCi0gICAgcGFyZW50LT5yZW5kZXJTdXJmYWNl
KCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cGFyZW50KTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKLQotICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7Ci0g
ICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOwotICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUwLCA1MCwgNTApLCBvY2NsdWRlZC5ib3VuZHMoKSk7
Ci0gICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Ci19Ci0KLVRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRSZWdpb25X
aXRoUm90YXRlZFN1cmZhY2UpCi17Ci0gICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0
cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFJlZ2lvbiBvY2NsdWRlZDsKLSAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5l
dyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKLSAgICBj
aGlsZC0+YWRkQ2hpbGQobGF5ZXIpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRU
cmFuc2Zvcm07Ci0gICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKLSAgICBj
aGlsZFRyYW5zZm9ybS5yb3RhdGUoOTApOwotICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgt
MjUwLCAtMjUwKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7Ci0gICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAw
LCA1MDApLCBmYWxzZSk7Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0KLSAgICBjaGls
ZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKLSAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOwot
Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0Owot
ICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6IHdoZW4g
d2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVy
VHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICBvY2NsdWRlZCA9
IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1
ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVk
ZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkp
OwotCi0gICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9wYXF1ZSByZWN0IGZyb20g
fGxheWVyfDoKLSAgICAgICAgICAgICAgIDEwMAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCi0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwzMCAgVmlzaWJsZSByZWdp
b24gb2YgfGxheWVyfDogLy8vLy8KLSAgICAgIHwgICAgMzAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICByb3RhdGUoOTApICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAot
ICAgICAgfCAzMCArIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAg
ICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIDEw
MCB8ICAgIHwgIDEwICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgID09
PiAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwxMCAgICAgICAgICAgICAgIHwKLSAgICAgIHwg
ICAgfDEwKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAg
ICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgfAotICAgICAgfCAgICB8
ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwg
IHwgIHwvLy8vLy8vLy8vLy8vLy98ICAgICA0MjAgICAgICB8ICB8Ci0gICAgICB8ICAgIHwgIHwg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAg
fC8vLy8vLy8vLy8vLy8vL3w2MCAgICAgICAgICAgIHwgIHwKLSAgICAgIHwgICAgfCAgfCAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8v
Ly8vLy8vLy8vLy8vfCAgICAgICAgICAgICAgfCAgfAotICAgICAgKy0tLS18LS18LS0tLS0tLS0t
LS0tLSsgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICstLXwtLXwtLS0tLS0t
LS0tLS0tLS0rICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgIDIwfDEwfCAgICAgNzAgICAg
ICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgfDUwMCAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
fCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICB8Ci0gICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAg
ICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwxMHwK
LSAgICAgICAgICAgKy0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgICAgICAg
ICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tKwotICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgIDQ5MCAgICAgICAgICAgICB8Ci0gICAgICAgICAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAg
ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA1MDAKLSAgICAgKi8KLX0KLQogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdkNTdiYTNlYjBmZmM5ZjkwMWFjMjkzM2E4M2I0NTMyNzViM2Q0MWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9u
VHJhY2tlclRlc3QuY3BwCkBAIC0wLDAgKzEsNzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ09jY2x1c2lvblRyYWNrZXIuaCIKKworI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChh
LCBiKSBcCisgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55
KCksIGIueSgpKTsgXAorICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAg
ICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CisKK25hbWVzcGFjZSB7CisKK3Zv
aWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgb3BhcXVl
KQoreworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0
U3VibGF5ZXJUcmFuc2Zvcm0oc3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNo
b3JQb2ludChhbmNob3IpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAg
bGF5ZXItPnNldEJvdW5kcyhib3VuZHMpOworICAgIGxheWVyLT5zZXRPcGFxdWUob3BhcXVlKTsK
K30KKworY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQgOiBwdWJsaWMg
TGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKQorICAgICAgICA6IExheWVyQ2hyb21pdW0oKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsK
KworLy8gQSBzdWJjbGFzcyB0byBleHBvc2UgdGhlIHRvdGFsIGN1cnJlbnQgb2NjbHVzaW9uLgor
Y2xhc3MgVGVzdENDT2NjbHVzaW9uVHJhY2tlciA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXIg
eworcHVibGljOgorICAgIFJlZ2lvbiBvY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVl
bjsgfQorICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVy
biBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0OyB9
CisKKyAgICB2b2lkIHNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoY29uc3QgUmVnaW9uJiByZWdp
b24pIHsgQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVl
biA9IHJlZ2lvbjsgfQorICAgIHZvaWQgc2V0T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKGNvbnN0
IFJlZ2lvbiYgcmVnaW9uKSB7IENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2Nj
bHVzaW9uSW5UYXJnZXQgPSByZWdpb247IH0KK307CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0
aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlk
ZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0
Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXll
ci5nZXQoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisg
ICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZh
bHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNzAs
IDcwKSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKS5pc0VtcHR5KCkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMjksIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyOSwgNzAsIDEpLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcwLCA3
MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMxLCAyOSwgNzAsIDcwKSwgb2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDI5LCA3
MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDMwLCAxLCA3MCksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAz
MCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDMxLCA3MCwgNzAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgz
MSwgMzEsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcw
LCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDMxLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMzEs
IDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDI5LCAzMSwgNzAsIDcwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRl
c3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQoreworICAgIC8vIFRo
aXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1
MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBsYXllclRyYW5zZm9ybS50
cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3Jt
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJ
bnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1
MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAg
ICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVj
dCgzMCwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNU
X0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAy
OSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFs
c2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA3MCwg
NzApKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpLmlzRW1wdHkoKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMjksIDcwLCA3MCksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAyOSwgNzAsIDcwKSkp
OworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDI5LCA3MCwgMSksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAsIDcw
KSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDI5LCA3MCwgNzApLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMjksIDcw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMzAsIDEsIDcwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMw
LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMSwgMzEsIDcwLCA3MCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMx
LCAzMSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDEwMCwgNzAs
IDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgzMCwgMzEsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCAzMSwg
NzAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMjksIDMxLCA3MCwgNzApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCit7CisgICAgLy8g
VGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAy
MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwg
dHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXll
ckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQt
PnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9u
LmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
b2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbklu
U2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3Vy
ZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25J
blRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwg
b2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTAsIDUwLCA1MCkp
KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVj
dCg1MSwgNTAsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUxLCA1MCwgNTApKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCg1MCwgNTAsIDUwLCA1MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCg0OSwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCg0OSwgNDksIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoNTAsIDQ5LCA1MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoNTEsIDQ5LCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNDksIDUwLCA1MCkpKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUwLCA1MCwgNTApKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MSwgNTEsIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MSwgNTAsIDUwKSkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDEwMCwgNTAsIDEpLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MSwgNTAsIDUwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUxLCA1MCwg
NTApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2Nj
bHVkZWRSZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0
IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50
aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7Cisg
ICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAs
IDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1
MDAsIDUwMCksIHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisK
KyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Cisg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFy
Z2V0UmVuZGVyU3VyZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24u
bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNw
YWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbklu
U2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgxMCwgNDMwLCA2MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCku
Ym91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNp
b24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0
KDksIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1
ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMw
LCA2MSwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hp
bGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcxKSkpOworCisgICAgb2NjbHVzaW9uLm1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVU
b1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1
cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHRydWUs
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzksIDcwLCA2MCkpKTsKKwor
CisgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbiBmcm9tIHxsYXll
cnw6CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8MzAgIFZpc2libGUgcmVnaW9uIG9m
IHxsYXllcnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAgICAgICAgfCAgICAgICAgICAg
cm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
IHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAg
ICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAg
ICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICA9PT4gICAg
IHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgIHwx
MCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgfCAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAgICAgIHwgICAgfCAgfCAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8
Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8v
Ly8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8v
Ly8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0tfC0tfC0tLS0tLS0tLS0tLS0r
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICArLS18LS18LS0tLS0tLS0tLS0t
LS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwxMHwgICAgIDcwICAgICAgICAg
ICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8
ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAg
ICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAor
ICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAg
ICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MTB8CisgICAg
ICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgICAg
ICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLSsKKyAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5
ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVhZHlPblN0YWNrKQoreworICAg
IC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4K
KyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBjaGlsZDIgPSBhZG9wdFJlZihuZXcgTGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hp
bGQobGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQyKTsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0
ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxk
VHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwg
dHJ1ZSk7CisKKyAgICAvLyB8Y2hpbGQyfCBtYWtlcyB8cGFyZW50fCdzIHN1cmZhY2UgZ2V0IGNv
bnNpZGVyZWQgYnkgQ0NPY2NsdXNpb25UcmFja2VyIGZpcnN0LCBpbnN0ZWFkIG9mIHxjaGlsZHwn
cy4gVGhpcyBleGVyY2lzZXMgZGlmZmVyZW50IGNvZGUgaW4KKyAgICAvLyBsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZSwgYXMgdGhlIHRhcmdldCBzdXJmYWNlIGhhcyBhbHJlYWR5IGJlZW4gc2Vl
bi4KKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMw
LCAzMCksIEludFNpemUoNjAsIDIwKSwgdHJ1ZSk7CisKKyAgICBjaGlsZC0+c2V0TWFza3NUb0Jv
dW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1t
eUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2Ns
dXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQyLmdldCgpKTsKKwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwgMjApLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1
c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwgMjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIG9jY2x1c2lv
bi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
b2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3
MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQo
KSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1
c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDI5LCA2MCwgNzApKSk7Cisg
ICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJl
Y3QoMTEsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9j
Y2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3MCkpKTsKKworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIElu
dFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAgICAvLyBUaGlzIGlzIHRoZSBs
aXR0bGUgcGllY2Ugbm90IG9jY2x1ZGVkIGJ5IGNoaWxkMgorICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoOSwgNDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hp
bGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7CisgICAgLy8gVGhpcyBleHRlbmRz
IHBhc3QgYm90aCBzaWRlcyBvZiBjaGlsZDIsIHNvIGl0IHdpbGwgYmUgdGhlIG9yaWdpbmFsIHJl
Y3QuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5LCA0MzAsIDYwLCA4MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwg
ODApKSk7CisgICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgdHdvIGFkamFjZW50IHNpZGVzIG9mIGNo
aWxkMiwgYW5kIHNob3VsZCBpbmNsdWRlZCB0aGUgdW5vY2NsdWRlZCBwYXJ0cyBvZiBlYWNoIHNp
ZGUuCisgICAgLy8gVGhpcyBhbHNvIGRlbW9uc3RyYXRlcyB0aGF0IHRoZSByZWN0IGNhbiBiZSBh
cmJpdHJhcnkgYW5kIGRvZXMgbm90IGdldCBjbGlwcGVkIHRvIHRoZSBsYXllcidzIHZpc2libGVM
YXllclJlY3QoKS4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDMwLCAyMCwgNzAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KC0x
MCwgNDMwLCA2MCwgNzApKSk7CisgICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgdGhyZWUgYWRqYWNl
bnQgc2lkZXMgb2YgY2hpbGQyLCBzbyBpdCBzaG91bGQgY29udGFpbiB0aGUgdW5vY2NsdWRlZCBw
YXJ0cyBvZiBlYWNoIHNpZGUuIFRoZSBsZWZ0CisgICAgLy8gYW5kIGJvdHRvbSBlZGdlcyBhcmUg
Y29tcGxldGVseSB1bm9jY2x1ZGVkIGZvciBzb21lIHJvdy9jb2x1bW4gc28gd2UgZ2V0IGJhY2sg
dGhlIG9yaWdpbmFsIHF1ZXJ5IHJlY3QuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgtMTAs
IDQzMCwgNjAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQo
KSwgSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMTAsIDQyOSwgNjAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
LmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDcwLCA0MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChj
aGlsZC5nZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgxMCwgNTAwLCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMSwgNjAsIDcwKSkpOworCisgICAgLy8gU3Vy
ZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYw
LCA3MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZC5n
ZXQoKSk7CisgICAgLy8gfGNoaWxkMnwgc2hvdWxkIGdldCBtZXJnZWQgd2l0aCB0aGUgc3VyZmFj
ZSB3ZSBhcmUgbGVhdmluZyBub3cKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCku
Ym91bmRzKCkpOworICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwg
MzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMo
KSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNl
KCkucmVjdHMoKS5zaXplKCkpOworCisgICAgVmVjdG9yPEludFJlY3Q+IHNjcmVlbiA9IG9jY2x1
c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKTsKKyAgICBWZWN0b3I8SW50UmVj
dD4gdGFyZ2V0ID0gb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCk7
CisKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzAsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5
MCwgMzAsIDEwLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9j
Y2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA2MCwgMTApKSk7
CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDI5LCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDYwLCAxMCkpKTsKKyAgICBF
WFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MzEsIDMwLCA2MCwgMTApKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA2MCwgMTApKSk7CisKKyAgICBFWFBFQ1Rf
RVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDAs
IDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNl
LCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYw
KSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA2MCwgMTApKS5pc0VtcHR5KCkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNjAsIDEwKSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDI5LCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNjAsIDEwKSkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOTAsIDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNjAsIDEwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNjAsIDEwKSkuaXNFbXB0eSgpKTsKKworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCA0MCwgNzAsIDYwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDI5LCA0MCwgMSwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgyOSwgNDAsIDcwLCA2MCkpKTsKKyAgICAvLyBUaGlzIHJlY3QgaXMg
bW9zdGx5IG9jY2x1ZGVkIGJ5IHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
OTAsIDM5LCAxMCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYwKSkpOworICAgIC8vIFRoaXMgcmVjdCBleHRlbmRz
IHBhc3QgdG9wL3JpZ2h0IGVuZHMgb2YgfGNoaWxkMnwuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMjksIDcwLCAxMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAsIDcwKSkpOworICAgIC8vIFRoaXMgcmVjdCBl
eHRlbmRzIHBhc3QgbGVmdC9yaWdodCBlbmRzIG9mIHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMjAsIDM5LCA4MCwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzksIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDEwMCwgNDAsIDEsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMTAwLCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkpOworCisg
ICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0
c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVz
aW9uLnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCA0MCwgNzAsIDYwKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUg
b2NjbHVzaW9uIGZyb20gfGxheWVyfDoKKyAgICAgICAgICAgICAgIDEwMAorICAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwz
MCAgVmlzaWJsZSByZWdpb24gb2YgfGxheWVyfDogLy8vLy8KKyAgICAgIHwgICAgMzAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICByb3RhdGUoOTApICAgICAgICAgICAgICAgICB8ICAgICAzMCAg
IDYwICAgICAgICAgfCAgICB8Y2hpbGQyfDogXFxcXFwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0t
LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICB8ICAzMCArLS0tLS0t
LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICA9PT4gICAgIHwgICAgIHxcXFxcXFxcXFxc
XFx8ICB8MTAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tfC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgfCAgKy0tfFxcXFxcXFxcXFxcXHwt
LS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAgICAgIHwgICAgKyAtLS0tLS0tLS0tLS0rICB8ICAgICAg
ICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICArLS0tLS0tLS0tLS0tKy8vfCAg
ICAgNDIwICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAg
ICAgICAgICB8ICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAg
ICAgIHwgIHwKKyAgICAgICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8
IHwgICAgICAgICAgICAgICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAg
fCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAg
ICAgICAgICAgICAgICAgICAyMHwxMHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8
CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAg
ICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAg
ICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAg
ICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAg
ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAg
ICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAg
IHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAg
ICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAg
fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICA0OTAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICov
Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRS
ZWdpb25XaXRoUm90YXRlZE9mZkF4aXNTdXJmYWNlKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0Nv
bnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVu
dC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAgICAv
LyBOb3cgcm90YXRlIHRoZSBjaGlsZCBhIGxpdHRsZSBtb3JlIHNvIGl0IGlzIG5vdCBheGlzLWFs
aWduZWQuIFRoZSBwYXJlbnQgd2lsbCBubyBsb25nZXIgYmUgb2NjbHVkZWQgYnkgfGxheWVyfCwg
YnV0CisgICAgLy8gdGhlIGNoaWxkJ3Mgb2NjbHVzaW9uIHNob3VsZCBiZSB1bmNoYW5nZWQuCisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5NSk7
CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNs
YXRlKDEwLCAxMCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUw
MCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIu
Z2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgY2hpbGQt
PnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1
MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworCisgICAgSW50UmVjdCBjbGlwcGVkTGF5ZXJJbkNoaWxkID0gbGF5ZXJUcmFuc2Zvcm0ubWFw
UmVjdChsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRh
cmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9u
Lm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgRVhQRUNUX0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
LnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkTGF5ZXJJbkNoaWxk
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVY
UEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCku
c2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQu
Z2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hp
bGQpLmlzRW1wdHkoKSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKC0xLCAwKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgY2xpcHBl
ZExheWVySW5DaGlsZCkpOyAKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNoaWxkKS5pc0VtcHR5
KCkpOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgxLCAwKTsKKyAgICBjbGlwcGVkTGF5
ZXJJbkNoaWxkLm1vdmUoMSwgMCk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQoY2hpbGQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBjbGlw
cGVkTGF5ZXJJbkNoaWxkKS5pc0VtcHR5KCkpOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92
ZSgtMSwgMCk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIC0xKTsKKyAgICBFWFBF
Q1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgY2xpcHBlZExheWVy
SW5DaGlsZCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7Cisg
ICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIDEpOworICAgIGNsaXBwZWRMYXllckluQ2hp
bGQubW92ZSgwLCAxKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChj
aGlsZC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXll
ckluQ2hpbGQpLmlzRW1wdHkoKSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIC0x
KTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcg
aW50byBpdHNlbGYuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA1MDAsIDUwMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDAsIDAsIDUwMCwgNTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGlu
ZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgpLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAg
ICBFWFBFQ1RfRVEoMHUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMo
KS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgb2NjbHVzaW9uLm9jY2x1
c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1
c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBF
WFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
NzUsIDU1LCAxLCAxKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNzUsIDU1LCAxLCAx
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
NzUsIDU1LCAxLCAxKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhp
bmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAs
IDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworfQorCitURVNUKENDT2NjbHVz
aW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aE11bHRpcGxlT3Bh
cXVlTGF5ZXJzKQoreworICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgdGVz
dCBidXQgbm93IHdlIG1ha2UgYSBmZXcgb3BhcXVlIGxheWVycyBpbnNpZGUgb2YgfGNoaWxkfCBz
byB0aGF0IHRoZSBvY2NsdWRlZCBwYXJ0cyBvZiBjaGlsZCBhcmUgbm90IGEgc2ltcGxlIHJlY3Qu
CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRD
aGlsZChsYXllcjEpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcjIpOworCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNs
YXRlKDI1MCwgMjUwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgIGNoaWxk
VHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBm
YWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgY2hp
bGRUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhsYXllcjEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNDQw
KSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllcjIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgxMCwgNDUwKSwgSW50U2l6ZSg1MDAsIDYwKSwgdHJ1ZSk7CisKKyAgICBjaGlsZC0+c2V0
TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsK
KworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0
KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisK
KyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0
KCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjEuZ2V0KCkp
OworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApLCBvY2NsdXNpb24ub2NjbHVz
aW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVY
UEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAs
IDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMSwgNjAsIDcwKSkp
OworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGls
ZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKS5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoOSwgNDMwLCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDI5LCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQyOSwgNjAsIDcwKSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNzAsIDQzMCwgMSwgNzApLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA1MDAsIDYwLCAxKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2MCwgNzAp
KSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3
IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIElu
dFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJl
aGluZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRl
clN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2Ny
ZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgz
MCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJm
YWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5
LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzksIDcwLCA2MCkpKTsKKworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMwLCA0MCwgNzAsIDYwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDI5LCA0MCwgMSwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgyOSwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDMwLCAzOSwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMzksIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDEwMCwgNDAsIDEsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMCwgMTAwLCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkpOworCisgICAgLy8gU3Vy
ZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRTdXJmYWNlQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAs
IDYwKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVzaW9u
IGZyb20gfGxheWVyMXwgYW5kIHxsYXllcjJ8OgorCisgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfDMwICBWaXNpYmxlIHJlZ2lvbiBv
ZiB8bGF5ZXIxfDogLy8vLy8KKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICBWaXNp
YmxlIHJlZ2lvbiBvZiB8bGF5ZXIyfDogXFxcXFwKKyAgICAgICB8ICAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAg
ICAgICAgICAgICAgICB8CisgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t
LS0tLSsgIHwKKyAgICAgICB8ICB8ICB8XFxcXFxcXFxcXFxcfC8vfCAgICAgNDIwICAgICAgfCAg
fAorICAgICAgIHwgIHwgIHxcXFxcXFxcXFxcXFx8Ly98NjAgICAgICAgICAgICB8ICB8CisgICAg
ICAgfCAgfCAgfFxcXFxcXFxcXFxcXHwvL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICArLS18
LS18LS0tLS0tLS0tLS0tfC0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAyMHwxMHwgICAg
IDcwICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgfCAgfCAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICB8ICB8ICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgfCAgfAorICAgICAgICAgIHwgIHwgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICB8ICB8CisgICAgICAgICAgfCAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwg
IHwKKyAgICAgICAgICB8ICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgfAorICAg
ICAgICAgIHwgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8MTB8CisgICAgICAgICAg
fCAgKy0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLSsKKyAgICAgICAgICB8ICAgICAg
ICAgICAgICAgfCA0OTAgICAgICAgICAgICAgfAorICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgNjAgICAgICAgICAgICAgICA0NDAK
KyAgICAgKi8KK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVz
aW9uV2l0aE92ZXJsYXBwaW5nU2libGluZ1N1cmZhY2VzKQoreworICAgIC8vIFRoaXMgdGVzdHMg
dGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NPY2Ns
dXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDIg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGls
ZDIpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQobGF5ZXIxKTsKKyAgICBjaGlsZDItPmFkZENoaWxk
KGxheWVyMik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAg
ICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3Jt
LnJvdGF0ZSg5MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOwor
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGNoaWxkMS5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllcjEuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoY2hpbGQyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMjAsIDQwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyMi5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICBjaGlsZDEtPnNldE1hc2tz
VG9Cb3VuZHModHJ1ZSk7CisgICAgY2hpbGQyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAg
IGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdl
dFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5t
YXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgyMCwgNDAsIDgwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNw
YWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbklu
U2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgwLCA0MjAsIDYwLCA4MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5i
b3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lv
bi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDIwLCA2MCwgODApKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0
KC0xLCA0MjAsIDYwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDE5LCA2MCwgODApKSk7CisgICAgRVhQRUNU
X0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQy
MCwgNjEsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNo
aWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjAsIDYwLCA4MSkpKTsKKworICAgIC8vIFN1cmZhY2Ug
aXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MjAsIDYwLCA4MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
U3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjAsIDYwLCA4MCkp
KTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDIuZ2V0KCkp
OworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGxheWVyMS5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCAzMCwg
ODAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQzMCwgNzAsIDcwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5n
ZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9j
Y2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEsIDQzMCwgNzAsIDcwKSkp
OworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwg
SW50UmVjdCgwLCA0MjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lv
bi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDMwLCA3MSwgNzApKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0
KDAsIDQzMCwgNzAsIDcxKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkg
dGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZiwgYnV0IHRoZSB8Y2hpbGQxfCBzdXJmYWNlIHNo
b3VsZCBiZSBvY2NsdWRlZCBieSB0aGUgfGNoaWxkMnwgc3VyZmFjZS4KKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDAsIDQzMCwgMTAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRTdXJmYWNl
Q29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQzMCwgNzAsIDcwKSkpOworCisg
ICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkMS5nZXQoKSk7CisgICAg
b2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDMwLCA4MCwgNzApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgydSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVj
dCgyMCwgMzAsIDgwLCA3MCkpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwg
MzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA3MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfRVEo
dHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgNDAsIDgw
LCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMTksIDQwLCA4MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAzOSwgODAsIDYwKSkp
OworCisgICAgLy8gfGNoaWxkMXwgYW5kIHxjaGlsZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBz
byB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDIwLCAzMCwgODAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAzMCwgODAsIDcwKSkpOworCisKKyAgICAvKiBKdXN0
aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVzaW9uIGZyb20gfGxheWVyfDoKKyAgICAgICAg
ICAgICAgIDEwMAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICB8CisgICAgICB8ICAgIDMwICAgICAgICAgICAgICAgfCAgICAgICBjaGls
ZDEKKyAgICAgIHwgIDMwKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIDEw
MCB8ICA0MHwgICAgICAgICAgICAgICAgfCAgICAgY2hpbGQyICAgICAgfAorICAgICAgfDIwKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKKyAgICAgIHwgIHwgfCAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgfCB8CisgICAgICB8ICB8IHwgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgIHwgfAorICAgICAgfCAgfCB8ICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgICB8IHwKKyAgICAgICstLXwtfC0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAg
fCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCA1MDAK
KyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAgICAg
ICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IHwKKyAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0r
CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAg
ICAgICAgIDUwMAorICAgICAqLworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127055</attachid>
            <date>2012-02-14 15:21:46 -0800</date>
            <delta_ts>2012-02-16 20:17:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78549-20120214182145.patch</filename>
            <type>text/plain</type>
            <size>86297</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQ3ZGU1OTViOWRlMzMw
YTdjMjU3ZWRhYjc3NDM3ZGRmNDllNzZkZC4uNTBlMWU5MDY3NzE1NDdjODE3MTI2M2YxZTQyZTJm
MWMyMWMxZmJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAyLTEzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gTmV3
IENDT2NjbHVzaW9uVHJhY2tlciBjbGFzcyB3aXRoIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB1bml0IHRlc3RzOiBDQ09jY2x1c2lvblRy
YWNrZXJUZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJC
YXNlOjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNm
b3JtU3VyZmFjZU9wYXF1ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRy
YWNrZXJCYXNlOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVP
Y2NsdXNpb25CZWhpbmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlOjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlOjpjbGVhckFsbEZvckN1cnJlbnRUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6dGVzdENvbnRlbnRSZWN0T2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NP
Y2NsdXNpb25UcmFja2VyQmFzZTo6b2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmVjdFN1
YnRyYWN0UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVVbm9jY2x1ZGVkQ29udGVu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6dW5vY2Ns
dWRlZENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlckJh
c2U6OnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NP
Y2NsdXNpb25UcmFja2VyOjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXI6Om1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlcjo6b2NjbHVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjp1bm9jY2x1ZGVkQ29udGVudFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjp1bm9jY2x1ZGVkU3Vy
ZmFjZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlcklt
cGw6OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1
c2lvblRyYWNrZXJJbXBsOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjpvY2NsdWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjp1bm9jY2x1ZGVkQ29udGVu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VySW1wbDo6dW5vY2Ns
dWRlZFN1cmZhY2VDb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
T2NjbHVzaW9uVHJhY2tlckJhc2U6OkNDT2NjbHVzaW9uVHJhY2tlckJhc2UpOgorICAgICAgICAo
U3RhY2tPYmplY3QpOgorICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2VyKToKKyAgICAgICAgKEND
T2NjbHVzaW9uVHJhY2tlckltcGwpOgorCiAyMDEyLTAyLTEzICBDYWlvIE1hcmNlbG8gZGUgT2xp
dmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgTW92
ZSBhdHRyaWJ1dGUgc3RvcmFnZSBmcm9tIE5hbWVkTm9kZU1hcCB0byBFbGVtZW50QXR0cmlidXRl
RGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyOGUyMWNiZDA0ODA0MmNmOTM1NGJi
YWYyZGZhOTA2MDg2ZTAwOTc4Li42MWJkOGZhYTM0OWVhNzdhODZlNTBmNzIwZjYwY2VkZWYzZmQ2
YWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAy
LTEzICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJv
bWl1bV0gTmV3IENDT2NjbHVzaW9uVHJhY2tlciBjbGFzcyB3aXRoIHRlc3RzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU0OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAg
ICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ6OkxheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50OjpkcmF3c0NvbnRlbnQpOgor
ICAgICAgICAoVGVzdENDT2NjbHVzaW9uVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
Q0NPY2NsdXNpb25UcmFja2VyOjpvY2NsdXNpb25JblNjcmVlblNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6Om9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzZXRPY2NsdXNpb25J
blNjcmVlblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6
OnNldE9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KwogMjAxMi0wMi0xMyAgWW9zaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW0Zvcm1zXSBVc2UgZW51bSBpbnN0ZWFkIG9mIGJvb2wgZm9yIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOWQzZjgyYzE5NDQzNzJiYmE5N2I4NGVi
NTVmZTM4MjA0MGMyZmI5Yy4uZDE4ZDliNWJlNTZiMDcwMTgzNmUzNTEyOTMzZjI5N2IwNzQxMTM3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzI2Niw2ICszMjY2LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQYWdlU2NhbGVBbmltYXRp
b24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVn
aW5EcmF3UXVhZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGNmYWNjY2NiZWNiZmY1OGIyNzI0NDE0M2RkZGY0ODM0Yzk5MDM2MQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJjYy9DQ09jY2x1c2lvblRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
OjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZVR5cGUqIG5ld1RhcmdldCkK
K3sKKyAgICBpZiAoIW1fc3RhY2suaXNFbXB0eSgpICYmIG1fc3RhY2subGFzdCgpLnN1cmZhY2Ug
PT0gbmV3VGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YWNrLmFwcGVuZChTdGFj
a09iamVjdCgpKTsKKyAgICBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlID0gbmV3VGFyZ2V0OworCisg
ICAgLy8gV2UgY29weSB0aGUgc2NyZWVuIG9jY2x1c2lvbiBpbnRvIHRoZSBuZXcgUmVuZGVyU3Vy
ZmFjZSBzdWJ0cmVlLCBidXQgd2UgbmV2ZXIgY29weSBpbiB0aGUKKyAgICAvLyB0YXJnZXQgb2Nj
bHVzaW9uLCBzaW5jZSB3ZSBhcmUgbG9va2luZyBhdCBhIG5ldyBSZW5kZXJTdXJmYWNlIHRhcmdl
dC4KKworICAgIGJvb2wgY29weVNjcmVlbk9jY2x1c2lvbkZvcndhcmQgPSBtX3N0YWNrLnNpemUo
KSA+IDE7CisgICAgaWYgKGNvcHlTY3JlZW5PY2NsdXNpb25Gb3J3YXJkKSB7CisgICAgICAgIGlu
dCBsYXN0SW5kZXggPSBtX3N0YWNrLnNpemUoKSAtIDE7CisgICAgICAgIG1fc3RhY2tbbGFzdElu
ZGV4XS5vY2NsdXNpb25JblNjcmVlbiA9IG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVzaW9u
SW5TY3JlZW47CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZT4KK3N0YXRpYyBpbmxpbmUgUmVnaW9uIHRyYW5zZm9ybVN1cmZhY2VPcGFxdWVSZWdpb24oUmVu
ZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2UsIGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIC8vIFZlcmlmeSB0aGF0IHJlY3Rz
IHdpdGhpbiB0aGUgfHN1cmZhY2V8IHdpbGwgcmVtYWluIHJlY3RzIGluIGl0cyB0YXJnZXQgc3Vy
ZmFjZSBhZnRlciBhcHBseWluZyB8dHJhbnNmb3JtfC4gSWYgdGhpcyBpcyB0cnVlLCB0aGVuCisg
ICAgLy8gYXBwbHkgfHRyYW5zZm9ybXwgdG8gZWFjaCByZWN0IHdpdGhpbiB8cmVnaW9ufCBpbiBv
cmRlciB0byB0cmFuc2Zvcm0gdGhlIGVudGlyZSBSZWdpb24uCisKKyAgICBJbnRSZWN0IGJvdW5k
cyA9IHJlZ2lvbi5ib3VuZHMoKTsKKyAgICBGbG9hdFJlY3QgY2VudGVyZWRCb3VuZHMoLWJvdW5k
cy53aWR0aCgpIC8gMi4wLCAtYm91bmRzLmhlaWdodCgpIC8gMi4wLCBib3VuZHMud2lkdGgoKSwg
Ym91bmRzLmhlaWdodCgpKTsKKyAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRCb3VuZHNRdWFkID0g
dHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGNlbnRlcmVkQm91bmRzKSk7CisgICAgaWYgKCF0
cmFuc2Zvcm1lZEJvdW5kc1F1YWQuaXNSZWN0aWxpbmVhcigpKQorICAgICAgICByZXR1cm4gUmVn
aW9uKCk7CisKKyAgICBSZWdpb24gdHJhbnNmb3JtZWRSZWdpb247CisKKyAgICBJbnRSZWN0IHN1
cmZhY2VCb3VuZHMgPSBzdXJmYWNlLT5jb250ZW50UmVjdCgpOworICAgIFZlY3RvcjxJbnRSZWN0
PiByZWN0cyA9IHJlZ2lvbi5yZWN0cygpOworICAgIFZlY3RvcjxJbnRSZWN0Pjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gcmVjdHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8SW50UmVjdD46OmNvbnN0
X2l0ZXJhdG9yIGkgPSByZWN0cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CisgICAgICAgIEZs
b2F0UmVjdCBjZW50ZXJlZE9yaWdpblJlY3QoLWktPndpZHRoKCkgLyAyLjAgKyBpLT54KCkgLSBz
dXJmYWNlQm91bmRzLngoKSwgLWktPmhlaWdodCgpIC8gMi4wICsgaS0+eSgpIC0gc3VyZmFjZUJv
dW5kcy55KCksIGktPndpZHRoKCksIGktPmhlaWdodCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHRy
YW5zZm9ybWVkUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChjZW50ZXJlZE9yaWdp
blJlY3QpKTsKKyAgICAgICAgdHJhbnNmb3JtZWRSZWdpb24udW5pdGUoZW5jbG9zZWRJbnRSZWN0
KHRyYW5zZm9ybWVkUmVjdCkpOworICAgIH0KKyAgICByZXR1cm4gdHJhbnNmb3JtZWRSZWdpb247
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNl
VHlwZSogbmV3VGFyZ2V0KQoreworICAgIGludCBsYXN0SW5kZXggPSBtX3N0YWNrLnNpemUoKSAt
IDE7CisgICAgYm9vbCBzdXJmYWNlV2lsbEJlQXRUb3BBZnRlclBvcCA9IG1fc3RhY2suc2l6ZSgp
ID4gMSAmJiBtX3N0YWNrW2xhc3RJbmRleCAtIDFdLnN1cmZhY2UgPT0gbmV3VGFyZ2V0OworCisg
ICAgLy8gV2UgbWVyZ2UgdGhlIHNjcmVlbiBvY2NsdXNpb24gZnJvbSB0aGUgY3VycmVudCBSZW5k
ZXJTdXJmYWNlIHN1YnRyZWUgb3V0IHRvIGl0cyBwYXJlbnQgdGFyZ2V0IFJlbmRlclN1cmZhY2Uu
CisgICAgLy8gVGhlIHRhcmdldCBvY2NsdXNpb24gY2FuIGJlIG1lcmdlZCBvdXQgYXMgd2VsbCBi
dXQgbmVlZHMgdG8gYmUgdHJhbnNmb3JtZWQgdG8gdGhlIG5ldyB0YXJnZXQuCisKKyAgICBSZW5k
ZXJTdXJmYWNlVHlwZSogb2xkVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU3VyZmFjZVR5cGUq
PihtX3N0YWNrW2xhc3RJbmRleF0uc3VyZmFjZSk7CisgICAgUmVnaW9uIG9sZFRhcmdldE9jY2x1
c2lvbkluTmV3VGFyZ2V0ID0gdHJhbnNmb3JtU3VyZmFjZU9wYXF1ZVJlZ2lvbjxSZW5kZXJTdXJm
YWNlVHlwZT4ob2xkVGFyZ2V0LCBtX3N0YWNrW2xhc3RJbmRleF0ub2NjbHVzaW9uSW5UYXJnZXQs
IG9sZFRhcmdldC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIGlmIChzdXJmYWNlV2lsbEJlQXRU
b3BBZnRlclBvcCkgeworICAgICAgICAvLyBNZXJnZSB0aGUgdG9wIG9mIHRoZSBzdGFjayBkb3du
LgorCisgICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVzaW9uSW5TY3JlZW4udW5p
dGUobV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluU2NyZWVuKTsKKyAgICAgICAgbV9zdGFj
a1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblRhcmdldC51bml0ZShvbGRUYXJnZXRPY2NsdXNp
b25Jbk5ld1RhcmdldCk7CisgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIFJlcGxhY2UgdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2l0aCB0aGUgbmV3
IHB1c2hlZCBzdXJmYWNlLiBDb3B5IHRoZSBvY2NsdWRlZCBzY3JlZW4gcmVnaW9uIHRvIHRoZSB0
b3AuCisgICAgICAgIG1fc3RhY2subGFzdCgpLnN1cmZhY2UgPSBuZXdUYXJnZXQ7CisgICAgICAg
IG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0ID0gb2xkVGFyZ2V0T2NjbHVzaW9uSW5O
ZXdUYXJnZXQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CitzdGF0
aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNm
b3JtKExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgSW50U2l6ZSBib3VuZHNJbkxheWVyU3BhY2Ug
PSBsYXllci0+Ym91bmRzKCk7CisgICAgSW50U2l6ZSBib3VuZHNJbkNvbnRlbnRTcGFjZSA9IGxh
eWVyLT5jb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm0gPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsKKworICAgIGlmIChib3VuZHNJbkNv
bnRlbnRTcGFjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisKKyAgICAv
LyBTY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5ZXIgc3BhY2UKKyAgICB0cmFuc2Zvcm0u
c2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFjZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8
ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiB0cmFu
c2Zvcm07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUg
VHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybShMYXll
clR5cGUqIGxheWVyKQoreworICAgIEludFNpemUgYm91bmRzSW5MYXllclNwYWNlID0gbGF5ZXIt
PmJvdW5kcygpOworICAgIEludFNpemUgYm91bmRzSW5Db250ZW50U3BhY2UgPSBsYXllci0+Y29u
dGVudEJvdW5kcygpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKworICAgIGlmIChib3VuZHNJbkNvbnRlbnRTcGFjZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisKKyAgICAvLyBTY2FsZSBmcm9tIGNv
bnRlbnQgc3BhY2UgdG8gbGF5ZXIgc3BhY2UKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3Jt
KGJvdW5kc0luTGF5ZXJTcGFjZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJ
bkNvbnRlbnRTcGFjZS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
dW5kc0luTGF5ZXJTcGFjZS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5D
b250ZW50U3BhY2UuaGVpZ2h0KCkpKTsKKworICAgIC8vIFRoZSBkcmF3IHRyYW5zZm9ybSBleHBl
Y3RzIHRoZSBvcmlnaW4gdG8gYmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGF5ZXIuCisgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzSW5Db250ZW50U3BhY2Uud2lkdGgoKSAvIDIuMCwgLWJv
dW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJldHVybiB0cmFuc2Zv
cm07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgUmVn
aW9uIGNvbXB1dGVPY2NsdXNpb25CZWhpbmRMYXllcihMYXllclR5cGUqIGxheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIFJlZ2lvbiBvcGFxdWVSZWdp
b247CisKKyAgICBGbG9hdFF1YWQgdW5vY2NsdWRlZFF1YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZChG
bG9hdFF1YWQobGF5ZXItPnZpc2libGVMYXllclJlY3QoKSkpOworICAgIGJvb2wgaXNQYWludGVk
QXhpc0FsaWduZWQgPSB1bm9jY2x1ZGVkUXVhZC5pc1JlY3RpbGluZWFyKCk7CisgICAgaWYgKCFp
c1BhaW50ZWRBeGlzQWxpZ25lZCkKKyAgICAgICAgcmV0dXJuIG9wYXF1ZVJlZ2lvbjsKKworICAg
IGlmIChsYXllci0+b3BhcXVlKCkpCisgICAgICAgIG9wYXF1ZVJlZ2lvbiA9IGVuY2xvc2VkSW50
UmVjdCh1bm9jY2x1ZGVkUXVhZC5ib3VuZGluZ0JveCgpKTsKKyAgICAvLyBGSVhNRTogQ2FwdHVy
ZSBvcGFxdWUgcGFpbnRzOiBlbHNlIG9wYXF1ZVJlZ2lvbiA9IGxheWVyLT5vcGFxdWVDb250ZW50
c1JlZ2lvbih0cmFuc2Zvcm0pOworICAgIHJldHVybiBvcGFxdWVSZWdpb247Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3ZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6bWFy
a09jY2x1ZGVkQmVoaW5kTGF5ZXIoTGF5ZXJUeXBlKiBsYXllcikKK3sKKyAgICBBU1NFUlQoIW1f
c3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2Uo
KSA9PSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKTsKKworICAgIGlmIChsYXllci0+ZHJhd09wYWNp
dHkoKSAhPSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
b250ZW50VG9TY3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVy
VHlwZT4obGF5ZXIpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1RhcmdldFN1
cmZhY2UgPSBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIp
OworCisgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4udW5pdGUoY29tcHV0ZU9j
Y2x1c2lvbkJlaGluZExheWVyPExheWVyVHlwZT4obGF5ZXIsIGNvbnRlbnRUb1NjcmVlblNwYWNl
KSk7CisgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQudW5pdGUoY29tcHV0ZU9j
Y2x1c2lvbkJlaGluZExheWVyPExheWVyVHlwZT4obGF5ZXIsIGNvbnRlbnRUb1RhcmdldFN1cmZh
Y2UpKTsKK30KKwordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpjbGVhckFsbEZvckN1cnJl
bnRUYXJnZXQoKQoreworICAgIEFTU0VSVCghbV9zdGFjay5pc0VtcHR5KCkpOworICAgIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuID0gUmVnaW9uKCk7CisgICAgbV9zdGFjay5sYXN0
KCkub2NjbHVzaW9uSW5UYXJnZXQgPSBSZWdpb24oKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25zdCBSZWdp
b24mIG9jY2x1c2lvbikKK3sKKyAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRRdWFkID0gY29udGVu
dFNwYWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0KSk7CisgICAgaWYg
KCF0cmFuc2Zvcm1lZFF1YWQuaXNSZWN0aWxpbmVhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIG9jY2x1c2lvbi5jb250YWlucyh0cmFuc2Zvcm1lZFF1YWQuZW5jbG9zaW5n
Qm91bmRpbmdCb3goKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK2Jvb2wg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6b2NjbHVkZWQoTGF5ZXJUeXBlKiBsYXllciwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobGF5ZXItPnRhcmdldFJlbmRl
clN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKTsKKworICAgIGlmICh0ZXN0Q29u
dGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zv
cm08TGF5ZXJUeXBlPihsYXllciksIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNv
bnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5
ZXIpLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGV0ZXJtaW5lcyB3aGF0IHBvcnRpb24g
b2YgcmVjdCwgaWYgYW55LCBpcyB1bm9jY2x1ZGVkIChub3Qgb2NjbHVkZWQgYnkgcmVnaW9uKS4g
SWYKKy8vIHRoZSByZXN1bHRpbmcgdW5vY2NsdWRlZCByZWdpb24gaXMgbm90IHJlY3Rhbmd1bGFy
LCB3ZSByZXR1cm4gYSByZWN0IGNvbnRhaW5pbmcgaXQuCitzdGF0aWMgaW5saW5lIEludFJlY3Qg
cmVjdFN1YnRyYWN0UmVnaW9uKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFJlZ2lvbiYgcmVn
aW9uKQoreworICAgIFJlZ2lvbiByZWN0UmVnaW9uKHJlY3QpOworICAgIFJlZ2lvbiBpbnRlcnNl
Y3RSZWdpb24oaW50ZXJzZWN0KHJlZ2lvbiwgcmVjdFJlZ2lvbikpOworCisgICAgaWYgKGludGVy
c2VjdFJlZ2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZWN0OworICAgIAorICAgIHJl
Y3RSZWdpb24uc3VidHJhY3QoaW50ZXJzZWN0UmVnaW9uKTsKKyAgICBJbnRSZWN0IGJvdW5kc1Jl
Y3QgPSByZWN0UmVnaW9uLmJvdW5kcygpOworICAgIHJldHVybiBib3VuZHNSZWN0OworfQorCitz
dGF0aWMgSW50UmVjdCBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJh
bnNmb3JtLCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKK3sKKyAgICBGbG9hdFF1YWQgdHJhbnNm
b3JtZWRRdWFkID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRl
bnRSZWN0KSk7CisgICAgaWYgKCF0cmFuc2Zvcm1lZFF1YWQuaXNSZWN0aWxpbmVhcigpKQorICAg
ICAgICByZXR1cm4gY29udGVudFJlY3Q7CisgICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVj
dCBhdCBlYWNoIHN0ZXAgaGVyZSwgYXMgd2Ugd2FudCB0byBjb250YWluIGFueSB1bm9jY2x1ZGVk
IHBhcnRpYWwgcGl4ZWxzIGluIHRoZSByZXN1bHRpbmcgSW50UmVjdC4KKyAgICBJbnRSZWN0IHNo
cnVua1JlY3QgPSByZWN0U3VidHJhY3RSZWdpb24oZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm1l
ZFF1YWQuYm91bmRpbmdCb3goKSksIG9jY2x1c2lvbik7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVk
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29udGVudFNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5t
YXBSZWN0KEZsb2F0UmVjdChzaHJ1bmtSZWN0KSkpOworICAgIC8vIFRoZSB1c2Ugb2YgZW5jbG9z
aW5nSW50UmVjdCwgd2l0aCBmbG9hdGluZyBwb2ludCByb3VuZGluZywgY2FuIGdpdmUgdXMgYSBy
ZXN1bHQgdGhhdCBpcyBub3QgYSBzdWItcmVjdCBvZiBjb250ZW50UmVjdC4gU2hyaW5rIHRoZSBy
ZXN1bHQKKyAgICAvLyBkb3duIHNvIHRoYXQgY29udGVudFJlY3QgY29udGFpbnMgdGhlIHJlc3Vs
dCB3ZSByZXR1cm4uCisgICAgaW50IHggPSBtYXgodW5vY2NsdWRlZFJlY3QueCgpLCBjb250ZW50
UmVjdC54KCkpOworICAgIGludCB5ID0gbWF4KHVub2NjbHVkZWRSZWN0LnkoKSwgY29udGVudFJl
Y3QueSgpKTsKKyAgICBpbnQgbWF4WCA9IG1pbih1bm9jY2x1ZGVkUmVjdC5tYXhYKCksIGNvbnRl
bnRSZWN0Lm1heFgoKSk7CisgICAgaW50IG1heFkgPSBtaW4odW5vY2NsdWRlZFJlY3QubWF4WSgp
LCBjb250ZW50UmVjdC5tYXhZKCkpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHksIG1heFggLSB4
LCBtYXhZIC0geSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK0ludFJlY3Qg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KExheWVyVHlwZSog
bGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAoreworICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRSZWN0OworCisgICAgLy8gV2Ug
d2FudCB0byByZXR1cm4gYSByZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSB2aXNpYmxlIHBhcnRz
IG9mIHxjb250ZW50UmVjdHwgaW4gYm90aCBzY3JlZW4gc3BhY2UgYW5kIGluIHRoZSB0YXJnZXQg
c3VyZmFjZS4KKyAgICAvLyBTbyB3ZSBmaW5kIHRoZSB2aXNpYmxlIHBhcnRzIG9mIHxjb250ZW50
UmVjdHwgaW4gZWFjaCBzcGFjZSwgYW5kIHRha2UgdGhlIGludGVyc2VjdGlvbi4KKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlID0gY29udGVudFRvU2NyZWVu
U3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zv
cm08TGF5ZXJUeXBlPihsYXllcik7CisKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9
IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVl
blNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7CisgICAgSW50UmVjdCB1
bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRS
ZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRh
cmdldCk7CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRJblNjcmVlbiwgdW5v
Y2NsdWRlZEluVGFyZ2V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6
dW5vY2NsdWRlZFN1cmZhY2VDb250ZW50UmVjdChMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRS
ZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0Cit7CisgICAgLy8gQSBzdXJmYWNlIGlzIG5v
dCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1
c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2suCisgICAgaWYgKG1f
c3RhY2suc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIHN1cmZhY2VDb250ZW50UmVjdDsKKwor
ICAgIFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsK
KyAgICBBU1NFUlQoc3VyZmFjZSk7CisKKyAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIHJlY3Qg
dGhhdCBjb250YWlucyBhbGwgdGhlIHZpc2libGUgcGFydHMgb2YgfGNvbnRlbnRSZWN0fCBpbiBi
b3RoIHNjcmVlbiBzcGFjZSBhbmQgaW4gdGhlIHRhcmdldCBzdXJmYWNlLgorICAgIC8vIFNvIHdl
IGZpbmQgdGhlIHZpc2libGUgcGFydHMgb2YgfGNvbnRlbnRSZWN0fCBpbiBlYWNoIHNwYWNlLCBh
bmQgdGFrZSB0aGUgaW50ZXJzZWN0aW9uLgorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29u
dGVudFRvU2NyZWVuU3BhY2UgPSBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5
cGU+KGxheWVyKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTdXJm
YWNlID0gc3VyZmFjZS0+ZHJhd1RyYW5zZm9ybSgpOworICAgIGNvbnRlbnRUb1RhcmdldFN1cmZh
Y2UudHJhbnNsYXRlKC1zdXJmYWNlQ29udGVudFJlY3Qud2lkdGgoKSAvIDIuMCArIHN1cmZhY2VD
b250ZW50UmVjdC54KCkgLSBzdXJmYWNlLT5jb250ZW50UmVjdCgpLngoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtc3VyZmFjZUNvbnRlbnRSZWN0LmhlaWdodCgpIC8g
Mi4wICsgc3VyZmFjZUNvbnRlbnRSZWN0LnkoKSAtIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCkueSgp
KTsKKworICAgIGNvbnN0IFN0YWNrT2JqZWN0JiBzZWNvbmRMYXN0ID0gbV9zdGFja1ttX3N0YWNr
LnNpemUoKS0yXTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9IGNvbXB1dGVVbm9j
Y2x1ZGVkQ29udGVudFJlY3Qoc3VyZmFjZUNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFj
ZSwgc2Vjb25kTGFzdC5vY2NsdXNpb25JblNjcmVlbik7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVk
SW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2VDb250ZW50UmVj
dCwgY29udGVudFRvVGFyZ2V0U3VyZmFjZSwgc2Vjb25kTGFzdC5vY2NsdXNpb25JblRhcmdldCk7
CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRJblNjcmVlbiwgdW5vY2NsdWRl
ZEluVGFyZ2V0KTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBJbnN0YW5jZSBtZXRob2RzIGZvciBMYXllckNocm9t
aXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bQorCit2b2lkIENDT2NjbHVzaW9uVHJhY2tlcjo6ZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbmV3VGFyZ2V0KQor
eworICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZTxS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0+KG5ld1RhcmdldCk7Cit9CisKK3ZvaWQgQ0NPY2NsdXNpb25U
cmFja2VyOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IG5ld1RhcmdldCkKK3sKKyAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZTxSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KG5ld1RhcmdldCk7Cit9CisKK3Zv
aWQgQ0NPY2NsdXNpb25UcmFja2VyOjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcihMYXllckNocm9t
aXVtKiBsYXllcikKK3sKKyAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjptYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcjxMYXllckNocm9taXVtPihsYXllcik7Cit9CisKK2Jvb2wgQ0NPY2NsdXNpb25U
cmFja2VyOjpvY2NsdWRlZChMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6Om9j
Y2x1ZGVkPExheWVyQ2hyb21pdW0+KGxheWVyLCBjb250ZW50UmVjdCk7Cit9CisKK0ludFJlY3Qg
Q0NPY2NsdXNpb25UcmFja2VyOjp1bm9jY2x1ZGVkQ29udGVudFJlY3QoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAoreworICAgIHJldHVybiBD
Q09jY2x1c2lvblRyYWNrZXJCYXNlOjp1bm9jY2x1ZGVkQ29udGVudFJlY3Q8TGF5ZXJDaHJvbWl1
bT4obGF5ZXIsIGNvbnRlbnRSZWN0KTsKK30KKworSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXI6
OnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0
IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZTo6dW5vY2NsdWRlZFN1cmZhY2VDb250ZW50UmVjdDxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KGxheWVyLCBzdXJmYWNlQ29udGVudFJlY3QpOwor
fQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLyBJbnN0YW5jZSBtZXRob2RzIGZvciBDQ0xheWVySW1wbC9DQ1JlbmRlclN1cmZhY2UKKwor
dm9pZCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UoQ0NS
ZW5kZXJTdXJmYWNlKiBuZXdUYXJnZXQpCit7CisgICAgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6
ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlPENDUmVuZGVyU3VyZmFjZT4obmV3VGFyZ2V0KTsKK30K
Kwordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFj
ZShDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCkKK3sKKyAgICBDQ09jY2x1c2lvblRyYWNrZXJC
YXNlOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZTxDQ1JlbmRlclN1cmZhY2U+KG5ld1Rhcmdl
dCk7Cit9CisKK3ZvaWQgQ0NPY2NsdXNpb25UcmFja2VySW1wbDo6bWFya09jY2x1ZGVkQmVoaW5k
TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6
Om1hcmtPY2NsdWRlZEJlaGluZExheWVyPENDTGF5ZXJJbXBsPihsYXllcik7Cit9CisKK2Jvb2wg
Q0NPY2NsdXNpb25UcmFja2VySW1wbDo6b2NjbHVkZWQoQ0NMYXllckltcGwqIGxheWVyLCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0NPY2NsdXNpb25U
cmFja2VyQmFzZTo6b2NjbHVkZWQ8Q0NMYXllckltcGw+KGxheWVyLCBjb250ZW50UmVjdCk7Cit9
CisKK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VySW1wbDo6dW5vY2NsdWRlZENvbnRlbnRSZWN0
KENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Cit7
CisgICAgcmV0dXJuIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OnVub2NjbHVkZWRDb250ZW50UmVj
dDxDQ0xheWVySW1wbD4obGF5ZXIsIGNvbnRlbnRSZWN0KTsKK30KKworSW50UmVjdCBDQ09jY2x1
c2lvblRyYWNrZXJJbXBsOjp1bm9jY2x1ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KENDTGF5ZXJJbXBs
KiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdAoreworICAg
IHJldHVybiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjp1bm9jY2x1ZGVkU3VyZmFjZUNvbnRlbnRS
ZWN0PENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+KGxheWVyLCBzdXJmYWNlQ29udGVudFJl
Y3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wNjcwODUwMTY3NGQ1MTQxZjkwZDI0NDQwNTg1ZjgxY2U0ZDBhMmM0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
Y2NsdXNpb25UcmFja2VyLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDT2Nj
bHVzaW9uVHJhY2tlcl9oCisjZGVmaW5lIENDT2NjbHVzaW9uVHJhY2tlcl9oCisKKyNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0xheWVySW1wbDsK
K2NsYXNzIENDUmVuZGVyU3VyZmFjZTsKK2NsYXNzIExheWVyQ2hyb21pdW07CitjbGFzcyBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW07CisKK2NsYXNzIENDT2NjbHVzaW9uVHJhY2tlckJhc2UgeworcHVi
bGljOgorICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2UoKSB7IH0KKworICAgIC8vIENhbGxlZCBm
b3IgdGhlIHRhcmdldCBzdXJmYWNlIG9mIGVhY2ggbGF5ZXIgYXMgaXQgaXMgc2VlbiwgaW4gZnJv
bnQtdG8tYmFjayBvcmRlci4gSWYgdGhlIHRhcmdldCB3YXMgbm90IGFscmVhZHkgY3VycmVudCwg
dGhlbiB0aGlzCisgICAgLy8gaW5kaWNhdGVzIGVudGVyaW5nIGEgbmV3IHN1cmZhY2Ugc3VidHJl
ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4gdm9pZCBlbnRlclRh
cmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZVR5cGUqIG5ld1RhcmdldCk7CisgICAgLy8g
Q2FsbGVkIGZvciB0aGUgdGFyZ2V0IHN1cmZhY2Ugb2YgYSBsYXllciB0aGF0IHJlcHJlc2VudHMg
YSBjb250cmlidXRpbmcgc3VyZmFjZSB0byB0aGF0IHRhcmdldC4gSXQgaW5kaWNhdGVzIHRoYXQg
d2UgYXJlIGxlYXZpbmcgdGhlCisgICAgLy8gc3VyZmFjZSBzdWJ0cmVlIHRoYXQgd2FzIGN1cnJl
bnQsIGFuZCB0aGF0IGl0cyBzdGF0ZSBzaG91bGQgYmUgbWVyZ2VkIHVwIHRvIHRoZSBwYXJlbnQg
c3VidHJlZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4gdm9pZCBs
ZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFyZ2V0KTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gdm9pZCBtYXJrT2NjbHVkZWRCZWhp
bmRMYXllcihMYXllclR5cGUqKTsKKworICAgIC8vIFJlbW92ZXMgYWxsIG9jY2x1c2lvbiBmb3Ig
dGhlIGN1cnJlbnQgdGFyZ2V0LgorICAgIHZvaWQgY2xlYXJBbGxGb3JDdXJyZW50VGFyZ2V0KCk7
CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJlY3QgaW4gY29udGVudCBzcGFj
ZSBmb3IgdGhlIGxheWVyIGlzIGZ1bGx5IG9jY2x1ZGVkIGluIGVpdGhlciBzY3JlZW4gc3BhY2Ug
b3IgdGhlIGxheWVyJ3MgdGFyZ2V0IHN1cmZhY2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5
ZXJUeXBlPiBib29sIG9jY2x1ZGVkKExheWVyVHlwZSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KSBjb25zdDsKKyAgICAvLyBHaXZlcyBhbiB1bm9jY2x1ZGVkIHN1Yi1yZWN0IG9mIHxjb250
ZW50UmVjdHwgaW4gdGhlIGNvbnRlbnQgc3BhY2Ugb2YgdGhlIGxheWVyLiBVc2VkIHdoZW4gY29u
c2lkZXJpbmcgb2NjbHVzaW9uIGZvciBhIGxheWVyIHRoYXQgcGFpbnRzL2RyYXdzIHNvbWV0aGlu
Zy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IEludFJlY3QgdW5vY2NsdWRlZENv
bnRlbnRSZWN0KExheWVyVHlwZSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsK
KyAgICAvLyBHaXZlcyBhbiB1bm9jY2x1ZGVkIHN1Yi1yZWN0IG9mIHxjb250ZW50UmVjdHwgaW4g
dGhlIGNvbnRlbnQgc3BhY2Ugb2YgdGhlIFJlbmRlclN1cmZhY2Ugb3duZWQgYnkgdGhlIGxheWVy
LiBVc2VkIHdoZW4gY29uc2lkZXJpbmcgb2NjbHVzaW9uIGZvciBhIHRhcmdldCBzdXJmYWNlLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+IEludFJlY3QgdW5vY2NsdWRlZFN1cmZhY2VDb250ZW50UmVjdChMYXllclR5cGUqLCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB0eXBlZGVm
IHZvaWQgUmVuZGVyU3VyZmFjZVZvaWRUeXBlOworCisgICAgc3RydWN0IFN0YWNrT2JqZWN0IHsK
KyAgICAgICAgUmVuZGVyU3VyZmFjZVZvaWRUeXBlKiBzdXJmYWNlOworICAgICAgICBSZWdpb24g
b2NjbHVzaW9uSW5TY3JlZW47CisgICAgICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldDsKKyAg
ICB9OworCisgICAgLy8gVGhlIHN0YWNrIGhvbGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1YnRy
ZWVzIGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBsZWF2
ZSBhIHN1YnRyZWUgd2UgbWF5CisgICAgLy8gYXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90IHRv
IHRoZSBwYXJ0cyBvdXRzaWRlIHRoZSBzdWJ0cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRpbWUg
d2Ugc2VlIGEgbmV3IHN1YnRyZWUgdW5kZXIgYSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdldCB0
byB0aGUgdG9wIG9mIHRoZSBzdGFjay4gVGhpcyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVwcmVz
ZW50aW5nIGl0c2VsZiwgb3IgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4gd2Ug
dmlzaXQgYSB0YXJnZXQgc3VyZmFjZSwgd2UgYXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRyZWUs
IHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2aXNp
dCBhIGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRvIHRo
ZSBjdXJyZW50IHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAg
IC8vIC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGluZyBz
dXJmYWNlLCB0aGUgY3VycmVudCB0YXJnZXQgd2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRoZSBz
dGFjayBzaW5jZSB3ZSBqdXN0IGNhbWUgZnJvbSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2UuCisg
ICAgLy8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRo
IHRoZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8g
dGhlIHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorICAgIFZlY3RvcjxTdGFja09iamVjdCwg
MT4gbV9zdGFjazsKKworcHJpdmF0ZToKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ09jY2x1
c2lvblRyYWNrZXJCYXNlKTsKK307CisKK2NsYXNzIENDT2NjbHVzaW9uVHJhY2tlciA6IHB1Ymxp
YyBDQ09jY2x1c2lvblRyYWNrZXJCYXNlIHsKK3B1YmxpYzoKKyAgICB2b2lkIGVudGVyVGFyZ2V0
UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCk7CisgICAgdm9p
ZCBsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1Rh
cmdldCk7CisgICAgdm9pZCBtYXJrT2NjbHVkZWRCZWhpbmRMYXllcihMYXllckNocm9taXVtKik7
CisgICAgYm9vbCBvY2NsdWRlZChMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpIGNvbnN0OworICAgIEludFJlY3QgdW5vY2NsdWRlZENvbnRlbnRSZWN0KExheWVyQ2hy
b21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCB1
bm9jY2x1ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KExheWVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0
JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OworfTsKKworY2xhc3MgQ0NPY2NsdXNpb25UcmFj
a2VySW1wbCA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXJCYXNlIHsKK3B1YmxpYzoKKyAgICB2
b2lkIGVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7
CisgICAgdm9pZCBsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIG5l
d1RhcmdldCk7CisgICAgdm9pZCBtYXJrT2NjbHVkZWRCZWhpbmRMYXllcihDQ0xheWVySW1wbCop
OworICAgIGJvb2wgb2NjbHVkZWQoQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkQ29udGVudFJlY3QoQ0NMYXllcklt
cGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCB1bm9j
Y2x1ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgc3Vy
ZmFjZUNvbnRlbnRSZWN0KSBjb25zdDsKK307CisKK30KKyNlbmRpZiAvLyBDQ09jY2x1c2lvblRy
YWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMzVmMmIxOTkwNzc5ZDY2
OWVmODA0MDJmYjAwZjJhNTU2MTQ3YzMyNi4uY2RhYTIzNjQ5NTRkYzhhOTk4MzMwMmY1YzFjNWUx
NTI3ZmUzMjdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03NSw2ICs3NSw3
IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDT2Nj
bHVzaW9uVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1F1YWRDdWxsZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAKaW5kZXggYjFmYTcyOTE4NDAxZTMyNDBlNDFkMTNkMmUwYzI3ZDBjNTZh
ZDdjNS4uZDJlMWNmZWY5M2UyODIxNjZkYTg1MTI1NmM5NWMwZTY1MTJjNjliYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDQ0xheWVyVHJlZVRl
c3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiUmVnaW9u
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgPGdtb2Nr
L2dtb2NrLmg+CkBAIC0zNiwxMiArMzUsNiBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCi0gICAgRVhQRUNUX0VRKGEueCgpLCBi
LngoKSk7IFwKLSAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAotICAgIEVYUEVDVF9FUShh
LndpZHRoKCksIGIud2lkdGgoKSk7IFwKLSAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWln
aHQoKSk7Ci0KIG5hbWVzcGFjZSB7CiAKIHZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJ
bnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2VydmVzM0QpCkBAIC02MDIsMTc0ICs1OTUsNCBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJT
dXJmYWNlcykKIC8vICAtIHRlc3QgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBDQ0xheWVyVHJlZUhv
c3RDb21tb24KIC8vCiAKLVRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRz
U2VsZlRvT2NjbHVkZWRSZWdpb24pCi17Ci0gICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdo
dCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFJlZ2lvbiBvY2NsdWRlZDsKLSAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5l
dyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKLQotICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMTAwLCAxMDApLCBmYWxzZSk7Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0K
LSAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwotICAgIGludCBkdW1teU1heFRleHR1cmVTaXpl
ID0gNTEyOwotCi0gICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3Bl
Y2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBm
aXggaXQgaGVyZSwgdG9vLgotICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBw
YXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7Ci0KLSAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRT
ZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVkZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkpOwotfQotCi1URVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQot
ewotICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcg
dXNlZC4KLSAgICBSZWdpb24gb2NjbHVkZWQ7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0g
ICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBs
YXllclRyYW5zZm9ybTsKLSAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOwot
ICAgIGxheWVyVHJhbnNmb3JtLnJvdGF0ZSg5MCk7Ci0gICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNs
YXRlKC0yNTAsIC0yNTApOwotCi0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKLSAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6
ZSg1MDAsIDUwMCksIGZhbHNlKTsKLQotICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7Ci0KLSAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
LSAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Ci0gICAg
aW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBGSVhNRTogd2hlbiB3ZSBm
aXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVl
SG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCi0gICAgcGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocGFyZW50KTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKLQotICAgIG9jY2x1ZGVkID0gUmVn
aW9uKCk7Ci0gICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQp
OwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2NsdWRlZC5i
b3VuZHMoKSk7Ci0gICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Ci19
Ci0KLVRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVk
ZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCi17Ci0gICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSBy
aWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFJlZ2lvbiBvY2NsdWRlZDsKLSAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVm
UHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKLQot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOwotICAgIGxheWVyVHJhbnNm
b3JtLnRyYW5zbGF0ZSgyMCwgMjApOwotCi0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKLSAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9y
bSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKLQotICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7
Ci0KLSAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7
Ci0gICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBGSVhNRTogd2hl
biB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5
ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCi0gICAgcGFyZW50
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocGFyZW50KTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKLQotICAgIG9jY2x1ZGVk
ID0gUmVnaW9uKCk7Ci0gICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2Nj
bHVkZWQpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUwLCA1MCwgNTApLCBvY2Ns
dWRlZC5ib3VuZHMoKSk7Ci0gICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUo
KSk7Ci19Ci0KLVRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRv
T2NjbHVkZWRSZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCi17Ci0gICAgLy8gVGhpcyB0ZXN0cyB0
aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFJlZ2lvbiBvY2Ns
dWRlZDsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsK
LSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPmFkZENoaWxk
KGNoaWxkKTsKLSAgICBjaGlsZC0+YWRkQ2hpbGQobGF5ZXIpOwotCi0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggY2hpbGRUcmFuc2Zvcm07Ci0gICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1
MCwgMjUwKTsKLSAgICBjaGlsZFRyYW5zZm9ybS5yb3RhdGUoOTApOwotICAgIGNoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7
Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgY2hpbGRUcmFu
c2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAz
MCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxz
ZSk7Ci0KLSAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKLSAgICBsYXllci0+c2V0
T3BhcXVlKHRydWUpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1
bW15TGF5ZXJMaXN0OwotICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAg
Ly8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhh
dmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9v
LgotICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0
KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0K
LSAgICBvY2NsdWRlZCA9IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNj
cmVlblNwYWNlKG9jY2x1ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwg
NzAsIDYwKSwgb2NjbHVkZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQu
cmVjdHMoKS5zaXplKCkpOwotCi0gICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9w
YXF1ZSByZWN0IGZyb20gfGxheWVyfDoKLSAgICAgICAgICAgICAgIDEwMAotICAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwz
MCAgVmlzaWJsZSByZWdpb24gb2YgfGxheWVyfDogLy8vLy8KLSAgICAgIHwgICAgMzAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICByb3RhdGUoOTApICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgfAotICAgICAgfCAzMCArIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsgICAgICAgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0rCi0gIDEwMCB8ICAgIHwgIDEwICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgID09PiAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwxMCAgICAgICAgICAg
ICAgIHwKLSAgICAgIHwgICAgfDEwKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsg
ICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAg
fAotICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98ICAgICA0MjAgICAgICB8ICB8Ci0g
ICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3w2MCAgICAgICAgICAgIHwgIHwKLSAgICAg
IHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgICAgICAgICAgfCAgfAotICAgICAgKy0t
LS18LS18LS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICstLXwtLXwtLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgIDIw
fDEwfCAgICAgNzAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfDUwMCAgICAgICAgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwxMHwKLSAgICAgICAgICAgKy0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0rIHwgICAgICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tfC0tKwotICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIDQ5MCAgICAgICAgICAg
ICB8Ci0gICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAg
ICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAKLSAgICAgKi8KLX0KLQogfSAvLyBuYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25U
cmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9u
VHJhY2tlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkNTdiYTNlYjBmZmM5ZjkwMWFjMjkzM2E4M2I0
NTMyNzViM2Q0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCkBAIC0wLDAgKzEsNzgwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ09jY2x1c2lvblRy
YWNrZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24u
aCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2RlZmluZSBF
WFBFQ1RfRVFfUkVDVChhLCBiKSBcCisgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKKyAg
ICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAorICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIu
d2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CisKK25h
bWVzcGFjZSB7CisKK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9t
aXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3Vu
ZHMsIGJvb2wgb3BhcXVlKQoreworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsK
KyAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oc3VibGF5ZXJUcmFuc2Zvcm0pOworICAg
IGxheWVyLT5zZXRBbmNob3JQb2ludChhbmNob3IpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihw
b3NpdGlvbik7CisgICAgbGF5ZXItPnNldEJvdW5kcyhib3VuZHMpOworICAgIGxheWVyLT5zZXRP
cGFxdWUob3BhcXVlKTsKK30KKworY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0Nv
bnRlbnQgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKQorICAgICAgICA6IExheWVyQ2hyb21pdW0oKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorfTsKKworLy8gQSBzdWJjbGFzcyB0byBleHBvc2UgdGhlIHRvdGFsIGN1cnJl
bnQgb2NjbHVzaW9uLgorY2xhc3MgVGVzdENDT2NjbHVzaW9uVHJhY2tlciA6IHB1YmxpYyBDQ09j
Y2x1c2lvblRyYWNrZXIgeworcHVibGljOgorICAgIFJlZ2lvbiBvY2NsdXNpb25JblNjcmVlblNw
YWNlKCkgY29uc3QgeyByZXR1cm4gQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5v
Y2NsdXNpb25JblNjcmVlbjsgfQorICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldFN1cmZhY2Uo
KSBjb25zdCB7IHJldHVybiBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1
c2lvbkluVGFyZ2V0OyB9CisKKyAgICB2b2lkIHNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoY29u
c3QgUmVnaW9uJiByZWdpb24pIHsgQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5v
Y2NsdXNpb25JblNjcmVlbiA9IHJlZ2lvbjsgfQorICAgIHZvaWQgc2V0T2NjbHVzaW9uSW5UYXJn
ZXRTdXJmYWNlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKSB7IENDT2NjbHVzaW9uVHJhY2tlcjo6bV9z
dGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQgPSByZWdpb247IH0KK307CisKK1RFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCit7CisgICAg
Ly8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgor
ICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEw
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1h
eFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwor
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsK
KworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwg
MzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkp
OworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3
MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAg
RVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMo
KS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNl
LCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcw
KSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQo
KSwgSW50UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1
c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7Cisg
ICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCAzMSwgNzAsIDcwKSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKS5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCA3MCksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAz
MCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDI5LCA3MCwgNzAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgy
OSwgMjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyOSwgNzAs
IDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgzMCwgMjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMxLCAyOSwg
NzAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMzEsIDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAs
IDMwLCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgp
LCBJbnRSZWN0KDMxLCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzEsIDMxLCA3MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgzMSwgMzEsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDMwLCAxMDAsIDcwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgyOSwgMzEsIDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMSwgNzAsIDcwKSkpOworfQorCitURVNUKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9u
KQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVp
bmcgdXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRy
YW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBs
YXllclRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCks
IGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4
VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwor
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFj
ZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJl
aGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAz
MCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7
CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcw
KSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBF
WFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDMwLCAyOSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDMxLCA3MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpLmlz
RW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMzAsIDEsIDcwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMw
LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMjksIDcwLCA3MCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5
LCAyOSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDI5LCA3MCwg
MSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMwLCAyOSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDI5LCA3
MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMSwgMjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwg
MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgz
MSwgMzEsIDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMxLCAzMSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMzAsIDEwMCwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMzEsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDI5LCAzMSwgNzAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMxLCA3MCwgNzApKSk7Cit9CisKK1RFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRp
b24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBi
ZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3
IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0u
dHJhbnNsYXRlKDIwLCAyMCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRT
aXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7
CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdl
dCgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1
c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1
c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBF
WFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1
MCwgNTAsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VR
KGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwg
NTAsIDUwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCg1MSwgNTAsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUxLCA1MCwgNTAp
KSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBh
cmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTAsIDUwLCA1MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCg0OSwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0OSwgNDksIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDQ5LCA1MCwgMSksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkp
OworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTEsIDQ5LCA1MCwgNTApLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNDksIDUwLCA1
MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgNTAsIDEsIDUwKSwgb2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUwLCA1
MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MSwgNTEsIDUwLCA1MCksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1
MSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDEwMCwgNTAsIDEp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1
MCwgNTEsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MSwgNTAs
IDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoNDksIDUxLCA1MCwgNTApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
bGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCit7CisgICAgLy8g
VGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Y2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGls
ZChsYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAg
ICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3Jt
LnJvdGF0ZSg5MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOwor
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGNoaWxkLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAs
IDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9C
b3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVt
bXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2Nj
bHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworCisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9F
USh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwg
NjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxk
LmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwg
b2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwg
SW50UmVjdCgxMCwgNDMwLCA2MSwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNp
b24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcxKSkpOworCisg
ICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBv
Y2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNl
KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1
c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgx
dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAg
RVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MzAsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9F
UShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzks
IDcwLCA2MCkpKTsKKworCisgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1
c2lvbiBmcm9tIHxsYXllcnw6CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0tLS0t
LS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8MzAgIFZp
c2libGUgcmVnaW9uIG9mIHxsYXllcnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
ICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICA9PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAgICB8
CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAg
ICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAg
ICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAg
ICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAgICAg
fCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAg
ICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8ICAg
IHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAg
fCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0tfC0t
fC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICArLS18
LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwxMHwg
ICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAgfAor
ICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAg
ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVhZHlP
blN0YWNrKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBh
cmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBjaGlsZDIgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAg
ICBjaGlsZC0+YWRkQ2hpbGQobGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQyKTsK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxkVHJh
bnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkw
KTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hp
bGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRT
aXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAvLyB8Y2hpbGQyfCBtYWtlcyB8cGFyZW50fCdz
IHN1cmZhY2UgZ2V0IGNvbnNpZGVyZWQgYnkgQ0NPY2NsdXNpb25UcmFja2VyIGZpcnN0LCBpbnN0
ZWFkIG9mIHxjaGlsZHwncy4gVGhpcyBleGVyY2lzZXMgZGlmZmVyZW50IGNvZGUgaW4KKyAgICAv
LyBsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSwgYXMgdGhlIHRhcmdldCBzdXJmYWNlIGhhcyBh
bHJlYWR5IGJlZW4gc2Vlbi4KKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxk
Mi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNjAsIDIwKSwgdHJ1ZSk7CisKKyAgICBjaGls
ZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNl
dENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwor
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJl
bnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hp
bGQyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwgMjAp
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwgMjApLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgx
dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdl
dCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAg
ICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0
KDEwLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDI5
LCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hp
bGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3
MCkpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
Y2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAgICAv
LyBUaGlzIGlzIHRoZSBsaXR0bGUgcGllY2Ugbm90IG9jY2x1ZGVkIGJ5IGNoaWxkMgorICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoOSwgNDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7CisgICAg
Ly8gVGhpcyBleHRlbmRzIHBhc3QgYm90aCBzaWRlcyBvZiBjaGlsZDIsIHNvIGl0IHdpbGwgYmUg
dGhlIG9yaWdpbmFsIHJlY3QuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5LCA0MzAsIDYw
LCA4MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJl
Y3QoOSwgNDMwLCA2MCwgODApKSk7CisgICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgdHdvIGFkamFj
ZW50IHNpZGVzIG9mIGNoaWxkMiwgYW5kIHNob3VsZCBpbmNsdWRlZCB0aGUgdW5vY2NsdWRlZCBw
YXJ0cyBvZiBlYWNoIHNpZGUuCisgICAgLy8gVGhpcyBhbHNvIGRlbW9uc3RyYXRlcyB0aGF0IHRo
ZSByZWN0IGNhbiBiZSBhcmJpdHJhcnkgYW5kIGRvZXMgbm90IGdldCBjbGlwcGVkIHRvIHRoZSBs
YXllcidzIHZpc2libGVMYXllclJlY3QoKS4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0x
MCwgNDMwLCAyMCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdl
dCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA2MCwgNzApKSk7CisgICAgLy8gVGhpcyBleHRlbmRzIHBh
c3QgdGhyZWUgYWRqYWNlbnQgc2lkZXMgb2YgY2hpbGQyLCBzbyBpdCBzaG91bGQgY29udGFpbiB0
aGUgdW5vY2NsdWRlZCBwYXJ0cyBvZiBlYWNoIHNpZGUuIFRoZSBsZWZ0CisgICAgLy8gYW5kIGJv
dHRvbSBlZGdlcyBhcmUgY29tcGxldGVseSB1bm9jY2x1ZGVkIGZvciBzb21lIHJvdy9jb2x1bW4g
c28gd2UgZ2V0IGJhY2sgdGhlIG9yaWdpbmFsIHF1ZXJ5IHJlY3QuCisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMTAsIDQyOSwgNjAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDcwLCA0MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNTAwLCA2MCwgMSksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMSwgNjAsIDcwKSkp
OworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBp
bnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhp
bmRMYXllcihjaGlsZC5nZXQoKSk7CisgICAgLy8gfGNoaWxkMnwgc2hvdWxkIGdldCBtZXJnZWQg
d2l0aCB0aGUgc3VyZmFjZSB3ZSBhcmUgbGVhdmluZyBub3cKKyAgICBvY2NsdXNpb24ubGVhdmVU
b1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1
cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgVmVjdG9yPEludFJlY3Q+
IHNjcmVlbiA9IG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKTsKKyAg
ICBWZWN0b3I8SW50UmVjdD4gdGFyZ2V0ID0gb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3Vy
ZmFjZSgpLnJlY3RzKCk7CisKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCg5MCwgMzAsIDEwLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSkpOworCisgICAgRVhQ
RUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDMwLCA2MCwgMTApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDYw
LCAxMCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzEsIDMwLCA2MCwgMTApKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG9j
Y2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA2MCwgMTApKSk7
CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwg
SW50UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lv
bi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMwLCAzOSwgNzAsIDYwKSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA2MCwgMTApKS5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCAxMCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwg
NjAsIDEwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDI5LCA2MCwgMSksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAy
OSwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOTAsIDMwLCAxLCAxMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMx
LCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNjAsIDEwKSkuaXNFbXB0eSgp
KTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDI5LCA0MCwgMSwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgNDAsIDcwLCA2MCkpKTsKKyAgICAv
LyBUaGlzIHJlY3QgaXMgbW9zdGx5IG9jY2x1ZGVkIGJ5IHxjaGlsZDJ8LgorICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoOTAsIDM5LCAxMCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYwKSkpOworICAgIC8vIFRo
aXMgcmVjdCBleHRlbmRzIHBhc3QgdG9wL3JpZ2h0IGVuZHMgb2YgfGNoaWxkMnwuCisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMjksIDcwLCAxMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAsIDcwKSkpOworICAg
IC8vIFRoaXMgcmVjdCBleHRlbmRzIHBhc3QgbGVmdC9yaWdodCBlbmRzIG9mIHxjaGlsZDJ8Lgor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDM5LCA4MCwgNjApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzksIDgwLCA2MCkp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgNDAsIDEsIDYwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDQwLCA3MCwg
NjApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMTAwLCA3MCwgMSksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwg
NzAsIDYwKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRo
YXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwg
NzAsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9u
IGZvciB0aGUgYWJvdmUgb2NjbHVzaW9uIGZyb20gfGxheWVyfDoKKyAgICAgICAgICAgICAgIDEw
MAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgIHwzMCAgVmlzaWJsZSByZWdpb24gb2YgfGxheWVyfDogLy8vLy8KKyAgICAg
IHwgICAgMzAgICAgICAgICAgICAgICB8ICAgICAgICAgICByb3RhdGUoOTApICAgICAgICAgICAg
ICAgICB8ICAgICAzMCAgIDYwICAgICAgICAgfCAgICB8Y2hpbGQyfDogXFxcXFwKKyAgICAgIHwg
MzAgKyAtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAg
ICB8ICAzMCArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAgICB8
ICAxMCAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICA9PT4gICAgIHwg
ICAgIHxcXFxcXFxcXFxcXFx8ICB8MTAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgIHwxMCst
LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgfCAgKy0t
fFxcXFxcXFxcXFxcXHwtLS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAgICAgIHwgICAgKyAtLS0tLS0t
LS0tLS0rICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICArLS0t
LS0tLS0tLS0tKy8vfCAgICAgNDIwICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8v
Ly8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8v
Ly8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAg
ICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0t
KyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwxMHwgICAgIDcwICAgICAgICAgICAg
ICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
fCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAg
ICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwK
KyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAg
ICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAg
ICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAg
ICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MTB8CisgICAgICAg
ICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAg
ICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLSsKKyAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJB
ZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRlZE9mZkF4aXNTdXJmYWNlKQoreworICAgIFRl
c3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hp
bGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChs
YXllcik7CisKKyAgICAvLyBOb3cgcm90YXRlIHRoZSBjaGlsZCBhIGxpdHRsZSBtb3JlIHNvIGl0
IGlzIG5vdCBheGlzLWFsaWduZWQuIFRoZSBwYXJlbnQgd2lsbCBubyBsb25nZXIgYmUgb2NjbHVk
ZWQgYnkgfGxheWVyfCwgYnV0CisgICAgLy8gdGhlIGNoaWxkJ3Mgb2NjbHVzaW9uIHNob3VsZCBi
ZSB1bmNoYW5nZWQuCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsK
KyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNm
b3JtLnJvdGF0ZSg5NSk7CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTAp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJU
cmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAxMCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwg
MzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUp
OworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4
VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwor
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworCisgICAgSW50UmVjdCBjbGlwcGVkTGF5ZXJJbkNoaWxkID0gbGF5
ZXJUcmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpKTsKKworICAgIG9j
Y2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7
CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChjbGlw
cGVkTGF5ZXJJbkNoaWxkLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91
bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3Vy
ZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24u
b2NjbHVkZWQoY2hpbGQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpKTsKKyAgICBFWFBFQ1Rf
RVEodHJ1ZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNs
aXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5t
b3ZlKC0xLCAwKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGls
ZC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkpOyAKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBjbGlwcGVkTGF5ZXJJ
bkNoaWxkKS5pc0VtcHR5KCkpOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgxLCAwKTsK
KyAgICBjbGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMSwgMCk7CisgICAgRVhQRUNUX0VRKGZhbHNl
LCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpKTsK
KyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNoaWxkKS5pc0VtcHR5KCkpOworICAgIGNsaXBwZWRM
YXllckluQ2hpbGQubW92ZSgtMSwgMCk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAs
IC0xKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQo
KSwgY2xpcHBlZExheWVySW5DaGlsZCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQp
LmlzRW1wdHkoKSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIDEpOworICAgIGNs
aXBwZWRMYXllckluQ2hpbGQubW92ZSgwLCAxKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1
c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkpOworICAgIEVY
UEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7CisgICAgY2xpcHBlZExheWVySW5D
aGlsZC5tb3ZlKDAsIC0xKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRo
aW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgw
LCAwLCA1MDAsIDUwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KGNo
aWxkLmdldCgpLCBJbnRSZWN0KDAsIDAsIDUwMCwgNTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVU
b1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVl
blNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMHUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoNzUsIDU1LCAxLCAxKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoNzUsIDU1LCAxLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoNzUsIDU1LCAxLCAxKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qg
b2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRTdXJmYWNl
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworfQor
CitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9u
V2l0aE11bHRpcGxlT3BhcXVlTGF5ZXJzKQoreworICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0
aGUgcHJldmlvdXMgdGVzdCBidXQgbm93IHdlIG1ha2UgYSBmZXcgb3BhcXVlIGxheWVycyBpbnNp
ZGUgb2YgfGNoaWxkfCBzbyB0aGF0IHRoZSBvY2NsdWRlZCBwYXJ0cyBvZiBjaGlsZCBhcmUgbm90
IGEgc2ltcGxlIHJlY3QuCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247Cisg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIxID0gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIyID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVu
dC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOwor
ICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcjEpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcjIp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisgICAgY2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS5yb3RhdGUo
OTApOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhj
aGlsZC5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7CisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllcjEuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJ
bnRTaXplKDUwMCwgNDQwKSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhsYXllcjIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgNDUwKSwgSW50U2l6ZSg1MDAsIDYwKSwgdHJ1ZSk7CisK
KyAgICBjaGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0
dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBw
YXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNo
aWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihsYXllcjIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXll
cihsYXllcjEuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcw
LCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
IEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApLCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVD
VF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0
KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2Nj
bHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSkpOwor
ICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAs
IDQzMSwgNjAsIDcwKSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOSwgNDMwLCAxLCA3MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwg
NzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDI5LCA2MCwgMSksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQyOSwg
NjAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNzAsIDQzMCwgMSwgNzApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0
MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA1MDAsIDYwLCAx
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgx
MCwgNDMxLCA2MCwgNzApKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0
aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3Qo
Y2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworCisgICAgb2NjbHVzaW9u
Lm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVh
dmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVz
aW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHRy
dWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwg
NjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2Nj
bHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzksIDcwLCA2MCkpKTsK
KworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDI5LCA0MCwgMSwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzOSwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzksIDcwLCA2MCkpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgNDAsIDEsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDQwLCA3MCwgNjApKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMTAwLCA3MCwgMSksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkp
OworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBp
bnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCA0MCwgNzAsIDYwKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUg
YWJvdmUgb2NjbHVzaW9uIGZyb20gfGxheWVyMXwgYW5kIHxsYXllcjJ8OgorCisgICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfDMwICBW
aXNpYmxlIHJlZ2lvbiBvZiB8bGF5ZXIxfDogLy8vLy8KKyAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgfCAgICBWaXNpYmxlIHJlZ2lvbiBvZiB8bGF5ZXIyfDogXFxcXFwKKyAgICAgICB8ICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIHwgICAgIHwgICAg
ICAgICAgICAgICB8MTAgICAgICAgICAgICAgICB8CisgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0t
LSstLS0tLS0tLS0tLS0tLS0tLSsgIHwKKyAgICAgICB8ICB8ICB8XFxcXFxcXFxcXFxcfC8vfCAg
ICAgNDIwICAgICAgfCAgfAorICAgICAgIHwgIHwgIHxcXFxcXFxcXFxcXFx8Ly98NjAgICAgICAg
ICAgICB8ICB8CisgICAgICAgfCAgfCAgfFxcXFxcXFxcXFxcXHwvL3wgICAgICAgICAgICAgIHwg
IHwKKyAgICAgICArLS18LS18LS0tLS0tLS0tLS0tfC0tKyAgICAgICAgICAgICAgfCAgfAorICAg
ICAgICAyMHwxMHwgICAgIDcwICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAg
fCAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICB8ICB8ICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgIHwgIHwgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgfCAgfCAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICB8ICB8ICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgfCAgfAorICAgICAgICAgIHwgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8
MTB8CisgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLSsKKyAg
ICAgICAgICB8ICAgICAgICAgICAgICAgfCA0OTAgICAgICAgICAgICAgfAorICAgICAgICAgICst
LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgNjAgICAg
ICAgICAgICAgICA0NDAKKyAgICAgKi8KK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0
LCBzdXJmYWNlT2NjbHVzaW9uV2l0aE92ZXJsYXBwaW5nU2libGluZ1N1cmZhY2VzKQoreworICAg
IC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4K
KyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMSk7CisgICAgcGFyZW50
LT5hZGRDaGlsZChjaGlsZDIpOworICAgIGNoaWxkMS0+YWRkQ2hpbGQobGF5ZXIxKTsKKyAgICBj
aGlsZDItPmFkZENoaWxkKGxheWVyMik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGls
ZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAg
IGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRl
KC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMS5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUo
NTAwLCA1MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXll
cjEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMjAsIDQwKSwgSW50U2l6
ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxh
eWVyMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICBj
aGlsZDEtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgY2hpbGQyLT5zZXRNYXNrc1RvQm91
bmRzKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1
cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15
TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1
c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOworCisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgNDAsIDgwLCA2MCksIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgwLCA0MjAsIDYwLCA4MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRh
cmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQRUNUX0VR
KHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDIwLCA2
MCwgODApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQy
LmdldCgpLCBJbnRSZWN0KC0xLCA0MjAsIDYwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDE5LCA2MCwgODAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgp
LCBJbnRSZWN0KDAsIDQyMCwgNjEsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjAsIDYwLCA4MSkpKTsKKwor
ICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBp
dHNlbGYuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MjAsIDYwLCA4MCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkU3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgw
LCA0MjAsIDYwLCA4MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXll
cihjaGlsZDIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFj
ZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVu
ZGVyU3VyZmFjZShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtP
Y2NsdWRlZEJlaGluZExheWVyKGxheWVyMS5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDIwLCAzMCwgODAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3Jl
ZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAs
IDQzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5k
cygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZh
Y2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9j
Y2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA3MCkpKTsKKyAgICBFWFBF
Q1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEs
IDQzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDMwLCA3
MSwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQy
LmdldCgpLCBJbnRSZWN0KDAsIDQzMCwgNzAsIDcxKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBu
b3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZiwgYnV0IHRoZSB8Y2hp
bGQxfCBzdXJmYWNlIHNob3VsZCBiZSBvY2NsdWRlZCBieSB0aGUgfGNoaWxkMnwgc3VyZmFjZS4K
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQzMCwgMTAsIDcwKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRTdXJmYWNlQ29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQzMCwg
NzAsIDcwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxk
MS5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDMw
LCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsK
KyAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDMwLCA4MCwgNzAp
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVY
UEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCku
c2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgyMCwgMzAsIDgwLCA3MCkpKTsKKworICAgIEVYUEVDVF9FUSh0cnVl
LCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMCwgNzAsIDcw
KSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQo
KSwgSW50UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1
c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA3MCwgNzApKSk7CisK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50
UmVjdCgyMCwgNDAsIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTksIDQwLCA4MCwgNjApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDIw
LCAzOSwgODAsIDYwKSkpOworCisgICAgLy8gfGNoaWxkMXwgYW5kIHxjaGlsZDJ8IGJvdGggZHJh
dyBpbnRvIHBhcmVudCBzbyB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4KKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDIwLCAzMCwgODAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRTdXJm
YWNlQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAzMCwgODAsIDcwKSkpOwor
CisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVzaW9uIGZyb20gfGxh
eWVyfDoKKyAgICAgICAgICAgICAgIDEwMAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
KyAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgIDMwICAgICAgICAgICAg
ICAgfCAgICAgICBjaGlsZDEKKyAgICAgIHwgIDMwKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0rCisgIDEwMCB8ICA0MHwgICAgICAgICAgICAgICAgfCAgICAgY2hpbGQyICAgICAg
fAorICAgICAgfDIwKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKKyAgICAg
IHwgIHwgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8CisgICAgICB8ICB8IHwg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgfAorICAgICAgfCAgfCB8ICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICB8IHwKKyAgICAgICstLXwtfC0tLS0tLS0tLS0tLS0tLS0r
ICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfCA1MDAKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAor
ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAg
IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tfC0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAg
ICAgICAgICAgICAgICAgICAgICAgIDUwMAorICAgICAqLworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127505</attachid>
            <date>2012-02-16 20:17:54 -0800</date>
            <delta_ts>2012-02-21 19:57:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78549-20120216231753.patch</filename>
            <type>text/plain</type>
            <size>106276</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDg0YjNlODdkZDM5NDc2
ZTM3MDhhZWJkMjRmNTY5MmU1OTE4YWNlNy4uMzJlMWVmYTRkZTc5ZjhlNDA1MzgyOTM0N2ZmYjll
YzJiNmM2YTg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTAyLTE2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gTmV3
IENDT2NjbHVzaW9uVHJhY2tlciBjbGFzcyB3aXRoIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBDQ09jY2x1c2lvblRyYWNrZXIgY2xh
c3MgdGhhdCBpcyBhYmxlIHRvIHRyYWNrIG9jY2x1c2lvbiBvZiBsYXllcnMKKyAgICAgICAgd2hp
bGUgdHJhdmVyc2luZyB0aGUgbGF5ZXIgdHJlZSBmcm9tIGZyb250LXRvLWJhY2suCisKKyAgICAg
ICAgQXQgZWFjaCBzdGVwIG9mIHRoZSBmcm9udC10by1iYWNrIHRyYXZlcnNhbCwgdGhlIGNsYXNz
IHNob3VsZCBiZSBub3RpZmllZCBvZgorICAgICAgICBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IHJl
bmRlciB0YXJnZXQsIGFuZCB3aGVuIGRvbmUgd29ya2luZyB3aXRoIGEgbGF5ZXIsIHRoZQorICAg
ICAgICBsYXllciBpcyBhZGRlZCB0aGUgdHJhY2tlZCBvY2NsdXNpb24uCisKKyAgICAgICAgVGhl
IGNsYXNzIHByb3ZpZGVzIHRlc3RzIGZvciBjaGVja2luZyBpZiBhIHJlY3QgaW4gY29udGVudCBz
cGFjZQorICAgICAgICBmb3IgYSBsYXllci9zdXJmYWNlIGlzIG9jY2x1ZGVkIGJ5IG90aGVycyBp
biBmcm9udCBvZiBpdC4KKworICAgICAgICBVbml0IHRlc3RzOiBDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpl
bnRlclRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25U
cmFja2VyQmFzZTo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OnRyYW5zZm9ybVN1cmZhY2VPcGFxdWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NP
Y2NsdXNpb25UcmFja2VyQmFzZTo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udGVudFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlT2NjbHVzaW9uQmVoaW5kTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2Ns
dXNpb25UcmFja2VyQmFzZTo6bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6dGVzdENvbnRlbnRSZWN0T2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2Ns
dXNpb25UcmFja2VyQmFzZTo6b2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNp
b25UcmFja2VyQmFzZTo6c3VyZmFjZU9jY2x1ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnJlY3RT
dWJ0cmFjdFJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlVW5vY2NsdWRlZENvbnRl
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlckJhc2U6OnVub2Nj
bHVkZWRDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJC
YXNlOjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
T2NjbHVzaW9uVHJhY2tlckJhc2U6OmN1cnJlbnRPY2NsdXNpb25JblNjcmVlblNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlckJhc2U6OmN1cnJlbnRPY2NsdXNpb25J
blRhcmdldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjpl
bnRlclRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25U
cmFja2VyOjpmaW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NPY2NsdXNpb25UcmFja2VyOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXI6Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlcjo6b2NjbHVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjp1bm9jY2x1ZGVkQ29udGVudFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjpzdXJmYWNlT2NjbHVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyOjpzdXJmYWNlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlckltcGw6OmVu
dGVyVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRy
YWNrZXJJbXBsOjpmaW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NPY2NsdXNpb25UcmFja2VySW1wbDo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VySW1wbDo6bWFya09jY2x1ZGVkQmVo
aW5kTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VySW1wbDo6b2Nj
bHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VySW1wbDo6dW5vY2Ns
dWRlZENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlcklt
cGw6OnN1cmZhY2VPY2NsdWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNr
ZXJJbXBsOjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFz
ZSk6CisgICAgICAgIChTdGFja09iamVjdCk6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXIp
OgorICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2VySW1wbCk6CisKIDIwMTItMDItMTYgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJ1biBzb3J0LVhjb2RlLXBy
b2plY3QtZmlsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZWEzMjg4ZmMzY2ZjMjRk
NzIzYzA4MjJlYjA2MzJkNmI4MjkxNGE2Yy4uNjliNGMzOWE2OTc2YmMzOGYzZmNmOWE0NWU4MjAx
YThmM2NlOThkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAor
MjAxMi0wMi0xNiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbQ2hyb21pdW1dIE5ldyBDQ09jY2x1c2lvblRyYWNrZXIgY2xhc3Mgd2l0aCB0ZXN0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1NDkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBp
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50OjpMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudDo6ZHJhd3NDb250
ZW50KToKKyAgICAgICAgKFRlc3RDQ09jY2x1c2lvblRyYWNrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6b2NjbHVzaW9uSW5TY3JlZW5TcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpvY2NsdXNpb25JblRhcmdldFN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6c2V0T2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25U
cmFja2VyOjpzZXRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
VEVTVCk6CisKIDIwMTItMDItMTYgIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBwdWxsIHRoaXJkX3BhcnR5L2dvbGQgdG8gZml4IGxpbnV4IGJ1
aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNmQ5OTY1OGQ0MTAxOTI3NTc5ZjlmNjA2MmI5Mzk5MzYy
Yzg5M2YwZi4uZDRlMzJiZGE3NGI3YjkzOTY4MDE1OGQyYjMwYTBiNWY5YzBiNTNjZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMzI3MCw2ICszMjcwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2Ns
dXNpb25UcmFja2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQYWdlU2NhbGVBbmltYXRpb24uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVh
ZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmVjODcyNGJmOTFiODU2ZmM1YzNkNTc2MjI1NjQzMTg1ODVjZWRlZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVz
aW9uVHJhY2tlci5jcHAKQEAgLTAsMCArMSw0MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9D
Q09jY2x1c2lvblRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVySW1wbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCit1c2luZyBu
YW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjplbnRlclRh
cmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqIG5ld1RhcmdldCkKK3sK
KyAgICBpZiAoIW1fc3RhY2suaXNFbXB0eSgpICYmIG1fc3RhY2subGFzdCgpLnN1cmZhY2UgPT0g
bmV3VGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBSZW5kZXJTdXJmYWNlVHlw
ZSogb2xkVGFyZ2V0ID0gbV9zdGFjay5pc0VtcHR5KCkgPyAwIDogc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyU3VyZmFjZVR5cGUqPihtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKTsKKyAgICBjb25zdCBS
ZW5kZXJTdXJmYWNlVHlwZSogb2xkQW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMgPSAhb2xkVGFyZ2V0
ID8gMCA6IG9sZFRhcmdldC0+bmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAg
Y29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqIG5ld0FuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzID0gbmV3
VGFyZ2V0LT5uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKTsKKworICAgIG1fc3RhY2su
YXBwZW5kKFN0YWNrT2JqZWN0KCkpOworICAgIG1fc3RhY2subGFzdCgpLnN1cmZhY2UgPSBuZXdU
YXJnZXQ7CisKKyAgICAvLyBXZSBjb3B5IHRoZSBzY3JlZW4gb2NjbHVzaW9uIGludG8gdGhlIG5l
dyBSZW5kZXJTdXJmYWNlIHN1YnRyZWUsIGJ1dCB3ZSBuZXZlciBjb3B5IGluIHRoZQorICAgIC8v
IHRhcmdldCBvY2NsdXNpb24sIHNpbmNlIHdlIGFyZSBsb29raW5nIGF0IGEgbmV3IFJlbmRlclN1
cmZhY2UgdGFyZ2V0LgorCisgICAgLy8gSWYgd2UgYXJlIGVudGVyaW5nIGEgc3VidHJlZSB0aGF0
IGlzIGdvaW5nIHRvIG1vdmUgcGl4ZWxzIGFyb3VuZCwgdGhlbiB0aGUgb2NjbHVzaW9uIHdlJ3Zl
IGNvbXB1dGVkCisgICAgLy8gc28gZmFyIHdvbid0IGFwcGx5IHRvIHRoZSBwaXhlbHMgd2UncmUg
ZHJhd2luZyBoZXJlIGluIHRoZSBzYW1lIHdheS4gV2UgZGlzY2FyZCB0aGUgb2NjbHVzaW9uIHRo
dXMKKyAgICAvLyBmYXIgdG8gYmUgc2FmZSwgYW5kIGVuc3VyZSB3ZSBkb24ndCBjdWxsIGFueSBw
aXhlbHMgdGhhdCBhcmUgbW92ZWQgc3VjaCB0aGF0IHRoZXkgYmVjb21lIHZpc2libGUuCisgICAg
Ym9vbCBlbnRlcmluZ1N1YnRyZWVUaGF0TW92ZXNQaXhlbHMgPSBuZXdBbmNlc3RvclRoYXRNb3Zl
c1BpeGVscyAmJiBuZXdBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyAhPSBvbGRBbmNlc3RvclRoYXRN
b3Zlc1BpeGVsczsKKworICAgIGJvb2wgY29weVNjcmVlbk9jY2x1c2lvbkZvcndhcmQgPSBtX3N0
YWNrLnNpemUoKSA+IDEgJiYgIWVudGVyaW5nU3VidHJlZVRoYXRNb3Zlc1BpeGVsczsKKyAgICBp
ZiAoY29weVNjcmVlbk9jY2x1c2lvbkZvcndhcmQpIHsKKyAgICAgICAgaW50IGxhc3RJbmRleCA9
IG1fc3RhY2suc2l6ZSgpIC0gMTsKKyAgICAgICAgbV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lv
bkluU2NyZWVuID0gbV9zdGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblNjcmVlbjsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3Vy
ZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OmZpbmlzaGVkVGFyZ2V0UmVu
ZGVyU3VyZmFjZShjb25zdCBMYXllclR5cGUqIG93bmluZ0xheWVyLCBjb25zdCBSZW5kZXJTdXJm
YWNlVHlwZSogZmluaXNoZWRUYXJnZXQpCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgb3du
aW5nTGF5ZXIgcGFyYW1ldGVyIHdoZW4gd2UgY2FuIGdldCBhbGwgdGhlIGluZm8gZnJvbSB0aGUg
c3VyZmFjZS4KKyAgICBBU1NFUlQob3duaW5nTGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBmaW5p
c2hlZFRhcmdldCk7CisKKyAgICAvLyBNYWtlIHN1cmUgd2Uga25vdyBhYm91dCB0aGUgdGFyZ2V0
IHN1cmZhY2UuCisgICAgZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGZpbmlzaGVkVGFyZ2V0KTsK
KworICAgIGlmIChvd25pbmdMYXllci0+bWFza0xheWVyKCkgfHwgZmluaXNoZWRUYXJnZXQtPmRy
YXdPcGFjaXR5KCkgPCAxIHx8IGZpbmlzaGVkVGFyZ2V0LT5maWx0ZXJzKCkuaGFzRmlsdGVyVGhh
dEFmZmVjdHNPcGFjaXR5KCkpIHsKKyAgICAgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5T
Y3JlZW4gPSBSZWdpb24oKTsKKyAgICAgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJn
ZXQgPSBSZWdpb24oKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlbmRlclN1cmZh
Y2VUeXBlPgorc3RhdGljIGlubGluZSBSZWdpb24gdHJhbnNmb3JtU3VyZmFjZU9wYXF1ZVJlZ2lv
bihjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSwgY29uc3QgUmVnaW9uJiByZWdpb24s
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgLy8gVmVyaWZ5
IHRoYXQgcmVjdHMgd2l0aGluIHRoZSB8c3VyZmFjZXwgd2lsbCByZW1haW4gcmVjdHMgaW4gaXRz
IHRhcmdldCBzdXJmYWNlIGFmdGVyIGFwcGx5aW5nIHx0cmFuc2Zvcm18LiBJZiB0aGlzIGlzIHRy
dWUsIHRoZW4KKyAgICAvLyBhcHBseSB8dHJhbnNmb3JtfCB0byBlYWNoIHJlY3Qgd2l0aGluIHxy
ZWdpb258IGluIG9yZGVyIHRvIHRyYW5zZm9ybSB0aGUgZW50aXJlIFJlZ2lvbi4KKworICAgIElu
dFJlY3QgYm91bmRzID0gcmVnaW9uLmJvdW5kcygpOworICAgIEZsb2F0UmVjdCBjZW50ZXJlZEJv
dW5kcygtYm91bmRzLndpZHRoKCkgLyAyLjAsIC1ib3VuZHMuaGVpZ2h0KCkgLyAyLjAsIGJvdW5k
cy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZEJv
dW5kc1F1YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQoY2VudGVyZWRCb3VuZHMpKTsK
KyAgICBpZiAoIXRyYW5zZm9ybWVkQm91bmRzUXVhZC5pc1JlY3RpbGluZWFyKCkpCisgICAgICAg
IHJldHVybiBSZWdpb24oKTsKKworICAgIFJlZ2lvbiB0cmFuc2Zvcm1lZFJlZ2lvbjsKKworICAg
IEludFJlY3Qgc3VyZmFjZUJvdW5kcyA9IHN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisgICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gcmVnaW9uLnJlY3RzKCk7CisgICAgVmVjdG9yPEludFJlY3Q+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZWN0cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxJbnRS
ZWN0Pjo6Y29uc3RfaXRlcmF0b3IgaSA9IHJlY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsK
KyAgICAgICAgRmxvYXRSZWN0IGNlbnRlcmVkT3JpZ2luUmVjdCgtaS0+d2lkdGgoKSAvIDIuMCAr
IGktPngoKSAtIHN1cmZhY2VCb3VuZHMueCgpLCAtaS0+aGVpZ2h0KCkgLyAyLjAgKyBpLT55KCkg
LSBzdXJmYWNlQm91bmRzLnkoKSwgaS0+d2lkdGgoKSwgaS0+aGVpZ2h0KCkpOworICAgICAgICBG
bG9hdFJlY3QgdHJhbnNmb3JtZWRSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KGNl
bnRlcmVkT3JpZ2luUmVjdCkpOworICAgICAgICB0cmFuc2Zvcm1lZFJlZ2lvbi51bml0ZShlbmNs
b3NlZEludFJlY3QodHJhbnNmb3JtZWRSZWN0KSk7CisgICAgfQorICAgIHJldHVybiB0cmFuc2Zv
cm1lZFJlZ2lvbjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2
b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNv
bnN0IFJlbmRlclN1cmZhY2VUeXBlKiBuZXdUYXJnZXQpCit7CisgICAgaW50IGxhc3RJbmRleCA9
IG1fc3RhY2suc2l6ZSgpIC0gMTsKKyAgICBib29sIHN1cmZhY2VXaWxsQmVBdFRvcEFmdGVyUG9w
ID0gbV9zdGFjay5zaXplKCkgPiAxICYmIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0uc3VyZmFjZSA9
PSBuZXdUYXJnZXQ7CisKKyAgICAvLyBXZSBtZXJnZSB0aGUgc2NyZWVuIG9jY2x1c2lvbiBmcm9t
IHRoZSBjdXJyZW50IFJlbmRlclN1cmZhY2Ugc3VidHJlZSBvdXQgdG8gaXRzIHBhcmVudCB0YXJn
ZXQgUmVuZGVyU3VyZmFjZS4KKyAgICAvLyBUaGUgdGFyZ2V0IG9jY2x1c2lvbiBjYW4gYmUgbWVy
Z2VkIG91dCBhcyB3ZWxsIGJ1dCBuZWVkcyB0byBiZSB0cmFuc2Zvcm1lZCB0byB0aGUgbmV3IHRh
cmdldC4KKworICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBvbGRUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSo+KG1fc3RhY2tbbGFzdEluZGV4XS5zdXJmYWNl
KTsKKyAgICBSZWdpb24gb2xkVGFyZ2V0T2NjbHVzaW9uSW5OZXdUYXJnZXQgPSB0cmFuc2Zvcm1T
dXJmYWNlT3BhcXVlUmVnaW9uPFJlbmRlclN1cmZhY2VUeXBlPihvbGRUYXJnZXQsIG1fc3RhY2tb
bGFzdEluZGV4XS5vY2NsdXNpb25JblRhcmdldCwgb2xkVGFyZ2V0LT5kcmF3VHJhbnNmb3JtKCkp
OworCisgICAgaWYgKHN1cmZhY2VXaWxsQmVBdFRvcEFmdGVyUG9wKSB7CisgICAgICAgIC8vIE1l
cmdlIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGRvd24uCisKKyAgICAgICAgbV9zdGFja1tsYXN0SW5k
ZXggLSAxXS5vY2NsdXNpb25JblNjcmVlbi51bml0ZShtX3N0YWNrW2xhc3RJbmRleF0ub2NjbHVz
aW9uSW5TY3JlZW4pOworICAgICAgICBtX3N0YWNrW2xhc3RJbmRleCAtIDFdLm9jY2x1c2lvbklu
VGFyZ2V0LnVuaXRlKG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0KTsKKyAgICAgICAgbV9z
dGFjay5yZW1vdmVMYXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUg
dG9wIG9mIHRoZSBzdGFjayB3aXRoIHRoZSBuZXcgcHVzaGVkIHN1cmZhY2UuIENvcHkgdGhlIG9j
Y2x1ZGVkIHNjcmVlbiByZWdpb24gdG8gdGhlIHRvcC4KKyAgICAgICAgbV9zdGFjay5sYXN0KCku
c3VyZmFjZSA9IG5ld1RhcmdldDsKKyAgICAgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5U
YXJnZXQgPSBvbGRUYXJnZXRPY2NsdXNpb25Jbk5ld1RhcmdldDsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgTGF5ZXJUeXBlKiBsYXllcikK
K3sKKyAgICBJbnRTaXplIGJvdW5kc0luTGF5ZXJTcGFjZSA9IGxheWVyLT5ib3VuZHMoKTsKKyAg
ICBJbnRTaXplIGJvdW5kc0luQ29udGVudFNwYWNlID0gbGF5ZXItPmNvbnRlbnRCb3VuZHMoKTsK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGxheWVyLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpOworCisgICAgaWYgKGJvdW5kc0luQ29udGVudFNwYWNlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKworICAgIC8vIFNjYWxlIGZyb20gY29udGVudCBz
cGFjZSB0byBsYXllciBzcGFjZQorICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRz
SW5MYXllclNwYWNlLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGJvdW5kc0luQ29udGVu
dFNwYWNlLndpZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzSW5M
YXllclNwYWNlLmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRT
cGFjZS5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlPgorc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
b250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtKGNvbnN0IExheWVyVHlwZSogbGF5ZXIpCit7
CisgICAgSW50U2l6ZSBib3VuZHNJbkxheWVyU3BhY2UgPSBsYXllci0+Ym91bmRzKCk7CisgICAg
SW50U2l6ZSBib3VuZHNJbkNvbnRlbnRTcGFjZSA9IGxheWVyLT5jb250ZW50Qm91bmRzKCk7CisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpOworCisgICAgaWYgKGJvdW5kc0luQ29udGVudFNwYWNlLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHRyYW5zZm9ybTsKKworICAgIC8vIFNjYWxlIGZyb20gY29udGVudCBzcGFjZSB0byBs
YXllciBzcGFjZQorICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzSW5MYXllclNw
YWNlLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGJvdW5kc0luQ29udGVudFNwYWNlLndp
ZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzSW5MYXllclNwYWNl
LmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS5oZWln
aHQoKSkpOworCisgICAgLy8gVGhlIGRyYXcgdHJhbnNmb3JtIGV4cGVjdHMgdGhlIG9yaWdpbiB0
byBiZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXllci4KKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRl
KC1ib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0aCgpIC8gMi4wLCAtYm91bmRzSW5Db250ZW50U3Bh
Y2UuaGVpZ2h0KCkgLyAyLjApOworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorc3RhdGljIGlubGluZSBSZWdpb24gY29tcHV0ZU9jY2x1
c2lvbkJlaGluZExheWVyKGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgUmVnaW9uIG9wYXF1ZVJlZ2lvbjsKKworICAg
IEZsb2F0UXVhZCB1bm9jY2x1ZGVkUXVhZCA9IHRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChs
YXllci0+dmlzaWJsZUxheWVyUmVjdCgpKSk7CisgICAgYm9vbCBpc1BhaW50ZWRBeGlzQWxpZ25l
ZCA9IHVub2NjbHVkZWRRdWFkLmlzUmVjdGlsaW5lYXIoKTsKKyAgICBpZiAoIWlzUGFpbnRlZEF4
aXNBbGlnbmVkKQorICAgICAgICByZXR1cm4gb3BhcXVlUmVnaW9uOworCisgICAgaWYgKGxheWVy
LT5vcGFxdWUoKSkKKyAgICAgICAgb3BhcXVlUmVnaW9uID0gZW5jbG9zZWRJbnRSZWN0KHVub2Nj
bHVkZWRRdWFkLmJvdW5kaW5nQm94KCkpOworICAgIC8vIEZJWE1FOiBDYXB0dXJlIG9wYXF1ZSBw
YWludHM6IGVsc2Ugb3BhcXVlUmVnaW9uID0gbGF5ZXItPm9wYXF1ZUNvbnRlbnRzUmVnaW9uKHRy
YW5zZm9ybSk7CisgICAgcmV0dXJuIG9wYXF1ZVJlZ2lvbjsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlPgordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjptYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihjb25zdCBMYXllclR5cGUqIGxheWVyKQoreworICAgIEFTU0VSVCghbV9zdGFj
ay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09
IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOworCisgICAgaWYgKGxheWVyLT5kcmF3T3BhY2l0eSgp
ICE9IDEpCisgICAgICAgIHJldHVybjsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRl
bnRUb1NjcmVlblNwYWNlID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBl
PihsYXllcik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFj
ZSA9IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CisK
KyAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbi51bml0ZShjb21wdXRlT2NjbHVz
aW9uQmVoaW5kTGF5ZXI8TGF5ZXJUeXBlPihsYXllciwgY29udGVudFRvU2NyZWVuU3BhY2UpKTsK
KyAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldC51bml0ZShjb21wdXRlT2NjbHVz
aW9uQmVoaW5kTGF5ZXI8TGF5ZXJUeXBlPihsYXllciwgY29udGVudFRvVGFyZ2V0U3VyZmFjZSkp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgdGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50
U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQoreworICAgIEZsb2F0UXVh
ZCB0cmFuc2Zvcm1lZFF1YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1
YWQoY29udGVudFJlY3QpKTsKKyAgICBpZiAoIXRyYW5zZm9ybWVkUXVhZC5pc1JlY3RpbGluZWFy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gb2NjbHVzaW9uLmNvbnRhaW5z
KHRyYW5zZm9ybWVkUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlPgorYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpvY2NsdWRl
ZChjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29u
c3QKK3sKKyAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09IG1fc3RhY2subGFz
dCgpLnN1cmZhY2UpOworCisgICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRS
ZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9z
dGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAodGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29udGVudFJlY3QsIGNvbnRlbnRUb1Rhcmdl
dFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllciksIG1fc3RhY2subGFzdCgpLm9jY2x1
c2lvbkluVGFyZ2V0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlPgorYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpzdXJmYWNlT2NjbHVkZWQoY29uc3Qg
TGF5ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25z
dAoreworICAgIC8vIEEgc3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgbGF5ZXJzIGRyYXdpbmcg
aW50byBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gdXNlIG9jY2x1c2lvbiBmcm9tIG9uZSBzcG90IGRv
d24gb24gdGhlIHN0YWNrLgorICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBB
U1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKTsK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VDb250ZW50VG9TY3JlZW5TcGFjZSA9
IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpOworCisgICAg
Y29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3RhY2suc2l6ZSgpLTJd
OworICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChzdXJmYWNlQ29udGVudFJlY3QsIHN1
cmZhY2VDb250ZW50VG9TY3JlZW5TcGFjZSwgc2Vjb25kTGFzdC5vY2NsdXNpb25JblNjcmVlbikp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGV0ZXJt
aW5lcyB3aGF0IHBvcnRpb24gb2YgcmVjdCwgaWYgYW55LCBpcyB1bm9jY2x1ZGVkIChub3Qgb2Nj
bHVkZWQgYnkgcmVnaW9uKS4gSWYKKy8vIHRoZSByZXN1bHRpbmcgdW5vY2NsdWRlZCByZWdpb24g
aXMgbm90IHJlY3Rhbmd1bGFyLCB3ZSByZXR1cm4gYSByZWN0IGNvbnRhaW5pbmcgaXQuCitzdGF0
aWMgaW5saW5lIEludFJlY3QgcmVjdFN1YnRyYWN0UmVnaW9uKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQoreworICAgIFJlZ2lvbiByZWN0UmVnaW9uKHJlY3QpOwor
ICAgIFJlZ2lvbiBpbnRlcnNlY3RSZWdpb24oaW50ZXJzZWN0KHJlZ2lvbiwgcmVjdFJlZ2lvbikp
OworCisgICAgaWYgKGludGVyc2VjdFJlZ2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBy
ZWN0OworICAgIAorICAgIHJlY3RSZWdpb24uc3VidHJhY3QoaW50ZXJzZWN0UmVnaW9uKTsKKyAg
ICBJbnRSZWN0IGJvdW5kc1JlY3QgPSByZWN0UmVnaW9uLmJvdW5kcygpOworICAgIHJldHVybiBi
b3VuZHNSZWN0OworfQorCitzdGF0aWMgSW50UmVjdCBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKK3sKKyAg
ICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRRdWFkID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFF1
YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0KSk7CisgICAgaWYgKCF0cmFuc2Zvcm1lZFF1YWQuaXNS
ZWN0aWxpbmVhcigpKQorICAgICAgICByZXR1cm4gY29udGVudFJlY3Q7CisgICAgLy8gVGFrZSB0
aGUgZW5jbG9zaW5nSW50UmVjdCBhdCBlYWNoIHN0ZXAgaGVyZSwgYXMgd2Ugd2FudCB0byBjb250
YWluIGFueSB1bm9jY2x1ZGVkIHBhcnRpYWwgcGl4ZWxzIGluIHRoZSByZXN1bHRpbmcgSW50UmVj
dC4KKyAgICBJbnRSZWN0IHNocnVua1JlY3QgPSByZWN0U3VidHJhY3RSZWdpb24oZW5jbG9zaW5n
SW50UmVjdCh0cmFuc2Zvcm1lZFF1YWQuYm91bmRpbmdCb3goKSksIG9jY2x1c2lvbik7CisgICAg
SW50UmVjdCB1bm9jY2x1ZGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29udGVudFNwYWNlVHJh
bnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVjdChzaHJ1bmtSZWN0KSkpOworICAgIC8v
IFRoZSB1c2Ugb2YgZW5jbG9zaW5nSW50UmVjdCwgd2l0aCBmbG9hdGluZyBwb2ludCByb3VuZGlu
ZywgY2FuIGdpdmUgdXMgYSByZXN1bHQgdGhhdCBpcyBub3QgYSBzdWItcmVjdCBvZiBjb250ZW50
UmVjdC4gU2hyaW5rIHRoZSByZXN1bHQKKyAgICAvLyBkb3duIHNvIHRoYXQgY29udGVudFJlY3Qg
Y29udGFpbnMgdGhlIHJlc3VsdCB3ZSByZXR1cm4uCisgICAgaW50IHggPSBtYXgodW5vY2NsdWRl
ZFJlY3QueCgpLCBjb250ZW50UmVjdC54KCkpOworICAgIGludCB5ID0gbWF4KHVub2NjbHVkZWRS
ZWN0LnkoKSwgY29udGVudFJlY3QueSgpKTsKKyAgICBpbnQgbWF4WCA9IG1pbih1bm9jY2x1ZGVk
UmVjdC5tYXhYKCksIGNvbnRlbnRSZWN0Lm1heFgoKSk7CisgICAgaW50IG1heFkgPSBtaW4odW5v
Y2NsdWRlZFJlY3QubWF4WSgpLCBjb250ZW50UmVjdC5tYXhZKCkpOworICAgIHJldHVybiBJbnRS
ZWN0KHgsIHksIG1heFggLSB4LCBtYXhZIC0geSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZT4KK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6dW5vY2NsdWRlZENvbnRl
bnRSZWN0KGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KSBjb25zdAoreworICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNv
bnRlbnRSZWN0OworCisgICAgLy8gV2Ugd2FudCB0byByZXR1cm4gYSByZWN0IHRoYXQgY29udGFp
bnMgYWxsIHRoZSB2aXNpYmxlIHBhcnRzIG9mIHxjb250ZW50UmVjdHwgaW4gYm90aCBzY3JlZW4g
c3BhY2UgYW5kIGluIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyBTbyB3ZSBmaW5kIHRoZSB2
aXNpYmxlIHBhcnRzIG9mIHxjb250ZW50UmVjdHwgaW4gZWFjaCBzcGFjZSwgYW5kIHRha2UgdGhl
IGludGVyc2VjdGlvbi4KKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVl
blNwYWNlID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNvbnRl
bnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CisKKyAgICBJbnRS
ZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29u
dGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25J
blNjcmVlbik7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2Ns
dWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0
YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCk7CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9u
KHVub2NjbHVkZWRJblNjcmVlbiwgdW5vY2NsdWRlZEluVGFyZ2V0KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0ludFJlY3Qg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjb25z
dCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNv
bnN0Cit7CisgICAgLy8gQSBzdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2lu
ZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3Qg
ZG93biBvbiB0aGUgc3RhY2suCisgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKKyAgICAgICAg
cmV0dXJuIHN1cmZhY2VDb250ZW50UmVjdDsKKworICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxh
c3QoKS5zdXJmYWNlKTsKKworICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgcmVjdCB0aGF0IGNv
bnRhaW5zIGFsbCB0aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGJvdGggc2Ny
ZWVuIHNwYWNlIGFuZCBpbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8gU28gd2UgZmluZCB0
aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGVhY2ggc3BhY2UsIGFuZCB0YWtl
IHRoZSBpbnRlcnNlY3Rpb24uCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9T
Y3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5
ZXIpOworCisgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3Rh
Y2suc2l6ZSgpLTJdOworICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29tcHV0ZVVu
b2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNw
YWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKTsKKworICAgIHJldHVybiB1bm9jY2x1
ZGVkSW5TY3JlZW47Cit9CisKK2NvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6
Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9z
dGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNj
cmVlbjsKK30KKworY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpjdXJyZW50
T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc3RhY2su
aXNFbXB0eSgpKTsKKyAgICByZXR1cm4gbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQ7
Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworLy8gSW5zdGFuY2UgbWV0aG9kcyBmb3IgTGF5ZXJDaHJvbWl1bS9SZW5kZXJT
dXJmYWNlQ2hyb21pdW0KKwordm9pZCBDQ09jY2x1c2lvblRyYWNrZXI6OmVudGVyVGFyZ2V0UmVu
ZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCkKK3sKKyAg
ICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjplbnRlclRhcmdldFJlbmRlclN1cmZhY2U8UmVuZGVy
U3VyZmFjZUNocm9taXVtPihuZXdUYXJnZXQpOworfQorCit2b2lkIENDT2NjbHVzaW9uVHJhY2tl
cjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IExheWVyQ2hyb21pdW0qIGxheWVy
LCBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGZpbmlzaGVkVGFyZ2V0KQoreworICAgIEND
T2NjbHVzaW9uVHJhY2tlckJhc2U6OmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZTxMYXllckNo
cm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KGxheWVyLCBmaW5pc2hlZFRhcmdldCk7Cit9
CisKK3ZvaWQgQ0NPY2NsdXNpb25UcmFja2VyOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShj
b25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCkKK3sKKyAgICBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlOjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZTxSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+KG5ld1RhcmdldCk7Cit9CisKK3ZvaWQgQ0NPY2NsdXNpb25UcmFja2VyOjptYXJrT2Nj
bHVkZWRCZWhpbmRMYXllcihjb25zdCBMYXllckNocm9taXVtKiBsYXllcikKK3sKKyAgICBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlOjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcjxMYXllckNocm9taXVt
PihsYXllcik7Cit9CisKK2Jvb2wgQ0NPY2NsdXNpb25UcmFja2VyOjpvY2NsdWRlZChjb25zdCBM
YXllckNocm9taXVtKiBsYXllciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Cit7
CisgICAgcmV0dXJuIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6Om9jY2x1ZGVkPExheWVyQ2hyb21p
dW0+KGxheWVyLCBjb250ZW50UmVjdCk7Cit9CisKK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2Vy
Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAoreworICAgIHJldHVybiBDQ09jY2x1c2lvblRy
YWNrZXJCYXNlOjp1bm9jY2x1ZGVkQ29udGVudFJlY3Q8TGF5ZXJDaHJvbWl1bT4obGF5ZXIsIGNv
bnRlbnRSZWN0KTsKK30KKworYm9vbCBDQ09jY2x1c2lvblRyYWNrZXI6OnN1cmZhY2VPY2NsdWRl
ZChjb25zdCBMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRl
bnRSZWN0KSBjb25zdAoreworICAgIHJldHVybiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpzdXJm
YWNlT2NjbHVkZWQ8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPihsYXllciwg
c3VyZmFjZUNvbnRlbnRSZWN0KTsKK30KKworSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXI6OnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNv
bnN0IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0NP
Y2NsdXNpb25UcmFja2VyQmFzZTo6c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdDxMYXllckNo
cm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KGxheWVyLCBzdXJmYWNlQ29udGVudFJlY3Qp
OworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLyBJbnN0YW5jZSBtZXRob2RzIGZvciBDQ0xheWVySW1wbC9DQ1JlbmRlclN1cmZhY2UK
Kwordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjplbnRlclRhcmdldFJlbmRlclN1cmZhY2Uo
Y29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBuZXdUYXJnZXQpCit7CisgICAgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTo6ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlPENDUmVuZGVyU3VyZmFjZT4obmV3VGFy
Z2V0KTsKK30KKwordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsOjpmaW5pc2hlZFRhcmdldFJl
bmRlclN1cmZhY2UoY29uc3QgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBDQ1JlbmRlclN1cmZh
Y2UqIGZpbmlzaGVkVGFyZ2V0KQoreworICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OmZpbmlz
aGVkVGFyZ2V0UmVuZGVyU3VyZmFjZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPihsYXll
ciwgZmluaXNoZWRUYXJnZXQpOworfQorCit2b2lkIENDT2NjbHVzaW9uVHJhY2tlckltcGw6Omxl
YXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IENDUmVuZGVyU3VyZmFjZSogbmV3VGFyZ2V0
KQoreworICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJm
YWNlPENDUmVuZGVyU3VyZmFjZT4obmV3VGFyZ2V0KTsKK30KKwordm9pZCBDQ09jY2x1c2lvblRy
YWNrZXJJbXBsOjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjb25zdCBDQ0xheWVySW1wbCogbGF5
ZXIpCit7CisgICAgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6bWFya09jY2x1ZGVkQmVoaW5kTGF5
ZXI8Q0NMYXllckltcGw+KGxheWVyKTsKK30KKworYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJJbXBs
OjpvY2NsdWRlZChjb25zdCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KSBjb25zdAoreworICAgIHJldHVybiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpvY2Ns
dWRlZDxDQ0xheWVySW1wbD4obGF5ZXIsIGNvbnRlbnRSZWN0KTsKK30KKworSW50UmVjdCBDQ09j
Y2x1c2lvblRyYWNrZXJJbXBsOjp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllcklt
cGwqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICByZXR1
cm4gQ0NPY2NsdXNpb25UcmFja2VyQmFzZTo6dW5vY2NsdWRlZENvbnRlbnRSZWN0PENDTGF5ZXJJ
bXBsPihsYXllciwgY29udGVudFJlY3QpOworfQorCitib29sIENDT2NjbHVzaW9uVHJhY2tlcklt
cGw6OnN1cmZhY2VPY2NsdWRlZChjb25zdCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEludFJl
Y3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0NPY2NsdXNpb25U
cmFja2VyQmFzZTo6c3VyZmFjZU9jY2x1ZGVkPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+
KGxheWVyLCBzdXJmYWNlQ29udGVudFJlY3QpOworfQorCitJbnRSZWN0IENDT2NjbHVzaW9uVHJh
Y2tlckltcGw6OnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwq
IGxheWVyLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJl
Y3Q8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4obGF5ZXIsIHN1cmZhY2VDb250ZW50UmVj
dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjAyOWYwMjc0NmY1NThkMTRlMDI3MjQzY2E2M2Q2N2ZkYjA1N2EwM2EKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09j
Y2x1c2lvblRyYWNrZXIuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NPY2Ns
dXNpb25UcmFja2VyX2gKKyNkZWZpbmUgQ0NPY2NsdXNpb25UcmFja2VyX2gKKworI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDTGF5ZXJJbXBsOwor
Y2xhc3MgQ0NSZW5kZXJTdXJmYWNlOworY2xhc3MgTGF5ZXJDaHJvbWl1bTsKK2NsYXNzIFJlbmRl
clN1cmZhY2VDaHJvbWl1bTsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHRyYWNrIG9jY2x1
c2lvbiBvZiBsYXllcnMgd2hpbGUgdHJhdmVyc2luZyB0aGVtIGluIGEgZnJvbnQtdG8tYmFjayBv
cmRlci4gQXMgZWFjaCBsYXllciBpcyB2aXNpdGVkLCBvbmUgb2YgdGhlCisvLyBtZXRob2RzIGlu
IHRoaXMgY2xhc3MgaXMgY2FsbGVkIHRvIG5vdGlmeSBpdCBhYm91dCB0aGUgY3VycmVudCB0YXJn
ZXQgc3VyZmFjZS4KKy8vIFRoZW4sIG9jY2x1c2lvbiBpbiB0aGUgY29udGVudCBzcGFjZSBvZiB0
aGUgY3VycmVudCBsYXllciBtYXkgYmUgcXVlcmllZCwgdmlhIG1ldGhvZHMgc3VjaCBhcyBvY2Ns
dWRlZCgpIGFuZCB1bm9jY2x1ZGVkQ29udGVudFJlY3QoKS4KKy8vIElmIHRoZSBjdXJyZW50IGxh
eWVyIG93bnMgYSBSZW5kZXJTdXJmYWNlLCB0aGVuIG9jY2x1c2lvbiBvbiB0aGF0IFJlbmRlclN1
cmZhY2UgbWF5IGFsc28gYmUgcXVlcmllZCB2aWEgc3VyZmFjZU9jY2x1ZGVkKCkgYW5kIHN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoKS4KKy8vIEZpbmFsbHksIG9uY2UgZmluaXNoZWQgd2l0
aCB0aGUgbGF5ZXIsIG9jY2x1c2lvbiBiZWhpbmQgdGhlIGxheWVyIHNob3VsZCBiZSBtYXJrZWQg
YnkgY2FsbGluZyBtYXJrT2NjbHVkZWRCZWhpbmRMYXllcigpLgorY2xhc3MgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZSB7CitwdWJsaWM6CisgICAgQ0NPY2NsdXNpb25UcmFja2VyQmFzZSgpIHsgfQor
CisgICAgLy8gQ2FsbGVkIHdoZW4gdmlzaXRpbmcgYSBsYXllciByZXByZXNlbnRpbmcgaXRzZWxm
LiBJZiB0aGUgdGFyZ2V0IHdhcyBub3QgYWxyZWFkeSBjdXJyZW50LCB0aGVuIHRoaXMgaW5kaWNh
dGVzIHdlIGhhdmUgZW50ZXJlZCBhIG5ldyBzdXJmYWNlIHN1YnRyZWUuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+IHZvaWQgZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNl
KGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBuZXdUYXJnZXQpOworCisgICAgLy8gQ2FsbGVkIHdo
ZW4gdmlzaXRpbmcgYSBsYXllciByZXByZXNlbnRpbmcgYSB0YXJnZXQgc3VyZmFjZS4gVGhpcyBp
bmRpY2F0ZXMgd2UgaGF2ZSB2aXNpdGVkIGFsbCB0aGUgbGF5ZXJzIHdpdGhpbiB0aGUgc3VyZmFj
ZSwgYW5kIHdlIG1heQorICAgIC8vIHBlcmZvcm0gYW55IHN1cmZhY2Utd2lkZSBvcGVyYXRpb25z
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGU+IHZvaWQgZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IExheWVyVHlwZSos
IGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBmaW5pc2hlZFRhcmdldCk7CisKKyAgICAvLyBDYWxs
ZWQgd2hlbiB2aXNpdGluZyBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGluZyBzdXJm
YWNlLiBUaGlzICBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgbGVhdmluZyBvdXIgY3VycmVudCBzdXJm
YWNlLCBhbmQKKyAgICAvLyBlbnRlcmluZyB0aGUgbmV3IG9uZS4gV2UgdGhlbiBwZXJmb3JtIGFu
eSBvcGVyYXRpb25zIHJlcXVpcmVkIGZvciBtZXJnaW5nIHJlc3VsdHMgZnJvbSB0aGUgY2hpbGQg
c3VidHJlZSBpbnRvIGl0cyBwYXJlbnQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3Vy
ZmFjZVR5cGU+IHZvaWQgbGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3Vy
ZmFjZVR5cGUqIG5ld1RhcmdldCk7CisKKyAgICAvLyBBZGQgdGhlIGxheWVyJ3Mgb2NjbHVzaW9u
IHRvIHRoZSB0cmFja2VkIHN0YXRlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4g
dm9pZCBtYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjb25zdCBMYXllclR5cGUqKTsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVjdCBpbiBjb250ZW50IHNwYWNlIGZvciB0aGUg
bGF5ZXIgaXMgZnVsbHkgb2NjbHVkZWQgaW4gZWl0aGVyIHNjcmVlbiBzcGFjZSBvciB0aGUgbGF5
ZXIncyB0YXJnZXQgc3VyZmFjZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IGJv
b2wgb2NjbHVkZWQoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
IGNvbnN0OworICAgIC8vIEdpdmVzIGFuIHVub2NjbHVkZWQgc3ViLXJlY3Qgb2YgfGNvbnRlbnRS
ZWN0fCBpbiB0aGUgY29udGVudCBzcGFjZSBvZiB0aGUgbGF5ZXIuIFVzZWQgd2hlbiBjb25zaWRl
cmluZyBvY2NsdXNpb24gZm9yIGEgbGF5ZXIgdGhhdCBwYWludHMvZHJhd3Mgc29tZXRoaW5nLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gSW50UmVjdCB1bm9jY2x1ZGVkQ29udGVu
dFJlY3QoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0
OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiByZWN0IGluIGNvbnRlbnQgc3Bh
Y2UgZm9yIHRoZSBSZW5kZXJTdXJmYWNlIG93bmVkIGJ5IHRoZSBsYXllciBpcyBmdWxseSBvY2Ns
dWRlZCBpbiBlaXRoZXIgc2NyZWVuIHNwYWNlIG9yIHRoZSBsYXllcidzIHRhcmdldCBzdXJmYWNl
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGU+IGJvb2wgc3VyZmFjZU9jY2x1ZGVkKGNvbnN0IExheWVyVHlwZSosIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKyAgICAvLyBHaXZlcyBhbiB1bm9jY2x1ZGVkIHN1Yi1y
ZWN0IG9mIHxjb250ZW50UmVjdHwgaW4gdGhlIGNvbnRlbnQgc3BhY2Ugb2YgdGhlIFJlbmRlclN1
cmZhY2Ugb3duZWQgYnkgdGhlIGxheWVyLiBVc2VkIHdoZW4gY29uc2lkZXJpbmcgb2NjbHVzaW9u
IGZvciBhIHRhcmdldCBzdXJmYWNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwg
dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+IEludFJlY3Qgc3VyZmFjZVVub2NjbHVkZWRDb250
ZW50UmVjdChjb25zdCBMYXllclR5cGUqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29u
c3Q7CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGluIGZ1dHVyZSwgdGhleSBhcmUgdG8g
bWFrZSBDTHMgZm9yIHRyYW5zaXRpb25pbmcgdG8gdGhpcyBlYXNpZXIuCisgICAgY29uc3QgUmVn
aW9uJiBjdXJyZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0OworICAgIGNvbnN0IFJl
Z2lvbiYgY3VycmVudE9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgdHlwZWRlZiB2b2lkIFJlbmRlclN1cmZhY2VWb2lkVHlwZTsKKworICAgIHN0cnVj
dCBTdGFja09iamVjdCB7CisgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VWb2lkVHlwZSogc3Vy
ZmFjZTsKKyAgICAgICAgUmVnaW9uIG9jY2x1c2lvbkluU2NyZWVuOworICAgICAgICBSZWdpb24g
b2NjbHVzaW9uSW5UYXJnZXQ7CisgICAgfTsKKworICAgIC8vIFRoZSBzdGFjayBob2xkcyBvY2Ns
dWRlZCByZWdpb25zIGZvciBzdWJ0cmVlcyBpbiB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVl
LCBzbyB0aGF0IHdoZW4gd2UgbGVhdmUgYSBzdWJ0cmVlIHdlIG1heQorICAgIC8vIGFwcGx5IGEg
bWFzayB0byBpdCwgYnV0IG5vdCB0byB0aGUgcGFydHMgb3V0c2lkZSB0aGUgc3VidHJlZS4KKyAg
ICAvLyAtIFRoZSBmaXJzdCB0aW1lIHdlIHNlZSBhIG5ldyBzdWJ0cmVlIHVuZGVyIGEgdGFyZ2V0
LCB3ZSBhZGQgdGhhdCB0YXJnZXQgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2suIFRoaXMgY2FuIGhh
cHBlbiBhcyBhIGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIG9yIGFzIGEgdGFyZ2V0IHN1cmZh
Y2UuCisgICAgLy8gLSBXaGVuIHdlIHZpc2l0IGEgdGFyZ2V0IHN1cmZhY2UsIHdlIGFwcGx5IGl0
cyBtYXNrIHRvIGl0cyBzdWJ0cmVlLCB3aGljaCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4K
KyAgICAvLyAtIFdoZW4gd2UgdmlzaXQgYSBsYXllciByZXByZXNlbnRpbmcgaXRzZWxmLCB3ZSBh
ZGQgaXRzIG9jY2x1c2lvbiB0byB0aGUgY3VycmVudCBzdWJ0cmVlLCB3aGljaCBpcyBhdCB0aGUg
dG9wIG9mIHRoZSBzdGFjay4KKyAgICAvLyAtIFdoZW4gd2UgdmlzaXQgYSBsYXllciByZXByZXNl
bnRpbmcgYSBjb250cmlidXRpbmcgc3VyZmFjZSwgdGhlIGN1cnJlbnQgdGFyZ2V0IHdpbGwgbmV2
ZXIgYmUgdGhlIHRvcCBvZiB0aGUgc3RhY2sgc2luY2Ugd2UganVzdCBjYW1lIGZyb20gdGhlIGNv
bnRyaWJ1dGluZyBzdXJmYWNlLgorICAgIC8vIFdlIG1lcmdlIHRoZSBvY2NsdXNpb24gYXQgdGhl
IHRvcCBvZiB0aGUgc3RhY2sgd2l0aCB0aGUgbmV3IGN1cnJlbnQgc3VidHJlZS4gVGhpcyBuZXcg
dGFyZ2V0IGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjayBpZiBub3QgYWxyZWFkeSB0aGVyZS4KKyAg
ICBWZWN0b3I8U3RhY2tPYmplY3QsIDE+IG1fc3RhY2s7CisKK3ByaXZhdGU6CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ0NPY2NsdXNpb25UcmFja2VyQmFzZSk7Cit9OworCitjbGFzcyBDQ09j
Y2x1c2lvblRyYWNrZXIgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyQmFzZSB7CitwdWJsaWM6
CisgICAgdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiBuZXdUYXJnZXQpOworICAgIHZvaWQgZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNl
KGNvbnN0IExheWVyQ2hyb21pdW0qLCBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGZpbmlz
aGVkVGFyZ2V0KTsKKyAgICB2b2lkIGxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogbmV3VGFyZ2V0KTsKKyAgICB2b2lkIG1hcmtPY2NsdWRlZEJl
aGluZExheWVyKGNvbnN0IExheWVyQ2hyb21pdW0qKTsKKyAgICBib29sIG9jY2x1ZGVkKGNvbnN0
IExheWVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAg
SW50UmVjdCB1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSosIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKyAgICBib29sIHN1cmZhY2VPY2NsdWRlZChj
b25zdCBMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBj
b25zdDsKKyAgICBJbnRSZWN0IHN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5
ZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3Q7Cit9
OworCitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJJbXBsIDogcHVibGljIENDT2NjbHVzaW9uVHJh
Y2tlckJhc2UgeworcHVibGljOgorICAgIHZvaWQgZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNv
bnN0IENDUmVuZGVyU3VyZmFjZSogbmV3VGFyZ2V0KTsKKyAgICB2b2lkIGZpbmlzaGVkVGFyZ2V0
UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVySW1wbCosIGNvbnN0IENDUmVuZGVyU3VyZmFjZSog
ZmluaXNoZWRUYXJnZXQpOworICAgIHZvaWQgbGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoY29u
c3QgQ0NSZW5kZXJTdXJmYWNlKiBuZXdUYXJnZXQpOworICAgIHZvaWQgbWFya09jY2x1ZGVkQmVo
aW5kTGF5ZXIoY29uc3QgQ0NMYXllckltcGwqKTsKKyAgICBib29sIG9jY2x1ZGVkKGNvbnN0IEND
TGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OworICAgIEludFJl
Y3QgdW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpIGNvbnN0OworICAgIGJvb2wgc3VyZmFjZU9jY2x1ZGVkKGNvbnN0IEND
TGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdDsKKyAg
ICBJbnRSZWN0IHN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwq
LCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OworfTsKKworfQorI2Vu
ZGlmIC8vIENDT2NjbHVzaW9uVHJhY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpp
bmRleCAzNWYyYjE5OTA3NzlkNjY5ZWY4MDQwMmZiMDBmMmE1NTYxNDdjMzI2Li5jZGFhMjM2NDk1
NGRjOGE5OTgzMzAyZjVjMWM1ZTE1MjdmZTMyN2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKQEAgLTc1LDYgKzc1LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcsCisgICAg
ICAgICAgICAndGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1JlbmRl
clN1cmZhY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1h
Y2hpbmVUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBiMWZhNzI5MTg0MDFlMzI0
MGU0MWQxM2QyZTBjMjdkMGM1NmFkN2M1Li5kMmUxY2ZlZjkzZTI4MjE2NmRhODUxMjU2Yzk1YzBl
NjUxMmM2OWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lu
Y2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KQEAgLTM2LDEyICszNSw2IEBACiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi0jZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEsIGIpIFwKLSAg
ICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAotICAgIEVYUEVDVF9FUShhLnkoKSwgYi55KCkp
OyBcCi0gICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAotICAgIEVYUEVDVF9F
UShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKLQogbmFtZXNwYWNlIHsKIAogdm9pZCBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3Vi
bGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2ZXMzRCkKQEAg
LTYwMiwxNzQgKzU5NSw0IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogLy8gIC0gdGVzdCB0aGUgb3RoZXIgZnVuY3Rp
b25zIGluIENDTGF5ZXJUcmVlSG9zdENvbW1vbgogLy8KIAotVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbikKLXsKLSAgICAvLyBUaGlz
IHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAgUmVn
aW9uIG9jY2x1ZGVkOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+
IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
KCkpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHBhcmVudC0+YWRk
Q2hpbGQobGF5ZXIpOwotCi0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKLSAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1
MDAsIDUwMCksIGZhbHNlKTsKLQotICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7Ci0KLSAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Ci0gICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXgg
dGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9z
dCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28uCi0gICAgcGFyZW50LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOwotICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocGFyZW50KTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKLQotICAgIG9jY2x1ZGVkID0gUmVnaW9u
KCk7Ci0gICAgbGF5ZXItPmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOwot
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2NsdWRlZC5ib3Vu
ZHMoKSk7Ci0gICAgRVhQRUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Ci19Ci0K
LVRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgbGF5ZXJBZGRzU2VsZlRvT2NjbHVkZWRS
ZWdpb25XaXRoUm90YXRpb24pCi17Ci0gICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0
cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFJlZ2lvbiBvY2NsdWRlZDsKLSAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKLQotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOwotICAgIGxheWVyVHJhbnNmb3JtLnRy
YW5zbGF0ZSgyNTAsIDI1MCk7Ci0gICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKLSAgICBs
YXllclRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7Ci0KLSAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAw
KSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCks
IGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOwotCi0gICAgbGF5ZXItPnNl
dE9wYXF1ZSh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLQotICAg
IC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVo
YXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUsIHRv
by4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwotCi0gICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwot
Ci0gICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKLSAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVkZWRT
Y3JlZW5TcGFjZShvY2NsdWRlZCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAs
IDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKLSAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1ZGVk
LnJlY3RzKCkuc2l6ZSgpKTsKLX0KLQotVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCBs
YXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKLXsKLSAgICAvLyBU
aGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAg
UmVnaW9uIG9jY2x1ZGVkOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHBhcmVudC0+
YWRkQ2hpbGQobGF5ZXIpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zv
cm07Ci0gICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7Ci0KLSAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEw
MCwgMTAwKSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIu
Z2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOwotCi0gICAgbGF5
ZXItPnNldE9wYXF1ZSh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiBkdW1teUxheWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsK
LQotICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2Fz
ZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhl
cmUsIHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
LSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwotCi0gICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOwotCi0gICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKLSAgICBsYXllci0+YWRkU2VsZlRvT2Nj
bHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1
MCwgNTAsIDUwLCA1MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKLSAgICBFWFBFQ1RfRVEoMXUsIG9j
Y2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKLX0KLQotVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKLXsK
LSAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVz
ZWQuCi0gICAgUmVnaW9uIG9jY2x1ZGVkOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwot
ICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOwotICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7
Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKLSAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOwotICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5
MCk7Ci0gICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOwotCi0gICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSgxMDAsIDEwMCksIGZhbHNlKTsKLSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNo
aWxkLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKLSAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50
U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKLQotICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRy
dWUpOwotICAgIGxheWVyLT5zZXRPcGFxdWUodHJ1ZSk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Ci0gICAgaW50IGR1bW15TWF4VGV4dHVy
ZVNpemUgPSA1MTI7Ci0KLSAgICAvLyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXll
ciBzcGVjaWFsIGNhc2UiIGJlaGF2aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZl
IHRvIGZpeCBpdCBoZXJlLCB0b28uCi0gICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwot
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsK
LQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKLQotICAgIG9jY2x1ZGVkID0gUmVnaW9uKCk7Ci0gICAgbGF5ZXIt
PmFkZFNlbGZUb09jY2x1ZGVkU2NyZWVuU3BhY2Uob2NjbHVkZWQpOwotICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBvY2NsdWRlZC5ib3VuZHMoKSk7Ci0gICAgRVhQ
RUNUX0VRKDF1LCBvY2NsdWRlZC5yZWN0cygpLnNpemUoKSk7Ci0KLSAgICAvKiBKdXN0aWZpY2F0
aW9uIGZvciB0aGUgYWJvdmUgb3BhcXVlIHJlY3QgZnJvbSB8bGF5ZXJ8OgotICAgICAgICAgICAg
ICAgMTAwCi0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgfDMwICBWaXNpYmxlIHJlZ2lvbiBvZiB8bGF5ZXJ8OiAvLy8vLwot
ICAgICAgfCAgICAzMCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHJvdGF0ZSg5MCkgICAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICB8IDMwICsgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgfCAgICAgKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgMTAwIHwgICAgfCAgMTAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgPT0+ICAgICB8ICAgICB8ICAgICAgICAg
ICAgICAgfDEwICAgICAgICAgICAgICAgfAotICAgICAgfCAgICB8MTArLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0rICB8Ci0gICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wg
ICAgIDQyMCAgICAgIHwgIHwKLSAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfDYwICAg
ICAgICAgICAgfCAgfAotICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98ICAgICAgICAg
ICAgICB8ICB8Ci0gICAgICArLS0tLXwtLXwtLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgKy0tfC0tfC0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAg
IHwgIHwKLSAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICAgMjB8MTB8ICAgICA3MCAgICAgICAgICAgICAgICAgICAgICAgfCAg
fAotICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0g
ICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8NTAwICAgICAg
ICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAg
ICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDEwfAotICAgICAgICAgICArLS18LS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAgICAgIHwgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0rCi0gICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgNDkwICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMAotICAgICAq
LwotfQotCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM4OWJlYTk3
MGFlNTY1MWZkMmRlNzc4YTExNzM1OTcyMmU2MmVkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTAs
MCArMSwxMDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ09jY2x1c2lvblRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNkZWZpbmUgRVhQRUNU
X0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAgRVhQ
RUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndpZHRo
KCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCituYW1lc3Bh
Y2UgeworCit2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5j
aG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBi
b29sIG9wYXF1ZSkKK3sKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAg
bGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKHN1YmxheWVyVHJhbnNmb3JtKTsKKyAgICBsYXll
ci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yKTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24ocG9zaXRp
b24pOworICAgIGxheWVyLT5zZXRCb3VuZHMoYm91bmRzKTsKKyAgICBsYXllci0+c2V0T3BhcXVl
KG9wYXF1ZSk7Cit9CisKK2NsYXNzIExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
IDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkKKyAgICAgICAgOiBMYXllckNocm9taXVtKCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KK307CisKKy8vIEEgc3ViY2xhc3MgdG8gZXhwb3NlIHRoZSB0b3RhbCBjdXJyZW50IG9j
Y2x1c2lvbi4KK2NsYXNzIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgOiBwdWJsaWMgQ0NPY2NsdXNp
b25UcmFja2VyIHsKK3B1YmxpYzoKKyAgICBSZWdpb24gb2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5TY3JlZW47IH0KKyAgICBSZWdpb24gb2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29u
c3QgeyByZXR1cm4gQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25J
blRhcmdldDsgfQorCisgICAgdm9pZCBzZXRPY2NsdXNpb25JblNjcmVlblNwYWNlKGNvbnN0IFJl
Z2lvbiYgcmVnaW9uKSB7IENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5TY3JlZW4gPSByZWdpb247IH0KKyAgICB2b2lkIHNldE9jY2x1c2lvbkluVGFyZ2V0U3Vy
ZmFjZShjb25zdCBSZWdpb24mIHJlZ2lvbikgeyBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2su
bGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0ID0gcmVnaW9uOyB9Cit9OworCitURVNUKENDT2NjbHVz
aW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uKQoreworICAgIC8vIFRo
aXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBm
YWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0
dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBw
YXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5k
TGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3
MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAg
ICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMo
KS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVD
VF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2Nj
bHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMzAsIDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNzAsIDcwKSkpOworICAgIEVY
UEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgz
MCwgMzEsIDcwLCA3MCkpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSkuaXNFbXB0
eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCAzMCwgMSwgNzApLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMzAsIDcw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCAyOSwgNzAsIDcwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDI5
LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMjksIDcwLCAxKSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMSwgMjksIDcwLCA3
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMxLCAyOSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCAzMCwg
MSwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMxLCAz
MSwgNzAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzEsIDMxLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgz
MCwgMTAwLCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMwLCAzMSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMjksIDMxLCA3MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgyOSwgMzEsIDcwLCA3MCkpKTsKK30KKworVEVTVChDQ09jY2x1c2lv
blRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlvbikKK3sK
KyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVz
ZWQuCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xh
dGUoMjUwLCAyNTApOworICAgIGxheWVyVHJhbnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgbGF5ZXJU
cmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXll
clRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBh
cmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcw
LCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
IEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0
KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOwor
ICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzMSwgNzAsIDcwKSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCA3MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDI5LCA3MCwgNzApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMjks
IDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyOSwgNzAsIDEpLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMxLCAyOSwgNzAsIDcw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MzEsIDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDMwLCAx
LCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMxLCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDMx
LCA3MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgzMSwgMzEsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMw
LCAxMDAsIDcwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgyOSwgMzEsIDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDI5LCAzMSwgNzAsIDcwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQor
eworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcg
dXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5z
bGF0ZSgyMCwgMjApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1
MDAsIDUwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJl
bmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisg
ICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwg
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAg
IG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNl
KCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDUwLCA1MCksIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDUwLCA1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25J
blRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24u
b2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQRUNU
X0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUw
LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA1MCwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNDksIDUwLCA1
MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0
KCksIEludFJlY3QoNTEsIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MSwgNTAsIDUwKSkpOwor
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoNTAsIDUwLCA1MCwgNTApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoNDksIDUwLCAxLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA1MCwgNTAsIDUwKSkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoNDksIDQ5LCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNDksIDUwLCA1MCkpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA0OSwgNTAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNDksIDUwLCA1MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUxLCA0OSwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDQ5LCA1MCwgNTApKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDUwLCAxLCA1MCksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MCwgNTAsIDUw
KSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTEsIDUxLCA1MCwgNTApLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNTEsIDUw
LCA1MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCAxMDAsIDUwLCAxKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUx
LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0OSwgNTEsIDUwLCA1MCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDQ5
LCA1MSwgNTAsIDUwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVy
QWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQoreworICAgIC8vIFRoaXMg
dGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0
Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxk
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQobGF5
ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisgICAgY2hp
bGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS5yb3Rh
dGUoOTApOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZC5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCks
IEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgIGNoaWxkLT5zZXRNYXNrc1RvQm91bmRz
KHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5
ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lv
bi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
b2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3
MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQo
KSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1
c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDI5LCA2MCwgNzApKSk7Cisg
ICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJl
Y3QoMTAsIDQzMCwgNjEsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9j
Y2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MSkpKTsKKworICAgIG9j
Y2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZC5nZXQoKSk7CisgICAgb2NjbHVz
aW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZC5nZXQoKSwgY2hpbGQtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAs
IDQwLCA3MCwgNjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygp
KTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwg
NjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAg
IEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgNDAsIDcwLCA2
MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0
KCksIEludFJlY3QoMzAsIDM5LCA3MCwgNjApKSk7CisKKworICAgIC8qIEp1c3RpZmljYXRpb24g
Zm9yIHRoZSBhYm92ZSBvY2NsdXNpb24gZnJvbSB8bGF5ZXJ8OgorICAgICAgICAgICAgICAgMTAw
CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgfDMwICBWaXNpYmxlIHJlZ2lvbiBvZiB8bGF5ZXJ8OiAvLy8vLworICAgICAg
fCAgICAzMCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHJvdGF0ZSg5MCkgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8IDMwICsgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgMTAwIHwgICAgfCAgMTAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgPT0+ICAgICB8ICAgICB8ICAgICAgICAgICAgICAg
fDEwICAgICAgICAgICAgICAgfAorICAgICAgfCAgICB8MTArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0rICB8CisgICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgIDQy
MCAgICAgIHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfDYwICAgICAgICAg
ICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwg
fCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98ICAgICAgICAgICAgICB8
ICB8CisgICAgICArLS0tLXwtLXwtLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgfCB8ICAg
ICAgICAgICAgICAgICAgKy0tfC0tfC0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgIHwgIHwK
KyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAg
ICAgICAgICAgICAgMjB8MTB8ICAgICA3MCAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAg
ICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAg
ICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAg
ICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8NTAwICAgICAgICAgICAg
ICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfDEwfAorICAgICAgICAgICArLS18LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0rCisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
NDkwICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMAorICAgICAqLworfQor
CitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9u
V2l0aFN1cmZhY2VBbHJlYWR5T25TdGFjaykKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhl
IHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgVGVzdENDT2NjbHVzaW9uVHJh
Y2tlciBvY2NsdXNpb247CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudD4gY2hpbGQyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5h
ZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGxheWVyKTsKKyAgICBwYXJlbnQt
PmFkZENoaWxkKGNoaWxkMik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5z
Zm9ybTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxk
VHJhbnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAs
IC0yNTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgLy8gfGNoaWxk
MnwgbWFrZXMgfHBhcmVudHwncyBzdXJmYWNlIGdldCBjb25zaWRlcmVkIGJ5IENDT2NjbHVzaW9u
VHJhY2tlciBmaXJzdCwgaW5zdGVhZCBvZiB8Y2hpbGR8J3MuIFRoaXMgZXhlcmNpc2VzIGRpZmZl
cmVudCBjb2RlIGluCisgICAgLy8gbGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UsIGFzIHRoZSB0
YXJnZXQgc3VyZmFjZSBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uCisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDYwLCAyMCks
IHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygp
KSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBh
cmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJl
bnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVy
U3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2Ns
dWRlZEJlaGluZExheWVyKGNoaWxkMi5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDMwLCAzMCwgNjAsIDIwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5i
b3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5T
cGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAz
MCwgNjAsIDIwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygp
KTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJm
YWNlKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMw
LCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
LnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYw
LCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVj
dHMoKS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChj
aGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZh
bHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwg
NzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0
KCksIEludFJlY3QoMTAsIDQyOSwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2Nj
bHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50
UmVjdCgxMCwgNDMxLCA2MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkp
LmlzRW1wdHkoKSk7CisgICAgLy8gVGhpcyBpcyB0aGUgbGl0dGxlIHBpZWNlIG5vdCBvY2NsdWRl
ZCBieSBjaGlsZDIKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDksIDQzMCwgMSwgMTApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQz
MCwgNjAsIDcwKSkpOworICAgIC8vIFRoaXMgZXh0ZW5kcyBwYXN0IGJvdGggc2lkZXMgb2YgY2hp
bGQyLCBzbyBpdCB3aWxsIGJlIHRoZSBvcmlnaW5hbCByZWN0LgorICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoOSwgNDMwLCA2MCwgODApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDgwKSkpOworICAgIC8vIFRoaXMgZXh0
ZW5kcyBwYXN0IHR3byBhZGphY2VudCBzaWRlcyBvZiBjaGlsZDIsIGFuZCBzaG91bGQgaW5jbHVk
ZWQgdGhlIHVub2NjbHVkZWQgcGFydHMgb2YgZWFjaCBzaWRlLgorICAgIC8vIFRoaXMgYWxzbyBk
ZW1vbnN0cmF0ZXMgdGhhdCB0aGUgcmVjdCBjYW4gYmUgYXJiaXRyYXJ5IGFuZCBkb2VzIG5vdCBn
ZXQgY2xpcHBlZCB0byB0aGUgbGF5ZXIncyB2aXNpYmxlTGF5ZXJSZWN0KCkuCisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgtMTAsIDQzMCwgMjAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNjAsIDcwKSkpOworICAg
IC8vIFRoaXMgZXh0ZW5kcyBwYXN0IHRocmVlIGFkamFjZW50IHNpZGVzIG9mIGNoaWxkMiwgc28g
aXQgc2hvdWxkIGNvbnRhaW4gdGhlIHVub2NjbHVkZWQgcGFydHMgb2YgZWFjaCBzaWRlLiBUaGUg
bGVmdAorICAgIC8vIGFuZCBib3R0b20gZWRnZXMgYXJlIGNvbXBsZXRlbHkgdW5vY2NsdWRlZCBm
b3Igc29tZSByb3cvY29sdW1uIHNvIHdlIGdldCBiYWNrIHRoZSBvcmlnaW5hbCBxdWVyeSByZWN0
LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0MzAsIDYwLCA4MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoLTEwLCA0MzAsIDYw
LCA4MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MjksIDYwLCAxKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDI5
LCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3MCwgNDMwLCAxLCA3MCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTEs
IDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDUwMCwgNjAs
IDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0
KDEwLCA0MzEsIDYwLCA3MCkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5
IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgxMCwgNDMwLCA2MCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVj
dChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisKKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOworICAgIC8vIHxjaGlsZDJ8
IHNob3VsZCBnZXQgbWVyZ2VkIHdpdGggdGhlIHN1cmZhY2Ugd2UgYXJlIGxlYXZpbmcgbm93Cisg
ICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZC5nZXQoKSwgY2hp
bGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJT
dXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMzAsIDMwLCA3MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVl
blNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAs
IDMwLCA3MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiBzY3JlZW4gPSBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCk7CisgICAgVmVjdG9yPEludFJl
Y3Q+IHRhcmdldCA9IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygp
OworCisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
OTAsIDMwLCAxMCwgMTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMCwgNjAsIDEwKSkp
OworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwg
SW50UmVjdCgyOSwgMzAsIDYwLCAxMCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lv
bi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA2MCwgMTApKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMxLCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNjAsIDEwKSkpOworCisgICAgRVhQRUNU
X0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQw
LCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzksIDcwLCA2
MCkpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMCwgNjAsIDEwKSkuaXNFbXB0eSgpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCAzMCwgMSwgMTApLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMzAsIDYwLCAxMCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyOSwgNjAsIDEpLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDYwLCAxMCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDkwLCAzMCwgMSwgMTApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzAsIDYwLCAxMCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMzEsIDYwLCAxMCkpLmlzRW1wdHkoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgyOSwgNDAsIDEsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgLy8gVGhpcyByZWN0IGlz
IG1vc3RseSBvY2NsdWRlZCBieSB8Y2hpbGQyfC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDkwLCAzOSwgMTAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgzMCwgMzksIDcwLCA2MCkpKTsKKyAgICAvLyBUaGlzIHJlY3QgZXh0ZW5k
cyBwYXN0IHRvcC9yaWdodCBlbmRzIG9mIHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMzAsIDI5LCA3MCwgMTEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBh
cmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsKKyAgICAvLyBUaGlzIHJlY3Qg
ZXh0ZW5kcyBwYXN0IGxlZnQvcmlnaHQgZW5kcyBvZiB8Y2hpbGQyfC4KKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDIwLCAzOSwgODAsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAsIDM5LCA4MCwgNjApKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgxMDAsIDQwLCAxLCA2MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCA0MCwgNzAsIDYwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDEwMCwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDEsIDcwLCA2MCkpKTsKKwor
ICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBp
dHNlbGYuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1
c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgz
MCwgNDAsIDcwLCA2MCkpKTsKKworCisgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3Zl
IG9jY2x1c2lvbiBmcm9tIHxsYXllcnw6CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8
MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgMzAg
ICA2MCAgICAgICAgIHwgICAgfGNoaWxkMnw6IFxcXFxcCisgICAgICB8IDMwICsgLS0tLS0tLS0t
LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgfCAgMzAgKy0tLS0t
LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgMTAwIHwgICAgfCAgMTAgICAgICAgICB8
ICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgPT0+ICAgICB8ICAgICB8XFxcXFxcXFxc
XFxcfCAgfDEwICAgICAgICAgICAgICAgfAorICAgICAgfCAgICB8MTArLS0tLS0tLS0tLXwtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgIHwgICstLXxcXFxcXFxcXFxcXFx8
LS0tLS0tLS0tLS0tLS0tLS0rICB8CisgICAgICB8ICAgICsgLS0tLS0tLS0tLS0tKyAgfCAgICAg
ICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgfCAgfCAgKy0tLS0tLS0tLS0tLSsvL3wg
ICAgIDQyMCAgICAgIHwgIHwKKyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfDYwICAg
ICAgICAgICAgfCAgfAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgIHwgfCAgICAgICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98ICAgICAgICAg
ICAgICB8ICB8CisgICAgICArLS0tLXwtLXwtLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgKy0tfC0tfC0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAg
IHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICAgMjB8MTB8ICAgICA3MCAgICAgICAgICAgICAgICAgICAgICAgfCAg
fAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Cisg
ICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8NTAwICAgICAg
ICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAg
ICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDEwfAorICAgICAgICAgICArLS18LS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAgICAgIHwgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0rCisgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgNDkwICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMAorICAgICAq
LworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVk
UmVnaW9uV2l0aFJvdGF0ZWRPZmZBeGlzU3VyZmFjZSkKK3sKKyAgICBUZXN0Q0NPY2NsdXNpb25U
cmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0
eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJl
bnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAg
Ly8gTm93IHJvdGF0ZSB0aGUgY2hpbGQgYSBsaXR0bGUgbW9yZSBzbyBpdCBpcyBub3QgYXhpcy1h
bGlnbmVkLiBUaGUgcGFyZW50IHdpbGwgbm8gbG9uZ2VyIGJlIG9jY2x1ZGVkIGJ5IHxsYXllcnws
IGJ1dAorICAgIC8vIHRoZSBjaGlsZCdzIG9jY2x1c2lvbiBzaG91bGQgYmUgdW5jaGFuZ2VkLgor
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisgICAgY2hpbGRUcmFu
c2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS5yb3RhdGUoOTUp
OworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5z
bGF0ZSgxMCwgMTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1
MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVy
LmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgIGNoaWxk
LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0
Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKworICAgIEludFJlY3QgY2xpcHBlZExheWVySW5DaGlsZCA9IGxheWVyVHJhbnNmb3JtLm1h
cFJlY3QobGF5ZXItPnZpc2libGVMYXllclJlY3QoKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJU
YXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lv
bi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgwdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZExheWVySW5DaGls
ZCwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBF
WFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxk
LmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNoaWxkKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNo
aWxkKS5pc0VtcHR5KCkpOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgtMSwgMCk7Cisg
ICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIGNsaXBw
ZWRMYXllckluQ2hpbGQpKTsgCisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkuaXNFbXB0
eSgpKTsKKyAgICBjbGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMSwgMCk7CisgICAgY2xpcHBlZExh
eWVySW5DaGlsZC5tb3ZlKDEsIDApOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9j
Y2x1ZGVkKGNoaWxkLmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNoaWxkKSk7CisgICAgRVhQRUNUX0VR
KGZhbHNlLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgY2xp
cHBlZExheWVySW5DaGlsZCkuaXNFbXB0eSgpKTsKKyAgICBjbGlwcGVkTGF5ZXJJbkNoaWxkLm1v
dmUoLTEsIDApOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgwLCAtMSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIGNsaXBwZWRMYXll
ckluQ2hpbGQpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNoaWxkKS5pc0VtcHR5KCkpOwor
ICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgwLCAxKTsKKyAgICBjbGlwcGVkTGF5ZXJJbkNo
aWxkLm1vdmUoMCwgMSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQo
Y2hpbGQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBjbGlwcGVkTGF5
ZXJJbkNoaWxkKS5pc0VtcHR5KCkpOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgwLCAt
MSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3
IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgNTAwLCA1MDAp
LCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50
UmVjdCgwLCAwLCA1MDAsIDUwMCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhp
bmRMYXllcihjaGlsZC5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVy
U3VyZmFjZShjaGlsZC5nZXQoKSwgY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVz
aW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsK
KworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDB1LCBvY2NsdXNpb24ub2NjbHVz
aW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7
CisgICAgRVhQRUNUX0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCku
cmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDc1LCA1NSwgMSwgMSkpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDc1LCA1NSwgMSwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDc1LCA1NSwgMSwgMSkpKTsKKworICAgIC8vIFN1cmZh
Y2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIG9jY2x1c2lvbi5zdXJmYWNl
VW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAsIDEw
MCkpKTsKK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2Ns
dWRlZFJlZ2lvbldpdGhNdWx0aXBsZU9wYXF1ZUxheWVycykKK3sKKyAgICAvLyBUaGlzIGlzIHNp
bWlsYXIgdG8gdGhlIHByZXZpb3VzIHRlc3QgYnV0IG5vdyB3ZSBtYWtlIGEgZmV3IG9wYXF1ZSBs
YXllcnMgaW5zaWRlIG9mIHxjaGlsZHwgc28gdGhhdCB0aGUgb2NjbHVkZWQgcGFydHMgb2YgY2hp
bGQgYXJlIG5vdCBhIHNpbXBsZSByZWN0LgorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2Nj
bHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxh
eWVyMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgp
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVy
MiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsK
KyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxk
KGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQobGF5ZXIxKTsKKyAgICBjaGlsZC0+YWRkQ2hp
bGQobGF5ZXIyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOwor
ICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zv
cm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7
CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIxLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAsIDEwKSwgSW50U2l6ZSg1MDAsIDQ0MCksIHRydWUpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDQ1MCksIEludFNpemUoNTAwLCA2MCks
IHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygp
KSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBh
cmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJl
bnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVy
U3VyZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1
ZGVkQmVoaW5kTGF5ZXIobGF5ZXIyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVk
QmVoaW5kTGF5ZXIobGF5ZXIxLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzAsIDQwLCA3MCwgNjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5k
cygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNl
KCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwg
NjAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsK
KyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMCwgNDI5LCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAsIDcwKSkp
OworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJ
bnRSZWN0KDEwLCA0MzEsIDYwLCA3MCkpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcw
KSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDksIDQzMCwgMSwgNzAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDks
IDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQyOSwgNjAs
IDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0
KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDcwLCA0MzAs
IDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50
UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwg
NTAwLCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCks
IEludFJlY3QoMTAsIDQzMSwgNjAsIDcwKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2Nj
bHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKworICAg
IG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZC5nZXQoKSk7CisgICAgb2Nj
bHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZC5nZXQoKSwgY2hpbGQtPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNl
KHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzAsIDQwLCA3MCwgNjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5k
cygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNl
KCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3
MCwgNjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOwor
ICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgNDAsIDcw
LCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzAsIDM5LCA3MCwgNjApKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDAs
IDcwLCA2MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgNDAs
IDEsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwg
MzksIDcwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzAsIDM5LCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgx
MDAsIDQwLCAxLCA2MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMxLCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMzAsIDEwMCwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgNDEsIDcwLCA2MCkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMg
bm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsK
KworCisgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbiBmcm9tIHxs
YXllcjF8IGFuZCB8bGF5ZXIyfDoKKworICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwzMCAgVmlzaWJsZSByZWdpb24gb2YgfGxheWVy
MXw6IC8vLy8vCisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgVmlzaWJsZSByZWdp
b24gb2YgfGxheWVyMnw6IFxcXFxcCisgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKKyAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgfDEwICAgICAgICAg
ICAgICAgfAorICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rICB8
CisgICAgICAgfCAgfCAgfFxcXFxcXFxcXFxcXHwvL3wgICAgIDQyMCAgICAgIHwgIHwKKyAgICAg
ICB8ICB8ICB8XFxcXFxcXFxcXFxcfC8vfDYwICAgICAgICAgICAgfCAgfAorICAgICAgIHwgIHwg
IHxcXFxcXFxcXFxcXFx8Ly98ICAgICAgICAgICAgICB8ICB8CisgICAgICAgKy0tfC0tfC0tLS0t
LS0tLS0tLXwtLSsgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgMjB8MTB8ICAgICA3MCAgICAg
fCAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgIHwgIHwgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICB8ICB8CisgICAgICAgICAgfCAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgIHwgIHwKKyAgICAgICAgICB8ICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAg
fAorICAgICAgICAgIHwgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAg
ICAgICAgfCAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICB8
ICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfDEwfAorICAgICAgICAgIHwgICstLS0t
LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18LS0rCisgICAgICAgICAgfCAgICAgICAgICAgICAg
IHwgNDkwICAgICAgICAgICAgIHwKKyAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t
LS0tLS0tLS0tKworICAgICAgICAgICAgICAgIDYwICAgICAgICAgICAgICAgNDQwCisgICAgICov
Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhP
dmVybGFwcGluZ1NpYmxpbmdTdXJmYWNlcykKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhl
IHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCisgICAgVGVzdENDT2NjbHVzaW9uVHJh
Y2tlciBvY2NsdXNpb247CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50PiBsYXllcjEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBsYXllcjIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFy
ZW50LT5hZGRDaGlsZChjaGlsZDEpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQyKTsKKyAg
ICBjaGlsZDEtPmFkZENoaWxkKGxheWVyMSk7CisgICAgY2hpbGQyLT5hZGRDaGlsZChsYXllcjIp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisgICAgY2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS5yb3RhdGUo
OTApOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhj
aGlsZDEuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIxLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGNoaWxkMi5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDIwLCA0MCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllcjIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgY2hpbGQxLT5zZXRNYXNrc1RvQm91bmRz
KHRydWUpOworICAgIGNoaWxkMi0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJT
dXJmYWNlKGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1
ZGVkQmVoaW5kTGF5ZXIobGF5ZXIyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMjAsIDQwLCA4MCwgNjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJv
dW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNw
YWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgNDIw
LCA2MCwgODApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkp
OworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgp
LnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVk
ZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSkpOworICAgIEVYUEVDVF9F
UShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMSwgNDIw
LCA2MCwgODApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hp
bGQyLmdldCgpLCBJbnRSZWN0KDAsIDQxOSwgNjAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjAsIDYxLCA4
MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0
KCksIEludFJlY3QoMCwgNDIwLCA2MCwgODEpKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBv
Y2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMCwgNDIwLCA2MCwgODApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRD
b250ZW50UmVjdChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDIwLCA2MCwgODApKSk7CisKKyAg
ICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQyLmdldCgpKTsKKyAgICBv
Y2NsdXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMi5nZXQoKSwgY2hpbGQy
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0
UmVuZGVyU3VyZmFjZShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyMS5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDIwLCAzMCwgODAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3Bh
Y2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5T
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDAsIDQzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJv
dW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1
cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9u
Lm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA3MCkpKTsKKyAgICBF
WFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3Qo
LTEsIDQzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1
ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDMw
LCA3MSwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hp
bGQyLmdldCgpLCBJbnRSZWN0KDAsIDQzMCwgNzAsIDcxKSkpOworCisgICAgLy8gU3VyZmFjZSBp
cyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZiwgYnV0IHRoZSB8
Y2hpbGQxfCBzdXJmYWNlIHNob3VsZCBiZSBvY2NsdWRlZCBieSB0aGUgfGNoaWxkMnwgc3VyZmFj
ZS4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQzMCwgMTAsIDcwKSwgb2NjbHVzaW9u
LnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQz
MCwgNzAsIDcwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNo
aWxkMS5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShj
aGlsZDEuZ2V0KCksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubGVh
dmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAsIDgwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgyMCwgMzAsIDgwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVz
aW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKGZh
bHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAzMCwgODAs
IDcwKSkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkp
OworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwg
SW50UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCA0MCwgODAsIDYwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVj
dCgxOSwgNDAsIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAsIDM5LCA4MCwgNjApKSk7CisKKyAgICAvLyB8
Y2hpbGQxfCBhbmQgfGNoaWxkMnwgYm90aCBkcmF3IGludG8gcGFyZW50IHNvIHRoZXkgc2hvdWxk
IG5vdCBvY2NsdWRlIGl0LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDMwLCA4MCwg
NzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMjAsIDMwLCA4MCwgNzApKSk7CisKKworICAgIC8qIEp1c3RpZmljYXRpb24gZm9y
IHRoZSBhYm92ZSBvY2NsdXNpb246CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0t
LS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCAg
ICAzMCAgICAgICAgICAgICAgIHwgICAgICAgY2hpbGQxCisgICAgICB8ICAzMCsgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAgNDB8ICAgICAgICAgICAgICAgIHwg
ICAgIGNoaWxkMiAgICAgIHwKKyAgICAgIHwyMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKyB8CisgICAgICB8ICB8IHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwg
fAorICAgICAgfCAgfCB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IHwKKyAgICAg
IHwgIHwgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8CisgICAgICArLS18LXwt
LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHwgNTAwCisgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAor
ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAg
IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8ICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtKworICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICA1MDAKKyAgICAgKi8KK30KKwor
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFj
ZSkKK3sKKyAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJl
aW5nIHVzZWQuCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllcjEgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllcjIgPSBhZG9wdFJl
ZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZDEpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQyKTsKKyAgICBjaGlsZDEtPmFkZENoaWxkKGxheWVy
MSk7CisgICAgY2hpbGQyLT5hZGRDaGlsZChsYXllcjIpOworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggY2hpbGRUcmFuc2Zvcm07CisgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwg
MjUwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgIGNoaWxkVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIC8vIFRoZSBvd25pbmcgbGF5ZXJzIGhhdmUg
dmVyeSBkaWZmZXJlbnQgYm91bmRzIGZyb20gdGhlIHN1cmZhY2VzIHRoYXQgdGhleSBvd24uCisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGNoaWxkMS5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIxLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoLTEwLCAt
MTApLCBJbnRTaXplKDUxMCwgNTEwKSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhjaGlsZDIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgyMCwgNDApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyMi5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KC0x
MCwgLTEwKSwgSW50U2l6ZSg1MTAsIDUxMCksIHRydWUpOworCisgICAgLy8gTWFrZSB0aGVtIGJv
dGggcmVuZGVyIHN1cmZhY2VzCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZp
bHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIGNo
aWxkMS0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBjaGlsZDItPnNldEZpbHRlcnMoZmlsdGVy
cyk7CisKKyAgICBjaGlsZDEtPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIGNoaWxkMi0+
c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1
MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDItPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
Mi5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCAzMCwgODAsIDcwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDIwLCA3MCwgODApLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgx
dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJ
bnRSZWN0KC0xMCwgNDIwLCA3MCwgODApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNp
b24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMSwgNDIwLCA3MCwgODApKSk7Cisg
ICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRS
ZWN0KC0xMCwgNDE5LCA3MCwgODApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24u
b2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDIwLCA3MSwgODApKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0
KC0xMCwgNDIwLCA3MCwgODEpKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBi
eSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoLTEwLCA0MjAsIDcwLCA4MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJl
Y3QoMzAsIDI1MCwgMSwgMSkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihjaGlsZDIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1
cmZhY2UoY2hpbGQyLmdldCgpLCBjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVz
aW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMS0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIxLmdl
dCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0MzAsIDgwLCA3MCksIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisg
ICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJl
Y3QoLTEwLCA0MzAsIDgwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTExLCA0MzAsIDgwLCA3MCkpKTsKKyAgICBF
WFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3Qo
LTEwLCA0MjksIDgwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEwLCA0MzAsIDgxLCA3MCkpKTsKKyAgICBFWFBF
Q1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEw
LCA0MzAsIDgwLCA3MSkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRo
aW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYsIGJ1dCB0aGUgfGNoaWxkMXwgc3VyZmFjZSBzaG91
bGQgYmUgb2NjbHVkZWQgYnkgdGhlIHxjaGlsZDJ8IHN1cmZhY2UuCisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgtMTAsIDQzMCwgMTAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVk
Q29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA3MCwgODApKSk7Cisg
ICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgp
LCBJbnRSZWN0KDAsIDQzMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVz
aW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoLTEsIDQzMCwgNzAsIDgw
KSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGls
ZDEuZ2V0KCksIEludFJlY3QoMCwgNDI5LCA3MCwgODApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNl
LCBvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgxLCA0MzAs
IDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVk
ZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQzMSwgNzAsIDgwKSkpOworCisgICAgb2NjbHVz
aW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkMS5nZXQoKSk7CisgICAgb2NjbHVzaW9u
LmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDEuZ2V0KCksIGNoaWxkMS0+cmVuZGVy
U3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwg
MjAsIDgwLCA4MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkp
OworICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMjAsIDgwLCA4
MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAg
RVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMo
KS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDIwLCAyMCwgODAsIDgwKSkpOworCisgICAgRVhQRUNUX0VRKHRy
dWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDIwLCA3MCwg
ODApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDI5LCAyMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2Nj
bHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMTksIDcwLCA4MCkpKTsK
KworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDIwLCAzMCwgODAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgxOSwgMzAsIDgwLCA3MCkpKTsKKyAgICBF
WFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MjAsIDI5LCA4MCwgNzApKSk7CisKKyAgICAvLyB8Y2hpbGQxfCBhbmQgfGNoaWxkMnwgYm90aCBk
cmF3IGludG8gcGFyZW50IHNvIHRoZXkgc2hvdWxkIG5vdCBvY2NsdWRlIGl0LgorICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2NsdXNpb24uc3VyZmFjZVVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAsIDIwLCA4MCwgODApKSk7
CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKHBhcmVudC5n
ZXQoKSwgSW50UmVjdCg1MCwgNTAsIDEsIDEpKSk7CisKKworICAgIC8qIEp1c3RpZmljYXRpb24g
Zm9yIHRoZSBhYm92ZSBvY2NsdXNpb246CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgIDIwICAgICAgICAgICAgICAgfCAgICAgICBs
YXllcjEKKyAgICAgIHwgIDMwKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisg
IDEwMCB8ICAzMHwgICAgICAgICAgICAgICAgfCAgICAgbGF5ZXIyICAgICAgfAorICAgICAgfDIw
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKKyAgICAgIHwgIHwgfCAgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8CisgICAgICB8ICB8IHwgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgIHwgfAorICAgICAgfCAgfCB8ICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICB8IHwKKyAgICAgICstLXwtfC0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAg
ICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCA1
MDAKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAg
ICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IHwKKyAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
fC0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAg
ICAgICAgICAgIDUwMAorICAgICAqLworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3Qs
IG9jY2x1c2lvbkludGVyYWN0aW9uV2l0aEZpbHRlcnMpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0
aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlk
ZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGJsdXJMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IG9wYWNpdHlMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IG9wYXF1ZUxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OworICAgIHBhcmVudC0+YWRkQ2hpbGQoYmx1ckxheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxk
KG9wYWNpdHlMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChvcGFxdWVMYXllcik7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9y
bS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGxheWVyVHJhbnNmb3JtLnJvdGF0ZSg5MCk7Cisg
ICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAs
IDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGJsdXJMYXll
ci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKG9wYXF1ZUxheWVyLmdldCgpLCBsYXllclRyYW5zZm9y
bSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwg
SW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcob3BhY2l0eUxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIHRy
dWUpOworCisgICAgeworICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAg
IGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUo
TGVuZ3RoKDEwLCBXZWJDb3JlOjpQZXJjZW50KSwgRmlsdGVyT3BlcmF0aW9uOjpCTFVSKSk7Cisg
ICAgICAgIGJsdXJMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVyYXRp
b25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgICAgIG9wYXF1ZUxheWVy
LT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIH0KKworICAgIHsKKyAgICAgICAgRmlsdGVyT3Bl
cmF0aW9ucyBmaWx0ZXJzOworICAgICAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3Bl
cmF0aW9uOjpPUEFDSVRZKSk7CisgICAgICAgIG9wYWNpdHlMYXllci0+c2V0RmlsdGVycyhmaWx0
ZXJzKTsKKyAgICB9CisKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAg
IHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAv
LyBPcGFjaXR5IGxheWVyIHdvbid0IGNvbnRyaWJ1dGUgdG8gb2NjbHVzaW9uLgorICAgIG9jY2x1
c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2Uob3BhY2l0eUxheWVyLT5yZW5kZXJTdXJmYWNl
KCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihvcGFjaXR5TGF5ZXIu
Z2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2Uob3BhY2l0
eUxheWVyLmdldCgpLCBvcGFjaXR5TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmlzRW1wdHkoKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmlzRW1w
dHkoKSk7CisKKyAgICAvLyBBbmQgaGFzIG5vdGhpbmcgdG8gY29udHJpYnV0ZSB0byBpdHMgcGFy
ZW50IHN1cmZhY2UuCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVz
aW9uSW5TY3JlZW5TcGFjZSgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBPcGFxdWUg
bGF5ZXIgd2lsbCBjb250cmlidXRlIHRvIG9jY2x1c2lvbi4KKyAgICBvY2NsdXNpb24uZW50ZXJU
YXJnZXRSZW5kZXJTdXJmYWNlKG9wYXF1ZUxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9j
Y2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihvcGFxdWVMYXllci5nZXQoKSk7CisgICAg
b2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShvcGFxdWVMYXllci5nZXQoKSwg
b3BhcXVlTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5i
b3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5T
cGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQz
MCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygp
KTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAvLyBBbmQgaXQgZ2V0cyB0cmFuc2xhdGVkIHRvIHRo
ZSBwYXJlbnQgc3VyZmFjZS4KKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzAsIDMwLCA3MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5k
cygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNl
KCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3
MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOwor
ICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKworICAgIC8vIFRoZSBibHVyIGxheWVyIG5lZWRzIHRvIHRocm93IGF3
YXkgYW55IG9jY2x1c2lvbiBmcm9tIG91dHNpZGUgaXRzIHN1YnRyZWUuCisgICAgb2NjbHVzaW9u
LmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShibHVyTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2Uo
KS5pc0VtcHR5KCkpOworCisgICAgLy8gQW5kIGl0IHdvbid0IGNvbnRyaWJ1dGUgdG8gb2NjbHVz
aW9uLgorICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihibHVyTGF5ZXIuZ2V0
KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoYmx1ckxheWVy
LmdldCgpLCBibHVyTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5pc0VtcHR5KCkpOworCisg
ICAgLy8gQnV0IHRoZSBvcGFxdWUgbGF5ZXIncyBvY2NsdXNpb24gaXMgcHJlc2VydmVkIG9uIHRo
ZSBwYXJlbnQuCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwg
NzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNp
emUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128120</attachid>
            <date>2012-02-21 19:58:01 -0800</date>
            <delta_ts>2012-02-22 07:34:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78549-20120221225800.patch</filename>
            <type>text/plain</type>
            <size>102953</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQyMjlkNDgzOWM4YTUy
ZTk1Mzc1MTY4NThlZDk3ZjdhY2ZkOTU5NC4uOWU2MGVlYmYwNWJhOTMzMzhjNWQyZjQ4NTU4ZTdl
OTAwYzg4ODJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAyLTIxICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gTmV3
IENDT2NjbHVzaW9uVHJhY2tlciBjbGFzcyB3aXRoIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
IHRlbXBsYXRlIGNsYXNzIHRoYXQgaXMgYWJsZSB0byB0cmFjayBvY2NsdXNpb24KKyAgICAgICAg
b2YgbGF5ZXJzIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGxheWVyIHRyZWUgZnJvbSBmcm9udC10by1i
YWNrLCB3aXRoIHR5cGVkZWZlZAorICAgICAgICB2ZXJzaW9ucyBmb3IgdGhlIG1haW4gYW5kIGlt
cGwgdGhyZWFkcy4KKworICAgICAgICBBdCBlYWNoIHN0ZXAgb2YgdGhlIGZyb250LXRvLWJhY2sg
dHJhdmVyc2FsLCB0aGUgY2xhc3Mgc2hvdWxkIGJlIG5vdGlmaWVkIG9mCisgICAgICAgIGNoYW5n
ZXMgdG8gdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCwgYW5kIHdoZW4gZG9uZSB3b3JraW5nIHdp
dGggYSBsYXllciwgdGhlCisgICAgICAgIGxheWVyIGlzIGFkZGVkIHRoZSB0cmFja2VkIG9jY2x1
c2lvbi4KKworICAgICAgICBUaGUgY2xhc3MgcHJvdmlkZXMgdGVzdHMgZm9yIGNoZWNraW5nIGlm
IGEgcmVjdCBpbiBjb250ZW50IHNwYWNlCisgICAgICAgIGZvciBhIGxheWVyL3N1cmZhY2UgaXMg
b2NjbHVkZWQgYnkgb3RoZXJzIGluIGZyb250IG9mIGl0LgorCisgICAgICAgIFVuaXQgdGVzdHM6
IENDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2Vy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6ZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6ZmluaXNoZWRUYXJn
ZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVN1cmZhY2VPcGFx
dWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXB1dGVPY2NsdXNpb25CZWhpbmRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjo6Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRlc3RD
b250ZW50UmVjdE9jY2x1ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6b2NjbHVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlT2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmVj
dFN1YnRyYWN0UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVVbm9jY2x1ZGVkQ29u
dGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6Q0NPY2NsdXNpb25UcmFj
a2VyQmFzZSk6CisgICAgICAgIChTdGFja09iamVjdCk6CisKIDIwMTItMDItMjEgIEphbWVzIFJv
Ymluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb2RlOjppc0NvbnRlbnRF
ZGl0YWJsZSBzaG91bGQgb25seSB1cGRhdGUgc3R5bGVzLCBub3QgbGF5b3V0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDc4YWY0ZjY5YWFiNTM0NGZiZTY5MjA1NjBlNzRkYzc1N2YwNTM3
MGEuLjk0NzViOWMxZGQ0NWYzNTZkMmM1YTlhNTNjYTc4NmUyNTZmZjU5OGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjggQEAKIDIwMTItMDItMjEgIERhbmEgSmFuc2Vu
cyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW0Nocm9taXVtXSBOZXcgQ0NPY2Ns
dXNpb25UcmFja2VyIGNsYXNzIHdpdGggdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IHRlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyk6Cisg
ICAgICAgIChMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudDo6TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ6OmRyYXdzQ29udGVudCk6CisgICAgICAgIChUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNr
ZXI6Om9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2Nj
bHVzaW9uVHJhY2tlcjo6b2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OnNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6c2V0T2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCisyMDEyLTAyLTIxICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0g
UGFpbnRpbmcgYSBsYXllciBjbGVhcnMgb3BhcXVlIHJlY3QgaW4gdW50b3VjaGVkIHRpbGVzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTE1NwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggNWY1N2M0Y2I4MmUwNzJmZDJkMTMxYmZjYzEzZTg2MDg5MmU5NjE2
Ny4uYjQwMmUzYTcxZjFlMmRhZjQwZTA2MDgxNTlkM2I5YmJhM2M4MTAwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzI3NSw2ICszMjc1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NPY2NsdXNpb25UcmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQYWdlU2NhbGVBbmltYXRpb24uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzU2MTFh
YzI3YTZhZWM0YTdmYmQ2OTQwMjNkMzQzZjUyYmE1ZDIzYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJh
Y2tlci5jcHAKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ09jY2x1
c2lvblRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmVudGVyVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFyZ2V0KQoreworICAgIGlmICghbV9z
dGFjay5pc0VtcHR5KCkgJiYgbV9zdGFjay5sYXN0KCkuc3VyZmFjZSA9PSBuZXdUYXJnZXQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBvbGRUYXJnZXQg
PSBtX3N0YWNrLmlzRW1wdHkoKSA/IDAgOiBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlOworICAgIGNv
bnN0IFJlbmRlclN1cmZhY2VUeXBlKiBvbGRBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyA9ICFvbGRU
YXJnZXQgPyAwIDogb2xkVGFyZ2V0LT5uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKTsK
KyAgICBjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMg
PSBuZXdUYXJnZXQtPm5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscygpOworCisgICAgbV9z
dGFjay5hcHBlbmQoU3RhY2tPYmplY3QoKSk7CisgICAgbV9zdGFjay5sYXN0KCkuc3VyZmFjZSA9
IG5ld1RhcmdldDsKKworICAgIC8vIFdlIGNvcHkgdGhlIHNjcmVlbiBvY2NsdXNpb24gaW50byB0
aGUgbmV3IFJlbmRlclN1cmZhY2Ugc3VidHJlZSwgYnV0IHdlIG5ldmVyIGNvcHkgaW4gdGhlCisg
ICAgLy8gdGFyZ2V0IG9jY2x1c2lvbiwgc2luY2Ugd2UgYXJlIGxvb2tpbmcgYXQgYSBuZXcgUmVu
ZGVyU3VyZmFjZSB0YXJnZXQuCisKKyAgICAvLyBJZiB3ZSBhcmUgZW50ZXJpbmcgYSBzdWJ0cmVl
IHRoYXQgaXMgZ29pbmcgdG8gbW92ZSBwaXhlbHMgYXJvdW5kLCB0aGVuIHRoZSBvY2NsdXNpb24g
d2UndmUgY29tcHV0ZWQKKyAgICAvLyBzbyBmYXIgd29uJ3QgYXBwbHkgdG8gdGhlIHBpeGVscyB3
ZSdyZSBkcmF3aW5nIGhlcmUgaW4gdGhlIHNhbWUgd2F5LiBXZSBkaXNjYXJkIHRoZSBvY2NsdXNp
b24gdGh1cworICAgIC8vIGZhciB0byBiZSBzYWZlLCBhbmQgZW5zdXJlIHdlIGRvbid0IGN1bGwg
YW55IHBpeGVscyB0aGF0IGFyZSBtb3ZlZCBzdWNoIHRoYXQgdGhleSBiZWNvbWUgdmlzaWJsZS4K
KyAgICBib29sIGVudGVyaW5nU3VidHJlZVRoYXRNb3Zlc1BpeGVscyA9IG5ld0FuY2VzdG9yVGhh
dE1vdmVzUGl4ZWxzICYmIG5ld0FuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzICE9IG9sZEFuY2VzdG9y
VGhhdE1vdmVzUGl4ZWxzOworCisgICAgYm9vbCBjb3B5U2NyZWVuT2NjbHVzaW9uRm9yd2FyZCA9
IG1fc3RhY2suc2l6ZSgpID4gMSAmJiAhZW50ZXJpbmdTdWJ0cmVlVGhhdE1vdmVzUGl4ZWxzOwor
ICAgIGlmIChjb3B5U2NyZWVuT2NjbHVzaW9uRm9yd2FyZCkgeworICAgICAgICBpbnQgbGFzdElu
ZGV4ID0gbV9zdGFjay5zaXplKCkgLSAxOworICAgICAgICBtX3N0YWNrW2xhc3RJbmRleF0ub2Nj
bHVzaW9uSW5TY3JlZW4gPSBtX3N0YWNrW2xhc3RJbmRleCAtIDFdLm9jY2x1c2lvbkluU2NyZWVu
OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZT4KK3ZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IExheWVy
VHlwZSogb3duaW5nTGF5ZXIsIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBmaW5pc2hlZFRhcmdl
dCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBvd25pbmdMYXllciBwYXJhbWV0ZXIgd2hl
biB3ZSBjYW4gZ2V0IGFsbCB0aGUgaW5mbyBmcm9tIHRoZSBzdXJmYWNlLgorICAgIEFTU0VSVChv
d25pbmdMYXllci0+cmVuZGVyU3VyZmFjZSgpID09IGZpbmlzaGVkVGFyZ2V0KTsKKworICAgIC8v
IE1ha2Ugc3VyZSB3ZSBrbm93IGFib3V0IHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICBlbnRlclRh
cmdldFJlbmRlclN1cmZhY2UoZmluaXNoZWRUYXJnZXQpOworCisgICAgaWYgKG93bmluZ0xheWVy
LT5tYXNrTGF5ZXIoKSB8fCBmaW5pc2hlZFRhcmdldC0+ZHJhd09wYWNpdHkoKSA8IDEgfHwgZmlu
aXNoZWRUYXJnZXQtPmZpbHRlcnMoKS5oYXNGaWx0ZXJUaGF0QWZmZWN0c09wYWNpdHkoKSkgewor
ICAgICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IFJlZ2lvbigpOworICAg
ICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCA9IFJlZ2lvbigpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitzdGF0aWMgaW5saW5l
IFJlZ2lvbiB0cmFuc2Zvcm1TdXJmYWNlT3BhcXVlUmVnaW9uKGNvbnN0IFJlbmRlclN1cmZhY2VU
eXBlKiBzdXJmYWNlLCBjb25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICAvLyBWZXJpZnkgdGhhdCByZWN0cyB3aXRoaW4gdGhl
IHxzdXJmYWNlfCB3aWxsIHJlbWFpbiByZWN0cyBpbiBpdHMgdGFyZ2V0IHN1cmZhY2UgYWZ0ZXIg
YXBwbHlpbmcgfHRyYW5zZm9ybXwuIElmIHRoaXMgaXMgdHJ1ZSwgdGhlbgorICAgIC8vIGFwcGx5
IHx0cmFuc2Zvcm18IHRvIGVhY2ggcmVjdCB3aXRoaW4gfHJlZ2lvbnwgaW4gb3JkZXIgdG8gdHJh
bnNmb3JtIHRoZSBlbnRpcmUgUmVnaW9uLgorCisgICAgSW50UmVjdCBib3VuZHMgPSByZWdpb24u
Ym91bmRzKCk7CisgICAgRmxvYXRSZWN0IGNlbnRlcmVkQm91bmRzKC1ib3VuZHMud2lkdGgoKSAv
IDIuMCwgLWJvdW5kcy5oZWlnaHQoKSAvIDIuMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWln
aHQoKSk7CisgICAgRmxvYXRRdWFkIHRyYW5zZm9ybWVkQm91bmRzUXVhZCA9IHRyYW5zZm9ybS5t
YXBRdWFkKEZsb2F0UXVhZChjZW50ZXJlZEJvdW5kcykpOworICAgIGlmICghdHJhbnNmb3JtZWRC
b3VuZHNRdWFkLmlzUmVjdGlsaW5lYXIoKSkKKyAgICAgICAgcmV0dXJuIFJlZ2lvbigpOworCisg
ICAgUmVnaW9uIHRyYW5zZm9ybWVkUmVnaW9uOworCisgICAgSW50UmVjdCBzdXJmYWNlQm91bmRz
ID0gc3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBy
ZWdpb24ucmVjdHMoKTsKKyAgICBWZWN0b3I8SW50UmVjdD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlY3RzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBp
ID0gcmVjdHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgeworICAgICAgICBGbG9hdFJlY3QgY2Vu
dGVyZWRPcmlnaW5SZWN0KC1pLT53aWR0aCgpIC8gMi4wICsgaS0+eCgpIC0gc3VyZmFjZUJvdW5k
cy54KCksIC1pLT5oZWlnaHQoKSAvIDIuMCArIGktPnkoKSAtIHN1cmZhY2VCb3VuZHMueSgpLCBp
LT53aWR0aCgpLCBpLT5oZWlnaHQoKSk7CisgICAgICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1lZFJl
Y3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoY2VudGVyZWRPcmlnaW5SZWN0KSk7Cisg
ICAgICAgIHRyYW5zZm9ybWVkUmVnaW9uLnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0cmFuc2Zvcm1l
ZFJlY3QpKTsKKyAgICB9CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVnaW9uOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9p
ZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojps
ZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFy
Z2V0KQoreworICAgIGludCBsYXN0SW5kZXggPSBtX3N0YWNrLnNpemUoKSAtIDE7CisgICAgYm9v
bCBzdXJmYWNlV2lsbEJlQXRUb3BBZnRlclBvcCA9IG1fc3RhY2suc2l6ZSgpID4gMSAmJiBtX3N0
YWNrW2xhc3RJbmRleCAtIDFdLnN1cmZhY2UgPT0gbmV3VGFyZ2V0OworCisgICAgLy8gV2UgbWVy
Z2UgdGhlIHNjcmVlbiBvY2NsdXNpb24gZnJvbSB0aGUgY3VycmVudCBSZW5kZXJTdXJmYWNlIHN1
YnRyZWUgb3V0IHRvIGl0cyBwYXJlbnQgdGFyZ2V0IFJlbmRlclN1cmZhY2UuCisgICAgLy8gVGhl
IHRhcmdldCBvY2NsdXNpb24gY2FuIGJlIG1lcmdlZCBvdXQgYXMgd2VsbCBidXQgbmVlZHMgdG8g
YmUgdHJhbnNmb3JtZWQgdG8gdGhlIG5ldyB0YXJnZXQuCisKKyAgICBjb25zdCBSZW5kZXJTdXJm
YWNlVHlwZSogb2xkVGFyZ2V0ID0gbV9zdGFja1tsYXN0SW5kZXhdLnN1cmZhY2U7CisgICAgUmVn
aW9uIG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0ID0gdHJhbnNmb3JtU3VyZmFjZU9wYXF1
ZVJlZ2lvbjxSZW5kZXJTdXJmYWNlVHlwZT4ob2xkVGFyZ2V0LCBtX3N0YWNrW2xhc3RJbmRleF0u
b2NjbHVzaW9uSW5UYXJnZXQsIG9sZFRhcmdldC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIGlm
IChzdXJmYWNlV2lsbEJlQXRUb3BBZnRlclBvcCkgeworICAgICAgICAvLyBNZXJnZSB0aGUgdG9w
IG9mIHRoZSBzdGFjayBkb3duLgorCisgICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2Nj
bHVzaW9uSW5TY3JlZW4udW5pdGUobV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluU2NyZWVu
KTsKKyAgICAgICAgbV9zdGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblRhcmdldC51bml0
ZShvbGRUYXJnZXRPY2NsdXNpb25Jbk5ld1RhcmdldCk7CisgICAgICAgIG1fc3RhY2sucmVtb3Zl
TGFzdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlcGxhY2UgdGhlIHRvcCBvZiB0aGUg
c3RhY2sgd2l0aCB0aGUgbmV3IHB1c2hlZCBzdXJmYWNlLiBDb3B5IHRoZSBvY2NsdWRlZCBzY3Jl
ZW4gcmVnaW9uIHRvIHRoZSB0b3AuCisgICAgICAgIG1fc3RhY2subGFzdCgpLnN1cmZhY2UgPSBu
ZXdUYXJnZXQ7CisgICAgICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0ID0gb2xk
VGFyZ2V0T2NjbHVzaW9uSW5OZXdUYXJnZXQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMYXllclR5cGU+CitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRU
b1NjcmVlblNwYWNlVHJhbnNmb3JtKGNvbnN0IExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgSW50
U2l6ZSBib3VuZHNJbkxheWVyU3BhY2UgPSBsYXllci0+Ym91bmRzKCk7CisgICAgSW50U2l6ZSBi
b3VuZHNJbkNvbnRlbnRTcGFjZSA9IGxheWVyLT5jb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KTsKKworICAgIGlmIChib3VuZHNJbkNvbnRlbnRTcGFjZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB0cmFuc2Zvcm07CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5
ZXIgc3BhY2UKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFj
ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0
aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5o
ZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0
KCkpKTsKKworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFy
Z2V0U3VyZmFjZVRyYW5zZm9ybShjb25zdCBMYXllclR5cGUqIGxheWVyKQoreworICAgIEludFNp
emUgYm91bmRzSW5MYXllclNwYWNlID0gbGF5ZXItPmJvdW5kcygpOworICAgIEludFNpemUgYm91
bmRzSW5Db250ZW50U3BhY2UgPSBsYXllci0+Y29udGVudEJvdW5kcygpOworCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKworICAg
IGlmIChib3VuZHNJbkNvbnRlbnRTcGFjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cmFu
c2Zvcm07CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5ZXIgc3BhY2UK
KyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFjZS53aWR0aCgp
IC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0aCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5oZWlnaHQoKSAv
IHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0KCkpKTsKKwor
ICAgIC8vIFRoZSBkcmF3IHRyYW5zZm9ybSBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgaW4gdGhl
IG1pZGRsZSBvZiB0aGUgbGF5ZXIuCisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzSW5D
b250ZW50U3BhY2Uud2lkdGgoKSAvIDIuMCwgLWJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgp
IC8gMi4wKTsKKworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgUmVnaW9uIGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcihjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKQoreworICAgIFJlZ2lvbiBvcGFxdWVSZWdpb247CisKKyAgICBGbG9hdFF1YWQg
dW5vY2NsdWRlZFF1YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQobGF5ZXItPnZpc2li
bGVMYXllclJlY3QoKSkpOworICAgIGJvb2wgaXNQYWludGVkQXhpc0FsaWduZWQgPSB1bm9jY2x1
ZGVkUXVhZC5pc1JlY3RpbGluZWFyKCk7CisgICAgaWYgKCFpc1BhaW50ZWRBeGlzQWxpZ25lZCkK
KyAgICAgICAgcmV0dXJuIG9wYXF1ZVJlZ2lvbjsKKworICAgIGlmIChsYXllci0+b3BhcXVlKCkp
CisgICAgICAgIG9wYXF1ZVJlZ2lvbiA9IGVuY2xvc2VkSW50UmVjdCh1bm9jY2x1ZGVkUXVhZC5i
b3VuZGluZ0JveCgpKTsKKyAgICAvLyBGSVhNRTogQ2FwdHVyZSBvcGFxdWUgcGFpbnRzOiBlbHNl
IG9wYXF1ZVJlZ2lvbiA9IGxheWVyLT5vcGFxdWVDb250ZW50c1JlZ2lvbih0cmFuc2Zvcm0pOwor
ICAgIHJldHVybiBvcGFxdWVSZWdpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGNvbnN0IExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgQVNTRVJUKCFtX3N0YWNrLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5s
YXN0KCkuc3VyZmFjZSk7CisKKyAgICBpZiAobGF5ZXItPmRyYXdPcGFjaXR5KCkgIT0gMSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVu
U3BhY2UgPSBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTdXJmYWNlID0gY29udGVu
dFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKKworICAgIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuLnVuaXRlKGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9TY3JlZW5TcGFjZSkpOworICAgIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LnVuaXRlKGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9UYXJnZXRTdXJmYWNlKSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5z
Zm9ybSwgY29uc3QgUmVnaW9uJiBvY2NsdXNpb24pCit7CisgICAgRmxvYXRRdWFkIHRyYW5zZm9y
bWVkUXVhZCA9IGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChjb250ZW50
UmVjdCkpOworICAgIHJldHVybiBvY2NsdXNpb24uY29udGFpbnModHJhbnNmb3JtZWRRdWFkLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpvY2NsdWRlZChjb25zdCBMYXllclR5cGUq
IGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICBpZiAobV9z
dGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOworCisg
ICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3Jl
ZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5TY3JlZW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGVzdENvbnRlbnRS
ZWN0T2NjbHVkZWQoY29udGVudFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08
TGF5ZXJUeXBlPihsYXllciksIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0KSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorYm9vbCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpzdXJmYWNlT2Nj
bHVkZWQoY29uc3QgTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRl
bnRSZWN0KSBjb25zdAoreworICAgIC8vIEEgc3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgbGF5
ZXJzIGRyYXdpbmcgaW50byBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gdXNlIG9jY2x1c2lvbiBmcm9t
IG9uZSBzcG90IGRvd24gb24gdGhlIHN0YWNrLgorICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3Qo
KS5zdXJmYWNlKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VDb250ZW50VG9T
Y3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5
ZXIpOworCisgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3Rh
Y2suc2l6ZSgpLTJdOworICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChzdXJmYWNlQ29u
dGVudFJlY3QsIHN1cmZhY2VDb250ZW50VG9TY3JlZW5TcGFjZSwgc2Vjb25kTGFzdC5vY2NsdXNp
b25JblNjcmVlbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gRGV0ZXJtaW5lcyB3aGF0IHBvcnRpb24gb2YgcmVjdCwgaWYgYW55LCBpcyB1bm9jY2x1
ZGVkIChub3Qgb2NjbHVkZWQgYnkgcmVnaW9uKS4gSWYKKy8vIHRoZSByZXN1bHRpbmcgdW5vY2Ns
dWRlZCByZWdpb24gaXMgbm90IHJlY3Rhbmd1bGFyLCB3ZSByZXR1cm4gYSByZWN0IGNvbnRhaW5p
bmcgaXQuCitzdGF0aWMgaW5saW5lIEludFJlY3QgcmVjdFN1YnRyYWN0UmVnaW9uKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQoreworICAgIFJlZ2lvbiByZWN0UmVn
aW9uKHJlY3QpOworICAgIFJlZ2lvbiBpbnRlcnNlY3RSZWdpb24oaW50ZXJzZWN0KHJlZ2lvbiwg
cmVjdFJlZ2lvbikpOworCisgICAgaWYgKGludGVyc2VjdFJlZ2lvbi5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiByZWN0OworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChpbnRlcnNlY3RSZWdp
b24pOworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IHJlY3RSZWdpb24uYm91bmRzKCk7CisgICAg
cmV0dXJuIGJvdW5kc1JlY3Q7Cit9CisKK3N0YXRpYyBJbnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVk
Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9u
KQoreworICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFF1YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zv
cm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3QpKTsKKyAgICBpZiAoIXRyYW5zZm9ybWVk
UXVhZC5pc1JlY3RpbGluZWFyKCkpCisgICAgICAgIHJldHVybiBjb250ZW50UmVjdDsKKyAgICAv
LyBUYWtlIHRoZSBlbmNsb3NpbmdJbnRSZWN0IGF0IGVhY2ggc3RlcCBoZXJlLCBhcyB3ZSB3YW50
IHRvIGNvbnRhaW4gYW55IHVub2NjbHVkZWQgcGFydGlhbCBwaXhlbHMgaW4gdGhlIHJlc3VsdGlu
ZyBJbnRSZWN0LgorICAgIEludFJlY3Qgc2hydW5rUmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihl
bmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUXVhZC5ib3VuZGluZ0JveCgpKSwgb2NjbHVzaW9u
KTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjb250ZW50
U3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QoRmxvYXRSZWN0KHNocnVua1JlY3QpKSk7
CisgICAgLy8gVGhlIHVzZSBvZiBlbmNsb3NpbmdJbnRSZWN0LCB3aXRoIGZsb2F0aW5nIHBvaW50
IHJvdW5kaW5nLCBjYW4gZ2l2ZSB1cyBhIHJlc3VsdCB0aGF0IGlzIG5vdCBhIHN1Yi1yZWN0IG9m
IGNvbnRlbnRSZWN0LCBidXQgb3VyCisgICAgLy8gcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBhIHN1
Yi1yZWN0LgorICAgIHJldHVybiBpbnRlcnNlY3Rpb24odW5vY2NsdWRlZFJlY3QsIGNvbnRlbnRS
ZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJT
dXJmYWNlVHlwZT4KK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSog
bGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAoreworICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRSZWN0OworCisgICAgLy8gV2Ug
d2FudCB0byByZXR1cm4gYSByZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSB2aXNpYmxlIHBhcnRz
IG9mIHxjb250ZW50UmVjdHwgaW4gYm90aCBzY3JlZW4gc3BhY2UgYW5kIGluIHRoZSB0YXJnZXQg
c3VyZmFjZS4KKyAgICAvLyBTbyB3ZSBmaW5kIHRoZSB2aXNpYmxlIHBhcnRzIG9mIHxjb250ZW50
UmVjdHwgaW4gZWFjaCBzcGFjZSwgYW5kIHRha2UgdGhlIGludGVyc2VjdGlvbi4KKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlID0gY29udGVudFRvU2NyZWVu
U3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zv
cm08TGF5ZXJUeXBlPihsYXllcik7CisKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9
IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVl
blNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7CisgICAgSW50UmVjdCB1
bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRS
ZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRh
cmdldCk7CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRJblNjcmVlbiwgdW5v
Y2NsdWRlZEluVGFyZ2V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVj
dChjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJl
Y3QpIGNvbnN0Cit7CisgICAgLy8gQSBzdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBsYXllcnMg
ZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZyb20gb25l
IHNwb3QgZG93biBvbiB0aGUgc3RhY2suCisgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKKyAg
ICAgICAgcmV0dXJuIHN1cmZhY2VDb250ZW50UmVjdDsKKworICAgIEFTU0VSVChsYXllci0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0
YWNrLmxhc3QoKS5zdXJmYWNlKTsKKworICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgcmVjdCB0
aGF0IGNvbnRhaW5zIGFsbCB0aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGJv
dGggc2NyZWVuIHNwYWNlIGFuZCBpbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8gU28gd2Ug
ZmluZCB0aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGVhY2ggc3BhY2UsIGFu
ZCB0YWtlIHRoZSBpbnRlcnNlY3Rpb24uCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250
ZW50VG9TY3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlw
ZT4obGF5ZXIpOworCisgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNr
W21fc3RhY2suc2l6ZSgpLTJdOworICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29t
cHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ29udGVudFJlY3QsIGNvbnRlbnRUb1Nj
cmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKTsKKworICAgIHJldHVybiB1
bm9jY2x1ZGVkSW5TY3JlZW47Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlw
ZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Citjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmN1cnJlbnRPY2NsdXNpb25JblNj
cmVlblNwYWNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICByZXR1cm4gbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW47Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Citjb25zdCBS
ZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlw
ZT46OmN1cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdAoreworICAgIEFTU0VS
VCghbV9zdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiBtX3N0YWNrLmxhc3QoKS5vY2NsdXNp
b25JblRhcmdldDsKK30KKworCisvLyBEZWNsYXJlIHRoZSBwb3NzaWJsZSBmdW5jdGlvbnMgaGVy
ZSBmb3IgdGhlIGxpbmtlci4KK3RlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjplbnRlclRhcmdldFJlbmRlclN1
cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpOwordGVtcGxhdGUg
dm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT46OmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBMYXllckNocm9taXVt
KiBvd25pbmdMYXllciwgY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBmaW5pc2hlZFRhcmdl
dCk7Cit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPjo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoY29uc3Qg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpOwordGVtcGxhdGUgdm9pZCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46Om1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGNvbnN0IExheWVyQ2hyb21pdW0qKTsKK3RlbXBsYXRlIGJv
b2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+OjpvY2NsdWRlZChjb25zdCBMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OnN1cmZhY2VPY2NsdWRlZChjb25z
dCBMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25z
dDsKK3RlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVt
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5
ZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKK3RlbXBsYXRl
IEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0+OjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyQ2hy
b21pdW0qLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwordGVtcGxh
dGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bT46OmN1cnJlbnRPY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29u
c3Q7Cit0ZW1wbGF0ZSBjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6Y3VycmVudE9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpIGNvbnN0OworCit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShj
b25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7Cit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVz
aW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmZpbmlzaGVkVGFy
Z2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIsIGNvbnN0IEND
UmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJnZXQpOwordGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7Cit0ZW1wbGF0
ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNvbnN0IENDTGF5ZXJJbXBsKik7Cit0ZW1wbGF0
ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46Om9jY2x1ZGVkKGNvbnN0IENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJ
bXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpzdXJmYWNlT2NjbHVkZWQoY29uc3QgQ0NMYXllckltcGwq
LCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwordGVtcGxhdGUgSW50
UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+
Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCkgY29uc3Q7Cit0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29u
dGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVu
dFJlY3QpIGNvbnN0OwordGVtcGxhdGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJC
YXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5TY3Jl
ZW5TcGFjZSgpIGNvbnN0OwordGVtcGxhdGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKCkgY29uc3Q7CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDFjODMzZTFhOWJhNGVlZGU5YWJkZjQzMDIxZTdlZDdiNGM0
ZmYxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ09jY2x1c2lvblRyYWNrZXJfaAorI2RlZmluZSBDQ09jY2x1c2lvblRyYWNr
ZXJfaAorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2U7CitjbGFzcyBMYXllckNocm9t
aXVtOworY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOworCisvLyBUaGlzIGNsYXNzIGlzIHVz
ZWQgdG8gdHJhY2sgb2NjbHVzaW9uIG9mIGxheWVycyB3aGlsZSB0cmF2ZXJzaW5nIHRoZW0gaW4g
YSBmcm9udC10by1iYWNrIG9yZGVyLiBBcyBlYWNoIGxheWVyIGlzIHZpc2l0ZWQsIG9uZSBvZiB0
aGUKKy8vIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBpcyBjYWxsZWQgdG8gbm90aWZ5IGl0IGFib3V0
IHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLgorLy8gVGhlbiwgb2NjbHVzaW9uIGluIHRoZSBj
b250ZW50IHNwYWNlIG9mIHRoZSBjdXJyZW50IGxheWVyIG1heSBiZSBxdWVyaWVkLCB2aWEgbWV0
aG9kcyBzdWNoIGFzIG9jY2x1ZGVkKCkgYW5kIHVub2NjbHVkZWRDb250ZW50UmVjdCgpLgorLy8g
SWYgdGhlIGN1cnJlbnQgbGF5ZXIgb3ducyBhIFJlbmRlclN1cmZhY2UsIHRoZW4gb2NjbHVzaW9u
IG9uIHRoYXQgUmVuZGVyU3VyZmFjZSBtYXkgYWxzbyBiZSBxdWVyaWVkIHZpYSBzdXJmYWNlT2Nj
bHVkZWQoKSBhbmQgc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdCgpLgorLy8gRmluYWxseSwg
b25jZSBmaW5pc2hlZCB3aXRoIHRoZSBsYXllciwgb2NjbHVzaW9uIGJlaGluZCB0aGUgbGF5ZXIg
c2hvdWxkIGJlIG1hcmtlZCBieSBjYWxsaW5nIG1hcmtPY2NsdWRlZEJlaGluZExheWVyKCkuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgor
Y2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyQmFzZSB7CitwdWJsaWM6CisgICAgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZSgpIHsgfQorCisgICAgLy8gQ2FsbGVkIHdoZW4gdmlzaXRpbmcgYSBsYXllciBy
ZXByZXNlbnRpbmcgaXRzZWxmLiBJZiB0aGUgdGFyZ2V0IHdhcyBub3QgYWxyZWFkeSBjdXJyZW50
LCB0aGVuIHRoaXMgaW5kaWNhdGVzIHdlIGhhdmUgZW50ZXJlZCBhIG5ldyBzdXJmYWNlIHN1YnRy
ZWUuCisgICAgdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIG5ld1RhcmdldCk7CisKKyAgICAvLyBDYWxsZWQgd2hlbiB2aXNpdGluZyBhIGxheWVy
IHJlcHJlc2VudGluZyBhIHRhcmdldCBzdXJmYWNlLiBUaGlzIGluZGljYXRlcyB3ZSBoYXZlIHZp
c2l0ZWQgYWxsIHRoZSBsYXllcnMgd2l0aGluIHRoZSBzdXJmYWNlLCBhbmQgd2UgbWF5CisgICAg
Ly8gcGVyZm9ybSBhbnkgc3VyZmFjZS13aWRlIG9wZXJhdGlvbnMuCisgICAgdm9pZCBmaW5pc2hl
ZFRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIGZpbmlzaGVkVGFyZ2V0KTsKKworICAgIC8vIENhbGxlZCB3aGVuIHZpc2l0aW5nIGEg
bGF5ZXIgcmVwcmVzZW50aW5nIGEgY29udHJpYnV0aW5nIHN1cmZhY2UuIFRoaXMgIGluZGljYXRl
cyB0aGF0IHdlIGFyZSBsZWF2aW5nIG91ciBjdXJyZW50IHN1cmZhY2UsIGFuZAorICAgIC8vIGVu
dGVyaW5nIHRoZSBuZXcgb25lLiBXZSB0aGVuIHBlcmZvcm0gYW55IG9wZXJhdGlvbnMgcmVxdWly
ZWQgZm9yIG1lcmdpbmcgcmVzdWx0cyBmcm9tIHRoZSBjaGlsZCBzdWJ0cmVlIGludG8gaXRzIHBh
cmVudC4KKyAgICB2b2lkIGxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1
cmZhY2VUeXBlKiBuZXdUYXJnZXQpOworCisgICAgLy8gQWRkIHRoZSBsYXllcidzIG9jY2x1c2lv
biB0byB0aGUgdHJhY2tlZCBzdGF0ZS4KKyAgICB2b2lkIG1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGNvbnN0IExheWVyVHlwZSopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBy
ZWN0IGluIGNvbnRlbnQgc3BhY2UgZm9yIHRoZSBsYXllciBpcyBmdWxseSBvY2NsdWRlZCBpbiBl
aXRoZXIgc2NyZWVuIHNwYWNlIG9yIHRoZSBsYXllcidzIHRhcmdldCBzdXJmYWNlLgorICAgIGJv
b2wgb2NjbHVkZWQoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
IGNvbnN0OworICAgIC8vIEdpdmVzIGFuIHVub2NjbHVkZWQgc3ViLXJlY3Qgb2YgfGNvbnRlbnRS
ZWN0fCBpbiB0aGUgY29udGVudCBzcGFjZSBvZiB0aGUgbGF5ZXIuIFVzZWQgd2hlbiBjb25zaWRl
cmluZyBvY2NsdXNpb24gZm9yIGEgbGF5ZXIgdGhhdCBwYWludHMvZHJhd3Mgc29tZXRoaW5nLgor
ICAgIEludFJlY3QgdW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSosIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZ2l2ZW4gcmVjdCBpbiBjb250ZW50IHNwYWNlIGZvciB0aGUgUmVuZGVyU3VyZmFjZSBvd25l
ZCBieSB0aGUgbGF5ZXIgaXMgZnVsbHkgb2NjbHVkZWQgaW4gZWl0aGVyIHNjcmVlbiBzcGFjZSBv
ciB0aGUgbGF5ZXIncyB0YXJnZXQgc3VyZmFjZS4KKyAgICBib29sIHN1cmZhY2VPY2NsdWRlZChj
b25zdCBMYXllclR5cGUqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAg
Ly8gR2l2ZXMgYW4gdW5vY2NsdWRlZCBzdWItcmVjdCBvZiB8Y29udGVudFJlY3R8IGluIHRoZSBj
b250ZW50IHNwYWNlIG9mIHRoZSBSZW5kZXJTdXJmYWNlIG93bmVkIGJ5IHRoZSBsYXllci4gVXNl
ZCB3aGVuIGNvbnNpZGVyaW5nIG9jY2x1c2lvbiBmb3IgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICBJ
bnRSZWN0IHN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJUeXBlKiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OworCisgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGVzZSBpbiBmdXR1cmUsIHRoZXkgYXJlIHRvIG1ha2UgQ0xzIGZvciB0cmFuc2l0aW9uaW5nIHRv
IHRoaXMgZWFzaWVyLgorICAgIGNvbnN0IFJlZ2lvbiYgY3VycmVudE9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKSBjb25zdDsKKyAgICBjb25zdCBSZWdpb24mIGN1cnJlbnRPY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHN0cnVjdCBTdGFja09iamVjdCB7
CisgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlOworICAgICAgICBSZWdp
b24gb2NjbHVzaW9uSW5TY3JlZW47CisgICAgICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldDsK
KyAgICB9OworCisgICAgLy8gVGhlIHN0YWNrIGhvbGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1
YnRyZWVzIGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBs
ZWF2ZSBhIHN1YnRyZWUgd2UgbWF5CisgICAgLy8gYXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90
IHRvIHRoZSBwYXJ0cyBvdXRzaWRlIHRoZSBzdWJ0cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRp
bWUgd2Ugc2VlIGEgbmV3IHN1YnRyZWUgdW5kZXIgYSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdl
dCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4gVGhpcyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVw
cmVzZW50aW5nIGl0c2VsZiwgb3IgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4g
d2UgdmlzaXQgYSB0YXJnZXQgc3VyZmFjZSwgd2UgYXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRy
ZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2
aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRv
IHRoZSBjdXJyZW50IHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgor
ICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGlu
ZyBzdXJmYWNlLCB0aGUgY3VycmVudCB0YXJnZXQgd2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRo
ZSBzdGFjayBzaW5jZSB3ZSBqdXN0IGNhbWUgZnJvbSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2Uu
CisgICAgLy8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3
aXRoIHRoZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9u
dG8gdGhlIHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorICAgIFZlY3RvcjxTdGFja09iamVj
dCwgMT4gbV9zdGFjazsKKworcHJpdmF0ZToKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlKTsKK307CisKK3R5cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+IENDT2NjbHVzaW9uVHJhY2tl
cjsKK3R5cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlPiBDQ09jY2x1c2lvblRyYWNrZXJJbXBsOworCit9CisjZW5kaWYgLy8gQ0NPY2NsdXNp
b25UcmFja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDZlOWE0ZDBkZmE5
NWZiNzQ4NzFlNWZmMzlmYjI4YWRmZmRhYWQ5ZmIuLjlhYTVkMmNhNjViZDFiZjYwNzU1OGUzMDg5
ZTk5NjEwYTBmNDY2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzUsNiAr
NzUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oJywKKyAgICAgICAgICAgICd0ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NRdWFkQ3Vs
bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGIxZmE3MjkxODQwMWUzMjQwZTQxZDEzZDJlMGMyN2Qw
YzU2YWQ3YzUuLmQyZTFjZmVmOTNlMjgyMTY2ZGE4NTEyNTZjOTVjMGU2NTEyYzY5YmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ0NMYXllclRy
ZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlJl
Z2lvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxn
bW9jay9nbW9jay5oPgpAQCAtMzYsMTIgKzM1LDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLSNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAotICAgIEVYUEVDVF9FUShhLngo
KSwgYi54KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKLSAgICBFWFBFQ1Rf
RVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCi0gICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIu
aGVpZ2h0KCkpOwotCiBuYW1lc3BhY2UgewogCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29u
c3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQpAQCAtNjAyLDE3NCArNTk1LDQg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVu
ZGVyU3VyZmFjZXMpCiAvLyAgLSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uCiAvLwogCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVy
QWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uKQotewotICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUg
cmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24gb2NjbHVkZWQ7Ci0g
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFyZW50
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7Ci0K
LSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OwotCi0gICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKLQotICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVy
IHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUg
dG8gZml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0g
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwot
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOwotCi0gICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKLSAgICBsYXllci0+
YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7Ci0gICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKLSAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKLX0KLQotVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlv
bikKLXsKLSAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJl
aW5nIHVzZWQuCi0gICAgUmVnaW9uIG9jY2x1ZGVkOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OwotICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbGF5ZXJUcmFuc2Zvcm07Ci0gICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUw
KTsKLSAgICBsYXllclRyYW5zZm9ybS5yb3RhdGUoOTApOwotICAgIGxheWVyVHJhbnNmb3JtLnRy
YW5zbGF0ZSgtMjUwLCAtMjUwKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7Ci0gICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0s
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIElu
dFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0KLSAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOwot
Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0Owot
ICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6IHdoZW4g
d2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVy
VHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICBvY2NsdWRlZCA9
IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1
ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVk
ZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkp
OwotfQotCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09j
Y2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQotewotICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0
aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24gb2NjbHVkZWQ7
Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFy
ZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7
Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKLSAgICBsYXllclRy
YW5zZm9ybS50cmFuc2xhdGUoMjAsIDIwKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7
Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFu
c2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAz
MCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0KLSAgICBsYXllci0+c2V0T3BhcXVlKHRy
dWUpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OwotICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6
IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBD
Q0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICBvY2Ns
dWRlZCA9IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNl
KG9jY2x1ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwg
b2NjbHVkZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5z
aXplKCkpOwotfQotCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1Nl
bGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQotewotICAgIC8vIFRoaXMgdGVz
dHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24g
b2NjbHVkZWQ7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7Ci0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRD
aGlsZChjaGlsZCk7Ci0gICAgY2hpbGQtPmFkZENoaWxkKGxheWVyKTsKLQotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOwotICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0
ZSgyNTAsIDI1MCk7Ci0gICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKLSAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7Ci0KLSAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxk
VHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwg
ZmFsc2UpOwotCi0gICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Ci0gICAgbGF5ZXIt
PnNldE9wYXF1ZSh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLQot
ICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIg
YmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUs
IHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwotCi0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OwotCi0gICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKLSAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVk
ZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwg
NDAsIDcwLCA2MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKLSAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1
ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKLQotICAgIC8qIEp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92
ZSBvcGFxdWUgcmVjdCBmcm9tIHxsYXllcnw6Ci0gICAgICAgICAgICAgICAxMDAKLSAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnw6IC8vLy8vCi0gICAgICB8ICAgIDMwICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgIHwKLSAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKwotICAxMDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICA9PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAg
ICAgICAgICB8Ci0gICAgICB8ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsgIHwKLSAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAg
fAotICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8Ci0g
ICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKLSAgICAg
ICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAotICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAyMHwxMHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8MTB8Ci0gICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLXwtLSsKLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAg
ICAgICAgfAotICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCi0gICAgICovCi19Ci0KIH0gLy8gbmFt
ZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVz
aW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1
c2lvblRyYWNrZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTczMTBiYWM3OTlmZDE0MjMxOTkwYTcy
OWU1ZWM0NWZlMTE0YzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDT2NjbHVz
aW9uVHJhY2tlci5oIgorCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgor
CisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBc
CisgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIu
eSgpKTsgXAorICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBF
Q1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CisKK25hbWVzcGFjZSB7CisKK3ZvaWQgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgb3BhcXVlKQorewor
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0U3VibGF5
ZXJUcmFuc2Zvcm0oc3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2lu
dChhbmNob3IpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXIt
PnNldEJvdW5kcyhib3VuZHMpOworICAgIGxheWVyLT5zZXRPcGFxdWUob3BhcXVlKTsKK30KKwor
Y2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQgOiBwdWJsaWMgTGF5ZXJD
aHJvbWl1bSB7CitwdWJsaWM6CisgICAgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQoKQorICAgICAgICA6IExheWVyQ2hyb21pdW0oKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworLy8g
QSBzdWJjbGFzcyB0byBleHBvc2UgdGhlIHRvdGFsIGN1cnJlbnQgb2NjbHVzaW9uLgorY2xhc3Mg
VGVzdENDT2NjbHVzaW9uVHJhY2tlciA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXIgeworcHVi
bGljOgorICAgIFJlZ2lvbiBvY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3QgeyByZXR1cm4g
Q0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbjsgfQor
ICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBDQ09j
Y2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0OyB9CisKKyAg
ICB2b2lkIHNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoY29uc3QgUmVnaW9uJiByZWdpb24pIHsg
Q0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IHJl
Z2lvbjsgfQorICAgIHZvaWQgc2V0T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKGNvbnN0IFJlZ2lv
biYgcmVnaW9uKSB7IENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9u
SW5UYXJnZXQgPSByZWdpb247IH0KK307CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
bGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRo
ZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQobGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6
ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwor
CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKwor
ICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQo
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQ
RUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNzAsIDcwKSkp
OworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKS5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMjksIDcwLCA3MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyOSwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMxLCAyOSwgNzAsIDcwKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDI5LCA3MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDMwLCAxLCA3MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDMxLCA3MCwgNzApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzEs
IDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcwLCAxKSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDMxLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMzEsIDcwLCA3
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDI5LCAzMSwgNzAsIDcwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxh
eWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQoreworICAgIC8vIFRoaXMgdGVz
dHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxh
eWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7Cisg
ICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xh
dGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXpl
KDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisK
KyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lv
bi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBF
Q1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZh
bHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9j
Y2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7
CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgyOSwgMzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMjksIDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAyOSwgNzAsIDcwKSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDI5LCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAsIDcwKSkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMjksIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMzAsIDEsIDcwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwg
NzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMSwgMzEsIDcwLCA3MCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMSwg
NzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDEwMCwgNzAsIDEpLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzEsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCAzMSwgNzAsIDcw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MjksIDMxLCA3MCwgNzApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5
ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCit7CisgICAgLy8gVGhpcyB0
ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7
CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7
CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJl
bnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVz
aW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgp
LmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTAsIDUwLCA1MCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwg
NTAsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUxLCA1MCwgNTApKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1
MCwgNTAsIDUwLCA1MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0
OSwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCg0OSwgNDksIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoNTAsIDQ5LCA1MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoNTEsIDQ5LCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNDksIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDEwMCwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCg1MSwgNTEsIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MSwgNTAsIDUwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDEwMCwgNTAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MSwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUxLCA1MCwgNTApKSk7
Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRS
ZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSBy
aWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgY2hp
bGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBj
aGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVu
ZGVyU3VyZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09j
Y2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCku
Ym91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwg
NDMwLCA2MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2Nj
bHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQz
MCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNo
aWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFs
c2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MSwg
NzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0
KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcxKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2Ns
dWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJn
ZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdldCgpLCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJm
YWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisg
ICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzksIDcwLCA2MCkpKTsKKworCisgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9j
Y2x1c2lvbiBmcm9tIHxsYXllcnw6CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0t
LS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8MzAg
IFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICA9PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAg
ICB8CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAg
ICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwK
KyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAg
ICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAg
ICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAg
ICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8
ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAg
ICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0t
fC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAr
LS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwx
MHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAg
fAorICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAg
ICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNp
b25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVh
ZHlPblN0YWNrKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3Jt
cyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsK
KyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBjaGlsZDIgPSBh
ZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJl
bnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsK
KyAgICBjaGlsZC0+YWRkQ2hpbGQobGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQy
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxk
VHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRl
KDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Y2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJ
bnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAvLyB8Y2hpbGQyfCBtYWtlcyB8cGFyZW50
fCdzIHN1cmZhY2UgZ2V0IGNvbnNpZGVyZWQgYnkgQ0NPY2NsdXNpb25UcmFja2VyIGZpcnN0LCBp
bnN0ZWFkIG9mIHxjaGlsZHwncy4gVGhpcyBleGVyY2lzZXMgZGlmZmVyZW50IGNvZGUgaW4KKyAg
ICAvLyBsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSwgYXMgdGhlIHRhcmdldCBzdXJmYWNlIGhh
cyBhbHJlYWR5IGJlZW4gc2Vlbi4KKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNo
aWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNjAsIDIwKSwgdHJ1ZSk7CisKKyAgICBj
aGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQt
PnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkp
OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShw
YXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIo
Y2hpbGQyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwg
MjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBF
WFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwgMjApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
LmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkp
OworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBF
Q1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwg
NDI5LCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQo
Y2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYw
LCA3MCkpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAg
ICAvLyBUaGlzIGlzIHRoZSBsaXR0bGUgcGllY2Ugbm90IG9jY2x1ZGVkIGJ5IGNoaWxkMgorICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOSwgNDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7Cisg
ICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgYm90aCBzaWRlcyBvZiBjaGlsZDIsIHNvIGl0IHdpbGwg
YmUgdGhlIG9yaWdpbmFsIHJlY3QuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5LCA0MzAs
IDYwLCA4MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIElu
dFJlY3QoOSwgNDMwLCA2MCwgODApKSk7CisgICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgdHdvIGFk
amFjZW50IHNpZGVzIG9mIGNoaWxkMiwgYW5kIHNob3VsZCBpbmNsdWRlZCB0aGUgdW5vY2NsdWRl
ZCBwYXJ0cyBvZiBlYWNoIHNpZGUuCisgICAgLy8gVGhpcyBhbHNvIGRlbW9uc3RyYXRlcyB0aGF0
IHRoZSByZWN0IGNhbiBiZSBhcmJpdHJhcnkgYW5kIGRvZXMgbm90IGdldCBjbGlwcGVkIHRvIHRo
ZSBsYXllcidzIHZpc2libGVMYXllclJlY3QoKS4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KC0xMCwgNDMwLCAyMCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
LmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA2MCwgNzApKSk7CisgICAgLy8gVGhpcyBleHRlbmRz
IHBhc3QgdGhyZWUgYWRqYWNlbnQgc2lkZXMgb2YgY2hpbGQyLCBzbyBpdCBzaG91bGQgY29udGFp
biB0aGUgdW5vY2NsdWRlZCBwYXJ0cyBvZiBlYWNoIHNpZGUuIFRoZSBsZWZ0CisgICAgLy8gYW5k
IGJvdHRvbSBlZGdlcyBhcmUgY29tcGxldGVseSB1bm9jY2x1ZGVkIGZvciBzb21lIHJvdy9jb2x1
bW4gc28gd2UgZ2V0IGJhY2sgdGhlIG9yaWdpbmFsIHF1ZXJ5IHJlY3QuCisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQyOSwgNjAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDcwLCA0MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNTAwLCA2MCwgMSksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMSwgNjAsIDcw
KSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJh
dyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3
MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJ
bnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihjaGlsZC5nZXQoKSk7CisgICAgLy8gfGNoaWxkMnwgc2hvdWxkIGdldCBtZXJn
ZWQgd2l0aCB0aGUgc3VyZmFjZSB3ZSBhcmUgbGVhdmluZyBub3cKKyAgICBvY2NsdXNpb24uZmlu
aXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdldCgpLCBjaGlsZC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcw
LCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
IEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworCisgICAgVmVjdG9yPEludFJlY3Q+IHNjcmVlbiA9IG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkucmVjdHMoKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gdGFyZ2V0ID0gb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCk7CisKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMw
LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5MCwgMzAsIDEwLCAxMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzMCwgNzAsIDcwKSkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA2MCwgMTApKSk7CisgICAgRVhQRUNUX0VR
KGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwg
NjAsIDEwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDYwLCAxMCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA2MCwgMTAp
KSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzAsIDMxLCA2MCwgMTApKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYwKSkpOworCisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMzAsIDMwLCA2MCwgMTApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjksIDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMzAsIDI5LCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoOTAsIDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMwLCAzMSwgNjAsIDEwKSkuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAs
IDYwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCA0MCwgMSwg
NjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgyOSwgNDAsIDcwLCA2MCkpKTsKKyAgICAvLyBUaGlzIHJlY3QgaXMgbW9zdGx5IG9jY2x1ZGVk
IGJ5IHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOTAsIDM5LCAxMCwgMSks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzOSwgNzAsIDYwKSkpOworICAgIC8vIFRoaXMgcmVjdCBleHRlbmRzIHBhc3QgdG9wL3JpZ2h0
IGVuZHMgb2YgfGNoaWxkMnwuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMjksIDcw
LCAxMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCAyOSwgNzAsIDcwKSkpOworICAgIC8vIFRoaXMgcmVjdCBleHRlbmRzIHBhc3QgbGVm
dC9yaWdodCBlbmRzIG9mIHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAs
IDM5LCA4MCwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgyMCwgMzksIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwMCwgNDAsIDEsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzEsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMTAwLCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkpOworCisgICAgLy8gU3VyZmFjZSBp
cyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkp
OworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVzaW9uIGZyb20g
fGxheWVyfDoKKyAgICAgICAgICAgICAgIDEwMAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwzMCAgVmlzaWJsZSByZWdp
b24gb2YgfGxheWVyfDogLy8vLy8KKyAgICAgIHwgICAgMzAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICByb3RhdGUoOTApICAgICAgICAgICAgICAgICB8ICAgICAzMCAgIDYwICAgICAgICAgfCAg
ICB8Y2hpbGQyfDogXFxcXFwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t
LS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICB8ICAzMCArLS0tLS0tLS0tLS0tKy0tLS0tLS0t
LS0tLS0tLS0tLS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgIHwgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICA9PT4gICAgIHwgICAgIHxcXFxcXFxcXFxcXFx8ICB8MTAgICAgICAg
ICAgICAgICB8CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgfCAgKy0tfFxcXFxcXFxcXFxcXHwtLS0tLS0tLS0tLS0tLS0t
LSsgIHwKKyAgICAgIHwgICAgKyAtLS0tLS0tLS0tLS0rICB8ICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICB8ICB8ICArLS0tLS0tLS0tLS0tKy8vfCAgICAgNDIwICAgICAgfCAg
fAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8Cisg
ICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAg
ICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAyMHwxMHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAg
ICAgICAgfAorICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRl
ZE9mZkF4aXNTdXJmYWNlKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9u
OworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hp
bGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAgICAvLyBOb3cgcm90YXRlIHRo
ZSBjaGlsZCBhIGxpdHRsZSBtb3JlIHNvIGl0IGlzIG5vdCBheGlzLWFsaWduZWQuIFRoZSBwYXJl
bnQgd2lsbCBubyBsb25nZXIgYmUgb2NjbHVkZWQgYnkgfGxheWVyfCwgYnV0CisgICAgLy8gdGhl
IGNoaWxkJ3Mgb2NjbHVzaW9uIHNob3VsZCBiZSB1bmNoYW5nZWQuCisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUo
MjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5NSk7CisgICAgY2hpbGRUcmFu
c2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAxMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3Vu
ZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlM
YXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgSW50UmVj
dCBjbGlwcGVkTGF5ZXJJbkNoaWxkID0gbGF5ZXJUcmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dmlz
aWJsZUxheWVyUmVjdCgpKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJl
aGluZExheWVyKGxheWVyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkTGF5ZXJJbkNoaWxkLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
IEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIGNsaXBwZWRM
YXllckluQ2hpbGQpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7
CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKC0xLCAwKTsKKyAgICBFWFBFQ1RfRVEoZmFs
c2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkp
OworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7CisgICAgY2xpcHBl
ZExheWVySW5DaGlsZC5tb3ZlKDEsIDApOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgx
LCAwKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQo
KSwgY2xpcHBlZExheWVySW5DaGlsZCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQp
LmlzRW1wdHkoKSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKC0xLCAwKTsKKyAgICBj
bGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMCwgLTEpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2Nj
bHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNoaWxkKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkuaXNFbXB0eSgpKTsKKyAgICBjbGlwcGVkTGF5ZXJJ
bkNoaWxkLm1vdmUoMCwgMSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIDEpOwor
ICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBjbGlw
cGVkTGF5ZXJJbkNoaWxkKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkuaXNFbXB0
eSgpKTsKKyAgICBjbGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMCwgLTEpOworCisgICAgLy8gU3Vy
ZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDUwMCwgNTAwKSwgb2NjbHVzaW9uLnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMCwgMCwgNTAwLCA1
MDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0
KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0
KCksIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgwdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgw
dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwg
SW50UmVjdCg3NSwgNTUsIDEsIDEpKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3NSwg
NTUsIDEsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCg3NSwgNTUsIDEsIDEpKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRl
ZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMCwgMCwgMTAwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7Cit9CisKK1RFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVs
dGlwbGVPcGFxdWVMYXllcnMpCit7CisgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2
aW91cyB0ZXN0IGJ1dCBub3cgd2UgbWFrZSBhIGZldyBvcGFxdWUgbGF5ZXJzIGluc2lkZSBvZiB8
Y2hpbGR8IHNvIHRoYXQgdGhlIG9jY2x1ZGVkIHBhcnRzIG9mIGNoaWxkIGFyZSBub3QgYSBzaW1w
bGUgcmVjdC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllcjEgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllcjIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hp
bGQtPmFkZENoaWxkKGxheWVyMSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGxheWVyMik7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7Cisg
ICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAs
IDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUo
NTAwLCA0NDApLCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVy
Mi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDEwLCA0NTApLCBJbnRTaXplKDUwMCwgNjApLCB0cnVlKTsKKworICAgIGNo
aWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXpl
ID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+
c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7
CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBh
cmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyMi5nZXQoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
MS5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
CisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50
UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24u
b2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAs
IDQyOSwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2
MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5LCA0MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MjksIDYwLCAxKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDI5LCA2MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3MCwgNDMwLCAxLCA3MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAs
IDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDUwMCwgNjAsIDEpLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEs
IDYwLCA3MCkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0
aGF0IGRyYXcgaW50byBpdHNlbGYuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDMw
LCA2MCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09j
Y2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRh
cmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0KCksIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzOSwgNzAsIDYwKSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDQwLCAxLCA2MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAs
IDYwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDM5LCA3MCwgMSksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwg
NzAsIDYwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCA0MCwgMSwgNjApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwg
NDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcwLCAx
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MzAsIDQxLCA3MCwgNjApKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0
aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzAsIDQwLCA3MCwgNjApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKSk7CisKKworICAgIC8qIEp1c3Rp
ZmljYXRpb24gZm9yIHRoZSBhYm92ZSBvY2NsdXNpb24gZnJvbSB8bGF5ZXIxfCBhbmQgfGxheWVy
Mnw6CisKKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcjF8OiAvLy8vLworICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcjJ8OiBc
XFxcXAorICAgICAgIHwgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisg
ICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwxMCAgICAgICAgICAgICAgIHwKKyAgICAgICB8
ICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKyAgfAorICAgICAgIHwgIHwgIHxc
XFxcXFxcXFxcXFx8Ly98ICAgICA0MjAgICAgICB8ICB8CisgICAgICAgfCAgfCAgfFxcXFxcXFxc
XFxcXHwvL3w2MCAgICAgICAgICAgIHwgIHwKKyAgICAgICB8ICB8ICB8XFxcXFxcXFxcXFxcfC8v
fCAgICAgICAgICAgICAgfCAgfAorICAgICAgICstLXwtLXwtLS0tLS0tLS0tLS18LS0rICAgICAg
ICAgICAgICB8ICB8CisgICAgICAgIDIwfDEwfCAgICAgNzAgICAgIHwgICAgICAgICAgICAgICAg
IHwgIHwKKyAgICAgICAgICB8ICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgfAor
ICAgICAgICAgIHwgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAg
ICAgfCAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICB8ICB8
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgIHwgIHwgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgfCAgfCAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgIHwxMHwKKyAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tfC0tLS0tLS0t
LS0tLS0tLS0tfC0tKworICAgICAgICAgIHwgICAgICAgICAgICAgICB8IDQ5MCAgICAgICAgICAg
ICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAg
ICAgICAgICAgICA2MCAgICAgICAgICAgICAgIDQ0MAorICAgICAqLworfQorCitURVNUKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3ZlcmxhcHBpbmdTaWJsaW5n
U3VyZmFjZXMpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1z
IGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIx
ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIyID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hp
bGQxKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMik7CisgICAgY2hpbGQxLT5hZGRDaGls
ZChsYXllcjEpOworICAgIGNoaWxkMi0+YWRkQ2hpbGQobGF5ZXIyKTsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0
ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQxLmdldCgpLCBjaGls
ZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwg
dHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIGNo
aWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgyMCwgNDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNTAwLCA1MDAp
LCB0cnVlKTsKKworICAgIGNoaWxkMS0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBjaGls
ZDItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDItPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyMi5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCA0MCwgODAsIDYw
KSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQ
RUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwg
SW50UmVjdCgwLCA0MjAsIDYwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lv
bi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEsIDQyMCwgNjAsIDgwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVj
dCgwLCA0MTksIDYwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDIwLCA2MSwgODApKSk7CisgICAgRVhQRUNU
X0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQy
MCwgNjAsIDgxKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdz
IHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQy
MCwgNjAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQy
LmdldCgpLCBJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtP
Y2NsdWRlZEJlaGluZExheWVyKGNoaWxkMi5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmZpbmlzaGVk
VGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDIuZ2V0KCksIGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihsYXllcjEuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAs
IDgwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0
cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MzAsIDcwLCA3MCks
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQ
RUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5z
aXplKCkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIu
Z2V0KCksIEludFJlY3QoMCwgNDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xLCA0MzAsIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCks
IEludFJlY3QoMCwgNDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNp
b24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQzMCwgNzEsIDcwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVj
dCgwLCA0MzAsIDcwLCA3MSkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5
IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYsIGJ1dCB0aGUgfGNoaWxkMXwgc3VyZmFjZSBz
aG91bGQgYmUgb2NjbHVkZWQgYnkgdGhlIHxjaGlsZDJ8IHN1cmZhY2UuCisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgwLCA0MzAsIDEwLCA3MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA3MCkpKTsKKwor
ICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDEuZ2V0KCkpOworICAg
IG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQxLmdldCgpLCBjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJT
dXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjAsIDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVl
blNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAs
IDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzAsIDgwLCA3MCkpKTsKKworICAgIEVY
UEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA3
MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgyMCwgNDAsIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTksIDQwLCA4MCwgNjAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDIwLCAzOSwgODAsIDYwKSkpOworCisgICAgLy8gfGNoaWxkMXwgYW5kIHxjaGls
ZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBzbyB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4K
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCAzMCwgODAsIDcwKSwgb2NjbHVzaW9uLnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAzMCwg
ODAsIDcwKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVz
aW9uOgorICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgMzAgICAgICAgICAgICAg
ICB8ICAgICAgIGNoaWxkMQorICAgICAgfCAgMzArIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyAgMTAwIHwgIDQwfCAgICAgICAgICAgICAgICB8ICAgICBjaGlsZDIgICAgICB8
CisgICAgICB8MjArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorICAgICAg
fCAgfCB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IHwKKyAgICAgIHwgIHwgfCAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8CisgICAgICB8ICB8IHwgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgIHwgfAorICAgICAgKy0tfC18LS0tLS0tLS0tLS0tLS0tLSsg
ICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCB8IDUwMAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Cisg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS18LSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCit7CisgICAgLy8gVGhp
cyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRl
c3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hp
bGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICBwYXJlbnQtPmFkZENo
aWxkKGNoaWxkMik7CisgICAgY2hpbGQxLT5hZGRDaGlsZChsYXllcjEpOworICAgIGNoaWxkMi0+
YWRkQ2hpbGQobGF5ZXIyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNm
b3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRU
cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwg
LTI1MCk7CisKKyAgICAvLyBUaGUgb3duaW5nIGxheWVycyBoYXZlIHZlcnkgZGlmZmVyZW50IGJv
dW5kcyBmcm9tIHRoZSBzdXJmYWNlcyB0aGF0IHRoZXkgb3duLgorICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDAp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDEuZ2V0KCks
IGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgzMCwgMzApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KC0xMCwgLTEwKSwgSW50U2l6ZSg1MTAs
IDUxMCksIHRydWUpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdl
dCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMjAsIDQwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllcjIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgtMTAsIC0xMCksIEludFNpemUo
NTEwLCA1MTApLCB0cnVlKTsKKworICAgIC8vIE1ha2UgdGhlbSBib3RoIHJlbmRlciBzdXJmYWNl
cworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMo
KS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAu
NSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBjaGlsZDEtPnNldEZpbHRlcnMo
ZmlsdGVycyk7CisgICAgY2hpbGQyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgY2hpbGQx
LT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICBjaGlsZDItPnNldE1hc2tzVG9Cb3VuZHMo
ZmFsc2UpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5
ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lv
bi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOworCisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAsIDgwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFy
Z2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEo
dHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwg
NzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxk
Mi5nZXQoKSwgSW50UmVjdCgtMTEsIDQyMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQxOSwgNzAs
IDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5n
ZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzEsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwg
b2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgx
KSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJh
dyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDIwLCA3MCwg
ODApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZDIuZ2V0KCks
IEludFJlY3QoLTEwLCA0MjAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1
c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDMwLCAyNTAsIDEsIDEp
KSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQyLmdldCgp
KTsKKyAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMi5nZXQo
KSwgY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVu
dGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2Nj
bHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyMS5nZXQoKSk7CisKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDIwLCAyMCwgODAsIDgwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbklu
U2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVl
LCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwg
NzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdl
dCgpLCBJbnRSZWN0KC0xMSwgNDMwLCA4MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDI5LCA4MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgp
LCBJbnRSZWN0KC0xMCwgNDMwLCA4MSwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2Ns
dXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzEpKSk7
CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGlu
dG8gaXRzZWxmLCBidXQgdGhlIHxjaGlsZDF8IHN1cmZhY2Ugc2hvdWxkIGJlIG9jY2x1ZGVkIGJ5
IHRoZSB8Y2hpbGQyfCBzdXJmYWNlLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0
MzAsIDEwLCA4MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
MS5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUSh0cnVl
LCBvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAs
IDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVk
ZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KC0xLCA0MzAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0
KDAsIDQyOSwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnN1cmZh
Y2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMSwgNDMwLCA3MCwgODApKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwg
SW50UmVjdCgwLCA0MzEsIDcwLCA4MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihjaGlsZDEuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJl
bmRlclN1cmZhY2UoY2hpbGQxLmdldCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
b2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgydSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVj
dCgyMCwgMjAsIDgwLCA4MCkpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyMCwgNzAsIDgwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwg
MjAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDE5LCA3MCwgODApKSk7CisKKyAgICBFWFBFQ1RfRVEo
dHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzAsIDgw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMTksIDMwLCA4MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAyOSwgODAsIDcwKSkp
OworCisgICAgLy8gfGNoaWxkMXwgYW5kIHxjaGlsZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBz
byB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDIwLCAyMCwgODAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAyMCwgODAsIDgwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAs
IDUwLCAxLCAxKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2Nj
bHVzaW9uOgorICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgfCAgICAyMCAgICAgICAgICAgICAgIHwgICAgICAgbGF5ZXIxCisgICAgICB8ICAz
MCsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAgMzB8ICAgICAg
ICAgICAgICAgIHwgICAgIGxheWVyMiAgICAgIHwKKyAgICAgIHwyMCstLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKyB8CisgICAgICB8ICB8IHwgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgIHwgfAorICAgICAgfCAgfCB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICB8IHwKKyAgICAgIHwgIHwgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8Cisg
ICAgICArLS18LXwtLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwgfAorICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgNTAwCisgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAg
ICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtKworICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICA1MDAKKyAg
ICAgKi8KK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBvY2NsdXNpb25JbnRlcmFj
dGlvbldpdGhGaWx0ZXJzKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJh
bnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1
c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBibHVyTGF5
ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBvcGFjaXR5
TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBvcGFx
dWVMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGJsdXJMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChvcGFjaXR5TGF5ZXIpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQob3BhcXVlTGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwg
MjUwKTsKKyAgICBsYXllclRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgIGxheWVyVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhibHVyTGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwg
MzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhvcGFxdWVMYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDAp
LCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKG9wYWNpdHlMYXllci5n
ZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgIHsKKyAg
ICAgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgICAgICBmaWx0ZXJzLm9wZXJhdGlv
bnMoKS5hcHBlbmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgxMCwgV2ViQ29y
ZTo6UGVyY2VudCksIEZpbHRlck9wZXJhdGlvbjo6QkxVUikpOworICAgICAgICBibHVyTGF5ZXIt
PnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgfQorCisgICAgeworICAgICAgICBGaWx0ZXJPcGVy
YXRpb25zIGZpbHRlcnM7CisgICAgICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRSkpOworICAgICAgICBvcGFxdWVMYXllci0+c2V0RmlsdGVycyhmaWx0
ZXJzKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsK
KyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWSkp
OworICAgICAgICBvcGFjaXR5TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgfQorCisK
KyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Cisg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgLy8gT3BhY2l0eSBsYXllciB3
b24ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbi4KKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRS
ZW5kZXJTdXJmYWNlKG9wYWNpdHlMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIob3BhY2l0eUxheWVyLmdldCgpKTsKKyAgICBvY2Ns
dXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKG9wYWNpdHlMYXllci5nZXQoKSwgb3Bh
Y2l0eUxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5pc0VtcHR5KCkpOworCisgICAgLy8g
QW5kIGhhcyBub3RoaW5nIHRvIGNvbnRyaWJ1dGUgdG8gaXRzIHBhcmVudCBzdXJmYWNlLgorICAg
IG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5pc0VtcHR5KCkpOworCisgICAgLy8gT3BhcXVlIGxheWVyIHdpbGwgY29udHJp
YnV0ZSB0byBvY2NsdXNpb24uCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFj
ZShvcGFxdWVMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1
ZGVkQmVoaW5kTGF5ZXIob3BhcXVlTGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hl
ZFRhcmdldFJlbmRlclN1cmZhY2Uob3BhcXVlTGF5ZXIuZ2V0KCksIG9wYXF1ZUxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3
MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVY
UEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MzAsIDcwLCA3MCksIG9jY2x1
c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkp
OworCisgICAgLy8gQW5kIGl0IGdldHMgdHJhbnNsYXRlZCB0byB0aGUgcGFyZW50IHN1cmZhY2Uu
CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICAvLyBUaGUgYmx1ciBsYXllciBuZWVkcyB0byB0aHJvdyBhd2F5IGFueSBvY2NsdXNpb24g
ZnJvbSBvdXRzaWRlIGl0cyBzdWJ0cmVlLgorICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRl
clN1cmZhY2UoYmx1ckxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuaXNFbXB0eSgpKTsKKwor
ICAgIC8vIEFuZCBpdCB3b24ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbi4KKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoYmx1ckxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNp
b24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGJsdXJMYXllci5nZXQoKSwgYmx1ckxheWVy
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEJ1dCB0aGUgb3Bh
cXVlIGxheWVyJ3Mgb2NjbHVzaW9uIGlzIHByZXNlcnZlZCBvbiB0aGUgcGFyZW50LgorICAgIG9j
Y2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128213</attachid>
            <date>2012-02-22 07:34:42 -0800</date>
            <delta_ts>2012-02-22 10:00:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78549-20120222103441.patch</filename>
            <type>text/plain</type>
            <size>102953</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQyMjlkNDgzOWM4YTUy
ZTk1Mzc1MTY4NThlZDk3ZjdhY2ZkOTU5NC4uOWU2MGVlYmYwNWJhOTMzMzhjNWQyZjQ4NTU4ZTdl
OTAwYzg4ODJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAyLTIxICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gTmV3
IENDT2NjbHVzaW9uVHJhY2tlciBjbGFzcyB3aXRoIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
IHRlbXBsYXRlIGNsYXNzIHRoYXQgaXMgYWJsZSB0byB0cmFjayBvY2NsdXNpb24KKyAgICAgICAg
b2YgbGF5ZXJzIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGxheWVyIHRyZWUgZnJvbSBmcm9udC10by1i
YWNrLCB3aXRoIHR5cGVkZWZlZAorICAgICAgICB2ZXJzaW9ucyBmb3IgdGhlIG1haW4gYW5kIGlt
cGwgdGhyZWFkcy4KKworICAgICAgICBBdCBlYWNoIHN0ZXAgb2YgdGhlIGZyb250LXRvLWJhY2sg
dHJhdmVyc2FsLCB0aGUgY2xhc3Mgc2hvdWxkIGJlIG5vdGlmaWVkIG9mCisgICAgICAgIGNoYW5n
ZXMgdG8gdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCwgYW5kIHdoZW4gZG9uZSB3b3JraW5nIHdp
dGggYSBsYXllciwgdGhlCisgICAgICAgIGxheWVyIGlzIGFkZGVkIHRoZSB0cmFja2VkIG9jY2x1
c2lvbi4KKworICAgICAgICBUaGUgY2xhc3MgcHJvdmlkZXMgdGVzdHMgZm9yIGNoZWNraW5nIGlm
IGEgcmVjdCBpbiBjb250ZW50IHNwYWNlCisgICAgICAgIGZvciBhIGxheWVyL3N1cmZhY2UgaXMg
b2NjbHVkZWQgYnkgb3RoZXJzIGluIGZyb250IG9mIGl0LgorCisgICAgICAgIFVuaXQgdGVzdHM6
IENDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2Vy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6ZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6ZmluaXNoZWRUYXJn
ZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVN1cmZhY2VPcGFx
dWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXB1dGVPY2NsdXNpb25CZWhpbmRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjo6Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRlc3RD
b250ZW50UmVjdE9jY2x1ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6b2NjbHVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlT2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmVj
dFN1YnRyYWN0UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVVbm9jY2x1ZGVkQ29u
dGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6Q0NPY2NsdXNpb25UcmFj
a2VyQmFzZSk6CisgICAgICAgIChTdGFja09iamVjdCk6CisKIDIwMTItMDItMjEgIEphbWVzIFJv
Ymluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb2RlOjppc0NvbnRlbnRF
ZGl0YWJsZSBzaG91bGQgb25seSB1cGRhdGUgc3R5bGVzLCBub3QgbGF5b3V0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDc4YWY0ZjY5YWFiNTM0NGZiZTY5MjA1NjBlNzRkYzc1N2YwNTM3
MGEuLjk0NzViOWMxZGQ0NWYzNTZkMmM1YTlhNTNjYTc4NmUyNTZmZjU5OGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjggQEAKIDIwMTItMDItMjEgIERhbmEgSmFuc2Vu
cyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW0Nocm9taXVtXSBOZXcgQ0NPY2Ns
dXNpb25UcmFja2VyIGNsYXNzIHdpdGggdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IHRlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyk6Cisg
ICAgICAgIChMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudDo6TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ6OmRyYXdzQ29udGVudCk6CisgICAgICAgIChUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNr
ZXI6Om9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2Nj
bHVzaW9uVHJhY2tlcjo6b2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OnNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6c2V0T2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCisyMDEyLTAyLTIxICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0g
UGFpbnRpbmcgYSBsYXllciBjbGVhcnMgb3BhcXVlIHJlY3QgaW4gdW50b3VjaGVkIHRpbGVzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTE1NwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggNWY1N2M0Y2I4MmUwNzJmZDJkMTMxYmZjYzEzZTg2MDg5MmU5NjE2
Ny4uYjQwMmUzYTcxZjFlMmRhZjQwZTA2MDgxNTlkM2I5YmJhM2M4MTAwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzI3NSw2ICszMjc1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NPY2NsdXNpb25UcmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQYWdlU2NhbGVBbmltYXRpb24uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzU2MTFh
YzI3YTZhZWM0YTdmYmQ2OTQwMjNkMzQzZjUyYmE1ZDIzYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJh
Y2tlci5jcHAKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ09jY2x1
c2lvblRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmVudGVyVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFyZ2V0KQoreworICAgIGlmICghbV9z
dGFjay5pc0VtcHR5KCkgJiYgbV9zdGFjay5sYXN0KCkuc3VyZmFjZSA9PSBuZXdUYXJnZXQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBvbGRUYXJnZXQg
PSBtX3N0YWNrLmlzRW1wdHkoKSA/IDAgOiBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlOworICAgIGNv
bnN0IFJlbmRlclN1cmZhY2VUeXBlKiBvbGRBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyA9ICFvbGRU
YXJnZXQgPyAwIDogb2xkVGFyZ2V0LT5uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKTsK
KyAgICBjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMg
PSBuZXdUYXJnZXQtPm5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscygpOworCisgICAgbV9z
dGFjay5hcHBlbmQoU3RhY2tPYmplY3QoKSk7CisgICAgbV9zdGFjay5sYXN0KCkuc3VyZmFjZSA9
IG5ld1RhcmdldDsKKworICAgIC8vIFdlIGNvcHkgdGhlIHNjcmVlbiBvY2NsdXNpb24gaW50byB0
aGUgbmV3IFJlbmRlclN1cmZhY2Ugc3VidHJlZSwgYnV0IHdlIG5ldmVyIGNvcHkgaW4gdGhlCisg
ICAgLy8gdGFyZ2V0IG9jY2x1c2lvbiwgc2luY2Ugd2UgYXJlIGxvb2tpbmcgYXQgYSBuZXcgUmVu
ZGVyU3VyZmFjZSB0YXJnZXQuCisKKyAgICAvLyBJZiB3ZSBhcmUgZW50ZXJpbmcgYSBzdWJ0cmVl
IHRoYXQgaXMgZ29pbmcgdG8gbW92ZSBwaXhlbHMgYXJvdW5kLCB0aGVuIHRoZSBvY2NsdXNpb24g
d2UndmUgY29tcHV0ZWQKKyAgICAvLyBzbyBmYXIgd29uJ3QgYXBwbHkgdG8gdGhlIHBpeGVscyB3
ZSdyZSBkcmF3aW5nIGhlcmUgaW4gdGhlIHNhbWUgd2F5LiBXZSBkaXNjYXJkIHRoZSBvY2NsdXNp
b24gdGh1cworICAgIC8vIGZhciB0byBiZSBzYWZlLCBhbmQgZW5zdXJlIHdlIGRvbid0IGN1bGwg
YW55IHBpeGVscyB0aGF0IGFyZSBtb3ZlZCBzdWNoIHRoYXQgdGhleSBiZWNvbWUgdmlzaWJsZS4K
KyAgICBib29sIGVudGVyaW5nU3VidHJlZVRoYXRNb3Zlc1BpeGVscyA9IG5ld0FuY2VzdG9yVGhh
dE1vdmVzUGl4ZWxzICYmIG5ld0FuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzICE9IG9sZEFuY2VzdG9y
VGhhdE1vdmVzUGl4ZWxzOworCisgICAgYm9vbCBjb3B5U2NyZWVuT2NjbHVzaW9uRm9yd2FyZCA9
IG1fc3RhY2suc2l6ZSgpID4gMSAmJiAhZW50ZXJpbmdTdWJ0cmVlVGhhdE1vdmVzUGl4ZWxzOwor
ICAgIGlmIChjb3B5U2NyZWVuT2NjbHVzaW9uRm9yd2FyZCkgeworICAgICAgICBpbnQgbGFzdElu
ZGV4ID0gbV9zdGFjay5zaXplKCkgLSAxOworICAgICAgICBtX3N0YWNrW2xhc3RJbmRleF0ub2Nj
bHVzaW9uSW5TY3JlZW4gPSBtX3N0YWNrW2xhc3RJbmRleCAtIDFdLm9jY2x1c2lvbkluU2NyZWVu
OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZT4KK3ZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IExheWVy
VHlwZSogb3duaW5nTGF5ZXIsIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBmaW5pc2hlZFRhcmdl
dCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBvd25pbmdMYXllciBwYXJhbWV0ZXIgd2hl
biB3ZSBjYW4gZ2V0IGFsbCB0aGUgaW5mbyBmcm9tIHRoZSBzdXJmYWNlLgorICAgIEFTU0VSVChv
d25pbmdMYXllci0+cmVuZGVyU3VyZmFjZSgpID09IGZpbmlzaGVkVGFyZ2V0KTsKKworICAgIC8v
IE1ha2Ugc3VyZSB3ZSBrbm93IGFib3V0IHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICBlbnRlclRh
cmdldFJlbmRlclN1cmZhY2UoZmluaXNoZWRUYXJnZXQpOworCisgICAgaWYgKG93bmluZ0xheWVy
LT5tYXNrTGF5ZXIoKSB8fCBmaW5pc2hlZFRhcmdldC0+ZHJhd09wYWNpdHkoKSA8IDEgfHwgZmlu
aXNoZWRUYXJnZXQtPmZpbHRlcnMoKS5oYXNGaWx0ZXJUaGF0QWZmZWN0c09wYWNpdHkoKSkgewor
ICAgICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IFJlZ2lvbigpOworICAg
ICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCA9IFJlZ2lvbigpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitzdGF0aWMgaW5saW5l
IFJlZ2lvbiB0cmFuc2Zvcm1TdXJmYWNlT3BhcXVlUmVnaW9uKGNvbnN0IFJlbmRlclN1cmZhY2VU
eXBlKiBzdXJmYWNlLCBjb25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICAvLyBWZXJpZnkgdGhhdCByZWN0cyB3aXRoaW4gdGhl
IHxzdXJmYWNlfCB3aWxsIHJlbWFpbiByZWN0cyBpbiBpdHMgdGFyZ2V0IHN1cmZhY2UgYWZ0ZXIg
YXBwbHlpbmcgfHRyYW5zZm9ybXwuIElmIHRoaXMgaXMgdHJ1ZSwgdGhlbgorICAgIC8vIGFwcGx5
IHx0cmFuc2Zvcm18IHRvIGVhY2ggcmVjdCB3aXRoaW4gfHJlZ2lvbnwgaW4gb3JkZXIgdG8gdHJh
bnNmb3JtIHRoZSBlbnRpcmUgUmVnaW9uLgorCisgICAgSW50UmVjdCBib3VuZHMgPSByZWdpb24u
Ym91bmRzKCk7CisgICAgRmxvYXRSZWN0IGNlbnRlcmVkQm91bmRzKC1ib3VuZHMud2lkdGgoKSAv
IDIuMCwgLWJvdW5kcy5oZWlnaHQoKSAvIDIuMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWln
aHQoKSk7CisgICAgRmxvYXRRdWFkIHRyYW5zZm9ybWVkQm91bmRzUXVhZCA9IHRyYW5zZm9ybS5t
YXBRdWFkKEZsb2F0UXVhZChjZW50ZXJlZEJvdW5kcykpOworICAgIGlmICghdHJhbnNmb3JtZWRC
b3VuZHNRdWFkLmlzUmVjdGlsaW5lYXIoKSkKKyAgICAgICAgcmV0dXJuIFJlZ2lvbigpOworCisg
ICAgUmVnaW9uIHRyYW5zZm9ybWVkUmVnaW9uOworCisgICAgSW50UmVjdCBzdXJmYWNlQm91bmRz
ID0gc3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBy
ZWdpb24ucmVjdHMoKTsKKyAgICBWZWN0b3I8SW50UmVjdD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlY3RzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBp
ID0gcmVjdHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgeworICAgICAgICBGbG9hdFJlY3QgY2Vu
dGVyZWRPcmlnaW5SZWN0KC1pLT53aWR0aCgpIC8gMi4wICsgaS0+eCgpIC0gc3VyZmFjZUJvdW5k
cy54KCksIC1pLT5oZWlnaHQoKSAvIDIuMCArIGktPnkoKSAtIHN1cmZhY2VCb3VuZHMueSgpLCBp
LT53aWR0aCgpLCBpLT5oZWlnaHQoKSk7CisgICAgICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1lZFJl
Y3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoY2VudGVyZWRPcmlnaW5SZWN0KSk7Cisg
ICAgICAgIHRyYW5zZm9ybWVkUmVnaW9uLnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0cmFuc2Zvcm1l
ZFJlY3QpKTsKKyAgICB9CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVnaW9uOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9p
ZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojps
ZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFy
Z2V0KQoreworICAgIGludCBsYXN0SW5kZXggPSBtX3N0YWNrLnNpemUoKSAtIDE7CisgICAgYm9v
bCBzdXJmYWNlV2lsbEJlQXRUb3BBZnRlclBvcCA9IG1fc3RhY2suc2l6ZSgpID4gMSAmJiBtX3N0
YWNrW2xhc3RJbmRleCAtIDFdLnN1cmZhY2UgPT0gbmV3VGFyZ2V0OworCisgICAgLy8gV2UgbWVy
Z2UgdGhlIHNjcmVlbiBvY2NsdXNpb24gZnJvbSB0aGUgY3VycmVudCBSZW5kZXJTdXJmYWNlIHN1
YnRyZWUgb3V0IHRvIGl0cyBwYXJlbnQgdGFyZ2V0IFJlbmRlclN1cmZhY2UuCisgICAgLy8gVGhl
IHRhcmdldCBvY2NsdXNpb24gY2FuIGJlIG1lcmdlZCBvdXQgYXMgd2VsbCBidXQgbmVlZHMgdG8g
YmUgdHJhbnNmb3JtZWQgdG8gdGhlIG5ldyB0YXJnZXQuCisKKyAgICBjb25zdCBSZW5kZXJTdXJm
YWNlVHlwZSogb2xkVGFyZ2V0ID0gbV9zdGFja1tsYXN0SW5kZXhdLnN1cmZhY2U7CisgICAgUmVn
aW9uIG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0ID0gdHJhbnNmb3JtU3VyZmFjZU9wYXF1
ZVJlZ2lvbjxSZW5kZXJTdXJmYWNlVHlwZT4ob2xkVGFyZ2V0LCBtX3N0YWNrW2xhc3RJbmRleF0u
b2NjbHVzaW9uSW5UYXJnZXQsIG9sZFRhcmdldC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIGlm
IChzdXJmYWNlV2lsbEJlQXRUb3BBZnRlclBvcCkgeworICAgICAgICAvLyBNZXJnZSB0aGUgdG9w
IG9mIHRoZSBzdGFjayBkb3duLgorCisgICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2Nj
bHVzaW9uSW5TY3JlZW4udW5pdGUobV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluU2NyZWVu
KTsKKyAgICAgICAgbV9zdGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblRhcmdldC51bml0
ZShvbGRUYXJnZXRPY2NsdXNpb25Jbk5ld1RhcmdldCk7CisgICAgICAgIG1fc3RhY2sucmVtb3Zl
TGFzdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlcGxhY2UgdGhlIHRvcCBvZiB0aGUg
c3RhY2sgd2l0aCB0aGUgbmV3IHB1c2hlZCBzdXJmYWNlLiBDb3B5IHRoZSBvY2NsdWRlZCBzY3Jl
ZW4gcmVnaW9uIHRvIHRoZSB0b3AuCisgICAgICAgIG1fc3RhY2subGFzdCgpLnN1cmZhY2UgPSBu
ZXdUYXJnZXQ7CisgICAgICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0ID0gb2xk
VGFyZ2V0T2NjbHVzaW9uSW5OZXdUYXJnZXQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMYXllclR5cGU+CitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRU
b1NjcmVlblNwYWNlVHJhbnNmb3JtKGNvbnN0IExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgSW50
U2l6ZSBib3VuZHNJbkxheWVyU3BhY2UgPSBsYXllci0+Ym91bmRzKCk7CisgICAgSW50U2l6ZSBi
b3VuZHNJbkNvbnRlbnRTcGFjZSA9IGxheWVyLT5jb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KTsKKworICAgIGlmIChib3VuZHNJbkNvbnRlbnRTcGFjZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB0cmFuc2Zvcm07CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5
ZXIgc3BhY2UKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFj
ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0
aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5o
ZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0
KCkpKTsKKworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFy
Z2V0U3VyZmFjZVRyYW5zZm9ybShjb25zdCBMYXllclR5cGUqIGxheWVyKQoreworICAgIEludFNp
emUgYm91bmRzSW5MYXllclNwYWNlID0gbGF5ZXItPmJvdW5kcygpOworICAgIEludFNpemUgYm91
bmRzSW5Db250ZW50U3BhY2UgPSBsYXllci0+Y29udGVudEJvdW5kcygpOworCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKworICAg
IGlmIChib3VuZHNJbkNvbnRlbnRTcGFjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cmFu
c2Zvcm07CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5ZXIgc3BhY2UK
KyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFjZS53aWR0aCgp
IC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0aCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5oZWlnaHQoKSAv
IHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0KCkpKTsKKwor
ICAgIC8vIFRoZSBkcmF3IHRyYW5zZm9ybSBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgaW4gdGhl
IG1pZGRsZSBvZiB0aGUgbGF5ZXIuCisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzSW5D
b250ZW50U3BhY2Uud2lkdGgoKSAvIDIuMCwgLWJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgp
IC8gMi4wKTsKKworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgUmVnaW9uIGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcihjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKQoreworICAgIFJlZ2lvbiBvcGFxdWVSZWdpb247CisKKyAgICBGbG9hdFF1YWQg
dW5vY2NsdWRlZFF1YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQobGF5ZXItPnZpc2li
bGVMYXllclJlY3QoKSkpOworICAgIGJvb2wgaXNQYWludGVkQXhpc0FsaWduZWQgPSB1bm9jY2x1
ZGVkUXVhZC5pc1JlY3RpbGluZWFyKCk7CisgICAgaWYgKCFpc1BhaW50ZWRBeGlzQWxpZ25lZCkK
KyAgICAgICAgcmV0dXJuIG9wYXF1ZVJlZ2lvbjsKKworICAgIGlmIChsYXllci0+b3BhcXVlKCkp
CisgICAgICAgIG9wYXF1ZVJlZ2lvbiA9IGVuY2xvc2VkSW50UmVjdCh1bm9jY2x1ZGVkUXVhZC5i
b3VuZGluZ0JveCgpKTsKKyAgICAvLyBGSVhNRTogQ2FwdHVyZSBvcGFxdWUgcGFpbnRzOiBlbHNl
IG9wYXF1ZVJlZ2lvbiA9IGxheWVyLT5vcGFxdWVDb250ZW50c1JlZ2lvbih0cmFuc2Zvcm0pOwor
ICAgIHJldHVybiBvcGFxdWVSZWdpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGNvbnN0IExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgQVNTRVJUKCFtX3N0YWNrLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5s
YXN0KCkuc3VyZmFjZSk7CisKKyAgICBpZiAobGF5ZXItPmRyYXdPcGFjaXR5KCkgIT0gMSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVu
U3BhY2UgPSBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTdXJmYWNlID0gY29udGVu
dFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKKworICAgIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuLnVuaXRlKGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9TY3JlZW5TcGFjZSkpOworICAgIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LnVuaXRlKGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9UYXJnZXRTdXJmYWNlKSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5z
Zm9ybSwgY29uc3QgUmVnaW9uJiBvY2NsdXNpb24pCit7CisgICAgRmxvYXRRdWFkIHRyYW5zZm9y
bWVkUXVhZCA9IGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChjb250ZW50
UmVjdCkpOworICAgIHJldHVybiBvY2NsdXNpb24uY29udGFpbnModHJhbnNmb3JtZWRRdWFkLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpvY2NsdWRlZChjb25zdCBMYXllclR5cGUq
IGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICBpZiAobV9z
dGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOworCisg
ICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3Jl
ZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5TY3JlZW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGVzdENvbnRlbnRS
ZWN0T2NjbHVkZWQoY29udGVudFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08
TGF5ZXJUeXBlPihsYXllciksIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0KSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorYm9vbCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpzdXJmYWNlT2Nj
bHVkZWQoY29uc3QgTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRl
bnRSZWN0KSBjb25zdAoreworICAgIC8vIEEgc3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgbGF5
ZXJzIGRyYXdpbmcgaW50byBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gdXNlIG9jY2x1c2lvbiBmcm9t
IG9uZSBzcG90IGRvd24gb24gdGhlIHN0YWNrLgorICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3Qo
KS5zdXJmYWNlKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VDb250ZW50VG9T
Y3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5
ZXIpOworCisgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3Rh
Y2suc2l6ZSgpLTJdOworICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChzdXJmYWNlQ29u
dGVudFJlY3QsIHN1cmZhY2VDb250ZW50VG9TY3JlZW5TcGFjZSwgc2Vjb25kTGFzdC5vY2NsdXNp
b25JblNjcmVlbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gRGV0ZXJtaW5lcyB3aGF0IHBvcnRpb24gb2YgcmVjdCwgaWYgYW55LCBpcyB1bm9jY2x1
ZGVkIChub3Qgb2NjbHVkZWQgYnkgcmVnaW9uKS4gSWYKKy8vIHRoZSByZXN1bHRpbmcgdW5vY2Ns
dWRlZCByZWdpb24gaXMgbm90IHJlY3Rhbmd1bGFyLCB3ZSByZXR1cm4gYSByZWN0IGNvbnRhaW5p
bmcgaXQuCitzdGF0aWMgaW5saW5lIEludFJlY3QgcmVjdFN1YnRyYWN0UmVnaW9uKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQoreworICAgIFJlZ2lvbiByZWN0UmVn
aW9uKHJlY3QpOworICAgIFJlZ2lvbiBpbnRlcnNlY3RSZWdpb24oaW50ZXJzZWN0KHJlZ2lvbiwg
cmVjdFJlZ2lvbikpOworCisgICAgaWYgKGludGVyc2VjdFJlZ2lvbi5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiByZWN0OworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChpbnRlcnNlY3RSZWdp
b24pOworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IHJlY3RSZWdpb24uYm91bmRzKCk7CisgICAg
cmV0dXJuIGJvdW5kc1JlY3Q7Cit9CisKK3N0YXRpYyBJbnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVk
Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9u
KQoreworICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFF1YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zv
cm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3QpKTsKKyAgICBpZiAoIXRyYW5zZm9ybWVk
UXVhZC5pc1JlY3RpbGluZWFyKCkpCisgICAgICAgIHJldHVybiBjb250ZW50UmVjdDsKKyAgICAv
LyBUYWtlIHRoZSBlbmNsb3NpbmdJbnRSZWN0IGF0IGVhY2ggc3RlcCBoZXJlLCBhcyB3ZSB3YW50
IHRvIGNvbnRhaW4gYW55IHVub2NjbHVkZWQgcGFydGlhbCBwaXhlbHMgaW4gdGhlIHJlc3VsdGlu
ZyBJbnRSZWN0LgorICAgIEludFJlY3Qgc2hydW5rUmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihl
bmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUXVhZC5ib3VuZGluZ0JveCgpKSwgb2NjbHVzaW9u
KTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjb250ZW50
U3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QoRmxvYXRSZWN0KHNocnVua1JlY3QpKSk7
CisgICAgLy8gVGhlIHVzZSBvZiBlbmNsb3NpbmdJbnRSZWN0LCB3aXRoIGZsb2F0aW5nIHBvaW50
IHJvdW5kaW5nLCBjYW4gZ2l2ZSB1cyBhIHJlc3VsdCB0aGF0IGlzIG5vdCBhIHN1Yi1yZWN0IG9m
IGNvbnRlbnRSZWN0LCBidXQgb3VyCisgICAgLy8gcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBhIHN1
Yi1yZWN0LgorICAgIHJldHVybiBpbnRlcnNlY3Rpb24odW5vY2NsdWRlZFJlY3QsIGNvbnRlbnRS
ZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJT
dXJmYWNlVHlwZT4KK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSog
bGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAoreworICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRSZWN0OworCisgICAgLy8gV2Ug
d2FudCB0byByZXR1cm4gYSByZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSB2aXNpYmxlIHBhcnRz
IG9mIHxjb250ZW50UmVjdHwgaW4gYm90aCBzY3JlZW4gc3BhY2UgYW5kIGluIHRoZSB0YXJnZXQg
c3VyZmFjZS4KKyAgICAvLyBTbyB3ZSBmaW5kIHRoZSB2aXNpYmxlIHBhcnRzIG9mIHxjb250ZW50
UmVjdHwgaW4gZWFjaCBzcGFjZSwgYW5kIHRha2UgdGhlIGludGVyc2VjdGlvbi4KKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlID0gY29udGVudFRvU2NyZWVu
U3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zv
cm08TGF5ZXJUeXBlPihsYXllcik7CisKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9
IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVl
blNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7CisgICAgSW50UmVjdCB1
bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRS
ZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRh
cmdldCk7CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRJblNjcmVlbiwgdW5v
Y2NsdWRlZEluVGFyZ2V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVj
dChjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJl
Y3QpIGNvbnN0Cit7CisgICAgLy8gQSBzdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBsYXllcnMg
ZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZyb20gb25l
IHNwb3QgZG93biBvbiB0aGUgc3RhY2suCisgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKKyAg
ICAgICAgcmV0dXJuIHN1cmZhY2VDb250ZW50UmVjdDsKKworICAgIEFTU0VSVChsYXllci0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0
YWNrLmxhc3QoKS5zdXJmYWNlKTsKKworICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgcmVjdCB0
aGF0IGNvbnRhaW5zIGFsbCB0aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGJv
dGggc2NyZWVuIHNwYWNlIGFuZCBpbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8gU28gd2Ug
ZmluZCB0aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGVhY2ggc3BhY2UsIGFu
ZCB0YWtlIHRoZSBpbnRlcnNlY3Rpb24uCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250
ZW50VG9TY3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlw
ZT4obGF5ZXIpOworCisgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNr
W21fc3RhY2suc2l6ZSgpLTJdOworICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29t
cHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ29udGVudFJlY3QsIGNvbnRlbnRUb1Nj
cmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKTsKKworICAgIHJldHVybiB1
bm9jY2x1ZGVkSW5TY3JlZW47Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlw
ZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Citjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmN1cnJlbnRPY2NsdXNpb25JblNj
cmVlblNwYWNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICByZXR1cm4gbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW47Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Citjb25zdCBS
ZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlw
ZT46OmN1cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdAoreworICAgIEFTU0VS
VCghbV9zdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiBtX3N0YWNrLmxhc3QoKS5vY2NsdXNp
b25JblRhcmdldDsKK30KKworCisvLyBEZWNsYXJlIHRoZSBwb3NzaWJsZSBmdW5jdGlvbnMgaGVy
ZSBmb3IgdGhlIGxpbmtlci4KK3RlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjplbnRlclRhcmdldFJlbmRlclN1
cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpOwordGVtcGxhdGUg
dm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT46OmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBMYXllckNocm9taXVt
KiBvd25pbmdMYXllciwgY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBmaW5pc2hlZFRhcmdl
dCk7Cit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPjo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoY29uc3Qg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpOwordGVtcGxhdGUgdm9pZCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46Om1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGNvbnN0IExheWVyQ2hyb21pdW0qKTsKK3RlbXBsYXRlIGJv
b2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+OjpvY2NsdWRlZChjb25zdCBMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OnN1cmZhY2VPY2NsdWRlZChjb25z
dCBMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25z
dDsKK3RlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVt
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5
ZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKK3RlbXBsYXRl
IEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0+OjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyQ2hy
b21pdW0qLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwordGVtcGxh
dGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bT46OmN1cnJlbnRPY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29u
c3Q7Cit0ZW1wbGF0ZSBjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6Y3VycmVudE9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpIGNvbnN0OworCit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShj
b25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7Cit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVz
aW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmZpbmlzaGVkVGFy
Z2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIsIGNvbnN0IEND
UmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJnZXQpOwordGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7Cit0ZW1wbGF0
ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNvbnN0IENDTGF5ZXJJbXBsKik7Cit0ZW1wbGF0
ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46Om9jY2x1ZGVkKGNvbnN0IENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJ
bXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpzdXJmYWNlT2NjbHVkZWQoY29uc3QgQ0NMYXllckltcGwq
LCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwordGVtcGxhdGUgSW50
UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+
Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCkgY29uc3Q7Cit0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29u
dGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVu
dFJlY3QpIGNvbnN0OwordGVtcGxhdGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJC
YXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5TY3Jl
ZW5TcGFjZSgpIGNvbnN0OwordGVtcGxhdGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKCkgY29uc3Q7CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDFjODMzZTFhOWJhNGVlZGU5YWJkZjQzMDIxZTdlZDdiNGM0
ZmYxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ09jY2x1c2lvblRyYWNrZXJfaAorI2RlZmluZSBDQ09jY2x1c2lvblRyYWNr
ZXJfaAorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2U7CitjbGFzcyBMYXllckNocm9t
aXVtOworY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOworCisvLyBUaGlzIGNsYXNzIGlzIHVz
ZWQgdG8gdHJhY2sgb2NjbHVzaW9uIG9mIGxheWVycyB3aGlsZSB0cmF2ZXJzaW5nIHRoZW0gaW4g
YSBmcm9udC10by1iYWNrIG9yZGVyLiBBcyBlYWNoIGxheWVyIGlzIHZpc2l0ZWQsIG9uZSBvZiB0
aGUKKy8vIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBpcyBjYWxsZWQgdG8gbm90aWZ5IGl0IGFib3V0
IHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLgorLy8gVGhlbiwgb2NjbHVzaW9uIGluIHRoZSBj
b250ZW50IHNwYWNlIG9mIHRoZSBjdXJyZW50IGxheWVyIG1heSBiZSBxdWVyaWVkLCB2aWEgbWV0
aG9kcyBzdWNoIGFzIG9jY2x1ZGVkKCkgYW5kIHVub2NjbHVkZWRDb250ZW50UmVjdCgpLgorLy8g
SWYgdGhlIGN1cnJlbnQgbGF5ZXIgb3ducyBhIFJlbmRlclN1cmZhY2UsIHRoZW4gb2NjbHVzaW9u
IG9uIHRoYXQgUmVuZGVyU3VyZmFjZSBtYXkgYWxzbyBiZSBxdWVyaWVkIHZpYSBzdXJmYWNlT2Nj
bHVkZWQoKSBhbmQgc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdCgpLgorLy8gRmluYWxseSwg
b25jZSBmaW5pc2hlZCB3aXRoIHRoZSBsYXllciwgb2NjbHVzaW9uIGJlaGluZCB0aGUgbGF5ZXIg
c2hvdWxkIGJlIG1hcmtlZCBieSBjYWxsaW5nIG1hcmtPY2NsdWRlZEJlaGluZExheWVyKCkuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgor
Y2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyQmFzZSB7CitwdWJsaWM6CisgICAgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZSgpIHsgfQorCisgICAgLy8gQ2FsbGVkIHdoZW4gdmlzaXRpbmcgYSBsYXllciBy
ZXByZXNlbnRpbmcgaXRzZWxmLiBJZiB0aGUgdGFyZ2V0IHdhcyBub3QgYWxyZWFkeSBjdXJyZW50
LCB0aGVuIHRoaXMgaW5kaWNhdGVzIHdlIGhhdmUgZW50ZXJlZCBhIG5ldyBzdXJmYWNlIHN1YnRy
ZWUuCisgICAgdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIG5ld1RhcmdldCk7CisKKyAgICAvLyBDYWxsZWQgd2hlbiB2aXNpdGluZyBhIGxheWVy
IHJlcHJlc2VudGluZyBhIHRhcmdldCBzdXJmYWNlLiBUaGlzIGluZGljYXRlcyB3ZSBoYXZlIHZp
c2l0ZWQgYWxsIHRoZSBsYXllcnMgd2l0aGluIHRoZSBzdXJmYWNlLCBhbmQgd2UgbWF5CisgICAg
Ly8gcGVyZm9ybSBhbnkgc3VyZmFjZS13aWRlIG9wZXJhdGlvbnMuCisgICAgdm9pZCBmaW5pc2hl
ZFRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIGZpbmlzaGVkVGFyZ2V0KTsKKworICAgIC8vIENhbGxlZCB3aGVuIHZpc2l0aW5nIGEg
bGF5ZXIgcmVwcmVzZW50aW5nIGEgY29udHJpYnV0aW5nIHN1cmZhY2UuIFRoaXMgIGluZGljYXRl
cyB0aGF0IHdlIGFyZSBsZWF2aW5nIG91ciBjdXJyZW50IHN1cmZhY2UsIGFuZAorICAgIC8vIGVu
dGVyaW5nIHRoZSBuZXcgb25lLiBXZSB0aGVuIHBlcmZvcm0gYW55IG9wZXJhdGlvbnMgcmVxdWly
ZWQgZm9yIG1lcmdpbmcgcmVzdWx0cyBmcm9tIHRoZSBjaGlsZCBzdWJ0cmVlIGludG8gaXRzIHBh
cmVudC4KKyAgICB2b2lkIGxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1
cmZhY2VUeXBlKiBuZXdUYXJnZXQpOworCisgICAgLy8gQWRkIHRoZSBsYXllcidzIG9jY2x1c2lv
biB0byB0aGUgdHJhY2tlZCBzdGF0ZS4KKyAgICB2b2lkIG1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGNvbnN0IExheWVyVHlwZSopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBy
ZWN0IGluIGNvbnRlbnQgc3BhY2UgZm9yIHRoZSBsYXllciBpcyBmdWxseSBvY2NsdWRlZCBpbiBl
aXRoZXIgc2NyZWVuIHNwYWNlIG9yIHRoZSBsYXllcidzIHRhcmdldCBzdXJmYWNlLgorICAgIGJv
b2wgb2NjbHVkZWQoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
IGNvbnN0OworICAgIC8vIEdpdmVzIGFuIHVub2NjbHVkZWQgc3ViLXJlY3Qgb2YgfGNvbnRlbnRS
ZWN0fCBpbiB0aGUgY29udGVudCBzcGFjZSBvZiB0aGUgbGF5ZXIuIFVzZWQgd2hlbiBjb25zaWRl
cmluZyBvY2NsdXNpb24gZm9yIGEgbGF5ZXIgdGhhdCBwYWludHMvZHJhd3Mgc29tZXRoaW5nLgor
ICAgIEludFJlY3QgdW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSosIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZ2l2ZW4gcmVjdCBpbiBjb250ZW50IHNwYWNlIGZvciB0aGUgUmVuZGVyU3VyZmFjZSBvd25l
ZCBieSB0aGUgbGF5ZXIgaXMgZnVsbHkgb2NjbHVkZWQgaW4gZWl0aGVyIHNjcmVlbiBzcGFjZSBv
ciB0aGUgbGF5ZXIncyB0YXJnZXQgc3VyZmFjZS4KKyAgICBib29sIHN1cmZhY2VPY2NsdWRlZChj
b25zdCBMYXllclR5cGUqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAg
Ly8gR2l2ZXMgYW4gdW5vY2NsdWRlZCBzdWItcmVjdCBvZiB8Y29udGVudFJlY3R8IGluIHRoZSBj
b250ZW50IHNwYWNlIG9mIHRoZSBSZW5kZXJTdXJmYWNlIG93bmVkIGJ5IHRoZSBsYXllci4gVXNl
ZCB3aGVuIGNvbnNpZGVyaW5nIG9jY2x1c2lvbiBmb3IgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICBJ
bnRSZWN0IHN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJUeXBlKiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OworCisgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGVzZSBpbiBmdXR1cmUsIHRoZXkgYXJlIHRvIG1ha2UgQ0xzIGZvciB0cmFuc2l0aW9uaW5nIHRv
IHRoaXMgZWFzaWVyLgorICAgIGNvbnN0IFJlZ2lvbiYgY3VycmVudE9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKSBjb25zdDsKKyAgICBjb25zdCBSZWdpb24mIGN1cnJlbnRPY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHN0cnVjdCBTdGFja09iamVjdCB7
CisgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlOworICAgICAgICBSZWdp
b24gb2NjbHVzaW9uSW5TY3JlZW47CisgICAgICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldDsK
KyAgICB9OworCisgICAgLy8gVGhlIHN0YWNrIGhvbGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1
YnRyZWVzIGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBs
ZWF2ZSBhIHN1YnRyZWUgd2UgbWF5CisgICAgLy8gYXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90
IHRvIHRoZSBwYXJ0cyBvdXRzaWRlIHRoZSBzdWJ0cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRp
bWUgd2Ugc2VlIGEgbmV3IHN1YnRyZWUgdW5kZXIgYSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdl
dCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4gVGhpcyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVw
cmVzZW50aW5nIGl0c2VsZiwgb3IgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4g
d2UgdmlzaXQgYSB0YXJnZXQgc3VyZmFjZSwgd2UgYXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRy
ZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2
aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRv
IHRoZSBjdXJyZW50IHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgor
ICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGlu
ZyBzdXJmYWNlLCB0aGUgY3VycmVudCB0YXJnZXQgd2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRo
ZSBzdGFjayBzaW5jZSB3ZSBqdXN0IGNhbWUgZnJvbSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2Uu
CisgICAgLy8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3
aXRoIHRoZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9u
dG8gdGhlIHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorICAgIFZlY3RvcjxTdGFja09iamVj
dCwgMT4gbV9zdGFjazsKKworcHJpdmF0ZToKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlKTsKK307CisKK3R5cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+IENDT2NjbHVzaW9uVHJhY2tl
cjsKK3R5cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlPiBDQ09jY2x1c2lvblRyYWNrZXJJbXBsOworCit9CisjZW5kaWYgLy8gQ0NPY2NsdXNp
b25UcmFja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDZlOWE0ZDBkZmE5
NWZiNzQ4NzFlNWZmMzlmYjI4YWRmZmRhYWQ5ZmIuLjlhYTVkMmNhNjViZDFiZjYwNzU1OGUzMDg5
ZTk5NjEwYTBmNDY2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzUsNiAr
NzUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oJywKKyAgICAgICAgICAgICd0ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NRdWFkQ3Vs
bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGIxZmE3MjkxODQwMWUzMjQwZTQxZDEzZDJlMGMyN2Qw
YzU2YWQ3YzUuLmQyZTFjZmVmOTNlMjgyMTY2ZGE4NTEyNTZjOTVjMGU2NTEyYzY5YmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ0NMYXllclRy
ZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlJl
Z2lvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxn
bW9jay9nbW9jay5oPgpAQCAtMzYsMTIgKzM1LDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLSNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAotICAgIEVYUEVDVF9FUShhLngo
KSwgYi54KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKLSAgICBFWFBFQ1Rf
RVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCi0gICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIu
aGVpZ2h0KCkpOwotCiBuYW1lc3BhY2UgewogCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29u
c3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQpAQCAtNjAyLDE3NCArNTk1LDQg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVu
ZGVyU3VyZmFjZXMpCiAvLyAgLSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uCiAvLwogCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVy
QWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uKQotewotICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUg
cmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24gb2NjbHVkZWQ7Ci0g
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFyZW50
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7Ci0K
LSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OwotCi0gICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKLQotICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVy
IHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUg
dG8gZml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0g
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwot
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOwotCi0gICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKLSAgICBsYXllci0+
YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7Ci0gICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKLSAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKLX0KLQotVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlv
bikKLXsKLSAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJl
aW5nIHVzZWQuCi0gICAgUmVnaW9uIG9jY2x1ZGVkOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OwotICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbGF5ZXJUcmFuc2Zvcm07Ci0gICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUw
KTsKLSAgICBsYXllclRyYW5zZm9ybS5yb3RhdGUoOTApOwotICAgIGxheWVyVHJhbnNmb3JtLnRy
YW5zbGF0ZSgtMjUwLCAtMjUwKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7Ci0gICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0s
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIElu
dFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0KLSAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOwot
Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0Owot
ICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6IHdoZW4g
d2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVy
VHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICBvY2NsdWRlZCA9
IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1
ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVk
ZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkp
OwotfQotCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09j
Y2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQotewotICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0
aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24gb2NjbHVkZWQ7
Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFy
ZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7
Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKLSAgICBsYXllclRy
YW5zZm9ybS50cmFuc2xhdGUoMjAsIDIwKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7
Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFu
c2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAz
MCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0KLSAgICBsYXllci0+c2V0T3BhcXVlKHRy
dWUpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OwotICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6
IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBD
Q0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICBvY2Ns
dWRlZCA9IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNl
KG9jY2x1ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwg
b2NjbHVkZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5z
aXplKCkpOwotfQotCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1Nl
bGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQotewotICAgIC8vIFRoaXMgdGVz
dHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24g
b2NjbHVkZWQ7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7Ci0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRD
aGlsZChjaGlsZCk7Ci0gICAgY2hpbGQtPmFkZENoaWxkKGxheWVyKTsKLQotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOwotICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0
ZSgyNTAsIDI1MCk7Ci0gICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKLSAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7Ci0KLSAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxk
VHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwg
ZmFsc2UpOwotCi0gICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Ci0gICAgbGF5ZXIt
PnNldE9wYXF1ZSh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLQot
ICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIg
YmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUs
IHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwotCi0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OwotCi0gICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKLSAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVk
ZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwg
NDAsIDcwLCA2MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKLSAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1
ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKLQotICAgIC8qIEp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92
ZSBvcGFxdWUgcmVjdCBmcm9tIHxsYXllcnw6Ci0gICAgICAgICAgICAgICAxMDAKLSAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnw6IC8vLy8vCi0gICAgICB8ICAgIDMwICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgIHwKLSAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKwotICAxMDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICA9PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAg
ICAgICAgICB8Ci0gICAgICB8ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsgIHwKLSAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAg
fAotICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8Ci0g
ICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKLSAgICAg
ICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAotICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAyMHwxMHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8MTB8Ci0gICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLXwtLSsKLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAg
ICAgICAgfAotICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCi0gICAgICovCi19Ci0KIH0gLy8gbmFt
ZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVz
aW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1
c2lvblRyYWNrZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTczMTBiYWM3OTlmZDE0MjMxOTkwYTcy
OWU1ZWM0NWZlMTE0YzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDT2NjbHVz
aW9uVHJhY2tlci5oIgorCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgor
CisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBc
CisgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIu
eSgpKTsgXAorICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBF
Q1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CisKK25hbWVzcGFjZSB7CisKK3ZvaWQgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgb3BhcXVlKQorewor
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0U3VibGF5
ZXJUcmFuc2Zvcm0oc3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2lu
dChhbmNob3IpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXIt
PnNldEJvdW5kcyhib3VuZHMpOworICAgIGxheWVyLT5zZXRPcGFxdWUob3BhcXVlKTsKK30KKwor
Y2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQgOiBwdWJsaWMgTGF5ZXJD
aHJvbWl1bSB7CitwdWJsaWM6CisgICAgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQoKQorICAgICAgICA6IExheWVyQ2hyb21pdW0oKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworLy8g
QSBzdWJjbGFzcyB0byBleHBvc2UgdGhlIHRvdGFsIGN1cnJlbnQgb2NjbHVzaW9uLgorY2xhc3Mg
VGVzdENDT2NjbHVzaW9uVHJhY2tlciA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXIgeworcHVi
bGljOgorICAgIFJlZ2lvbiBvY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3QgeyByZXR1cm4g
Q0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbjsgfQor
ICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBDQ09j
Y2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0OyB9CisKKyAg
ICB2b2lkIHNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoY29uc3QgUmVnaW9uJiByZWdpb24pIHsg
Q0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IHJl
Z2lvbjsgfQorICAgIHZvaWQgc2V0T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKGNvbnN0IFJlZ2lv
biYgcmVnaW9uKSB7IENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9u
SW5UYXJnZXQgPSByZWdpb247IH0KK307CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
bGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRo
ZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQobGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6
ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwor
CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKwor
ICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQo
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQ
RUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNzAsIDcwKSkp
OworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKS5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMjksIDcwLCA3MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyOSwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMxLCAyOSwgNzAsIDcwKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDI5LCA3MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDMwLCAxLCA3MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDMxLCA3MCwgNzApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzEs
IDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcwLCAxKSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDMxLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMzEsIDcwLCA3
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDI5LCAzMSwgNzAsIDcwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxh
eWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQoreworICAgIC8vIFRoaXMgdGVz
dHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxh
eWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7Cisg
ICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xh
dGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXpl
KDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisK
KyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lv
bi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBF
Q1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZh
bHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9j
Y2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7
CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgyOSwgMzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMjksIDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAyOSwgNzAsIDcwKSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDI5LCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAsIDcwKSkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMjksIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMzAsIDEsIDcwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwg
NzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMSwgMzEsIDcwLCA3MCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMSwg
NzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDEwMCwgNzAsIDEpLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzEsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCAzMSwgNzAsIDcw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MjksIDMxLCA3MCwgNzApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5
ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCit7CisgICAgLy8gVGhpcyB0
ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7
CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7
CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJl
bnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVz
aW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgp
LmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTAsIDUwLCA1MCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwg
NTAsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUxLCA1MCwgNTApKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1
MCwgNTAsIDUwLCA1MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0
OSwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCg0OSwgNDksIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoNTAsIDQ5LCA1MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoNTEsIDQ5LCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNDksIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDEwMCwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCg1MSwgNTEsIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MSwgNTAsIDUwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDEwMCwgNTAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MSwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUxLCA1MCwgNTApKSk7
Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRS
ZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSBy
aWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgY2hp
bGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBj
aGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVu
ZGVyU3VyZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09j
Y2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCku
Ym91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwg
NDMwLCA2MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2Nj
bHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQz
MCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNo
aWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFs
c2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MSwg
NzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0
KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcxKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2Ns
dWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJn
ZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdldCgpLCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJm
YWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisg
ICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzksIDcwLCA2MCkpKTsKKworCisgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9j
Y2x1c2lvbiBmcm9tIHxsYXllcnw6CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0t
LS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8MzAg
IFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICA9PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAg
ICB8CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAg
ICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwK
KyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAg
ICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAg
ICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAg
ICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8
ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAg
ICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0t
fC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAr
LS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwx
MHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAg
fAorICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAg
ICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNp
b25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVh
ZHlPblN0YWNrKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3Jt
cyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsK
KyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBjaGlsZDIgPSBh
ZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJl
bnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsK
KyAgICBjaGlsZC0+YWRkQ2hpbGQobGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQy
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxk
VHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRl
KDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Y2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJ
bnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAvLyB8Y2hpbGQyfCBtYWtlcyB8cGFyZW50
fCdzIHN1cmZhY2UgZ2V0IGNvbnNpZGVyZWQgYnkgQ0NPY2NsdXNpb25UcmFja2VyIGZpcnN0LCBp
bnN0ZWFkIG9mIHxjaGlsZHwncy4gVGhpcyBleGVyY2lzZXMgZGlmZmVyZW50IGNvZGUgaW4KKyAg
ICAvLyBsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSwgYXMgdGhlIHRhcmdldCBzdXJmYWNlIGhh
cyBhbHJlYWR5IGJlZW4gc2Vlbi4KKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNo
aWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNjAsIDIwKSwgdHJ1ZSk7CisKKyAgICBj
aGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQt
PnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkp
OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShw
YXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIo
Y2hpbGQyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwg
MjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBF
WFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwgMjApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
LmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkp
OworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBF
Q1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwg
NDI5LCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQo
Y2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYw
LCA3MCkpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAg
ICAvLyBUaGlzIGlzIHRoZSBsaXR0bGUgcGllY2Ugbm90IG9jY2x1ZGVkIGJ5IGNoaWxkMgorICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOSwgNDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7Cisg
ICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgYm90aCBzaWRlcyBvZiBjaGlsZDIsIHNvIGl0IHdpbGwg
YmUgdGhlIG9yaWdpbmFsIHJlY3QuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5LCA0MzAs
IDYwLCA4MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIElu
dFJlY3QoOSwgNDMwLCA2MCwgODApKSk7CisgICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgdHdvIGFk
amFjZW50IHNpZGVzIG9mIGNoaWxkMiwgYW5kIHNob3VsZCBpbmNsdWRlZCB0aGUgdW5vY2NsdWRl
ZCBwYXJ0cyBvZiBlYWNoIHNpZGUuCisgICAgLy8gVGhpcyBhbHNvIGRlbW9uc3RyYXRlcyB0aGF0
IHRoZSByZWN0IGNhbiBiZSBhcmJpdHJhcnkgYW5kIGRvZXMgbm90IGdldCBjbGlwcGVkIHRvIHRo
ZSBsYXllcidzIHZpc2libGVMYXllclJlY3QoKS4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KC0xMCwgNDMwLCAyMCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
LmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA2MCwgNzApKSk7CisgICAgLy8gVGhpcyBleHRlbmRz
IHBhc3QgdGhyZWUgYWRqYWNlbnQgc2lkZXMgb2YgY2hpbGQyLCBzbyBpdCBzaG91bGQgY29udGFp
biB0aGUgdW5vY2NsdWRlZCBwYXJ0cyBvZiBlYWNoIHNpZGUuIFRoZSBsZWZ0CisgICAgLy8gYW5k
IGJvdHRvbSBlZGdlcyBhcmUgY29tcGxldGVseSB1bm9jY2x1ZGVkIGZvciBzb21lIHJvdy9jb2x1
bW4gc28gd2UgZ2V0IGJhY2sgdGhlIG9yaWdpbmFsIHF1ZXJ5IHJlY3QuCisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQyOSwgNjAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDcwLCA0MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNTAwLCA2MCwgMSksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMSwgNjAsIDcw
KSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJh
dyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3
MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJ
bnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihjaGlsZC5nZXQoKSk7CisgICAgLy8gfGNoaWxkMnwgc2hvdWxkIGdldCBtZXJn
ZWQgd2l0aCB0aGUgc3VyZmFjZSB3ZSBhcmUgbGVhdmluZyBub3cKKyAgICBvY2NsdXNpb24uZmlu
aXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdldCgpLCBjaGlsZC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcw
LCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
IEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworCisgICAgVmVjdG9yPEludFJlY3Q+IHNjcmVlbiA9IG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkucmVjdHMoKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gdGFyZ2V0ID0gb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCk7CisKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMw
LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5MCwgMzAsIDEwLCAxMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzMCwgNzAsIDcwKSkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA2MCwgMTApKSk7CisgICAgRVhQRUNUX0VR
KGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwg
NjAsIDEwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDYwLCAxMCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA2MCwgMTAp
KSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzAsIDMxLCA2MCwgMTApKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYwKSkpOworCisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMzAsIDMwLCA2MCwgMTApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjksIDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMzAsIDI5LCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoOTAsIDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMwLCAzMSwgNjAsIDEwKSkuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAs
IDYwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCA0MCwgMSwg
NjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgyOSwgNDAsIDcwLCA2MCkpKTsKKyAgICAvLyBUaGlzIHJlY3QgaXMgbW9zdGx5IG9jY2x1ZGVk
IGJ5IHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOTAsIDM5LCAxMCwgMSks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzOSwgNzAsIDYwKSkpOworICAgIC8vIFRoaXMgcmVjdCBleHRlbmRzIHBhc3QgdG9wL3JpZ2h0
IGVuZHMgb2YgfGNoaWxkMnwuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMjksIDcw
LCAxMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCAyOSwgNzAsIDcwKSkpOworICAgIC8vIFRoaXMgcmVjdCBleHRlbmRzIHBhc3QgbGVm
dC9yaWdodCBlbmRzIG9mIHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAs
IDM5LCA4MCwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgyMCwgMzksIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwMCwgNDAsIDEsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzEsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMTAwLCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkpOworCisgICAgLy8gU3VyZmFjZSBp
cyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkp
OworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVzaW9uIGZyb20g
fGxheWVyfDoKKyAgICAgICAgICAgICAgIDEwMAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwzMCAgVmlzaWJsZSByZWdp
b24gb2YgfGxheWVyfDogLy8vLy8KKyAgICAgIHwgICAgMzAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICByb3RhdGUoOTApICAgICAgICAgICAgICAgICB8ICAgICAzMCAgIDYwICAgICAgICAgfCAg
ICB8Y2hpbGQyfDogXFxcXFwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t
LS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICB8ICAzMCArLS0tLS0tLS0tLS0tKy0tLS0tLS0t
LS0tLS0tLS0tLS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgIHwgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICA9PT4gICAgIHwgICAgIHxcXFxcXFxcXFxcXFx8ICB8MTAgICAgICAg
ICAgICAgICB8CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgfCAgKy0tfFxcXFxcXFxcXFxcXHwtLS0tLS0tLS0tLS0tLS0t
LSsgIHwKKyAgICAgIHwgICAgKyAtLS0tLS0tLS0tLS0rICB8ICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICB8ICB8ICArLS0tLS0tLS0tLS0tKy8vfCAgICAgNDIwICAgICAgfCAg
fAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8Cisg
ICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAg
ICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAyMHwxMHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAg
ICAgICAgfAorICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRl
ZE9mZkF4aXNTdXJmYWNlKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9u
OworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hp
bGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAgICAvLyBOb3cgcm90YXRlIHRo
ZSBjaGlsZCBhIGxpdHRsZSBtb3JlIHNvIGl0IGlzIG5vdCBheGlzLWFsaWduZWQuIFRoZSBwYXJl
bnQgd2lsbCBubyBsb25nZXIgYmUgb2NjbHVkZWQgYnkgfGxheWVyfCwgYnV0CisgICAgLy8gdGhl
IGNoaWxkJ3Mgb2NjbHVzaW9uIHNob3VsZCBiZSB1bmNoYW5nZWQuCisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUo
MjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5NSk7CisgICAgY2hpbGRUcmFu
c2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAxMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3Vu
ZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlM
YXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgSW50UmVj
dCBjbGlwcGVkTGF5ZXJJbkNoaWxkID0gbGF5ZXJUcmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dmlz
aWJsZUxheWVyUmVjdCgpKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJl
aGluZExheWVyKGxheWVyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkTGF5ZXJJbkNoaWxkLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
IEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIGNsaXBwZWRM
YXllckluQ2hpbGQpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7
CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKC0xLCAwKTsKKyAgICBFWFBFQ1RfRVEoZmFs
c2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkp
OworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7CisgICAgY2xpcHBl
ZExheWVySW5DaGlsZC5tb3ZlKDEsIDApOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgx
LCAwKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQo
KSwgY2xpcHBlZExheWVySW5DaGlsZCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQp
LmlzRW1wdHkoKSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKC0xLCAwKTsKKyAgICBj
bGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMCwgLTEpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2Nj
bHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNoaWxkKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkuaXNFbXB0eSgpKTsKKyAgICBjbGlwcGVkTGF5ZXJJ
bkNoaWxkLm1vdmUoMCwgMSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIDEpOwor
ICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBjbGlw
cGVkTGF5ZXJJbkNoaWxkKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkuaXNFbXB0
eSgpKTsKKyAgICBjbGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMCwgLTEpOworCisgICAgLy8gU3Vy
ZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDUwMCwgNTAwKSwgb2NjbHVzaW9uLnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMCwgMCwgNTAwLCA1
MDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0
KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0
KCksIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgwdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgw
dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwg
SW50UmVjdCg3NSwgNTUsIDEsIDEpKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3NSwg
NTUsIDEsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCg3NSwgNTUsIDEsIDEpKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRl
ZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMCwgMCwgMTAwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7Cit9CisKK1RFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVs
dGlwbGVPcGFxdWVMYXllcnMpCit7CisgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2
aW91cyB0ZXN0IGJ1dCBub3cgd2UgbWFrZSBhIGZldyBvcGFxdWUgbGF5ZXJzIGluc2lkZSBvZiB8
Y2hpbGR8IHNvIHRoYXQgdGhlIG9jY2x1ZGVkIHBhcnRzIG9mIGNoaWxkIGFyZSBub3QgYSBzaW1w
bGUgcmVjdC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllcjEgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllcjIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hp
bGQtPmFkZENoaWxkKGxheWVyMSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGxheWVyMik7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7Cisg
ICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAs
IDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUo
NTAwLCA0NDApLCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVy
Mi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDEwLCA0NTApLCBJbnRTaXplKDUwMCwgNjApLCB0cnVlKTsKKworICAgIGNo
aWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXpl
ID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+
c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7
CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBh
cmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyMi5nZXQoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
MS5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
CisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50
UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24u
b2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAs
IDQyOSwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2
MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5LCA0MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MjksIDYwLCAxKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDI5LCA2MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3MCwgNDMwLCAxLCA3MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAs
IDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDUwMCwgNjAsIDEpLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEs
IDYwLCA3MCkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0
aGF0IGRyYXcgaW50byBpdHNlbGYuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDMw
LCA2MCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09j
Y2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRh
cmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0KCksIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzOSwgNzAsIDYwKSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDQwLCAxLCA2MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAs
IDYwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDM5LCA3MCwgMSksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwg
NzAsIDYwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCA0MCwgMSwgNjApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwg
NDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcwLCAx
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MzAsIDQxLCA3MCwgNjApKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0
aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzAsIDQwLCA3MCwgNjApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKSk7CisKKworICAgIC8qIEp1c3Rp
ZmljYXRpb24gZm9yIHRoZSBhYm92ZSBvY2NsdXNpb24gZnJvbSB8bGF5ZXIxfCBhbmQgfGxheWVy
Mnw6CisKKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcjF8OiAvLy8vLworICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcjJ8OiBc
XFxcXAorICAgICAgIHwgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisg
ICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwxMCAgICAgICAgICAgICAgIHwKKyAgICAgICB8
ICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKyAgfAorICAgICAgIHwgIHwgIHxc
XFxcXFxcXFxcXFx8Ly98ICAgICA0MjAgICAgICB8ICB8CisgICAgICAgfCAgfCAgfFxcXFxcXFxc
XFxcXHwvL3w2MCAgICAgICAgICAgIHwgIHwKKyAgICAgICB8ICB8ICB8XFxcXFxcXFxcXFxcfC8v
fCAgICAgICAgICAgICAgfCAgfAorICAgICAgICstLXwtLXwtLS0tLS0tLS0tLS18LS0rICAgICAg
ICAgICAgICB8ICB8CisgICAgICAgIDIwfDEwfCAgICAgNzAgICAgIHwgICAgICAgICAgICAgICAg
IHwgIHwKKyAgICAgICAgICB8ICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgfAor
ICAgICAgICAgIHwgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAg
ICAgfCAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICB8ICB8
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgIHwgIHwgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgfCAgfCAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgIHwxMHwKKyAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tfC0tLS0tLS0t
LS0tLS0tLS0tfC0tKworICAgICAgICAgIHwgICAgICAgICAgICAgICB8IDQ5MCAgICAgICAgICAg
ICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAg
ICAgICAgICAgICA2MCAgICAgICAgICAgICAgIDQ0MAorICAgICAqLworfQorCitURVNUKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3ZlcmxhcHBpbmdTaWJsaW5n
U3VyZmFjZXMpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1z
IGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIx
ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIyID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hp
bGQxKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMik7CisgICAgY2hpbGQxLT5hZGRDaGls
ZChsYXllcjEpOworICAgIGNoaWxkMi0+YWRkQ2hpbGQobGF5ZXIyKTsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0
ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQxLmdldCgpLCBjaGls
ZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwg
dHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIGNo
aWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgyMCwgNDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNTAwLCA1MDAp
LCB0cnVlKTsKKworICAgIGNoaWxkMS0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBjaGls
ZDItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDItPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyMi5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCA0MCwgODAsIDYw
KSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQ
RUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwg
SW50UmVjdCgwLCA0MjAsIDYwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lv
bi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEsIDQyMCwgNjAsIDgwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVj
dCgwLCA0MTksIDYwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDIwLCA2MSwgODApKSk7CisgICAgRVhQRUNU
X0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQy
MCwgNjAsIDgxKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdz
IHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQy
MCwgNjAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQy
LmdldCgpLCBJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtP
Y2NsdWRlZEJlaGluZExheWVyKGNoaWxkMi5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmZpbmlzaGVk
VGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDIuZ2V0KCksIGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihsYXllcjEuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAs
IDgwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0
cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MzAsIDcwLCA3MCks
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQ
RUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5z
aXplKCkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIu
Z2V0KCksIEludFJlY3QoMCwgNDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xLCA0MzAsIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCks
IEludFJlY3QoMCwgNDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNp
b24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQzMCwgNzEsIDcwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVj
dCgwLCA0MzAsIDcwLCA3MSkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5
IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYsIGJ1dCB0aGUgfGNoaWxkMXwgc3VyZmFjZSBz
aG91bGQgYmUgb2NjbHVkZWQgYnkgdGhlIHxjaGlsZDJ8IHN1cmZhY2UuCisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgwLCA0MzAsIDEwLCA3MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA3MCkpKTsKKwor
ICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDEuZ2V0KCkpOworICAg
IG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQxLmdldCgpLCBjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJT
dXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjAsIDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVl
blNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAs
IDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzAsIDgwLCA3MCkpKTsKKworICAgIEVY
UEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA3
MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgyMCwgNDAsIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTksIDQwLCA4MCwgNjAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDIwLCAzOSwgODAsIDYwKSkpOworCisgICAgLy8gfGNoaWxkMXwgYW5kIHxjaGls
ZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBzbyB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4K
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCAzMCwgODAsIDcwKSwgb2NjbHVzaW9uLnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAzMCwg
ODAsIDcwKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVz
aW9uOgorICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgMzAgICAgICAgICAgICAg
ICB8ICAgICAgIGNoaWxkMQorICAgICAgfCAgMzArIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyAgMTAwIHwgIDQwfCAgICAgICAgICAgICAgICB8ICAgICBjaGlsZDIgICAgICB8
CisgICAgICB8MjArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorICAgICAg
fCAgfCB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IHwKKyAgICAgIHwgIHwgfCAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8CisgICAgICB8ICB8IHwgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgIHwgfAorICAgICAgKy0tfC18LS0tLS0tLS0tLS0tLS0tLSsg
ICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCB8IDUwMAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Cisg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS18LSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCit7CisgICAgLy8gVGhp
cyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRl
c3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hp
bGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICBwYXJlbnQtPmFkZENo
aWxkKGNoaWxkMik7CisgICAgY2hpbGQxLT5hZGRDaGlsZChsYXllcjEpOworICAgIGNoaWxkMi0+
YWRkQ2hpbGQobGF5ZXIyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNm
b3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRU
cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwg
LTI1MCk7CisKKyAgICAvLyBUaGUgb3duaW5nIGxheWVycyBoYXZlIHZlcnkgZGlmZmVyZW50IGJv
dW5kcyBmcm9tIHRoZSBzdXJmYWNlcyB0aGF0IHRoZXkgb3duLgorICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDAp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDEuZ2V0KCks
IGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgzMCwgMzApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KC0xMCwgLTEwKSwgSW50U2l6ZSg1MTAs
IDUxMCksIHRydWUpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdl
dCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMjAsIDQwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllcjIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgtMTAsIC0xMCksIEludFNpemUo
NTEwLCA1MTApLCB0cnVlKTsKKworICAgIC8vIE1ha2UgdGhlbSBib3RoIHJlbmRlciBzdXJmYWNl
cworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMo
KS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAu
NSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBjaGlsZDEtPnNldEZpbHRlcnMo
ZmlsdGVycyk7CisgICAgY2hpbGQyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgY2hpbGQx
LT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICBjaGlsZDItPnNldE1hc2tzVG9Cb3VuZHMo
ZmFsc2UpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5
ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lv
bi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOworCisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAsIDgwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFy
Z2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEo
dHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwg
NzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxk
Mi5nZXQoKSwgSW50UmVjdCgtMTEsIDQyMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQxOSwgNzAs
IDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5n
ZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzEsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwg
b2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgx
KSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJh
dyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDIwLCA3MCwg
ODApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZDIuZ2V0KCks
IEludFJlY3QoLTEwLCA0MjAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1
c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDMwLCAyNTAsIDEsIDEp
KSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQyLmdldCgp
KTsKKyAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMi5nZXQo
KSwgY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVu
dGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2Nj
bHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyMS5nZXQoKSk7CisKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDIwLCAyMCwgODAsIDgwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbklu
U2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVl
LCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwg
NzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdl
dCgpLCBJbnRSZWN0KC0xMSwgNDMwLCA4MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDI5LCA4MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgp
LCBJbnRSZWN0KC0xMCwgNDMwLCA4MSwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2Ns
dXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzEpKSk7
CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGlu
dG8gaXRzZWxmLCBidXQgdGhlIHxjaGlsZDF8IHN1cmZhY2Ugc2hvdWxkIGJlIG9jY2x1ZGVkIGJ5
IHRoZSB8Y2hpbGQyfCBzdXJmYWNlLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0
MzAsIDEwLCA4MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
MS5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUSh0cnVl
LCBvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAs
IDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVk
ZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KC0xLCA0MzAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0
KDAsIDQyOSwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnN1cmZh
Y2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMSwgNDMwLCA3MCwgODApKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwg
SW50UmVjdCgwLCA0MzEsIDcwLCA4MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihjaGlsZDEuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJl
bmRlclN1cmZhY2UoY2hpbGQxLmdldCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
b2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgydSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVj
dCgyMCwgMjAsIDgwLCA4MCkpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyMCwgNzAsIDgwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwg
MjAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDE5LCA3MCwgODApKSk7CisKKyAgICBFWFBFQ1RfRVEo
dHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzAsIDgw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMTksIDMwLCA4MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAyOSwgODAsIDcwKSkp
OworCisgICAgLy8gfGNoaWxkMXwgYW5kIHxjaGlsZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBz
byB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDIwLCAyMCwgODAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAyMCwgODAsIDgwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAs
IDUwLCAxLCAxKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2Nj
bHVzaW9uOgorICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgfCAgICAyMCAgICAgICAgICAgICAgIHwgICAgICAgbGF5ZXIxCisgICAgICB8ICAz
MCsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAgMzB8ICAgICAg
ICAgICAgICAgIHwgICAgIGxheWVyMiAgICAgIHwKKyAgICAgIHwyMCstLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKyB8CisgICAgICB8ICB8IHwgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgIHwgfAorICAgICAgfCAgfCB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICB8IHwKKyAgICAgIHwgIHwgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8Cisg
ICAgICArLS18LXwtLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwgfAorICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgNTAwCisgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAg
ICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtKworICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICA1MDAKKyAg
ICAgKi8KK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBvY2NsdXNpb25JbnRlcmFj
dGlvbldpdGhGaWx0ZXJzKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJh
bnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1
c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBibHVyTGF5
ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBvcGFjaXR5
TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBvcGFx
dWVMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGJsdXJMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChvcGFjaXR5TGF5ZXIpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQob3BhcXVlTGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwg
MjUwKTsKKyAgICBsYXllclRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgIGxheWVyVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhibHVyTGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwg
MzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhvcGFxdWVMYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDAp
LCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKG9wYWNpdHlMYXllci5n
ZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgIHsKKyAg
ICAgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgICAgICBmaWx0ZXJzLm9wZXJhdGlv
bnMoKS5hcHBlbmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgxMCwgV2ViQ29y
ZTo6UGVyY2VudCksIEZpbHRlck9wZXJhdGlvbjo6QkxVUikpOworICAgICAgICBibHVyTGF5ZXIt
PnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgfQorCisgICAgeworICAgICAgICBGaWx0ZXJPcGVy
YXRpb25zIGZpbHRlcnM7CisgICAgICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRSkpOworICAgICAgICBvcGFxdWVMYXllci0+c2V0RmlsdGVycyhmaWx0
ZXJzKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsK
KyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWSkp
OworICAgICAgICBvcGFjaXR5TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgfQorCisK
KyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Cisg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgLy8gT3BhY2l0eSBsYXllciB3
b24ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbi4KKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRS
ZW5kZXJTdXJmYWNlKG9wYWNpdHlMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIob3BhY2l0eUxheWVyLmdldCgpKTsKKyAgICBvY2Ns
dXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKG9wYWNpdHlMYXllci5nZXQoKSwgb3Bh
Y2l0eUxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5pc0VtcHR5KCkpOworCisgICAgLy8g
QW5kIGhhcyBub3RoaW5nIHRvIGNvbnRyaWJ1dGUgdG8gaXRzIHBhcmVudCBzdXJmYWNlLgorICAg
IG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5pc0VtcHR5KCkpOworCisgICAgLy8gT3BhcXVlIGxheWVyIHdpbGwgY29udHJp
YnV0ZSB0byBvY2NsdXNpb24uCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFj
ZShvcGFxdWVMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1
ZGVkQmVoaW5kTGF5ZXIob3BhcXVlTGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hl
ZFRhcmdldFJlbmRlclN1cmZhY2Uob3BhcXVlTGF5ZXIuZ2V0KCksIG9wYXF1ZUxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3
MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVY
UEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MzAsIDcwLCA3MCksIG9jY2x1
c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkp
OworCisgICAgLy8gQW5kIGl0IGdldHMgdHJhbnNsYXRlZCB0byB0aGUgcGFyZW50IHN1cmZhY2Uu
CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICAvLyBUaGUgYmx1ciBsYXllciBuZWVkcyB0byB0aHJvdyBhd2F5IGFueSBvY2NsdXNpb24g
ZnJvbSBvdXRzaWRlIGl0cyBzdWJ0cmVlLgorICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRl
clN1cmZhY2UoYmx1ckxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuaXNFbXB0eSgpKTsKKwor
ICAgIC8vIEFuZCBpdCB3b24ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbi4KKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoYmx1ckxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNp
b24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGJsdXJMYXllci5nZXQoKSwgYmx1ckxheWVy
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEJ1dCB0aGUgb3Bh
cXVlIGxheWVyJ3Mgb2NjbHVzaW9uIGlzIHByZXNlcnZlZCBvbiB0aGUgcGFyZW50LgorICAgIG9j
Y2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128236</attachid>
            <date>2012-02-22 10:00:21 -0800</date>
            <delta_ts>2012-02-22 10:45:42 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78549-20120222130020.patch</filename>
            <type>text/plain</type>
            <size>102953</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQyMjlkNDgzOWM4YTUy
ZTk1Mzc1MTY4NThlZDk3ZjdhY2ZkOTU5NC4uYTgwZWRkZDRmMmNiYzg2NGUxNTM1Y2E2MmRiNWMw
M2E5OTU5NDgxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAyLTIxICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gTmV3
IENDT2NjbHVzaW9uVHJhY2tlciBjbGFzcyB3aXRoIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIEFkZHMgYSBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
IHRlbXBsYXRlIGNsYXNzIHRoYXQgaXMgYWJsZSB0byB0cmFjayBvY2NsdXNpb24KKyAgICAgICAg
b2YgbGF5ZXJzIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGxheWVyIHRyZWUgZnJvbSBmcm9udC10by1i
YWNrLCB3aXRoIHR5cGVkZWZlZAorICAgICAgICB2ZXJzaW9ucyBmb3IgdGhlIG1haW4gYW5kIGlt
cGwgdGhyZWFkcy4KKworICAgICAgICBBdCBlYWNoIHN0ZXAgb2YgdGhlIGZyb250LXRvLWJhY2sg
dHJhdmVyc2FsLCB0aGUgY2xhc3Mgc2hvdWxkIGJlIG5vdGlmaWVkIG9mCisgICAgICAgIGNoYW5n
ZXMgdG8gdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCwgYW5kIHdoZW4gZG9uZSB3b3JraW5nIHdp
dGggYSBsYXllciwgdGhlCisgICAgICAgIGxheWVyIGlzIGFkZGVkIHRoZSB0cmFja2VkIG9jY2x1
c2lvbi4KKworICAgICAgICBUaGUgY2xhc3MgcHJvdmlkZXMgdGVzdHMgZm9yIGNoZWNraW5nIGlm
IGEgcmVjdCBpbiBjb250ZW50IHNwYWNlCisgICAgICAgIGZvciBhIGxheWVyL3N1cmZhY2UgaXMg
b2NjbHVkZWQgYnkgb3RoZXJzIGluIGZyb250IG9mIGl0LgorCisgICAgICAgIFVuaXQgdGVzdHM6
IENDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2Vy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6ZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6ZmluaXNoZWRUYXJn
ZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVN1cmZhY2VPcGFx
dWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXB1dGVPY2NsdXNpb25CZWhpbmRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjo6Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRlc3RD
b250ZW50UmVjdE9jY2x1ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6b2NjbHVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlT2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmVj
dFN1YnRyYWN0UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVVbm9jY2x1ZGVkQ29u
dGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6Q0NPY2NsdXNpb25UcmFj
a2VyQmFzZSk6CisgICAgICAgIChTdGFja09iamVjdCk6CisKIDIwMTItMDItMjEgIEphbWVzIFJv
Ymluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb2RlOjppc0NvbnRlbnRF
ZGl0YWJsZSBzaG91bGQgb25seSB1cGRhdGUgc3R5bGVzLCBub3QgbGF5b3V0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDc4YWY0ZjY5YWFiNTM0NGZiZTY5MjA1NjBlNzRkYzc1N2YwNTM3
MGEuLmQzMDVkMDU0YTMwNjkxYTI1ODJiYTc4MGNmMDRkMjEyYzk3OWEyMzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjggQEAKIDIwMTItMDItMjEgIERhbmEgSmFuc2Vu
cyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW0Nocm9taXVtXSBOZXcgQ0NPY2Ns
dXNpb25UcmFja2VyIGNsYXNzIHdpdGggdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMg
Um9iaW5zb24uCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IHRlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyk6Cisg
ICAgICAgIChMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudDo6TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ6OmRyYXdzQ29udGVudCk6CisgICAgICAgIChUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNr
ZXI6Om9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2Nj
bHVzaW9uVHJhY2tlcjo6b2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OnNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6c2V0T2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCisyMDEyLTAyLTIxICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0g
UGFpbnRpbmcgYSBsYXllciBjbGVhcnMgb3BhcXVlIHJlY3QgaW4gdW50b3VjaGVkIHRpbGVzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTE1NwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggNWY1N2M0Y2I4MmUwNzJmZDJkMTMxYmZjYzEzZTg2MDg5MmU5NjE2
Ny4uYjQwMmUzYTcxZjFlMmRhZjQwZTA2MDgxNTlkM2I5YmJhM2M4MTAwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzI3NSw2ICszMjc1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NPY2NsdXNpb25UcmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQYWdlU2NhbGVBbmltYXRpb24uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzU2MTFh
YzI3YTZhZWM0YTdmYmQ2OTQwMjNkMzQzZjUyYmE1ZDIzYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJh
Y2tlci5jcHAKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ09jY2x1
c2lvblRyYWNrZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmVudGVyVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFyZ2V0KQoreworICAgIGlmICghbV9z
dGFjay5pc0VtcHR5KCkgJiYgbV9zdGFjay5sYXN0KCkuc3VyZmFjZSA9PSBuZXdUYXJnZXQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBvbGRUYXJnZXQg
PSBtX3N0YWNrLmlzRW1wdHkoKSA/IDAgOiBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlOworICAgIGNv
bnN0IFJlbmRlclN1cmZhY2VUeXBlKiBvbGRBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyA9ICFvbGRU
YXJnZXQgPyAwIDogb2xkVGFyZ2V0LT5uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKTsK
KyAgICBjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMg
PSBuZXdUYXJnZXQtPm5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscygpOworCisgICAgbV9z
dGFjay5hcHBlbmQoU3RhY2tPYmplY3QoKSk7CisgICAgbV9zdGFjay5sYXN0KCkuc3VyZmFjZSA9
IG5ld1RhcmdldDsKKworICAgIC8vIFdlIGNvcHkgdGhlIHNjcmVlbiBvY2NsdXNpb24gaW50byB0
aGUgbmV3IFJlbmRlclN1cmZhY2Ugc3VidHJlZSwgYnV0IHdlIG5ldmVyIGNvcHkgaW4gdGhlCisg
ICAgLy8gdGFyZ2V0IG9jY2x1c2lvbiwgc2luY2Ugd2UgYXJlIGxvb2tpbmcgYXQgYSBuZXcgUmVu
ZGVyU3VyZmFjZSB0YXJnZXQuCisKKyAgICAvLyBJZiB3ZSBhcmUgZW50ZXJpbmcgYSBzdWJ0cmVl
IHRoYXQgaXMgZ29pbmcgdG8gbW92ZSBwaXhlbHMgYXJvdW5kLCB0aGVuIHRoZSBvY2NsdXNpb24g
d2UndmUgY29tcHV0ZWQKKyAgICAvLyBzbyBmYXIgd29uJ3QgYXBwbHkgdG8gdGhlIHBpeGVscyB3
ZSdyZSBkcmF3aW5nIGhlcmUgaW4gdGhlIHNhbWUgd2F5LiBXZSBkaXNjYXJkIHRoZSBvY2NsdXNp
b24gdGh1cworICAgIC8vIGZhciB0byBiZSBzYWZlLCBhbmQgZW5zdXJlIHdlIGRvbid0IGN1bGwg
YW55IHBpeGVscyB0aGF0IGFyZSBtb3ZlZCBzdWNoIHRoYXQgdGhleSBiZWNvbWUgdmlzaWJsZS4K
KyAgICBib29sIGVudGVyaW5nU3VidHJlZVRoYXRNb3Zlc1BpeGVscyA9IG5ld0FuY2VzdG9yVGhh
dE1vdmVzUGl4ZWxzICYmIG5ld0FuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzICE9IG9sZEFuY2VzdG9y
VGhhdE1vdmVzUGl4ZWxzOworCisgICAgYm9vbCBjb3B5U2NyZWVuT2NjbHVzaW9uRm9yd2FyZCA9
IG1fc3RhY2suc2l6ZSgpID4gMSAmJiAhZW50ZXJpbmdTdWJ0cmVlVGhhdE1vdmVzUGl4ZWxzOwor
ICAgIGlmIChjb3B5U2NyZWVuT2NjbHVzaW9uRm9yd2FyZCkgeworICAgICAgICBpbnQgbGFzdElu
ZGV4ID0gbV9zdGFjay5zaXplKCkgLSAxOworICAgICAgICBtX3N0YWNrW2xhc3RJbmRleF0ub2Nj
bHVzaW9uSW5TY3JlZW4gPSBtX3N0YWNrW2xhc3RJbmRleCAtIDFdLm9jY2x1c2lvbkluU2NyZWVu
OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZT4KK3ZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IExheWVy
VHlwZSogb3duaW5nTGF5ZXIsIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBmaW5pc2hlZFRhcmdl
dCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBvd25pbmdMYXllciBwYXJhbWV0ZXIgd2hl
biB3ZSBjYW4gZ2V0IGFsbCB0aGUgaW5mbyBmcm9tIHRoZSBzdXJmYWNlLgorICAgIEFTU0VSVChv
d25pbmdMYXllci0+cmVuZGVyU3VyZmFjZSgpID09IGZpbmlzaGVkVGFyZ2V0KTsKKworICAgIC8v
IE1ha2Ugc3VyZSB3ZSBrbm93IGFib3V0IHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICBlbnRlclRh
cmdldFJlbmRlclN1cmZhY2UoZmluaXNoZWRUYXJnZXQpOworCisgICAgaWYgKG93bmluZ0xheWVy
LT5tYXNrTGF5ZXIoKSB8fCBmaW5pc2hlZFRhcmdldC0+ZHJhd09wYWNpdHkoKSA8IDEgfHwgZmlu
aXNoZWRUYXJnZXQtPmZpbHRlcnMoKS5oYXNGaWx0ZXJUaGF0QWZmZWN0c09wYWNpdHkoKSkgewor
ICAgICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IFJlZ2lvbigpOworICAg
ICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCA9IFJlZ2lvbigpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitzdGF0aWMgaW5saW5l
IFJlZ2lvbiB0cmFuc2Zvcm1TdXJmYWNlT3BhcXVlUmVnaW9uKGNvbnN0IFJlbmRlclN1cmZhY2VU
eXBlKiBzdXJmYWNlLCBjb25zdCBSZWdpb24mIHJlZ2lvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICAvLyBWZXJpZnkgdGhhdCByZWN0cyB3aXRoaW4gdGhl
IHxzdXJmYWNlfCB3aWxsIHJlbWFpbiByZWN0cyBpbiBpdHMgdGFyZ2V0IHN1cmZhY2UgYWZ0ZXIg
YXBwbHlpbmcgfHRyYW5zZm9ybXwuIElmIHRoaXMgaXMgdHJ1ZSwgdGhlbgorICAgIC8vIGFwcGx5
IHx0cmFuc2Zvcm18IHRvIGVhY2ggcmVjdCB3aXRoaW4gfHJlZ2lvbnwgaW4gb3JkZXIgdG8gdHJh
bnNmb3JtIHRoZSBlbnRpcmUgUmVnaW9uLgorCisgICAgSW50UmVjdCBib3VuZHMgPSByZWdpb24u
Ym91bmRzKCk7CisgICAgRmxvYXRSZWN0IGNlbnRlcmVkQm91bmRzKC1ib3VuZHMud2lkdGgoKSAv
IDIuMCwgLWJvdW5kcy5oZWlnaHQoKSAvIDIuMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWln
aHQoKSk7CisgICAgRmxvYXRRdWFkIHRyYW5zZm9ybWVkQm91bmRzUXVhZCA9IHRyYW5zZm9ybS5t
YXBRdWFkKEZsb2F0UXVhZChjZW50ZXJlZEJvdW5kcykpOworICAgIGlmICghdHJhbnNmb3JtZWRC
b3VuZHNRdWFkLmlzUmVjdGlsaW5lYXIoKSkKKyAgICAgICAgcmV0dXJuIFJlZ2lvbigpOworCisg
ICAgUmVnaW9uIHRyYW5zZm9ybWVkUmVnaW9uOworCisgICAgSW50UmVjdCBzdXJmYWNlQm91bmRz
ID0gc3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBy
ZWdpb24ucmVjdHMoKTsKKyAgICBWZWN0b3I8SW50UmVjdD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlY3RzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBp
ID0gcmVjdHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgeworICAgICAgICBGbG9hdFJlY3QgY2Vu
dGVyZWRPcmlnaW5SZWN0KC1pLT53aWR0aCgpIC8gMi4wICsgaS0+eCgpIC0gc3VyZmFjZUJvdW5k
cy54KCksIC1pLT5oZWlnaHQoKSAvIDIuMCArIGktPnkoKSAtIHN1cmZhY2VCb3VuZHMueSgpLCBp
LT53aWR0aCgpLCBpLT5oZWlnaHQoKSk7CisgICAgICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1lZFJl
Y3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoY2VudGVyZWRPcmlnaW5SZWN0KSk7Cisg
ICAgICAgIHRyYW5zZm9ybWVkUmVnaW9uLnVuaXRlKGVuY2xvc2VkSW50UmVjdCh0cmFuc2Zvcm1l
ZFJlY3QpKTsKKyAgICB9CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVnaW9uOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9p
ZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojps
ZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFy
Z2V0KQoreworICAgIGludCBsYXN0SW5kZXggPSBtX3N0YWNrLnNpemUoKSAtIDE7CisgICAgYm9v
bCBzdXJmYWNlV2lsbEJlQXRUb3BBZnRlclBvcCA9IG1fc3RhY2suc2l6ZSgpID4gMSAmJiBtX3N0
YWNrW2xhc3RJbmRleCAtIDFdLnN1cmZhY2UgPT0gbmV3VGFyZ2V0OworCisgICAgLy8gV2UgbWVy
Z2UgdGhlIHNjcmVlbiBvY2NsdXNpb24gZnJvbSB0aGUgY3VycmVudCBSZW5kZXJTdXJmYWNlIHN1
YnRyZWUgb3V0IHRvIGl0cyBwYXJlbnQgdGFyZ2V0IFJlbmRlclN1cmZhY2UuCisgICAgLy8gVGhl
IHRhcmdldCBvY2NsdXNpb24gY2FuIGJlIG1lcmdlZCBvdXQgYXMgd2VsbCBidXQgbmVlZHMgdG8g
YmUgdHJhbnNmb3JtZWQgdG8gdGhlIG5ldyB0YXJnZXQuCisKKyAgICBjb25zdCBSZW5kZXJTdXJm
YWNlVHlwZSogb2xkVGFyZ2V0ID0gbV9zdGFja1tsYXN0SW5kZXhdLnN1cmZhY2U7CisgICAgUmVn
aW9uIG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0ID0gdHJhbnNmb3JtU3VyZmFjZU9wYXF1
ZVJlZ2lvbjxSZW5kZXJTdXJmYWNlVHlwZT4ob2xkVGFyZ2V0LCBtX3N0YWNrW2xhc3RJbmRleF0u
b2NjbHVzaW9uSW5UYXJnZXQsIG9sZFRhcmdldC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIGlm
IChzdXJmYWNlV2lsbEJlQXRUb3BBZnRlclBvcCkgeworICAgICAgICAvLyBNZXJnZSB0aGUgdG9w
IG9mIHRoZSBzdGFjayBkb3duLgorCisgICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2Nj
bHVzaW9uSW5TY3JlZW4udW5pdGUobV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluU2NyZWVu
KTsKKyAgICAgICAgbV9zdGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblRhcmdldC51bml0
ZShvbGRUYXJnZXRPY2NsdXNpb25Jbk5ld1RhcmdldCk7CisgICAgICAgIG1fc3RhY2sucmVtb3Zl
TGFzdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlcGxhY2UgdGhlIHRvcCBvZiB0aGUg
c3RhY2sgd2l0aCB0aGUgbmV3IHB1c2hlZCBzdXJmYWNlLiBDb3B5IHRoZSBvY2NsdWRlZCBzY3Jl
ZW4gcmVnaW9uIHRvIHRoZSB0b3AuCisgICAgICAgIG1fc3RhY2subGFzdCgpLnN1cmZhY2UgPSBu
ZXdUYXJnZXQ7CisgICAgICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0ID0gb2xk
VGFyZ2V0T2NjbHVzaW9uSW5OZXdUYXJnZXQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMYXllclR5cGU+CitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRU
b1NjcmVlblNwYWNlVHJhbnNmb3JtKGNvbnN0IExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgSW50
U2l6ZSBib3VuZHNJbkxheWVyU3BhY2UgPSBsYXllci0+Ym91bmRzKCk7CisgICAgSW50U2l6ZSBi
b3VuZHNJbkNvbnRlbnRTcGFjZSA9IGxheWVyLT5jb250ZW50Qm91bmRzKCk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KTsKKworICAgIGlmIChib3VuZHNJbkNvbnRlbnRTcGFjZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB0cmFuc2Zvcm07CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5
ZXIgc3BhY2UKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFj
ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0
aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5o
ZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0
KCkpKTsKKworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFy
Z2V0U3VyZmFjZVRyYW5zZm9ybShjb25zdCBMYXllclR5cGUqIGxheWVyKQoreworICAgIEludFNp
emUgYm91bmRzSW5MYXllclNwYWNlID0gbGF5ZXItPmJvdW5kcygpOworICAgIEludFNpemUgYm91
bmRzSW5Db250ZW50U3BhY2UgPSBsYXllci0+Y29udGVudEJvdW5kcygpOworCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKworICAg
IGlmIChib3VuZHNJbkNvbnRlbnRTcGFjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cmFu
c2Zvcm07CisKKyAgICAvLyBTY2FsZSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gbGF5ZXIgc3BhY2UK
KyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kc0luTGF5ZXJTcGFjZS53aWR0aCgp
IC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihib3VuZHNJbkNvbnRlbnRTcGFjZS53aWR0aCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc0luTGF5ZXJTcGFjZS5oZWlnaHQoKSAv
IHN0YXRpY19jYXN0PGRvdWJsZT4oYm91bmRzSW5Db250ZW50U3BhY2UuaGVpZ2h0KCkpKTsKKwor
ICAgIC8vIFRoZSBkcmF3IHRyYW5zZm9ybSBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgaW4gdGhl
IG1pZGRsZSBvZiB0aGUgbGF5ZXIuCisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzSW5D
b250ZW50U3BhY2Uud2lkdGgoKSAvIDIuMCwgLWJvdW5kc0luQ29udGVudFNwYWNlLmhlaWdodCgp
IC8gMi4wKTsKKworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgUmVnaW9uIGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcihjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKQoreworICAgIFJlZ2lvbiBvcGFxdWVSZWdpb247CisKKyAgICBGbG9hdFF1YWQg
dW5vY2NsdWRlZFF1YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQobGF5ZXItPnZpc2li
bGVMYXllclJlY3QoKSkpOworICAgIGJvb2wgaXNQYWludGVkQXhpc0FsaWduZWQgPSB1bm9jY2x1
ZGVkUXVhZC5pc1JlY3RpbGluZWFyKCk7CisgICAgaWYgKCFpc1BhaW50ZWRBeGlzQWxpZ25lZCkK
KyAgICAgICAgcmV0dXJuIG9wYXF1ZVJlZ2lvbjsKKworICAgIGlmIChsYXllci0+b3BhcXVlKCkp
CisgICAgICAgIG9wYXF1ZVJlZ2lvbiA9IGVuY2xvc2VkSW50UmVjdCh1bm9jY2x1ZGVkUXVhZC5i
b3VuZGluZ0JveCgpKTsKKyAgICAvLyBGSVhNRTogQ2FwdHVyZSBvcGFxdWUgcGFpbnRzOiBlbHNl
IG9wYXF1ZVJlZ2lvbiA9IGxheWVyLT5vcGFxdWVDb250ZW50c1JlZ2lvbih0cmFuc2Zvcm0pOwor
ICAgIHJldHVybiBvcGFxdWVSZWdpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGNvbnN0IExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgQVNTRVJUKCFtX3N0YWNrLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5s
YXN0KCkuc3VyZmFjZSk7CisKKyAgICBpZiAobGF5ZXItPmRyYXdPcGFjaXR5KCkgIT0gMSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVu
U3BhY2UgPSBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTdXJmYWNlID0gY29udGVu
dFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKKworICAgIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuLnVuaXRlKGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9TY3JlZW5TcGFjZSkpOworICAgIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LnVuaXRlKGNvbXB1dGVPY2NsdXNpb25CZWhpbmRM
YXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9UYXJnZXRTdXJmYWNlKSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5z
Zm9ybSwgY29uc3QgUmVnaW9uJiBvY2NsdXNpb24pCit7CisgICAgRmxvYXRRdWFkIHRyYW5zZm9y
bWVkUXVhZCA9IGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChjb250ZW50
UmVjdCkpOworICAgIHJldHVybiBvY2NsdXNpb24uY29udGFpbnModHJhbnNmb3JtZWRRdWFkLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpvY2NsdWRlZChjb25zdCBMYXllclR5cGUq
IGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sKKyAgICBpZiAobV9z
dGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOworCisg
ICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3Jl
ZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5TY3JlZW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGVzdENvbnRlbnRS
ZWN0T2NjbHVkZWQoY29udGVudFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08
TGF5ZXJUeXBlPihsYXllciksIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0KSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorYm9vbCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpzdXJmYWNlT2Nj
bHVkZWQoY29uc3QgTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRl
bnRSZWN0KSBjb25zdAoreworICAgIC8vIEEgc3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgbGF5
ZXJzIGRyYXdpbmcgaW50byBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gdXNlIG9jY2x1c2lvbiBmcm9t
IG9uZSBzcG90IGRvd24gb24gdGhlIHN0YWNrLgorICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3Qo
KS5zdXJmYWNlKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VDb250ZW50VG9T
Y3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5
ZXIpOworCisgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3Rh
Y2suc2l6ZSgpLTJdOworICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChzdXJmYWNlQ29u
dGVudFJlY3QsIHN1cmZhY2VDb250ZW50VG9TY3JlZW5TcGFjZSwgc2Vjb25kTGFzdC5vY2NsdXNp
b25JblNjcmVlbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gRGV0ZXJtaW5lcyB3aGF0IHBvcnRpb24gb2YgcmVjdCwgaWYgYW55LCBpcyB1bm9jY2x1
ZGVkIChub3Qgb2NjbHVkZWQgYnkgcmVnaW9uKS4gSWYKKy8vIHRoZSByZXN1bHRpbmcgdW5vY2Ns
dWRlZCByZWdpb24gaXMgbm90IHJlY3Rhbmd1bGFyLCB3ZSByZXR1cm4gYSByZWN0IGNvbnRhaW5p
bmcgaXQuCitzdGF0aWMgaW5saW5lIEludFJlY3QgcmVjdFN1YnRyYWN0UmVnaW9uKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQoreworICAgIFJlZ2lvbiByZWN0UmVn
aW9uKHJlY3QpOworICAgIFJlZ2lvbiBpbnRlcnNlY3RSZWdpb24oaW50ZXJzZWN0KHJlZ2lvbiwg
cmVjdFJlZ2lvbikpOworCisgICAgaWYgKGludGVyc2VjdFJlZ2lvbi5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiByZWN0OworCisgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChpbnRlcnNlY3RSZWdp
b24pOworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IHJlY3RSZWdpb24uYm91bmRzKCk7CisgICAg
cmV0dXJuIGJvdW5kc1JlY3Q7Cit9CisKK3N0YXRpYyBJbnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVk
Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9u
KQoreworICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFF1YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zv
cm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3QpKTsKKyAgICBpZiAoIXRyYW5zZm9ybWVk
UXVhZC5pc1JlY3RpbGluZWFyKCkpCisgICAgICAgIHJldHVybiBjb250ZW50UmVjdDsKKyAgICAv
LyBUYWtlIHRoZSBlbmNsb3NpbmdJbnRSZWN0IGF0IGVhY2ggc3RlcCBoZXJlLCBhcyB3ZSB3YW50
IHRvIGNvbnRhaW4gYW55IHVub2NjbHVkZWQgcGFydGlhbCBwaXhlbHMgaW4gdGhlIHJlc3VsdGlu
ZyBJbnRSZWN0LgorICAgIEludFJlY3Qgc2hydW5rUmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihl
bmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUXVhZC5ib3VuZGluZ0JveCgpKSwgb2NjbHVzaW9u
KTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjb250ZW50
U3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QoRmxvYXRSZWN0KHNocnVua1JlY3QpKSk7
CisgICAgLy8gVGhlIHVzZSBvZiBlbmNsb3NpbmdJbnRSZWN0LCB3aXRoIGZsb2F0aW5nIHBvaW50
IHJvdW5kaW5nLCBjYW4gZ2l2ZSB1cyBhIHJlc3VsdCB0aGF0IGlzIG5vdCBhIHN1Yi1yZWN0IG9m
IGNvbnRlbnRSZWN0LCBidXQgb3VyCisgICAgLy8gcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBhIHN1
Yi1yZWN0LgorICAgIHJldHVybiBpbnRlcnNlY3Rpb24odW5vY2NsdWRlZFJlY3QsIGNvbnRlbnRS
ZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJT
dXJmYWNlVHlwZT4KK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSog
bGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAoreworICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRSZWN0OworCisgICAgLy8gV2Ug
d2FudCB0byByZXR1cm4gYSByZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSB2aXNpYmxlIHBhcnRz
IG9mIHxjb250ZW50UmVjdHwgaW4gYm90aCBzY3JlZW4gc3BhY2UgYW5kIGluIHRoZSB0YXJnZXQg
c3VyZmFjZS4KKyAgICAvLyBTbyB3ZSBmaW5kIHRoZSB2aXNpYmxlIHBhcnRzIG9mIHxjb250ZW50
UmVjdHwgaW4gZWFjaCBzcGFjZSwgYW5kIHRha2UgdGhlIGludGVyc2VjdGlvbi4KKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlID0gY29udGVudFRvU2NyZWVu
U3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zv
cm08TGF5ZXJUeXBlPihsYXllcik7CisKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9
IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVl
blNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7CisgICAgSW50UmVjdCB1
bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRS
ZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRh
cmdldCk7CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRJblNjcmVlbiwgdW5v
Y2NsdWRlZEluVGFyZ2V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVj
dChjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJl
Y3QpIGNvbnN0Cit7CisgICAgLy8gQSBzdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBsYXllcnMg
ZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZyb20gb25l
IHNwb3QgZG93biBvbiB0aGUgc3RhY2suCisgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKKyAg
ICAgICAgcmV0dXJuIHN1cmZhY2VDb250ZW50UmVjdDsKKworICAgIEFTU0VSVChsYXllci0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0
YWNrLmxhc3QoKS5zdXJmYWNlKTsKKworICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgcmVjdCB0
aGF0IGNvbnRhaW5zIGFsbCB0aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGJv
dGggc2NyZWVuIHNwYWNlIGFuZCBpbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8gU28gd2Ug
ZmluZCB0aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGVhY2ggc3BhY2UsIGFu
ZCB0YWtlIHRoZSBpbnRlcnNlY3Rpb24uCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250
ZW50VG9TY3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlw
ZT4obGF5ZXIpOworCisgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNr
W21fc3RhY2suc2l6ZSgpLTJdOworICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29t
cHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ29udGVudFJlY3QsIGNvbnRlbnRUb1Nj
cmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKTsKKworICAgIHJldHVybiB1
bm9jY2x1ZGVkSW5TY3JlZW47Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlw
ZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Citjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmN1cnJlbnRPY2NsdXNpb25JblNj
cmVlblNwYWNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICByZXR1cm4gbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW47Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Citjb25zdCBS
ZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlw
ZT46OmN1cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdAoreworICAgIEFTU0VS
VCghbV9zdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiBtX3N0YWNrLmxhc3QoKS5vY2NsdXNp
b25JblRhcmdldDsKK30KKworCisvLyBEZWNsYXJlIHRoZSBwb3NzaWJsZSBmdW5jdGlvbnMgaGVy
ZSBmb3IgdGhlIGxpbmtlci4KK3RlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjplbnRlclRhcmdldFJlbmRlclN1
cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpOwordGVtcGxhdGUg
dm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT46OmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBMYXllckNocm9taXVt
KiBvd25pbmdMYXllciwgY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBmaW5pc2hlZFRhcmdl
dCk7Cit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPjo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoY29uc3Qg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZXdUYXJnZXQpOwordGVtcGxhdGUgdm9pZCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46Om1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGNvbnN0IExheWVyQ2hyb21pdW0qKTsKK3RlbXBsYXRlIGJv
b2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+OjpvY2NsdWRlZChjb25zdCBMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OnN1cmZhY2VPY2NsdWRlZChjb25z
dCBMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25z
dDsKK3RlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVt
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5
ZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKK3RlbXBsYXRl
IEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0+OjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyQ2hy
b21pdW0qLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwordGVtcGxh
dGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bT46OmN1cnJlbnRPY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29u
c3Q7Cit0ZW1wbGF0ZSBjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6Y3VycmVudE9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpIGNvbnN0OworCit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShj
b25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7Cit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVz
aW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmZpbmlzaGVkVGFy
Z2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIsIGNvbnN0IEND
UmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJnZXQpOwordGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7Cit0ZW1wbGF0
ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNvbnN0IENDTGF5ZXJJbXBsKik7Cit0ZW1wbGF0
ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46Om9jY2x1ZGVkKGNvbnN0IENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpIGNvbnN0OwordGVtcGxhdGUgYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJ
bXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpzdXJmYWNlT2NjbHVkZWQoY29uc3QgQ0NMYXllckltcGwq
LCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwordGVtcGxhdGUgSW50
UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+
Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCkgY29uc3Q7Cit0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29u
dGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVu
dFJlY3QpIGNvbnN0OwordGVtcGxhdGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJC
YXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5TY3Jl
ZW5TcGFjZSgpIGNvbnN0OwordGVtcGxhdGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKCkgY29uc3Q7CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDFjODMzZTFhOWJhNGVlZGU5YWJkZjQzMDIxZTdlZDdiNGM0
ZmYxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ09jY2x1c2lvblRyYWNrZXJfaAorI2RlZmluZSBDQ09jY2x1c2lvblRyYWNr
ZXJfaAorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2U7CitjbGFzcyBMYXllckNocm9t
aXVtOworY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOworCisvLyBUaGlzIGNsYXNzIGlzIHVz
ZWQgdG8gdHJhY2sgb2NjbHVzaW9uIG9mIGxheWVycyB3aGlsZSB0cmF2ZXJzaW5nIHRoZW0gaW4g
YSBmcm9udC10by1iYWNrIG9yZGVyLiBBcyBlYWNoIGxheWVyIGlzIHZpc2l0ZWQsIG9uZSBvZiB0
aGUKKy8vIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBpcyBjYWxsZWQgdG8gbm90aWZ5IGl0IGFib3V0
IHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLgorLy8gVGhlbiwgb2NjbHVzaW9uIGluIHRoZSBj
b250ZW50IHNwYWNlIG9mIHRoZSBjdXJyZW50IGxheWVyIG1heSBiZSBxdWVyaWVkLCB2aWEgbWV0
aG9kcyBzdWNoIGFzIG9jY2x1ZGVkKCkgYW5kIHVub2NjbHVkZWRDb250ZW50UmVjdCgpLgorLy8g
SWYgdGhlIGN1cnJlbnQgbGF5ZXIgb3ducyBhIFJlbmRlclN1cmZhY2UsIHRoZW4gb2NjbHVzaW9u
IG9uIHRoYXQgUmVuZGVyU3VyZmFjZSBtYXkgYWxzbyBiZSBxdWVyaWVkIHZpYSBzdXJmYWNlT2Nj
bHVkZWQoKSBhbmQgc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdCgpLgorLy8gRmluYWxseSwg
b25jZSBmaW5pc2hlZCB3aXRoIHRoZSBsYXllciwgb2NjbHVzaW9uIGJlaGluZCB0aGUgbGF5ZXIg
c2hvdWxkIGJlIG1hcmtlZCBieSBjYWxsaW5nIG1hcmtPY2NsdWRlZEJlaGluZExheWVyKCkuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgor
Y2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyQmFzZSB7CitwdWJsaWM6CisgICAgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZSgpIHsgfQorCisgICAgLy8gQ2FsbGVkIHdoZW4gdmlzaXRpbmcgYSBsYXllciBy
ZXByZXNlbnRpbmcgaXRzZWxmLiBJZiB0aGUgdGFyZ2V0IHdhcyBub3QgYWxyZWFkeSBjdXJyZW50
LCB0aGVuIHRoaXMgaW5kaWNhdGVzIHdlIGhhdmUgZW50ZXJlZCBhIG5ldyBzdXJmYWNlIHN1YnRy
ZWUuCisgICAgdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIG5ld1RhcmdldCk7CisKKyAgICAvLyBDYWxsZWQgd2hlbiB2aXNpdGluZyBhIGxheWVy
IHJlcHJlc2VudGluZyBhIHRhcmdldCBzdXJmYWNlLiBUaGlzIGluZGljYXRlcyB3ZSBoYXZlIHZp
c2l0ZWQgYWxsIHRoZSBsYXllcnMgd2l0aGluIHRoZSBzdXJmYWNlLCBhbmQgd2UgbWF5CisgICAg
Ly8gcGVyZm9ybSBhbnkgc3VyZmFjZS13aWRlIG9wZXJhdGlvbnMuCisgICAgdm9pZCBmaW5pc2hl
ZFRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIGZpbmlzaGVkVGFyZ2V0KTsKKworICAgIC8vIENhbGxlZCB3aGVuIHZpc2l0aW5nIGEg
bGF5ZXIgcmVwcmVzZW50aW5nIGEgY29udHJpYnV0aW5nIHN1cmZhY2UuIFRoaXMgIGluZGljYXRl
cyB0aGF0IHdlIGFyZSBsZWF2aW5nIG91ciBjdXJyZW50IHN1cmZhY2UsIGFuZAorICAgIC8vIGVu
dGVyaW5nIHRoZSBuZXcgb25lLiBXZSB0aGVuIHBlcmZvcm0gYW55IG9wZXJhdGlvbnMgcmVxdWly
ZWQgZm9yIG1lcmdpbmcgcmVzdWx0cyBmcm9tIHRoZSBjaGlsZCBzdWJ0cmVlIGludG8gaXRzIHBh
cmVudC4KKyAgICB2b2lkIGxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1
cmZhY2VUeXBlKiBuZXdUYXJnZXQpOworCisgICAgLy8gQWRkIHRoZSBsYXllcidzIG9jY2x1c2lv
biB0byB0aGUgdHJhY2tlZCBzdGF0ZS4KKyAgICB2b2lkIG1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGNvbnN0IExheWVyVHlwZSopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBy
ZWN0IGluIGNvbnRlbnQgc3BhY2UgZm9yIHRoZSBsYXllciBpcyBmdWxseSBvY2NsdWRlZCBpbiBl
aXRoZXIgc2NyZWVuIHNwYWNlIG9yIHRoZSBsYXllcidzIHRhcmdldCBzdXJmYWNlLgorICAgIGJv
b2wgb2NjbHVkZWQoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
IGNvbnN0OworICAgIC8vIEdpdmVzIGFuIHVub2NjbHVkZWQgc3ViLXJlY3Qgb2YgfGNvbnRlbnRS
ZWN0fCBpbiB0aGUgY29udGVudCBzcGFjZSBvZiB0aGUgbGF5ZXIuIFVzZWQgd2hlbiBjb25zaWRl
cmluZyBvY2NsdXNpb24gZm9yIGEgbGF5ZXIgdGhhdCBwYWludHMvZHJhd3Mgc29tZXRoaW5nLgor
ICAgIEludFJlY3QgdW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSosIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZ2l2ZW4gcmVjdCBpbiBjb250ZW50IHNwYWNlIGZvciB0aGUgUmVuZGVyU3VyZmFjZSBvd25l
ZCBieSB0aGUgbGF5ZXIgaXMgZnVsbHkgb2NjbHVkZWQgaW4gZWl0aGVyIHNjcmVlbiBzcGFjZSBv
ciB0aGUgbGF5ZXIncyB0YXJnZXQgc3VyZmFjZS4KKyAgICBib29sIHN1cmZhY2VPY2NsdWRlZChj
b25zdCBMYXllclR5cGUqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CisgICAg
Ly8gR2l2ZXMgYW4gdW5vY2NsdWRlZCBzdWItcmVjdCBvZiB8Y29udGVudFJlY3R8IGluIHRoZSBj
b250ZW50IHNwYWNlIG9mIHRoZSBSZW5kZXJTdXJmYWNlIG93bmVkIGJ5IHRoZSBsYXllci4gVXNl
ZCB3aGVuIGNvbnNpZGVyaW5nIG9jY2x1c2lvbiBmb3IgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICBJ
bnRSZWN0IHN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJUeXBlKiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OworCisgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGVzZSBpbiBmdXR1cmUsIHRoZXkgYXJlIHRvIG1ha2UgQ0xzIGZvciB0cmFuc2l0aW9uaW5nIHRv
IHRoaXMgZWFzaWVyLgorICAgIGNvbnN0IFJlZ2lvbiYgY3VycmVudE9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKSBjb25zdDsKKyAgICBjb25zdCBSZWdpb24mIGN1cnJlbnRPY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHN0cnVjdCBTdGFja09iamVjdCB7
CisgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlOworICAgICAgICBSZWdp
b24gb2NjbHVzaW9uSW5TY3JlZW47CisgICAgICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldDsK
KyAgICB9OworCisgICAgLy8gVGhlIHN0YWNrIGhvbGRzIG9jY2x1ZGVkIHJlZ2lvbnMgZm9yIHN1
YnRyZWVzIGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUsIHNvIHRoYXQgd2hlbiB3ZSBs
ZWF2ZSBhIHN1YnRyZWUgd2UgbWF5CisgICAgLy8gYXBwbHkgYSBtYXNrIHRvIGl0LCBidXQgbm90
IHRvIHRoZSBwYXJ0cyBvdXRzaWRlIHRoZSBzdWJ0cmVlLgorICAgIC8vIC0gVGhlIGZpcnN0IHRp
bWUgd2Ugc2VlIGEgbmV3IHN1YnRyZWUgdW5kZXIgYSB0YXJnZXQsIHdlIGFkZCB0aGF0IHRhcmdl
dCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4gVGhpcyBjYW4gaGFwcGVuIGFzIGEgbGF5ZXIgcmVw
cmVzZW50aW5nIGl0c2VsZiwgb3IgYXMgYSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLyAtIFdoZW4g
d2UgdmlzaXQgYSB0YXJnZXQgc3VyZmFjZSwgd2UgYXBwbHkgaXRzIG1hc2sgdG8gaXRzIHN1YnRy
ZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIC0gV2hlbiB3ZSB2
aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYsIHdlIGFkZCBpdHMgb2NjbHVzaW9uIHRv
IHRoZSBjdXJyZW50IHN1YnRyZWUsIHdoaWNoIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgor
ICAgIC8vIC0gV2hlbiB3ZSB2aXNpdCBhIGxheWVyIHJlcHJlc2VudGluZyBhIGNvbnRyaWJ1dGlu
ZyBzdXJmYWNlLCB0aGUgY3VycmVudCB0YXJnZXQgd2lsbCBuZXZlciBiZSB0aGUgdG9wIG9mIHRo
ZSBzdGFjayBzaW5jZSB3ZSBqdXN0IGNhbWUgZnJvbSB0aGUgY29udHJpYnV0aW5nIHN1cmZhY2Uu
CisgICAgLy8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3
aXRoIHRoZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9u
dG8gdGhlIHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgorICAgIFZlY3RvcjxTdGFja09iamVj
dCwgMT4gbV9zdGFjazsKKworcHJpdmF0ZToKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlKTsKK307CisKK3R5cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+IENDT2NjbHVzaW9uVHJhY2tl
cjsKK3R5cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlPiBDQ09jY2x1c2lvblRyYWNrZXJJbXBsOworCit9CisjZW5kaWYgLy8gQ0NPY2NsdXNp
b25UcmFja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDZlOWE0ZDBkZmE5
NWZiNzQ4NzFlNWZmMzlmYjI4YWRmZmRhYWQ5ZmIuLjlhYTVkMmNhNjViZDFiZjYwNzU1OGUzMDg5
ZTk5NjEwYTBmNDY2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzUsNiAr
NzUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oJywKKyAgICAgICAgICAgICd0ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NRdWFkQ3Vs
bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGIxZmE3MjkxODQwMWUzMjQwZTQxZDEzZDJlMGMyN2Qw
YzU2YWQ3YzUuLmQyZTFjZmVmOTNlMjgyMTY2ZGE4NTEyNTZjOTVjMGU2NTEyYzY5YmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ0NMYXllclRy
ZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlJl
Z2lvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlIDxn
bW9jay9nbW9jay5oPgpAQCAtMzYsMTIgKzM1LDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLSNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAotICAgIEVYUEVDVF9FUShhLngo
KSwgYi54KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKLSAgICBFWFBFQ1Rf
RVEoYS53aWR0aCgpLCBiLndpZHRoKCkpOyBcCi0gICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIu
aGVpZ2h0KCkpOwotCiBuYW1lc3BhY2UgewogCiB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29u
c3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQpAQCAtNjAyLDE3NCArNTk1LDQg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVu
ZGVyU3VyZmFjZXMpCiAvLyAgLSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uCiAvLwogCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVy
QWRkc1NlbGZUb09jY2x1ZGVkUmVnaW9uKQotewotICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUg
cmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24gb2NjbHVkZWQ7Ci0g
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFyZW50
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7Ci0K
LSAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OwotCi0gICAgbGF5ZXItPnNldE9wYXF1ZSh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKLQotICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVy
IHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUg
dG8gZml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0g
ICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwot
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOwotCi0gICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKLSAgICBsYXllci0+
YWRkU2VsZlRvT2NjbHVkZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7Ci0gICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKLSAgICBFWFBF
Q1RfRVEoMXUsIG9jY2x1ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKLX0KLQotVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCBsYXllckFkZHNTZWxmVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlv
bikKLXsKLSAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJl
aW5nIHVzZWQuCi0gICAgUmVnaW9uIG9jY2x1ZGVkOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OwotICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbGF5ZXJUcmFuc2Zvcm07Ci0gICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUw
KTsKLSAgICBsYXllclRyYW5zZm9ybS5yb3RhdGUoOTApOwotICAgIGxheWVyVHJhbnNmb3JtLnRy
YW5zbGF0ZSgtMjUwLCAtMjUwKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7Ci0gICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0s
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIElu
dFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0KLSAgICBsYXllci0+c2V0T3BhcXVlKHRydWUpOwot
Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0Owot
ICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6IHdoZW4g
d2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVy
VHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICBvY2NsdWRlZCA9
IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNlKG9jY2x1
ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVk
ZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5zaXplKCkp
OwotfQotCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1NlbGZUb09j
Y2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQotewotICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0
aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24gb2NjbHVkZWQ7
Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0gICAgcGFy
ZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7
Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKLSAgICBsYXllclRy
YW5zZm9ybS50cmFuc2xhdGUoMjAsIDIwKTsKLQotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7
Ci0gICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFu
c2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAz
MCksIEludFNpemUoNTAwLCA1MDApLCBmYWxzZSk7Ci0KLSAgICBsYXllci0+c2V0T3BhcXVlKHRy
dWUpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OwotICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6
IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBD
Q0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Ci0KLSAgICBvY2Ns
dWRlZCA9IFJlZ2lvbigpOwotICAgIGxheWVyLT5hZGRTZWxmVG9PY2NsdWRlZFNjcmVlblNwYWNl
KG9jY2x1ZGVkKTsKLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwg
b2NjbHVkZWQuYm91bmRzKCkpOwotICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVkZWQucmVjdHMoKS5z
aXplKCkpOwotfQotCi1URVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIGxheWVyQWRkc1Nl
bGZUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQotewotICAgIC8vIFRoaXMgdGVz
dHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBSZWdpb24g
b2NjbHVkZWQ7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
Ci0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7Ci0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcGFyZW50LT5hZGRD
aGlsZChjaGlsZCk7Ci0gICAgY2hpbGQtPmFkZENoaWxkKGxheWVyKTsKLQotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOwotICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0
ZSgyNTAsIDI1MCk7Ci0gICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKLSAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7Ci0KLSAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOwotICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxk
VHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgz
MCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOwotICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJbnRTaXplKDUwMCwgNTAwKSwg
ZmFsc2UpOwotCi0gICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Ci0gICAgbGF5ZXIt
PnNldE9wYXF1ZSh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKLSAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLQot
ICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNpYWwgY2FzZSIg
YmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4IGl0IGhlcmUs
IHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOwotCi0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OwotCi0gICAgb2NjbHVkZWQgPSBSZWdpb24oKTsKLSAgICBsYXllci0+YWRkU2VsZlRvT2NjbHVk
ZWRTY3JlZW5TcGFjZShvY2NsdWRlZCk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwg
NDAsIDcwLCA2MCksIG9jY2x1ZGVkLmJvdW5kcygpKTsKLSAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1
ZGVkLnJlY3RzKCkuc2l6ZSgpKTsKLQotICAgIC8qIEp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92
ZSBvcGFxdWUgcmVjdCBmcm9tIHxsYXllcnw6Ci0gICAgICAgICAgICAgICAxMDAKLSAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnw6IC8vLy8vCi0gICAgICB8ICAgIDMwICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgIHwKLSAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKwotICAxMDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICA9PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAg
ICAgICAgICB8Ci0gICAgICB8ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsgIHwKLSAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAg
fAotICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8Ci0g
ICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKLSAgICAg
ICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAotICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAyMHwxMHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8Ci0gICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKLSAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgfAotICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8MTB8Ci0gICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLXwtLSsKLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAg
ICAgICAgfAotICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCi0gICAgICovCi19Ci0KIH0gLy8gbmFt
ZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVz
aW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1
c2lvblRyYWNrZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTczMTBiYWM3OTlmZDE0MjMxOTkwYTcy
OWU1ZWM0NWZlMTE0YzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDT2NjbHVz
aW9uVHJhY2tlci5oIgorCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgor
CisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBc
CisgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIu
eSgpKTsgXAorICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBF
Q1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CisKK25hbWVzcGFjZSB7CisKK3ZvaWQgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgb3BhcXVlKQorewor
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0U3VibGF5
ZXJUcmFuc2Zvcm0oc3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2lu
dChhbmNob3IpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXIt
PnNldEJvdW5kcyhib3VuZHMpOworICAgIGxheWVyLT5zZXRPcGFxdWUob3BhcXVlKTsKK30KKwor
Y2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQgOiBwdWJsaWMgTGF5ZXJD
aHJvbWl1bSB7CitwdWJsaWM6CisgICAgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQoKQorICAgICAgICA6IExheWVyQ2hyb21pdW0oKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworLy8g
QSBzdWJjbGFzcyB0byBleHBvc2UgdGhlIHRvdGFsIGN1cnJlbnQgb2NjbHVzaW9uLgorY2xhc3Mg
VGVzdENDT2NjbHVzaW9uVHJhY2tlciA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXIgeworcHVi
bGljOgorICAgIFJlZ2lvbiBvY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3QgeyByZXR1cm4g
Q0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbjsgfQor
ICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBDQ09j
Y2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0OyB9CisKKyAg
ICB2b2lkIHNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoY29uc3QgUmVnaW9uJiByZWdpb24pIHsg
Q0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IHJl
Z2lvbjsgfQorICAgIHZvaWQgc2V0T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKGNvbnN0IFJlZ2lv
biYgcmVnaW9uKSB7IENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9u
SW5UYXJnZXQgPSByZWdpb247IH0KK307CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
bGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRo
ZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQobGF5ZXIpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6
ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwor
CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKwor
ICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQo
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgRVhQ
RUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNzAsIDcwKSkp
OworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKS5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMjksIDcwLCA3MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAyOSwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMxLCAyOSwgNzAsIDcwKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDI5LCA3MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDMwLCAxLCA3MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDMxLCA3MCwgNzApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzEs
IDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcwLCAxKSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDMxLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMzEsIDcwLCA3
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDI5LCAzMSwgNzAsIDcwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxh
eWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQoreworICAgIC8vIFRoaXMgdGVz
dHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxh
eWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7Cisg
ICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xh
dGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXpl
KDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisK
KyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lv
bi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBF
Q1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZh
bHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9j
Y2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7
CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgyOSwgMzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMjksIDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAyOSwgNzAsIDcwKSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDI5LCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAsIDcwKSkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzEsIDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMjksIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMzAsIDEsIDcwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwg
NzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMSwgMzEsIDcwLCA3MCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMSwg
NzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDEwMCwgNzAsIDEpLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzEsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCAzMSwgNzAsIDcw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MjksIDMxLCA3MCwgNzApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5
ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCit7CisgICAgLy8gVGhpcyB0
ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDIwLCAyMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7
CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7
CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJl
bnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVz
aW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDUwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgp
LmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTAsIDUwLCA1MCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwg
NTAsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUxLCA1MCwgNTApKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1
MCwgNTAsIDUwLCA1MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0
OSwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoNDksIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCg0OSwgNDksIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoNTAsIDQ5LCA1MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoNTEsIDQ5LCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNDksIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDEwMCwgNTAsIDEsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCg1MSwgNTEsIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MSwgNTAsIDUwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDEwMCwgNTAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MSwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUxLCA1MCwgNTApKSk7
Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRS
ZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSBy
aWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFu
c2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7CisgICAgY2hp
bGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBj
aGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAsIDEwKSwgSW50U2l6ZSg1MDAsIDUw
MCksIHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVu
ZGVyU3VyZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09j
Y2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCku
Ym91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwg
NDMwLCA2MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2Nj
bHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQz
MCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNo
aWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFs
c2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MSwg
NzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0
KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcxKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2Ns
dWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKKyAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJn
ZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdldCgpLCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJm
YWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisg
ICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwg
MzksIDcwLCA2MCkpKTsKKworCisgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9j
Y2x1c2lvbiBmcm9tIHxsYXllcnw6CisgICAgICAgICAgICAgICAxMDAKKyAgICAgICstLS0tLS0t
LS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8MzAg
IFZpc2libGUgcmVnaW9uIG9mIHxsYXllcnw6IC8vLy8vCisgICAgICB8ICAgIDMwICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgcm90YXRlKDkwKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICA9PT4gICAgIHwgICAgIHwgICAgICAgICAgICAgICB8MTAgICAgICAgICAgICAg
ICB8CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAg
ICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwK
KyAgICAgIHwgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHwgICAgICAg
ICAgICAgICAgICB8ICB8ICB8Ly8vLy8vLy8vLy8vLy8vfCAgICAgNDIwICAgICAgfCAgfAorICAg
ICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAg
ICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8CisgICAgICB8
ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAg
ICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAgICstLS0t
fC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAr
LS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAyMHwx
MHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAgICAgICAg
fAorICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAg
ICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNp
b25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVh
ZHlPblN0YWNrKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3Jt
cyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsK
KyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBjaGlsZDIgPSBh
ZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJl
bnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsK
KyAgICBjaGlsZC0+YWRkQ2hpbGQobGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQy
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxk
VHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRl
KDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Y2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxMCwgMTApLCBJ
bnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisKKyAgICAvLyB8Y2hpbGQyfCBtYWtlcyB8cGFyZW50
fCdzIHN1cmZhY2UgZ2V0IGNvbnNpZGVyZWQgYnkgQ0NPY2NsdXNpb25UcmFja2VyIGZpcnN0LCBp
bnN0ZWFkIG9mIHxjaGlsZHwncy4gVGhpcyBleGVyY2lzZXMgZGlmZmVyZW50IGNvZGUgaW4KKyAg
ICAvLyBsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSwgYXMgdGhlIHRhcmdldCBzdXJmYWNlIGhh
cyBhbHJlYWR5IGJlZW4gc2Vlbi4KKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNo
aWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNjAsIDIwKSwgdHJ1ZSk7CisKKyAgICBj
aGlsZC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQt
PnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkp
OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShw
YXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIo
Y2hpbGQyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwg
MjApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBF
WFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5z
aXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA2MCwgMjApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
LmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCA3MCwgNzApLCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkp
OworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBF
Q1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwg
NDI5LCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQo
Y2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYw
LCA3MCkpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAg
ICAvLyBUaGlzIGlzIHRoZSBsaXR0bGUgcGllY2Ugbm90IG9jY2x1ZGVkIGJ5IGNoaWxkMgorICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOSwgNDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7Cisg
ICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgYm90aCBzaWRlcyBvZiBjaGlsZDIsIHNvIGl0IHdpbGwg
YmUgdGhlIG9yaWdpbmFsIHJlY3QuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5LCA0MzAs
IDYwLCA4MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIElu
dFJlY3QoOSwgNDMwLCA2MCwgODApKSk7CisgICAgLy8gVGhpcyBleHRlbmRzIHBhc3QgdHdvIGFk
amFjZW50IHNpZGVzIG9mIGNoaWxkMiwgYW5kIHNob3VsZCBpbmNsdWRlZCB0aGUgdW5vY2NsdWRl
ZCBwYXJ0cyBvZiBlYWNoIHNpZGUuCisgICAgLy8gVGhpcyBhbHNvIGRlbW9uc3RyYXRlcyB0aGF0
IHRoZSByZWN0IGNhbiBiZSBhcmJpdHJhcnkgYW5kIGRvZXMgbm90IGdldCBjbGlwcGVkIHRvIHRo
ZSBsYXllcidzIHZpc2libGVMYXllclJlY3QoKS4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KC0xMCwgNDMwLCAyMCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
LmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA2MCwgNzApKSk7CisgICAgLy8gVGhpcyBleHRlbmRz
IHBhc3QgdGhyZWUgYWRqYWNlbnQgc2lkZXMgb2YgY2hpbGQyLCBzbyBpdCBzaG91bGQgY29udGFp
biB0aGUgdW5vY2NsdWRlZCBwYXJ0cyBvZiBlYWNoIHNpZGUuIFRoZSBsZWZ0CisgICAgLy8gYW5k
IGJvdHRvbSBlZGdlcyBhcmUgY29tcGxldGVseSB1bm9jY2x1ZGVkIGZvciBzb21lIHJvdy9jb2x1
bW4gc28gd2UgZ2V0IGJhY2sgdGhlIG9yaWdpbmFsIHF1ZXJ5IHJlY3QuCisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNjAsIDgwKSkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQyOSwgNjAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDcwLCA0MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNTAwLCA2MCwgMSksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMSwgNjAsIDcw
KSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJh
dyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3
MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJ
bnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihjaGlsZC5nZXQoKSk7CisgICAgLy8gfGNoaWxkMnwgc2hvdWxkIGdldCBtZXJn
ZWQgd2l0aCB0aGUgc3VyZmFjZSB3ZSBhcmUgbGVhdmluZyBub3cKKyAgICBvY2NsdXNpb24uZmlu
aXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdldCgpLCBjaGlsZC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcw
LCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
IEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygp
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworCisgICAgVmVjdG9yPEludFJlY3Q+IHNjcmVlbiA9IG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkucmVjdHMoKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gdGFyZ2V0ID0gb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCk7CisKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMw
LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5MCwgMzAsIDEwLCAxMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzMCwgNzAsIDcwKSkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA2MCwgMTApKSk7CisgICAgRVhQRUNUX0VR
KGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwg
NjAsIDEwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDYwLCAxMCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA2MCwgMTAp
KSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzAsIDMxLCA2MCwgMTApKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYwKSkpOworCisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMzAsIDMwLCA2MCwgMTApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjksIDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMzAsIDI5LCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoOTAsIDMwLCAxLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNjAsIDEwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMwLCAzMSwgNjAsIDEwKSkuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAs
IDYwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDI5LCA0MCwgMSwg
NjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgyOSwgNDAsIDcwLCA2MCkpKTsKKyAgICAvLyBUaGlzIHJlY3QgaXMgbW9zdGx5IG9jY2x1ZGVk
IGJ5IHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoOTAsIDM5LCAxMCwgMSks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzOSwgNzAsIDYwKSkpOworICAgIC8vIFRoaXMgcmVjdCBleHRlbmRzIHBhc3QgdG9wL3JpZ2h0
IGVuZHMgb2YgfGNoaWxkMnwuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMjksIDcw
LCAxMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCAyOSwgNzAsIDcwKSkpOworICAgIC8vIFRoaXMgcmVjdCBleHRlbmRzIHBhc3QgbGVm
dC9yaWdodCBlbmRzIG9mIHxjaGlsZDJ8LgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAs
IDM5LCA4MCwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgyMCwgMzksIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwMCwgNDAsIDEsIDYwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzEsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMTAwLCA3MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkpOworCisgICAgLy8gU3VyZmFjZSBp
cyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkp
OworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVzaW9uIGZyb20g
fGxheWVyfDoKKyAgICAgICAgICAgICAgIDEwMAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tLS0rCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwzMCAgVmlzaWJsZSByZWdp
b24gb2YgfGxheWVyfDogLy8vLy8KKyAgICAgIHwgICAgMzAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICByb3RhdGUoOTApICAgICAgICAgICAgICAgICB8ICAgICAzMCAgIDYwICAgICAgICAgfCAg
ICB8Y2hpbGQyfDogXFxcXFwKKyAgICAgIHwgMzAgKyAtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t
LS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICB8ICAzMCArLS0tLS0tLS0tLS0tKy0tLS0tLS0t
LS0tLS0tLS0tLS0tKworICAxMDAgfCAgICB8ICAxMCAgICAgICAgIHwgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICA9PT4gICAgIHwgICAgIHxcXFxcXFxcXFxcXFx8ICB8MTAgICAgICAg
ICAgICAgICB8CisgICAgICB8ICAgIHwxMCstLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rICAgICAgICAgICAgICAgICAgfCAgKy0tfFxcXFxcXFxcXFxcXHwtLS0tLS0tLS0tLS0tLS0t
LSsgIHwKKyAgICAgIHwgICAgKyAtLS0tLS0tLS0tLS0rICB8ICAgICAgICAgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICB8ICB8ICArLS0tLS0tLS0tLS0tKy8vfCAgICAgNDIwICAgICAgfCAg
fAorICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgIHwgIHwgIHwvLy8vLy8vLy8vLy8vLy98NjAgICAgICAgICAgICB8ICB8Cisg
ICAgICB8ICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgfCAgfCAgfC8vLy8vLy8vLy8vLy8vL3wgICAgICAgICAgICAgIHwgIHwKKyAgICAg
ICstLS0tfC0tfC0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICArLS18LS18LS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgfAorICAgICAgICAg
ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAyMHwxMHwgICAgIDcwICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHw1MDAgICAgICAgICAgICAgICAgICB8ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8MTB8CisgICAgICAgICAgICstLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKyB8ICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLXwtLSsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICA0OTAgICAgICAg
ICAgICAgfAorICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRl
ZE9mZkF4aXNTdXJmYWNlKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9u
OworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hp
bGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChsYXllcik7CisKKyAgICAvLyBOb3cgcm90YXRlIHRo
ZSBjaGlsZCBhIGxpdHRsZSBtb3JlIHNvIGl0IGlzIG5vdCBheGlzLWFsaWduZWQuIFRoZSBwYXJl
bnQgd2lsbCBubyBsb25nZXIgYmUgb2NjbHVkZWQgYnkgfGxheWVyfCwgYnV0CisgICAgLy8gdGhl
IGNoaWxkJ3Mgb2NjbHVzaW9uIHNob3VsZCBiZSB1bmNoYW5nZWQuCisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUo
MjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5NSk7CisgICAgY2hpbGRUcmFu
c2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAxMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwgMzApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSg1MDAsIDUwMCksIHRydWUpOworCisgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3Vu
ZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlM
YXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgSW50UmVj
dCBjbGlwcGVkTGF5ZXJJbkNoaWxkID0gbGF5ZXJUcmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dmlz
aWJsZUxheWVyUmVjdCgpKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJl
aGluZExheWVyKGxheWVyLmdldCgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkTGF5ZXJJbkNoaWxkLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
IEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIGNsaXBwZWRM
YXllckluQ2hpbGQpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7
CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKC0xLCAwKTsKKyAgICBFWFBFQ1RfRVEoZmFs
c2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkp
OworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7CisgICAgY2xpcHBl
ZExheWVySW5DaGlsZC5tb3ZlKDEsIDApOworICAgIGNsaXBwZWRMYXllckluQ2hpbGQubW92ZSgx
LCAwKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQo
KSwgY2xpcHBlZExheWVySW5DaGlsZCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQp
LmlzRW1wdHkoKSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKC0xLCAwKTsKKyAgICBj
bGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMCwgLTEpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2Nj
bHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBjbGlwcGVkTGF5ZXJJbkNoaWxkKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkuaXNFbXB0eSgpKTsKKyAgICBjbGlwcGVkTGF5ZXJJ
bkNoaWxkLm1vdmUoMCwgMSk7CisgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIDEpOwor
ICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBjbGlw
cGVkTGF5ZXJJbkNoaWxkKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkuaXNFbXB0
eSgpKTsKKyAgICBjbGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMCwgLTEpOworCisgICAgLy8gU3Vy
ZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDUwMCwgNTAwKSwgb2NjbHVzaW9uLnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMCwgMCwgNTAwLCA1
MDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0
KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0
KCksIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgwdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgw
dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwg
SW50UmVjdCg3NSwgNTUsIDEsIDEpKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3NSwg
NTUsIDEsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCg3NSwgNTUsIDEsIDEpKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRl
ZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMCwgMCwgMTAwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7Cit9CisKK1RFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVs
dGlwbGVPcGFxdWVMYXllcnMpCit7CisgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2
aW91cyB0ZXN0IGJ1dCBub3cgd2UgbWFrZSBhIGZldyBvcGFxdWUgbGF5ZXJzIGluc2lkZSBvZiB8
Y2hpbGR8IHNvIHRoYXQgdGhlIG9jY2x1ZGVkIHBhcnRzIG9mIGNoaWxkIGFyZSBub3QgYSBzaW1w
bGUgcmVjdC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllcjEgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllcjIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hp
bGQtPmFkZENoaWxkKGxheWVyMSk7CisgICAgY2hpbGQtPmFkZENoaWxkKGxheWVyMik7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICBjaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoMjUwLCAyNTApOworICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5MCk7Cisg
ICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOworCisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAs
IDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwLCAxMCksIEludFNpemUo
NTAwLCA0NDApLCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVy
Mi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDEwLCA0NTApLCBJbnRTaXplKDUwMCwgNjApLCB0cnVlKTsKKworICAgIGNo
aWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXpl
ID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+
c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7
CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBh
cmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyMi5nZXQoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
MS5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
CisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50
UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24u
b2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAs
IDQyOSwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2
MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg5LCA0MzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCA0MjksIDYwLCAxKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDI5LCA2MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3MCwgNDMwLCAxLCA3MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAs
IDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDUwMCwgNjAsIDEpLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEs
IDYwLCA3MCkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0
aGF0IGRyYXcgaW50byBpdHNlbGYuCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgNDMw
LCA2MCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09j
Y2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRh
cmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0KCksIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAgRVhQ
RUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzOSwgNzAsIDYwKSkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDQwLCAxLCA2MCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAs
IDYwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDM5LCA3MCwgMSksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwg
NzAsIDYwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCA0MCwgMSwgNjApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwg
NDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcwLCAx
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MzAsIDQxLCA3MCwgNjApKSk7CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0
aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzAsIDQwLCA3MCwgNjApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKSk7CisKKworICAgIC8qIEp1c3Rp
ZmljYXRpb24gZm9yIHRoZSBhYm92ZSBvY2NsdXNpb24gZnJvbSB8bGF5ZXIxfCBhbmQgfGxheWVy
Mnw6CisKKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICB8MzAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcjF8OiAvLy8vLworICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgIFZpc2libGUgcmVnaW9uIG9mIHxsYXllcjJ8OiBc
XFxcXAorICAgICAgIHwgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisg
ICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwxMCAgICAgICAgICAgICAgIHwKKyAgICAgICB8
ICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKyAgfAorICAgICAgIHwgIHwgIHxc
XFxcXFxcXFxcXFx8Ly98ICAgICA0MjAgICAgICB8ICB8CisgICAgICAgfCAgfCAgfFxcXFxcXFxc
XFxcXHwvL3w2MCAgICAgICAgICAgIHwgIHwKKyAgICAgICB8ICB8ICB8XFxcXFxcXFxcXFxcfC8v
fCAgICAgICAgICAgICAgfCAgfAorICAgICAgICstLXwtLXwtLS0tLS0tLS0tLS18LS0rICAgICAg
ICAgICAgICB8ICB8CisgICAgICAgIDIwfDEwfCAgICAgNzAgICAgIHwgICAgICAgICAgICAgICAg
IHwgIHwKKyAgICAgICAgICB8ICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgfAor
ICAgICAgICAgIHwgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAg
ICAgfCAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgIHwKKyAgICAgICAgICB8ICB8
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgfAorICAgICAgICAgIHwgIHwgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICB8ICB8CisgICAgICAgICAgfCAgfCAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgIHwxMHwKKyAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tfC0tLS0tLS0t
LS0tLS0tLS0tfC0tKworICAgICAgICAgIHwgICAgICAgICAgICAgICB8IDQ5MCAgICAgICAgICAg
ICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAg
ICAgICAgICAgICA2MCAgICAgICAgICAgICAgIDQ0MAorICAgICAqLworfQorCitURVNUKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3ZlcmxhcHBpbmdTaWJsaW5n
U3VyZmFjZXMpCit7CisgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1z
IGFyZSBiZWluZyB1c2VkLgorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIx
ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIyID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAg
IHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hp
bGQxKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkMik7CisgICAgY2hpbGQxLT5hZGRDaGls
ZChsYXllcjEpOworICAgIGNoaWxkMi0+YWRkQ2hpbGQobGF5ZXIyKTsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0
ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQxLmdldCgpLCBjaGls
ZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MzAsIDMwKSwgSW50U2l6ZSg1MDAsIDUwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDUwMCwgNTAwKSwg
dHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIGNo
aWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgyMCwgNDApLCBJbnRTaXplKDUwMCwgNTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoNTAwLCA1MDAp
LCB0cnVlKTsKKworICAgIGNoaWxkMS0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICBjaGls
ZDItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDItPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyMi5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCA0MCwgODAsIDYw
KSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQ
RUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwg
SW50UmVjdCgwLCA0MjAsIDYwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lv
bi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEsIDQyMCwgNjAsIDgwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVj
dCgwLCA0MTksIDYwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2Ns
dWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMCwgNDIwLCA2MSwgODApKSk7CisgICAgRVhQRUNU
X0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQy
MCwgNjAsIDgxKSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdz
IHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQy
MCwgNjAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQy
LmdldCgpLCBJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtP
Y2NsdWRlZEJlaGluZExheWVyKGNoaWxkMi5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmZpbmlzaGVk
VGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDIuZ2V0KCksIGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hp
bGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihsYXllcjEuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAs
IDgwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0
cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MzAsIDcwLCA3MCks
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQ
RUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5z
aXplKCkpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIu
Z2V0KCksIEludFJlY3QoMCwgNDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xLCA0MzAsIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCks
IEludFJlY3QoMCwgNDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNp
b24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQzMCwgNzEsIDcwKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVj
dCgwLCA0MzAsIDcwLCA3MSkpKTsKKworICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5
IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYsIGJ1dCB0aGUgfGNoaWxkMXwgc3VyZmFjZSBz
aG91bGQgYmUgb2NjbHVkZWQgYnkgdGhlIHxjaGlsZDJ8IHN1cmZhY2UuCisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgwLCA0MzAsIDEwLCA3MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA3MCkpKTsKKwor
ICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDEuZ2V0KCkpOworICAg
IG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQxLmdldCgpLCBjaGls
ZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJT
dXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjAsIDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVl
blNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAs
IDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRz
KCkpOworICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzAsIDgwLCA3MCkpKTsKKworICAgIEVY
UEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMw
LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA3
MCwgNzApKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgyMCwgNDAsIDgwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTksIDQwLCA4MCwgNjAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDIwLCAzOSwgODAsIDYwKSkpOworCisgICAgLy8gfGNoaWxkMXwgYW5kIHxjaGls
ZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBzbyB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4K
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCAzMCwgODAsIDcwKSwgb2NjbHVzaW9uLnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAzMCwg
ODAsIDcwKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVz
aW9uOgorICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgMzAgICAgICAgICAgICAg
ICB8ICAgICAgIGNoaWxkMQorICAgICAgfCAgMzArIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKKyAgMTAwIHwgIDQwfCAgICAgICAgICAgICAgICB8ICAgICBjaGlsZDIgICAgICB8
CisgICAgICB8MjArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorICAgICAg
fCAgfCB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IHwKKyAgICAgIHwgIHwgfCAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8CisgICAgICB8ICB8IHwgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgIHwgfAorICAgICAgKy0tfC18LS0tLS0tLS0tLS0tLS0tLSsg
ICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCB8IDUwMAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Cisg
ICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS18LSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAg
ICAgICAgICAgICAgICAgICAgICAgNTAwCisgICAgICovCit9CisKK1RFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCit7CisgICAgLy8gVGhp
cyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgorICAgIFRl
c3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hp
bGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQxKTsKKyAgICBwYXJlbnQtPmFkZENo
aWxkKGNoaWxkMik7CisgICAgY2hpbGQxLT5hZGRDaGlsZChsYXllcjEpOworICAgIGNoaWxkMi0+
YWRkQ2hpbGQobGF5ZXIyKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNm
b3JtOworICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CisgICAgY2hpbGRU
cmFuc2Zvcm0ucm90YXRlKDkwKTsKKyAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwg
LTI1MCk7CisKKyAgICAvLyBUaGUgb3duaW5nIGxheWVycyBoYXZlIHZlcnkgZGlmZmVyZW50IGJv
dW5kcyBmcm9tIHRoZSBzdXJmYWNlcyB0aGF0IHRoZXkgb3duLgorICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDAp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDEuZ2V0KCks
IGNoaWxkVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgzMCwgMzApLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KC0xMCwgLTEwKSwgSW50U2l6ZSg1MTAs
IDUxMCksIHRydWUpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdl
dCgpLCBjaGlsZFRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMjAsIDQwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllcjIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgtMTAsIC0xMCksIEludFNpemUo
NTEwLCA1MTApLCB0cnVlKTsKKworICAgIC8vIE1ha2UgdGhlbSBib3RoIHJlbmRlciBzdXJmYWNl
cworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMo
KS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAu
NSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBjaGlsZDEtPnNldEZpbHRlcnMo
ZmlsdGVycyk7CisgICAgY2hpbGQyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgY2hpbGQx
LT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICBjaGlsZDItPnNldE1hc2tzVG9Cb3VuZHMo
ZmFsc2UpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5
ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lv
bi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOworCisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAsIDgwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFy
Z2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEo
dHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwg
NzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxk
Mi5nZXQoKSwgSW50UmVjdCgtMTEsIDQyMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQxOSwgNzAs
IDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5n
ZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzEsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwg
b2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgx
KSkpOworCisgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJh
dyBpbnRvIGl0c2VsZi4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDIwLCA3MCwg
ODApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZDIuZ2V0KCks
IEludFJlY3QoLTEwLCA0MjAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1
c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDMwLCAyNTAsIDEsIDEp
KSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQyLmdldCgp
KTsKKyAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMi5nZXQo
KSwgY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVu
dGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2Nj
bHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyMS5nZXQoKSk7CisKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDIwLCAyMCwgODAsIDgwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbklu
U2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSh0cnVl
LCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwg
NzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdl
dCgpLCBJbnRSZWN0KC0xMSwgNDMwLCA4MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDI5LCA4MCwgNzAp
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgp
LCBJbnRSZWN0KC0xMCwgNDMwLCA4MSwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBvY2Ns
dXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzEpKSk7
CisKKyAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGlu
dG8gaXRzZWxmLCBidXQgdGhlIHxjaGlsZDF8IHN1cmZhY2Ugc2hvdWxkIGJlIG9jY2x1ZGVkIGJ5
IHRoZSB8Y2hpbGQyfCBzdXJmYWNlLgorICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0
MzAsIDEwLCA4MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
MS5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUSh0cnVl
LCBvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAs
IDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVk
ZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KC0xLCA0MzAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0
KDAsIDQyOSwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLnN1cmZh
Y2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMSwgNDMwLCA3MCwgODApKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwg
SW50UmVjdCgwLCA0MzEsIDcwLCA4MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihjaGlsZDEuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJl
bmRlclN1cmZhY2UoY2hpbGQxLmdldCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
b2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEo
MnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgydSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
IEVYUEVDVF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVj
dCgyMCwgMjAsIDgwLCA4MCkpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyMCwgNzAsIDgwKSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwg
MjAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDE5LCA3MCwgODApKSk7CisKKyAgICBFWFBFQ1RfRVEo
dHJ1ZSwgb2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzAsIDgw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMTksIDMwLCA4MCwgNzApKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAyOSwgODAsIDcwKSkp
OworCisgICAgLy8gfGNoaWxkMXwgYW5kIHxjaGlsZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBz
byB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4KKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDIwLCAyMCwgODAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAyMCwgODAsIDgwKSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgb2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAs
IDUwLCAxLCAxKSkpOworCisKKyAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2Nj
bHVzaW9uOgorICAgICAgICAgICAgICAgMTAwCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgICAgfCAgICAyMCAgICAgICAgICAgICAgIHwgICAgICAgbGF5ZXIxCisgICAgICB8ICAz
MCsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAxMDAgfCAgMzB8ICAgICAg
ICAgICAgICAgIHwgICAgIGxheWVyMiAgICAgIHwKKyAgICAgIHwyMCstLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKyB8CisgICAgICB8ICB8IHwgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgIHwgfAorICAgICAgfCAgfCB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICB8IHwKKyAgICAgIHwgIHwgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8Cisg
ICAgICArLS18LXwtLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwgfAorICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgNTAwCisgICAgICAgICB8IHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCB8CisgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgfAorICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IHwKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8CisgICAg
ICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtKworICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICA1MDAKKyAg
ICAgKi8KK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBvY2NsdXNpb25JbnRlcmFj
dGlvbldpdGhGaWx0ZXJzKQoreworICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJh
bnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1
c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBibHVyTGF5
ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBvcGFjaXR5
TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBvcGFx
dWVMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGJsdXJMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChvcGFjaXR5TGF5ZXIpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQob3BhcXVlTGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwg
MjUwKTsKKyAgICBsYXllclRyYW5zZm9ybS5yb3RhdGUoOTApOworICAgIGxheWVyVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhibHVyTGF5ZXIuZ2V0KCksIGxheWVyVHJh
bnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgzMCwg
MzApLCBJbnRTaXplKDUwMCwgNTAwKSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhvcGFxdWVMYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDAp
LCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKG9wYWNpdHlMYXllci5n
ZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDMwLCAzMCksIEludFNpemUoNTAwLCA1MDApLCB0cnVlKTsKKworICAgIHsKKyAg
ICAgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgICAgICBmaWx0ZXJzLm9wZXJhdGlv
bnMoKS5hcHBlbmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgxMCwgV2ViQ29y
ZTo6UGVyY2VudCksIEZpbHRlck9wZXJhdGlvbjo6QkxVUikpOworICAgICAgICBibHVyTGF5ZXIt
PnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgfQorCisgICAgeworICAgICAgICBGaWx0ZXJPcGVy
YXRpb25zIGZpbHRlcnM7CisgICAgICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRSkpOworICAgICAgICBvcGFxdWVMYXllci0+c2V0RmlsdGVycyhmaWx0
ZXJzKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsK
KyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWSkp
OworICAgICAgICBvcGFjaXR5TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgfQorCisK
KyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7Cisg
ICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgLy8gT3BhY2l0eSBsYXllciB3
b24ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbi4KKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRS
ZW5kZXJTdXJmYWNlKG9wYWNpdHlMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIob3BhY2l0eUxheWVyLmdldCgpKTsKKyAgICBvY2Ns
dXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKG9wYWNpdHlMYXllci5nZXQoKSwgb3Bh
Y2l0eUxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5pc0VtcHR5KCkpOworCisgICAgLy8g
QW5kIGhhcyBub3RoaW5nIHRvIGNvbnRyaWJ1dGUgdG8gaXRzIHBhcmVudCBzdXJmYWNlLgorICAg
IG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5pc0VtcHR5KCkpOworCisgICAgLy8gT3BhcXVlIGxheWVyIHdpbGwgY29udHJp
YnV0ZSB0byBvY2NsdXNpb24uCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFj
ZShvcGFxdWVMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24ubWFya09jY2x1
ZGVkQmVoaW5kTGF5ZXIob3BhcXVlTGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5maW5pc2hl
ZFRhcmdldFJlbmRlclN1cmZhY2Uob3BhcXVlTGF5ZXIuZ2V0KCksIG9wYXF1ZUxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3
MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVY
UEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNp
emUoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MzAsIDcwLCA3MCksIG9jY2x1
c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkp
OworCisgICAgLy8gQW5kIGl0IGdldHMgdHJhbnNsYXRlZCB0byB0aGUgcGFyZW50IHN1cmZhY2Uu
CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNU
X0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisK
KyAgICAvLyBUaGUgYmx1ciBsYXllciBuZWVkcyB0byB0aHJvdyBhd2F5IGFueSBvY2NsdXNpb24g
ZnJvbSBvdXRzaWRlIGl0cyBzdWJ0cmVlLgorICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRl
clN1cmZhY2UoYmx1ckxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuaXNFbXB0eSgpKTsKKwor
ICAgIC8vIEFuZCBpdCB3b24ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbi4KKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoYmx1ckxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNp
b24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGJsdXJMYXllci5nZXQoKSwgYmx1ckxheWVy
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEJ1dCB0aGUgb3Bh
cXVlIGxheWVyJ3Mgb2NjbHVzaW9uIGlzIHByZXNlcnZlZCBvbiB0aGUgcGFyZW50LgorICAgIG9j
Y2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>